@lmctl-ai/lmctl 0.2.279 → 0.2.280

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.
@@ -472,11 +472,11 @@ Calls return {status:"ok", result} | {status:"error", error:{code, message}} | {
472
472
  `))}return s}var te,ss=M(()=>{te=class t extends Error{line;column;codeblock;constructor(e,n){let[r,s]=oO(n.toml,n.ptr),i=aO(n.toml,r,s);super(`Invalid TOML document: ${e}
473
473
 
474
474
  ${i}`,n),this.line=r,this.column=s,this.codeblock=i}static x(e,n,r){throw new t(e,{toml:n.s,ptr:r??n.p})}}});function wl(t){let e=t.p,n=t.s.charCodeAt(t.p++),r=n,s=n===39,i=n===t.s.charCodeAt(t.p)&&n===t.s.charCodeAt(t.p+1);i&&((n=t.s.charCodeAt(t.p+=2))===10?t.p++:n===13&&t.s.charCodeAt(t.p+1)===10&&(t.p+=2));let o="",a=t.p,l=0;for(;t.p<t.s.length;t.p++)if(n=t.s.charCodeAt(t.p),i&&(n===10||n===13&&t.s.charCodeAt(t.p+1)===10))l=l&&3;else if(n<32&&n!==9||n===127)te.x("control characters are not allowed in strings",t);else if((!l||l===3)&&n===r&&(!i||t.s.charCodeAt(t.p+1)===r&&t.s.charCodeAt(t.p+2)===r)){if(i&&(t.s.charCodeAt(t.p+3)===r&&t.p++,t.s.charCodeAt(t.p+3)===r&&t.p++),!l){let c=t.s.slice(a,t.p);o=o?o+c:c}return t.p+=i?3:1,o}else if(!l)!s&&n===92&&(o+=t.s.slice(a,a=t.p),l=1);else if(l===1)if(n===120||n===117||n===85){let c=t.p++-1,u=0,d=n===120?2:n===117?4:8;for(let m=0;m<d;m++,t.p++){let p=t.s.charCodeAt(t.p),f=p>=48&&p<=57?p-48:p>=65&&p<=70?p-65+10:p>=97&&p<=102?p-97+10:-1;f<0&&te.x("invalid non-hex character in unicode escape",t),u=u<<4|f}(u<0||u>1114111||u>=55296&&u<=57343)&&te.x("invalid unicode escape",t,c),o+=String.fromCodePoint(u),a=t.p--,l=0}else i&&(n===32||n===9)?l=2:(n===98?o+="\b":n===116?o+=" ":n===110?o+=`
475
- `:n===102?o+="\f":n===114?o+="\r":n===101?o+="\x1B":n===34?o+='"':n===92?o+="\\":te.x("unrecognised escape sequence",t),a=t.p+1,l=0);else n!==32&&n!==9&&(l===2&&te.x("invalid escape: only line-ending whitespace may be escaped",t,a),l=!s&&n===92?1:0,a=t.p);te.x("unfinished string",t,e)}var ym=M(()=>{ss();});var lO,fo,_m=M(()=>{lO=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,fo=class t extends Date{#t=!1;#n=!1;#e=null;constructor(e,n,r){let s=!0,i=!0,o="Z",a;if(typeof e=="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}n===2?(o=null,e+="Z"):(a=e.charCodeAt(e.length-1))!==90&&a!==122&&(o=e.slice(e.length-6)),r&&(e=e.slice(0,10)+"T"+e.slice(11))}else n===4&&(e=+e.slice(0,2)>23?"":`0000-01-01T${e}Z`);s=n!==4,i=n!==3}else{let l=e.match(lO);l?(l[1]||(s=!1,e=`0000-01-01T${e}`),i=!!l[2],i&&e[10]===" "&&(e=e.replace(" ","T")),l[2]&&+l[2]>23?e="":(o=l[3]||null,!o&&i&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=s,this.#n=i,this.#e=o)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return e;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,n="Z"){let r=new t(e);return r.#e=n,r}static wrapAsLocalDateTime(e){let n=new t(e);return n.#e=null,n}static wrapAsLocalDate(e){let n=new t(e);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(e){let n=new t(e);return n.#t=!1,n.#e=null,n}}});function Pt(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function bm(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function ho(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||te.x("document contains excessively nested structures. aborting.",t);let s=r===91?H_(t):U_(t);return t.d++,s}return r===34||r===39?wl(t):r===116?((t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)&&te.x("invalid value",t,n),t.p++,!0):r===102?((t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)&&te.x("invalid value",t,n),t.p++,!1):r===43||r===45?El(t,t.p,t.s.charCodeAt(++t.p),44-r,e):t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45?cO(t,r,e):t.s.charCodeAt(t.p+2)===58?uO(t,r,e):El(t,t.p,r,0,e)}function El(t,e,n,r,s){let i=n,o=0,a=!1;if(i===105)return(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)&&te.x("invalid value",t,e),t.p++,(r||1)/0;if(i===110)return(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)&&te.x("invalid value",t,e),t.p++,NaN;if(i===48){if(++t.p>=t.s.length||bm(i=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(i===120)return vm(t,e,16,s);if(i===98)return vm(t,e,2,s);if(i===111)return vm(t,e,8,s)}i===46?o=2:i===101||i===69?o=4:te.x("illegal leading zero",t,e)}else Pt(i)||te.x("invalid value",t,e);for(;++t.p<t.s.length&&(i=t.s.charCodeAt(t.p),!bm(i,s));)o||(o=1),i===95?(o&1||te.x("illegal underscore",t),o+=11,a=!0):o===1&&i===46?o=2:(o===1||o===3)&&(i===101||i===69)?o=4:o===4&&(i===43||i===45)||(Pt(i)?o>9?o-=11:o&1||o++:te.x("illegal character in numeric literal",t));if(!o){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}o&1||te.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),o>1?parseFloat(l):j_(t,l,10,e)}function vm(t,e,n,r){let s,i=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!bm(s,r));)s===95?(i&1&&te.x("illegal underscore",t),i=3):Pt(s,n)?i&1&&i--:te.x("illegal character in numeric literal",t);i&1&&te.x("unfinished numeric value",t);let o=t.s.slice(e+2,t.p);return i&&(o=o.replaceAll("_","")),j_(t,o,n,e)}function j_(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;te.x("integer value cannot be represented losslessly",t,r)}return s}return BigInt(n===10?e:(n===2?"0b":n===8?"0o":"0x")+e)}function cO(t,e,n){let r=t.p++,s;if(!Pt(e)||!Pt(t.s.charCodeAt(t.p++))||!Pt(t.s.charCodeAt(t.p++))||!Pt(t.s.charCodeAt(t.p++)))return El(t,t.p=r,e,0,n);if(t.p+=5,Pt(t.s.charCodeAt(t.p++))||te.x("invalid date-time: date part is malformed",t,r),t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(s=!0,!Pt(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let o=t.s.slice(r,t.p);return go(t,o,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58&&te.x("invalid date-time: time part is malformed",t,r),t.s.charCodeAt(t.p+=3)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;Pt(t.s.charCodeAt(++t.p)););if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let o=t.s.slice(r,++t.p);return go(t,o,1,s,r,"[+00:00]")}if(e===43||e===45){let o=t.s.slice(r,t.p+=6);return go(t,o,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let i=t.s.slice(r,t.p);return go(t,i,2,s,r)}function uO(t,e,n){let r=t.p;if(!Pt(e)||!Pt(t.s.charCodeAt(++t.p)))return El(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;Pt(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return go(t,s,4,!1,r)}function go(t,e,n,r,s,i){if(t.ld){let o=new fo(e,n,r);return o.isValid()||te.x("invalid date",t,s),o}try{switch(i&&(e+=i),n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(o){te.x(o instanceof Error?o.message:""+o,t,s)}}var wm=M(()=>{ym();Em();ss();_m();});function dO(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}(e<32&&e!==9||e===127)&&te.x("control characters are not allowed in comments",t)}}function rn(t,e,n){let r;for(;t.p<t.s.length;){for(;t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10));)t.p++;if(n||r!==35)break;dO(t)}}var Tm=M(()=>{ss();});function Tl(t,e=61){let n,r=0,s=[],i,o=t.s.charCodeAt(n=t.p);do{if(o===e)return r||te.x("unexpected end of key",t),r===1&&s.push(t.s.slice(i,t.p)),t.p++,s;o===46?(r||te.x("illegal empty bare key",t),r===1&&s.push(t.s.slice(i,t.p)),r=0):!r&&(o===34||o===39)?(o===t.s.charCodeAt(t.p+1)&&o===t.s.charCodeAt(t.p+2)&&te.x("illegal quoted key: multiline strings are not allowed",t),s.push(wl(t)),r=2,t.p--):o===32||o===9?r===1&&(s.push(t.s.slice(i,t.p)),r=2):r===2||o<48&&o!==45||o>57&&o<65||o>90&&o<97&&o!==95||o>122?te.x("illegal character in key",t):r||(r=1,i=t.p)}while(o=t.s.charCodeAt(++t.p));te.x("incomplete key-value: cannot find end of key",t,n)}function U_(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(rn(t),(s=t.s.charCodeAt(t.p))===125)return t.p++,n;let i,o=n,a=!1,l=t.p,c=Tl(t);for(let d=0;d<c.length;d++){d&&(o=a?o[i]:o[i]=Object.create(null)),i=c[d],(a=Object.hasOwn(o,i))&&(typeof o[i]!="object"||r.has(o[i]))&&te.x("trying to redefine an already defined value",t,l);let m=i==="__proto__";if(t.uk&&(m||i==="constructor")){o=t.uk!==1&&te.x("document contains an unsafe property",t,l);break}!a&&m&&Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0})}a&&te.x("trying to redefine an already defined value",t,l),rn(t,!0,!0);let u=ho(t,125);if(o&&typeof(o[i]=u)=="object"&&r.add(u),rn(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&te.x("expected comma or end of structure",t,t.p-1)}te.x("unfinished table",t,e)}function H_(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(rn(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(ho(t,93)),rn(t),(r=t.s.charCodeAt(t.p++))===93)return n;r!==44&&te.x("expected comma or end of structure",t,t.p-1)}te.x("unfinished array",t,e)}var Em=M(()=>{ym();wm();Tm();ss();});function B_(t,e,n,r,s){let i=n,o=r,a,l=!1,c;for(let u=0;u<e.length;u++){if(u){if(i=l?i[a]:i[a]=Object.create(null),o=(c=o[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let d=i.length-1;i=i[d],o=o[d].c}}if(a=e[u],(l=Object.hasOwn(i,a))&&o[a]?.t===0&&o[a]?.d)return null;if(!l){let d=a==="__proto__";if(t.uk&&(d||a==="constructor"))return!1;d&&(Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0})),o[a]={t:u<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=o[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,i[a]=[]),i[a].push(i=Object.create(null)),c.c[c.i++]=c={t:1,d:!1,i:0,c:Object.create(null)}),c.d))return null;if(c.d=!0,s===1)i=l?i[a]:i[a]=Object.create(null);else if(s===0&&l)return null;return[a,i,c.c]}function W_(t,e,n){(e===null||t.uk===2)&&te.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function Gs(t,e={}){let n={s:t,p:0,d:e.maxDepth??1e3,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),s=Object.create(null),i,o=!1,a=r,l=s;for(t.charCodeAt(0)===65279&&n.p++,rn(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;i=n.p+=+c,o=!1;let u=Tl(n,93);c&&(t.charCodeAt(n.p)!==93&&te.x("expected end of table array declaration",n),n.p++);let d=B_(n,u,r,s,c?2:1);d?(l=d[2],a=d[1]):(W_(n,d,i),o=!0)}else{i=n.p;let c=Tl(n),u=B_(n,c,a,l,0);!u&&!o&&W_(n,u,i),rn(n,!0,!0);let d=ho(n,void 0);u&&!o&&(u[1][u[0]]=d)}rn(n,!0),n.p<t.length&&(i=t.charCodeAt(n.p))!==10&&(i!==13||t.charCodeAt(n.p+1)!==10)&&te.x("each key-value declaration must be followed by an end-of-line",n),rn(n)}return r}var q_=M(()=>{Em();wm();Tm();ss();});var LG,X_=M(()=>{LG=!!"".isWellFormed});var Sl=M(()=>{q_();X_();_m();ss();});import{readFileSync as mO}from"node:fs";import{resolve as pO}from"node:path";function G_(t){let e=pO(t),n;try{n=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(mO(e))}catch(i){let o=i;throw new yo(e,o.code==="ENOENT"?"missing":"read",o.message)}let r=n.startsWith("\uFEFF")?n.slice(1):n,s;try{s=Gs(r,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(i){let o=i;throw new yo(e,"syntax",o.message,o.line??1,(o.column??1)+(n.startsWith("\uFEFF")&&o.line===1?1:0))}try{return qs({path:e,properties:s})}catch(i){throw new yo(e,"schema",i instanceof Error?i.message:String(i))}}var yo,J_=M(()=>{"use strict";Sl();Xs();yo=class extends Error{path;kind;line;column;constructor(e,n,r,s=1,i=1){super(n==="syntax"||n==="schema"?`Invalid ${e}:${s}:${i}: ${r}`:`Cannot read ${e}: ${r}`),this.path=e,this.kind=n,this.line=s,this.column=i,this.name="PropertyFileError"}}});var Y_={};Mn(Y_,{createGit:()=>yO,parseLog:()=>K_,parseStatus:()=>z_});import{resolve as fO}from"node:path";function V_(t,e){if(typeof t!="string"||!t||t.includes("\0"))throw Error("git: "+e+" must be a nonempty NUL-free string");return t}function hO(t,e){let n=[],r=t;for(;n.length<e;){let s=r.indexOf(" ");if(s<0)throw Error("git: malformed porcelain v2 record");n.push(r.slice(0,s)),r=r.slice(s+1)}return{tokens:n,path:r}}function z_(t){let e={branch:null,upstream:null,detached:!1,unborn:!1,ahead:0,behind:0,staged:[],unstaged:[],untracked:[],conflicted:[],renamed:[],submodules:[]},n=t.split("\0"),r=!1,s=!1;if(n.pop()!=="")throw Error("git: incomplete porcelain output");for(let i=0;i<n.length;i++){let o=n[i];if(o.startsWith("# branch.head ")){r=!0;let a=o.slice(14);e.detached=a==="(detached)",e.branch=e.detached?null:a}else if(o.startsWith("# branch.oid "))s=!0,e.unborn=o.slice(13)==="(initial)";else if(o.startsWith("# branch.upstream "))e.upstream=o.slice(18);else if(o.startsWith("# branch.ab ")){let a=o.match(/^# branch.ab \+(\d+) -(\d+)$/);if(!a)throw Error("git: malformed ahead/behind");if(e.ahead=Number(a[1]),e.behind=Number(a[2]),!Number.isSafeInteger(e.ahead)||!Number.isSafeInteger(e.behind))throw Error("git: invalid ahead/behind")}else if(o.startsWith("? "))e.untracked.push(o.slice(2));else if(/^[12u] /.test(o)){let a=o[0]==="2",l=o[0]==="u",c=hO(o,l?10:a?9:8),u=c.tokens[1];if(!/^[.MADRCUT?!]{2}$/.test(u))throw Error("git: invalid status flags");if(!l&&u[0]!=="."&&e.staged.push(c.path),!l&&u[1]!=="."&&e.unstaged.push(c.path),l&&e.conflicted.push(c.path),c.tokens[2].startsWith("S")){let d=c.tokens[2];e.submodules.push({path:c.path,commit:d[1]==="C",modified:d[2]==="M",untracked:d[3]==="U"})}if(a){let d=n[++i];if(!d)throw Error("git: missing original rename path");e.renamed.push({from:d,to:c.path,status:u})}}else if(!o.startsWith("# "))throw Error("git: unknown porcelain record")}if(!r||!s)throw Error("git.status: missing branch headers");return e}function K_(t){let e=t.split("\0");if(e.pop()!==""||!e.length||e.length%4)throw Error("git: malformed NUL log records");let n=[];for(let r=0;r<e.length;r+=4){if(!/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(e[r]))throw Error("git: malformed log hash");n.push({hash:e[r],sha:e[r],author:e[r+1],date:e[r+2].replace(/Z$/,"+00:00"),subject:kl(e[r+3])})}return n}function yO(t){let e=(c,u)=>["git","--no-pager","--no-optional-locks","-C",fO(t.cwd,V_(c,"directory")),"-c","color.ui=false","-c","core.quotePath=false","-c","core.fsmonitor=false",...u],n=(c,u,d=6e4)=>{if(typeof d!="number"||!Number.isSafeInteger(d)||d<0||d>2147483647)throw Error("git: invalid timeout_ms");let m=e(c,u);return jn(t.runReadonlyProgram(m,d),p=>({r:p,words:m}))},r=({r:c,words:u})=>{if(c.code!==0||c.signal!==null||c.timed_out)throw Error(gO("git command "+JSON.stringify(u)+" failed (exit "+c.code+", signal "+c.signal+", timeout "+c.timed_out+"): "+kl(c.stderr).split(`
475
+ `:n===102?o+="\f":n===114?o+="\r":n===101?o+="\x1B":n===34?o+='"':n===92?o+="\\":te.x("unrecognised escape sequence",t),a=t.p+1,l=0);else n!==32&&n!==9&&(l===2&&te.x("invalid escape: only line-ending whitespace may be escaped",t,a),l=!s&&n===92?1:0,a=t.p);te.x("unfinished string",t,e)}var ym=M(()=>{ss();});var lO,fo,_m=M(()=>{lO=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,fo=class t extends Date{#t=!1;#n=!1;#e=null;constructor(e,n,r){let s=!0,i=!0,o="Z",a;if(typeof e=="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}n===2?(o=null,e+="Z"):(a=e.charCodeAt(e.length-1))!==90&&a!==122&&(o=e.slice(e.length-6)),r&&(e=e.slice(0,10)+"T"+e.slice(11))}else n===4&&(e=+e.slice(0,2)>23?"":`0000-01-01T${e}Z`);s=n!==4,i=n!==3}else{let l=e.match(lO);l?(l[1]||(s=!1,e=`0000-01-01T${e}`),i=!!l[2],i&&e[10]===" "&&(e=e.replace(" ","T")),l[2]&&+l[2]>23?e="":(o=l[3]||null,!o&&i&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=s,this.#n=i,this.#e=o)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return e;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,n="Z"){let r=new t(e);return r.#e=n,r}static wrapAsLocalDateTime(e){let n=new t(e);return n.#e=null,n}static wrapAsLocalDate(e){let n=new t(e);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(e){let n=new t(e);return n.#t=!1,n.#e=null,n}}});function Pt(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function bm(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function ho(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||te.x("document contains excessively nested structures. aborting.",t);let s=r===91?H_(t):U_(t);return t.d++,s}return r===34||r===39?wl(t):r===116?((t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)&&te.x("invalid value",t,n),t.p++,!0):r===102?((t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)&&te.x("invalid value",t,n),t.p++,!1):r===43||r===45?El(t,t.p,t.s.charCodeAt(++t.p),44-r,e):t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45?cO(t,r,e):t.s.charCodeAt(t.p+2)===58?uO(t,r,e):El(t,t.p,r,0,e)}function El(t,e,n,r,s){let i=n,o=0,a=!1;if(i===105)return(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)&&te.x("invalid value",t,e),t.p++,(r||1)/0;if(i===110)return(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)&&te.x("invalid value",t,e),t.p++,NaN;if(i===48){if(++t.p>=t.s.length||bm(i=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(i===120)return vm(t,e,16,s);if(i===98)return vm(t,e,2,s);if(i===111)return vm(t,e,8,s)}i===46?o=2:i===101||i===69?o=4:te.x("illegal leading zero",t,e)}else Pt(i)||te.x("invalid value",t,e);for(;++t.p<t.s.length&&(i=t.s.charCodeAt(t.p),!bm(i,s));)o||(o=1),i===95?(o&1||te.x("illegal underscore",t),o+=11,a=!0):o===1&&i===46?o=2:(o===1||o===3)&&(i===101||i===69)?o=4:o===4&&(i===43||i===45)||(Pt(i)?o>9?o-=11:o&1||o++:te.x("illegal character in numeric literal",t));if(!o){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}o&1||te.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),o>1?parseFloat(l):j_(t,l,10,e)}function vm(t,e,n,r){let s,i=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!bm(s,r));)s===95?(i&1&&te.x("illegal underscore",t),i=3):Pt(s,n)?i&1&&i--:te.x("illegal character in numeric literal",t);i&1&&te.x("unfinished numeric value",t);let o=t.s.slice(e+2,t.p);return i&&(o=o.replaceAll("_","")),j_(t,o,n,e)}function j_(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;te.x("integer value cannot be represented losslessly",t,r)}return s}return BigInt(n===10?e:(n===2?"0b":n===8?"0o":"0x")+e)}function cO(t,e,n){let r=t.p++,s;if(!Pt(e)||!Pt(t.s.charCodeAt(t.p++))||!Pt(t.s.charCodeAt(t.p++))||!Pt(t.s.charCodeAt(t.p++)))return El(t,t.p=r,e,0,n);if(t.p+=5,Pt(t.s.charCodeAt(t.p++))||te.x("invalid date-time: date part is malformed",t,r),t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(s=!0,!Pt(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let o=t.s.slice(r,t.p);return go(t,o,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58&&te.x("invalid date-time: time part is malformed",t,r),t.s.charCodeAt(t.p+=3)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;Pt(t.s.charCodeAt(++t.p)););if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let o=t.s.slice(r,++t.p);return go(t,o,1,s,r,"[+00:00]")}if(e===43||e===45){let o=t.s.slice(r,t.p+=6);return go(t,o,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let i=t.s.slice(r,t.p);return go(t,i,2,s,r)}function uO(t,e,n){let r=t.p;if(!Pt(e)||!Pt(t.s.charCodeAt(++t.p)))return El(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;Pt(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return go(t,s,4,!1,r)}function go(t,e,n,r,s,i){if(t.ld){let o=new fo(e,n,r);return o.isValid()||te.x("invalid date",t,s),o}try{switch(i&&(e+=i),n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(o){te.x(o instanceof Error?o.message:""+o,t,s)}}var wm=M(()=>{ym();Em();ss();_m();});function dO(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}(e<32&&e!==9||e===127)&&te.x("control characters are not allowed in comments",t)}}function rn(t,e,n){let r;for(;t.p<t.s.length;){for(;t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10));)t.p++;if(n||r!==35)break;dO(t)}}var Tm=M(()=>{ss();});function Tl(t,e=61){let n,r=0,s=[],i,o=t.s.charCodeAt(n=t.p);do{if(o===e)return r||te.x("unexpected end of key",t),r===1&&s.push(t.s.slice(i,t.p)),t.p++,s;o===46?(r||te.x("illegal empty bare key",t),r===1&&s.push(t.s.slice(i,t.p)),r=0):!r&&(o===34||o===39)?(o===t.s.charCodeAt(t.p+1)&&o===t.s.charCodeAt(t.p+2)&&te.x("illegal quoted key: multiline strings are not allowed",t),s.push(wl(t)),r=2,t.p--):o===32||o===9?r===1&&(s.push(t.s.slice(i,t.p)),r=2):r===2||o<48&&o!==45||o>57&&o<65||o>90&&o<97&&o!==95||o>122?te.x("illegal character in key",t):r||(r=1,i=t.p)}while(o=t.s.charCodeAt(++t.p));te.x("incomplete key-value: cannot find end of key",t,n)}function U_(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(rn(t),(s=t.s.charCodeAt(t.p))===125)return t.p++,n;let i,o=n,a=!1,l=t.p,c=Tl(t);for(let d=0;d<c.length;d++){d&&(o=a?o[i]:o[i]=Object.create(null)),i=c[d],(a=Object.hasOwn(o,i))&&(typeof o[i]!="object"||r.has(o[i]))&&te.x("trying to redefine an already defined value",t,l);let m=i==="__proto__";if(t.uk&&(m||i==="constructor")){o=t.uk!==1&&te.x("document contains an unsafe property",t,l);break}!a&&m&&Object.defineProperty(o,i,{enumerable:!0,configurable:!0,writable:!0})}a&&te.x("trying to redefine an already defined value",t,l),rn(t,!0,!0);let u=ho(t,125);if(o&&typeof(o[i]=u)=="object"&&r.add(u),rn(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&te.x("expected comma or end of structure",t,t.p-1)}te.x("unfinished table",t,e)}function H_(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(rn(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(ho(t,93)),rn(t),(r=t.s.charCodeAt(t.p++))===93)return n;r!==44&&te.x("expected comma or end of structure",t,t.p-1)}te.x("unfinished array",t,e)}var Em=M(()=>{ym();wm();Tm();ss();});function B_(t,e,n,r,s){let i=n,o=r,a,l=!1,c;for(let u=0;u<e.length;u++){if(u){if(i=l?i[a]:i[a]=Object.create(null),o=(c=o[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let d=i.length-1;i=i[d],o=o[d].c}}if(a=e[u],(l=Object.hasOwn(i,a))&&o[a]?.t===0&&o[a]?.d)return null;if(!l){let d=a==="__proto__";if(t.uk&&(d||a==="constructor"))return!1;d&&(Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0})),o[a]={t:u<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=o[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,i[a]=[]),i[a].push(i=Object.create(null)),c.c[c.i++]=c={t:1,d:!1,i:0,c:Object.create(null)}),c.d))return null;if(c.d=!0,s===1)i=l?i[a]:i[a]=Object.create(null);else if(s===0&&l)return null;return[a,i,c.c]}function W_(t,e,n){(e===null||t.uk===2)&&te.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function Gs(t,e={}){let n={s:t,p:0,d:e.maxDepth??1e3,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),s=Object.create(null),i,o=!1,a=r,l=s;for(t.charCodeAt(0)===65279&&n.p++,rn(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;i=n.p+=+c,o=!1;let u=Tl(n,93);c&&(t.charCodeAt(n.p)!==93&&te.x("expected end of table array declaration",n),n.p++);let d=B_(n,u,r,s,c?2:1);d?(l=d[2],a=d[1]):(W_(n,d,i),o=!0)}else{i=n.p;let c=Tl(n),u=B_(n,c,a,l,0);!u&&!o&&W_(n,u,i),rn(n,!0,!0);let d=ho(n,void 0);u&&!o&&(u[1][u[0]]=d)}rn(n,!0),n.p<t.length&&(i=t.charCodeAt(n.p))!==10&&(i!==13||t.charCodeAt(n.p+1)!==10)&&te.x("each key-value declaration must be followed by an end-of-line",n),rn(n)}return r}var q_=M(()=>{Em();wm();Tm();ss();});var PG,X_=M(()=>{PG=!!"".isWellFormed});var Sl=M(()=>{q_();X_();_m();ss();});import{readFileSync as mO}from"node:fs";import{resolve as pO}from"node:path";function G_(t){let e=pO(t),n;try{n=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(mO(e))}catch(i){let o=i;throw new yo(e,o.code==="ENOENT"?"missing":"read",o.message)}let r=n.startsWith("\uFEFF")?n.slice(1):n,s;try{s=Gs(r,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(i){let o=i;throw new yo(e,"syntax",o.message,o.line??1,(o.column??1)+(n.startsWith("\uFEFF")&&o.line===1?1:0))}try{return qs({path:e,properties:s})}catch(i){throw new yo(e,"schema",i instanceof Error?i.message:String(i))}}var yo,J_=M(()=>{"use strict";Sl();Xs();yo=class extends Error{path;kind;line;column;constructor(e,n,r,s=1,i=1){super(n==="syntax"||n==="schema"?`Invalid ${e}:${s}:${i}: ${r}`:`Cannot read ${e}: ${r}`),this.path=e,this.kind=n,this.line=s,this.column=i,this.name="PropertyFileError"}}});var Y_={};Mn(Y_,{createGit:()=>yO,parseLog:()=>K_,parseStatus:()=>z_});import{resolve as fO}from"node:path";function V_(t,e){if(typeof t!="string"||!t||t.includes("\0"))throw Error("git: "+e+" must be a nonempty NUL-free string");return t}function hO(t,e){let n=[],r=t;for(;n.length<e;){let s=r.indexOf(" ");if(s<0)throw Error("git: malformed porcelain v2 record");n.push(r.slice(0,s)),r=r.slice(s+1)}return{tokens:n,path:r}}function z_(t){let e={branch:null,upstream:null,detached:!1,unborn:!1,ahead:0,behind:0,staged:[],unstaged:[],untracked:[],conflicted:[],renamed:[],submodules:[]},n=t.split("\0"),r=!1,s=!1;if(n.pop()!=="")throw Error("git: incomplete porcelain output");for(let i=0;i<n.length;i++){let o=n[i];if(o.startsWith("# branch.head ")){r=!0;let a=o.slice(14);e.detached=a==="(detached)",e.branch=e.detached?null:a}else if(o.startsWith("# branch.oid "))s=!0,e.unborn=o.slice(13)==="(initial)";else if(o.startsWith("# branch.upstream "))e.upstream=o.slice(18);else if(o.startsWith("# branch.ab ")){let a=o.match(/^# branch.ab \+(\d+) -(\d+)$/);if(!a)throw Error("git: malformed ahead/behind");if(e.ahead=Number(a[1]),e.behind=Number(a[2]),!Number.isSafeInteger(e.ahead)||!Number.isSafeInteger(e.behind))throw Error("git: invalid ahead/behind")}else if(o.startsWith("? "))e.untracked.push(o.slice(2));else if(/^[12u] /.test(o)){let a=o[0]==="2",l=o[0]==="u",c=hO(o,l?10:a?9:8),u=c.tokens[1];if(!/^[.MADRCUT?!]{2}$/.test(u))throw Error("git: invalid status flags");if(!l&&u[0]!=="."&&e.staged.push(c.path),!l&&u[1]!=="."&&e.unstaged.push(c.path),l&&e.conflicted.push(c.path),c.tokens[2].startsWith("S")){let d=c.tokens[2];e.submodules.push({path:c.path,commit:d[1]==="C",modified:d[2]==="M",untracked:d[3]==="U"})}if(a){let d=n[++i];if(!d)throw Error("git: missing original rename path");e.renamed.push({from:d,to:c.path,status:u})}}else if(!o.startsWith("# "))throw Error("git: unknown porcelain record")}if(!r||!s)throw Error("git.status: missing branch headers");return e}function K_(t){let e=t.split("\0");if(e.pop()!==""||!e.length||e.length%4)throw Error("git: malformed NUL log records");let n=[];for(let r=0;r<e.length;r+=4){if(!/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(e[r]))throw Error("git: malformed log hash");n.push({hash:e[r],sha:e[r],author:e[r+1],date:e[r+2].replace(/Z$/,"+00:00"),subject:kl(e[r+3])})}return n}function yO(t){let e=(c,u)=>["git","--no-pager","--no-optional-locks","-C",fO(t.cwd,V_(c,"directory")),"-c","color.ui=false","-c","core.quotePath=false","-c","core.fsmonitor=false",...u],n=(c,u,d=6e4)=>{if(typeof d!="number"||!Number.isSafeInteger(d)||d<0||d>2147483647)throw Error("git: invalid timeout_ms");let m=e(c,u);return jn(t.runReadonlyProgram(m,d),p=>({r:p,words:m}))},r=({r:c,words:u})=>{if(c.code!==0||c.signal!==null||c.timed_out)throw Error(gO("git command "+JSON.stringify(u)+" failed (exit "+c.code+", signal "+c.signal+", timeout "+c.timed_out+"): "+kl(c.stderr).split(`
476
476
  `).slice(-12).join(`
477
477
  `)));return c.stdout},s=(c,u,d)=>jn(n(c,u,d),r),i=(c,u,d)=>jn(s(c,["rev-parse","--verify","--end-of-options",V_(u,"revision")],d),kl),o=({r:c})=>c.code===1&&!c.stderr&&!c.signal&&!c.timed_out,a=(c,u)=>jn(n(c,["symbolic-ref","--quiet","--short","HEAD"],u),d=>o(d)?null:kl(r(d)));return{functions:{"git.status":(c,u)=>jn(s(c,["status","--porcelain=v2","-z","--branch","--ahead-behind","--untracked-files=all","--renames"],u),d=>{let m=z_(d);return m.detached?jn(a(c,u),p=>(p!==null&&(m.branch=p,m.detached=!1),m)):m}),"git.branch":a,"git.rev_parse":i,"git.remotes":(c,u)=>jn(n(c,["config","--null","--get-regexp","^remote\\..*\\.url$"],u),d=>{if(o(d))return[];let p=r(d).split("\0");if(p.pop()!=="")throw Error("git: incomplete remote config");return p.map(f=>{let g=f.indexOf(`
478
478
  `),h=f.slice(0,g).match(/^remote\.(.+)\.url$/);if(g<0||!h)throw Error("git: malformed remote config");return{name:h[1],url:f.slice(g+1)}})}),"git.log":(c,u,d)=>{if(typeof u!="number"||!Number.isInteger(u)||u<0||u>1e4)throw Error("git.log: n must be an integer from 0 to 10000");return jn(n(c,["rev-parse","--verify","--quiet","--end-of-options","HEAD"],d),m=>o(m)?[]:(r(m),u===0?[]:jn(s(c,["log","--no-show-signature","--encoding=UTF-8","-n",String(u),"--format=%H%x00%an%x00%aI%x00%B","-z","--"],d),K_)))}},globals:{},dispose(){}}}var jn,kl,gO,Q_=M(()=>{"use strict";jn=(t,e)=>t instanceof Promise?t.then(e):e(t),kl=t=>t.endsWith(`
479
- `)?t.slice(0,-1):t,gO=t=>t.replace(/([a-zA-Z][a-zA-Z0-9+.-]*:\/\/)[^\s/@]+@/g,"$1<redacted>@").replace(/([?&](?:access_token|token|password|passwd|api_key)=)[^&\s"'<>]+/gi,"$1<redacted>")});var VG,fr,_o,_O,vO,km,bO,Rm,ge,Sm,fn,Rl,pr,Il,Al,Js,Z_,ev,tv,Vs,xl,wO,nv,rv,dt,Un=M(()=>{"use strict";VG=1,fr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))fr(e);Object.freeze(t)}return t},_o=fr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),_O=fr({status:"string",error:"string|null",code:"ErrorCode?"}),vO=fr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),km=fr(["Provider1.Provider","Provider1.Model1","Provider2.Provider","Provider2.Model1","Provider3.Provider","Provider3.Model1"]),bO=fr(["Provider1","Provider2","Provider3"]),Rm=fr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),ge={name:"ctx",type:"context"},Sm={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},fn={name:"teamfile",type:"string"},Rl={name:"alias",type:"string"},pr={name:"prompt",type:"string"},Il={name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"alias",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"},{name:"sessiondir",type:"string"},{name:"sessionid",type:"string"}]},Al=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],Js={name:"options",type:"map",optional:!0,keys:Al},Z_={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},ev={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},tv={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},Vs={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},xl={name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0},{name:"sessiondir",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"}]},wO=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],nv={name:"options",type:"map",optional:!0,keys:wO},rv={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},dt=fr([{name:"resolveProfilePath",implemented:!0,params:[ge,Sm],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[ge,Sm],statuses:["ok","error"],results:{error:"string|null",profile:"{path,raw,config}",values:"{Provider1..3,Model1..3,Directory,NonInteractive}",path:"string?",line:"number?",column:"number?"},effects:["file-read"],summary:"Read and validate the complete init profile without discovery or writes."},{name:"profileValues",implemented:!0,params:[{name:"config",type:"map"}],statuses:["ok","error"],results:{error:"string|null",Provider1:"string",Provider2:"string",Provider3:"string",Model1:"string",Model2:"string",Model3:"string"},effects:[],summary:"Validate and map slots to first-model environment values."},{name:"readPrompts",implemented:!0,params:[ge,{name:"path",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"single",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",prompts:"string[]"},effects:["file-read"],summary:"Read prompt records without exiting the caller.",scriptBinding:{name:"lm_read_prompts",params:[{name:"batchfile",type:"string"},{name:"single",type:"boolean",optional:!0}]}},{name:"listMembers",implemented:!0,params:[ge,fn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[fn]}},{name:"resolveMember",implemented:!0,params:[ge,fn,Rl],statuses:["ok","not_found","error"],results:{error:"string|null",member:"Member",isLead:"boolean",teamfile:"string"},effects:["file-read","db"],summary:"Resolve a team member with an explicit missing outcome.",scriptBinding:{name:"lm_member",params:[fn,Rl]}},{name:"lintTeam",implemented:!0,params:[ge,fn],statuses:["ok","error"],results:{error:"string|null",errors:"list",warnings:"list",counts:"map"},effects:["file-read","db"],summary:"Return structured lint findings.",scriptBinding:{name:"lm_lint",params:[fn]}},{name:"seedTeam",implemented:!0,params:[ge,fn,Z_],statuses:["ok","error"],results:{error:"string|null",seeded:"SeededMember[]"},effects:["provider","db","file-write"],summary:"Seed a team with explicit optional preambles.",scriptBinding:{name:"lm_seed",params:[fn,Z_]}},{name:"promptAgent",implemented:!0,params:[ge,Il,pr,Js],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...rv,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Il,pr,Js]}},{name:"promptMember",implemented:!0,params:[ge,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"prompt",type:"string",required:!0},{name:"messageType",type:"string"},...Al]}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn a team member through native team admission.",scriptBinding:{name:"lm_prompt",params:[fn,Rl,pr,{name:"options",type:"map",optional:!0,keys:[...Al,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[ge,{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"workspace",type:"string"},{name:"all",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",sessions:"Session[]"},effects:["file-read"],summary:"List native sessions in an explicit workspace.",scriptBinding:{name:"lm_session_list",params:[{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"sessiondir",type:"string"},{name:"all",type:"boolean"}]}]}},{name:"deleteSession",implemented:!0,params:[ge,Vs,tv],statuses:["deleted","not_found","busy","error"],results:{error:"string|null"},effects:["provider","file-write"],summary:"Delete a session only with explicit force admission.",scriptBinding:{name:"lm_session_delete",params:[Il,{...tv,optional:!0}]}},{name:"getSession",implemented:!0,params:[ge,Vs],statuses:["ok","not_found","error"],results:{error:"string|null",messages:"{role,content}[]"},effects:["provider","file-read"],summary:"Read native session messages.",scriptBinding:{name:"lm_session_get",params:[Vs]}},{name:"reserveSession",implemented:!0,params:[ge,Vs],statuses:["ok","busy","error"],results:{error:"string|null",reservation:"SessionReservation"},effects:[],summary:"Reserve context-local handoff admission and return a capability."},{name:"releaseSession",implemented:!0,params:[ge,Vs,{name:"reservation",type:"SessionReservation",optional:!0}],statuses:["ok","error"],results:{error:"string|null"},effects:[],summary:"Release context-local handoff admission; an optional capability makes owned cleanup idempotent and replacement-safe."},{name:"openTeamBatch",returnsResource:!0,implemented:!0,params:[ge,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"label",type:"string",required:!0},{name:"promptCount",type:"number",required:!0},{name:"legacy",type:"boolean"},...Al]}],statuses:["ok","busy","error"],results:{error:"string|null",batch:"opaque context-bound BatchRef"},effects:["provider","db"],summary:"Open a managed team batch; member-map composition remains language-owned."},{name:"batchTurn",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"},pr,{name:"index",type:"number"},{name:"total",type:"number"}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn an owned live batch reference."},{name:"closeBatch",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"},{name:"options",type:"map",keys:[{name:"status",type:"string",required:!0,values:["done","error","cancelled"]},{name:"error",type:"string"}]}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close an owned batch."},{name:"readRatelimits",implemented:!0,params:[ge,ev],statuses:["ok","error"],results:{error:"string|null",readings:"list"},effects:["file-read","network"],summary:"Read provider rate-limit data.",scriptBinding:{name:"lm_ratelimit_readings",params:[ev]}},{name:"openTerminal",implemented:!0,params:[ge,{name:"target",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0}]},{name:"streams",type:"map",keys:[{name:"stdin",type:"stream",required:!0},{name:"stdout",type:"stream",required:!0},{name:"stderr",type:"stream",required:!0}]}],statuses:["ok","error"],results:{error:"string|null",code:"number|null",signal:"string|null"},effects:["provider","db","tty"],summary:"Open a native terminal with caller-supplied streams.",scriptBinding:{name:"lm_terminal",params:[fn,Rl]}},{name:"sessionAdmission",implemented:!0,params:[ge,Vs],statuses:["ok","busy","error"],results:{error:"string|null",busyReason:"turn|handoff?"},effects:[],summary:"Query context-local session admission without exposing mutable sets."},{name:"promptReservedAgent",implemented:!0,params:[ge,{name:"reservation",type:"SessionReservation"},Il,pr,Js],statuses:["ok","busy","stalled","empty","error"],results:{...rv,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Synchronously release one batch on a close deadline without cancelling unrelated batches."},{name:"inspectBatch",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null",id:"string",closed:"boolean",member:"Member",rootId:"number|null"},effects:[],summary:"Read batch metadata without exposing native transports or lease capabilities."},{name:"openNativeSession",returnsResource:!0,implemented:!0,params:[ge,{name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0},{name:"sessiondir",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"}]},Js],statuses:["ok","busy","error"],results:{error:"string|null",session:"opaque context-bound NativeSessionRef"},effects:["provider","db","file-read"],summary:"Open a script-owned native conversation with existing receiver admission."},{name:"nativeSessionTurn",implemented:!0,params:[ge,{name:"session",type:"NativeSessionRef"},pr],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Record one unframed conversational turn through the existing recorder."},{name:"closeNativeSession",implemented:!0,params:[ge,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close a script-owned native conversation and release its lease."},{name:"finalizeNativeSessionSync",implemented:!0,params:[ge,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Critical synchronous native conversation lease release."},{name:"nativeSessionRequest",implemented:!0,params:[ge,xl,pr,Js],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Send a stateless native-id turn to a qualified conversation in the configured running lmbee service.",scriptBinding:{name:"lm_session_turn",params:[xl,pr,Js]}},{name:"nativeSessionClose",implemented:!0,params:[ge,xl],statuses:["ok","busy","error"],results:{error:"string|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Close an idle service-hosted native conversation; an absent entry is already closed.",scriptBinding:{name:"lm_session_close",params:[xl]}},{name:"loadProperties",implemented:!0,params:[ge,Sm],statuses:["ok","error"],results:{error:"string|null",path:"string",properties:"map",flat:"map",line:"number?",column:"number?"},effects:["file-read"],summary:"Read the complete hierarchical init.toml properties document through the canonical reader."},{name:"listRunning",implemented:!0,params:[ge,nv],statuses:["ok","error"],results:{error:"string|null",running:"RunningRow[]",dead:"DeadRow[]",idle:"IdleRow[]"},effects:["db"],summary:"DB-wide view of tracked invocation activity. Observation only; dispatch and branch on status busy, never gate on this.",scriptBinding:{name:"lm_running",params:[nv]}}])});var sv,iv=M(()=>{"use strict";sv=[{name:"lm_session_turn",category:"lmctl Automation",signature:"lm_session_turn(member, prompt, options = {})",description:"Sends one stateless turn to a service-hosted conversation addressed by provider and native sessionid. Qualified providers require the already-running lmbee endpoint in LMCTL_SERVICE_ENDPOINT. idleTimeoutMs controls idle retention (default 300000 ms; zero disables expiry). An accepted turn finishes and is recorded after the caller disconnects. World failures never throw. This is an effect and is skipped in dry-run with a map dummy; one-shot providers stay local.",parameters:[{name:"member",type:"map",description:"Required provider and native sessionid; optional sessiondir, model, effort"},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) permissionMode and idleTimeoutMs"}],returns:{type:"map",description:"{ status, reply, error, message_id, team_chat_log_id, code?, outcome?, service_epoch?, connection_epoch?, connection_state? }"},example:'res = lm_session_turn({ provider: "kimi", sessionid: "native-1" }, "Continue");'},{name:"lm_session_close",category:"lmctl Automation",signature:"lm_session_close(member)",description:"Requests closure of the service-owned conversation addressed by provider and native sessionid. Idle conversations close, active conversations return busy, and an absent entry is already closed. World failures never throw; dry-run returns a map dummy.",parameters:[{name:"member",type:"map",description:"Required provider and native sessionid"}],returns:{type:"map",description:'{ status: "ok"|"busy"|"error", error: string|null, code?: string }'},example:'closed = lm_session_close({ provider: "kimi", sessionid: "native-1" });'},{name:"prompt_human",category:"lmctl Automation",signature:"prompt_human([question|session])",description:"Reads an operator answer or hands off a session. Accepts one optional question/session value; non-interactive mode refuses the operation. A handoff reservation is host-owned and released on EOF, provider failure, cancellation, context finalization or signal; the returned outcome is an ordinary map. Core prompt options apply only without this binding."},{name:"lm_batch_open",category:"lmctl Automation",signature:"lm_batch_open(teamfile, alias, batchfile, options = {}); lm_batch_open(member, options = {})",description:"Opens the only returned production resource: an async-only opaque read-only id handle. The first receiving lexical binding owns it until scope exit; aliases borrow, and returning/storing/coercing the handle is refused at runtime. Teamfile batches keep existing admission. A member map with provider and sessionid locks an existing native session: one known owner uses its teamfile and alias lease, otherwise the native address is the lease key. Native handles reuse one persistent conversation when supported, or one provider process per turn, and record each turn. A member map without sessionid retains the fresh-agent batch path. Dry-run simulates these resource operations without provider or lease activity.",parameters:[{name:"teamfile",type:"string|map",description:"Teamfile path for the legacy form, or a member map for the two-argument form"},{name:"alias",type:"string",description:"Team member alias to target"},{name:"batchfile",type:"string",description:"Legacy form only: source label for tracking; not read by this function"},{name:"options",type:"map",description:"(optional) Teamfile form: promptCount, legacy. Member-map form: permissionMode, idleTimeoutMs, as for lm_agent"}],returns:{type:"ResourceHandle|null",description:"Opaque id-only handle, or null on admission refusal; no mutable map or transferable authority"},example:'handle = lm_batch_open("team.lmctl", "reviewer", "prompts.txt", { promptCount: 5 });'},{name:"lm_batch_turn",category:"lmctl Automation",signature:"lm_batch_turn(handle, prompt, index?, total?)",description:"Native handles accept handle and prompt only for dependent conversational turns; teamfile and fresh-member batches still require index and total. Each native turn uses the existing transcript and usage recorder.",parameters:[{name:"handle",type:"ResourceHandle|string|{id}",description:"Same-run live owner/borrower handle or authorized id reference"},{name:"prompt",type:"string",description:"Prompt text to execute"},{name:"index",type:"number",description:"Teamfile or fresh-member form only: 1-based prompt index"},{name:"total",type:"number",description:"Teamfile or fresh-member form only: total prompts"}],returns:{type:"map",description:"{ status: 'ok'|'busy'|'stalled'|'empty'|'error', reply: string, error: string|null }"},example:'turn = lm_batch_turn(handle, "Summarize this diff", 1, 5);'},{name:"lm_batch_close",category:"lmctl Automation",signature:'lm_batch_close(handle, status = "done", error = null)',description:"Closes an active batch resource. Native handles close their conversation and release the owned lease; scope exit, script error, exit, and signals also close them. Teamfile batches retain tracked-invocation and bundle cleanup.",parameters:[{name:"handle",type:"ResourceHandle|string|{id}",description:"Authorized handle/id; repeat close joins the same operation"},{name:"status",type:"string",description:"(optional) Terminal status: 'done', 'cancelled', or 'error' (default: 'done')"},{name:"error",type:"string",description:"(optional) Error message if batch failed"}],returns:{type:"bool",description:"true if successfully closed, false otherwise"},example:'lm_batch_close(handle, "done");'},{name:"lm_prompt",category:"lmctl Automation",signature:"lm_prompt(teamfile, alias, prompt, options = {})",description:"Sends a direct one-shot prompt to a team member and returns an ordinary result map. The host owns its pending per-turn lease and critical release; no returned resource or script closer.",parameters:[{name:"teamfile",type:"string",description:"Path to team configuration file"},{name:"alias",type:"string",description:"Target team member alias"},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) Execution options: permissionMode, idleTimeoutMs, messageType"}],returns:{type:"map",description:"{ status, reply, error, message_id, team_chat_log_id }"},example:'res = lm_prompt("team.lmctl", "coder", "Hello agent");'},{name:"lm_agent",category:"lmctl Automation",signature:"lm_agent(member, prompt, options = {})",description:"Prompts a provider directly without a teamfile. Creates a session when sessionid is absent and writes its ID back into member for subsequent turns or explicit persistence.",parameters:[{name:"member",type:"map",description:"Required provider; optional alias, model, effort, sessiondir (default cwd), sessionid. Updated in place with sessionid."},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) permissionMode (yolo or plan), idleTimeoutMs. Fresh agy/pi/dsh sessions require a preliminary seed in yolo mode."}],returns:{type:"map",description:"{ status, reply, error, message_id: null, team_chat_log_id: null }; no team mailbox or log is created"},example:'agent = { provider: "codex" }; res = lm_agent(agent, "Summarize this repository");'},{name:"lm_agent_message",category:"lmctl Automation",signature:"lm_agent_message(member, prompt, options = {})",description:"Like lm_agent, and also returns the completed turn as lmctl stores and prices it: model, token buckets and the lmprice cost of that turn. Cost is null (with costUnavailableReason) when the provider does not record enough accounting.",parameters:[{name:"member",type:"map",description:"As for lm_agent"},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) As for lm_agent"}],returns:{type:"map",description:"lm_agent's { status, reply, error, message_id, team_chat_log_id } plus message: null | { role, content, provider, sessionid, model, usage: { input, cachedInput, cacheWrite, output }, costUsd, costUnavailableReason, priceRoute, priceDataSource }"},example:'agent = { provider: "miniplayer", model: "deepseek/deepseek-flash" }; res = lm_agent_message(agent, "Say hi"); println(res.message.costUsd);'},{name:"lm_session_list",category:"lmctl Automation",signature:"lm_session_list(options = {})",description:"Lists native sessions in the current workspace by default. Options: provider, sessiondir, all.",returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, sessions: [{ provider, sessionid, sessiondir, modifiedAt }] }'},example:'sessions = lm_session_list({ provider: "codex" });'},{name:"lm_session_get",category:"lmctl Automation",signature:"lm_session_get(target)",description:"Reads native session messages. Returns messages in chronological order, or not_found if the session does not exist.",parameters:[{name:"target",type:"map",description:"Session target map with required provider and sessionid strings"}],returns:{type:"map",description:'{ status: "ok"|"not_found"|"error", error: string|null, messages?: [{ role: string, content: string }] }'},example:'session = lm_session_get({ provider: "codex", sessionid: "sess-123" }); if (session.status == "ok") { println(len(session.messages)); }'},{name:"lm_session_delete",category:"lmctl Automation",signature:"lm_session_delete(member, options = {})",description:"Deletes a native session by provider and sessionid. Requires force: true because another process may be using it; refuses active turns in this script engine. A forced cross-process deletion can disrupt that turn.",returns:{type:"map",description:'{ status: "deleted"|"not_found"|"busy"|"error", error: string|null }'},example:"lm_session_delete(agent, { force: true });"},{name:"lm_running",category:"lmctl Automation",signature:"lm_running(options = {})",description:'Returns active tracked-invocation snapshot. Options: since (e.g. "1h", "2d"). observation only; dispatch and branch on status busy, never gate on this.',parameters:[{name:"options",type:"map",description:'(optional) Query options: since (duration string like "1h", "2d")'}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, code?: string, running: map[], dead: map[], idle: map[] }'},example:'snapshot = lm_running(); if (snapshot.status == "ok") { println(len(snapshot.running)); }'},{name:"lm_fanout",category:"lmctl Automation",signature:"lm_fanout(participants, prompts, options = {})",description:"Dispatches a prompt to every participant CONCURRENTLY, over the same path as lm_agent -- for a runtime-sized fan-out that parallel([...]) cannot express, since parallel is a language construct fixed to the call expressions written in the script. Each participant gets its own result in its own array slot; there is no shared accumulator to race on.",parameters:[{name:"participants",type:"array",description:"Array of member maps, each shaped like lm_agent's member argument"},{name:"prompts",type:"string|array",description:"A single string broadcast to every participant, or an array of strings (one per participant, must be the same length as participants)"},{name:"options",type:"map",description:"(optional) Same options as lm_agent (permissionMode, idleTimeoutMs), applied identically to every participant"}],returns:{type:"array",description:"Array of lm_agent-shaped result maps ({ status, reply, error, message_id, team_chat_log_id }), in the SAME order as participants (not first-to-finish order)"},example:'reviewers = [{provider:"codex"}, {provider:"claude"}, {provider:"agy"}]; results = lm_fanout(reviewers, "Review this diff for correctness issues.");'},{name:"lm_seed",category:"lmctl Automation",signature:"lm_seed(teamfile, options = {})",description:"Seeds a real teamfile over the exact same internal path `lmctl seed` takes: seeds only members that lack a sessionid, writes each new sessionid/sessiondir back into the teamfile file, and leaves an already-seeded member untouched. `lmctl seed` itself stays a minimal primitive (one-sentence Lead prompt); a workflow that wants a richer or role-specific preamble supplies it via options.preamble instead of lmctl growing that behavior.",parameters:[{name:"teamfile",type:"string",description:"Path to the team configuration file to seed"},{name:"options",type:"map",description:'(optional) preamble: a string (replaces the default prompt for whichever alias gets one today -- Lead) or a map keyed by alias, e.g. {"Lead": "...", "Reviewer": "..."} (replaces the default prompt entirely for each matched alias; a non-Lead alias gets no prompt at all unless keyed here)'}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, code?: string, seeded: [{ alias, provider, sessionid, sessiondir, model }] }'},example:'lm_seed("team.lmctl", { preamble: { Lead: "Use `lmctl prompt` to send a message.", Reviewer: "Wait for a review request from Lead before doing anything." } });'},{name:"lm_terminal",category:"lmctl Automation",signature:"lm_terminal(teamfile, alias)",description:"Opens a tracked team member in its native provider TUI, preserving terminal ownership and inherited stdio. The host attempts checked lock/invocation release on completion, failure, cancellation or signal and reports unresolved failures, including a busy database; the returned outcome is an ordinary map. Refuses non-interactive mode.",parameters:[{name:"teamfile",type:"string",description:"Teamfile path"},{name:"alias",type:"string",description:"Member alias"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, exit_code: number, signal: string|null, code?: string }'},example:'lm_terminal("team.lmctl", "Lead");'},{name:"lm_lint",category:"lmctl Automation",signature:"lm_lint(teamfile)",description:'Validates a teamfile over the exact same internal path `lmctl lint` takes, returning structured findings instead of text a script would otherwise have to parse (operator, 2026-09-30: "lmscript does not use lmctl cli... expose lmctl internal working as api"). status is "error" ONLY for a genuine validation error (unparseable file, bad _MEMBER_ line, confirmed wrong-provider model) -- warnings never flip it to "error", matching the CLI\'s own exit-0-on-warnings contract. Progress/error/warning lines are also written to stderr, same as lmctl lint.',parameters:[{name:"teamfile",type:"string",description:"Path to the team configuration file to validate"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, errors: [{alias, message}], warnings: [{alias, message}], counts: {errors, warnings} }; alias is "" when a finding is about the file rather than a member. Both lists are always arrays, never null.'},example:'result = lm_lint("team.lmctl"); if (result.counts.warnings > 0) { lm_log(result.counts.warnings + " warning(s)"); }'},{name:"lm_ratelimit_readings",category:"lmctl Automation",signature:"lm_ratelimit_readings(options = {})",description:"Queries live provider quota readings using the existing ratelimit reader; preserves raw fields without cost aggregation or inferred availability.",parameters:[{name:"options",type:"map",description:"(optional) providers: string[] or provider: string (default all); timeoutSeconds: positive number (default 15)"}],returns:{type:"map",description:'{ status: "ok", error: null, readings: map[] } or { status: "error", error: string, readings: [] }. Provider-level failures remain reading data; inspect each reading.status and bucket flags.'},example:'quota = lm_ratelimit_readings({ providers: ["codex", "claude"] });'},{name:"lm_read_prompts",category:"lmctl Automation",signature:"lm_read_prompts(batchfile, single = false)",description:"Reads prompt file with BOM and CRLF normalization, splitting into paragraphs or reading entire file as single prompt.",parameters:[{name:"batchfile",type:"string",description:"Path to prompt file"},{name:"single",type:"bool",description:"(optional) If true, treats entire file as one prompt; if false, splits on blank lines"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, prompts: string[] }'},example:'prompts = lm_read_prompts("prompts.txt");'},{name:"lm_read_paragraphs",category:"lmctl Automation",signature:"lm_read_paragraphs(batchfile)",description:"Reads a prompt file and splits it into blank-line-separated paragraphs.",parameters:[{name:"batchfile",type:"string",description:"Path to prompt file"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, prompts: string[] }'},example:'paragraphs = lm_read_paragraphs("spec.md");'},{name:"lm_members",category:"lmctl Automation",signature:"lm_members(teamfile)",description:"Resolves all team members declared in a team configuration file.",parameters:[{name:"teamfile",type:"string",description:"Path to team configuration file"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, members: [{ alias, provider, model, sessionid, sessiondir }] }'},example:'members = lm_members("team.lmctl");'},{name:"lm_member",category:"lmctl Automation",signature:"lm_member(teamfile, alias)",description:"Resolves a specific member in a team configuration file.",parameters:[{name:"teamfile",type:"string",description:"Path to team configuration file"},{name:"alias",type:"string",description:"Member alias to look up"}],returns:{type:"map",description:'{ status: "ok"|"not_found"|"error", error: string|null, member?: { alias, provider, model, sessionid, sessiondir }, isLead?: bool, teamfile?: string }'},example:'m = lm_member("team.lmctl", "reviewer");'},{name:"lm_log",category:"lmctl Automation",signature:"lm_log(value, ...args)",description:"Writes formatted log messages to standard error with trailing newline.",parameters:[{name:"value",type:"any",description:"Required first value or message"},{name:"args",type:"any[]",description:"Additional values or messages to log to stderr"}],returns:{type:"string",description:"The formatted text"},example:'lm_log("Step completed successfully");'},{name:"lm_error",category:"lmctl Automation",signature:"lm_error(value, ...args)",description:"Writes error messages to standard error prefixed with 'error: '.",parameters:[{name:"value",type:"any",description:"Required first error detail"},{name:"args",type:"any[]",description:"Additional error details to write to stderr"}],returns:{type:"string",description:"The formatted error text"},example:'lm_error("Failed to connect to team member");'},{name:"lm_exit",category:"lmctl Automation",signature:"lm_exit(code = 0)",description:"Immediately terminates script execution with the specified integer exit code (0-255).",parameters:[{name:"code",type:"number",description:"(optional) Exit status code between 0 and 255 (default: 0)"}],returns:{type:"never",description:"Raises LMScriptExit control flow"},example:"lm_exit(1);"}]});function G(t){try{if(t instanceof Error){let e=t.message;if(typeof e=="string")return e}return String(t)}catch{return"Unprintable error"}}function fe(t){return{...t,status:"ok",error:null}}function B(t,e,n){return{...n,status:"error",code:t,error:e}}var mt=M(()=>{"use strict"});function av(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?vo:ov}var ov,vo,Im=M(()=>{"use strict";ov="root_teamfile <> '(direct)'",vo=ov+" AND COALESCE(accounting_only,0)=0"});import{existsSync as EO}from"node:fs";import{createRequire as TO}from"node:module";function SO(){return xm===null&&(xm=TO(import.meta.url)("node:sqlite").DatabaseSync),xm}function IO(t){let e=RO[t];if(e!==void 0)return e;let n=kO[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function is(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=IO(t.errcode)),t}function xO(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function AO(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Am(t){return t.length===1&&CO(t[0])?[t[0]]:t}function CO(t){if(!Om(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Om(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var xm,kO,RO,Cm,os,Nm,bo=M(()=>{"use strict";xm=null;kO={1:"SQLITE_ERROR",2:"SQLITE_INTERNAL",3:"SQLITE_PERM",4:"SQLITE_ABORT",5:"SQLITE_BUSY",6:"SQLITE_LOCKED",7:"SQLITE_NOMEM",8:"SQLITE_READONLY",9:"SQLITE_INTERRUPT",10:"SQLITE_IOERR",11:"SQLITE_CORRUPT",12:"SQLITE_NOTFOUND",13:"SQLITE_FULL",14:"SQLITE_CANTOPEN",15:"SQLITE_PROTOCOL",17:"SQLITE_SCHEMA",18:"SQLITE_TOOBIG",19:"SQLITE_CONSTRAINT",20:"SQLITE_MISMATCH",21:"SQLITE_MISUSE",23:"SQLITE_AUTH",25:"SQLITE_RANGE",26:"SQLITE_NOTADB"},RO={275:"SQLITE_CONSTRAINT_CHECK",531:"SQLITE_CONSTRAINT_COMMITHOOK",787:"SQLITE_CONSTRAINT_FOREIGNKEY",1043:"SQLITE_CONSTRAINT_FUNCTION",1299:"SQLITE_CONSTRAINT_NOTNULL",1555:"SQLITE_CONSTRAINT_PRIMARYKEY",1811:"SQLITE_CONSTRAINT_TRIGGER",2067:"SQLITE_CONSTRAINT_UNIQUE",2323:"SQLITE_CONSTRAINT_VTAB",2579:"SQLITE_CONSTRAINT_ROWID",2835:"SQLITE_CONSTRAINT_PINNED",3091:"SQLITE_CONSTRAINT_DATATYPE",261:"SQLITE_BUSY_RECOVERY",517:"SQLITE_BUSY_SNAPSHOT",773:"SQLITE_BUSY_TIMEOUT",262:"SQLITE_LOCKED_SHAREDCACHE",518:"SQLITE_LOCKED_VTAB"};Cm=class{name;handle;savepointId=0;constructor(e,n={}){if(n.fileMustExist===!0&&e!==":memory:"&&!EO(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(SO())(e,{readOnly:n.readonly===!0})}catch(r){is(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Nm(this.handle.prepare(e))}catch(n){is(n)}}exec(e){try{this.handle.exec(e)}catch(n){is(n)}}pragma(e,n){let r=`PRAGMA ${e}`;if(e.includes("=")){this.exec(r);return}if(n?.simple===!0){let s=this.prepare(r).get();return s===void 0?void 0:Object.values(s)[0]}return this.prepare(r).all()}transaction(e){let n=(...r)=>this.runTransaction("BEGIN",e,r);return n.immediate=(...r)=>this.runTransaction("BEGIN IMMEDIATE",e,r),n}get inTransaction(){return this.handle.isTransaction}close(){try{this.handle.close()}catch(e){is(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let i=n(...r);return this.exec("COMMIT"),i}catch(i){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(o){if(!xO(o))throw o}throw i}}let s=`lmctl_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${s}`);try{let i=n(...r);return this.exec(`RELEASE ${s}`),i}catch(i){if(this.inTransaction)try{this.exec(`ROLLBACK TO ${s}`),this.exec(`RELEASE ${s}`)}catch(o){if(!AO(o))throw o}throw i}}};os=Cm,Nm=class{constructor(e){this.handle=e;this.handle.setAllowBareNamedParameters(!0)}rawMode=!1;get(...e){try{let n=this.handle.get(...Am(e));return this.normalizeRow(n)}catch(n){is(n)}}all(...e){try{return this.handle.all(...Am(e)).map(n=>this.normalizeRow(n))}catch(n){is(n)}}run(...e){try{let n=this.handle.run(...Am(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){is(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Om(e)?Object.values(e):Om(e)?{...e}:e}}});function Lm(t){return new os(t,{readonly:!0,fileMustExist:!0})}var lv=M(()=>{"use strict";bo()});import{createHash as NO}from"node:crypto";import{lstat as OO,readFile as LO,realpath as cv,stat as uv}from"node:fs/promises";import{isAbsolute as dv,relative as MO,resolve as PO,sep as DO}from"node:path";function J(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function re(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function wo(t){return re(t)}function $t(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function ye(t){if(!Number.isSafeInteger(t.maxBytes)||t.maxBytes<=0)throw new Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(t.maxRows)||t.maxRows<=0)throw new Error("maxRows must be a positive safe integer");t.signal.throwIfAborted()}function Ee(t,e){return t<e?-1:t>e?1:0}function pt(t,e,n){if(t===null||e===null)return null;let r=n==="written"?"write":"read",s=0;for(let i of t){if(i.bytes===null)return null;s+=i.bytes}for(let i of e)if(i.direction===r){if(i.bytes===null)return null;s+=i.bytes}return s}function gn(t,e,n){let r={},s=wo(t.cacheWrite5m),i=wo(t.cacheWrite1h),o=wo(t.reasoning),a=wo(t.webSearch),l=wo(t.webFetch);o!==null&&(e===null||o<=e)&&(r.reasoning_output_tokens=o);let c=(s??0)+(i??0),u=n===null||c<=n;return s!==null&&u&&(r.cache_write_5m_tokens=s),i!==null&&u&&(r.cache_write_1h_tokens=i),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function gr(t){return typeof t=="string"&&$O.has(t.toLowerCase())}function Fe(t,e){t.record({direction:"read",kind:"unattributed",id:e,ref:null,bytes:null,basis:"unknown"}),t.record({direction:"write",kind:"unattributed",id:e,ref:null,bytes:null,basis:"unknown"})}function zs(t){let e=J(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Ve(t,e){if(!dv(t))return null;let n=await OO(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await cv(t).catch(()=>null);if(!r)return null;for(let s of e){let i=await cv(s).catch(()=>PO(s)),o=MO(i,r);if(o===""||!o.startsWith(`..${DO}`)&&o!==".."&&!dv(o))return r}return null}async function Tt(t,e){ye(e);let n=await uv(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await LO(t,{signal:e.signal});e.signal.throwIfAborted();let s=await uv(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Eo}:sha256:${NO("sha256").update(r).digest("hex")}`,data:r}}function Cl(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=t.toString("utf8"),r=n.length===0?[]:n.slice(0,-1).split(`
479
+ `)?t.slice(0,-1):t,gO=t=>t.replace(/([a-zA-Z][a-zA-Z0-9+.-]*:\/\/)[^\s/@]+@/g,"$1<redacted>@").replace(/([?&](?:access_token|token|password|passwd|api_key)=)[^&\s"'<>]+/gi,"$1<redacted>")});var KG,fr,_o,_O,vO,km,bO,Rm,ge,Sm,fn,Rl,pr,Il,Al,Js,Z_,ev,tv,Vs,xl,wO,nv,rv,dt,Un=M(()=>{"use strict";KG=1,fr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))fr(e);Object.freeze(t)}return t},_o=fr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),_O=fr({status:"string",error:"string|null",code:"ErrorCode?"}),vO=fr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),km=fr(["Provider1.Provider","Provider1.Model1","Provider2.Provider","Provider2.Model1","Provider3.Provider","Provider3.Model1"]),bO=fr(["Provider1","Provider2","Provider3"]),Rm=fr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),ge={name:"ctx",type:"context"},Sm={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},fn={name:"teamfile",type:"string"},Rl={name:"alias",type:"string"},pr={name:"prompt",type:"string"},Il={name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"alias",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"},{name:"sessiondir",type:"string"},{name:"sessionid",type:"string"}]},Al=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],Js={name:"options",type:"map",optional:!0,keys:Al},Z_={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},ev={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},tv={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},Vs={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},xl={name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0},{name:"sessiondir",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"}]},wO=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],nv={name:"options",type:"map",optional:!0,keys:wO},rv={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},dt=fr([{name:"resolveProfilePath",implemented:!0,params:[ge,Sm],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[ge,Sm],statuses:["ok","error"],results:{error:"string|null",profile:"{path,raw,config}",values:"{Provider1..3,Model1..3,Directory,NonInteractive}",path:"string?",line:"number?",column:"number?"},effects:["file-read"],summary:"Read and validate the complete init profile without discovery or writes."},{name:"profileValues",implemented:!0,params:[{name:"config",type:"map"}],statuses:["ok","error"],results:{error:"string|null",Provider1:"string",Provider2:"string",Provider3:"string",Model1:"string",Model2:"string",Model3:"string"},effects:[],summary:"Validate and map slots to first-model environment values."},{name:"readPrompts",implemented:!0,params:[ge,{name:"path",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"single",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",prompts:"string[]"},effects:["file-read"],summary:"Read prompt records without exiting the caller.",scriptBinding:{name:"lm_read_prompts",params:[{name:"batchfile",type:"string"},{name:"single",type:"boolean",optional:!0}]}},{name:"listMembers",implemented:!0,params:[ge,fn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[fn]}},{name:"resolveMember",implemented:!0,params:[ge,fn,Rl],statuses:["ok","not_found","error"],results:{error:"string|null",member:"Member",isLead:"boolean",teamfile:"string"},effects:["file-read","db"],summary:"Resolve a team member with an explicit missing outcome.",scriptBinding:{name:"lm_member",params:[fn,Rl]}},{name:"lintTeam",implemented:!0,params:[ge,fn],statuses:["ok","error"],results:{error:"string|null",errors:"list",warnings:"list",counts:"map"},effects:["file-read","db"],summary:"Return structured lint findings.",scriptBinding:{name:"lm_lint",params:[fn]}},{name:"seedTeam",implemented:!0,params:[ge,fn,Z_],statuses:["ok","error"],results:{error:"string|null",seeded:"SeededMember[]"},effects:["provider","db","file-write"],summary:"Seed a team with explicit optional preambles.",scriptBinding:{name:"lm_seed",params:[fn,Z_]}},{name:"promptAgent",implemented:!0,params:[ge,Il,pr,Js],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...rv,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Il,pr,Js]}},{name:"promptMember",implemented:!0,params:[ge,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"prompt",type:"string",required:!0},{name:"messageType",type:"string"},...Al]}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn a team member through native team admission.",scriptBinding:{name:"lm_prompt",params:[fn,Rl,pr,{name:"options",type:"map",optional:!0,keys:[...Al,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[ge,{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"workspace",type:"string"},{name:"all",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",sessions:"Session[]"},effects:["file-read"],summary:"List native sessions in an explicit workspace.",scriptBinding:{name:"lm_session_list",params:[{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"sessiondir",type:"string"},{name:"all",type:"boolean"}]}]}},{name:"deleteSession",implemented:!0,params:[ge,Vs,tv],statuses:["deleted","not_found","busy","error"],results:{error:"string|null"},effects:["provider","file-write"],summary:"Delete a session only with explicit force admission.",scriptBinding:{name:"lm_session_delete",params:[Il,{...tv,optional:!0}]}},{name:"getSession",implemented:!0,params:[ge,Vs],statuses:["ok","not_found","error"],results:{error:"string|null",messages:"{role,content}[]"},effects:["provider","file-read"],summary:"Read native session messages.",scriptBinding:{name:"lm_session_get",params:[Vs]}},{name:"reserveSession",implemented:!0,params:[ge,Vs],statuses:["ok","busy","error"],results:{error:"string|null",reservation:"SessionReservation"},effects:[],summary:"Reserve context-local handoff admission and return a capability."},{name:"releaseSession",implemented:!0,params:[ge,Vs,{name:"reservation",type:"SessionReservation",optional:!0}],statuses:["ok","error"],results:{error:"string|null"},effects:[],summary:"Release context-local handoff admission; an optional capability makes owned cleanup idempotent and replacement-safe."},{name:"openTeamBatch",returnsResource:!0,implemented:!0,params:[ge,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"label",type:"string",required:!0},{name:"promptCount",type:"number",required:!0},{name:"legacy",type:"boolean"},...Al]}],statuses:["ok","busy","error"],results:{error:"string|null",batch:"opaque context-bound BatchRef"},effects:["provider","db"],summary:"Open a managed team batch; member-map composition remains language-owned."},{name:"batchTurn",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"},pr,{name:"index",type:"number"},{name:"total",type:"number"}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn an owned live batch reference."},{name:"closeBatch",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"},{name:"options",type:"map",keys:[{name:"status",type:"string",required:!0,values:["done","error","cancelled"]},{name:"error",type:"string"}]}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close an owned batch."},{name:"readRatelimits",implemented:!0,params:[ge,ev],statuses:["ok","error"],results:{error:"string|null",readings:"list"},effects:["file-read","network"],summary:"Read provider rate-limit data.",scriptBinding:{name:"lm_ratelimit_readings",params:[ev]}},{name:"openTerminal",implemented:!0,params:[ge,{name:"target",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0}]},{name:"streams",type:"map",keys:[{name:"stdin",type:"stream",required:!0},{name:"stdout",type:"stream",required:!0},{name:"stderr",type:"stream",required:!0}]}],statuses:["ok","error"],results:{error:"string|null",code:"number|null",signal:"string|null"},effects:["provider","db","tty"],summary:"Open a native terminal with caller-supplied streams.",scriptBinding:{name:"lm_terminal",params:[fn,Rl]}},{name:"sessionAdmission",implemented:!0,params:[ge,Vs],statuses:["ok","busy","error"],results:{error:"string|null",busyReason:"turn|handoff?"},effects:[],summary:"Query context-local session admission without exposing mutable sets."},{name:"promptReservedAgent",implemented:!0,params:[ge,{name:"reservation",type:"SessionReservation"},Il,pr,Js],statuses:["ok","busy","stalled","empty","error"],results:{...rv,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Synchronously release one batch on a close deadline without cancelling unrelated batches."},{name:"inspectBatch",implemented:!0,params:[ge,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null",id:"string",closed:"boolean",member:"Member",rootId:"number|null"},effects:[],summary:"Read batch metadata without exposing native transports or lease capabilities."},{name:"openNativeSession",returnsResource:!0,implemented:!0,params:[ge,{name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0},{name:"sessiondir",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"}]},Js],statuses:["ok","busy","error"],results:{error:"string|null",session:"opaque context-bound NativeSessionRef"},effects:["provider","db","file-read"],summary:"Open a script-owned native conversation with existing receiver admission."},{name:"nativeSessionTurn",implemented:!0,params:[ge,{name:"session",type:"NativeSessionRef"},pr],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Record one unframed conversational turn through the existing recorder."},{name:"closeNativeSession",implemented:!0,params:[ge,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close a script-owned native conversation and release its lease."},{name:"finalizeNativeSessionSync",implemented:!0,params:[ge,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Critical synchronous native conversation lease release."},{name:"nativeSessionRequest",implemented:!0,params:[ge,xl,pr,Js],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Send a stateless native-id turn to a qualified conversation in the configured running lmbee service.",scriptBinding:{name:"lm_session_turn",params:[xl,pr,Js]}},{name:"nativeSessionClose",implemented:!0,params:[ge,xl],statuses:["ok","busy","error"],results:{error:"string|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Close an idle service-hosted native conversation; an absent entry is already closed.",scriptBinding:{name:"lm_session_close",params:[xl]}},{name:"loadProperties",implemented:!0,params:[ge,Sm],statuses:["ok","error"],results:{error:"string|null",path:"string",properties:"map",flat:"map",line:"number?",column:"number?"},effects:["file-read"],summary:"Read the complete hierarchical init.toml properties document through the canonical reader."},{name:"listRunning",implemented:!0,params:[ge,nv],statuses:["ok","error"],results:{error:"string|null",running:"RunningRow[]",dead:"DeadRow[]",idle:"IdleRow[]"},effects:["db"],summary:"DB-wide view of tracked invocation activity. Observation only; dispatch and branch on status busy, never gate on this.",scriptBinding:{name:"lm_running",params:[nv]}}])});var sv,iv=M(()=>{"use strict";sv=[{name:"lm_session_turn",category:"lmctl Automation",signature:"lm_session_turn(member, prompt, options = {})",description:"Sends one stateless turn to a service-hosted conversation addressed by provider and native sessionid. Qualified providers require the already-running lmbee endpoint in LMCTL_SERVICE_ENDPOINT. idleTimeoutMs controls idle retention (default 300000 ms; zero disables expiry). An accepted turn finishes and is recorded after the caller disconnects. World failures never throw. This is an effect and is skipped in dry-run with a map dummy; one-shot providers stay local.",parameters:[{name:"member",type:"map",description:"Required provider and native sessionid; optional sessiondir, model, effort"},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) permissionMode and idleTimeoutMs"}],returns:{type:"map",description:"{ status, reply, error, message_id, team_chat_log_id, code?, outcome?, service_epoch?, connection_epoch?, connection_state? }"},example:'res = lm_session_turn({ provider: "kimi", sessionid: "native-1" }, "Continue");'},{name:"lm_session_close",category:"lmctl Automation",signature:"lm_session_close(member)",description:"Requests closure of the service-owned conversation addressed by provider and native sessionid. Idle conversations close, active conversations return busy, and an absent entry is already closed. World failures never throw; dry-run returns a map dummy.",parameters:[{name:"member",type:"map",description:"Required provider and native sessionid"}],returns:{type:"map",description:'{ status: "ok"|"busy"|"error", error: string|null, code?: string }'},example:'closed = lm_session_close({ provider: "kimi", sessionid: "native-1" });'},{name:"prompt_human",category:"lmctl Automation",signature:"prompt_human([question|session])",description:"Reads an operator answer or hands off a session. Accepts one optional question/session value; non-interactive mode refuses the operation. A handoff reservation is host-owned and released on EOF, provider failure, cancellation, context finalization or signal; the returned outcome is an ordinary map. Core prompt options apply only without this binding."},{name:"lm_batch_open",category:"lmctl Automation",signature:"lm_batch_open(teamfile, alias, batchfile, options = {}); lm_batch_open(member, options = {})",description:"Opens the only returned production resource: an async-only opaque read-only id handle. The first receiving lexical binding owns it until scope exit; aliases borrow, and returning/storing/coercing the handle is refused at runtime. Teamfile batches keep existing admission. A member map with provider and sessionid locks an existing native session: one known owner uses its teamfile and alias lease, otherwise the native address is the lease key. Native handles reuse one persistent conversation when supported, or one provider process per turn, and record each turn. A member map without sessionid retains the fresh-agent batch path. Dry-run simulates these resource operations without provider or lease activity.",parameters:[{name:"teamfile",type:"string|map",description:"Teamfile path for the legacy form, or a member map for the two-argument form"},{name:"alias",type:"string",description:"Team member alias to target"},{name:"batchfile",type:"string",description:"Legacy form only: source label for tracking; not read by this function"},{name:"options",type:"map",description:"(optional) Teamfile form: promptCount, legacy. Member-map form: permissionMode, idleTimeoutMs, as for lm_agent"}],returns:{type:"ResourceHandle|null",description:"Opaque id-only handle, or null on admission refusal; no mutable map or transferable authority"},example:'handle = lm_batch_open("team.lmctl", "reviewer", "prompts.txt", { promptCount: 5 });'},{name:"lm_batch_turn",category:"lmctl Automation",signature:"lm_batch_turn(handle, prompt, index?, total?)",description:"Native handles accept handle and prompt only for dependent conversational turns; teamfile and fresh-member batches still require index and total. Each native turn uses the existing transcript and usage recorder.",parameters:[{name:"handle",type:"ResourceHandle|string|{id}",description:"Same-run live owner/borrower handle or authorized id reference"},{name:"prompt",type:"string",description:"Prompt text to execute"},{name:"index",type:"number",description:"Teamfile or fresh-member form only: 1-based prompt index"},{name:"total",type:"number",description:"Teamfile or fresh-member form only: total prompts"}],returns:{type:"map",description:"{ status: 'ok'|'busy'|'stalled'|'empty'|'error', reply: string, error: string|null }"},example:'turn = lm_batch_turn(handle, "Summarize this diff", 1, 5);'},{name:"lm_batch_close",category:"lmctl Automation",signature:'lm_batch_close(handle, status = "done", error = null)',description:"Closes an active batch resource. Native handles close their conversation and release the owned lease; scope exit, script error, exit, and signals also close them. Teamfile batches retain tracked-invocation and bundle cleanup.",parameters:[{name:"handle",type:"ResourceHandle|string|{id}",description:"Authorized handle/id; repeat close joins the same operation"},{name:"status",type:"string",description:"(optional) Terminal status: 'done', 'cancelled', or 'error' (default: 'done')"},{name:"error",type:"string",description:"(optional) Error message if batch failed"}],returns:{type:"bool",description:"true if successfully closed, false otherwise"},example:'lm_batch_close(handle, "done");'},{name:"lm_prompt",category:"lmctl Automation",signature:"lm_prompt(teamfile, alias, prompt, options = {})",description:"Sends a direct one-shot prompt to a team member and returns an ordinary result map. The host owns its pending per-turn lease and critical release; no returned resource or script closer.",parameters:[{name:"teamfile",type:"string",description:"Path to team configuration file"},{name:"alias",type:"string",description:"Target team member alias"},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) Execution options: permissionMode, idleTimeoutMs, messageType"}],returns:{type:"map",description:"{ status, reply, error, message_id, team_chat_log_id }"},example:'res = lm_prompt("team.lmctl", "coder", "Hello agent");'},{name:"lm_agent",category:"lmctl Automation",signature:"lm_agent(member, prompt, options = {})",description:"Prompts a provider directly without a teamfile. Creates a session when sessionid is absent and writes its ID back into member for subsequent turns or explicit persistence.",parameters:[{name:"member",type:"map",description:"Required provider; optional alias, model, effort, sessiondir (default cwd), sessionid. Updated in place with sessionid."},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) permissionMode (yolo or plan), idleTimeoutMs. Fresh agy/pi/dsh sessions require a preliminary seed in yolo mode."}],returns:{type:"map",description:"{ status, reply, error, message_id: null, team_chat_log_id: null }; no team mailbox or log is created"},example:'agent = { provider: "codex" }; res = lm_agent(agent, "Summarize this repository");'},{name:"lm_agent_message",category:"lmctl Automation",signature:"lm_agent_message(member, prompt, options = {})",description:"Like lm_agent, and also returns the completed turn as lmctl stores and prices it: model, token buckets and the lmprice cost of that turn. Cost is null (with costUnavailableReason) when the provider does not record enough accounting.",parameters:[{name:"member",type:"map",description:"As for lm_agent"},{name:"prompt",type:"string",description:"Prompt text"},{name:"options",type:"map",description:"(optional) As for lm_agent"}],returns:{type:"map",description:"lm_agent's { status, reply, error, message_id, team_chat_log_id } plus message: null | { role, content, provider, sessionid, model, usage: { input, cachedInput, cacheWrite, output }, costUsd, costUnavailableReason, priceRoute, priceDataSource }"},example:'agent = { provider: "miniplayer", model: "deepseek/deepseek-flash" }; res = lm_agent_message(agent, "Say hi"); println(res.message.costUsd);'},{name:"lm_session_list",category:"lmctl Automation",signature:"lm_session_list(options = {})",description:"Lists native sessions in the current workspace by default. Options: provider, sessiondir, all.",returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, sessions: [{ provider, sessionid, sessiondir, modifiedAt }] }'},example:'sessions = lm_session_list({ provider: "codex" });'},{name:"lm_session_get",category:"lmctl Automation",signature:"lm_session_get(target)",description:"Reads native session messages. Returns messages in chronological order, or not_found if the session does not exist.",parameters:[{name:"target",type:"map",description:"Session target map with required provider and sessionid strings"}],returns:{type:"map",description:'{ status: "ok"|"not_found"|"error", error: string|null, messages?: [{ role: string, content: string }] }'},example:'session = lm_session_get({ provider: "codex", sessionid: "sess-123" }); if (session.status == "ok") { println(len(session.messages)); }'},{name:"lm_session_delete",category:"lmctl Automation",signature:"lm_session_delete(member, options = {})",description:"Deletes a native session by provider and sessionid. Requires force: true because another process may be using it; refuses active turns in this script engine. A forced cross-process deletion can disrupt that turn.",returns:{type:"map",description:'{ status: "deleted"|"not_found"|"busy"|"error", error: string|null }'},example:"lm_session_delete(agent, { force: true });"},{name:"lm_running",category:"lmctl Automation",signature:"lm_running(options = {})",description:'Returns active tracked-invocation snapshot. Options: since (e.g. "1h", "2d"). observation only; dispatch and branch on status busy, never gate on this.',parameters:[{name:"options",type:"map",description:'(optional) Query options: since (duration string like "1h", "2d")'}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, code?: string, running: map[], dead: map[], idle: map[] }'},example:'snapshot = lm_running(); if (snapshot.status == "ok") { println(len(snapshot.running)); }'},{name:"lm_fanout",category:"lmctl Automation",signature:"lm_fanout(participants, prompts, options = {})",description:"Dispatches a prompt to every participant CONCURRENTLY, over the same path as lm_agent -- for a runtime-sized fan-out that parallel([...]) cannot express, since parallel is a language construct fixed to the call expressions written in the script. Each participant gets its own result in its own array slot; there is no shared accumulator to race on.",parameters:[{name:"participants",type:"array",description:"Array of member maps, each shaped like lm_agent's member argument"},{name:"prompts",type:"string|array",description:"A single string broadcast to every participant, or an array of strings (one per participant, must be the same length as participants)"},{name:"options",type:"map",description:"(optional) Same options as lm_agent (permissionMode, idleTimeoutMs), applied identically to every participant"}],returns:{type:"array",description:"Array of lm_agent-shaped result maps ({ status, reply, error, message_id, team_chat_log_id }), in the SAME order as participants (not first-to-finish order)"},example:'reviewers = [{provider:"codex"}, {provider:"claude"}, {provider:"agy"}]; results = lm_fanout(reviewers, "Review this diff for correctness issues.");'},{name:"lm_seed",category:"lmctl Automation",signature:"lm_seed(teamfile, options = {})",description:"Seeds a real teamfile over the exact same internal path `lmctl seed` takes: seeds only members that lack a sessionid, writes each new sessionid/sessiondir back into the teamfile file, and leaves an already-seeded member untouched. `lmctl seed` itself stays a minimal primitive (one-sentence Lead prompt); a workflow that wants a richer or role-specific preamble supplies it via options.preamble instead of lmctl growing that behavior.",parameters:[{name:"teamfile",type:"string",description:"Path to the team configuration file to seed"},{name:"options",type:"map",description:'(optional) preamble: a string (replaces the default prompt for whichever alias gets one today -- Lead) or a map keyed by alias, e.g. {"Lead": "...", "Reviewer": "..."} (replaces the default prompt entirely for each matched alias; a non-Lead alias gets no prompt at all unless keyed here)'}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, code?: string, seeded: [{ alias, provider, sessionid, sessiondir, model }] }'},example:'lm_seed("team.lmctl", { preamble: { Lead: "Use `lmctl prompt` to send a message.", Reviewer: "Wait for a review request from Lead before doing anything." } });'},{name:"lm_terminal",category:"lmctl Automation",signature:"lm_terminal(teamfile, alias)",description:"Opens a tracked team member in its native provider TUI, preserving terminal ownership and inherited stdio. The host attempts checked lock/invocation release on completion, failure, cancellation or signal and reports unresolved failures, including a busy database; the returned outcome is an ordinary map. Refuses non-interactive mode.",parameters:[{name:"teamfile",type:"string",description:"Teamfile path"},{name:"alias",type:"string",description:"Member alias"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, exit_code: number, signal: string|null, code?: string }'},example:'lm_terminal("team.lmctl", "Lead");'},{name:"lm_lint",category:"lmctl Automation",signature:"lm_lint(teamfile)",description:'Validates a teamfile over the exact same internal path `lmctl lint` takes, returning structured findings instead of text a script would otherwise have to parse (operator, 2026-09-30: "lmscript does not use lmctl cli... expose lmctl internal working as api"). status is "error" ONLY for a genuine validation error (unparseable file, bad _MEMBER_ line, confirmed wrong-provider model) -- warnings never flip it to "error", matching the CLI\'s own exit-0-on-warnings contract. Progress/error/warning lines are also written to stderr, same as lmctl lint.',parameters:[{name:"teamfile",type:"string",description:"Path to the team configuration file to validate"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, errors: [{alias, message}], warnings: [{alias, message}], counts: {errors, warnings} }; alias is "" when a finding is about the file rather than a member. Both lists are always arrays, never null.'},example:'result = lm_lint("team.lmctl"); if (result.counts.warnings > 0) { lm_log(result.counts.warnings + " warning(s)"); }'},{name:"lm_ratelimit_readings",category:"lmctl Automation",signature:"lm_ratelimit_readings(options = {})",description:"Queries live provider quota readings using the existing ratelimit reader; preserves raw fields without cost aggregation or inferred availability.",parameters:[{name:"options",type:"map",description:"(optional) providers: string[] or provider: string (default all); timeoutSeconds: positive number (default 15)"}],returns:{type:"map",description:'{ status: "ok", error: null, readings: map[] } or { status: "error", error: string, readings: [] }. Provider-level failures remain reading data; inspect each reading.status and bucket flags.'},example:'quota = lm_ratelimit_readings({ providers: ["codex", "claude"] });'},{name:"lm_read_prompts",category:"lmctl Automation",signature:"lm_read_prompts(batchfile, single = false)",description:"Reads prompt file with BOM and CRLF normalization, splitting into paragraphs or reading entire file as single prompt.",parameters:[{name:"batchfile",type:"string",description:"Path to prompt file"},{name:"single",type:"bool",description:"(optional) If true, treats entire file as one prompt; if false, splits on blank lines"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, prompts: string[] }'},example:'prompts = lm_read_prompts("prompts.txt");'},{name:"lm_read_paragraphs",category:"lmctl Automation",signature:"lm_read_paragraphs(batchfile)",description:"Reads a prompt file and splits it into blank-line-separated paragraphs.",parameters:[{name:"batchfile",type:"string",description:"Path to prompt file"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, prompts: string[] }'},example:'paragraphs = lm_read_paragraphs("spec.md");'},{name:"lm_members",category:"lmctl Automation",signature:"lm_members(teamfile)",description:"Resolves all team members declared in a team configuration file.",parameters:[{name:"teamfile",type:"string",description:"Path to team configuration file"}],returns:{type:"map",description:'{ status: "ok"|"error", error: string|null, members: [{ alias, provider, model, sessionid, sessiondir }] }'},example:'members = lm_members("team.lmctl");'},{name:"lm_member",category:"lmctl Automation",signature:"lm_member(teamfile, alias)",description:"Resolves a specific member in a team configuration file.",parameters:[{name:"teamfile",type:"string",description:"Path to team configuration file"},{name:"alias",type:"string",description:"Member alias to look up"}],returns:{type:"map",description:'{ status: "ok"|"not_found"|"error", error: string|null, member?: { alias, provider, model, sessionid, sessiondir }, isLead?: bool, teamfile?: string }'},example:'m = lm_member("team.lmctl", "reviewer");'},{name:"lm_log",category:"lmctl Automation",signature:"lm_log(value, ...args)",description:"Writes formatted log messages to standard error with trailing newline.",parameters:[{name:"value",type:"any",description:"Required first value or message"},{name:"args",type:"any[]",description:"Additional values or messages to log to stderr"}],returns:{type:"string",description:"The formatted text"},example:'lm_log("Step completed successfully");'},{name:"lm_error",category:"lmctl Automation",signature:"lm_error(value, ...args)",description:"Writes error messages to standard error prefixed with 'error: '.",parameters:[{name:"value",type:"any",description:"Required first error detail"},{name:"args",type:"any[]",description:"Additional error details to write to stderr"}],returns:{type:"string",description:"The formatted error text"},example:'lm_error("Failed to connect to team member");'},{name:"lm_exit",category:"lmctl Automation",signature:"lm_exit(code = 0)",description:"Immediately terminates script execution with the specified integer exit code (0-255).",parameters:[{name:"code",type:"number",description:"(optional) Exit status code between 0 and 255 (default: 0)"}],returns:{type:"never",description:"Raises LMScriptExit control flow"},example:"lm_exit(1);"}]});function G(t){try{if(t instanceof Error){let e=t.message;if(typeof e=="string")return e}return String(t)}catch{return"Unprintable error"}}function fe(t){return{...t,status:"ok",error:null}}function B(t,e,n){return{...n,status:"error",code:t,error:e}}var mt=M(()=>{"use strict"});function av(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?vo:ov}var ov,vo,Im=M(()=>{"use strict";ov="root_teamfile <> '(direct)'",vo=ov+" AND COALESCE(accounting_only,0)=0"});import{existsSync as EO}from"node:fs";import{createRequire as TO}from"node:module";function SO(){return xm===null&&(xm=TO(import.meta.url)("node:sqlite").DatabaseSync),xm}function IO(t){let e=RO[t];if(e!==void 0)return e;let n=kO[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function is(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=IO(t.errcode)),t}function xO(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function AO(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Am(t){return t.length===1&&CO(t[0])?[t[0]]:t}function CO(t){if(!Om(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Om(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var xm,kO,RO,Cm,os,Nm,bo=M(()=>{"use strict";xm=null;kO={1:"SQLITE_ERROR",2:"SQLITE_INTERNAL",3:"SQLITE_PERM",4:"SQLITE_ABORT",5:"SQLITE_BUSY",6:"SQLITE_LOCKED",7:"SQLITE_NOMEM",8:"SQLITE_READONLY",9:"SQLITE_INTERRUPT",10:"SQLITE_IOERR",11:"SQLITE_CORRUPT",12:"SQLITE_NOTFOUND",13:"SQLITE_FULL",14:"SQLITE_CANTOPEN",15:"SQLITE_PROTOCOL",17:"SQLITE_SCHEMA",18:"SQLITE_TOOBIG",19:"SQLITE_CONSTRAINT",20:"SQLITE_MISMATCH",21:"SQLITE_MISUSE",23:"SQLITE_AUTH",25:"SQLITE_RANGE",26:"SQLITE_NOTADB"},RO={275:"SQLITE_CONSTRAINT_CHECK",531:"SQLITE_CONSTRAINT_COMMITHOOK",787:"SQLITE_CONSTRAINT_FOREIGNKEY",1043:"SQLITE_CONSTRAINT_FUNCTION",1299:"SQLITE_CONSTRAINT_NOTNULL",1555:"SQLITE_CONSTRAINT_PRIMARYKEY",1811:"SQLITE_CONSTRAINT_TRIGGER",2067:"SQLITE_CONSTRAINT_UNIQUE",2323:"SQLITE_CONSTRAINT_VTAB",2579:"SQLITE_CONSTRAINT_ROWID",2835:"SQLITE_CONSTRAINT_PINNED",3091:"SQLITE_CONSTRAINT_DATATYPE",261:"SQLITE_BUSY_RECOVERY",517:"SQLITE_BUSY_SNAPSHOT",773:"SQLITE_BUSY_TIMEOUT",262:"SQLITE_LOCKED_SHAREDCACHE",518:"SQLITE_LOCKED_VTAB"};Cm=class{name;handle;savepointId=0;constructor(e,n={}){if(n.fileMustExist===!0&&e!==":memory:"&&!EO(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(SO())(e,{readOnly:n.readonly===!0})}catch(r){is(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Nm(this.handle.prepare(e))}catch(n){is(n)}}exec(e){try{this.handle.exec(e)}catch(n){is(n)}}pragma(e,n){let r=`PRAGMA ${e}`;if(e.includes("=")){this.exec(r);return}if(n?.simple===!0){let s=this.prepare(r).get();return s===void 0?void 0:Object.values(s)[0]}return this.prepare(r).all()}transaction(e){let n=(...r)=>this.runTransaction("BEGIN",e,r);return n.immediate=(...r)=>this.runTransaction("BEGIN IMMEDIATE",e,r),n}get inTransaction(){return this.handle.isTransaction}close(){try{this.handle.close()}catch(e){is(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let i=n(...r);return this.exec("COMMIT"),i}catch(i){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(o){if(!xO(o))throw o}throw i}}let s=`lmctl_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${s}`);try{let i=n(...r);return this.exec(`RELEASE ${s}`),i}catch(i){if(this.inTransaction)try{this.exec(`ROLLBACK TO ${s}`),this.exec(`RELEASE ${s}`)}catch(o){if(!AO(o))throw o}throw i}}};os=Cm,Nm=class{constructor(e){this.handle=e;this.handle.setAllowBareNamedParameters(!0)}rawMode=!1;get(...e){try{let n=this.handle.get(...Am(e));return this.normalizeRow(n)}catch(n){is(n)}}all(...e){try{return this.handle.all(...Am(e)).map(n=>this.normalizeRow(n))}catch(n){is(n)}}run(...e){try{let n=this.handle.run(...Am(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){is(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Om(e)?Object.values(e):Om(e)?{...e}:e}}});function Lm(t){return new os(t,{readonly:!0,fileMustExist:!0})}var lv=M(()=>{"use strict";bo()});import{createHash as NO}from"node:crypto";import{lstat as OO,readFile as LO,realpath as cv,stat as uv}from"node:fs/promises";import{isAbsolute as dv,relative as MO,resolve as PO,sep as DO}from"node:path";function J(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function re(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function wo(t){return re(t)}function $t(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function ye(t){if(!Number.isSafeInteger(t.maxBytes)||t.maxBytes<=0)throw new Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(t.maxRows)||t.maxRows<=0)throw new Error("maxRows must be a positive safe integer");t.signal.throwIfAborted()}function Ee(t,e){return t<e?-1:t>e?1:0}function pt(t,e,n){if(t===null||e===null)return null;let r=n==="written"?"write":"read",s=0;for(let i of t){if(i.bytes===null)return null;s+=i.bytes}for(let i of e)if(i.direction===r){if(i.bytes===null)return null;s+=i.bytes}return s}function gn(t,e,n){let r={},s=wo(t.cacheWrite5m),i=wo(t.cacheWrite1h),o=wo(t.reasoning),a=wo(t.webSearch),l=wo(t.webFetch);o!==null&&(e===null||o<=e)&&(r.reasoning_output_tokens=o);let c=(s??0)+(i??0),u=n===null||c<=n;return s!==null&&u&&(r.cache_write_5m_tokens=s),i!==null&&u&&(r.cache_write_1h_tokens=i),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function gr(t){return typeof t=="string"&&$O.has(t.toLowerCase())}function Fe(t,e){t.record({direction:"read",kind:"unattributed",id:e,ref:null,bytes:null,basis:"unknown"}),t.record({direction:"write",kind:"unattributed",id:e,ref:null,bytes:null,basis:"unknown"})}function zs(t){let e=J(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Ve(t,e){if(!dv(t))return null;let n=await OO(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await cv(t).catch(()=>null);if(!r)return null;for(let s of e){let i=await cv(s).catch(()=>PO(s)),o=MO(i,r);if(o===""||!o.startsWith(`..${DO}`)&&o!==".."&&!dv(o))return r}return null}async function Tt(t,e){ye(e);let n=await uv(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await LO(t,{signal:e.signal});e.signal.throwIfAborted();let s=await uv(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Eo}:sha256:${NO("sha256").update(r).digest("hex")}`,data:r}}function Cl(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=t.toString("utf8"),r=n.length===0?[]:n.slice(0,-1).split(`
480
480
  `),s=[];for(let i of r)if(e.signal.throwIfAborted(),!!i.trim())try{let o=J(JSON.parse(i));if(!o)return null;s.push(o)}catch{return null}return s}var Eo,Et,Dt,FO,Ft,$O,Hn=M(()=>{"use strict";Eo="bx3",Et={input_uncached:null,input_cached:null,input_cache_write:null,output:null};Dt=class{map=new Map;record(e,n,r,s){if(typeof r!="string"||r.length===0||r.includes("\0"))return;let i=`${e}\0${n}\0${r}`;this.map.has(i)||this.map.set(i,{direction:n,path:r,bytes:s})}files(e){let n=[];for(let r of this.map.values())r.direction===e&&n.push({path:r.path,bytes:r.bytes});return n}},FO=0,Ft=class{map=new Map;record(e){let n;e.id!==null?n=`id\0${e.id}\0${e.direction}\0${e.kind}`:e.bytes===null?n=`mark\0${e.direction}\0${e.kind}\0${e.basis}\0${e.ref??""}`:n=`seq\0${FO++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};$O=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as jO}from"node:fs/promises";import{join as mv,sep as pv}from"node:path";var Ks,Mm=M(()=>{"use strict";Hn();Ks=class{constructor(e){this.format=e}async discover(e,n,r){ye(e);let s=[],i=0,o=!1,a=async(l,c)=>{if(e.signal.throwIfAborted(),c>8||i>e.maxRows){o=!0;return}let u=await jO(l,{withFileTypes:!0}).catch(m=>(m.code!=="ENOENT"&&(o=!0),[])),d=m=>mv(l,m.name)+(m.isDirectory()?pv:"");for(let m of u.sort((p,f)=>Ee(d(p),d(f)))){e.signal.throwIfAborted();let p=mv(l,m.name),f=m.isDirectory()&&r?.startsWith(p+pv);if(!(r&&!f&&Ee(d(m),r)<=0)){if(!f&&++i>e.maxRows){o=!0;break}if(m.isDirectory())await a(p,c+1);else if(m.isFile()){let g=this.format.sessionId(p);g&&s.push({provider:this.format.provider,sessionid:g,source_id:p})}if(s.length>=n){o=!0;break}}}};return await a(this.format.root,0),s.sort((l,c)=>Ee(l.source_id,c.source_id)),{sources:s.slice(0,n),truncated:o||s.length>n}}async bytes(e,n){if(ye(n),e.provider!==this.format.provider||this.format.sessionId(e.source_id)!==e.sessionid)return null;let r=await Ve(e.source_id,[this.format.root]);if(!r)return null;let s=await Tt(r,n).catch(()=>(n.signal.throwIfAborted(),null));return s&&{...s,revision:`${this.format.revision}:${s.revision}`}}async inspect(e,n){let r=await this.bytes(e,n);return r?{status:"ready",revision:r.revision}:{status:"partial"}}async read(e,n,r){let s=await this.bytes(e,r);if(!s||s.revision!==n)return{status:"partial"};let i=this.format.decode(s.data,e.sessionid,e.source_id,r);return!i||!i.responses?{status:"partial"}:{status:"complete",source:e,revision:n,checkpoint:null,responses:i.responses,...i.captureStatus?{capture_status:i.captureStatus}:{}}}}});function hr(t,e=!0){let n={input_uncached:null,input_cached:null,input_cache_write:null,output:null};if(!e||!t.length||new Set(t.map(r=>r.response_id)).size!==t.length)return n;for(let r of Object.keys(n)){let s=t.map(o=>o.tokens[r]);if(s.some(o=>o===null||!Number.isSafeInteger(o)||o<0))continue;let i=s.reduce((o,a)=>o+a,0);Number.isSafeInteger(i)&&(n[r]=i)}return n}var To=M(()=>{"use strict"});import{createReadStream as fv}from"node:fs";import{createInterface as gv}from"node:readline";import{stat as UO}from"node:fs/promises";import{homedir as HO}from"node:os";function hv(t){try{let e=JSON.parse(t);return e===null||typeof e!="object"||Array.isArray(e)?void 0:e}catch{return}}async function*Ae(t,e){let n=fv(t,{encoding:"utf-8"}),r=gv({input:n,crlfDelay:1/0});try{for await(let s of r){let i=s.trim();if(!i)continue;let o=hv(i);o!==void 0?yield o:e?.()}}finally{n.destroy()}}async function jt(t,e){let n=[],r=fv(t,{encoding:"utf-8"}),s=gv({input:r,crlfDelay:1/0});try{for await(let i of s){let o=i.trim();if(!o)continue;let a=hv(o);if(a!==void 0&&n.push(a),n.length>=e)break}}finally{s.close(),r.destroy()}return n}async function $e(t){let e=await UO(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function Se(t){return t.replace(/\\n/g,`
481
481
  `).replace(/\\t/g," ").replace(/\\r/g,"\r")}function Q(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function Vt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var ae,We=M(()=>{"use strict";ae=HO()});import{readdir as BO}from"node:fs/promises";import{join as Ys,resolve as WO}from"node:path";function Ol(t){return WO(t||process.env.XDG_DATA_HOME||Ys(ae,".local","share"))}function qO(t){return Ys(Ol(t),"muse","sessions")}function XO(t,e,n,r){let s=r?.input_tokens,i=r?.cache_read_tokens??r?.input_cache_read_tokens,o=r?.cache_write_tokens??r?.input_cache_write_tokens,a=typeof r?.promptTokens=="number"?r.promptTokens:typeof r?.prompt_tokens=="number"?r.prompt_tokens:void 0,l=typeof s=="number"&&typeof i=="number"&&i>s||typeof a=="number"&&typeof i=="number"&&i>a||typeof a=="number"&&typeof o=="number"&&o>a||typeof a=="number"&&typeof i=="number"&&typeof o=="number"&&i+o>a,c=l?null:typeof i=="number"?i:null,u=l?null:typeof o=="number"?o:null,d=null;return l||(typeof r?.input_uncached_tokens=="number"?d=r.input_uncached_tokens:typeof a=="number"&&typeof i=="number"&&typeof o=="number"&&a>=i+o&&(d=a-i-o)),{response_id:t,timestamp:e.toISOString(),model:typeof n=="string"&&n.length>0?n:null,tokens:{input_uncached:typeof d=="number"?d:null,input_cached:typeof c=="number"?c:null,input_cache_write:typeof u=="number"?u:null,output:typeof r?.output_tokens=="number"?r.output_tokens:null},files_read:null,files_written:null}}function vv(t,e){let n,r,s,i,o,a=[],l=new Map,c=new Map,u=new Set,d,m,p=()=>{m="partial"},f=y=>{if(typeof y!="string"||y.length===0){p();return}let b=l.get(y);return b||(b={id:y,turn:{id:y,status:"unknown"},responseIds:[]},l.set(y,b)),b},g=y=>{if(y.retained_frame&&Array.isArray(y.children)){for(let S of y.children)try{if(typeof S?.record_json!="string")throw new Error("missing record_json");g(JSON.parse(S.record_json))}catch{p()}return}if(y.stream?.kind!=="session"||y.stream?.id!==t)return;if(y.schema_version!==1){p();return}if(y.payload_type?.startsWith("runtime.session")&&y.payload_schema_version!==1){p();return}let b=y.payload?.source_run_record_id;for(let S of[y.id,b])if(!(typeof S!="string"||S.length===0)&&u.has(S))return;for(let S of[y.id,b])typeof S=="string"&&S.length>0&&u.add(S);let _=typeof y.recorded_at=="number"&&Number.isFinite(y.recorded_at)?new Date(y.recorded_at/1e3):void 0;if(y.recorded_at!==void 0&&(!_||!Number.isFinite(_.getTime()))){p();return}_&&Number.isFinite(_.getTime())&&((!s||_<s)&&(s=_),(!i||_>i)&&(i=_));let v=y.payload;if(y.payload_type==="runtime.session.metadata"&&(typeof v?.record?.workspace_root=="string"&&(n=v.record.workspace_root),typeof v?.record?.model_id=="string"&&(r=v.record.model_id)),y.payload_type!=="runtime.session"||v?.kind!=="run")return;let E=v.event,R=f(v.run_id);if(!E||!_||!R){E||p();return}if(E.kind==="started"&&typeof E.prompt=="string")a.push({role:"user",content:E.prompt,timestamp:_}),R.turn.startedAt=_,R.turn.prompt=E.prompt,R.turn.status="in_progress",o="in_progress";else if(E.kind==="assistant_message_committed"&&typeof E.text=="string")a.push({role:"assistant",content:E.text,timestamp:_});else if(E.kind==="terminal")R.turn.completedAt=_,R.turn.status=E.terminal==="completed"?"complete":"aborted",o=R.turn.status;else if(E.kind==="model_completed"){typeof E.model=="string"&&E.model.length>0&&(r=E.model,R.turn.model=E.model);let S=typeof b=="string"&&b.length>0?b:typeof y.id=="string"&&y.id.length>0?y.id:void 0;if(!S)p();else{R.responseIds.push(S);let j={};if(E.usage&&typeof E.usage=="object")for(let F of["input_tokens","output_tokens","cached_tokens","reasoning_tokens","input_uncached_tokens","cache_read_tokens","input_cache_read_tokens","cache_write_tokens","input_cache_write_tokens","promptTokens","prompt_tokens"]){let Z=E.usage[F];typeof Z=="number"&&Number.isSafeInteger(Z)&&Z>=0&&(j[F]=Z)}Object.keys(j).length>0&&(R.turn.rawUsage=[...R.turn.rawUsage??[],{responseId:S,values:j}]),c.set(S,XO(S,_,E.model,j))}if(!E.usage)return;let I={},N=E.usage.input_tokens,O=E.usage.cache_read_tokens??E.usage.input_cache_read_tokens,A=E.usage.cache_write_tokens??E.usage.input_cache_write_tokens,w=typeof E.usage.promptTokens=="number"?E.usage.promptTokens:typeof E.usage.prompt_tokens=="number"?E.usage.prompt_tokens:void 0,T=typeof N=="number"&&typeof O=="number"&&O>N||typeof w=="number"&&typeof O=="number"&&O>w||typeof w=="number"&&typeof A=="number"&&A>w||typeof w=="number"&&typeof O=="number"&&typeof A=="number"&&O+A>w,k=T?void 0:typeof O=="number"?O:void 0,x=T?void 0:typeof A=="number"?A:void 0,C;T||(typeof E.usage.input_uncached_tokens=="number"?C=E.usage.input_uncached_tokens:typeof w=="number"&&typeof O=="number"&&typeof A=="number"&&w>=O+A&&(C=w-O-A)),C!==void 0&&C<0&&(C=void 0);let L=E.usage.output_tokens,P=E.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(I.inputTokens=C),typeof k=="number"&&Number.isSafeInteger(k)&&k>=0&&(I.cachedInputTokens=k),typeof x=="number"&&Number.isSafeInteger(x)&&x>=0&&(I.cacheWriteInputTokens=x),typeof L=="number"&&Number.isSafeInteger(L)&&L>=0&&(I.outputTokens=L),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(I.reasoningOutputTokens=P),d=I}};return{visit:g,finish:()=>{if(!n||!s||!i)return null;let y=a.filter(E=>E.role==="user").map(E=>E.content),b=[...l.values()].map(E=>({...E.turn,...E.responseIds.length>0?{responseIds:[...E.responseIds]}:{}})),_=[...c.values()],v=hr(_,m!=="partial");return{provider:"muse",sessionId:t,filePath:e,cwd:n,createdAt:s,modifiedAt:i,model:r,messages:a,messageCount:a.length,firstUserMessage:y[0],lastUserMessage:y.at(-1),userPrompts:y,turnStatus:o,totalInputTokens:v.input_uncached??void 0,totalCachedInputTokens:v.input_cached??void 0,totalCacheWriteInputTokens:v.input_cache_write??void 0,totalOutputTokens:v.output??void 0,lastTokenUsage:d,turns:b,responses:_,...m?{captureStatus:m}:{}}},markPartial:p}}function GO(t,e,n){let r=vv(e,n);for(let s of t)r.visit(s);return r.finish()}function JO(t,e,n,r){r.signal.throwIfAborted();let s=Math.max(0,r.maxBytes),i=t.length<=s?t:t.subarray(0,Math.max(0,t.subarray(0,s).lastIndexOf(10))),o=i.length!==t.length,a=[],l=o,c=0,u=m=>{if(!m||typeof m!="object"||Array.isArray(m)){l=!0;return}let p=m;if(p.retained_frame&&Array.isArray(p.children)){for(let f of p.children){if(c>=r.maxRows){l=!0;return}let g;try{if(typeof f?.record_json!="string")throw new Error("missing record_json");g=JSON.parse(f.record_json)}catch{l=!0;continue}u(g)}return}if(c>=r.maxRows){l=!0;return}a.push(p),c++};for(let m of i.toString("utf8").split(/\r?\n/u)){if(r.signal.throwIfAborted(),m.trim()==="")continue;let p;try{p=JSON.parse(m)}catch{l=!0;continue}u(p)}let d=GO(a,e,n);return d&&l&&(d.captureStatus="partial"),d}function bv(t){return{provider:"muse",root:qO(t),revision:"muse-session-v2",sessionId:n=>n.replaceAll("\\","/").match(/\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\/session\.jsonl$/iu)?.[1]??null,decode:JO}}async function _v(t,e){let n=vv(t,e);for await(let r of Ae(e,n.markPartial))n.visit(r);return n.finish()}var yv,Nl,Pm=M(()=>{"use strict";To();We();yv=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Nl=class{name="muse";dataHome;constructor(e={}){this.dataHome=Ol(e.museDataHome)}get root(){return Ys(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await BO(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let i of r)i.isFile()&&i.name==="session.jsonl"?s.push(Ys(e,i.name)):i.isDirectory()&&n<4&&s.push(...await this.files(Ys(e,i.name),n+1));return s}async resolveSessionPath(e){return yv.test(e)?(await this.files()).find(n=>n.endsWith(Ys(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?_v(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!yv.test(r))continue;let s=await _v(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as wv,readdir as VO,rm as zO,stat as Ev}from"node:fs/promises";import{basename as KO,join as Qs,resolve as YO}from"node:path";function Pl(t){return YO(t||process.env.MINIPLAYER_HOME||Qs(process.env.XDG_DATA_HOME||Qs(ae,".local","share"),"miniplayer"))}function Ll(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function Dm(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function Tv(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function Sv(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function kv(t){if(typeof t!="string")return null;try{let e=new URL(t);return e.username="",e.password="",e.search="",e.hash="",e.toString()}catch{return null}}function Rv(t){let e=t.usage&&typeof t.usage=="object"&&!Array.isArray(t.usage)?t.usage:{},n={};for(let[l,c]of Object.entries(e))re(c)!==null&&(n[l]=c);let r=re(e.inputTokens),s=re(e.cachedInputTokens),i=re(t.cacheWriteInputTokens??e.cacheWriteInputTokens),o=re(e.outputTokens),a=null;return t.usageConvention==="input-includes-cache"&&r!==null&&s!==null&&s<=r&&(a=r-s),t.usageConvention==="input-excludes-cache"&&r!==null&&i!==null&&(a=r+i),t.usageConvention==="synthetic"&&r===0&&s===0&&(i===0||i===null)&&o===0&&(a=0),{tokens:{input_uncached:a,input_cached:s,input_cache_write:i,output:o},rawUsage:n,pricingFacts:re(e.reasoningTokens)===null?null:{reasoning_output_tokens:re(e.reasoningTokens)}}}function xv(t,e,n){if(!t||typeof t!="object")return null;let r=t;if(![1,2].includes(r.version)||r.id!==e||typeof r.cwd!="string")return null;let s=f=>{if(typeof f!="string")return;let g=new Date(f);return Number.isFinite(g.getTime())?g:void 0},i=s(r.createdAt),o=s(r.updatedAt);if(!i||!o)return null;let a=[],l=[],c=[],u=r.version===1,d="complete";if(r.version===1){if(!Array.isArray(r.messages))return null;for(let f of r.messages){if(!f||!["user","assistant"].includes(f.role)||typeof f.content!="string")return null;a.push({role:f.role,content:f.content,timestamp:s(f.timestamp)??o})}}else{if(!Array.isArray(r.turns))return null;let f=new Set,g=new Set;for(let h of r.turns){if(!h||typeof h.responseId!="string"||!h.responseId||typeof h.input?.text!="string")return null;if(f.has(h.responseId)){u=!0;continue}f.add(h.responseId);let y=s(h.startedAt),b=s(h.completedAt??h.endedAt);if(!y)return null;let _=typeof h.model=="string"?h.model:void 0;["complete","running","failed","aborted"].includes(h.status)||(u=!0);let v=h.status==="complete"?"complete":h.status==="running"?"in_progress":h.status==="failed"?"failed":h.status==="aborted"?"aborted":"unknown";d=v==="failed"||v==="unknown"?"aborted":v,(v!=="complete"||h.partial===!0)&&(u=!0);let E=Array.isArray(h.modelResponses),R=E?h.modelResponses:[],S=[];l.push({id:h.responseId,startedAt:y,completedAt:b,model:_,prompt:h.input.text,status:v,responseIds:S}),a.push({role:"user",timestamp:y,content:h.input.text});let I=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!E&&!I){let T=h.usage??{},k=Rv({...h,usage:T});Object.keys(k.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:k.rawUsage}]),S.push(h.responseId),c.push({response_id:h.responseId,timestamp:(b??y).toISOString(),model:_??null,model_provider:typeof h.provider=="string"?h.provider:null,tokens:k.tokens,files_read:[],files_written:[],read_bytes:Buffer.byteLength(h.input.text,"utf8"),write_bytes:0,external_io:[{direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"}],pricing_facts:k.pricingFacts}),v!=="complete"&&!h.usage&&(u=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:b??y,content:h.output.text,model:_});continue}let N=new Map,O=new Map,A=new Set,w=[];for(let T of R){if(!T||typeof T!="object"||typeof T.responseId!="string"||!T.responseId){u=!0;continue}if(S.includes(T.responseId)){u=!0;continue}let k=T,x=w.length;w.push({response:k,index:x,filesRead:[],filesWritten:[],io:[]}),S.push(T.responseId),g.has(T.responseId)&&(u=!0),g.add(T.responseId),k.toolCalls!==void 0&&!Array.isArray(k.toolCalls)&&(u=!0,w[x].io.push({direction:"read",kind:"unattributed",id:T.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:T.responseId,ref:null,bytes:null,basis:"unknown"}));for(let C of Array.isArray(k.toolCalls)?k.toolCalls:[]){let L=Tv(C),P=Dm(C);if(L)N.set(L,x),O.set(L,P);else{u=!0;let j=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",F=P==="write_file"||P==="shell"||P==="tool";j&&w[x].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),F&&w[x].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}S.length===0&&R.length>0&&(u=!0);for(let T of Array.isArray(h.toolEvents)?h.toolEvents:[]){let k=T&&typeof T=="object"?T:{},x=Tv(k),C=x?N.get(x):void 0,L=Dm(k),P=Sv(k.result),j=k.status==="failed"||k.error!==void 0;if(k.type==="tool_call"?a.push({role:"tool_use",timestamp:s(k?.timestamp)??y,content:Ll(k?.input??k?.args),toolName:L,toolInput:Ll(k?.input??k?.args),toolInputData:Sv(k?.input??k?.args)??void 0,...x?{toolCallId:x}:{}}):a.push({role:"tool_result",timestamp:s(k?.timestamp)??b??y,content:Ll(j?k?.error:k?.result),toolName:L,...x?{toolCallId:x}:{}}),C===void 0){u=!0;continue}let F=w[C];(k.type==="tool_result"||j||k.result!==void 0)&&A.add(x);let Z=P?.path,q=re(P?.bytesRead??P?.bytesWritten);k.type!=="tool_call"&&(L==="read_file"&&!j&&typeof Z=="string"&&q!==null?F.filesRead.push({path:Z,bytes:q}):L==="write_file"&&!j&&typeof Z=="string"&&q!==null?F.filesWritten.push({path:Z,bytes:q}):L==="webget"&&!j&&q!==null?F.io.push({direction:"read",kind:"web",id:x,ref:kv(P?.finalUrl??P?.url),bytes:q,basis:"certified_counter"}):L==="shell"||j?(L!=="write_file"&&F.io.push({direction:"read",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}),(L==="shell"||L==="write_file")&&F.io.push({direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"})):L==="list_directory"||L==="read_file"||L==="webget"?F.io.push({direction:"read",kind:L==="webget"?"web":"unattributed",id:x,ref:L==="webget"?kv(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):L==="write_file"?F.io.push({direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}):F.io.push({direction:"read",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}))}for(let[T,k]of O)if(!A.has(T)){let x=w[N.get(T)],C=k==="list_directory"||k==="read_file"||k==="webget"||k==="shell",L=k==="write_file"||k==="shell";C&&x.io.push({direction:"read",kind:"unattributed",id:T,ref:null,bytes:null,basis:"unknown"}),L&&x.io.push({direction:"write",kind:"unattributed",id:T,ref:null,bytes:null,basis:"unknown"}),u=!0}for(let T of w){let k=T.response,x=Rv(k),C=s(k.completedAt??k.startedAt)??b??y;new Set((Array.isArray(k.toolCalls)?k.toolCalls:[]).map(F=>Dm(F))).has("shell")&&!T.io.some(F=>F.kind==="unattributed"&&F.direction==="read")&&T.io.push({direction:"read",kind:"unattributed",id:k.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:k.responseId,ref:null,bytes:null,basis:"unknown"}),T.index===0&&T.io.unshift({direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"});let P=T.io.some(F=>F.direction==="read"&&F.bytes===null),j=T.io.some(F=>F.direction==="write"&&F.bytes===null);if(c.push({response_id:k.responseId,timestamp:C.toISOString(),model:typeof k.model=="string"?k.model:null,model_provider:typeof k.provider=="string"?k.provider:typeof h.provider=="string"?h.provider:null,tokens:x.tokens,files_read:P?null:T.filesRead,files_written:j?null:T.filesWritten,read_bytes:P?null:T.filesRead.reduce((F,Z)=>F+(Z.bytes??0),0)+T.io.filter(F=>F.direction==="read").reduce((F,Z)=>F+(Z.bytes??0),0),write_bytes:j?null:T.filesWritten.reduce((F,Z)=>F+(Z.bytes??0),0)+T.io.filter(F=>F.direction==="write").reduce((F,Z)=>F+(Z.bytes??0),0),external_io:T.io,pricing_facts:x.pricingFacts}),Object.keys(x.rawUsage).length){let F=l.at(-1);F.rawUsage=[...F.rawUsage??[],{responseId:k.responseId,values:x.rawUsage}]}}l.at(-1).responseIds=S,S.length!==R.length&&(u=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:b??y,content:h.output.text,model:_})}}let m=a.filter(f=>f.role==="user").map(f=>f.content),p=hr(c,!u);return{provider:"miniplayer",sessionId:e,cwd:r.cwd,filePath:n,createdAt:i,modifiedAt:o,model:typeof r.model=="string"?r.model:void 0,messages:a,messageCount:a.length,userPrompts:m,firstUserMessage:m[0],lastUserMessage:m.at(-1),turns:l,responses:c,turnStatus:d,...u?{captureStatus:"partial"}:{},totalInputTokens:p.input_uncached??void 0,totalCachedInputTokens:p.input_cached??void 0,totalCacheWriteInputTokens:p.input_cache_write??void 0,totalOutputTokens:p.output??void 0}}function Dl(t){return{provider:"miniplayer",root:Qs(Pl(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=KO(e,".json");return e.endsWith(".json")&&Iv.test(n)?n:null},decode(e,n,r,s){s.signal.throwIfAborted();try{let i=JSON.parse(e.toString("utf8"));return(Array.isArray(i.turns)?i.turns.reduce((a,l)=>a+1+(Array.isArray(l?.modelResponses)?l.modelResponses.length:0)+(Array.isArray(l?.toolEvents)?l.toolEvents.length:0),0):Array.isArray(i.messages)?i.messages.length:0)>s.maxRows?null:xv(i,n,r)}catch{return null}}}}var Iv,Ml,Fl=M(()=>{"use strict";To();We();Hn();Iv=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;Ml=class{name="miniplayer";home;constructor(e={}){this.home=Pl(e.miniplayerHome)}getWatchPaths(){return[{directory:Qs(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await VO(Qs(this.home,"sessions"))}catch{return[]}return(await Promise.all(e.filter(r=>r.endsWith(".json")).map(r=>this.loadSession(r.slice(0,-5))))).filter(r=>r!==null)}async resolveSessionPath(e){if(!Iv.test(e))return null;let n=Qs(this.home,"sessions",`${e}.json`);try{return(await Ev(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=xv(JSON.parse(await wv(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let i=JSON.parse(await wv(`${n}.lock`,"utf8"));if(Number.isInteger(i.pid)&&i.pid>0)try{process.kill(i.pid,0),s="in_progress"}catch{s="aborted"}}catch{}return{...r,...s!=="complete"?{turnStatus:s}:{}}}catch{return null}}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{throw await Ev(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await zO(n),!0}}});import{createHash as QO}from"node:crypto";import{createRequire as ZO}from"node:module";import{readdir as eL,realpath as tL}from"node:fs/promises";import{basename as Av,dirname as nL,join as Cv,resolve as Nv}from"node:path";function sL(){return rL("node:sqlite").DatabaseSync}function iL(){return process.env.HOME||process.env.USERPROFILE||""}function as(t){let e=[],n=0,r=()=>{let s=0n,i=0n;for(;;){if(n>=t.length||i>63n)return null;let o=t[n++];if(s|=BigInt(o&127)<<i,i+=7n,!(o&128))break}return s<=BigInt(Number.MAX_SAFE_INTEGER)?Number(s):null};for(;n<t.length;){let s=r();if(s===null)return e;let i=s>>>3,o=s&7;if(i===0)return e;if(o===0){let a=r();if(a===null)return e;e.push({field:i,wire:o,varint:a})}else if(o===1){if(n+8>t.length)return e;n+=8,e.push({field:i,wire:o})}else if(o===5){if(n+4>t.length)return e;n+=4,e.push({field:i,wire:o})}else if(o===2){let a=r();if(a===null||n+a>t.length)return e;e.push({field:i,wire:o,bytes:t.subarray(n,n+a)}),n+=a}else return e}return e}function hn(t,e){return t.find(n=>n.field===e)}function oL(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=as(n.bytes),s=hn(r,1)?.bytes,i=hn(r,2)?.bytes;if(s===void 0||i===void 0)continue;let o=s.toString("utf8");e.has(o)||e.set(o,i.toString("utf8"))}return e}function aL(t){let e=hn(as(t),5)?.bytes;if(e===void 0)return null;let n=hn(as(e),1)?.bytes;if(n===void 0)return null;let r=as(n),s=hn(r,1)?.varint;if(s===void 0)return null;let i=hn(r,2)?.varint??0,o=s*1e3+Math.floor(i/1e6),a=new Date(o);return Number.isFinite(a.getTime())?a.toISOString():null}function lL(t){let e=hn(t,4)?.bytes,n=e!==void 0?as(e):[],r=s=>{let i=hn(n,s)?.varint;return i===void 0?null:re(i)};return{tokens:{input_uncached:r(2),input_cached:r(5),input_cache_write:r(4),output:r(3)},thinkingOutputTokens:r(9)}}function cL(t){let e=hn(as(t),1)?.bytes;if(e===void 0)return null;let n=as(e),r=oL(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let i=hn(n,19)?.bytes,o=i!==void 0&&i.length>0?i.toString("utf8"):null,a=r.get("last_step_index"),l=a===void 0?Number.NaN:Number(a),c=Number.isSafeInteger(l)&&l>=0?l:null,{tokens:u,thinkingOutputTokens:d}=lL(n);return{requestId:s,model:o,lastStepIndex:c,tokens:u,thinkingOutputTokens:d}}function Ov(t,e){ye(e);let n=t.prepare("SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) AS total FROM gen_metadata").get(),r=re(n?.total);if(r===null||r>e.maxBytes)return null;let s=t.prepare("SELECT idx, data FROM gen_metadata ORDER BY idx LIMIT ?").all(e.maxRows+1);if(s.length>e.maxRows)return null;let i=QO("sha256");i.update("rev:").update($l).update(`
482
482
  `);let o=[],a=[],l=0;for(let d of s){if(e.signal.throwIfAborted(),!(d.data instanceof Uint8Array))return null;let m=Buffer.from(d.data);if(l+=m.length,l>e.maxBytes)return null;i.update("g").update(String(d.idx)).update("\0").update(m).update(`
@@ -1759,7 +1759,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1759
1759
  status, started_at, last_heartbeat_at, last_seq)
1760
1760
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', ?, ?, ?)`).run(n,e.kind,e.origin,e.launch_source??e.kind,e.from_identity,e.target_teamfile,e.target_alias,e.root_teamfile,e.cwd,e.command,e.team_chat_log_id===null?null:`msg_tcl_${e.team_chat_log_id}`,e.request_payload,e.holder_pid,e.holder_host,e.started_at,e.last_heartbeat_at,i),Tp(e)&&Pw(t,i,{invocationId:n,targetTeamfile:e.target_teamfile,targetAlias:e.target_alias??"",holderPid:e.holder_pid,holderHost:e.holder_host,heartbeatAt:s})})}function yc(t,e){let n=Es(e.id),r=$w(t,n);return r===null?!1:(Rt(t,{stream_id:n,event_type:a0,observedLastSeq:r.last_seq,ts:e.ended_at??e.started_at,payload:{invocation_id:n,status:e.status,ended_at:e.ended_at,exit_code:e.exit_code,signal:e.signal,result_summary:e.result_summary,error:e.error,legacy:{table:"tracked_invocation",id:e.id}}},s=>{if(t.prepare(`UPDATE invocation_state
1761
1761
  SET status = ?, ended_at = ?, result_summary = ?, error = ?, last_seq = ?
1762
- WHERE invocation_id = ? AND last_seq = ?`).run(e.status,e.ended_at,e.result_summary,e.error,s,n,r.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_FINISH for ${n}`);Tp(e)&&Fw(t,s,n)}),!0)}function Uw(t,e,n,r){let s=Es(e.id),i=$w(t,s);return i===null?!1:(Rt(t,{stream_id:s,event_type:l0,observedLastSeq:i.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},o=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,o,s,i.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function Hw(t,e,n){let r=Es(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Tp(e)&&Dw(t,r,n)}function Bw(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,Es(e))}function Ww(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,Es(e))}var o0,a0,l0,qw=M(()=>{"use strict";lc();hc();o0="INVOCATION_START",a0="INVOCATION_FINISH",l0="INVOCATION_NOTIFY_CLAIM"});var c0,u0,Bz,Xw,Gw,Jw,Vw=M(()=>{"use strict";c0="other",u0=["not_enough_information","dont_know","other_work"],Bz=new Set([c0,...u0]),Xw="@abort",Gw="invalid_decision",Jw="workflow_escalation"});import{randomUUID as zw}from"node:crypto";import{existsSync as Zw,mkdirSync as d0,renameSync as m0,rmdirSync as p0}from"node:fs";import{hostname as kp}from"node:os";function K(){return new Date().toISOString()}function f0(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!Zw(t))return e;let n;try{n=new os(t,{readonly:!0})}catch{return e}try{let r=[];try{r=n.prepare("SELECT teamfile_path, name, raw_text, raw_sha256, registered_at, last_seeded_at FROM root_team").all()}catch{}let s=[];try{s=n.prepare("SELECT key, value FROM lmctl_config").all()}catch{}return{rootTeams:r,config:s}}finally{n.close()}}function g0(t){if(t===":memory:"||!Zw(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{m0(r,`${e}${n}`)}catch{}}return e}function Kw(t,e){let n=e instanceof Error?e.message:String(e);try{let r=f0(t),s=g0(t),i=new Go(dc({dbPath:t}));for(let o of r.rootTeams)i.upsertRootTeam(o);for(let{key:o,value:a}of r.config)i.setConfig(o,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${Ir} (${n}); started a fresh database instead. Preserved ${r.rootTeams.length} team registration(s) and ${r.config.length} config value(s).`+(s!==null?` Old database backed up at ${s}.
1762
+ WHERE invocation_id = ? AND last_seq = ?`).run(e.status,e.ended_at,e.result_summary,e.error,s,n,r.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_FINISH for ${n}`);Tp(e)&&Fw(t,s,n)}),!0)}function Uw(t,e,n,r){let s=Es(e.id),i=$w(t,s);return i===null?!1:(Rt(t,{stream_id:s,event_type:l0,observedLastSeq:i.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},o=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,o,s,i.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function Hw(t,e,n){let r=Es(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Tp(e)&&Dw(t,r,n)}function Bw(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,Es(e))}function Ww(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,Es(e))}var o0,a0,l0,qw=M(()=>{"use strict";lc();hc();o0="INVOCATION_START",a0="INVOCATION_FINISH",l0="INVOCATION_NOTIFY_CLAIM"});var c0,u0,qz,Xw,Gw,Jw,Vw=M(()=>{"use strict";c0="other",u0=["not_enough_information","dont_know","other_work"],qz=new Set([c0,...u0]),Xw="@abort",Gw="invalid_decision",Jw="workflow_escalation"});import{randomUUID as zw}from"node:crypto";import{existsSync as Zw,mkdirSync as d0,renameSync as m0,rmdirSync as p0}from"node:fs";import{hostname as kp}from"node:os";function K(){return new Date().toISOString()}function f0(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!Zw(t))return e;let n;try{n=new os(t,{readonly:!0})}catch{return e}try{let r=[];try{r=n.prepare("SELECT teamfile_path, name, raw_text, raw_sha256, registered_at, last_seeded_at FROM root_team").all()}catch{}let s=[];try{s=n.prepare("SELECT key, value FROM lmctl_config").all()}catch{}return{rootTeams:r,config:s}}finally{n.close()}}function g0(t){if(t===":memory:"||!Zw(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{m0(r,`${e}${n}`)}catch{}}return e}function Kw(t,e){let n=e instanceof Error?e.message:String(e);try{let r=f0(t),s=g0(t),i=new Go(dc({dbPath:t}));for(let o of r.rootTeams)i.upsertRootTeam(o);for(let{key:o,value:a}of r.config)i.setConfig(o,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${Ir} (${n}); started a fresh database instead. Preserved ${r.rootTeams.length} team registration(s) and ${r.config.length} config value(s).`+(s!==null?` Old database backed up at ${s}.
1763
1763
  `:`
1764
1764
  `)),i}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`${t}: unusable (${n}), and recovery into a fresh database also failed (${s}). Check that the containing directory is writable, or move the file aside manually and retry.`)}}function Sp(t,e){let n;try{return n=dc({dbPath:t,allowSchemaSkew:e}),{dal:new Go(n)}}catch(r){if(r instanceof bs)throw r;let s;if(n!==void 0)try{s=n.pragma("user_version",{simple:!0})}catch{}try{n?.close()}catch{}return{cause:r,dbVersion:s}}}function v0(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function b0(t){if(t===":memory:")return!0;try{return d0(`${t}${eE}`),!0}catch{return!1}}function w0(t){if(t!==":memory:")try{p0(`${t}${eE}`)}catch{}}function ot(t){let e=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(t.recover===!1){let s=Sp(t.path,e);if(s.dal)return s.dal;throw s.cause}let n={};for(let s=0;s<h0;s+=1)if(n=Sp(t.path,e),n.dal!==void 0)return n.dal;let r=n.cause?.code;if(typeof r=="string"&&/^SQLITE_(BUSY|LOCKED)/.test(r))throw new Error(t.path+": database is busy; retry this command after the other writer finishes.",{cause:n.cause});if(n.dbVersion!==void 0&&n.dbVersion>Ir){let s=n.cause instanceof Error?n.cause.message:String(n.cause);throw new bs(t.path,n.dbVersion,Ir,s)}for(let s=0;s<y0;s+=1){if(b0(t.path))try{return Kw(t.path,n.cause)}finally{w0(t.path)}v0(_0);let i=Sp(t.path,e);if(i.dal!==void 0)return i.dal}return Kw(t.path,n.cause)}function Yw(t,e,n){let r=Qw(e);if(r.length===0)return;let s=new Set,i=[],o=l=>{if(l===t)return r;let c=n(l);if(c===null)throw new Error(`unknown workflow reference: ${l}`);return Qw(c.definition)},a=l=>{let c=i.indexOf(l);if(c>=0)throw new Error(`cycle detected: ${[...i.slice(c),l].join(" -> ")}`);if(!s.has(l)){i.push(l);try{for(let u of o(l))a(u)}finally{i.pop()}s.add(l)}};a(t)}function Qw(t){let e=E0(t),n=e===null?null:T0(e,"states");if(n===null)return[];let r=[];for(let s of Object.values(n))_c(s)&&s.type==="Subflow"&&typeof s.workflow_name=="string"&&s.workflow_name.length>0&&r.push(s.workflow_name);return r}function E0(t){try{let e=JSON.parse(t);return _c(e)?e:null}catch{return null}}function T0(t,e){let n=t[e];return _c(n)?n:null}function _c(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function S0(t){try{let e=JSON.parse(t);return!_c(e)||typeof e.lock_id!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}function k0(t,e){return t===null?!0:t.holder_host===kp()?!ft(t.holder_pid):t.last_heartbeat<e}function R0(t){return{getRuntimeState:t.prepare("SELECT * FROM runtime_state WHERE scope = ? AND key = ? AND kind = ?"),upsertRuntimeState:t.prepare(`
1765
1765
  INSERT INTO runtime_state (scope, key, kind, data, updated_at)
@@ -2175,28 +2175,28 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
2175
2175
  AND ended_at >= ?
2176
2176
  ORDER BY started_at ASC, id ASC
2177
2177
  `).all(...e,n)}finishTrackedInvocation(e,n){return this.db.transaction(()=>{let r=n.ended_at??K();if(this.stmts.finishTrackedInvocation.run(n.status,r,n.exit_code??null,n.signal??null,Kt(n.result_summary),Kt(n.error),n.team_chat_log_id??null,Kt(n.meta),Kt(n.config_warnings),r,e).changes!==1)return null;let i=this.getTrackedInvocation(e);return yc(this.db,i),i.status==="cancelled"&&i.signal!==null&&i.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(i.team_chat_log_id,i.error??`holder received ${i.signal}`),i})()}reclaimTrackedInvocationIfUnchanged(e,n,r){return this.db.transaction(()=>{let s=r.ended_at??K();if(this.stmts.reclaimTrackedInvocationIfUnchanged.run(r.status,s,r.exit_code??null,r.signal??null,Kt(r.result_summary),Kt(r.error),r.team_chat_log_id??null,Kt(r.meta),Kt(r.config_warnings),s,e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let o=this.getTrackedInvocation(e);return yc(this.db,o),o})()}heartbeatTrackedInvocation(e,n=K()){return this.db.transaction(()=>{if(this.stmts.heartbeatTrackedInvocation.run(n,e).changes!==1)return null;let s=this.getTrackedInvocation(e);return Hw(this.db,s,n),s})()}updateTrackedInvocationRequestPayload(e,n){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(n,e).changes!==1?null:(Bw(this.db,e,n),this.getTrackedInvocation(e)))()}linkTrackedInvocationMessage(e,n){return this.db.transaction(()=>this.stmts.linkTrackedInvocationChatLog.run(n,e).changes!==1?null:(Ww(this.db,e,Gn(n)),this.getTrackedInvocation(e)))()}abortTrackedInvocationAndTerminalizeMessage(e,n,r){return this.db.transaction(()=>{let s=K();if(this.stmts.abortTrackedInvocationIfUnchanged.run(s,Kt(r),e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let o=this.getTrackedInvocation(e);return yc(this.db,o),o.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(o.team_chat_log_id,r),o})()}terminalizeLinkedChatMessage(e,n){let r=this.stmts.getTeamChatLogById.get(e);r===void 0||r.status!=="running"||this.stmts.terminalizeTeamChatLogIfRunning.run("error",n,e).changes!==1||gc(this.db,e,{root_teamfile:r.root_teamfile,sender_teamfile:r.sender_teamfile,sender_alias:r.sender_alias,receiver_teamfile:r.receiver_teamfile,receiver_alias:r.receiver_alias,message:r.message,response:null,origin:r.origin,status:"error",error_detail:n,truncated:r.truncated,created_at:K()})}listClaimableTerminalTrackedInvocations(e){let n=["status IN ('done', 'error', 'busy', 'cancelled', 'aborted')","ended_at IS NOT NULL","notified_by IS NULL"],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.scope_teamfile!==void 0&&(n.push("scope_teamfile = ?"),r.push(e.scope_teamfile));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));return r.push(s),this.db.prepare(`SELECT * FROM tracked_invocation WHERE ${n.join(" AND ")} ORDER BY ended_at ASC, id ASC LIMIT ?`).all(...r)}claimTrackedInvocationNotification(e,n,r=K()){return this.db.transaction(()=>{if(this.stmts.claimTrackedInvocationNotification.run(n,r,e).changes!==1)return null;let i=this.getTrackedInvocation(e);return Uw(this.db,i,n,r),i})()}listTrackedInvocations(e={}){let n=[],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.scope_teamfile!==void 0&&(n.push("scope_teamfile = ?"),r.push(e.scope_teamfile)),e.status!==void 0&&(n.push("status = ?"),r.push(e.status)),e.kind!==void 0&&(n.push("kind = ?"),r.push(e.kind)),e.origin!==void 0&&(n.push("origin = ?"),r.push(e.origin));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));r.push(s);let i=n.length===0?"":` WHERE ${n.join(" AND ")}`;return this.db.prepare(`SELECT * FROM tracked_invocation${i} ORDER BY started_at DESC, id DESC LIMIT ?`).all(...r)}maxTrackedInvocationId(e={}){let n=[],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.scope_teamfile!==void 0&&(n.push("scope_teamfile = ?"),r.push(e.scope_teamfile));let s=n.length===0?"":` WHERE ${n.join(" AND ")}`,i=this.db.prepare(`SELECT COALESCE(MAX(id), 0) AS max_id FROM tracked_invocation${s}`).get(...r);return Number(i?.max_id??0)}listRunningTrackedInvocations(e={}){return this.listTrackedInvocations({...e,status:"running"})}updateTeamChatLogResponse(e,n){this.stmts.updateTeamChatLogResponse.run(n.response,n.status,n.error_detail,n.truncated,e)}getAgentInflight(e,n){return this.stmts.getAgentInflight.get(e,n)??null}listAgentInflight(){return this.stmts.listAgentInflight.all()}tryAcquireAgentInflight(e,n){return this.tryAcquireAgentInflightTxn(e,n)}tryAcquireNativeHolder(e,n){return this.tryAcquireAgentInflightTxn(e,{nativeHolder:n})}findNativeHolder(e,n){return this.stmts.getNativeHolder.get(e,n)??null}updateNativeHolderPhase(e,n,r,s){return this.stmts.updateNativeHolderPhase.run(s,e,n,r,r).changes===1}publishNativeHolder(e,n,r,s,i="ready"){return this.stmts.publishNativeHolder.run(s,i,e,n,r,r).changes===1}clearNativeHolder(e,n,r){return this.stmts.clearNativeHolderFenced.run(e,n,r,r).changes===1}heartbeatAgentInflight(e,n,r=K()){return this.db.transaction(()=>{let s=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);return s===null||s.sender_teamfile!==e.sender_teamfile||s.sender_alias!==e.sender_alias||s.started_at!==e.started_at?!1:Lw(this.db,s,n,r)})()}clearAgentInflight(e,n){this.db.transaction(()=>{let s=this.getAgentInflight(e,n);if(s===null)return;this.stmts.clearAgentInflight.run(e,n).changes===1&&Xo(this.db,s,"INFLIGHT_RECLAIM","stale")})()}clearObservedTerminalAgentInflight(e,n,r){return this.db.transaction(()=>{let i=this.getAgentInflight(e,n),o=this.stmts.clearObservedTerminalAgentInflight.run({receiver_teamfile:e,receiver_alias:n,observed_sender_teamfile:r.sender_teamfile,observed_sender_alias:r.sender_alias,observed_started_at:r.started_at,observed_holder_pid:r.holder_pid});return o.changes===1&&i!==null&&Xo(this.db,i,"INFLIGHT_RELEASE"),o.changes===1})()}releaseAgentInflight(e,n){this.db.exec("BEGIN IMMEDIATE");try{let r=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);if(r===null||r.sender_teamfile!==e.sender_teamfile||r.sender_alias!==e.sender_alias)return this.db.exec("COMMIT"),!1;if(n!==void 0&&this.db.prepare(`SELECT lease_id FROM agent_state
2178
- WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e.receiver_teamfile,e.receiver_alias)?.lease_id!==n)return this.db.exec("COMMIT"),!1;if(r.active_count<=1){let i=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return i.changes===1&&Xo(this.db,r,"INFLIGHT_RELEASE"),this.db.exec("COMMIT"),i.changes===1}let s=this.stmts.decrementAgentInflight.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return this.db.exec("COMMIT"),s.changes===1}catch(r){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),r}}clearAgentInflightOlderThan(e){return this.db.transaction(()=>{let r=this.listAgentInflight().filter(i=>i.started_at<e),s=0;for(let i of r)this.stmts.clearAgentInflight.run(i.receiver_teamfile,i.receiver_alias).changes===1&&(Xo(this.db,i,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Bo,qo(e,n),Wo);return r===void 0?null:Rw(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&Ep(this.db,r,!0),this.stmts.upsertRuntimeState.run(Bo,qo(e.teamfile,e.alias),Wo,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&Mw(this.db,e)})()}heartbeatTerminalLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getTerminalLock(e,n);if(i===null||i.lock_id!==r)return this.db.exec("COMMIT"),!1;let o={...i,last_heartbeat:s};return this.stmts.upsertRuntimeState.run(Bo,qo(e,n),Wo,JSON.stringify(o),s),this.db.exec("COMMIT"),!0}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}clearTerminalLock(e,n,r){this.db.exec("BEGIN IMMEDIATE");try{let s=this.getTerminalLock(e,n);if(s===null||s.lock_id!==r)return this.db.exec("COMMIT"),!1;let i=this.stmts.deleteRuntimeState.run(Bo,qo(e,n),Wo);return i.changes===1&&Ep(this.db,s),this.db.exec("COMMIT"),i.changes===1}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}getRuntimeProcessLock(e,n,r){let s=this.stmts.getRuntimeState.get(e,n,r);return s===void 0?null:S0(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,i=K()){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getRuntimeProcessLock(e,n,r);if(o!==null&&!k0(o,s))return this.db.exec("COMMIT"),{acquired:!1,current:o};let a={lock_id:zw(),holder_pid:process.pid,holder_host:kp(),started_at:i,last_heartbeat:i};return this.stmts.upsertRuntimeState.run(e,n,r,JSON.stringify(a),i),this.db.exec("COMMIT"),{acquired:!0,lock:a,previous:o}}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}clearRuntimeProcessLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i===null||i.lock_id!==s)return this.db.exec("COMMIT"),!1;let o=this.stmts.deleteRuntimeState.run(e,n,r);return this.db.exec("COMMIT"),o.changes===1}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}getRun(e){return this.stmts.getRun.get(e)??null}setRunCurrentState(e,n){return this.stmts.setRunCurrentState.run(n,e),this.stmts.getRun.get(e)??null}setRunPausedState(e,n,r){return this.stmts.setRunPausedState.run(n,r,e),this.stmts.getRun.get(e)??null}setRunPendingEscalationDecision(e,n){return this.stmts.setRunPendingEscalationDecision.run(n,e),this.stmts.getRun.get(e)??null}setRunTerminalState(e,n){return this.stmts.setRunTerminalState.run(n,K(),e),this.stmts.getRun.get(e)??null}pauseJob(e){return this.stmts.pauseJob.run(e),this.getJob(e)}resumeRun(e,n){return this.resumeRunTxn(e,n,K())}insertStep(e){let n=this.stmts.insertStep.run(e.run_id,e.parent_step_id??null,e.state_name,e.outcome??null,e.status_detail??null,K());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,K(),e),this.stmts.getStep.get(e)??null}listStepsForRun(e){return this.stmts.listStepsForRun.all(e)}listLatestStepOutcomesByState(e){let n=this.stmts.listLatestStepOutcomesByState.all(e),r={};for(let s of n)r[s.state_name]=s.outcome;return r}insertSubmittedPr(e){let n=this.stmts.insertSubmittedPr.run(e.repo,e.pr_url,e.issue_url??null,e.local_path??null,e.branch??null,e.head_sha??null,e.status??"watching",e.submitted_at??K(),e.last_known_state??null,e.created_by_run_id??null);return this.stmts.getSubmittedPr.get(n.lastInsertRowid)}listSubmittedPrs(e){return e?.status!==void 0?this.stmts.listSubmittedPrsByStatus.all(e.status):this.stmts.listSubmittedPrs.all()}getSubmittedPr(e){return this.stmts.getSubmittedPr.get(e)??null}findSubmittedPrByUrl(e){return this.stmts.findSubmittedPrByUrl.get(e)??null}insertStepArtifact(e){let n=this.stmts.insertStepArtifact.run(e.step_id,e.kind,e.path??null,e.content??null,e.sha??null,e.provider_call_mode??null,K());return this.stmts.getStepArtifact.get(n.lastInsertRowid)}insertExternalObject(e){let r=this.stmts.insertExternalObject.run(e.type,e.provider,e.project_id,e.run_id??null,e.external_id,e.url??null,e.status??null,e.metadata??null,e.last_seen_at??null,K()).changes===1;return{row:this.stmts.findExternalObjectByUnique.get(e.provider,e.type,e.external_id),inserted:r}}insertExternalSignal(e){let n=this.stmts.insertExternalSignal.run(e.object_id,e.kind,e.source??null,e.occurred_at??null,e.payload??null,e.signal_hash??null,null,K()),r=n.changes===1;return{row:e.signal_hash===void 0||e.signal_hash===null?this.stmts.getExternalSignal.get(n.lastInsertRowid):this.stmts.findExternalSignalByUnique.get(e.object_id,e.kind,e.signal_hash),inserted:r}}raiseAttention(e){let n=this.stmts.insertAttention.run(e.kind,e.severity??"warn",e.project_id??null,e.run_id??null,e.external_object_id??null,e.requires_user===!0?1:0,e.payload??null,K());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(K(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=K();return this.stmts.upsertDurableMemory.run(e.project_id,e.type,e.name,e.description??null,e.body,n,n),this.stmts.getDurableMemoryByName.get(e.project_id,e.name)}getDurableMemoryByName(e,n){return this.stmts.getDurableMemoryByName.get(e,n)??null}deleteDurableMemory(e,n){return this.stmts.deleteDurableMemory.run(e,n).changes>0}listDurableMemory(e,n){return n!==void 0?this.stmts.listDurableMemoryByType.all(e,n):this.stmts.listDurableMemory.all(e)}indexDurableMemory(e,n){return n!==void 0&&n.length>0?this.stmts.listDurableMemory.all(e).filter(s=>n.includes(s.type)).map(({name:s,description:i,type:o,updated_at:a})=>({name:s,description:i,type:o,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:r,description:s,type:i,updated_at:o})=>({name:r,description:s,type:i,updated_at:o}))}recordSessionSize(e){let n=this.stmts.insertSessionSize.run(e.team_name,e.alias,e.sessionid,e.input_tokens??null,e.cache_tokens??null,e.output_tokens??null,e.total_tokens??null,e.observed_at??K());return this.stmts.getSessionSize.get(n.lastInsertRowid)}latestSessionSizes(){return this.stmts.latestSessionSizes.all()}sessionSizeHistory(e,n,r=20){return this.stmts.sessionSizeHistory.all(e,n,r)}insertSessionEvent(e){let n=this.stmts.insertSessionEvent.run(e.run_id,e.step_id??null,e.kind,e.timestamp_ms,e.payload,e.payload_truncated??0,e.overflow_artifact_id??null);return this.stmts.getSessionEvent.get(n.lastInsertRowid)}listSessionEvents(e,n){return n!==void 0?this.stmts.listSessionEventsSince.all(e,n):this.stmts.listSessionEvents.all(e)}listSessionEventsSince(e,n=1e3){return this.stmts.listAllEventsSince.all(e,n)}latestAgentCall(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call' ORDER BY id DESC LIMIT 1").get(e);if(n===void 0)return null;try{let r=JSON.parse(n.payload);return typeof r.alias!="string"||typeof r.provider!="string"?null:{alias:r.alias,provider:r.provider,...typeof r.model=="string"?{model:r.model}:{}}}catch{return null}}agentCallTokenTotals(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call'").all(e),r=0,s=0,i=0;for(let o of n)try{let a=JSON.parse(o.payload);typeof a.tokens_in=="number"&&(r+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),i+=1}catch{}return{totalInputTokens:r,totalOutputTokens:s,agentCallCount:i}}addRollupValue(e){this.stmts.upsertRollupStat.run(e.run_id,e.step_id??null,e.metric_kind,e.value,e.bucket_start_ms,e.bucket_end_ms,e.updated_at)}listRollupStats(e){return this.stmts.listRollupStats.all(e)}getRollupCursor(){return this.stmts.getRollupCursor.get("last_event_id")?.value??0}setRollupCursor(e){this.stmts.setRollupCursor.run("last_event_id",e)}insertDriftSignal(e){let n=this.stmts.insertDriftSignal.run(e.team_member_id,e.project_id??null,e.signal_kind,e.severity,e.description,e.detected_at,e.expires_at??null,e.payload??null);return this.stmts.getDriftSignal.get(n.lastInsertRowid)}listDriftSignals(e={}){return e.team_member_id!==void 0&&e.unacked?this.stmts.listUnackedDriftByMember.all(e.team_member_id):e.team_member_id!==void 0?this.stmts.listDriftByMember.all(e.team_member_id):e.project_id!==void 0?this.stmts.listDriftByProject.all(e.project_id):this.stmts.listAllDrift.all()}hasUnackedDriftSignal(e,n,r){return this.stmts.findUnackedDrift.get(e,n??null,r)!==void 0}acknowledgeDriftSignal(e){return this.stmts.ackDriftSignal.run(Date.now(),e),this.stmts.getDriftSignal.get(e)??null}insertInteractiveSession(e){let n=Date.now();return this.stmts.insertInteractiveSession.run(e.run_id,e.step_id,e.state_name,e.status,n,n),this.stmts.getInteractiveSessionByStepId.get(e.step_id)}getInteractiveSessionByStepId(e){return this.stmts.getInteractiveSessionByStepId.get(e)??null}getInteractiveSessionByRunAndState(e,n){return this.stmts.getInteractiveSessionByRunAndState.get(e,n)??null}setInteractiveAgentOutput(e,n,r){this.stmts.setInteractiveAgentOutput.run(n,r,Date.now(),e)}resumeInteractive(e,n,r){return this.resumeInteractiveTxn(e,n,r,K())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,K())}}});import{homedir as x0}from"node:os";import{join as tE}from"node:path";function N0(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:tE(t.HOME||x0(),A0)}function nE(t=process.env){return tE(N0(t),C0)}function fi(t,e=process.env){return t!==void 0&&t.length>0?t:e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0?e.LMCTL_DB:nE(e)}function rE(t,e=process.env){return e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0&&e.LMCTL_DB!==nE(e)?`db: ${t} (overridden by --db/LMCTL_DB)`:`db: ${t}`}var A0,C0,vc=M(()=>{"use strict";A0=".lmctl",C0="state.db"});import{isAbsolute as O0,resolve as sE,join as iE}from"node:path";function _n(t,e){let n=Rp.get(t);if(!n||t.closed)throw Error("Context is closed");return n.resources.add(e),()=>n.resources.delete(e)}function sn(t){let e=Rp.get(t);if(!e)throw Error("Unknown context");return e.dal()}function Nr(t){let e=oE.get(t);if(!e)throw Error("Context state is unavailable");return e}function gi(t){return t!==null&&typeof t=="object"&&aE.has(t)}function Ip(t){try{if(!t||typeof t!="object"||Array.isArray(t))return B("invalid_argument","Context needs an explicit options map");let e={...t},n=["pid","env","cwd","dbPath","dal","onProgress","onWarning","clock","interactive"];if(Object.keys(e).some(g=>!n.includes(g)))return B("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!O0(e.cwd))return B("invalid_argument","Context needs an explicit env and absolute cwd");let r=Object.freeze({...e.env});if(Object.values(r).some(g=>g!==void 0&&typeof g!="string"))return B("invalid_argument","Environment values must be strings or undefined");for(let g of["onProgress","onWarning","clock"])if(e[g]!==void 0&&typeof e[g]!="function")return B("invalid_argument",g+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return B("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return B("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return B("invalid_argument","pid must be a positive integer");let s=sE(e.cwd),i=r.LMCTL_HOME||(r.HOME?iE(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(i?iE(i,"state.db"):void 0)))return B("invalid_argument","Context needs dbPath, LMCTL_DB, LMCTL_HOME or HOME");let a=!1,l,c,u,d=new AbortController,m=new Set,p=g=>{if(l){try{l.close()}catch(h){g.push(G(h))}l=void 0}},f=Object.freeze({status:"ok",error:null,pid:e.pid,signal:d.signal,env:r,cwd:s,dbPath:sE(s,fi(e.dbPath,r)),dal:e.dal,interactive:e.interactive??r.LMCTL_NON_INTERACTIVE!=="1",onProgress:e.onProgress??(()=>{}),onWarning:e.onWarning??(()=>{}),clock:e.clock??Date.now,get closed(){return a},close(){if(c)return c;let g;return c=new Promise(h=>{g=h}),a=!0,d.abort(),(async()=>{let h=[],y=0;for(let b of[...m])try{await b.close(),y++,m.delete(b)}catch(_){h.push(G(_))}h.length||p(h),g({released:y,errors:h})})(),c},finalizeSync(g){if(u)return u;a=!0;let h=[],y={released:0,errors:h};u=y,c??=Promise.resolve(y);let b=[];for(let _ of[...m])try{let v=_.finalizeSync(g);v instanceof Promise?b.push(v.then(()=>{y.released++,m.delete(_)}).catch(E=>{h.push(G(E))})):(y.released++,m.delete(_))}catch(v){h.push(G(v))}return d.abort(g),b.length?c=Promise.all(b).then(()=>(h.length||p(h),y)):h.length||p(h),y}});return Rp.set(f,{resources:m,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=ot({path:f.dbPath})}}),aE.add(f),oE.set(f,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),f}catch(e){return B("invalid_argument","Invalid context: "+G(e))}}var Rp,oE,aE,Qt=M(()=>{"use strict";Yt();vc();mt();Rp=new WeakMap;oE=new WeakMap;aE=new WeakSet});function lE(t){let e=Object.create(null),n=Object.create(null),r=(s,i,o=!0)=>{if(Array.isArray(s)){let a=s.map((l,c)=>r(l,i+"."+c,!1));return o&&(n[i]=a),a}if(s&&typeof s=="object"&&!(s instanceof Date)){let a=Object.create(null);for(let[l,c]of Object.entries(s)){let d=/^Provider[123]$/.test(i)&&["provider","model1"].includes(l)?l[0].toUpperCase()+l.slice(1):l;if(Object.hasOwn(a,d))throw Error(`Ambiguous property '${i}.${d}'`);a[d]=r(c,i?i+"."+d:d,o&&/^[_a-zA-Z]\w*$/.test(d))}return a}return o&&(n[i]=s),s};for(let[s,i]of Object.entries(t))e[s]=r(i,s,/^[_a-zA-Z]\w*$/.test(s));return{properties:e,flat:n}}var cE=M(()=>{"use strict"});function bc(t){return{Provider1:t.provider1.provider,Provider2:t.provider2.provider,Provider3:t.provider3.provider,Model1:t.provider1.model1,Model2:t.provider2.model1,Model3:t.provider3.model1}}var xp=M(()=>{"use strict"});import{readFileSync as L0}from"node:fs";import{homedir as M0}from"node:os";import{join as uE,resolve as P0}from"node:path";function hi(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?P0(e):uE(n||uE(t.HOME||M0(),".lmctl"),"init.toml")}function D0(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function Ec(t,e="<init.toml>"){let{document:n}=Ap(t,e),r={};for(let i of wc){let o=n[i];if(o===void 0)continue;if(!o||typeof o!="object"||Array.isArray(o)||o instanceof Date)throw new Ut(e,"schema","["+i+"] must be a table with provider and model1");let a={};for(let l of dE){let c=o[l];if(typeof c!="string"||!c.trim())throw new Ut(e,"schema",i+"."+l+" must be a nonempty string");a[l]=c}r[i]=a}let s={raw:t,document:n,path:e,slots:r};return Object.defineProperty(s,"config",{enumerable:!1,get(){let i=wc.find(o=>!r[o]);if(i)throw new Ut(e,"schema","["+i+"] is not in "+e+"; this needs the example slots ["+wc.join("], [")+"] -- add ["+i+"] with provider and model1");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function Ap(t,e="<init.toml>"){let n;try{n=Gs(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new Ut(e,"syntax",s.message,s.line??1,(s.column??1)+(t.startsWith("\uFEFF")&&s.line===1?1:0))}return{raw:t,document:n,path:e}}function mE(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(L0(t))}catch(n){let r=n;throw new Ut(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function Cp(t=hi()){return Ap(mE(t),t)}function Tc(t=hi()){return Ec(mE(t),t)}var wc,dE,Ut,Sc=M(()=>{"use strict";Sl();wc=["Provider1","Provider2","Provider3"],dE=["provider","model1"];Ut=class extends Error{constructor(n,r,s,i=1,o=1){let a=D0(n,r,s,i,o);super(r==="missing"?a+". Run lmctl init first.":a+". Fix the file or run lmctl init.");this.path=n;this.kind=r;this.line=i;this.column=o;this.detail=a}detail}});var pE=M(()=>{"use strict";Sl();Sc()});import{spawnSync as Dp}from"node:child_process";import{existsSync as gE,readFileSync as hE}from"node:fs";import{homedir as yE}from"node:os";import{resolve as Mp}from"node:path";function yi(t,e){return e.code==="ETIMEDOUT"?`${t} did not respond within lint's own spawn timeout (${e.message}) \u2014 this does not mean the provider itself is unreachable, only that this specific check didn't finish in time.`:`${t} could not be run: ${e.message}`}function j0(){let t=Dp("agy",["models"],{encoding:"utf-8",timeout:$0});return{status:t.status,stdout:t.stdout??"",error:t.error}}function U0(t){let e=[],n={};for(let r of t.split(/\r?\n/)){let s=r.trim(),i=s.indexOf(" ");if(i<0)continue;let o=s.slice(0,i).trim(),a=s.slice(i+1).trim();o&&(e.push(o),a&&(n[o]=a))}return{models:e,displayNames:n}}function vE(t){if(!t&&Np)return Np;let e=i=>(t||(Np=i),i),n;try{n=(t??j0)()}catch(i){return e({available:!1,models:[],reason:i instanceof Error?yi("agy models",i):`agy models could not be run: ${String(i)}`})}if(n.error)return e({available:!1,models:[],reason:yi("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let{models:r,displayNames:s}=U0(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r,displayNames:s})}function B0(){let t=Dp("codex",["debug","models"],{encoding:"utf-8",timeout:H0});return{status:t.status,stdout:t.stdout??"",error:t.error}}function W0(t){let e;try{e=JSON.parse(t)}catch{return}let n=e.models;if(!Array.isArray(n))return;let r=[];for(let s of n){if(!s||typeof s!="object")continue;let{slug:i,visibility:o}=s;typeof i=="string"&&o==="list"&&r.push(i)}return r}function bE(t){if(!t&&Op)return Op;let e=s=>(t||(Op=s),s),n;try{n=(t??B0)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?yi("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:yi("codex debug models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`codex debug models exited with status ${n.status??"unknown"}`});let r=W0(n.stdout);return r===void 0?e({available:!1,models:[],reason:"codex debug models did not return parseable JSON"}):r.length===0?e({available:!1,models:[],reason:"codex debug models returned no user-visible models"}):e({available:!0,models:r})}function X0(t){let e=Dp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:q0});return{status:e.status,stdout:e.stdout??"",error:e.error}}function G0(t,e){if(!e&&Lp.has(t))return Lp.get(t);let n=o=>(e||Lp.set(t,o),o),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??X0)(t)}catch(o){return n({available:!1,models:[],reason:o instanceof Error?yi(r,o):`${r} could not be run: ${String(o)}`})}if(s.error)return n({available:!1,models:[],reason:yi(r,s.error)});if(s.status!==0)return n({available:!1,models:[],reason:`${r} exited with status ${s.status??"unknown"}`});let i=s.stdout.split(/\r?\n/).map(o=>o.trim()).filter(o=>o.length>0);return i.length===0?n({available:!1,models:[],reason:`${r} returned no models`}):n({available:!0,models:i})}function Fp(t,e={}){let n=[];for(let r of t){let s=r.provider.trim().toLowerCase();if(r.effort&&s!=="opencode"&&s!=="lmplayer"&&s!=="qwen"&&s!=="muse"&&n.push(`[${r.alias}] effort="${r.effort}" is ignored: effort selection is only supported for opencode and lmplayer.`),s==="qwen"&&r.effort&&n.push(`[${r.alias}] effort="${r.effort}" is not a qwen CLI flag: Qwen Code does not expose reasoning-effort selection. Use a thinking/effort model id in model= instead.`),s==="copilot"){if(!r.model)continue;n.push(`[${r.alias}] model="${r.model}" is ignored: copilot does not support lmctl model selection.`);continue}if(s!=="lmplayer"){if(s==="opencode"){if(r.effort&&!r.model&&n.push(`[${r.alias}] effort="${r.effort}" has no effect without model= on an opencode member.`),!r.model)continue;let i=V0(e.opencodeConfigPath);if(!i.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for opencode: ${i.reason}.`);continue}if(i.models.includes(r.model)||/^github-copilot\/(gpt|gemini|o[0-9])/.test(r.model))continue;if(!r.model.includes("/")){let l=i.models.filter(c=>c.endsWith(`/${r.model}`));n.push(l.length>0?`[${r.alias}] model="${r.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model>. Your opencode.json declares it as ${l.join(" / ")}; set model=${l[0]}.`:`[${r.alias}] model="${r.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model> (e.g. github-copilot/${r.model}). Declare it in ~/.config/opencode/opencode.json (see https://lmctl.com/examples/opencode.json).`);continue}let o=r.model.slice(0,r.model.indexOf("/")),a=G0(o,e.opencodeModelsRunner);if(a.available&&a.models.includes(r.model))continue;if(a.available&&!a.models.includes(r.model)){n.push(`[${r.alias}] model="${r.model}" was not found in opencode's LOCALLY-VISIBLE live catalog for "${o}" (checked \`opencode models ${o}\`) -- this is unresolved, not a confirmed unavailability: it could mean opencode genuinely doesn't serve this model, OR that your local catalog/auth for "${o}" is stale/incomplete. Declaring it in opencode.json may or may not help; if it doesn't, check whether a non-opencode provider serves this model directly (e.g. \`lmctl lint\` with model= against provider=codex/claude/gemini/agy).`);continue}n.push(`[${r.alias}] model="${r.model}" is not declared in your opencode.json. opencode resolves github-copilot GPT/Gemini config-free, but copilot Claude and custom providers must be declared \u2014 copy https://lmctl.com/examples/opencode.json to ~/.config/opencode/opencode.json and adjust for your account.`);continue}if(s==="kimi"){if(!r.model)continue;let i=SE(e.kimiConfigPath);i.available?i.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not declared in Kimi's [models] config. Valid configured models: ${Jo(i.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for kimi: ${i.reason}.`);continue}if(s==="agy"){if(!r.model)continue;let i=vE(e.agyModelsRunner);i.available?i.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in agy's live model catalog (\`agy models\`). Valid models: ${Jo(i.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${i.reason}.`);continue}if(s==="dsh"){if(!r.model||Ic.includes(r.model))continue;Rc.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Jo(Rc)}. Valid server-resolved aliases (DeepSeek resolves these to its current model server-side -- pinning to a specific version instead is a DOWNGRADE, not a safer choice): ${Jo(Ic)}. The catalog is patchable via dsh profile overlays \u2014 a model added that way warns here even though it may resolve.`);continue}if(s==="hermes"){if(!r.model)continue;let i=r.model.indexOf(":");(i<=0||i===r.model.length-1)&&n.push(`[${r.alias}] model="${r.model}" should use <provider>:<model> from Hermes's ACP catalog. lmctl checks the shape only; provider and model availability are resolved by Hermes.`);continue}if(s!=="pi"){if(s==="codex"){if(!r.model)continue;r.model===fE&&n.push(`[${r.alias}] model="${fE}" is banned as a build model (operator, 2026-09-06) -- it's a fast/cheap classification model, not intended for build work, and there's no cost reason left to reach for it. Use model=gpt-5.6-sol (or leave model= unset) for build work; if this member genuinely does non-build/classification work, this warning can be ignored.`);let i=bE(e.codexModelsRunner);if(!i.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for codex: ${i.reason}.`);continue}i.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in codex's live model catalog (\`codex debug models\`). Valid models: ${Jo(i.models)}`);continue}r.model&&(_E.has(s)||n.push(`[${r.alias}] model="${r.model}" cannot be verified for provider "${s}": no model validation path exists for this provider.`))}}}return n}async function wE(t,e={}){let n=t.filter(o=>o.model!==void 0&&_E.has(o.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await fs();if(r.catalog===null)return{warnings:[],errors:[]};let s=[],i=[];for(let o of n){let a=o.provider.trim().toLowerCase(),l=o.model,c=ic(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let u=ow(r.catalog,a)??0;s.push(`[${o.alias}] model "${l}" is unknown to the lmprice catalog for provider "${a}" (${u} known) -- not necessarily wrong: may be a model too new for lmprice to have published yet, or a typo. A matching lmprice catalog/alias entry would resolve this; lint cannot otherwise confirm whether ${a} accepts it.`)}else c.kind==="wrong-provider"?i.push({field:o.alias,message:`model "${l}" is not offered by provider "${a}" -- it is a recognized model, but only under: ${c.otherProviders.join(", ")}. Declare provider="${c.otherProviders[0]}" (or another listed provider), or use a model "${a}" actually offers.`}):c.kind==="known-unpriced"&&s.push(`[${o.alias}] model "${l}" is recognized in the lmprice catalog but has no price information \u2014 cost will be unavailable`);if(a==="claude"&&(c.kind==="priced"||c.kind==="known-unpriced"||c.kind==="estimated")&&F0.test(l)){let u=l.replace(/(\d)\.(?=\d)/g,"$1-");s.push(`[${o.alias}] model="${l}" matches the lmprice catalog only through its OpenRouter-style spelling ("." between version numbers); claude's own CLI expects "-" there and does an exact match, so it may reject this string verbatim even though lint recognizes it. If seed/chat fails with "issue with the selected model," try model="${u}" instead.`)}}return{warnings:s,errors:i}}async function EE(t,e={}){return(await wE(t,e)).warnings}async function TE(t,e={}){return(await wE(t,e)).errors}function SE(t){let e=process.env.KIMI_CODE_HOME||Mp(yE(),".kimi-code"),n=t??Mp(e,"config.toml");if(!gE(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=hE(n,"utf-8")}catch(i){return{available:!1,models:[],reason:`${n} could not be read: ${i instanceof Error?i.message:String(i)}`}}let s=new Set;for(let i of r.split(/\r?\n/)){if(/^\s*\[/.test(i)&&!/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.test(i))return{available:!1,models:[],reason:`${n} has an invalid TOML table header`};let o=/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.exec(i);if(!o)continue;let a=J0(o[1]);if(o[1].trim().startsWith("models")&&a===null)return{available:!1,models:[],reason:`${n} has an invalid [models] table header`};a?.[0]==="models"&&a.length>=2&&s.add(a[1])}return s.size===0?{available:!1,models:[],reason:`${n} has no [models] entries`}:{available:!0,models:[...s]}}function J0(t){let e=[],n=0;for(;n<t.length;){for(;/\s/.test(t[n]??"");)n++;if(n>=t.length)break;let r="",s=t[n]==='"'||t[n]==="'"?t[n++]:void 0;if(s){for(;n<t.length&&t[n]!==s;)s==='"'&&t[n]==="\\"&&n+1<t.length&&n++,r+=t[n++];if(t[n]!==s)return null;n++}else{for(;n<t.length&&t[n]!==".";)r+=t[n++];r=r.trim()}if(!r)return null;for(e.push(r);/\s/.test(t[n]??"");)n++;if(n>=t.length)break;if(t[n]!==".")return null;n++}return e.length>0?e:null}function V0(t){let e=t??Mp(yE(),".config","opencode","opencode.json");if(!gE(e))return{available:!0,models:[]};let n;try{n=JSON.parse(hE(e,"utf-8"))}catch(r){return{available:!1,models:[],reason:`${e} could not be parsed: ${r instanceof Error?r.message:String(r)}`}}return{available:!0,models:z0(n)}}function z0(t){if(!Pp(t))return[];let e=kc(t.provider)??kc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!Pp(s))continue;let i=kc(s.models)??kc(s.model);if(i)for(let o of Object.keys(i))n.add(o.startsWith(`${r}/`)?o:`${r}/${o}`)}return[...n].sort()}function kc(t){return Pp(t)?t:null}function Pp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Jo(t){return t.length>0?t.join(", "):"(none)"}var _E,F0,Rc,Ic,fE,$0,Np,H0,Op,q0,Lp,xc=M(()=>{"use strict";gs();oc();_E=new Set(Object.keys($o).filter(t=>t!=="codex"&&t!=="kimi")),F0=/\d\.(?=\d)/,Rc=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],Ic=["deepseek-flash","deepseek-pro"],fE="gpt-5.3-codex-spark",$0=15e3;Np=null;H0=5e3;Op=null;q0=5e3;Lp=new Map});var kE=M(()=>{"use strict"});var RE=M(()=>{"use strict";Pd();xp();Sc();Sc();pE();xc();gs();kE()});import{resolve as K0,join as IE}from"node:path";function $p(t,e={}){try{if(!gi(t))return B("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return B("cancelled","Context is closed");if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Profile options must be a map");let n=e.path;if(Object.keys(e).some(i=>!(dt.find(o=>o.name==="loadProfile")?.params.find(o=>o.name==="options")?.keys??[]).some(o=>o.name===i))||n!==void 0&&(typeof n!="string"||!n))return B("invalid_argument","Profile options accept a nonempty path string only");let r=t.env.LMCTL_HOME||(t.env.HOME?IE(t.env.HOME,".lmctl"):void 0);if(!n&&!r)return B("invalid_argument","Profile path requires HOME, LMCTL_HOME or an explicit path");let s=K0(t.cwd,n??IE(r,"init.toml"));return fe({path:hi({...t.env,HOME:t.env.HOME??t.cwd},s)})}catch(n){return B("invalid_argument","Invalid profile arguments: "+G(n))}}function Y0(t){try{if(!t||typeof t!="object"||Array.isArray(t))return B("invalid_argument","Expected a validated InitConfig");let e={};for(let n of["provider1","provider2","provider3"]){let r=t[n];if(!r||typeof r!="object"||Array.isArray(r))return B("invalid_argument",n+" must be a provider map");let s={};for(let i of["provider","model1"]){let o=r[i];if(typeof o!="string"||!o.trim())return B("invalid_argument",n+"."+i+" must be a nonempty string");s[i]=o}e[n]=s}return fe(bc(e))}catch(e){return B("invalid_argument","Invalid profile: "+G(e))}}function Q0(t,e={}){let n=$p(t,e);if(n.status==="error")return n;try{let r=Tc(n.path);return fe({profile:{path:r.path,raw:r.raw,config:r.config},values:{...bc(r.config),Directory:t.cwd,NonInteractive:!t.interactive}})}catch(r){return r instanceof Ut?B(r.kind,r.message,{path:r.path,line:r.line,column:r.column}):B("read","Could not load profile: "+G(r),{path:n.path})}}function Z0(t,e={}){let n=$p(t,e);if(n.status==="error")return n;try{let r=Cp(n.path),{properties:s,flat:i}=lE(r.document);return fe({path:r.path,properties:s,flat:i})}catch(r){return r instanceof Ut?B(r.kind,r.message,{path:r.path,line:r.line,column:r.column}):B("schema","Invalid properties in "+n.path+": "+G(r)+". Fix the file or run lmctl init.",{path:n.path})}}var xE=M(()=>{"use strict";cE();Un();RE();xp();Qt();mt()});function vn(t){return t!=="gemini"}function Ac(t){if(!vn(t))throw new Error(Or)}var Or,_i=M(()=>{"use strict";Or="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function AE(t){if(t.length===0||!t.startsWith("---"))throw new bn("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
2179
- `);if(e[0]!=="---")throw new bn("frontmatter must start at line 1 with `---` on its own line");let n={},r=-1;for(let o=1;o<e.length;o++){let a=e[o];if(a==="---"){r=o;break}if(a.trim()==="")continue;let l=a.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\s*:\s*(.*)$/);if(!l)throw new bn(`malformed frontmatter line ${o+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],u=l[2].trim();if(!eF.has(c))throw new bn(`unknown frontmatter key "${c}" \u2014 allowed keys: ${Cc.join(", ")}`);n[c]=u}if(r===-1)throw new bn("frontmatter not closed (missing trailing `---` on its own line)");for(let o of Cc)if(n[o]===void 0)throw new bn(`missing required frontmatter key "${o}" \u2014 required: ${Cc.join(", ")}`);let s=0;for(let o=0;o<=r;o++)s+=e[o].length+1;s>t.length&&(s=t.length);let i=n.members.split(",").map(o=>o.trim()).filter(Boolean);return{title:n.title,description:n.description,members:i,bodyOffset:s}}var Cc,eF,bn,CE=M(()=>{"use strict";Cc=["title","description","members"],eF=new Set(Cc),bn=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function NE(t){return jp.has(t)}var jp,Up=M(()=>{"use strict";jp=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as tF,writeFileSync as r6,renameSync as s6,existsSync as LE}from"node:fs";import{basename as nF,resolve as vi,dirname as Hp}from"node:path";function rF(t){let e={},n=/(\w+)=(?:"([^"]*)"|([\S]*))/g,r;for(;(r=n.exec(t))!==null;){let s=r[1],i=r[2]!==void 0?r[2]:r[3];e[s]=i}return e}function sF(t){return/^\s*_MEMBER_\s+\S/.test(t)}function iF(t){return/^\s*_SESSION_\s+\S/.test(t)}function oF(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Vo(t){return/\.(?:lmctl|lmc)$/i.test(t)}function zo(t){return nF(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ht(t){let e=tF(t,"utf-8"),n=Hp(vi(t)),r=Wp(e,zo(t),{baseDir:n,sourcePath:vi(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=vi(n,s.sessiondir));return r}function Wp(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let i=t;if(i.startsWith("#teamfile:")){let l=i.indexOf(`
2178
+ WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e.receiver_teamfile,e.receiver_alias)?.lease_id!==n)return this.db.exec("COMMIT"),!1;if(r.active_count<=1){let i=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return i.changes===1&&Xo(this.db,r,"INFLIGHT_RELEASE"),this.db.exec("COMMIT"),i.changes===1}let s=this.stmts.decrementAgentInflight.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return this.db.exec("COMMIT"),s.changes===1}catch(r){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),r}}clearAgentInflightOlderThan(e){return this.db.transaction(()=>{let r=this.listAgentInflight().filter(i=>i.started_at<e),s=0;for(let i of r)this.stmts.clearAgentInflight.run(i.receiver_teamfile,i.receiver_alias).changes===1&&(Xo(this.db,i,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Bo,qo(e,n),Wo);return r===void 0?null:Rw(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&Ep(this.db,r,!0),this.stmts.upsertRuntimeState.run(Bo,qo(e.teamfile,e.alias),Wo,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&Mw(this.db,e)})()}heartbeatTerminalLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getTerminalLock(e,n);if(i===null||i.lock_id!==r)return this.db.exec("COMMIT"),!1;let o={...i,last_heartbeat:s};return this.stmts.upsertRuntimeState.run(Bo,qo(e,n),Wo,JSON.stringify(o),s),this.db.exec("COMMIT"),!0}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}clearTerminalLock(e,n,r){this.db.exec("BEGIN IMMEDIATE");try{let s=this.getTerminalLock(e,n);if(s===null||s.lock_id!==r)return this.db.exec("COMMIT"),!1;let i=this.stmts.deleteRuntimeState.run(Bo,qo(e,n),Wo);return i.changes===1&&Ep(this.db,s),this.db.exec("COMMIT"),i.changes===1}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}getRuntimeProcessLock(e,n,r){let s=this.stmts.getRuntimeState.get(e,n,r);return s===void 0?null:S0(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,i=K()){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getRuntimeProcessLock(e,n,r);if(o!==null&&!k0(o,s))return this.db.exec("COMMIT"),{acquired:!1,current:o};let a={lock_id:zw(),holder_pid:process.pid,holder_host:kp(),started_at:i,last_heartbeat:i};return this.stmts.upsertRuntimeState.run(e,n,r,JSON.stringify(a),i),this.db.exec("COMMIT"),{acquired:!0,lock:a,previous:o}}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}clearRuntimeProcessLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i===null||i.lock_id!==s)return this.db.exec("COMMIT"),!1;let o=this.stmts.deleteRuntimeState.run(e,n,r);return this.db.exec("COMMIT"),o.changes===1}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}getRun(e){return this.stmts.getRun.get(e)??null}setRunCurrentState(e,n){return this.stmts.setRunCurrentState.run(n,e),this.stmts.getRun.get(e)??null}setRunPausedState(e,n,r){return this.stmts.setRunPausedState.run(n,r,e),this.stmts.getRun.get(e)??null}setRunPendingEscalationDecision(e,n){return this.stmts.setRunPendingEscalationDecision.run(n,e),this.stmts.getRun.get(e)??null}setRunTerminalState(e,n){return this.stmts.setRunTerminalState.run(n,K(),e),this.stmts.getRun.get(e)??null}pauseJob(e){return this.stmts.pauseJob.run(e),this.getJob(e)}resumeRun(e,n){return this.resumeRunTxn(e,n,K())}insertStep(e){let n=this.stmts.insertStep.run(e.run_id,e.parent_step_id??null,e.state_name,e.outcome??null,e.status_detail??null,K());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,K(),e),this.stmts.getStep.get(e)??null}listStepsForRun(e){return this.stmts.listStepsForRun.all(e)}listLatestStepOutcomesByState(e){let n=this.stmts.listLatestStepOutcomesByState.all(e),r={};for(let s of n)r[s.state_name]=s.outcome;return r}insertSubmittedPr(e){let n=this.stmts.insertSubmittedPr.run(e.repo,e.pr_url,e.issue_url??null,e.local_path??null,e.branch??null,e.head_sha??null,e.status??"watching",e.submitted_at??K(),e.last_known_state??null,e.created_by_run_id??null);return this.stmts.getSubmittedPr.get(n.lastInsertRowid)}listSubmittedPrs(e){return e?.status!==void 0?this.stmts.listSubmittedPrsByStatus.all(e.status):this.stmts.listSubmittedPrs.all()}getSubmittedPr(e){return this.stmts.getSubmittedPr.get(e)??null}findSubmittedPrByUrl(e){return this.stmts.findSubmittedPrByUrl.get(e)??null}insertStepArtifact(e){let n=this.stmts.insertStepArtifact.run(e.step_id,e.kind,e.path??null,e.content??null,e.sha??null,e.provider_call_mode??null,K());return this.stmts.getStepArtifact.get(n.lastInsertRowid)}insertExternalObject(e){let r=this.stmts.insertExternalObject.run(e.type,e.provider,e.project_id,e.run_id??null,e.external_id,e.url??null,e.status??null,e.metadata??null,e.last_seen_at??null,K()).changes===1;return{row:this.stmts.findExternalObjectByUnique.get(e.provider,e.type,e.external_id),inserted:r}}insertExternalSignal(e){let n=this.stmts.insertExternalSignal.run(e.object_id,e.kind,e.source??null,e.occurred_at??null,e.payload??null,e.signal_hash??null,null,K()),r=n.changes===1;return{row:e.signal_hash===void 0||e.signal_hash===null?this.stmts.getExternalSignal.get(n.lastInsertRowid):this.stmts.findExternalSignalByUnique.get(e.object_id,e.kind,e.signal_hash),inserted:r}}raiseAttention(e){let n=this.stmts.insertAttention.run(e.kind,e.severity??"warn",e.project_id??null,e.run_id??null,e.external_object_id??null,e.requires_user===!0?1:0,e.payload??null,K());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(K(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=K();return this.stmts.upsertDurableMemory.run(e.project_id,e.type,e.name,e.description??null,e.body,n,n),this.stmts.getDurableMemoryByName.get(e.project_id,e.name)}getDurableMemoryByName(e,n){return this.stmts.getDurableMemoryByName.get(e,n)??null}deleteDurableMemory(e,n){return this.stmts.deleteDurableMemory.run(e,n).changes>0}listDurableMemory(e,n){return n!==void 0?this.stmts.listDurableMemoryByType.all(e,n):this.stmts.listDurableMemory.all(e)}indexDurableMemory(e,n){return n!==void 0&&n.length>0?this.stmts.listDurableMemory.all(e).filter(s=>n.includes(s.type)).map(({name:s,description:i,type:o,updated_at:a})=>({name:s,description:i,type:o,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:r,description:s,type:i,updated_at:o})=>({name:r,description:s,type:i,updated_at:o}))}recordSessionSize(e){let n=this.stmts.insertSessionSize.run(e.team_name,e.alias,e.sessionid,e.input_tokens??null,e.cache_tokens??null,e.output_tokens??null,e.total_tokens??null,e.observed_at??K());return this.stmts.getSessionSize.get(n.lastInsertRowid)}latestSessionSizes(){return this.stmts.latestSessionSizes.all()}sessionSizeHistory(e,n,r=20){return this.stmts.sessionSizeHistory.all(e,n,r)}insertSessionEvent(e){let n=this.stmts.insertSessionEvent.run(e.run_id,e.step_id??null,e.kind,e.timestamp_ms,e.payload,e.payload_truncated??0,e.overflow_artifact_id??null);return this.stmts.getSessionEvent.get(n.lastInsertRowid)}listSessionEvents(e,n){return n!==void 0?this.stmts.listSessionEventsSince.all(e,n):this.stmts.listSessionEvents.all(e)}listSessionEventsSince(e,n=1e3){return this.stmts.listAllEventsSince.all(e,n)}latestAgentCall(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call' ORDER BY id DESC LIMIT 1").get(e);if(n===void 0)return null;try{let r=JSON.parse(n.payload);return typeof r.alias!="string"||typeof r.provider!="string"?null:{alias:r.alias,provider:r.provider,...typeof r.model=="string"?{model:r.model}:{}}}catch{return null}}agentCallTokenTotals(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call'").all(e),r=0,s=0,i=0;for(let o of n)try{let a=JSON.parse(o.payload);typeof a.tokens_in=="number"&&(r+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),i+=1}catch{}return{totalInputTokens:r,totalOutputTokens:s,agentCallCount:i}}addRollupValue(e){this.stmts.upsertRollupStat.run(e.run_id,e.step_id??null,e.metric_kind,e.value,e.bucket_start_ms,e.bucket_end_ms,e.updated_at)}listRollupStats(e){return this.stmts.listRollupStats.all(e)}getRollupCursor(){return this.stmts.getRollupCursor.get("last_event_id")?.value??0}setRollupCursor(e){this.stmts.setRollupCursor.run("last_event_id",e)}insertDriftSignal(e){let n=this.stmts.insertDriftSignal.run(e.team_member_id,e.project_id??null,e.signal_kind,e.severity,e.description,e.detected_at,e.expires_at??null,e.payload??null);return this.stmts.getDriftSignal.get(n.lastInsertRowid)}listDriftSignals(e={}){return e.team_member_id!==void 0&&e.unacked?this.stmts.listUnackedDriftByMember.all(e.team_member_id):e.team_member_id!==void 0?this.stmts.listDriftByMember.all(e.team_member_id):e.project_id!==void 0?this.stmts.listDriftByProject.all(e.project_id):this.stmts.listAllDrift.all()}hasUnackedDriftSignal(e,n,r){return this.stmts.findUnackedDrift.get(e,n??null,r)!==void 0}acknowledgeDriftSignal(e){return this.stmts.ackDriftSignal.run(Date.now(),e),this.stmts.getDriftSignal.get(e)??null}insertInteractiveSession(e){let n=Date.now();return this.stmts.insertInteractiveSession.run(e.run_id,e.step_id,e.state_name,e.status,n,n),this.stmts.getInteractiveSessionByStepId.get(e.step_id)}getInteractiveSessionByStepId(e){return this.stmts.getInteractiveSessionByStepId.get(e)??null}getInteractiveSessionByRunAndState(e,n){return this.stmts.getInteractiveSessionByRunAndState.get(e,n)??null}setInteractiveAgentOutput(e,n,r){this.stmts.setInteractiveAgentOutput.run(n,r,Date.now(),e)}resumeInteractive(e,n,r){return this.resumeInteractiveTxn(e,n,r,K())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,K())}}});import{homedir as x0}from"node:os";import{join as tE}from"node:path";function N0(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:tE(t.HOME||x0(),A0)}function nE(t=process.env){return tE(N0(t),C0)}function fi(t,e=process.env){return t!==void 0&&t.length>0?t:e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0?e.LMCTL_DB:nE(e)}function rE(t,e=process.env){return e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0&&e.LMCTL_DB!==nE(e)?`db: ${t} (overridden by --db/LMCTL_DB)`:`db: ${t}`}var A0,C0,vc=M(()=>{"use strict";A0=".lmctl",C0="state.db"});import{isAbsolute as O0,resolve as sE,join as iE}from"node:path";function _n(t,e){let n=Rp.get(t);if(!n||t.closed)throw Error("Context is closed");return n.resources.add(e),()=>n.resources.delete(e)}function sn(t){let e=Rp.get(t);if(!e)throw Error("Unknown context");return e.dal()}function Nr(t){let e=oE.get(t);if(!e)throw Error("Context state is unavailable");return e}function gi(t){return t!==null&&typeof t=="object"&&aE.has(t)}function Ip(t){try{if(!t||typeof t!="object"||Array.isArray(t))return B("invalid_argument","Context needs an explicit options map");let e={...t},n=["pid","env","cwd","dbPath","dal","onProgress","onWarning","clock","interactive"];if(Object.keys(e).some(g=>!n.includes(g)))return B("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!O0(e.cwd))return B("invalid_argument","Context needs an explicit env and absolute cwd");let r=Object.freeze({...e.env});if(Object.values(r).some(g=>g!==void 0&&typeof g!="string"))return B("invalid_argument","Environment values must be strings or undefined");for(let g of["onProgress","onWarning","clock"])if(e[g]!==void 0&&typeof e[g]!="function")return B("invalid_argument",g+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return B("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return B("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return B("invalid_argument","pid must be a positive integer");let s=sE(e.cwd),i=r.LMCTL_HOME||(r.HOME?iE(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(i?iE(i,"state.db"):void 0)))return B("invalid_argument","Context needs dbPath, LMCTL_DB, LMCTL_HOME or HOME");let a=!1,l,c,u,d=new AbortController,m=new Set,p=g=>{if(l){try{l.close()}catch(h){g.push(G(h))}l=void 0}},f=Object.freeze({status:"ok",error:null,pid:e.pid,signal:d.signal,env:r,cwd:s,dbPath:sE(s,fi(e.dbPath,r)),dal:e.dal,interactive:e.interactive??r.LMCTL_NON_INTERACTIVE!=="1",onProgress:e.onProgress??(()=>{}),onWarning:e.onWarning??(()=>{}),clock:e.clock??Date.now,get closed(){return a},close(){if(c)return c;let g;return c=new Promise(h=>{g=h}),a=!0,d.abort(),(async()=>{let h=[],y=0;for(let b of[...m])try{await b.close(),y++,m.delete(b)}catch(_){h.push(G(_))}h.length||p(h),g({released:y,errors:h})})(),c},finalizeSync(g){if(u)return u;a=!0;let h=[],y={released:0,errors:h};u=y,c??=Promise.resolve(y);let b=[];for(let _ of[...m])try{let v=_.finalizeSync(g);v instanceof Promise?b.push(v.then(()=>{y.released++,m.delete(_)}).catch(E=>{h.push(G(E))})):(y.released++,m.delete(_))}catch(v){h.push(G(v))}return d.abort(g),b.length?c=Promise.all(b).then(()=>(h.length||p(h),y)):h.length||p(h),y}});return Rp.set(f,{resources:m,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=ot({path:f.dbPath})}}),aE.add(f),oE.set(f,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),f}catch(e){return B("invalid_argument","Invalid context: "+G(e))}}var Rp,oE,aE,Qt=M(()=>{"use strict";Yt();vc();mt();Rp=new WeakMap;oE=new WeakMap;aE=new WeakSet});function lE(t){let e=Object.create(null),n=Object.create(null),r=(s,i,o=!0)=>{if(Array.isArray(s)){let a=s.map((l,c)=>r(l,i+"."+c,!1));return o&&(n[i]=a),a}if(s&&typeof s=="object"&&!(s instanceof Date)){let a=Object.create(null);for(let[l,c]of Object.entries(s)){let d=/^Provider[123]$/.test(i)&&["provider","model1"].includes(l)?l[0].toUpperCase()+l.slice(1):l;if(Object.hasOwn(a,d))throw Error(`Ambiguous property '${i}.${d}'`);a[d]=r(c,i?i+"."+d:d,o&&/^[_a-zA-Z]\w*$/.test(d))}return a}return o&&(n[i]=s),s};for(let[s,i]of Object.entries(t))e[s]=r(i,s,/^[_a-zA-Z]\w*$/.test(s));return{properties:e,flat:n}}var cE=M(()=>{"use strict"});function bc(t){return{Provider1:t.provider1.provider,Provider2:t.provider2.provider,Provider3:t.provider3.provider,Model1:t.provider1.model1,Model2:t.provider2.model1,Model3:t.provider3.model1}}var xp=M(()=>{"use strict"});import{readFileSync as L0}from"node:fs";import{homedir as M0}from"node:os";import{join as uE,resolve as P0}from"node:path";function hi(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?P0(e):uE(n||uE(t.HOME||M0(),".lmctl"),"init.toml")}function D0(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function Ec(t,e="<init.toml>"){let{document:n}=Ap(t,e),r={};for(let i of wc){let o=n[i];if(o===void 0)continue;if(!o||typeof o!="object"||Array.isArray(o)||o instanceof Date)throw new Ut(e,"schema","["+i+"] must be a table with provider and model1");let a={};for(let l of dE){let c=o[l];if(typeof c!="string"||!c.trim())throw new Ut(e,"schema",i+"."+l+" must be a nonempty string");a[l]=c}r[i]=a}let s={raw:t,document:n,path:e,slots:r};return Object.defineProperty(s,"config",{enumerable:!1,get(){let i=wc.find(o=>!r[o]);if(i)throw new Ut(e,"schema","["+i+"] is not in "+e+"; this needs the example slots ["+wc.join("], [")+"] -- add ["+i+"] with provider and model1");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function Ap(t,e="<init.toml>"){let n;try{n=Gs(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new Ut(e,"syntax",s.message,s.line??1,(s.column??1)+(t.startsWith("\uFEFF")&&s.line===1?1:0))}return{raw:t,document:n,path:e}}function mE(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(L0(t))}catch(n){let r=n;throw new Ut(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function Cp(t=hi()){return Ap(mE(t),t)}function Tc(t=hi()){return Ec(mE(t),t)}var wc,dE,Ut,Sc=M(()=>{"use strict";Sl();wc=["Provider1","Provider2","Provider3"],dE=["provider","model1"];Ut=class extends Error{constructor(n,r,s,i=1,o=1){let a=D0(n,r,s,i,o);super(r==="missing"?a+". Run lmctl init first.":a+". Fix the file or run lmctl init.");this.path=n;this.kind=r;this.line=i;this.column=o;this.detail=a}detail}});var pE=M(()=>{"use strict";Sl();Sc()});import{spawnSync as Dp}from"node:child_process";import{existsSync as gE,readFileSync as hE}from"node:fs";import{homedir as yE}from"node:os";import{resolve as Mp}from"node:path";function yi(t,e){return e.code==="ETIMEDOUT"?`${t} did not respond within lint's own spawn timeout (${e.message}) \u2014 this does not mean the provider itself is unreachable, only that this specific check didn't finish in time.`:`${t} could not be run: ${e.message}`}function j0(){let t=Dp("agy",["models"],{encoding:"utf-8",timeout:$0});return{status:t.status,stdout:t.stdout??"",error:t.error}}function H0(t){let e=[],n={};for(let r of t.split(/\r?\n/)){let s=r.trim(),i=s.indexOf(" ");if(i<0)continue;let o=s.slice(0,i).trim(),a=s.slice(i+1).trim();o&&(e.push(o),a&&(n[o]=a))}return{models:e,displayNames:n}}function vE(t){if(!t&&Np)return Np;let e=i=>(t||(Np=i),i),n;try{n=(t??U0??j0)()}catch(i){return e({available:!1,models:[],reason:i instanceof Error?yi("agy models",i):`agy models could not be run: ${String(i)}`})}if(n.error)return e({available:!1,models:[],reason:yi("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let{models:r,displayNames:s}=H0(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r,displayNames:s})}function W0(){let t=Dp("codex",["debug","models"],{encoding:"utf-8",timeout:B0});return{status:t.status,stdout:t.stdout??"",error:t.error}}function X0(t){let e;try{e=JSON.parse(t)}catch{return}let n=e.models;if(!Array.isArray(n))return;let r=[];for(let s of n){if(!s||typeof s!="object")continue;let{slug:i,visibility:o}=s;typeof i=="string"&&o==="list"&&r.push(i)}return r}function bE(t){if(!t&&Op)return Op;let e=s=>(t||(Op=s),s),n;try{n=(t??q0??W0)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?yi("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:yi("codex debug models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`codex debug models exited with status ${n.status??"unknown"}`});let r=X0(n.stdout);return r===void 0?e({available:!1,models:[],reason:"codex debug models did not return parseable JSON"}):r.length===0?e({available:!1,models:[],reason:"codex debug models returned no user-visible models"}):e({available:!0,models:r})}function J0(t){let e=Dp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:G0});return{status:e.status,stdout:e.stdout??"",error:e.error}}function V0(t,e){if(!e&&Lp.has(t))return Lp.get(t);let n=o=>(e||Lp.set(t,o),o),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??J0)(t)}catch(o){return n({available:!1,models:[],reason:o instanceof Error?yi(r,o):`${r} could not be run: ${String(o)}`})}if(s.error)return n({available:!1,models:[],reason:yi(r,s.error)});if(s.status!==0)return n({available:!1,models:[],reason:`${r} exited with status ${s.status??"unknown"}`});let i=s.stdout.split(/\r?\n/).map(o=>o.trim()).filter(o=>o.length>0);return i.length===0?n({available:!1,models:[],reason:`${r} returned no models`}):n({available:!0,models:i})}function Fp(t,e={}){let n=[];for(let r of t){let s=r.provider.trim().toLowerCase();if(r.effort&&s!=="opencode"&&s!=="lmplayer"&&s!=="qwen"&&s!=="muse"&&n.push(`[${r.alias}] effort="${r.effort}" is ignored: effort selection is only supported for opencode and lmplayer.`),s==="qwen"&&r.effort&&n.push(`[${r.alias}] effort="${r.effort}" is not a qwen CLI flag: Qwen Code does not expose reasoning-effort selection. Use a thinking/effort model id in model= instead.`),s==="copilot"){if(!r.model)continue;n.push(`[${r.alias}] model="${r.model}" is ignored: copilot does not support lmctl model selection.`);continue}if(s!=="lmplayer"){if(s==="opencode"){if(r.effort&&!r.model&&n.push(`[${r.alias}] effort="${r.effort}" has no effect without model= on an opencode member.`),!r.model)continue;let i=K0(e.opencodeConfigPath);if(!i.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for opencode: ${i.reason}.`);continue}if(i.models.includes(r.model)||/^github-copilot\/(gpt|gemini|o[0-9])/.test(r.model))continue;if(!r.model.includes("/")){let l=i.models.filter(c=>c.endsWith(`/${r.model}`));n.push(l.length>0?`[${r.alias}] model="${r.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model>. Your opencode.json declares it as ${l.join(" / ")}; set model=${l[0]}.`:`[${r.alias}] model="${r.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model> (e.g. github-copilot/${r.model}). Declare it in ~/.config/opencode/opencode.json (see https://lmctl.com/examples/opencode.json).`);continue}let o=r.model.slice(0,r.model.indexOf("/")),a=V0(o,e.opencodeModelsRunner);if(a.available&&a.models.includes(r.model))continue;if(a.available&&!a.models.includes(r.model)){n.push(`[${r.alias}] model="${r.model}" was not found in opencode's LOCALLY-VISIBLE live catalog for "${o}" (checked \`opencode models ${o}\`) -- this is unresolved, not a confirmed unavailability: it could mean opencode genuinely doesn't serve this model, OR that your local catalog/auth for "${o}" is stale/incomplete. Declaring it in opencode.json may or may not help; if it doesn't, check whether a non-opencode provider serves this model directly (e.g. \`lmctl lint\` with model= against provider=codex/claude/gemini/agy).`);continue}n.push(`[${r.alias}] model="${r.model}" is not declared in your opencode.json. opencode resolves github-copilot GPT/Gemini config-free, but copilot Claude and custom providers must be declared \u2014 copy https://lmctl.com/examples/opencode.json to ~/.config/opencode/opencode.json and adjust for your account.`);continue}if(s==="kimi"){if(!r.model)continue;let i=SE(e.kimiConfigPath);i.available?i.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not declared in Kimi's [models] config. Valid configured models: ${Jo(i.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for kimi: ${i.reason}.`);continue}if(s==="agy"){if(!r.model)continue;let i=vE(e.agyModelsRunner);i.available?i.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in agy's live model catalog (\`agy models\`). Valid models: ${Jo(i.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${i.reason}.`);continue}if(s==="dsh"){if(!r.model||Ic.includes(r.model))continue;Rc.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Jo(Rc)}. Valid server-resolved aliases (DeepSeek resolves these to its current model server-side -- pinning to a specific version instead is a DOWNGRADE, not a safer choice): ${Jo(Ic)}. The catalog is patchable via dsh profile overlays \u2014 a model added that way warns here even though it may resolve.`);continue}if(s==="hermes"){if(!r.model)continue;let i=r.model.indexOf(":");(i<=0||i===r.model.length-1)&&n.push(`[${r.alias}] model="${r.model}" should use <provider>:<model> from Hermes's ACP catalog. lmctl checks the shape only; provider and model availability are resolved by Hermes.`);continue}if(s!=="pi"){if(s==="codex"){if(!r.model)continue;r.model===fE&&n.push(`[${r.alias}] model="${fE}" is banned as a build model (operator, 2026-09-06) -- it's a fast/cheap classification model, not intended for build work, and there's no cost reason left to reach for it. Use model=gpt-5.6-sol (or leave model= unset) for build work; if this member genuinely does non-build/classification work, this warning can be ignored.`);let i=bE(e.codexModelsRunner);if(!i.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for codex: ${i.reason}.`);continue}i.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in codex's live model catalog (\`codex debug models\`). Valid models: ${Jo(i.models)}`);continue}r.model&&(_E.has(s)||n.push(`[${r.alias}] model="${r.model}" cannot be verified for provider "${s}": no model validation path exists for this provider.`))}}}return n}async function wE(t,e={}){let n=t.filter(o=>o.model!==void 0&&_E.has(o.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await fs();if(r.catalog===null)return{warnings:[],errors:[]};let s=[],i=[];for(let o of n){let a=o.provider.trim().toLowerCase(),l=o.model,c=ic(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let u=ow(r.catalog,a)??0;s.push(`[${o.alias}] model "${l}" is unknown to the lmprice catalog for provider "${a}" (${u} known) -- not necessarily wrong: may be a model too new for lmprice to have published yet, or a typo. A matching lmprice catalog/alias entry would resolve this; lint cannot otherwise confirm whether ${a} accepts it.`)}else c.kind==="wrong-provider"?i.push({field:o.alias,message:`model "${l}" is not offered by provider "${a}" -- it is a recognized model, but only under: ${c.otherProviders.join(", ")}. Declare provider="${c.otherProviders[0]}" (or another listed provider), or use a model "${a}" actually offers.`}):c.kind==="known-unpriced"&&s.push(`[${o.alias}] model "${l}" is recognized in the lmprice catalog but has no price information \u2014 cost will be unavailable`);if(a==="claude"&&(c.kind==="priced"||c.kind==="known-unpriced"||c.kind==="estimated")&&F0.test(l)){let u=l.replace(/(\d)\.(?=\d)/g,"$1-");s.push(`[${o.alias}] model="${l}" matches the lmprice catalog only through its OpenRouter-style spelling ("." between version numbers); claude's own CLI expects "-" there and does an exact match, so it may reject this string verbatim even though lint recognizes it. If seed/chat fails with "issue with the selected model," try model="${u}" instead.`)}}return{warnings:s,errors:i}}async function EE(t,e={}){return(await wE(t,e)).warnings}async function TE(t,e={}){return(await wE(t,e)).errors}function SE(t){let e=process.env.KIMI_CODE_HOME||Mp(yE(),".kimi-code"),n=t??Mp(e,"config.toml");if(!gE(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=hE(n,"utf-8")}catch(i){return{available:!1,models:[],reason:`${n} could not be read: ${i instanceof Error?i.message:String(i)}`}}let s=new Set;for(let i of r.split(/\r?\n/)){if(/^\s*\[/.test(i)&&!/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.test(i))return{available:!1,models:[],reason:`${n} has an invalid TOML table header`};let o=/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.exec(i);if(!o)continue;let a=z0(o[1]);if(o[1].trim().startsWith("models")&&a===null)return{available:!1,models:[],reason:`${n} has an invalid [models] table header`};a?.[0]==="models"&&a.length>=2&&s.add(a[1])}return s.size===0?{available:!1,models:[],reason:`${n} has no [models] entries`}:{available:!0,models:[...s]}}function z0(t){let e=[],n=0;for(;n<t.length;){for(;/\s/.test(t[n]??"");)n++;if(n>=t.length)break;let r="",s=t[n]==='"'||t[n]==="'"?t[n++]:void 0;if(s){for(;n<t.length&&t[n]!==s;)s==='"'&&t[n]==="\\"&&n+1<t.length&&n++,r+=t[n++];if(t[n]!==s)return null;n++}else{for(;n<t.length&&t[n]!==".";)r+=t[n++];r=r.trim()}if(!r)return null;for(e.push(r);/\s/.test(t[n]??"");)n++;if(n>=t.length)break;if(t[n]!==".")return null;n++}return e.length>0?e:null}function K0(t){let e=t??Mp(yE(),".config","opencode","opencode.json");if(!gE(e))return{available:!0,models:[]};let n;try{n=JSON.parse(hE(e,"utf-8"))}catch(r){return{available:!1,models:[],reason:`${e} could not be parsed: ${r instanceof Error?r.message:String(r)}`}}return{available:!0,models:Y0(n)}}function Y0(t){if(!Pp(t))return[];let e=kc(t.provider)??kc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!Pp(s))continue;let i=kc(s.models)??kc(s.model);if(i)for(let o of Object.keys(i))n.add(o.startsWith(`${r}/`)?o:`${r}/${o}`)}return[...n].sort()}function kc(t){return Pp(t)?t:null}function Pp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Jo(t){return t.length>0?t.join(", "):"(none)"}var _E,F0,Rc,Ic,fE,$0,Np,U0,B0,Op,q0,G0,Lp,xc=M(()=>{"use strict";gs();oc();_E=new Set(Object.keys($o).filter(t=>t!=="codex"&&t!=="kimi")),F0=/\d\.(?=\d)/,Rc=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],Ic=["deepseek-flash","deepseek-pro"],fE="gpt-5.3-codex-spark",$0=15e3;Np=null;B0=5e3;Op=null;G0=5e3;Lp=new Map});var kE=M(()=>{"use strict"});var RE=M(()=>{"use strict";Pd();xp();Sc();Sc();pE();xc();gs();kE()});import{resolve as Q0,join as IE}from"node:path";function $p(t,e={}){try{if(!gi(t))return B("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return B("cancelled","Context is closed");if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Profile options must be a map");let n=e.path;if(Object.keys(e).some(i=>!(dt.find(o=>o.name==="loadProfile")?.params.find(o=>o.name==="options")?.keys??[]).some(o=>o.name===i))||n!==void 0&&(typeof n!="string"||!n))return B("invalid_argument","Profile options accept a nonempty path string only");let r=t.env.LMCTL_HOME||(t.env.HOME?IE(t.env.HOME,".lmctl"):void 0);if(!n&&!r)return B("invalid_argument","Profile path requires HOME, LMCTL_HOME or an explicit path");let s=Q0(t.cwd,n??IE(r,"init.toml"));return fe({path:hi({...t.env,HOME:t.env.HOME??t.cwd},s)})}catch(n){return B("invalid_argument","Invalid profile arguments: "+G(n))}}function Z0(t){try{if(!t||typeof t!="object"||Array.isArray(t))return B("invalid_argument","Expected a validated InitConfig");let e={};for(let n of["provider1","provider2","provider3"]){let r=t[n];if(!r||typeof r!="object"||Array.isArray(r))return B("invalid_argument",n+" must be a provider map");let s={};for(let i of["provider","model1"]){let o=r[i];if(typeof o!="string"||!o.trim())return B("invalid_argument",n+"."+i+" must be a nonempty string");s[i]=o}e[n]=s}return fe(bc(e))}catch(e){return B("invalid_argument","Invalid profile: "+G(e))}}function eF(t,e={}){let n=$p(t,e);if(n.status==="error")return n;try{let r=Tc(n.path);return fe({profile:{path:r.path,raw:r.raw,config:r.config},values:{...bc(r.config),Directory:t.cwd,NonInteractive:!t.interactive}})}catch(r){return r instanceof Ut?B(r.kind,r.message,{path:r.path,line:r.line,column:r.column}):B("read","Could not load profile: "+G(r),{path:n.path})}}function tF(t,e={}){let n=$p(t,e);if(n.status==="error")return n;try{let r=Cp(n.path),{properties:s,flat:i}=lE(r.document);return fe({path:r.path,properties:s,flat:i})}catch(r){return r instanceof Ut?B(r.kind,r.message,{path:r.path,line:r.line,column:r.column}):B("schema","Invalid properties in "+n.path+": "+G(r)+". Fix the file or run lmctl init.",{path:n.path})}}var xE=M(()=>{"use strict";cE();Un();RE();xp();Qt();mt()});function vn(t){return t!=="gemini"}function Ac(t){if(!vn(t))throw new Error(Or)}var Or,_i=M(()=>{"use strict";Or="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function AE(t){if(t.length===0||!t.startsWith("---"))throw new bn("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
2179
+ `);if(e[0]!=="---")throw new bn("frontmatter must start at line 1 with `---` on its own line");let n={},r=-1;for(let o=1;o<e.length;o++){let a=e[o];if(a==="---"){r=o;break}if(a.trim()==="")continue;let l=a.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\s*:\s*(.*)$/);if(!l)throw new bn(`malformed frontmatter line ${o+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],u=l[2].trim();if(!nF.has(c))throw new bn(`unknown frontmatter key "${c}" \u2014 allowed keys: ${Cc.join(", ")}`);n[c]=u}if(r===-1)throw new bn("frontmatter not closed (missing trailing `---` on its own line)");for(let o of Cc)if(n[o]===void 0)throw new bn(`missing required frontmatter key "${o}" \u2014 required: ${Cc.join(", ")}`);let s=0;for(let o=0;o<=r;o++)s+=e[o].length+1;s>t.length&&(s=t.length);let i=n.members.split(",").map(o=>o.trim()).filter(Boolean);return{title:n.title,description:n.description,members:i,bodyOffset:s}}var Cc,nF,bn,CE=M(()=>{"use strict";Cc=["title","description","members"],nF=new Set(Cc),bn=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function NE(t){return jp.has(t)}var jp,Up=M(()=>{"use strict";jp=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as rF,writeFileSync as i6,renameSync as o6,existsSync as LE}from"node:fs";import{basename as sF,resolve as vi,dirname as Hp}from"node:path";function iF(t){let e={},n=/(\w+)=(?:"([^"]*)"|([\S]*))/g,r;for(;(r=n.exec(t))!==null;){let s=r[1],i=r[2]!==void 0?r[2]:r[3];e[s]=i}return e}function oF(t){return/^\s*_MEMBER_\s+\S/.test(t)}function aF(t){return/^\s*_SESSION_\s+\S/.test(t)}function lF(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Vo(t){return/\.(?:lmctl|lmc)$/i.test(t)}function zo(t){return sF(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ht(t){let e=rF(t,"utf-8"),n=Hp(vi(t)),r=Wp(e,zo(t),{baseDir:n,sourcePath:vi(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=vi(n,s.sessiondir));return r}function Wp(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let i=t;if(i.startsWith("#teamfile:")){let l=i.indexOf(`
2180
2180
  `);i=l>=0?i.slice(l+1):""}let o=null;if(i.startsWith("---"))try{o=AE(i)}catch(l){if(l instanceof bn)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
2181
- `);for(let l=0;l<a.length;l++){let c=a[l],u=l+1;if(iF(c))throw new Error(`line ${u}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(oF(c)||!sF(c))continue;let d=rF(c);for(let p of Object.keys(d))if(!OE.includes(p))throw new Error(`line ${u}: unknown key "${p}" on _MEMBER_ line: ${c.trim()}
2182
- allowed keys: ${OE.join(", ")}`);if(!d.provider&&!d.teamfile){s.push(`line ${u}: member line missing provider (or teamfile): ${c.trim()}`);continue}if(!d.alias){s.push(`line ${u}: member line missing required alias: ${c.trim()}`);continue}let m={alias:d.alias,provider:d.provider||"",extra:{}};d.sessionid&&(m.session=d.sessionid),Object.prototype.hasOwnProperty.call(d,"sessiondir")&&(m.sessiondir=d.sessiondir),d.teamfile&&(m.teamfile=d.teamfile),d.model&&(m.model=d.model),d.effort&&(m.effort=d.effort),r.push(m)}return{name:e,members:r,rawText:t,parseErrors:s,frontmatter:o}}function qp(t,e){let n=[];for(let i of t.parseErrors)n.push({field:"session",message:i});let r=t.members.filter(i=>i.alias.toLowerCase()===Bp.toLowerCase());r.length>1&&n.push({field:Bp,message:`${r.length} alias=Lead found (max 1)`});let s=new Set;for(let i of t.members){let o=i.alias.toLowerCase();if(s.has(o)&&n.push({field:i.alias,message:`Duplicate alias "${i.alias}" (case-insensitive)`}),s.add(o),i.teamfile){let a=e?vi(e,i.teamfile):vi(i.teamfile);if(!LE(a))n.push({field:i.alias,message:`Teamfile not found: ${a}`});else{let l=Ht(a),c=Nc(l);c?c.session||n.push({field:i.alias,message:`Team at ${i.teamfile} lead has no session ID. Run: lmctl seed`}):n.push({field:i.alias,message:`Team at ${i.teamfile} has no lead session`})}}else jp.has(i.provider)?vn(i.provider)||n.push({field:i.alias,message:Or}):n.push({field:i.alias,message:`Invalid provider "${i.provider}"`});i.sessiondir!==void 0&&i.sessiondir===""&&n.push({field:i.alias,message:"sessiondir is empty"})}return n}function Nc(t){return t.members.find(e=>e.alias.toLowerCase()===Bp.toLowerCase())}function Xp(t,e,n,r={}){let s=r.requireSession??!0;if(!t.teamfile)throw new Error(`Member "${t.alias}" is not a team reference`);let i=vi(e,t.teamfile),o=n??new Set;if(o.has(i))throw new Error(`Circular team reference: ${t.alias} \u2192 ${i} (already visited: ${[...o].join(" \u2192 ")})`);if(o.add(i),!LE(i))throw new Error(`Teamfile not found: ${i} (referenced by alias "${t.alias}")`);let a=Ht(i),l=Nc(a);if(!l)throw new Error(`Team at ${i} has no lead session`);if(l.teamfile)return Xp(l,Hp(i),o,r);if(s&&!l.session)throw new Error(`Team at ${i} lead has no session ID. Run: lmctl seed`);return{provider:l.provider,session:l.session??"",sessiondir:l.sessiondir||Hp(i),alias:t.alias,resolvedFrom:i,model:l.model,effort:l.effort}}function Oc(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var Bp,OE,wn=M(()=>{"use strict";_i();CE();Up();Bp="Lead";OE=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as aF}from"node:crypto";import{existsSync as ME,readFileSync as PE,realpathSync as lF}from"node:fs";import{dirname as cF,resolve as DE}from"node:path";function It(t,e){let n=DE(t);if(ME(n))return lF(n);if(e!==void 0){let r=dF(t,n,e);if(r!==null)return r}return n}function Mc(t,e){let n=cF(e),r=Wp(t,zo(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=DE(n,s.sessiondir));return r}function bi(t,e,n=r=>{process.stderr.write(`warning: ${r}
2183
- `)}){let r=It(t,uF(e)?e:void 0);if(ME(r)){let i=PE(r,"utf8"),o=Mc(i,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&mF(o)&&fF(e,r,o,i,n),o}let s=e?.getRootTeam(r)??null;throw s!==null?new Error(`teamfile missing on disk: ${r} (registered ${s.registered_at}; the file was renamed or deleted \u2014 seed the team at its new path)`):new Error(`teamfile not found: ${t}`)}function uF(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function dF(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function mF(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=Gp)}function Jp(t,e,n){let r=It(e),s=n.members.filter(i=>i.teamfile===void 0&&i.session!==void 0&&i.session.length>=Gp);if(s.length!==0)for(let i of t.listRootTeams()){let o,a;try{if(o=It(i.teamfile_path),o===r)continue;a=PE(o,"utf8")}catch(c){if(pF(c))continue;throw c}let l=Mc(a,o);for(let c of s){let u=l.members.find(d=>d.teamfile===void 0&&d.session===c.session&&(d.session?.length??0)>=Gp);if(u!==void 0)throw new Lc(`sessionid ownership conflict: ${r}:${c.alias} and ${o}:${u.alias} both use sessionid "${c.session}"`)}}}function pF(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function fF(t,e,n,r,s){try{Jp(t,e,n)}catch(o){if(!(o instanceof Lc))throw o;s(`${o.message}; skipping automatic registration`);return}let i={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:aF("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(i)}var Gp,Lc,Ts=M(()=>{"use strict";wn();Gp=5,Lc=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as gF}from"node:crypto";import{closeSync as hF,openSync as yF,readFileSync as $E,statSync as _F,unlinkSync as Vp,writeFileSync as vF}from"node:fs";function jE(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function UE(t){let e;try{e=JSON.parse($E(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:FE(t)}let n=typeof e=="object"&&e!==null&&"pid"in e?e.pid:void 0;if(typeof n!="number"||!Number.isInteger(n)||n<=0)return FE(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function FE(t){try{return Date.now()-_F(t).mtimeMs<3e5}catch{return!1}}function zp(t,e){return UE(jE(t,e))}function HE(t,e){let n=jE(t,e),r=JSON.stringify({pid:process.pid,token:gF()});for(let s=0;s<2;s+=1)try{let i=yF(n,"wx");try{vF(i,r)}catch(o){throw Vp(n),o}finally{hF(i)}return()=>{try{$E(n,"utf8")===r&&Vp(n)}catch(o){if(o.code!=="ENOENT")throw o}}}catch(i){if(i.code!=="EEXIST")throw i;if(UE(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{Vp(n)}catch(o){if(o.code!=="ENOENT")throw o}}throw new Error(`${e}: could not acquire seed marker`)}var Kp=M(()=>{"use strict"});import{existsSync as bF}from"node:fs";import{dirname as BE}from"node:path";function Qp(t){return Yp.test(t)}function Zp(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!Vo(n)||!Yp.test(r)?null:{teamfile:n,alias:r}}function xt(t,e,n){if(!Vo(t))throw new Ne(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!Qp(e))throw new Ne(`lmctl: "${e}" is not a valid alias (must match ${Yp.source}).`);let r=It(t,n);if(n===void 0&&!bF(r))throw new Ne(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=bi(r,n)}catch(o){throw new Ne(`lmctl: ${t}: ${o instanceof Error?o.message:String(o)}`)}if(s.parseErrors.length>0)throw new Ne(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let i=Oc(s,e);if(i===void 0){let o=s.members.map(a=>a.alias).join(", ")||"(none)";throw new Ne(`lmctl: alias "${e}" not found in ${t}.
2181
+ `);for(let l=0;l<a.length;l++){let c=a[l],u=l+1;if(aF(c))throw new Error(`line ${u}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(lF(c)||!oF(c))continue;let d=iF(c);for(let p of Object.keys(d))if(!OE.includes(p))throw new Error(`line ${u}: unknown key "${p}" on _MEMBER_ line: ${c.trim()}
2182
+ allowed keys: ${OE.join(", ")}`);if(!d.provider&&!d.teamfile){s.push(`line ${u}: member line missing provider (or teamfile): ${c.trim()}`);continue}if(!d.alias){s.push(`line ${u}: member line missing required alias: ${c.trim()}`);continue}let m={alias:d.alias,provider:d.provider||"",extra:{}};d.sessionid&&(m.session=d.sessionid),Object.prototype.hasOwnProperty.call(d,"sessiondir")&&(m.sessiondir=d.sessiondir),d.teamfile&&(m.teamfile=d.teamfile),d.model&&(m.model=d.model),d.effort&&(m.effort=d.effort),r.push(m)}return{name:e,members:r,rawText:t,parseErrors:s,frontmatter:o}}function qp(t,e){let n=[];for(let i of t.parseErrors)n.push({field:"session",message:i});let r=t.members.filter(i=>i.alias.toLowerCase()===Bp.toLowerCase());r.length>1&&n.push({field:Bp,message:`${r.length} alias=Lead found (max 1)`});let s=new Set;for(let i of t.members){let o=i.alias.toLowerCase();if(s.has(o)&&n.push({field:i.alias,message:`Duplicate alias "${i.alias}" (case-insensitive)`}),s.add(o),i.teamfile){let a=e?vi(e,i.teamfile):vi(i.teamfile);if(!LE(a))n.push({field:i.alias,message:`Teamfile not found: ${a}`});else{let l=Ht(a),c=Nc(l);c?c.session||n.push({field:i.alias,message:`Team at ${i.teamfile} lead has no session ID. Run: lmctl seed`}):n.push({field:i.alias,message:`Team at ${i.teamfile} has no lead session`})}}else jp.has(i.provider)?vn(i.provider)||n.push({field:i.alias,message:Or}):n.push({field:i.alias,message:`Invalid provider "${i.provider}"`});i.sessiondir!==void 0&&i.sessiondir===""&&n.push({field:i.alias,message:"sessiondir is empty"})}return n}function Nc(t){return t.members.find(e=>e.alias.toLowerCase()===Bp.toLowerCase())}function Xp(t,e,n,r={}){let s=r.requireSession??!0;if(!t.teamfile)throw new Error(`Member "${t.alias}" is not a team reference`);let i=vi(e,t.teamfile),o=n??new Set;if(o.has(i))throw new Error(`Circular team reference: ${t.alias} \u2192 ${i} (already visited: ${[...o].join(" \u2192 ")})`);if(o.add(i),!LE(i))throw new Error(`Teamfile not found: ${i} (referenced by alias "${t.alias}")`);let a=Ht(i),l=Nc(a);if(!l)throw new Error(`Team at ${i} has no lead session`);if(l.teamfile)return Xp(l,Hp(i),o,r);if(s&&!l.session)throw new Error(`Team at ${i} lead has no session ID. Run: lmctl seed`);return{provider:l.provider,session:l.session??"",sessiondir:l.sessiondir||Hp(i),alias:t.alias,resolvedFrom:i,model:l.model,effort:l.effort}}function Oc(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var Bp,OE,wn=M(()=>{"use strict";_i();CE();Up();Bp="Lead";OE=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as cF}from"node:crypto";import{existsSync as ME,readFileSync as PE,realpathSync as uF}from"node:fs";import{dirname as dF,resolve as DE}from"node:path";function It(t,e){let n=DE(t);if(ME(n))return uF(n);if(e!==void 0){let r=pF(t,n,e);if(r!==null)return r}return n}function Mc(t,e){let n=dF(e),r=Wp(t,zo(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=DE(n,s.sessiondir));return r}function bi(t,e,n=r=>{process.stderr.write(`warning: ${r}
2183
+ `)}){let r=It(t,mF(e)?e:void 0);if(ME(r)){let i=PE(r,"utf8"),o=Mc(i,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&fF(o)&&hF(e,r,o,i,n),o}let s=e?.getRootTeam(r)??null;throw s!==null?new Error(`teamfile missing on disk: ${r} (registered ${s.registered_at}; the file was renamed or deleted \u2014 seed the team at its new path)`):new Error(`teamfile not found: ${t}`)}function mF(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function pF(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function fF(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=Gp)}function Jp(t,e,n){let r=It(e),s=n.members.filter(i=>i.teamfile===void 0&&i.session!==void 0&&i.session.length>=Gp);if(s.length!==0)for(let i of t.listRootTeams()){let o,a;try{if(o=It(i.teamfile_path),o===r)continue;a=PE(o,"utf8")}catch(c){if(gF(c))continue;throw c}let l=Mc(a,o);for(let c of s){let u=l.members.find(d=>d.teamfile===void 0&&d.session===c.session&&(d.session?.length??0)>=Gp);if(u!==void 0)throw new Lc(`sessionid ownership conflict: ${r}:${c.alias} and ${o}:${u.alias} both use sessionid "${c.session}"`)}}}function gF(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function hF(t,e,n,r,s){try{Jp(t,e,n)}catch(o){if(!(o instanceof Lc))throw o;s(`${o.message}; skipping automatic registration`);return}let i={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:cF("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(i)}var Gp,Lc,Ts=M(()=>{"use strict";wn();Gp=5,Lc=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as yF}from"node:crypto";import{closeSync as _F,openSync as vF,readFileSync as $E,statSync as bF,unlinkSync as Vp,writeFileSync as wF}from"node:fs";function jE(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function UE(t){let e;try{e=JSON.parse($E(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:FE(t)}let n=typeof e=="object"&&e!==null&&"pid"in e?e.pid:void 0;if(typeof n!="number"||!Number.isInteger(n)||n<=0)return FE(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function FE(t){try{return Date.now()-bF(t).mtimeMs<3e5}catch{return!1}}function zp(t,e){return UE(jE(t,e))}function HE(t,e){let n=jE(t,e),r=JSON.stringify({pid:process.pid,token:yF()});for(let s=0;s<2;s+=1)try{let i=vF(n,"wx");try{wF(i,r)}catch(o){throw Vp(n),o}finally{_F(i)}return()=>{try{$E(n,"utf8")===r&&Vp(n)}catch(o){if(o.code!=="ENOENT")throw o}}}catch(i){if(i.code!=="EEXIST")throw i;if(UE(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{Vp(n)}catch(o){if(o.code!=="ENOENT")throw o}}throw new Error(`${e}: could not acquire seed marker`)}var Kp=M(()=>{"use strict"});import{existsSync as EF}from"node:fs";import{dirname as BE}from"node:path";function Qp(t){return Yp.test(t)}function Zp(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!Vo(n)||!Yp.test(r)?null:{teamfile:n,alias:r}}function xt(t,e,n){if(!Vo(t))throw new Ne(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!Qp(e))throw new Ne(`lmctl: "${e}" is not a valid alias (must match ${Yp.source}).`);let r=It(t,n);if(n===void 0&&!EF(r))throw new Ne(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=bi(r,n)}catch(o){throw new Ne(`lmctl: ${t}: ${o instanceof Error?o.message:String(o)}`)}if(s.parseErrors.length>0)throw new Ne(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let i=Oc(s,e);if(i===void 0){let o=s.members.map(a=>a.alias).join(", ")||"(none)";throw new Ne(`lmctl: alias "${e}" not found in ${t}.
2184
2184
  Known aliases: ${o}`,"not_found")}if(i.teamfile!==void 0){let o=Xp(i,BE(r));return{teamfile:r,alias:i.alias,provider:o.provider,sessionid:o.session,sessiondir:o.sessiondir,isLead:!0,...o.model??i.model?{model:o.model??i.model}:{},...o.effort??i.effort?{effort:o.effort??i.effort}:{}}}if(zp(r,i.alias))throw new Ne(`lmctl: alias "${i.alias}" is being seeded. Wait for the seed to finish, then retry this prompt.`);if(i.session===void 0)throw s.members.some(o=>zp(r,o.alias))?new Ne(`lmctl: alias "${i.alias}" has no session ID yet, and a seed is currently in progress for this team. Wait for the seed to finish, then retry this prompt.`):new Ne(`lmctl: alias "${i.alias}" in ${t} has no session ID yet.
2185
- Run: lmctl seed ${t}`);return{teamfile:r,alias:i.alias,provider:i.provider,sessionid:i.session,sessiondir:i.sessiondir??BE(r),isLead:Nc(s)?.alias===i.alias,...i.model!==void 0?{model:i.model}:{},...i.effort!==void 0?{effort:i.effort}:{}}}var Ne,Yp,En=M(()=>{"use strict";wn();wn();Ts();Kp();Ne=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},Yp=/^[A-Za-z][A-Za-z0-9_-]*$/});var Pc=VC(gt=>{"use strict";function wi(t){if(!Array.isArray(t))throw new TypeError("Each row and headers must be an array of cells");return Array.from(t,e=>{let n=e==null?"":String(e);if(/[\x00-\x1f\x7f-\x9f]/u.test(n))throw new TypeError("Cells must be single-line text without terminal control characters");return n})}function qE(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError('align must be an array of "left", "right", or "decimal" per column');return t.map(e=>{if(e!=="left"&&e!=="right"&&e!=="decimal")throw new TypeError('align entries must be "left", "right", or "decimal"');return e})}function Jn(t){let e=0;for(let n of t){let r=n.codePointAt(0);if(!(r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r>=917760&&r<=917999)){if(r>=4352&&r<=4447||r>=11904&&r<=12350||r>=12353&&r<=13311||r>=13312&&r<=19903||r>=19968&&r<=40959||r>=40960&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510||r>=9728&&r<=10175||r>=126976&&r<=129791||r>=131072&&r<=262141){e+=2;continue}e+=1}}return e}function ef(t,e,n){let r=" ".repeat(Math.max(0,e-Jn(t)));return n?r+t:t+r}function XE(t){if(Array.isArray(t))return{rows:t};if(t!==null&&typeof t=="object"&&Array.isArray(t.rows))return t;throw new TypeError("each grid must be a rows array or { rows, headers }")}function wF(t){if(t===void 0)return"\u2026";if(typeof t!="string"||/[\x00-\x1f\x7f-\x9f]/u.test(t))throw new TypeError("ellipsis must be a single-line string without terminal control characters");return t}function EF(t,e,n="\u2026"){if(Jn(t)<=e)return t;let r=Jn(n)>e?"\u2026":n,s=Jn(r);if(e<=s)return r;let i="",o=0;for(let a of t){let l=Jn(a);if(o+l>e-s)break;i+=a,o+=l}return`${i}${r}`}function TF(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError("max must be an array of per-column width caps");return t.map(e=>{if(e!=null){if(typeof e!="number"||!Number.isInteger(e)||e<1)throw new TypeError("max entries must be positive integers, null, or undefined");return e}})}function GE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function SF(t){if(t!==void 0){if(!Array.isArray(t)||t.some(e=>!Number.isInteger(e)||e<0))throw new TypeError("decimalPlaces must be an array of nonnegative integers");return t}}function JE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=XE(n);r.headers!==void 0&&wi(r.headers);for(let s of r.rows.map(wi))s.forEach((i,o)=>{e[o]=Math.max(e[o]??0,GE(i)?.places??0)})}return e}gt.measureDecimalPlaces=JE;function VE(t,e,n){let r=SF(n)??[],s=e.includes("decimal")?JE(t):[];return Array.from({length:Math.max(r.length,s.length)},(i,o)=>Math.max(r[o]??0,s[o]??0))}function zE(t,e){let n=GE(t);if(!n)return null;let r=n.places?n.places+1:0,s=e?e+1:0;return t+" ".repeat(Math.max(0,s-r))}function KE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=TF(e),i=qE(n),o=VE(t,i,r),a=[],l=(c,u)=>{a[c]=Math.max(a[c]??0,u)};for(let c of t){let u=XE(c);u.headers!==void 0&&wi(u.headers).forEach((d,m)=>{l(m,Jn(d))});for(let d of u.rows.map(wi))d.forEach((m,p)=>{let f=i[p]==="decimal"?zE(m,o[p]??0)??m:m;l(p,Jn(f))})}return a.map((c,u)=>{let d=s[u];return d===void 0?c:Math.min(c,d)})}gt.measureColumns=KE;function kF(t){if(t===void 0)return"";if(typeof t=="number"&&Number.isInteger(t)&&t>=0)return" ".repeat(t);if(typeof t=="string"&&!/[\x00-\x1f\x7f-\x9f]/u.test(t))return t;throw new TypeError("margin must be a number of spaces or a single-line string")}function YE(t,{widths:e,headers:n,align:r,truncate:s=!0,truncateTrailing:i=!1,margin:o,max:a,ellipsis:l,decimalPlaces:c}={}){if(!Array.isArray(t))throw new TypeError("rows must be an array of row arrays");if(e!==void 0&&!Array.isArray(e))throw new TypeError("widths must be an array of column widths");if(e!==void 0&&a!==void 0)throw new TypeError("pass widths or max, not both (max caps a measurement)");let u=kF(o),d=qE(r),m=wF(l),p=VE([t],d,c),f=e??KE([{rows:t,headers:n}],{max:a,align:d,decimalPlaces:p}),g=t.map(wi);n!==void 0&&g.unshift(wi(n));let h=g.map((y,b)=>{let _=y.length-1;for(;_>=0&&y[_]==="";)_--;return y.slice(0,_+1).map((v,E)=>{let R=f[E]||0,S=s&&R>0&&(E!==_||i)?EF(v,R,m):v;if(d[E]==="decimal"){let I=n!==void 0&&b===0?null:zE(v,p[E]??0),N=ef(I!==null&&Jn(I)<=R?I:S,R,!0);return E===_&&I!==null?N.trimEnd():N}return d[E]==="right"?ef(S,R,!0):E===_?S:ef(S,R,!1)}).join(" ")}).join(`
2185
+ Run: lmctl seed ${t}`);return{teamfile:r,alias:i.alias,provider:i.provider,sessionid:i.session,sessiondir:i.sessiondir??BE(r),isLead:Nc(s)?.alias===i.alias,...i.model!==void 0?{model:i.model}:{},...i.effort!==void 0?{effort:i.effort}:{}}}var Ne,Yp,En=M(()=>{"use strict";wn();wn();Ts();Kp();Ne=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},Yp=/^[A-Za-z][A-Za-z0-9_-]*$/});var Pc=VC(gt=>{"use strict";function wi(t){if(!Array.isArray(t))throw new TypeError("Each row and headers must be an array of cells");return Array.from(t,e=>{let n=e==null?"":String(e);if(/[\x00-\x1f\x7f-\x9f]/u.test(n))throw new TypeError("Cells must be single-line text without terminal control characters");return n})}function qE(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError('align must be an array of "left", "right", or "decimal" per column');return t.map(e=>{if(e!=="left"&&e!=="right"&&e!=="decimal")throw new TypeError('align entries must be "left", "right", or "decimal"');return e})}function Jn(t){let e=0;for(let n of t){let r=n.codePointAt(0);if(!(r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r>=917760&&r<=917999)){if(r>=4352&&r<=4447||r>=11904&&r<=12350||r>=12353&&r<=13311||r>=13312&&r<=19903||r>=19968&&r<=40959||r>=40960&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510||r>=9728&&r<=10175||r>=126976&&r<=129791||r>=131072&&r<=262141){e+=2;continue}e+=1}}return e}function ef(t,e,n){let r=" ".repeat(Math.max(0,e-Jn(t)));return n?r+t:t+r}function XE(t){if(Array.isArray(t))return{rows:t};if(t!==null&&typeof t=="object"&&Array.isArray(t.rows))return t;throw new TypeError("each grid must be a rows array or { rows, headers }")}function TF(t){if(t===void 0)return"\u2026";if(typeof t!="string"||/[\x00-\x1f\x7f-\x9f]/u.test(t))throw new TypeError("ellipsis must be a single-line string without terminal control characters");return t}function SF(t,e,n="\u2026"){if(Jn(t)<=e)return t;let r=Jn(n)>e?"\u2026":n,s=Jn(r);if(e<=s)return r;let i="",o=0;for(let a of t){let l=Jn(a);if(o+l>e-s)break;i+=a,o+=l}return`${i}${r}`}function kF(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError("max must be an array of per-column width caps");return t.map(e=>{if(e!=null){if(typeof e!="number"||!Number.isInteger(e)||e<1)throw new TypeError("max entries must be positive integers, null, or undefined");return e}})}function GE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function RF(t){if(t!==void 0){if(!Array.isArray(t)||t.some(e=>!Number.isInteger(e)||e<0))throw new TypeError("decimalPlaces must be an array of nonnegative integers");return t}}function JE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=XE(n);r.headers!==void 0&&wi(r.headers);for(let s of r.rows.map(wi))s.forEach((i,o)=>{e[o]=Math.max(e[o]??0,GE(i)?.places??0)})}return e}gt.measureDecimalPlaces=JE;function VE(t,e,n){let r=RF(n)??[],s=e.includes("decimal")?JE(t):[];return Array.from({length:Math.max(r.length,s.length)},(i,o)=>Math.max(r[o]??0,s[o]??0))}function zE(t,e){let n=GE(t);if(!n)return null;let r=n.places?n.places+1:0,s=e?e+1:0;return t+" ".repeat(Math.max(0,s-r))}function KE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=kF(e),i=qE(n),o=VE(t,i,r),a=[],l=(c,u)=>{a[c]=Math.max(a[c]??0,u)};for(let c of t){let u=XE(c);u.headers!==void 0&&wi(u.headers).forEach((d,m)=>{l(m,Jn(d))});for(let d of u.rows.map(wi))d.forEach((m,p)=>{let f=i[p]==="decimal"?zE(m,o[p]??0)??m:m;l(p,Jn(f))})}return a.map((c,u)=>{let d=s[u];return d===void 0?c:Math.min(c,d)})}gt.measureColumns=KE;function IF(t){if(t===void 0)return"";if(typeof t=="number"&&Number.isInteger(t)&&t>=0)return" ".repeat(t);if(typeof t=="string"&&!/[\x00-\x1f\x7f-\x9f]/u.test(t))return t;throw new TypeError("margin must be a number of spaces or a single-line string")}function YE(t,{widths:e,headers:n,align:r,truncate:s=!0,truncateTrailing:i=!1,margin:o,max:a,ellipsis:l,decimalPlaces:c}={}){if(!Array.isArray(t))throw new TypeError("rows must be an array of row arrays");if(e!==void 0&&!Array.isArray(e))throw new TypeError("widths must be an array of column widths");if(e!==void 0&&a!==void 0)throw new TypeError("pass widths or max, not both (max caps a measurement)");let u=IF(o),d=qE(r),m=TF(l),p=VE([t],d,c),f=e??KE([{rows:t,headers:n}],{max:a,align:d,decimalPlaces:p}),g=t.map(wi);n!==void 0&&g.unshift(wi(n));let h=g.map((y,b)=>{let _=y.length-1;for(;_>=0&&y[_]==="";)_--;return y.slice(0,_+1).map((v,E)=>{let R=f[E]||0,S=s&&R>0&&(E!==_||i)?SF(v,R,m):v;if(d[E]==="decimal"){let I=n!==void 0&&b===0?null:zE(v,p[E]??0),N=ef(I!==null&&Jn(I)<=R?I:S,R,!0);return E===_&&I!==null?N.trimEnd():N}return d[E]==="right"?ef(S,R,!0):E===_?S:ef(S,R,!1)}).join(" ")}).join(`
2186
2186
  `);return h===""||u===""?h:`${u}${h.split(`
2187
2187
  `).join(`
2188
- ${u}`)}`}gt.renderGrid=YE;function QE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l}={}){return YE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l})}function RF(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l,stream:c=process.stdout}={}){let u=QE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l});u&&c.write(`${u}
2189
- `)}gt.formatTable=QE;gt.printTable=RF;function WE(t){return t instanceof Date?t.getTime():typeof t=="number"?t:typeof t=="string"&&t.trim()?Date.parse(t):NaN}function IF(t,{now:e=Date.now()}={}){let n=WE(e);if(!Number.isFinite(n))throw new TypeError("now must be a valid timestamp");let r=WE(t);if(!Number.isFinite(r))return"unknown";let s=r-n,i=Math.floor(Math.abs(s)/1e3);if(i===0)return"now";for(let[o,a]of[["w",604800],["d",86400],["h",3600],["m",60],["s",1]])if(i>=a)return`${Math.floor(i/a)}${o}${s<0?" ago":""}`}gt.formatRelativeTime=IF;function xF(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=t<0?"-":"",n=Math.abs(t);if(n<1e3)return String(t);let r=Math.round(n/1e3);return r<1e3?`${e}${r}K`:`${e}${(n/1e6).toFixed(1)}M`}gt.formatCount=xF;var tf=[["w",604800],["d",86400],["h",3600],["m",60],["s",1]];function AF(t,{maxUnit:e="w",style:n="spaced"}={}){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let r=tf.findIndex(([a])=>a===e);if(r===-1)throw new TypeError('maxUnit must be one of "w", "d", "h", "m", "s"');if(n!=="spaced"&&n!=="compact")throw new TypeError('style must be "spaced" or "compact"');let s=Math.floor(Math.max(0,t)/1e3);if(n==="compact"){let a=tf.slice(r).filter(([d])=>d!=="s");if(a.length===0||s<60)return"<1m";let l=[],c=s,u=!1;for(let[d,m]of a){let p=Math.floor(c/m);if(c-=p*m,p>0&&!u){let f=d==="d"||d==="w"?`${p}${d}`:`${Tn(p)}${d}`;l.push({text:f,zero:!1}),u=!0}else u&&l.push({text:`${Tn(p)}${d}`,zero:p===0})}for(;l.length>0&&l[l.length-1].zero;)l.pop();return l.map(d=>d.text).join("")}let i=s,o=[];for(let[a,l]of tf.slice(r))if(i>=l||a==="s"&&o.length===0){let c=Math.floor(i/l);if(i-=c*l,o.push(`${c}${a}`),o.length===2)break}return o.join(" ")}gt.formatDuration=AF;function ZE(t){return t===void 0?new Date:t instanceof Date?t:typeof t=="number"||typeof t=="string"?new Date(t):new Date(NaN)}function Tn(t){return String(t).padStart(2,"0")}function eT(t){let e=ZE(t);return Number.isNaN(e.getTime())?"unknown":`${Tn(e.getHours())}:${Tn(e.getMinutes())}:${Tn(e.getSeconds())}`}gt.formatClock=eT;function CF(t){let e=ZE(t);return Number.isNaN(e.getTime())?"unknown":`${`${e.getFullYear()}-${Tn(e.getMonth()+1)}-${Tn(e.getDate())}`} ${eT(e)}`}gt.formatLocalTimestamp=CF;function NF(t){return typeof t=="number"&&Number.isFinite(t)?`${Math.round(t*100)}%`:"?%"}gt.formatPercent=NF;function OF(t,{width:e=10,fill:n="#",empty:r=" ",unknown:s="?"}={}){if(typeof e!="number"||!Number.isInteger(e)||e<1)throw new TypeError("width must be a positive integer");for(let[o,a]of[["fill",n],["empty",r],["unknown",s]])if(typeof a!="string"||[...a].length!==1||/[\x00-\x1f\x7f-\x9f]/u.test(a)||Jn(a)!==1)throw new TypeError(`${o} must be a single character with terminal display width 1`);if(typeof t!="number"||!Number.isFinite(t))return s.repeat(e);let i=Math.min(e,Math.max(0,Math.round(t*e)));return`${n.repeat(i)}${r.repeat(e-i)}`}gt.formatBar=OF;function LF(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=Math.floor(Math.max(0,t)/1e3),n=Math.floor(e/86400);e-=n*86400;let r=Math.floor(e/3600);e-=r*3600;let s=Math.floor(e/60);e-=s*60;let i=`${Tn(r)}:${Tn(s)}:${Tn(e)}`;return n>0?`${n}d ${i}`:i}gt.formatTimer=LF;function MF(t){return(t==null?"":String(t)).replace(/[\x00-\x1f\x7f-\x9f]/gu,n=>n===`
2190
- `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}gt.escapeCell=MF});function on(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:fi(void 0,{...process.env,...t.env})}async function he(t,e){if(t.dal!==void 0)return e(t.dal);let n=ot({path:on(t)});try{return await e(n)}finally{n.close()}}function nf(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
2188
+ ${u}`)}`}gt.renderGrid=YE;function QE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l}={}){return YE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l})}function xF(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l,stream:c=process.stdout}={}){let u=QE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:i,max:o,ellipsis:a,decimalPlaces:l});u&&c.write(`${u}
2189
+ `)}gt.formatTable=QE;gt.printTable=xF;function WE(t){return t instanceof Date?t.getTime():typeof t=="number"?t:typeof t=="string"&&t.trim()?Date.parse(t):NaN}function AF(t,{now:e=Date.now()}={}){let n=WE(e);if(!Number.isFinite(n))throw new TypeError("now must be a valid timestamp");let r=WE(t);if(!Number.isFinite(r))return"unknown";let s=r-n,i=Math.floor(Math.abs(s)/1e3);if(i===0)return"now";for(let[o,a]of[["w",604800],["d",86400],["h",3600],["m",60],["s",1]])if(i>=a)return`${Math.floor(i/a)}${o}${s<0?" ago":""}`}gt.formatRelativeTime=AF;function CF(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=t<0?"-":"",n=Math.abs(t);if(n<1e3)return String(t);let r=Math.round(n/1e3);return r<1e3?`${e}${r}K`:`${e}${(n/1e6).toFixed(1)}M`}gt.formatCount=CF;var tf=[["w",604800],["d",86400],["h",3600],["m",60],["s",1]];function NF(t,{maxUnit:e="w",style:n="spaced"}={}){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let r=tf.findIndex(([a])=>a===e);if(r===-1)throw new TypeError('maxUnit must be one of "w", "d", "h", "m", "s"');if(n!=="spaced"&&n!=="compact")throw new TypeError('style must be "spaced" or "compact"');let s=Math.floor(Math.max(0,t)/1e3);if(n==="compact"){let a=tf.slice(r).filter(([d])=>d!=="s");if(a.length===0||s<60)return"<1m";let l=[],c=s,u=!1;for(let[d,m]of a){let p=Math.floor(c/m);if(c-=p*m,p>0&&!u){let f=d==="d"||d==="w"?`${p}${d}`:`${Tn(p)}${d}`;l.push({text:f,zero:!1}),u=!0}else u&&l.push({text:`${Tn(p)}${d}`,zero:p===0})}for(;l.length>0&&l[l.length-1].zero;)l.pop();return l.map(d=>d.text).join("")}let i=s,o=[];for(let[a,l]of tf.slice(r))if(i>=l||a==="s"&&o.length===0){let c=Math.floor(i/l);if(i-=c*l,o.push(`${c}${a}`),o.length===2)break}return o.join(" ")}gt.formatDuration=NF;function ZE(t){return t===void 0?new Date:t instanceof Date?t:typeof t=="number"||typeof t=="string"?new Date(t):new Date(NaN)}function Tn(t){return String(t).padStart(2,"0")}function eT(t){let e=ZE(t);return Number.isNaN(e.getTime())?"unknown":`${Tn(e.getHours())}:${Tn(e.getMinutes())}:${Tn(e.getSeconds())}`}gt.formatClock=eT;function OF(t){let e=ZE(t);return Number.isNaN(e.getTime())?"unknown":`${`${e.getFullYear()}-${Tn(e.getMonth()+1)}-${Tn(e.getDate())}`} ${eT(e)}`}gt.formatLocalTimestamp=OF;function LF(t){return typeof t=="number"&&Number.isFinite(t)?`${Math.round(t*100)}%`:"?%"}gt.formatPercent=LF;function MF(t,{width:e=10,fill:n="#",empty:r=" ",unknown:s="?"}={}){if(typeof e!="number"||!Number.isInteger(e)||e<1)throw new TypeError("width must be a positive integer");for(let[o,a]of[["fill",n],["empty",r],["unknown",s]])if(typeof a!="string"||[...a].length!==1||/[\x00-\x1f\x7f-\x9f]/u.test(a)||Jn(a)!==1)throw new TypeError(`${o} must be a single character with terminal display width 1`);if(typeof t!="number"||!Number.isFinite(t))return s.repeat(e);let i=Math.min(e,Math.max(0,Math.round(t*e)));return`${n.repeat(i)}${r.repeat(e-i)}`}gt.formatBar=MF;function PF(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=Math.floor(Math.max(0,t)/1e3),n=Math.floor(e/86400);e-=n*86400;let r=Math.floor(e/3600);e-=r*3600;let s=Math.floor(e/60);e-=s*60;let i=`${Tn(r)}:${Tn(s)}:${Tn(e)}`;return n>0?`${n}d ${i}`:i}gt.formatTimer=PF;function DF(t){return(t==null?"":String(t)).replace(/[\x00-\x1f\x7f-\x9f]/gu,n=>n===`
2190
+ `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}gt.escapeCell=DF});function on(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:fi(void 0,{...process.env,...t.env})}async function he(t,e){if(t.dal!==void 0)return e(t.dal);let n=ot({path:on(t)});try{return await e(n)}finally{n.close()}}function nf(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
2191
2191
  `)}function Vn(t,e){return t.stderr.write(`error: ${e}
2192
2192
  `),1}function tT(t,e,n=5e3){let r=Date.now(),s=r,i=setInterval(()=>{let o=Date.now();o-s<n||t.stderr.write(e(Math.round((o-r)/1e3)))},n);return i.unref(),{poke:()=>{s=Date.now()},stop:()=>clearInterval(i)}}function nT(t,e){let n=e instanceof Error?e.message:String(e);return t.stderr.write(`internal error: ${n}
2193
- `),2}function Dc(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}var PF,zn=M(()=>{"use strict";Yt();PF=xd(Pc(),1);vc()});import{openSync as DF,closeSync as FF,fstatSync as $F,readSync as jF,constants as rT}from"node:fs";import{dirname as UF,join as Fc}from"node:path";import{createHash as HF}from"node:crypto";function of(t){if(!ms(t.catalog)||!ps(t.aliases)||!t.sha256||!/^[a-f0-9]{64}$/.test(t.sha256))throw Error("invalid or incomplete price snapshot (catalog, aliases and SHA-256 required)");if(!["network","cache","bundled","pinned"].includes(t.source)||t.generatedAt!==null&&typeof t.generatedAt!="string")throw Error("invalid price snapshot metadata");if(t.catalog.records.length>1e5||t.aliases.aliases.length>1e5||t.aliases.standards.length>1e5)throw Error("price snapshot exceeds the 100000-entry limit");let e=i=>{if(i.length>65536)throw Error("price identity exceeds the 65536-character limit")},n=new Set,r=new Set,s=new Set;for(let i of t.catalog.records){let o=aT(i);if(!o||n.has(o))throw Error("duplicate or missing price record id");n.add(o),e(o),e(i.source),e(i.source_model_id);for(let u of[i.source,i.source_model_id])if(typeof u!="string"||!u.trim())throw Error("invalid price record identity");let a=i;for(let u of[i.provider,i.mode,i.gateway_id,i.record_id,a.vendor_model_id,a.canonical_slug])if(u!=null&&typeof u!="string")throw Error("invalid price record metadata");for(let u of[i.pricing.input_per_1m_tokens,i.pricing.output_per_1m_tokens,i.pricing.input_cache_read_per_1m_tokens,i.pricing.input_cache_write_per_1m_tokens??null])if(!sT(u))throw Error("price rates must be finite nonnegative numbers or null");let l=i.pricing.source_cost_fields;if(l!=null&&(typeof l!="object"||Array.isArray(l)))throw Error("invalid source cost fields");for(let u of["cache_creation_input_token_cost","cache_creation_input_token_cost_above_1hr"])if(l?.[u]!==void 0&&!sT(l[u]))throw Error("source blend rates must be finite nonnegative numbers or null");let c=i.pricing.currency;if(c!=null&&c!=="USD")throw Error("price currency must be USD")}for(let i of t.aliases.standards){e(i.standard_slug),i.catalog_record_id!==null&&e(i.catalog_record_id);let o=i.standard_slug.toLowerCase();if(!o||r.has(o))throw Error("duplicate price standard");r.add(o)}for(let i of t.aliases.aliases){e(i.alias),i.standard_slug!==null&&e(i.standard_slug);let o=i.alias.toLowerCase();if(!o||s.has(o))throw Error("duplicate price alias");if(s.add(o),i.standard_slug!==null&&!r.has(i.standard_slug.toLowerCase()))throw Error("price alias references missing standard")}}function iT(t){let e=DF(t,rT.O_RDONLY|rT.O_NONBLOCK);try{let n=$F(e);if(!n.isFile()||n.size>BF)throw Error("price file must be a regular file within the 64 MiB size limit");let r=Buffer.alloc(n.size+1),s=0;for(;s<r.length;){let i=jF(e,r,s,r.length-s,null);if(i===0)break;s+=i}if(s!==n.size)throw Error("price file changed while reading; retry with a complete file");return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(r.subarray(0,s))}finally{FF(e)}}function WF(t,e=Fc(UF(t),"aliases.json")){let n=iT(t),r=iT(e),s;try{s=oT(n)}catch{s=null}if(!s||!("records"in Object(s))){let a=n.trim().split(/\r?\n/).filter(c=>c.trim()).map(c=>JSON.parse(c)),l=a[0]?.schema_version!==void 0&&a[0]?.pricing===void 0&&a[0]?.source_model_id===void 0?a.shift():{};s={schema_version:l.schema_version??1,generated_at:l.generated_at??"",records:a}}let i=oT(r),o={catalog:s,aliases:i,source:"pinned",generatedAt:s?.generated_at||null,sha256:HF("sha256").update(n).update(r).digest("hex")};return of(o),o}function sf(t){let e=t.pragma("busy_timeout",{simple:!0});try{return t.pragma("busy_timeout = 0"),t.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='price_snapshot'").get()?t.transaction(()=>{let n=t.prepare("SELECT * FROM price_snapshot").get();if(!n)return null;let r=t.prepare("SELECT * FROM price_record ORDER BY ordinal").all().map(o=>{if(typeof o.record_id!="string"||!o.record_id||o.currency!=="USD"||o.unit!=="per_1m_tokens")throw Error("invalid stored price identity, currency or unit");let a=JSON.parse(o.record_json);return{...a,record_id:o.record_id,pricing:{...a.pricing,input_per_1m_tokens:o.input_1m,output_per_1m_tokens:o.output_1m,input_cache_read_per_1m_tokens:o.cache_read_1m,input_cache_write_per_1m_tokens:o.cache_write_1m,source_cost_fields:JSON.parse(o.source_cost_fields??"{}")}}});if(r.length!==n.record_count)throw Error("incomplete stored price snapshot");let s=t.prepare("SELECT alias,standard_slug,evidence FROM price_alias ORDER BY alias").all(),i={catalog:{schema_version:1,generated_at:n.generated_at??"",records:r},aliases:{schema_version:1,standards:JSON.parse(n.standards_json),aliases:s},source:n.source,generatedAt:n.generated_at,sha256:n.sha256,fetchedAt:n.fetched_at,loadedAt:n.loaded_at,recordCount:n.record_count};return of(i),i})():null}finally{t.pragma("busy_timeout = "+e)}}function qF(t,e,n={}){of(e);let r=()=>t.prepare("SELECT sha256 FROM price_snapshot").get()?.sha256===e.sha256,s=t.pragma("busy_timeout",{simple:!0});try{return t.pragma("busy_timeout = 0"),r()?"unchanged":t.transaction(()=>{if(r())return"unchanged";t.exec("DELETE FROM price_alias; DELETE FROM price_record; DELETE FROM price_snapshot;");let i=t.prepare("INSERT INTO price_record(record_id,source,provider,source_model_id,vendor_model_id,canonical_slug,currency,unit,input_1m,output_1m,cache_read_1m,cache_write_1m,source_cost_fields,record_json,ordinal) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");e.catalog.records.forEach((c,u)=>{let d=c;i.run(aT(c),c.source,c.provider??null,c.source_model_id,d.vendor_model_id??null,d.canonical_slug??null,"USD","per_1m_tokens",c.pricing.input_per_1m_tokens,c.pricing.output_per_1m_tokens,c.pricing.input_cache_read_per_1m_tokens,c.pricing.input_cache_write_per_1m_tokens??null,JSON.stringify(c.pricing.source_cost_fields??{}),JSON.stringify(c),u)});let o=t.prepare("INSERT INTO price_alias(alias,standard_slug,evidence,catalog_record_id) VALUES(?,?,?,?)"),a=new Map(e.aliases.standards.map(c=>[c.standard_slug.toLowerCase(),c]));for(let c of e.aliases.aliases){let u=a.get(c.standard_slug?.toLowerCase()??"");o.run(c.alias.toLowerCase(),c.standard_slug,c.evidence,u?.catalog_record_id??null)}let l=new Date(n.now??Date.now()).toISOString();return t.prepare("INSERT INTO price_snapshot(sha256,generated_at,source,fetched_at,loaded_at,record_count,standards_json) VALUES(?,?,?,?,?,?,?)").run(e.sha256,e.generatedAt,e.source,l,l,e.catalog.records.length,JSON.stringify(e.aliases.standards)),"updated"}).immediate()}catch(i){if(/^SQLITE_(BUSY|LOCKED|READONLY)(_|$)/.test(String(i?.code)))return"deferred";throw i}finally{t.pragma("busy_timeout = "+s)}}async function XF(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=sf(t),i=rf.get(t),o=i&&i.hash===s?.sha256?i.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=o&&n-o<nc(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(WF(Fc(r.LMCTL_PRICE_DATA,"model_list.json"))):fs({cacheDir:r.LMCTL_HOME?Fc(r.LMCTL_HOME,"cache","lmprice"):r.HOME?Fc(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:nc(r)})),l,c;try{c=await(e.budgetMs===void 0?a():Promise.race([a(),new Promise(m=>{l=setTimeout(()=>m(null),e.budgetMs)})]))}finally{clearTimeout(l)}if(rf.set(t,{hash:s?.sha256??null,at:n}),!c?.catalog||!c.aliases||!c.sha256||c.refreshFailed&&(s||c.source!=="bundled"))return{status:"unavailable",snapshot:s};let u=qF(t,c,{now:n}),d=sf(t);return rf.set(t,{hash:d?.sha256??null,at:n}),{status:u,snapshot:d}}async function $c(t,e){try{return(await XF(t,{env:e,budgetMs:900})).snapshot??Ko}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return Ko;try{return sf(t)??Ko}catch{return Ko}}}async function af(t){if(t.dal)return $c(t.dal.db,t.env);let e;try{return e=ot({path:on(t),recover:!1}),await $c(e.db,t.env)}catch{return Ko}finally{try{e?.close()}catch{}}}var Ko,aT,sT,BF,oT,rf,lf=M(()=>{"use strict";gs();Yt();zn();Ko={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},aT=t=>t.record_id??t.source+":"+t.source_model_id,sT=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;BF=64*1024*1024;oT=t=>JSON.parse(t.replace(/^\uFEFF/,""));rf=new WeakMap});function Kn(t){try{return t?.usage}catch{return}}function Yo(t,e,n,r){let s,i,o,a=!1;try{o=ac(e),s=t.dal??ot({path:on(t),recover:!1}),i=s.insertDirectTurn(o,n,r)}catch{}return{async finish(l){if(!a){a=!0;try{s&&i!==void 0&&o&&s.finishDirectTurn(i,await jo(o,l,()=>$c(s.db,t.env),{db:s.db,env:t.env}))}catch{}finally{if(s&&s!==t.dal)try{s.close()}catch{}}}}}}function Qo(t,e,n){let r=t,s,i;s=Kn(r)??Kn(n);try{i=r?.sessionId??n?.sessionId}catch{i=n?.sessionId}return{status:li(G(t),e.aborted),usage:s,sessionId:i}}var cf=M(()=>{"use strict";Yt();zn();lf();Uo();mt()});function Ss(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var jc=M(()=>{"use strict"});import{randomUUID as GF}from"node:crypto";import{chmodSync as lT,mkdirSync as JF,readdirSync as VF,statSync as zF,unlinkSync as KF,writeFileSync as YF}from"node:fs";import{homedir as QF,tmpdir as ZF}from"node:os";import{join as Zo}from"node:path";function o$(t){return Ss(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function ea(t){return o$(t).replace(/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z0-9 ]*PRIVATE KEY-----|$)/g,"[REDACTED_PRIVATE_KEY]").replace(/\b((?:set-)?cookie\s*:[ \t]*)[^\r\n]+/gi,"$1[REDACTED]").replace(/\b([a-z][a-z0-9+.-]*:\/\/[^\s/:@]*):[^\s/@]+@/gi,"$1:[REDACTED]@").replace(/\bBearer\s+(?=[A-Za-z0-9._~+/-]{12,}\b)(?=[A-Za-z0-9._~+/-]*[0-9._~+/-])[A-Za-z0-9._~+/-]{12,}/gi,"Bearer [REDACTED]").replace(i$,"$1[REDACTED]").replace(/\b((?:[A-Z0-9]+_)*(?:KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIALS?)(?:_[A-Z0-9]+)*=)(?!\[REDACTED\])(?:"[^"]*"|'[^']*'|[^\s,;]+)/g,"$1[REDACTED]").replace(/([?&](?:key|sig|signature)=)[^&\s'"]+/gi,"$1[REDACTED]").replace(/\bsk-[A-Za-z0-9_-]{12,}\b/g,"[REDACTED_SECRET]").replace(/\b(?:gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|glpat-[A-Za-z0-9_-]{16,}|xox[abeprs]-[A-Za-z0-9-]{10,})/g,"[REDACTED_SECRET]").replace(/\bAIza[0-9A-Za-z_-]{20,}\b/g,"[REDACTED_SECRET]").replace(/\bAKIA[0-9A-Z]{16}\b/g,"[REDACTED_SECRET]").replace(/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,"[REDACTED_JWT]")}function a$(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?Zo(ZF(),`lmctl-test-${process.pid}`,".lmctl"):Zo(process.env.HOME||QF(),".lmctl"));return Zo(t,"provider-errors")}function l$(t,e,n){if(t.length<=e)return t;let r=Math.floor(e*.2),s=e-r,i=t.length-e;return`${t.slice(0,r)}
2193
+ `),2}function Dc(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}var FF,zn=M(()=>{"use strict";Yt();FF=xd(Pc(),1);vc()});import{openSync as $F,closeSync as jF,fstatSync as UF,readSync as HF,constants as rT}from"node:fs";import{dirname as BF,join as Fc}from"node:path";import{createHash as WF}from"node:crypto";function of(t){if(!ms(t.catalog)||!ps(t.aliases)||!t.sha256||!/^[a-f0-9]{64}$/.test(t.sha256))throw Error("invalid or incomplete price snapshot (catalog, aliases and SHA-256 required)");if(!["network","cache","bundled","pinned"].includes(t.source)||t.generatedAt!==null&&typeof t.generatedAt!="string")throw Error("invalid price snapshot metadata");if(t.catalog.records.length>1e5||t.aliases.aliases.length>1e5||t.aliases.standards.length>1e5)throw Error("price snapshot exceeds the 100000-entry limit");let e=i=>{if(i.length>65536)throw Error("price identity exceeds the 65536-character limit")},n=new Set,r=new Set,s=new Set;for(let i of t.catalog.records){let o=aT(i);if(!o||n.has(o))throw Error("duplicate or missing price record id");n.add(o),e(o),e(i.source),e(i.source_model_id);for(let u of[i.source,i.source_model_id])if(typeof u!="string"||!u.trim())throw Error("invalid price record identity");let a=i;for(let u of[i.provider,i.mode,i.gateway_id,i.record_id,a.vendor_model_id,a.canonical_slug])if(u!=null&&typeof u!="string")throw Error("invalid price record metadata");for(let u of[i.pricing.input_per_1m_tokens,i.pricing.output_per_1m_tokens,i.pricing.input_cache_read_per_1m_tokens,i.pricing.input_cache_write_per_1m_tokens??null])if(!sT(u))throw Error("price rates must be finite nonnegative numbers or null");let l=i.pricing.source_cost_fields;if(l!=null&&(typeof l!="object"||Array.isArray(l)))throw Error("invalid source cost fields");for(let u of["cache_creation_input_token_cost","cache_creation_input_token_cost_above_1hr"])if(l?.[u]!==void 0&&!sT(l[u]))throw Error("source blend rates must be finite nonnegative numbers or null");let c=i.pricing.currency;if(c!=null&&c!=="USD")throw Error("price currency must be USD")}for(let i of t.aliases.standards){e(i.standard_slug),i.catalog_record_id!==null&&e(i.catalog_record_id);let o=i.standard_slug.toLowerCase();if(!o||r.has(o))throw Error("duplicate price standard");r.add(o)}for(let i of t.aliases.aliases){e(i.alias),i.standard_slug!==null&&e(i.standard_slug);let o=i.alias.toLowerCase();if(!o||s.has(o))throw Error("duplicate price alias");if(s.add(o),i.standard_slug!==null&&!r.has(i.standard_slug.toLowerCase()))throw Error("price alias references missing standard")}}function iT(t){let e=$F(t,rT.O_RDONLY|rT.O_NONBLOCK);try{let n=UF(e);if(!n.isFile()||n.size>qF)throw Error("price file must be a regular file within the 64 MiB size limit");let r=Buffer.alloc(n.size+1),s=0;for(;s<r.length;){let i=HF(e,r,s,r.length-s,null);if(i===0)break;s+=i}if(s!==n.size)throw Error("price file changed while reading; retry with a complete file");return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(r.subarray(0,s))}finally{jF(e)}}function XF(t,e=Fc(BF(t),"aliases.json")){let n=iT(t),r=iT(e),s;try{s=oT(n)}catch{s=null}if(!s||!("records"in Object(s))){let a=n.trim().split(/\r?\n/).filter(c=>c.trim()).map(c=>JSON.parse(c)),l=a[0]?.schema_version!==void 0&&a[0]?.pricing===void 0&&a[0]?.source_model_id===void 0?a.shift():{};s={schema_version:l.schema_version??1,generated_at:l.generated_at??"",records:a}}let i=oT(r),o={catalog:s,aliases:i,source:"pinned",generatedAt:s?.generated_at||null,sha256:WF("sha256").update(n).update(r).digest("hex")};return of(o),o}function sf(t){let e=t.pragma("busy_timeout",{simple:!0});try{return t.pragma("busy_timeout = 0"),t.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='price_snapshot'").get()?t.transaction(()=>{let n=t.prepare("SELECT * FROM price_snapshot").get();if(!n)return null;let r=t.prepare("SELECT * FROM price_record ORDER BY ordinal").all().map(o=>{if(typeof o.record_id!="string"||!o.record_id||o.currency!=="USD"||o.unit!=="per_1m_tokens")throw Error("invalid stored price identity, currency or unit");let a=JSON.parse(o.record_json);return{...a,record_id:o.record_id,pricing:{...a.pricing,input_per_1m_tokens:o.input_1m,output_per_1m_tokens:o.output_1m,input_cache_read_per_1m_tokens:o.cache_read_1m,input_cache_write_per_1m_tokens:o.cache_write_1m,source_cost_fields:JSON.parse(o.source_cost_fields??"{}")}}});if(r.length!==n.record_count)throw Error("incomplete stored price snapshot");let s=t.prepare("SELECT alias,standard_slug,evidence FROM price_alias ORDER BY alias").all(),i={catalog:{schema_version:1,generated_at:n.generated_at??"",records:r},aliases:{schema_version:1,standards:JSON.parse(n.standards_json),aliases:s},source:n.source,generatedAt:n.generated_at,sha256:n.sha256,fetchedAt:n.fetched_at,loadedAt:n.loaded_at,recordCount:n.record_count};return of(i),i})():null}finally{t.pragma("busy_timeout = "+e)}}function GF(t,e,n={}){of(e);let r=()=>t.prepare("SELECT sha256 FROM price_snapshot").get()?.sha256===e.sha256,s=t.pragma("busy_timeout",{simple:!0});try{return t.pragma("busy_timeout = 0"),r()?"unchanged":t.transaction(()=>{if(r())return"unchanged";t.exec("DELETE FROM price_alias; DELETE FROM price_record; DELETE FROM price_snapshot;");let i=t.prepare("INSERT INTO price_record(record_id,source,provider,source_model_id,vendor_model_id,canonical_slug,currency,unit,input_1m,output_1m,cache_read_1m,cache_write_1m,source_cost_fields,record_json,ordinal) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");e.catalog.records.forEach((c,u)=>{let d=c;i.run(aT(c),c.source,c.provider??null,c.source_model_id,d.vendor_model_id??null,d.canonical_slug??null,"USD","per_1m_tokens",c.pricing.input_per_1m_tokens,c.pricing.output_per_1m_tokens,c.pricing.input_cache_read_per_1m_tokens,c.pricing.input_cache_write_per_1m_tokens??null,JSON.stringify(c.pricing.source_cost_fields??{}),JSON.stringify(c),u)});let o=t.prepare("INSERT INTO price_alias(alias,standard_slug,evidence,catalog_record_id) VALUES(?,?,?,?)"),a=new Map(e.aliases.standards.map(c=>[c.standard_slug.toLowerCase(),c]));for(let c of e.aliases.aliases){let u=a.get(c.standard_slug?.toLowerCase()??"");o.run(c.alias.toLowerCase(),c.standard_slug,c.evidence,u?.catalog_record_id??null)}let l=new Date(n.now??Date.now()).toISOString();return t.prepare("INSERT INTO price_snapshot(sha256,generated_at,source,fetched_at,loaded_at,record_count,standards_json) VALUES(?,?,?,?,?,?,?)").run(e.sha256,e.generatedAt,e.source,l,l,e.catalog.records.length,JSON.stringify(e.aliases.standards)),"updated"}).immediate()}catch(i){if(/^SQLITE_(BUSY|LOCKED|READONLY)(_|$)/.test(String(i?.code)))return"deferred";throw i}finally{t.pragma("busy_timeout = "+s)}}async function JF(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=sf(t),i=rf.get(t),o=i&&i.hash===s?.sha256?i.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=o&&n-o<nc(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(XF(Fc(r.LMCTL_PRICE_DATA,"model_list.json"))):fs({cacheDir:r.LMCTL_HOME?Fc(r.LMCTL_HOME,"cache","lmprice"):r.HOME?Fc(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:nc(r)})),l,c;try{c=await(e.budgetMs===void 0?a():Promise.race([a(),new Promise(m=>{l=setTimeout(()=>m(null),e.budgetMs)})]))}finally{clearTimeout(l)}if(rf.set(t,{hash:s?.sha256??null,at:n}),!c?.catalog||!c.aliases||!c.sha256||c.refreshFailed&&(s||c.source!=="bundled"))return{status:"unavailable",snapshot:s};let u=GF(t,c,{now:n}),d=sf(t);return rf.set(t,{hash:d?.sha256??null,at:n}),{status:u,snapshot:d}}async function $c(t,e){try{return(await JF(t,{env:e,budgetMs:900})).snapshot??Ko}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return Ko;try{return sf(t)??Ko}catch{return Ko}}}async function af(t){if(t.dal)return $c(t.dal.db,t.env);let e;try{return e=ot({path:on(t),recover:!1}),await $c(e.db,t.env)}catch{return Ko}finally{try{e?.close()}catch{}}}var Ko,aT,sT,qF,oT,rf,lf=M(()=>{"use strict";gs();Yt();zn();Ko={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},aT=t=>t.record_id??t.source+":"+t.source_model_id,sT=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;qF=64*1024*1024;oT=t=>JSON.parse(t.replace(/^\uFEFF/,""));rf=new WeakMap});function Kn(t){try{return t?.usage}catch{return}}function Yo(t,e,n,r){let s,i,o,a=!1;try{o=ac(e),s=t.dal??ot({path:on(t),recover:!1}),i=s.insertDirectTurn(o,n,r)}catch{}return{async finish(l){if(!a){a=!0;try{s&&i!==void 0&&o&&s.finishDirectTurn(i,await jo(o,l,()=>$c(s.db,t.env),{db:s.db,env:t.env}))}catch{}finally{if(s&&s!==t.dal)try{s.close()}catch{}}}}}}function Qo(t,e,n){let r=t,s,i;s=Kn(r)??Kn(n);try{i=r?.sessionId??n?.sessionId}catch{i=n?.sessionId}return{status:li(G(t),e.aborted),usage:s,sessionId:i}}var cf=M(()=>{"use strict";Yt();zn();lf();Uo();mt()});function Ss(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var jc=M(()=>{"use strict"});import{randomUUID as VF}from"node:crypto";import{chmodSync as lT,mkdirSync as zF,readdirSync as KF,statSync as YF,unlinkSync as QF,writeFileSync as ZF}from"node:fs";import{homedir as e$,tmpdir as t$}from"node:os";import{join as Zo}from"node:path";function l$(t){return Ss(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function ea(t){return l$(t).replace(/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z0-9 ]*PRIVATE KEY-----|$)/g,"[REDACTED_PRIVATE_KEY]").replace(/\b((?:set-)?cookie\s*:[ \t]*)[^\r\n]+/gi,"$1[REDACTED]").replace(/\b([a-z][a-z0-9+.-]*:\/\/[^\s/:@]*):[^\s/@]+@/gi,"$1:[REDACTED]@").replace(/\bBearer\s+(?=[A-Za-z0-9._~+/-]{12,}\b)(?=[A-Za-z0-9._~+/-]*[0-9._~+/-])[A-Za-z0-9._~+/-]{12,}/gi,"Bearer [REDACTED]").replace(a$,"$1[REDACTED]").replace(/\b((?:[A-Z0-9]+_)*(?:KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIALS?)(?:_[A-Z0-9]+)*=)(?!\[REDACTED\])(?:"[^"]*"|'[^']*'|[^\s,;]+)/g,"$1[REDACTED]").replace(/([?&](?:key|sig|signature)=)[^&\s'"]+/gi,"$1[REDACTED]").replace(/\bsk-[A-Za-z0-9_-]{12,}\b/g,"[REDACTED_SECRET]").replace(/\b(?:gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|glpat-[A-Za-z0-9_-]{16,}|xox[abeprs]-[A-Za-z0-9-]{10,})/g,"[REDACTED_SECRET]").replace(/\bAIza[0-9A-Za-z_-]{20,}\b/g,"[REDACTED_SECRET]").replace(/\bAKIA[0-9A-Z]{16}\b/g,"[REDACTED_SECRET]").replace(/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,"[REDACTED_JWT]")}function c$(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?Zo(t$(),`lmctl-test-${process.pid}`,".lmctl"):Zo(process.env.HOME||e$(),".lmctl"));return Zo(t,"provider-errors")}function u$(t,e,n){if(t.length<=e)return t;let r=Math.floor(e*.2),s=e-r,i=t.length-e;return`${t.slice(0,r)}
2194
2194
  \u2026 ${i} characters of ${n} \u2026
2195
- ${t.slice(-s)}`}function c$(t,e){try{let n=VF(t).filter(s=>s$.test(s)).sort().map(s=>{let i=Zo(t,s);return{path:i,size:zF(i).size}}),r=n.reduce((s,i)=>s+i.size,0);for(let s=0;s<n.length&&(n.length-s>n$||r>r$);s++){let i=n[s];i.path!==e&&(KF(i.path),r-=i.size)}}catch{}}function u$(t,e){let n=a$(),r=Zo(n,`stderr-${Date.now()}-${process.pid}-${GF()}.log`);try{JF(n,{recursive:!0,mode:448}),lT(n,448);let s=`[${new Date().toISOString()}] provider=${e}
2196
- ${l$(t,t$,"provider output not saved")}
2197
- `;return YF(r,s,{encoding:"utf8",flag:"wx",mode:384}),lT(r,384),c$(n,r),{path:r,saved:!0}}catch{return{path:r,saved:!1}}}function d$(t){let e=new Map,n=new Map;t.forEach((i,o)=>{i.trim()!==""&&(e.set(i,(e.get(i)??0)+1),n.set(i,o))});let r=[],s=0;return t.forEach((i,o)=>{let a=e.get(i);if(a===void 0||a===1){r.push(i);return}n.get(i)===o&&(s+=a-1,r.push(`${i} (repeated ${a} times)`))}),{lines:r,duplicates:s}}function Yn(t){return Array.from(t)}function m$(t,e){let n=Yn(t),r=`\u2026[${n.length} characters clipped]\u2026`,s=Math.max(2,e-Yn(r).length),i=Math.max(1,Math.floor(s*.4)),o=Math.max(1,s-i),a=n.slice(0,i).join("").replace(/[\u200d\ufe0f\u0300-\u036f]+$/u,""),l=n.slice(-o).join("").replace(/^[\u200d\ufe0f\u0300-\u036f]+/u,""),c=n.length-Yn(a).length-Yn(l).length;return`${a}\u2026[${c} characters clipped]\u2026${l}`}function p$(t,e){let n=t.join(`
2198
- `);if(Yn(n).length<=e)return{text:n,omittedLines:0,truncatedLine:!1};let r=Math.max(24,Math.floor(e*.68)),s=[],i=0,o=!1;for(let d=t.length-1;d>=0;d--){let m=t[d],p=Yn(m).length+(s.length>0?1:0);if(i+p<=r){s.unshift({index:d,line:m}),i+=p;continue}s.length===0&&(s.unshift({index:d,line:m$(m,t.length===1?e:r)}),o=!0);break}let a=s[0]?.index??t.length,l=[],c="",u=d=>{let m=t.length-d.length-s.length,p=[...d];return m>0&&p.push(`\u2026 ${m} lines omitted \u2026`),p.push(...s.map(f=>f.line)),p.join(`
2199
- `)};for(let d=0;d<a;d++){let m=[...l,t[d]],p=u(m);if(Yn(p).length>e)break;l=m,c=p}return l.length===0&&(c=u(l)),Yn(c).length>e&&(c=Yn(c).slice(-e).join(""),o=!0),{text:c,omittedLines:Math.max(0,t.length-l.length-s.length),truncatedLine:o}}function Oe(t,e){let n=ea(t),r=e.fullOutput===void 0?n:ea(e.fullOutput),{lines:s,duplicates:i}=d$(n.trim().split(/\r\n|\r|\n/)),o=p$(s,Math.max(64,e.maxChars??e$)),a=[];if(o.omittedLines>0&&a.push(`${o.omittedLines} lines omitted from summary`),o.truncatedLine&&a.push("a long line was clipped"),i>0&&a.push(`${i} duplicate lines collapsed`),e.fullOutput!==void 0&&r.trim()!==n.trim()&&a.push("filtered provider output is retained in the full log"),a.length===0)return o.text;let l=u$(r,e.provider),c=l.saved?`full redacted output: ${l.path}`:`full redacted output could not be written; attempted path: ${l.path}`;return`${o.text}
2195
+ ${t.slice(-s)}`}function d$(t,e){try{let n=KF(t).filter(s=>o$.test(s)).sort().map(s=>{let i=Zo(t,s);return{path:i,size:YF(i).size}}),r=n.reduce((s,i)=>s+i.size,0);for(let s=0;s<n.length&&(n.length-s>s$||r>i$);s++){let i=n[s];i.path!==e&&(QF(i.path),r-=i.size)}}catch{}}function m$(t,e){let n=c$(),r=Zo(n,`stderr-${Date.now()}-${process.pid}-${VF()}.log`);try{zF(n,{recursive:!0,mode:448}),lT(n,448);let s=`[${new Date().toISOString()}] provider=${e}
2196
+ ${u$(t,r$,"provider output not saved")}
2197
+ `;return ZF(r,s,{encoding:"utf8",flag:"wx",mode:384}),lT(r,384),d$(n,r),{path:r,saved:!0}}catch{return{path:r,saved:!1}}}function p$(t){let e=new Map,n=new Map;t.forEach((i,o)=>{i.trim()!==""&&(e.set(i,(e.get(i)??0)+1),n.set(i,o))});let r=[],s=0;return t.forEach((i,o)=>{let a=e.get(i);if(a===void 0||a===1){r.push(i);return}n.get(i)===o&&(s+=a-1,r.push(`${i} (repeated ${a} times)`))}),{lines:r,duplicates:s}}function Yn(t){return Array.from(t)}function f$(t,e){let n=Yn(t),r=`\u2026[${n.length} characters clipped]\u2026`,s=Math.max(2,e-Yn(r).length),i=Math.max(1,Math.floor(s*.4)),o=Math.max(1,s-i),a=n.slice(0,i).join("").replace(/[\u200d\ufe0f\u0300-\u036f]+$/u,""),l=n.slice(-o).join("").replace(/^[\u200d\ufe0f\u0300-\u036f]+/u,""),c=n.length-Yn(a).length-Yn(l).length;return`${a}\u2026[${c} characters clipped]\u2026${l}`}function g$(t,e){let n=t.join(`
2198
+ `);if(Yn(n).length<=e)return{text:n,omittedLines:0,truncatedLine:!1};let r=Math.max(24,Math.floor(e*.68)),s=[],i=0,o=!1;for(let d=t.length-1;d>=0;d--){let m=t[d],p=Yn(m).length+(s.length>0?1:0);if(i+p<=r){s.unshift({index:d,line:m}),i+=p;continue}s.length===0&&(s.unshift({index:d,line:f$(m,t.length===1?e:r)}),o=!0);break}let a=s[0]?.index??t.length,l=[],c="",u=d=>{let m=t.length-d.length-s.length,p=[...d];return m>0&&p.push(`\u2026 ${m} lines omitted \u2026`),p.push(...s.map(f=>f.line)),p.join(`
2199
+ `)};for(let d=0;d<a;d++){let m=[...l,t[d]],p=u(m);if(Yn(p).length>e)break;l=m,c=p}return l.length===0&&(c=u(l)),Yn(c).length>e&&(c=Yn(c).slice(-e).join(""),o=!0),{text:c,omittedLines:Math.max(0,t.length-l.length-s.length),truncatedLine:o}}function Oe(t,e){let n=ea(t),r=e.fullOutput===void 0?n:ea(e.fullOutput),{lines:s,duplicates:i}=p$(n.trim().split(/\r\n|\r|\n/)),o=g$(s,Math.max(64,e.maxChars??n$)),a=[];if(o.omittedLines>0&&a.push(`${o.omittedLines} lines omitted from summary`),o.truncatedLine&&a.push("a long line was clipped"),i>0&&a.push(`${i} duplicate lines collapsed`),e.fullOutput!==void 0&&r.trim()!==n.trim()&&a.push("filtered provider output is retained in the full log"),a.length===0)return o.text;let l=m$(r,e.provider),c=l.saved?`full redacted output: ${l.path}`:`full redacted output could not be written; attempted path: ${l.path}`;return`${o.text}
2200
2200
 
2201
2201
  [provider stderr: ${a.join("; ")}; ${c}]`}function cT(t,e=500){let n=t.indexOf(`
2202
2202
 
@@ -2204,17 +2204,17 @@ ${l$(t,t$,"provider output not saved")}
2204
2204
  \u2026 ${s} characters of provider stderr dropped \u2026
2205
2205
  ${r}`}}}function Ei(t,e){return e===""?t:`${t}:${e.includes(`
2206
2206
  `)?`
2207
- `:" "}${e}`}var e$,t$,n$,r$,s$,i$,an=M(()=>{"use strict";jc();e$=500,t$=1e6,n$=50,r$=20*1024*1024,s$=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,i$=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as pT,appendFileSync as f$,mkdirSync as g$,existsSync as K6,readdirSync as Y6,unlinkSync as Q6}from"node:fs";import{join as Hc,dirname as h$}from"node:path";import{homedir as y$}from"node:os";function df(){return Hc(y$(),".lmctl")}function Le(){if(fT||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-mT>=_$&&(dT=E$(),mT=t),dT}function v$(){let t=new Date,e=t.getTimezoneOffset(),n=e<=0?"+":"-",r=String(Math.floor(Math.abs(e)/60)).padStart(2,"0"),s=String(Math.abs(e)%60).padStart(2,"0");return new Date(t.getTime()-e*6e4).toISOString().replace("Z",`${n}${r}:${s}`)}function uf(t,e="",n=new WeakSet){if(/(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|credential|token|secret)/i.test(e)&&typeof t=="string")return"[REDACTED]";if(typeof t=="string")return ea(t);if(Array.isArray(t))return t.map(r=>uf(r,"",n));if(t&&typeof t=="object"){if(n.has(t))return"[Circular]";n.add(t);let r={};for(let[s,i]of Object.entries(t))r[s]=uf(i,s,n);return n.delete(t),r}return t}function b$(t){return uf(t)}function ht(t,e){if(e?.verbose){if(!fT)return}else if(!e?.always&&!Le())return;try{w$();let n={ts:new Date().toISOString(),pid:process.pid,vti:process.env.LMCTL_VTI??null,autocode_run_id:process.env.LMCTL_AUTOCODE_RUN_ID??void 0,...b$(t)};f$(Uc,JSON.stringify(n)+`
2208
- `)}catch{}}function w$(){if(!Uc){let e=v$().slice(0,13).replace("T","-");Uc=Hc(df(),`debug-${e}.log`)}g$(h$(Uc),{recursive:!0})}function Bt(...t){ht({event:"legacy",msg:t.join(" ")})}function ze(...t){ht({event:"legacy",msg:t.join(" ")},{verbose:!0})}function X(t){ht(t,{always:!0})}function E$(){return T$()||S$()}function T$(){try{let t=pT(Hc(df(),"config.toml"),"utf-8");for(let e of t.split(`
2209
- `)){let n=e.trim();if(!n||n.startsWith("#"))continue;if(n.startsWith("["))break;let r=/^debug\s*=\s*(.+)$/.exec(n);if(r){let s=r[1].trim().toLowerCase().replace(/^["']|["']$/g,"");return s==="true"||s==="1"}}}catch{}return!1}function S$(){try{let t=pT(Hc(df(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var fT,dT,mT,_$,Uc,ke=M(()=>{"use strict";an();fT=!1,dT=!1,mT=0,_$=5e3;Uc=null});import{existsSync as yT,mkdirSync as k$,readFileSync as _T,writeFileSync as gT}from"node:fs";import{join as ta,resolve as R$}from"node:path";function vT(t){if(t==="allow")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=Object.entries(t);if(e.length===1&&e[0][0]==="*"&&e[0][1]==="allow")return!0}return!1}function mf(t,e,n={existsSync:yT,readFileSync:_T}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let i=R$(e,s.sessiondir??e);for(let o of I$(i)){let a=x$(o,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(vT(a.permission)||r.push(`[${s.alias}] ${o} sets a non-allow \`permission\`, which opencode merges over lmctl's YOLO (.opencode/opencode.json permission:"allow") \u2014 the member may hang on permission prompts. Set \`permission: "allow"\` in that file (or remove the key).`))}}return r}function I$(t){return[ta(t,".opencode","opencode.jsonc"),ta(t,"opencode.jsonc"),ta(t,"opencode.json")]}function x$(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse(A$(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function A$(t){let e="",n=!1,r="",s=!1;for(let i=0;i<t.length;i+=1){let o=t[i],a=t[i+1];if(n){e+=o,s?s=!1:o==="\\"?s=!0:o===r&&(n=!1,r="");continue}if(o==='"'||o==="'"){n=!0,r=o,e+=o;continue}if(o==="/"&&a==="/"){for(;i<t.length&&t[i]!==`
2210
- `;)i+=1;i<t.length&&(e+=t[i]);continue}if(o==="/"&&a==="*"){for(i+=2;i<t.length&&!(t[i]==="*"&&t[i+1]==="/");)i+=1;i+=1;continue}e+=o}return e.replace(/,\s*([}\]])/g,"$1")}function bT(t,e={}){let n=ta(t,".opencode"),r=ta(n,"opencode.json");if(!yT(r)){k$(n,{recursive:!0});let o=JSON.stringify({permission:"allow"},null,2);return gT(r,o+`
2207
+ `:" "}${e}`}var n$,r$,s$,i$,o$,a$,an=M(()=>{"use strict";jc();n$=500,r$=1e6,s$=50,i$=20*1024*1024,o$=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,a$=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as pT,appendFileSync as h$,mkdirSync as y$,existsSync as Q6,readdirSync as Z6,unlinkSync as e3}from"node:fs";import{join as Hc,dirname as _$}from"node:path";import{homedir as v$}from"node:os";function df(){return Hc(v$(),".lmctl")}function Le(){if(fT||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-mT>=b$&&(dT=S$(),mT=t),dT}function w$(){let t=new Date,e=t.getTimezoneOffset(),n=e<=0?"+":"-",r=String(Math.floor(Math.abs(e)/60)).padStart(2,"0"),s=String(Math.abs(e)%60).padStart(2,"0");return new Date(t.getTime()-e*6e4).toISOString().replace("Z",`${n}${r}:${s}`)}function uf(t,e="",n=new WeakSet){if(/(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|credential|token|secret)/i.test(e)&&typeof t=="string")return"[REDACTED]";if(typeof t=="string")return ea(t);if(Array.isArray(t))return t.map(r=>uf(r,"",n));if(t&&typeof t=="object"){if(n.has(t))return"[Circular]";n.add(t);let r={};for(let[s,i]of Object.entries(t))r[s]=uf(i,s,n);return n.delete(t),r}return t}function E$(t){return uf(t)}function ht(t,e){if(e?.verbose){if(!fT)return}else if(!e?.always&&!Le())return;try{T$();let n={ts:new Date().toISOString(),pid:process.pid,vti:process.env.LMCTL_VTI??null,autocode_run_id:process.env.LMCTL_AUTOCODE_RUN_ID??void 0,...E$(t)};h$(Uc,JSON.stringify(n)+`
2208
+ `)}catch{}}function T$(){if(!Uc){let e=w$().slice(0,13).replace("T","-");Uc=Hc(df(),`debug-${e}.log`)}y$(_$(Uc),{recursive:!0})}function Bt(...t){ht({event:"legacy",msg:t.join(" ")})}function ze(...t){ht({event:"legacy",msg:t.join(" ")},{verbose:!0})}function X(t){ht(t,{always:!0})}function S$(){return k$()||R$()}function k$(){try{let t=pT(Hc(df(),"config.toml"),"utf-8");for(let e of t.split(`
2209
+ `)){let n=e.trim();if(!n||n.startsWith("#"))continue;if(n.startsWith("["))break;let r=/^debug\s*=\s*(.+)$/.exec(n);if(r){let s=r[1].trim().toLowerCase().replace(/^["']|["']$/g,"");return s==="true"||s==="1"}}}catch{}return!1}function R$(){try{let t=pT(Hc(df(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var fT,dT,mT,b$,Uc,ke=M(()=>{"use strict";an();fT=!1,dT=!1,mT=0,b$=5e3;Uc=null});import{existsSync as yT,mkdirSync as I$,readFileSync as _T,writeFileSync as gT}from"node:fs";import{join as ta,resolve as x$}from"node:path";function vT(t){if(t==="allow")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=Object.entries(t);if(e.length===1&&e[0][0]==="*"&&e[0][1]==="allow")return!0}return!1}function mf(t,e,n={existsSync:yT,readFileSync:_T}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let i=x$(e,s.sessiondir??e);for(let o of A$(i)){let a=C$(o,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(vT(a.permission)||r.push(`[${s.alias}] ${o} sets a non-allow \`permission\`, which opencode merges over lmctl's YOLO (.opencode/opencode.json permission:"allow") \u2014 the member may hang on permission prompts. Set \`permission: "allow"\` in that file (or remove the key).`))}}return r}function A$(t){return[ta(t,".opencode","opencode.jsonc"),ta(t,"opencode.jsonc"),ta(t,"opencode.json")]}function C$(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse(N$(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function N$(t){let e="",n=!1,r="",s=!1;for(let i=0;i<t.length;i+=1){let o=t[i],a=t[i+1];if(n){e+=o,s?s=!1:o==="\\"?s=!0:o===r&&(n=!1,r="");continue}if(o==='"'||o==="'"){n=!0,r=o,e+=o;continue}if(o==="/"&&a==="/"){for(;i<t.length&&t[i]!==`
2210
+ `;)i+=1;i<t.length&&(e+=t[i]);continue}if(o==="/"&&a==="*"){for(i+=2;i<t.length&&!(t[i]==="*"&&t[i+1]==="/");)i+=1;i+=1;continue}e+=o}return e.replace(/,\s*([}\]])/g,"$1")}function bT(t,e={}){let n=ta(t,".opencode"),r=ta(n,"opencode.json");if(!yT(r)){I$(n,{recursive:!0});let o=JSON.stringify({permission:"allow"},null,2);return gT(r,o+`
2211
2211
  `,"utf-8"),!0}let s;try{s=JSON.parse(_T(r,"utf-8"))}catch{return console.log(hT.yellow(` .opencode/opencode.json at ${r} is malformed \u2014 skipping opencode config install.`)),!1}if(typeof s!="object"||s===null)return console.log(hT.yellow(` .opencode/opencode.json at ${r} is not an object \u2014 skipping opencode config install.`)),!1;let i=!1;return s.permission===void 0&&(s.permission="allow",i=!0),vT(s.permission)||X({event:"opencode_yolo_override",provider:"opencode",config_path:r,user_permission:s.permission,message:`opencode.json has a user-set 'permission' value other than 'allow' \u2014 lmctl's YOLO contract is NOT in effect; turns may hang waiting on permission prompts. Set permission: "allow" or remove the key to restore YOLO.`}),i&&gT(r,JSON.stringify(s,null,2)+`
2212
- `,"utf-8"),i}var hT,pf=M(()=>{"use strict";ke();hT={yellow:t=>t}});function ra(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new na(t,n,e)}var Lr,Ce,Me,Bc,na,Mr=M(()=>{"use strict";Lr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},Ce=class extends Lr{},Me=class extends Lr{constructor(n,r,s=null,i){super(n);this.exitCode=r;this.signal=s;this.stderr=i}},Bc=class extends Lr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},na=class extends Lr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import*as gf from"node:child_process";function N$(t){if(typeof gf.spawnSync=="function")try{gf.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function wT(t){return t.exitCode!==null||t.signalCode!==null}function ff(t,e){return wT(t)?Promise.resolve(!0):new Promise(n=>{let r=!1,s=()=>{r||(r=!0,clearTimeout(i),n(!0))},i=setTimeout(()=>{r||(r=!0,t.removeListener("exit",s),n(!1))},e);t.once("exit",s)})}async function ve(t,e={}){let n=Date.now(),r=e.stdinEnd!==!1,s=e.softDelayMs??5e3,i=e.killDelayMs??5e3,o=e.platform??process.platform,a=e.runTaskkill??N$;if(wT(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await ff(t,s))return{signal:"stdin",elapsedMs:Date.now()-n};if(o==="win32"&&typeof t.pid=="number")a(t.pid);else try{t.kill("SIGTERM")}catch{}if(await ff(t,i))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(o!=="win32")try{t.kill("SIGKILL")}catch{}return await ff(t,C$)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var C$,ks=M(()=>{"use strict";C$=1e3});async function qc(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(i=>{r=setTimeout(()=>i(hf),e),r.unref?.(),n!==void 0&&(s=()=>i(hf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function Sn(t,e){if(t===void 0){e.closeStdin();return}let n=!1,r=i=>{if(!n){n=!0;try{t.onRelease?.({elapsedMs:Date.now()-i.startedMs,held:i.held,reason:i.reason})}catch{}}e.closeStdin()},s=Date.now();D$(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function D$(t,e,n,r){let s=t.pollMs??O$,i=t.maxHoldMs??Wc,o=t.settleMs??L$,a=t.backgroundGraceMs??M$,l=!1,c=null,u=d=>r({startedMs:n,held:l,reason:d});for(;;){if(e.isAborted())return u("aborted");if(e.hasChildExited())return u("child-exited");let d=i-(Date.now()-n);if(d<=0)return u("max-hold");let m;try{m=await qc(t.hasOutstandingWork(),d,e.signal)}catch{return u("check-error")}if(m===hf)return u(e.isAborted()||e.signal?.aborted===!0?"aborted":"max-hold");if(m)c=null;else{if(!l&&e.wasBackgroundJobLaunched?.()===!0&&Date.now()-n<a){let g=a-(Date.now()-n);await new Promise(h=>setTimeout(h,Math.max(0,Math.min(s,P$,g))).unref?.());continue}if(!l||o<=0)return u("cleared");c===null&&(c=Date.now(),ze(`${e.label}: dispatched work cleared \u2014 settling ${o}ms before closing stdin`));let f=Math.max(c,e.lastEventAtMs());if(!e.isTurnInFlight()&&Date.now()-f>=o)return u("cleared")}if(l||(l=!0,t.onHold?.(),ze(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=i)return X({event:"transport_hold_open_max_wait",provider:e.label,elapsed_ms:Date.now()-n}),u("max-hold");let p=Math.max(0,Math.min(s,i-(Date.now()-n)));await new Promise(f=>setTimeout(f,p).unref?.())}}var O$,Wc,L$,M$,P$,hf,sa=M(()=>{"use strict";ke();O$=2e3,Wc=8*60*60*1e3,L$=5e3,M$=1e3,P$=50,hf=Symbol("check-timed-out")});function ET(t){Le()&&ht({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function Pr(t,e){let n=$$[t];if(n)return n[e]??n.yolo}function U$(t,e){if(e.length===0)return!0;for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let s=0;s<e.length;s++)if(t[n+s]!==e[s]){r=!1;break}if(r)return!0}return!1}function qe(t,e,n="yolo"){if(j$.has(t)){ET(`YOLO ${t} [mode=${n}]: ${t==="codex"?`JSON-RPC params (approvalPolicy=never, sandbox=${n==="plan"?"read-only":"danger-full-access"})`:t==="opencode"?".opencode/opencode.json (permission=allow)":t==="kimi"?`ACP session/set_config_option (configId=mode, value=${n==="plan"?"plan":"auto"})`:t==="dsh"?"DSH_PERMISSION_MODE=danger-full-access env var on the sidecar spawn \u2014 no argv flag":t==="hermes"?"HERMES_YOLO_MODE=1 shell gate + ACP session/set_mode (modeId=dont_ask) edit gate":t==="pi"?"no tool-permission prompts exist in pi by design \u2014 nothing to bypass":t==="muse"?"MSP approval mode plus fixed host sandbox/write/shell posture":t==="miniplayer"?"native tools always granted; no permission mode":"protocol/config (out-of-band)"} \u2014 no argv flag`);return}let r=n==="plan"?Pr(t,"plan"):F$[t];if(!r){let s=`unknown provider "${t}" \u2014 YOLO contract not configured. Add an entry to YOLO_FLAGS in src/providers/yolo-contract.ts before spawning this provider.`;throw X({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new Ce(s)}if(!U$(e,r)){let s=r.join(" "),i=`${t} spawn missing YOLO flag '${s}' \u2014 YOLO is mandatory for every provider; see src/providers/yolo-contract.ts. Got argv: [${e.map(o=>JSON.stringify(o)).join(", ")}]`;throw X({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:i}),new Ce(i)}ET(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var F$,$$,j$,kn=M(()=>{"use strict";Mr();ke();F$={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},$$={claude:{yolo:["--dangerously-skip-permissions"],plan:["--permission-mode","plan"]},qwen:{yolo:["--approval-mode","yolo"],plan:["--approval-mode","plan"]},gemini:{yolo:["-y"],plan:["--approval-mode","plan"]},copilot:{yolo:["--yolo"],plan:["--yolo"]},agy:{yolo:["--dangerously-skip-permissions"],plan:["--dangerously-skip-permissions"]},lmplayer:{yolo:["--dangerously-skip-permissions"],plan:["--dangerously-skip-permissions"]}};j$=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{existsSync as H$}from"node:fs";function TT(t){let e=t.CLAUDE_CODE_EXECPATH;if(e===void 0||e.length===0)return t;let n=process.platform!=="win32"&&e.toLowerCase().endsWith(".exe"),r=!n&&!H$(e);if(!n&&!r)return t;X({event:"claude_execpath_sanitized",reason:n?"wrong_platform_exe":"missing_file",value:e,platform:process.platform});let s={...t};return delete s.CLAUDE_CODE_EXECPATH,s}function Ti(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function W$(t,e){return e===void 0||e.length===0?t:{...t??process.env,[yf]:e}}function Ue(t,e,n,r="chat"){return{...W$(Ti(t,e),n),[B$]:r}}var yf,B$,ln=M(()=>{"use strict";ke();yf="LMCTL_SELF_SESSIONID",B$="LMCTL_LAUNCH_SOURCE"});function Xc(t){let e=[...t.matchAll(q$)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return ST(t.slice(r).trimStart())}return ST(z$(t.replace(X$,"")))}function z$(t){let e=G$.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(J$)];if(r.length<2)return t;let s=r[0],i=(s.index??0)+s[0].length;return n.slice(i).trimStart()}function ST(t){let e=[...t.matchAll(V$)];if(e.length===0)return t;let n=e[e.length-1],r=(n.index??0)+n[0].length;return t.slice(r).trimStart()}function Qn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function RT(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function Gc(t={}){let e="",n="",r="",s=!1,i=!1,o=!1,a=t.isolateResult??(t.tool==="gemini"?Xc:void 0),l=()=>({result:a?a(n):n,sessionId:e,stopReason:r,sawActivity:o});return{setSessionId(c){e=c},beginTurn(){n="",r="",s=!1,i=!0,o=!1},completeTurn(c){return r=RT(c),s=!0,i=!1,l()},cancelTurn(){n="",r="",i=!1},processMessage(c){if(c.method!=="session/update")return!1;let d=c.params?.update,m=d?.sessionUpdate;if(typeof m!="string"||(i&&K$.has(m)&&(o=!0),m!=="agent_message_chunk"))return!1;let p=d?.content,f=typeof p?.text=="string"?p.text:"";return f&&i&&(n+=f,t.onDelta?.(f)),!0},finalize(){return s?l():null}}}var kT,q$,X$,G$,J$,V$,K$,ia=M(()=>{"use strict";kT="(?:png|jpe?g|webp|heic|pdf)",q$=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${kT}\\s*`,"gi"),X$=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${kT}\\s*`,"i"),G$=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,J$=/^STANCE:\s+\S+\s*$/gim,V$=/\[Thought:\s*true\]\s*/gi;K$=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});import{createInterface as Y$}from"node:readline";function Dr(t,e){let n=e.protocol??"acp",r=Y$({input:t.stdout}),s=new Map,i=(a,l={},c)=>new Promise((u,d)=>{let m=Q$++;s.set(m,{resolve:u,reject:d,onResponse:c});let p=JSON.stringify({jsonrpc:"2.0",id:m,method:a,params:l});ht({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:m,params:l}),t.stdin?.write(`${p}
2212
+ `,"utf-8"),i}var hT,pf=M(()=>{"use strict";ke();hT={yellow:t=>t}});function ra(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new na(t,n,e)}var Lr,Ce,Me,Bc,na,Mr=M(()=>{"use strict";Lr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},Ce=class extends Lr{},Me=class extends Lr{constructor(n,r,s=null,i){super(n);this.exitCode=r;this.signal=s;this.stderr=i}},Bc=class extends Lr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},na=class extends Lr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import*as gf from"node:child_process";function L$(t){if(typeof gf.spawnSync=="function")try{gf.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function wT(t){return t.exitCode!==null||t.signalCode!==null}function ff(t,e){return wT(t)?Promise.resolve(!0):new Promise(n=>{let r=!1,s=()=>{r||(r=!0,clearTimeout(i),n(!0))},i=setTimeout(()=>{r||(r=!0,t.removeListener("exit",s),n(!1))},e);t.once("exit",s)})}async function ve(t,e={}){let n=Date.now(),r=e.stdinEnd!==!1,s=e.softDelayMs??5e3,i=e.killDelayMs??5e3,o=e.platform??process.platform,a=e.runTaskkill??L$;if(wT(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await ff(t,s))return{signal:"stdin",elapsedMs:Date.now()-n};if(o==="win32"&&typeof t.pid=="number")a(t.pid);else try{t.kill("SIGTERM")}catch{}if(await ff(t,i))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(o!=="win32")try{t.kill("SIGKILL")}catch{}return await ff(t,O$)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var O$,ks=M(()=>{"use strict";O$=1e3});async function qc(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(i=>{r=setTimeout(()=>i(hf),e),r.unref?.(),n!==void 0&&(s=()=>i(hf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function Sn(t,e){if(t===void 0){e.closeStdin();return}let n=!1,r=i=>{if(!n){n=!0;try{t.onRelease?.({elapsedMs:Date.now()-i.startedMs,held:i.held,reason:i.reason})}catch{}}e.closeStdin()},s=Date.now();$$(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function $$(t,e,n,r){let s=t.pollMs??M$,i=t.maxHoldMs??Wc,o=t.settleMs??P$,a=t.backgroundGraceMs??D$,l=!1,c=null,u=d=>r({startedMs:n,held:l,reason:d});for(;;){if(e.isAborted())return u("aborted");if(e.hasChildExited())return u("child-exited");let d=i-(Date.now()-n);if(d<=0)return u("max-hold");let m;try{m=await qc(t.hasOutstandingWork(),d,e.signal)}catch{return u("check-error")}if(m===hf)return u(e.isAborted()||e.signal?.aborted===!0?"aborted":"max-hold");if(m)c=null;else{if(!l&&e.wasBackgroundJobLaunched?.()===!0&&Date.now()-n<a){let g=a-(Date.now()-n);await new Promise(h=>setTimeout(h,Math.max(0,Math.min(s,F$,g))).unref?.());continue}if(!l||o<=0)return u("cleared");c===null&&(c=Date.now(),ze(`${e.label}: dispatched work cleared \u2014 settling ${o}ms before closing stdin`));let f=Math.max(c,e.lastEventAtMs());if(!e.isTurnInFlight()&&Date.now()-f>=o)return u("cleared")}if(l||(l=!0,t.onHold?.(),ze(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=i)return X({event:"transport_hold_open_max_wait",provider:e.label,elapsed_ms:Date.now()-n}),u("max-hold");let p=Math.max(0,Math.min(s,i-(Date.now()-n)));await new Promise(f=>setTimeout(f,p).unref?.())}}var M$,Wc,P$,D$,F$,hf,sa=M(()=>{"use strict";ke();M$=2e3,Wc=8*60*60*1e3,P$=5e3,D$=1e3,F$=50,hf=Symbol("check-timed-out")});function ET(t){Le()&&ht({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function Pr(t,e){let n=U$[t];if(n)return n[e]??n.yolo}function B$(t,e){if(e.length===0)return!0;for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let s=0;s<e.length;s++)if(t[n+s]!==e[s]){r=!1;break}if(r)return!0}return!1}function qe(t,e,n="yolo"){if(H$.has(t)){ET(`YOLO ${t} [mode=${n}]: ${t==="codex"?`JSON-RPC params (approvalPolicy=never, sandbox=${n==="plan"?"read-only":"danger-full-access"})`:t==="opencode"?".opencode/opencode.json (permission=allow)":t==="kimi"?`ACP session/set_config_option (configId=mode, value=${n==="plan"?"plan":"auto"})`:t==="dsh"?"DSH_PERMISSION_MODE=danger-full-access env var on the sidecar spawn \u2014 no argv flag":t==="hermes"?"HERMES_YOLO_MODE=1 shell gate + ACP session/set_mode (modeId=dont_ask) edit gate":t==="pi"?"no tool-permission prompts exist in pi by design \u2014 nothing to bypass":t==="muse"?"MSP approval mode plus fixed host sandbox/write/shell posture":t==="miniplayer"?"native tools always granted; no permission mode":"protocol/config (out-of-band)"} \u2014 no argv flag`);return}let r=n==="plan"?Pr(t,"plan"):j$[t];if(!r){let s=`unknown provider "${t}" \u2014 YOLO contract not configured. Add an entry to YOLO_FLAGS in src/providers/yolo-contract.ts before spawning this provider.`;throw X({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new Ce(s)}if(!B$(e,r)){let s=r.join(" "),i=`${t} spawn missing YOLO flag '${s}' \u2014 YOLO is mandatory for every provider; see src/providers/yolo-contract.ts. Got argv: [${e.map(o=>JSON.stringify(o)).join(", ")}]`;throw X({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:i}),new Ce(i)}ET(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var j$,U$,H$,kn=M(()=>{"use strict";Mr();ke();j$={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},U$={claude:{yolo:["--dangerously-skip-permissions"],plan:["--permission-mode","plan"]},qwen:{yolo:["--approval-mode","yolo"],plan:["--approval-mode","plan"]},gemini:{yolo:["-y"],plan:["--approval-mode","plan"]},copilot:{yolo:["--yolo"],plan:["--yolo"]},agy:{yolo:["--dangerously-skip-permissions"],plan:["--dangerously-skip-permissions"]},lmplayer:{yolo:["--dangerously-skip-permissions"],plan:["--dangerously-skip-permissions"]}};H$=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{existsSync as W$}from"node:fs";function TT(t){let e=t.CLAUDE_CODE_EXECPATH;if(e===void 0||e.length===0)return t;let n=process.platform!=="win32"&&e.toLowerCase().endsWith(".exe"),r=!n&&!W$(e);if(!n&&!r)return t;X({event:"claude_execpath_sanitized",reason:n?"wrong_platform_exe":"missing_file",value:e,platform:process.platform});let s={...t};return delete s.CLAUDE_CODE_EXECPATH,s}function Ti(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function X$(t,e){return e===void 0||e.length===0?t:{...t??process.env,[yf]:e}}function Ue(t,e,n,r="chat"){return{...X$(Ti(t,e),n),[q$]:r}}var yf,q$,ln=M(()=>{"use strict";ke();yf="LMCTL_SELF_SESSIONID",q$="LMCTL_LAUNCH_SOURCE"});function Xc(t){let e=[...t.matchAll(G$)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return ST(t.slice(r).trimStart())}return ST(Y$(t.replace(J$,"")))}function Y$(t){let e=V$.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(z$)];if(r.length<2)return t;let s=r[0],i=(s.index??0)+s[0].length;return n.slice(i).trimStart()}function ST(t){let e=[...t.matchAll(K$)];if(e.length===0)return t;let n=e[e.length-1],r=(n.index??0)+n[0].length;return t.slice(r).trimStart()}function Qn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function RT(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function Gc(t={}){let e="",n="",r="",s=!1,i=!1,o=!1,a=t.isolateResult??(t.tool==="gemini"?Xc:void 0),l=()=>({result:a?a(n):n,sessionId:e,stopReason:r,sawActivity:o});return{setSessionId(c){e=c},beginTurn(){n="",r="",s=!1,i=!0,o=!1},completeTurn(c){return r=RT(c),s=!0,i=!1,l()},cancelTurn(){n="",r="",i=!1},processMessage(c){if(c.method!=="session/update")return!1;let d=c.params?.update,m=d?.sessionUpdate;if(typeof m!="string"||(i&&Q$.has(m)&&(o=!0),m!=="agent_message_chunk"))return!1;let p=d?.content,f=typeof p?.text=="string"?p.text:"";return f&&i&&(n+=f,t.onDelta?.(f)),!0},finalize(){return s?l():null}}}var kT,G$,J$,V$,z$,K$,Q$,ia=M(()=>{"use strict";kT="(?:png|jpe?g|webp|heic|pdf)",G$=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${kT}\\s*`,"gi"),J$=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${kT}\\s*`,"i"),V$=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,z$=/^STANCE:\s+\S+\s*$/gim,K$=/\[Thought:\s*true\]\s*/gi;Q$=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});import{createInterface as Z$}from"node:readline";function Dr(t,e){let n=e.protocol??"acp",r=Z$({input:t.stdout}),s=new Map,i=(a,l={},c)=>new Promise((u,d)=>{let m=ej++;s.set(m,{resolve:u,reject:d,onResponse:c});let p=JSON.stringify({jsonrpc:"2.0",id:m,method:a,params:l});ht({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:m,params:l}),t.stdin?.write(`${p}
2213
2213
  `)}),o=(a,l={})=>{t.stdin?.write(`${JSON.stringify({jsonrpc:"2.0",method:a,params:l})}
2214
2214
  `)};return r.on("line",a=>{let l=d=>{if(!e.onProtocolError)return;let m=a.slice(0,512);X({event:`${n}_protocol_error`,provider:e.provider,reason:d,raw_preview:m,truncated:a.length>512}),e.onProtocolError(new Error(`${n.toUpperCase()} ${d}: ${JSON.stringify(m)}${a.length>512?" (truncated)":""}`))},c;try{c=JSON.parse(a)}catch{l("returned malformed JSON");return}if(!c||typeof c!="object"||Array.isArray(c)){l("returned an invalid message");return}if(ht({event:`${n}_recv`,direction:"RECV",provider:e.provider,id:typeof c.id=="number"?c.id:void 0,method:typeof c.method=="string"?c.method:void 0,preview:JSON.stringify(c).slice(0,300)}),e.onEvent?.(c),typeof c.method!="string"&&typeof c.id=="number"&&s.has(c.id)){let d=s.get(c.id);s.delete(c.id);try{d.onResponse?.(c)}catch(m){d.reject(m instanceof Error?m:new Error(String(m)));return}if(c.error){let m=c.error,p=typeof m?.message=="string"&&m.message.length>0?m.message:JSON.stringify(c.error);d.reject(ra(`${n.toUpperCase()} RPC error: ${p}`,m))}else d.resolve(c);return}let u=c.method;if(!u){l("returned an uncorrelated response");return}if(typeof c.id=="number"||typeof c.id=="string"){X({event:`${n}_unhandled_request`,provider:e.provider,method:u,id:c.id,params:c.params});let d=JSON.stringify({jsonrpc:"2.0",id:c.id,error:{code:-32601,message:`Method not found: ${u} (lmctl does not implement server-side ${n.toUpperCase()} methods)`}});ht({event:`${n}_send`,direction:"SEND",provider:e.provider,replyTo:c.id,error:"method not found"}),t.stdin?.write(`${d}
2215
- `);return}e.onNotification?.(c)}),{sendRpc:i,sendNotification:o,close(a=new Ce(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var Q$,_f=M(()=>{"use strict";ke();Mr();Q$=1});var vf=M(()=>{"use strict";_f()});var Jc,IT=M(()=>{"use strict";Jc={name:"miniplayer",binary:"miniplayer",baseArgs:["acp"],argv:t=>{if(t.permissionMode==="plan")throw new Error("miniplayer has no plan mode; its native tools always have full permissions");return["acp",...t.model?["-m",t.model]:[]]}}});import{readFileSync as Z$,readdirSync as xT}from"node:fs";import{join as Vc}from"node:path";function AT(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Vc(ae,".gemini"),r=Vc(n,"tmp"),s;try{s=xT(r)}catch{throw new Error(`gemini bundle: cannot read the gemini session store at ${r} \u2014 cannot verify session "${t}"`)}let i=`"sessionId": "${t}"`,o=`"sessionId":"${t}"`;for(let a of s){let l=Vc(r,a,"chats"),c;try{c=xT(l)}catch{continue}for(let u of c){if(!u.endsWith(".json"))continue;let d;try{d=Z$(Vc(l,u),"utf8").slice(0,8192)}catch{continue}if(d.includes(i)||d.includes(o))return}}throw new Error(`gemini bundle: no session "${t}" in the gemini chats store (${r}) \u2014 the session must exist on disk before a bundle can resume it`)}var oa,CT=M(()=>{"use strict";ia();We();kn();oa={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...oa.baseArgs];if(t.permissionMode==="plan"){let n=Pr("gemini","plan"),r=Pr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Xc,sessionIdentity:{verifyLoadedSession:t=>{AT(t.requestedSessionId,t.env)},recheckSession:t=>{AT(t.requestedSessionId,t.env)}}}});import{existsSync as ej,readFileSync as tj}from"node:fs";import{join as bf}from"node:path";function NT(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??bf(ae,".copilot"),r=bf(n,"session-state",t),s=bf(r,"workspace.yaml");if(!ej(s))throw new Error(`copilot bundle: no session "${t}" in the copilot session store (${r}) \u2014 the session must exist on disk before a bundle can resume it`);let i;try{i=tj(s,"utf8").slice(0,4096)}catch(a){throw new Error(`copilot bundle: cannot read ${s} \u2014 cannot verify session "${t}": `+(a instanceof Error?a.message:String(a)))}let o=/^id:\s*(\S+)\s*$/m.exec(i);if(o===null||o[1]!==t)throw new Error(`copilot bundle: session store entry ${s} belongs to ${o?.[1]??"no recorded id"}, not "${t}"`)}var aa,OT=M(()=>{"use strict";ke();We();aa={name:"copilot",binary:"copilot",baseArgs:["--acp","--yolo"],argv(t){return t.permissionMode==="plan"&&(process.stderr.write(`[acp] copilot has no plan-mode flag in --acp mode; --permission-mode plan is not honored (running yolo). See src/providers/yolo-contract.ts.
2215
+ `);return}e.onNotification?.(c)}),{sendRpc:i,sendNotification:o,close(a=new Ce(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var ej,_f=M(()=>{"use strict";ke();Mr();ej=1});var vf=M(()=>{"use strict";_f()});var Jc,IT=M(()=>{"use strict";Jc={name:"miniplayer",binary:"miniplayer",baseArgs:["acp"],argv:t=>{if(t.permissionMode==="plan")throw new Error("miniplayer has no plan mode; its native tools always have full permissions");return["acp",...t.model?["-m",t.model]:[]]}}});import{readFileSync as tj,readdirSync as xT}from"node:fs";import{join as Vc}from"node:path";function AT(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Vc(ae,".gemini"),r=Vc(n,"tmp"),s;try{s=xT(r)}catch{throw new Error(`gemini bundle: cannot read the gemini session store at ${r} \u2014 cannot verify session "${t}"`)}let i=`"sessionId": "${t}"`,o=`"sessionId":"${t}"`;for(let a of s){let l=Vc(r,a,"chats"),c;try{c=xT(l)}catch{continue}for(let u of c){if(!u.endsWith(".json"))continue;let d;try{d=tj(Vc(l,u),"utf8").slice(0,8192)}catch{continue}if(d.includes(i)||d.includes(o))return}}throw new Error(`gemini bundle: no session "${t}" in the gemini chats store (${r}) \u2014 the session must exist on disk before a bundle can resume it`)}var oa,CT=M(()=>{"use strict";ia();We();kn();oa={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...oa.baseArgs];if(t.permissionMode==="plan"){let n=Pr("gemini","plan"),r=Pr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Xc,sessionIdentity:{verifyLoadedSession:t=>{AT(t.requestedSessionId,t.env)},recheckSession:t=>{AT(t.requestedSessionId,t.env)}}}});import{existsSync as nj,readFileSync as rj}from"node:fs";import{join as bf}from"node:path";function NT(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??bf(ae,".copilot"),r=bf(n,"session-state",t),s=bf(r,"workspace.yaml");if(!nj(s))throw new Error(`copilot bundle: no session "${t}" in the copilot session store (${r}) \u2014 the session must exist on disk before a bundle can resume it`);let i;try{i=rj(s,"utf8").slice(0,4096)}catch(a){throw new Error(`copilot bundle: cannot read ${s} \u2014 cannot verify session "${t}": `+(a instanceof Error?a.message:String(a)))}let o=/^id:\s*(\S+)\s*$/m.exec(i);if(o===null||o[1]!==t)throw new Error(`copilot bundle: session store entry ${s} belongs to ${o?.[1]??"no recorded id"}, not "${t}"`)}var aa,OT=M(()=>{"use strict";ke();We();aa={name:"copilot",binary:"copilot",baseArgs:["--acp","--yolo"],argv(t){return t.permissionMode==="plan"&&(process.stderr.write(`[acp] copilot has no plan-mode flag in --acp mode; --permission-mode plan is not honored (running yolo). See src/providers/yolo-contract.ts.
2216
2216
  `),X({event:"acp_plan_mode_unsupported",provider:"copilot",requested_mode:"plan",effective_mode:"yolo"})),t.model&&(process.stderr.write(`[acp] copilot does not support per-session model selection in --acp mode (model="${t.model}" ignored). Set the default via copilot's /model slash command in an interactive \`lmctl terminal\` session.
2217
- `),X({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...aa.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{NT(t.requestedSessionId,t.env)},recheckSession:t=>{NT(t.requestedSessionId,t.env)}}}});import{existsSync as Ef,readdirSync as nj,statSync as LT}from"node:fs";import{join as Fr}from"node:path";import{createRequire as rj}from"node:module";function Tf(){return wf===null&&(wf=rj(import.meta.url)("node:sqlite").DatabaseSync),wf}function MT(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function PT(t,e){if(!e)return;t.observed=!0;let n=e.input??0,r=e.output??0,s=e.reasoning??0,i=e.cache?.read??0,o=e.cache?.write??0;if(t.totalInputTokens+=n,t.totalCachedInputTokens+=i,t.totalCacheWriteInputTokens+=o,t.totalOutputTokens+=r,t.totalReasoningOutputTokens+=s,n+r+s+i+o>0){let a=n+i+o;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:n,cachedInputTokens:i,cacheWriteInputTokens:o,outputTokens:r,reasoningOutputTokens:s,totalTokens:a+r+s}}}function DT(t){return t.observed?{totalInputTokens:t.totalInputTokens,totalCachedInputTokens:t.totalCachedInputTokens,totalCacheWriteInputTokens:t.totalCacheWriteInputTokens,totalOutputTokens:t.totalOutputTokens,totalReasoningOutputTokens:t.totalReasoningOutputTokens,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}:{}}function FT(){let t=process.env.XDG_DATA_HOME||Fr(ae,".local","share"),e=process.env.XDG_CONFIG_HOME||Fr(ae,".config");return[Fr(t,"opencode","opencode.db"),Fr(e,"opencode","opencode.db")]}function sj(){return Sf(process.env,ae)}function Sf(t,e){if(t.OPENCODE_DB)return[t.OPENCODE_DB];let n=t.XDG_DATA_HOME||Fr(e,".local","share"),r=Fr(n,"lmplayer"),s=Fr(r,"opencode-local.db"),i=[s];try{let o=nj(r).filter(a=>/^opencode.*\.db$/u.test(a)).map(a=>Fr(r,a)).filter(a=>a!==s).sort((a,l)=>{try{return LT(l).mtimeMs-LT(a).mtimeMs}catch{return 0}});i.push(...o)}catch{}return i}function ij(t){return t==="lmplayer"?sj():FT()}function kf(t,e){let n=e?.dbPath!==void 0?[e.dbPath]:FT();for(let r of n){if(!Ef(r))continue;let s=new(Tf())(r,{open:!0,readOnly:!0});try{s.exec("PRAGMA busy_timeout = 5000");let i=s.prepare("SELECT directory FROM session WHERE id = ?").get(t);if(i!==void 0)return{directory:typeof i.directory=="string"?i.directory:""}}finally{s.close()}}return null}var wf,Si,la=M(()=>{"use strict";We();ke();wf=null;Si=class{name;startCommand;dbPaths;busyTimeoutMs;constructor(e){this.name=e?.providerName??"opencode",this.startCommand=e?.startCommand??this.name,this.busyTimeoutMs=e?.busyTimeoutMs??5e3,e?.dbPaths?this.dbPaths=[...e.dbPaths]:e?.dbPath?this.dbPaths=[e.dbPath]:this.dbPaths=ij(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>Ef(e))}openDb(e){if(!Ef(e))return null;let n=new(Tf())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),n}async discoverSessions(){let e=[];for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=new Map,i=r.prepare("SELECT id, worktree, name FROM project").all();for(let a of i)s.set(a.id,a);let o=r.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
2217
+ `),X({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...aa.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{NT(t.requestedSessionId,t.env)},recheckSession:t=>{NT(t.requestedSessionId,t.env)}}}});import{existsSync as Ef,readdirSync as sj,statSync as LT}from"node:fs";import{join as Fr}from"node:path";import{createRequire as ij}from"node:module";function Tf(){return wf===null&&(wf=ij(import.meta.url)("node:sqlite").DatabaseSync),wf}function MT(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function PT(t,e){if(!e)return;t.observed=!0;let n=e.input??0,r=e.output??0,s=e.reasoning??0,i=e.cache?.read??0,o=e.cache?.write??0;if(t.totalInputTokens+=n,t.totalCachedInputTokens+=i,t.totalCacheWriteInputTokens+=o,t.totalOutputTokens+=r,t.totalReasoningOutputTokens+=s,n+r+s+i+o>0){let a=n+i+o;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:n,cachedInputTokens:i,cacheWriteInputTokens:o,outputTokens:r,reasoningOutputTokens:s,totalTokens:a+r+s}}}function DT(t){return t.observed?{totalInputTokens:t.totalInputTokens,totalCachedInputTokens:t.totalCachedInputTokens,totalCacheWriteInputTokens:t.totalCacheWriteInputTokens,totalOutputTokens:t.totalOutputTokens,totalReasoningOutputTokens:t.totalReasoningOutputTokens,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}:{}}function FT(){let t=process.env.XDG_DATA_HOME||Fr(ae,".local","share"),e=process.env.XDG_CONFIG_HOME||Fr(ae,".config");return[Fr(t,"opencode","opencode.db"),Fr(e,"opencode","opencode.db")]}function oj(){return Sf(process.env,ae)}function Sf(t,e){if(t.OPENCODE_DB)return[t.OPENCODE_DB];let n=t.XDG_DATA_HOME||Fr(e,".local","share"),r=Fr(n,"lmplayer"),s=Fr(r,"opencode-local.db"),i=[s];try{let o=sj(r).filter(a=>/^opencode.*\.db$/u.test(a)).map(a=>Fr(r,a)).filter(a=>a!==s).sort((a,l)=>{try{return LT(l).mtimeMs-LT(a).mtimeMs}catch{return 0}});i.push(...o)}catch{}return i}function aj(t){return t==="lmplayer"?oj():FT()}function kf(t,e){let n=e?.dbPath!==void 0?[e.dbPath]:FT();for(let r of n){if(!Ef(r))continue;let s=new(Tf())(r,{open:!0,readOnly:!0});try{s.exec("PRAGMA busy_timeout = 5000");let i=s.prepare("SELECT directory FROM session WHERE id = ?").get(t);if(i!==void 0)return{directory:typeof i.directory=="string"?i.directory:""}}finally{s.close()}}return null}var wf,Si,la=M(()=>{"use strict";We();ke();wf=null;Si=class{name;startCommand;dbPaths;busyTimeoutMs;constructor(e){this.name=e?.providerName??"opencode",this.startCommand=e?.startCommand??this.name,this.busyTimeoutMs=e?.busyTimeoutMs??5e3,e?.dbPaths?this.dbPaths=[...e.dbPaths]:e?.dbPath?this.dbPaths=[e.dbPath]:this.dbPaths=aj(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>Ef(e))}openDb(e){if(!Ef(e))return null;let n=new(Tf())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),n}async discoverSessions(){let e=[];for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=new Map,i=r.prepare("SELECT id, worktree, name FROM project").all();for(let a of i)s.set(a.id,a);let o=r.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
2218
2218
  s.time_created, s.time_updated
2219
2219
  FROM session s
2220
2220
  ORDER BY s.time_updated DESC`).all();for(let a of o){let l=s.get(a.project_id),c=a.directory||l?.worktree||"(unknown)",u=r.prepare(`SELECT m.id, m.data, m.time_created FROM message m
@@ -2228,95 +2228,95 @@ ${r}`}}}function Ei(t,e){return e===""?t:`${t}:${e.includes(`
2228
2228
  WHERE s.id LIKE ?
2229
2229
  ORDER BY s.time_updated DESC
2230
2230
  LIMIT 2`).all(`${n}%`);return s.length!==1?null:s[0]}}});function ca(t){return{id:t.id,onFailure:"non-fatal",applies:e=>t.value(e)!==void 0,run:async e=>{await e.sendRpc("session/set_config_option",{sessionId:e.sessionId,configId:t.configId,value:t.value(e)})},describeFailure:(e,n)=>{let r=t.value(e),s=n instanceof Error?n.message:String(n);return{event:"acp_config_option_failed",fields:{config_id:t.configId,value:r,error_message:s},stderrLine:`[acp] set_config_option(${t.configId}=${r}) failed: ${s}
2231
- `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var Rf=M(()=>{"use strict"});import{spawn as oj}from"node:child_process";import{resolve as $T}from"node:path";function zc(t){let e;try{e=oj(t.binaryPath??Rs.binary,[...Rs.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ue(t.env,t.cwd,void 0,"unknown")})}catch(s){return Promise.resolve({status:"unavailable",reason:"spawn",error:s instanceof Error?s.message:String(s)})}let n=Dr(e,{provider:"opencode"}),r=t.timeoutMs??5e3;return new Promise(s=>{let i=!1,o=(u,d=!0)=>{if(!i){if(i=!0,clearTimeout(c),e.removeListener("error",a),e.removeListener("exit",l),n.close(),!d){s(u);return}ve(e,{softDelayMs:100,killDelayMs:100}).finally(()=>s(u))}},a=u=>{o({status:"unavailable",reason:"spawn",error:u.message},!1)},l=(u,d)=>{o({status:"unavailable",reason:"handshake",error:`opencode ACP exited before verification (code=${String(u)}, signal=${String(d)})`},!1)};e.once("error",a),e.once("exit",l);let c=setTimeout(()=>{o({status:"unavailable",reason:"timeout"})},r);(async()=>{try{await n.sendRpc("initialize",{protocolVersion:1,clientInfo:{name:"lmctl",version:"0.1.0"},clientCapabilities:{}}),n.sendNotification("notifications/initialized");let u=await n.sendRpc("session/new",{cwd:t.cwd,mcpServers:[]}),d=Qn(u);try{await n.sendRpc("session/set_config_option",{sessionId:d,configId:"model",value:t.model})}catch(m){o({status:"rejected",option:"model",value:t.model,error:m instanceof Error?m.message:String(m)});return}if(t.effort!==void 0)try{await n.sendRpc("session/set_config_option",{sessionId:d,configId:"effort",value:t.effort})}catch(m){o({status:"rejected",option:"effort",value:t.effort,error:m instanceof Error?m.message:String(m)});return}o({status:"verified"})}catch(u){o({status:"unavailable",reason:"handshake",error:u instanceof Error?u.message:String(u)})}})()})}var Rs,If=M(()=>{"use strict";ke();pf();la();ia();ln();ks();vf();Rf();Rs={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...Rs.baseArgs],preSpawn(t){try{bT(t.cwd)}catch(e){X({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[ca({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),ca({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:zc,sessionIdentity:{verifyLoadedSession:t=>{let e=kf(t.requestedSessionId,{...t.env.OPENCODE_DB!==void 0?{dbPath:t.env.OPENCODE_DB}:{}});if(e===null)throw new Error(`opencode bundle: no session "${t.requestedSessionId}" in the opencode session store \u2014 the session must exist on disk before a bundle can resume it`);if($T(e.directory)!==$T(t.cwd))throw new Error(`opencode bundle: session "${t.requestedSessionId}" belongs to ${e.directory}, not ${t.cwd} \u2014 refusing to resume another workspace's session`)},recheckSession:t=>{if(kf(t.requestedSessionId,{...t.env.OPENCODE_DB!==void 0?{dbPath:t.env.OPENCODE_DB}:{}})===null)throw new Error(`opencode bundle: session "${t.requestedSessionId}" disappeared from the session store mid-bundle`)}}}});import{existsSync as aj}from"node:fs";import{readdir as lj}from"node:fs/promises";import{join as xf,resolve as cj}from"node:path";function UT(t){let e=uj.exec(t);return e?e[0]:null}function dj(t){if(!t.includes("notifications/initialized"))return t;let e=t.split(/\r?\n/),n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s.includes("Error handling notification")&&s.includes("notifications/initialized")){let i=[s],o=r;for(;o+1<e.length&&i.length<8&&(o++,i.push(e[o]),e[o].trim()!=="}"););let a=i.join(`
2231
+ `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var Rf=M(()=>{"use strict"});import{spawn as lj}from"node:child_process";import{resolve as $T}from"node:path";function zc(t){let e;try{e=lj(t.binaryPath??Rs.binary,[...Rs.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ue(t.env,t.cwd,void 0,"unknown")})}catch(s){return Promise.resolve({status:"unavailable",reason:"spawn",error:s instanceof Error?s.message:String(s)})}let n=Dr(e,{provider:"opencode"}),r=t.timeoutMs??5e3;return new Promise(s=>{let i=!1,o=(u,d=!0)=>{if(!i){if(i=!0,clearTimeout(c),e.removeListener("error",a),e.removeListener("exit",l),n.close(),!d){s(u);return}ve(e,{softDelayMs:100,killDelayMs:100}).finally(()=>s(u))}},a=u=>{o({status:"unavailable",reason:"spawn",error:u.message},!1)},l=(u,d)=>{o({status:"unavailable",reason:"handshake",error:`opencode ACP exited before verification (code=${String(u)}, signal=${String(d)})`},!1)};e.once("error",a),e.once("exit",l);let c=setTimeout(()=>{o({status:"unavailable",reason:"timeout"})},r);(async()=>{try{await n.sendRpc("initialize",{protocolVersion:1,clientInfo:{name:"lmctl",version:"0.1.0"},clientCapabilities:{}}),n.sendNotification("notifications/initialized");let u=await n.sendRpc("session/new",{cwd:t.cwd,mcpServers:[]}),d=Qn(u);try{await n.sendRpc("session/set_config_option",{sessionId:d,configId:"model",value:t.model})}catch(m){o({status:"rejected",option:"model",value:t.model,error:m instanceof Error?m.message:String(m)});return}if(t.effort!==void 0)try{await n.sendRpc("session/set_config_option",{sessionId:d,configId:"effort",value:t.effort})}catch(m){o({status:"rejected",option:"effort",value:t.effort,error:m instanceof Error?m.message:String(m)});return}o({status:"verified"})}catch(u){o({status:"unavailable",reason:"handshake",error:u instanceof Error?u.message:String(u)})}})()})}var Rs,If=M(()=>{"use strict";ke();pf();la();ia();ln();ks();vf();Rf();Rs={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...Rs.baseArgs],preSpawn(t){try{bT(t.cwd)}catch(e){X({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[ca({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),ca({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:zc,sessionIdentity:{verifyLoadedSession:t=>{let e=kf(t.requestedSessionId,{...t.env.OPENCODE_DB!==void 0?{dbPath:t.env.OPENCODE_DB}:{}});if(e===null)throw new Error(`opencode bundle: no session "${t.requestedSessionId}" in the opencode session store \u2014 the session must exist on disk before a bundle can resume it`);if($T(e.directory)!==$T(t.cwd))throw new Error(`opencode bundle: session "${t.requestedSessionId}" belongs to ${e.directory}, not ${t.cwd} \u2014 refusing to resume another workspace's session`)},recheckSession:t=>{if(kf(t.requestedSessionId,{...t.env.OPENCODE_DB!==void 0?{dbPath:t.env.OPENCODE_DB}:{}})===null)throw new Error(`opencode bundle: session "${t.requestedSessionId}" disappeared from the session store mid-bundle`)}}}});import{existsSync as cj}from"node:fs";import{readdir as uj}from"node:fs/promises";import{join as xf,resolve as dj}from"node:path";function UT(t){let e=mj.exec(t);return e?e[0]:null}function pj(t){if(!t.includes("notifications/initialized"))return t;let e=t.split(/\r?\n/),n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s.includes("Error handling notification")&&s.includes("notifications/initialized")){let i=[s],o=r;for(;o+1<e.length&&i.length<8&&(o++,i.push(e[o]),e[o].trim()!=="}"););let a=i.join(`
2232
2232
  `);if(/\bcode:\s*-32601\b/.test(a)&&/Method not found[^]*notifications\/initialized/.test(a)){r=o;continue}}n.push(s)}return n.join(`
2233
- `)}async function jT(t,e){let n=cj(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??xf(ae,".kimi-code")),r=xf(n,"sessions"),s;try{s=await lj(r,{withFileTypes:!0})}catch{throw new Error(`kimi bundle: cannot read the kimi session store at ${r} \u2014 cannot verify session "${t}"`)}for(let i of s)if(i.isDirectory()&&aj(xf(r,i.name,t,"agents","main","wire.jsonl")))return;throw new Error(`kimi bundle: no session "${t}" in the kimi session store (${r}) \u2014 the session must exist on disk before a bundle can resume it`)}var uj,Af,ua,Cf=M(()=>{"use strict";ke();We();Rf();uj=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;Af=t=>t.permissionMode==="plan"?"plan":"auto";ua={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...ua.baseArgs],sessionSetup:[{id:"permission-mode",onFailure:"fail-closed",applies:()=>!0,run:async t=>{await t.sendRpc("session/set_config_option",{sessionId:t.sessionId,configId:"mode",value:Af(t)})},describeFailure:(t,e)=>{let n=Af(t),r=e instanceof Error?e.message:String(e);return{event:"acp_permission_mode_failed",fields:{config_id:"mode",value:n,error_message:r},message:`Cannot set Kimi ACP permission mode to ${n}: ${r}`}},successLog:t=>`acp: set_config_option(mode=${Af(t)}) ok`},ca({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=UT(t.result);e!==null&&X({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:dj,sessionIdentity:{verifyLoadedSession:async t=>{await jT(t.requestedSessionId,t.env)},recheckSession:async t=>{await jT(t.requestedSessionId,t.env)}}}});var da,HT=M(()=>{"use strict";da={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...da.baseArgs]},preSpawn(t){t.permissionMode==="yolo"&&(t.env.HERMES_YOLO_MODE="1")},modeVocabulary:{known:["default","accept_edits","dont_ask"],selectable:["accept_edits","dont_ask"]},sessionSetup:[{id:"session-mode",onFailure:"fail-closed",applies:t=>t.acpMode!==void 0,run:async t=>{await t.sendRpc("session/set_mode",{sessionId:t.sessionId,modeId:t.acpMode})},describeFailure:(t,e)=>{let n=e instanceof Error?e.message:String(e);return{event:"acp_session_mode_failed",fields:{mode_id:t.acpMode,error_message:n},message:`Cannot set hermes ACP session mode to ${String(t.acpMode)}: ${n}`}},successLog:t=>`acp: set_mode(modeId=${String(t.acpMode)}) ok`},{id:"model",onFailure:"fail-closed",applies:t=>{if(t.model===void 0)return!1;let e=t.response.result?.models?.currentModelId;return t.model!==e},run:async t=>{await t.sendRpc("session/set_model",{sessionId:t.sessionId,modelId:t.model})},describeFailure:(t,e)=>{let n=e instanceof Error?e.message:String(e);return{event:"acp_config_option_failed",fields:{config_id:"model",value:t.model,error_message:n},stderrLine:`[acp] set_model(modelId=${String(t.model)}) failed: ${n}
2234
- `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function ma(t){return mj[t]}var mj,pj,BT=M(()=>{"use strict";IT();CT();OT();If();Cf();HT();mj={miniplayer:Jc,gemini:oa,copilot:aa,opencode:Rs,kimi:ua,hermes:da};pj={miniplayer:{binary:Jc.binary,args:Jc.baseArgs},gemini:{binary:oa.binary,args:oa.baseArgs},copilot:{binary:aa.binary,args:aa.baseArgs},opencode:{binary:Rs.binary,args:Rs.baseArgs},kimi:{binary:ua.binary,args:ua.baseArgs},hermes:{binary:da.binary,args:da.baseArgs}}});import{spawn as WT}from"node:child_process";import{existsSync as fj}from"node:fs";function qT(t,e){let n=ma(t)?.modeVocabulary;if(!n)throw new Ce(`ACP mode "${e}" requested for provider "${t}", which declares no ACP mode vocabulary. Add the provider's mode ids to its AcpProviderProfile modeVocabulary before setting a mode.`);if(!n.known.includes(e))throw new Ce(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new Ce(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function gj(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} ACP process ${t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`} before completing the prompt.
2233
+ `)}async function jT(t,e){let n=dj(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??xf(ae,".kimi-code")),r=xf(n,"sessions"),s;try{s=await uj(r,{withFileTypes:!0})}catch{throw new Error(`kimi bundle: cannot read the kimi session store at ${r} \u2014 cannot verify session "${t}"`)}for(let i of s)if(i.isDirectory()&&cj(xf(r,i.name,t,"agents","main","wire.jsonl")))return;throw new Error(`kimi bundle: no session "${t}" in the kimi session store (${r}) \u2014 the session must exist on disk before a bundle can resume it`)}var mj,Af,ua,Cf=M(()=>{"use strict";ke();We();Rf();mj=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;Af=t=>t.permissionMode==="plan"?"plan":"auto";ua={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...ua.baseArgs],sessionSetup:[{id:"permission-mode",onFailure:"fail-closed",applies:()=>!0,run:async t=>{await t.sendRpc("session/set_config_option",{sessionId:t.sessionId,configId:"mode",value:Af(t)})},describeFailure:(t,e)=>{let n=Af(t),r=e instanceof Error?e.message:String(e);return{event:"acp_permission_mode_failed",fields:{config_id:"mode",value:n,error_message:r},message:`Cannot set Kimi ACP permission mode to ${n}: ${r}`}},successLog:t=>`acp: set_config_option(mode=${Af(t)}) ok`},ca({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=UT(t.result);e!==null&&X({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:pj,sessionIdentity:{verifyLoadedSession:async t=>{await jT(t.requestedSessionId,t.env)},recheckSession:async t=>{await jT(t.requestedSessionId,t.env)}}}});var da,HT=M(()=>{"use strict";da={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...da.baseArgs]},preSpawn(t){t.permissionMode==="yolo"&&(t.env.HERMES_YOLO_MODE="1")},modeVocabulary:{known:["default","accept_edits","dont_ask"],selectable:["accept_edits","dont_ask"]},sessionSetup:[{id:"session-mode",onFailure:"fail-closed",applies:t=>t.acpMode!==void 0,run:async t=>{await t.sendRpc("session/set_mode",{sessionId:t.sessionId,modeId:t.acpMode})},describeFailure:(t,e)=>{let n=e instanceof Error?e.message:String(e);return{event:"acp_session_mode_failed",fields:{mode_id:t.acpMode,error_message:n},message:`Cannot set hermes ACP session mode to ${String(t.acpMode)}: ${n}`}},successLog:t=>`acp: set_mode(modeId=${String(t.acpMode)}) ok`},{id:"model",onFailure:"fail-closed",applies:t=>{if(t.model===void 0)return!1;let e=t.response.result?.models?.currentModelId;return t.model!==e},run:async t=>{await t.sendRpc("session/set_model",{sessionId:t.sessionId,modelId:t.model})},describeFailure:(t,e)=>{let n=e instanceof Error?e.message:String(e);return{event:"acp_config_option_failed",fields:{config_id:"model",value:t.model,error_message:n},stderrLine:`[acp] set_model(modelId=${String(t.model)}) failed: ${n}
2234
+ `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function ma(t){return fj[t]}var fj,gj,BT=M(()=>{"use strict";IT();CT();OT();If();Cf();HT();fj={miniplayer:Jc,gemini:oa,copilot:aa,opencode:Rs,kimi:ua,hermes:da};gj={miniplayer:{binary:Jc.binary,args:Jc.baseArgs},gemini:{binary:oa.binary,args:oa.baseArgs},copilot:{binary:aa.binary,args:aa.baseArgs},opencode:{binary:Rs.binary,args:Rs.baseArgs},kimi:{binary:ua.binary,args:ua.baseArgs},hermes:{binary:da.binary,args:da.baseArgs}}});import{spawn as WT}from"node:child_process";import{existsSync as hj}from"node:fs";function qT(t,e){let n=ma(t)?.modeVocabulary;if(!n)throw new Ce(`ACP mode "${e}" requested for provider "${t}", which declares no ACP mode vocabulary. Add the provider's mode ids to its AcpProviderProfile modeVocabulary before setting a mode.`);if(!n.known.includes(e))throw new Ce(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new Ce(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function yj(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} ACP process ${t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`} before completing the prompt.
2235
2235
  One possible cause: the provider process failed before a complete ACP response was delivered.`;return e?`Original provider error:
2236
2236
  ${Oe(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
2237
2237
 
2238
- ${n}`:n}function hj(t,e){return ma(t)?.filterExpectedStderr?.(e)??e}function XT(t){if(t.method!=="session/update")return!1;let n=t.params?.update;if(n===void 0)return!1;let r=n.sessionUpdate;if(r!=="tool_call"&&r!=="tool_call_update")return!1;let s=n.status;return s!==void 0&&s!=="pending"&&s!=="in_progress"?!1:n.rawInput?.background===!0}async function GT(t,e,n,r){for(let s of t.sessionSetup??[]){let i={...e,sessionId:n.sessionId,response:n.response,sendRpc:r};if(s.applies(i))try{await s.run(i),s.successLog&&ze(s.successLog(i))}catch(o){let a=s.describeFailure(i,o);if(X({event:a.event,provider:t.name,...a.fields}),a.stderrLine&&process.stderr.write(a.stderrLine),a.warning&&e.warnings.push(a.warning),s.onFailure==="fail-closed")throw new Error(a.message)}}}function JT(t,e,n){let r=Ue(e.env,e.cwd,e.sessionId);t.preSpawn?.({...n,cwd:e.cwd,env:r});let s=e.binaryPath||t.binary,i=t.argv(n),o=t.yoloAssertion==="always-yolo"?"yolo":n.permissionMode;if(qe(e.tool,i,o),e.cwd&&!fj(e.cwd))throw X({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new Ce(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:i,spawnEnv:r}}async function VT(t){let{sendRpc:e,sendNotification:n,opts:r,outputProcessor:s}=t,i=t.strictSessionIdentity===!0,o=await e("initialize",{protocolVersion:1,clientInfo:{name:"lmctl",version:"0.1.0"},clientCapabilities:{}});n("notifications/initialized");let a=r.sessionId||"",l;if(r.sessionId){let c;try{if(o.result?.agentCapabilities?.loadSession===!1)throw new Error("provider advertises loadSession=false");c=await e("session/load",{sessionId:r.sessionId,cwd:r.cwd,mcpServers:[]})}catch(d){if(i||r.requireResume)throw new Error(`Cannot resume session ${r.sessionId} via ACP: ${d instanceof Error?d.message:String(d)}`);process.stderr.write(`[acp] session/load failed for ${r.sessionId}, creating new session
2239
- `),X({event:"acp_session_resume_fallback",provider:r.tool,session_id:r.sessionId,error_message:d instanceof Error?d.message:String(d)});let m=await e("session/new",{cwd:r.cwd,mcpServers:[]});return a=Qn(m),s.setSessionId(a),{sessionId:a,sessionResponse:m}}let u=Qn(c);if(r.requireResume&&u!==""&&u!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${u}"`);if(i){let d=Qn(c);if(d!==""&&d!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${d}"`);if(d===""){if(t.verifyLoadResponse===void 0)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received none`);await t.verifyLoadResponse(c)}a=r.sessionId}else a=Qn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Qn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function zT(t,e){let n=ma(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{qT(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let i=e.permissionMode??"yolo",o=[],a={permissionMode:i,...e.model!==void 0?{model:e.model}:{},...e.effort!==void 0?{effort:e.effort}:{},...e.acpMode!==void 0?{acpMode:e.acpMode}:{},purpose:"chat",warnings:{push:I=>{o.push(I)}}},l,c,u;try{({binary:l,spawnArgs:c,spawnEnv:u}=JT(n,e,a))}catch(I){return s(I instanceof Error?I:new Error(String(I)))}let d=WT(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:u}),m=Date.now(),p=!1,f=!1,g=0,h=!1,y=!1;if(e.signal){if(e.signal.aborted)return p=!0,X({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),ve(d).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{p=!0,X({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-m}),ve(d).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let b=e.sessionId||"",_=Gc({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});_.setSessionId(b);let v=Dr(d,{provider:e.tool,onEvent:I=>{g=Date.now(),XT(I)&&(y=!0),e.onEvent?.(I)},onNotification:I=>{g=Date.now(),_.processMessage(I)}}),{sendRpc:E,sendNotification:R}=v,S="";d.stderr?.on("data",I=>{S+=I.toString()}),d.on("error",I=>{v.close(I),X({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:I.message,elapsed_ms:Date.now()-m}),s(new Ce(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${I.message}`,{cause:I}))}),d.on("exit",(I,N)=>{if(f=!0,v.close(new Me(`ACP process ${N?`terminated by ${N}`:`exited with code ${String(I)}`}`,I,N)),p)return;let O=_.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:I}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-m,stopReason:O.stopReason,exitCode:I,sawActivity:O.sawActivity,...o.length>0?{warnings:o}:{}});else{let A=hj(e.tool,S),w=gj({tool:e.tool,exitCode:I,signal:N,stderr:A,fullOutput:S});X({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:I,signal:N,stderr_summary:w,elapsed_ms:Date.now()-m}),s(new Me(w,I,N,S))}}),(async()=>{try{let I=await VT({sendRpc:E,sendNotification:R,opts:e,outputProcessor:_});b=I.sessionId,e.onSessionId?.(b);let N=I.sessionResponse;await GT(n,a,{sessionId:b,response:N},E),_.beginTurn(),h=!0,ze(`acp: prompt sent (${t.length} chars)`);let O;if(await E("session/prompt",{sessionId:b,prompt:[{type:"text",text:t}]},A=>{A.error?_.cancelTurn():O=_.completeTurn(A)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,ze(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),Sn(e.holdOpen,{isAborted:()=>p,hasChildExited:()=>f,isTurnInFlight:()=>h,lastEventAtMs:()=>g,closeStdin:()=>{d.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>y})}catch(I){ve(d).catch(()=>{}),s(I instanceof Error?I:new Error(String(I)))}})()})}async function KT(t){let e=ma(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&qT(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,i={permissionMode:n,...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.acpMode!==void 0?{acpMode:t.acpMode}:{},purpose:"chat",warnings:{push:N=>{r.push(N)}}},{binary:o,spawnArgs:a,spawnEnv:l}=JT(e,t,i),c=WT(o,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),u=Date.now(),d={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},m,p=t.sessionId||"",f=null,g="";c.stderr?.on("data",N=>{g+=N.toString()});let h,y,b=Gc({tool:t.tool,onDelta:N=>h?.(N),...e.isolateResult?{isolateResult:e.isolateResult}:{}});b.setSessionId(p);let _=Dr(c,{provider:t.tool,onEvent:N=>{d.lastEventAtMs=Date.now(),XT(N)&&(d.backgroundJobLaunched=!0),y?.(N)},onNotification:N=>{d.lastEventAtMs=Date.now(),b.processMessage(N)}}),v=()=>new Me(`ACP bundle process (${t.tool}) exited${d.signal!==null?` by ${d.signal}`:d.exitCode!==null?` with code ${d.exitCode}`:""} after ${d.completedTurns} completed prompt(s); the bundle cannot continue`,d.exitCode,d.signal,g),E=[],R=()=>d.exited?Promise.resolve():new Promise(N=>{E.push(N)}),S=null;c.on("error",N=>{f=new Ce(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${N.message}`,{cause:N}),X({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:N.message,elapsed_ms:Date.now()-u}),_.close(N)}),c.on("exit",(N,O)=>{if(d.exited=!0,d.exitCode=N,d.signal=O,_.close(new Me(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(N)}`}`,N,O)),!d.telemetryFired){d.telemetryFired=!0;let A=b.finalize();A!==null&&e.onExitFinalization?.({...i,sessionId:A.sessionId,result:A.result,stopReason:A.stopReason,exitCode:N})}if(S!==null){let A=S;S=null,A(v())}for(let A of E.splice(0))A()}),c.on("close",(N,O)=>{if(!d.exited){d.exited=!0,d.exitCode=N,d.signal=O;for(let A of E.splice(0))A()}});try{let N=await VT({sendRpc:_.sendRpc,sendNotification:_.sendNotification,opts:t,outputProcessor:b,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...i,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});p=N.sessionId,t.onSessionId?.(p),await GT(e,i,{sessionId:N.sessionId,response:N.sessionResponse},_.sendRpc)}catch(N){let O=f??(N instanceof Error?N:new Error(String(N)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await R()):ve(c).catch(()=>{}),O}let I=N=>new Promise(O=>{setTimeout(O,N).unref?.()});return{tool:t.tool,get sessionId(){return p},get completedTurns(){return d.completedTurns},async sendTurn(N,O={}){if(m&&await m,d.closed||d.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(d.exited)throw v();if(d.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:p,cwd:t.cwd,env:l}),d.exited)throw v();if(O.signal?.aborted)throw new Error("Aborted")}d.turnInFlight=!0,h=O.onDelta,y=O.onEvent;let A=Date.now();try{b.beginTurn(),ze(`acp: bundle prompt sent (${N.length} chars)`);let w,T=!1;if(await new Promise((x,C)=>{S=C;let L,P=()=>{T=!0,m=Promise.resolve().then(()=>L).catch(()=>{}),b.cancelTurn(),_.sendNotification("session/cancel",{sessionId:p}),C(new Error("Aborted"))},j=O.signal;j?.addEventListener("abort",P,{once:!0}),L=_.sendRpc("session/prompt",{sessionId:p,prompt:[{type:"text",text:N}]},F=>{T||(F.error?b.cancelTurn():w=b.completeTurn(F),h=void 0,y=void 0)}),L.then(F=>{j?.removeEventListener("abort",P),x(F)},F=>{j?.removeEventListener("abort",P),C(F instanceof Error?F:new Error(String(F)))})}),S=null,!w)throw new Error("ACP prompt completed without a result boundary");d.turnInFlight=!1,d.completedTurns+=1,ze(`acp: bundle result received (${w.result.length} chars, stopReason=${w.stopReason})`);let k=s&&r.length>0?[...r]:void 0;return s=!1,{result:w.result,sessionId:w.sessionId,stopReason:w.stopReason,durationMs:Date.now()-A,sawActivity:w.sawActivity,...k!==void 0?{warnings:k}:{}}}catch(w){throw S=null,b.cancelTurn(),d.turnInFlight=!1,d.exited?v():w}finally{h=void 0,y=void 0}},close(){return d.closing!==null||(d.closing=(async()=>{if(d.closed=!0,d.exited||(t.holdOpen!==void 0?await new Promise(O=>{Sn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>d.exited,isTurnInFlight:()=>d.turnInFlight,lastEventAtMs:()=>d.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>d.backgroundJobLaunched})}):c.stdin?.end(),d.exited))return;let N=t.closeTimeoutMs;if(N===void 0&&t.serviceHosted)await R();else{let O=N??2e3;await Promise.race([R(),I(O)]),d.exited||await ve(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),d.closing}}}var Nf=M(()=>{"use strict";ke();Mr();ks();sa();kn();ke();ln();an();ia();vf();BT();Cf();If();ia()});function Kc(t,e,n){return vn(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}function Yc(t,e){return vn(t.name)&&t.protocol?.persistentResume===!0&&t.openSession!==void 0&&e.tools[t.name]?.agent===void 0}async function Zn(t,e,n,r,s){if(t.provider!==e)throw new Error(`bundle session provider mismatch: session serves "${t.provider}", turn targets "${e}"`);if(t.sessionId!==n)throw new ki(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let i=await t.sendTurn(r,s);if(i.sessionId!==n)throw Object.assign(new ki(`session identity mismatch: expected "${n}", got "${i.sessionId}"`),{usage:i.usage,sessionId:i.sessionId});return{...i,...i.text===""&&i.sawActivity===!1?{status:"empty"}:{}}}async function Qc(t,e){Ac(t.name);let n=e.requireResume??!0;if(n&&!e.sessionId.trim())throw new Error("conversation requires an existing session ID");let r=e.userConfig?.tools[t.name]?.agent!==void 0,s=e.execution!=="per-turn"&&t.openSession!==void 0&&!r;if(e.execution==="persistent"&&!s)throw new Error(`provider "${t.name}" does not support persistent sessions with this configuration`);let i=s?await t.openSession(e):void 0,o=!n&&e.sessionId==="";if(i&&(i.provider!==t.name||typeof i.sessionId!="string"||!i.sessionId.trim()||!o&&i.sessionId!==e.sessionId))throw await i.close(),new Error(`session identity mismatch opening ${t.name}: expected "${e.sessionId}", got "${i.sessionId}" (${i.provider})`);let a=i?.sessionId??e.sessionId,l=0,c=!1,u,d;return{provider:t.name,sessionId:a,execution:s?"persistent":"per-turn",transport:r?"custom":t.protocol?.transport??"unknown",cancellation:r?"unknown":s?t.protocol?.persistentCancellation??"unknown":t.protocol?.perTurnCancellation??"unknown",get completedTurns(){return l},async sendTurn(m,p={}){if(c)throw new Error("conversation is closed");if(u)throw new Error("conversation already has an active turn");if(p.signal?.aborted)throw new Error("Aborted");let f=new AbortController;u=f;let g=()=>f.abort();p.signal?.addEventListener("abort",g,{once:!0});try{let h=i?await Zn(i,t.name,a,m,{...p,signal:f.signal}):await t.sendTurn(m,{...e,...p,signal:f.signal,requireResume:n,timeoutMs:e.timeoutMs??0});if(f.signal.aborted)throw Object.assign(new Error("Aborted"),{usage:h.usage,sessionId:h.sessionId});if(n&&h.sessionId!==e.sessionId)throw c=!0,Object.assign(new ki(`session identity mismatch: expected "${e.sessionId}", got "${h.sessionId}"`),{usage:h.usage,sessionId:h.sessionId});return h.status!=="empty"&&h.status!=="stalled"&&l++,h}catch(h){throw f.signal.aborted&&i&&t.protocol?.persistentCancellation==="session"&&(c=!0),h instanceof ki&&(c=!0,await i?.close()),h}finally{p.signal?.removeEventListener("abort",g),u=void 0}},close(){return d||(c=!0,u?.abort(),d=i?i.close():Promise.resolve()),d}}}var ki,$r=M(()=>{"use strict";_i();ki=class extends Error{}});import{realpathSync as yj}from"node:fs";import{resolve as _j}from"node:path";function Of(t){let e=_j(t);try{return yj(e)}catch{return e}}var YT=M(()=>{"use strict"});import{platform as QT}from"node:os";function er(t){let e=new pa;for(let n of t)e.registerAdapter(n);return e}var pa,Lf=M(()=>{"use strict";YT();pa=class{providers=[];adapters=new Map;register(e){this.providers.push(e)}async listAll(e){let n=[],r=e?.provider?this.providers.filter(o=>o.name===e.provider):this.providers,s=await Promise.all(r.map(o=>o.discoverSessions()));for(let o of s)n.push(...o);let i=n;if(e?.workspace){let o=Of(e.workspace);i=i.filter(a=>Of(a.cwd)===o)}if(e?.from){let o=e.from.getTime();i=i.filter(a=>a.modifiedAt.getTime()>=o)}if(e?.to){let o=e.to.getTime();i=i.filter(a=>a.modifiedAt.getTime()<=o)}return i.sort((o,a)=>a.modifiedAt.getTime()-o.modifiedAt.getTime()),e?.limit&&(i=i.slice(0,e.limit)),i}async getSession(e,n){let r=n?this.providers.filter(s=>s.name===n):this.providers;for(let s of r){let i=await s.loadSession(e);if(i)return i}return null}async resolveSession(e,n){let r=await this.resolveSessions(e,n);return r.length===1?r[0]:null}async resolveSessions(e,n){let r=n?this.providers.filter(i=>i.name===n):this.providers,s=[];for(let i of r){let o=await i.resolveSessionPath(e);o&&s.push({provider:i,filePath:o})}return s}getWatchTargets(){let e=QT()==="darwin"||QT()==="win32",n=[];for(let r of this.providers)if(typeof r.getWatchPaths=="function")for(let s of r.getWatchPaths())n.push({provider:r.name,directory:s.directory,recursive:e,filePattern:s.filePattern});return n}async deleteSession(e,n){let r=await this.resolveSession(e,n);return r?r.provider.deleteSession(e):!1}registerAdapter(e){this.adapters.set(e.name,e),this.providers.push({name:e.name,discoverSessions:()=>e.discover(),loadSession:n=>e.load(n),resolveSessionPath:n=>e.resolvePath(n),deleteSession:n=>e.delete(n),getWatchPaths:()=>e.getWatchPaths?.()??[]})}getAdapter(e){return this.adapters.get(e)}getAllAdapters(){return[...this.adapters.values()]}}});function Ff(){return new Pf}function $f(t){let e=!1;for(let n of t.split(`
2238
+ ${n}`:n}function _j(t,e){return ma(t)?.filterExpectedStderr?.(e)??e}function XT(t){if(t.method!=="session/update")return!1;let n=t.params?.update;if(n===void 0)return!1;let r=n.sessionUpdate;if(r!=="tool_call"&&r!=="tool_call_update")return!1;let s=n.status;return s!==void 0&&s!=="pending"&&s!=="in_progress"?!1:n.rawInput?.background===!0}async function GT(t,e,n,r){for(let s of t.sessionSetup??[]){let i={...e,sessionId:n.sessionId,response:n.response,sendRpc:r};if(s.applies(i))try{await s.run(i),s.successLog&&ze(s.successLog(i))}catch(o){let a=s.describeFailure(i,o);if(X({event:a.event,provider:t.name,...a.fields}),a.stderrLine&&process.stderr.write(a.stderrLine),a.warning&&e.warnings.push(a.warning),s.onFailure==="fail-closed")throw new Error(a.message)}}}function JT(t,e,n){let r=Ue(e.env,e.cwd,e.sessionId);t.preSpawn?.({...n,cwd:e.cwd,env:r});let s=e.binaryPath||t.binary,i=t.argv(n),o=t.yoloAssertion==="always-yolo"?"yolo":n.permissionMode;if(qe(e.tool,i,o),e.cwd&&!hj(e.cwd))throw X({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new Ce(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:i,spawnEnv:r}}async function VT(t){let{sendRpc:e,sendNotification:n,opts:r,outputProcessor:s}=t,i=t.strictSessionIdentity===!0,o=await e("initialize",{protocolVersion:1,clientInfo:{name:"lmctl",version:"0.1.0"},clientCapabilities:{}});n("notifications/initialized");let a=r.sessionId||"",l;if(r.sessionId){let c;try{if(o.result?.agentCapabilities?.loadSession===!1)throw new Error("provider advertises loadSession=false");c=await e("session/load",{sessionId:r.sessionId,cwd:r.cwd,mcpServers:[]})}catch(d){if(i||r.requireResume)throw new Error(`Cannot resume session ${r.sessionId} via ACP: ${d instanceof Error?d.message:String(d)}`);process.stderr.write(`[acp] session/load failed for ${r.sessionId}, creating new session
2239
+ `),X({event:"acp_session_resume_fallback",provider:r.tool,session_id:r.sessionId,error_message:d instanceof Error?d.message:String(d)});let m=await e("session/new",{cwd:r.cwd,mcpServers:[]});return a=Qn(m),s.setSessionId(a),{sessionId:a,sessionResponse:m}}let u=Qn(c);if(r.requireResume&&u!==""&&u!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${u}"`);if(i){let d=Qn(c);if(d!==""&&d!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${d}"`);if(d===""){if(t.verifyLoadResponse===void 0)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received none`);await t.verifyLoadResponse(c)}a=r.sessionId}else a=Qn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Qn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function zT(t,e){let n=ma(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{qT(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let i=e.permissionMode??"yolo",o=[],a={permissionMode:i,...e.model!==void 0?{model:e.model}:{},...e.effort!==void 0?{effort:e.effort}:{},...e.acpMode!==void 0?{acpMode:e.acpMode}:{},purpose:"chat",warnings:{push:I=>{o.push(I)}}},l,c,u;try{({binary:l,spawnArgs:c,spawnEnv:u}=JT(n,e,a))}catch(I){return s(I instanceof Error?I:new Error(String(I)))}let d=WT(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:u}),m=Date.now(),p=!1,f=!1,g=0,h=!1,y=!1;if(e.signal){if(e.signal.aborted)return p=!0,X({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),ve(d).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{p=!0,X({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-m}),ve(d).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let b=e.sessionId||"",_=Gc({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});_.setSessionId(b);let v=Dr(d,{provider:e.tool,onEvent:I=>{g=Date.now(),XT(I)&&(y=!0),e.onEvent?.(I)},onNotification:I=>{g=Date.now(),_.processMessage(I)}}),{sendRpc:E,sendNotification:R}=v,S="";d.stderr?.on("data",I=>{S+=I.toString()}),d.on("error",I=>{v.close(I),X({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:I.message,elapsed_ms:Date.now()-m}),s(new Ce(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${I.message}`,{cause:I}))}),d.on("exit",(I,N)=>{if(f=!0,v.close(new Me(`ACP process ${N?`terminated by ${N}`:`exited with code ${String(I)}`}`,I,N)),p)return;let O=_.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:I}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-m,stopReason:O.stopReason,exitCode:I,sawActivity:O.sawActivity,...o.length>0?{warnings:o}:{}});else{let A=_j(e.tool,S),w=yj({tool:e.tool,exitCode:I,signal:N,stderr:A,fullOutput:S});X({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:I,signal:N,stderr_summary:w,elapsed_ms:Date.now()-m}),s(new Me(w,I,N,S))}}),(async()=>{try{let I=await VT({sendRpc:E,sendNotification:R,opts:e,outputProcessor:_});b=I.sessionId,e.onSessionId?.(b);let N=I.sessionResponse;await GT(n,a,{sessionId:b,response:N},E),_.beginTurn(),h=!0,ze(`acp: prompt sent (${t.length} chars)`);let O;if(await E("session/prompt",{sessionId:b,prompt:[{type:"text",text:t}]},A=>{A.error?_.cancelTurn():O=_.completeTurn(A)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,ze(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),Sn(e.holdOpen,{isAborted:()=>p,hasChildExited:()=>f,isTurnInFlight:()=>h,lastEventAtMs:()=>g,closeStdin:()=>{d.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>y})}catch(I){ve(d).catch(()=>{}),s(I instanceof Error?I:new Error(String(I)))}})()})}async function KT(t){let e=ma(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&qT(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,i={permissionMode:n,...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.acpMode!==void 0?{acpMode:t.acpMode}:{},purpose:"chat",warnings:{push:N=>{r.push(N)}}},{binary:o,spawnArgs:a,spawnEnv:l}=JT(e,t,i),c=WT(o,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),u=Date.now(),d={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},m,p=t.sessionId||"",f=null,g="";c.stderr?.on("data",N=>{g+=N.toString()});let h,y,b=Gc({tool:t.tool,onDelta:N=>h?.(N),...e.isolateResult?{isolateResult:e.isolateResult}:{}});b.setSessionId(p);let _=Dr(c,{provider:t.tool,onEvent:N=>{d.lastEventAtMs=Date.now(),XT(N)&&(d.backgroundJobLaunched=!0),y?.(N)},onNotification:N=>{d.lastEventAtMs=Date.now(),b.processMessage(N)}}),v=()=>new Me(`ACP bundle process (${t.tool}) exited${d.signal!==null?` by ${d.signal}`:d.exitCode!==null?` with code ${d.exitCode}`:""} after ${d.completedTurns} completed prompt(s); the bundle cannot continue`,d.exitCode,d.signal,g),E=[],R=()=>d.exited?Promise.resolve():new Promise(N=>{E.push(N)}),S=null;c.on("error",N=>{f=new Ce(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${N.message}`,{cause:N}),X({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:N.message,elapsed_ms:Date.now()-u}),_.close(N)}),c.on("exit",(N,O)=>{if(d.exited=!0,d.exitCode=N,d.signal=O,_.close(new Me(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(N)}`}`,N,O)),!d.telemetryFired){d.telemetryFired=!0;let A=b.finalize();A!==null&&e.onExitFinalization?.({...i,sessionId:A.sessionId,result:A.result,stopReason:A.stopReason,exitCode:N})}if(S!==null){let A=S;S=null,A(v())}for(let A of E.splice(0))A()}),c.on("close",(N,O)=>{if(!d.exited){d.exited=!0,d.exitCode=N,d.signal=O;for(let A of E.splice(0))A()}});try{let N=await VT({sendRpc:_.sendRpc,sendNotification:_.sendNotification,opts:t,outputProcessor:b,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...i,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});p=N.sessionId,t.onSessionId?.(p),await GT(e,i,{sessionId:N.sessionId,response:N.sessionResponse},_.sendRpc)}catch(N){let O=f??(N instanceof Error?N:new Error(String(N)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await R()):ve(c).catch(()=>{}),O}let I=N=>new Promise(O=>{setTimeout(O,N).unref?.()});return{tool:t.tool,get sessionId(){return p},get completedTurns(){return d.completedTurns},async sendTurn(N,O={}){if(m&&await m,d.closed||d.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(d.exited)throw v();if(d.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:p,cwd:t.cwd,env:l}),d.exited)throw v();if(O.signal?.aborted)throw new Error("Aborted")}d.turnInFlight=!0,h=O.onDelta,y=O.onEvent;let A=Date.now();try{b.beginTurn(),ze(`acp: bundle prompt sent (${N.length} chars)`);let w,T=!1;if(await new Promise((x,C)=>{S=C;let L,P=()=>{T=!0,m=Promise.resolve().then(()=>L).catch(()=>{}),b.cancelTurn(),_.sendNotification("session/cancel",{sessionId:p}),C(new Error("Aborted"))},j=O.signal;j?.addEventListener("abort",P,{once:!0}),L=_.sendRpc("session/prompt",{sessionId:p,prompt:[{type:"text",text:N}]},F=>{T||(F.error?b.cancelTurn():w=b.completeTurn(F),h=void 0,y=void 0)}),L.then(F=>{j?.removeEventListener("abort",P),x(F)},F=>{j?.removeEventListener("abort",P),C(F instanceof Error?F:new Error(String(F)))})}),S=null,!w)throw new Error("ACP prompt completed without a result boundary");d.turnInFlight=!1,d.completedTurns+=1,ze(`acp: bundle result received (${w.result.length} chars, stopReason=${w.stopReason})`);let k=s&&r.length>0?[...r]:void 0;return s=!1,{result:w.result,sessionId:w.sessionId,stopReason:w.stopReason,durationMs:Date.now()-A,sawActivity:w.sawActivity,...k!==void 0?{warnings:k}:{}}}catch(w){throw S=null,b.cancelTurn(),d.turnInFlight=!1,d.exited?v():w}finally{h=void 0,y=void 0}},close(){return d.closing!==null||(d.closing=(async()=>{if(d.closed=!0,d.exited||(t.holdOpen!==void 0?await new Promise(O=>{Sn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>d.exited,isTurnInFlight:()=>d.turnInFlight,lastEventAtMs:()=>d.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>d.backgroundJobLaunched})}):c.stdin?.end(),d.exited))return;let N=t.closeTimeoutMs;if(N===void 0&&t.serviceHosted)await R();else{let O=N??2e3;await Promise.race([R(),I(O)]),d.exited||await ve(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),d.closing}}}var Nf=M(()=>{"use strict";ke();Mr();ks();sa();kn();ke();ln();an();ia();vf();BT();Cf();If();ia()});function Kc(t,e,n){return vn(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}function Yc(t,e){return vn(t.name)&&t.protocol?.persistentResume===!0&&t.openSession!==void 0&&e.tools[t.name]?.agent===void 0}async function Zn(t,e,n,r,s){if(t.provider!==e)throw new Error(`bundle session provider mismatch: session serves "${t.provider}", turn targets "${e}"`);if(t.sessionId!==n)throw new ki(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let i=await t.sendTurn(r,s);if(i.sessionId!==n)throw Object.assign(new ki(`session identity mismatch: expected "${n}", got "${i.sessionId}"`),{usage:i.usage,sessionId:i.sessionId});return{...i,...i.text===""&&i.sawActivity===!1?{status:"empty"}:{}}}async function Qc(t,e){Ac(t.name);let n=e.requireResume??!0;if(n&&!e.sessionId.trim())throw new Error("conversation requires an existing session ID");let r=e.userConfig?.tools[t.name]?.agent!==void 0,s=e.execution!=="per-turn"&&t.openSession!==void 0&&!r;if(e.execution==="persistent"&&!s)throw new Error(`provider "${t.name}" does not support persistent sessions with this configuration`);let i=s?await t.openSession(e):void 0,o=!n&&e.sessionId==="";if(i&&(i.provider!==t.name||typeof i.sessionId!="string"||!i.sessionId.trim()||!o&&i.sessionId!==e.sessionId))throw await i.close(),new Error(`session identity mismatch opening ${t.name}: expected "${e.sessionId}", got "${i.sessionId}" (${i.provider})`);let a=i?.sessionId??e.sessionId,l=0,c=!1,u,d;return{provider:t.name,sessionId:a,execution:s?"persistent":"per-turn",transport:r?"custom":t.protocol?.transport??"unknown",cancellation:r?"unknown":s?t.protocol?.persistentCancellation??"unknown":t.protocol?.perTurnCancellation??"unknown",get completedTurns(){return l},async sendTurn(m,p={}){if(c)throw new Error("conversation is closed");if(u)throw new Error("conversation already has an active turn");if(p.signal?.aborted)throw new Error("Aborted");let f=new AbortController;u=f;let g=()=>f.abort();p.signal?.addEventListener("abort",g,{once:!0});try{let h=i?await Zn(i,t.name,a,m,{...p,signal:f.signal}):await t.sendTurn(m,{...e,...p,signal:f.signal,requireResume:n,timeoutMs:e.timeoutMs??0});if(f.signal.aborted)throw Object.assign(new Error("Aborted"),{usage:h.usage,sessionId:h.sessionId});if(n&&h.sessionId!==e.sessionId)throw c=!0,Object.assign(new ki(`session identity mismatch: expected "${e.sessionId}", got "${h.sessionId}"`),{usage:h.usage,sessionId:h.sessionId});return h.status!=="empty"&&h.status!=="stalled"&&l++,h}catch(h){throw f.signal.aborted&&i&&t.protocol?.persistentCancellation==="session"&&(c=!0),h instanceof ki&&(c=!0,await i?.close()),h}finally{p.signal?.removeEventListener("abort",g),u=void 0}},close(){return d||(c=!0,u?.abort(),d=i?i.close():Promise.resolve()),d}}}var ki,$r=M(()=>{"use strict";_i();ki=class extends Error{}});import{realpathSync as vj}from"node:fs";import{resolve as bj}from"node:path";function Of(t){let e=bj(t);try{return vj(e)}catch{return e}}var YT=M(()=>{"use strict"});import{platform as QT}from"node:os";function er(t){let e=new pa;for(let n of t)e.registerAdapter(n);return e}var pa,Lf=M(()=>{"use strict";YT();pa=class{providers=[];adapters=new Map;register(e){this.providers.push(e)}async listAll(e){let n=[],r=e?.provider?this.providers.filter(o=>o.name===e.provider):this.providers,s=await Promise.all(r.map(o=>o.discoverSessions()));for(let o of s)n.push(...o);let i=n;if(e?.workspace){let o=Of(e.workspace);i=i.filter(a=>Of(a.cwd)===o)}if(e?.from){let o=e.from.getTime();i=i.filter(a=>a.modifiedAt.getTime()>=o)}if(e?.to){let o=e.to.getTime();i=i.filter(a=>a.modifiedAt.getTime()<=o)}return i.sort((o,a)=>a.modifiedAt.getTime()-o.modifiedAt.getTime()),e?.limit&&(i=i.slice(0,e.limit)),i}async getSession(e,n){let r=n?this.providers.filter(s=>s.name===n):this.providers;for(let s of r){let i=await s.loadSession(e);if(i)return i}return null}async resolveSession(e,n){let r=await this.resolveSessions(e,n);return r.length===1?r[0]:null}async resolveSessions(e,n){let r=n?this.providers.filter(i=>i.name===n):this.providers,s=[];for(let i of r){let o=await i.resolveSessionPath(e);o&&s.push({provider:i,filePath:o})}return s}getWatchTargets(){let e=QT()==="darwin"||QT()==="win32",n=[];for(let r of this.providers)if(typeof r.getWatchPaths=="function")for(let s of r.getWatchPaths())n.push({provider:r.name,directory:s.directory,recursive:e,filePattern:s.filePattern});return n}async deleteSession(e,n){let r=await this.resolveSession(e,n);return r?r.provider.deleteSession(e):!1}registerAdapter(e){this.adapters.set(e.name,e),this.providers.push({name:e.name,discoverSessions:()=>e.discover(),loadSession:n=>e.load(n),resolveSessionPath:n=>e.resolvePath(n),deleteSession:n=>e.delete(n),getWatchPaths:()=>e.getWatchPaths?.()??[]})}getAdapter(e){return this.adapters.get(e)}getAllAdapters(){return[...this.adapters.values()]}}});function Ff(){return new Pf}function $f(t){let e=!1;for(let n of t.split(`
2240
2240
  `)){let r;try{r=JSON.parse(n)}catch{continue}let s=r.type;typeof s=="string"&&(s.endsWith(".started")&&(e=!0),["turn.completed","turn.failed","turn.aborted","turn.cancelled","error"].includes(s)&&(e=!1))}return e}function jf(t){let e=t.trimEnd().split(`
2241
2241
  `).at(-1)?.trimStart()??"";if(!e.startsWith("{"))return!1;try{return JSON.parse(e),!1}catch{return!0}}function ZT(t){let e,n=!1,r=!1,s;for(let i of t.split(`
2242
- `)){let o;try{o=JSON.parse(i)}catch{continue}if(o.type==="thread.started"&&typeof o.thread_id=="string"&&(e=o.thread_id),o.type==="turn.started"&&(n=!0),o.type!=="turn.completed"||!n||r)continue;r=!0;let a=o.usage;if(!a)continue;let l=yt(a.input_tokens),c=yt(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:yt(a.output_tokens),reasoning:yt(a.reasoning_output_tokens),modelReported:typeof o.model=="string"?o.model:null,providerCostUsd:null,reason:null,invalidCounters:yn([a.input_tokens,a.cached_input_tokens,a.output_tokens,a.reasoning_output_tokens])||l!==null&&c!==null&&c>l},[s.inputUncached,s.cacheRead,s.output].includes(null)&&(s.reason="counter_not_exposed")}return(jf(t)||$f(t))&&(s={source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:"counter_not_exposed",invalidCounters:!0}),{sessionId:e,usage:s}}var yt,vj,Mf,Pf,Df,Uf=M(()=>{"use strict";Po();yt=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,vj=(t,e)=>t===null||e===null?null:yt(t+e),Mf=(t,e)=>JSON.stringify([t,e]),Pf=class{finished=new Set;seen=new Set;models=new Map;reportModel(e,n){typeof n=="string"&&n&&n!=="<synthetic>"&&this.models.set(e,n)}remember(e,n){typeof n=="string"&&n&&this.finished.add(Mf(e,n))}turn(e,n=""){return new Df(this,e,n)}};Df=class{constructor(e,n,r){this.session=e;this.thread=n;this.id=r}value;ended=!1;reported=new Set;bind(e){return typeof e!="string"||!e||this.ended||this.session.finished.has(Mf(this.thread,e))||this.id&&this.id!==e?!1:(this.id=e,!0)}event(e){let n=e.method,r=e.params,s=r?.turn,i=r?.turnId??s?.id,o=typeof r?.threadId=="string"?r.threadId:this.thread;if(this.thread&&o!==this.thread||(this.thread||(this.thread=o),typeof i=="string"&&this.session.finished.has(Mf(o,i))))return!1;if(n==="turn/started")return this.bind(i);if(this.id&&i&&i!==this.id)return!1;if(n==="turn/completed")return this.id?!this.ended:this.bind(i);if(n!=="thread/tokenUsage/updated")return!0;if(this.ended||!this.id||r?.threadId!==this.thread||r?.turnId!==this.id)return!1;let a=r.tokenUsage;if(!a?.last||typeof a.last!="object"||Array.isArray(a.last)||[a.last.inputTokens,a.last.cachedInputTokens,a.last.outputTokens].every(E=>E==null))return!0;let l=E=>["inputTokens","cachedInputTokens","cacheWriteInputTokens","outputTokens","reasoningOutputTokens","totalTokens"].map(R=>E[R]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(E=>yt(a.total[E])!==null)?l(a.total):null,u=typeof e.id=="string"&&e.id.length>0||typeof e.id=="number"&&Number.isSafeInteger(e.id)?e.id:null,d=yt(e.emittedAtMs)??u,m=yt(e.ordinal)??yt(r.ordinal),p=JSON.stringify([this.thread,this.id,c,l(a.last),d,u,m]),f=d!==null||m!==null;if(f&&this.session.seen.has(p))return!1;f&&this.session.seen.add(p);let g=a.last,h=yt(g.inputTokens),y=yt(g.cachedInputTokens),_={source:"wire",inputUncached:h===null||y===null||y>h?null:h-y,cacheRead:y,cacheWrite:yt(g.cacheWriteInputTokens??0),output:yt(g.outputTokens),reasoning:yt(g.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:yn([g.inputTokens,g.cachedInputTokens,g.cacheWriteInputTokens,g.outputTokens,g.reasoningOutputTokens])||h!==null&&y!==null&&y>h};[_.inputUncached,_.cacheRead,_.cacheWrite,_.output].includes(null)&&(_.reason="counter_not_exposed");let v=r.model??g.model;if(typeof v=="string"&&v&&v!=="<synthetic>"&&this.reported.add(v),!this.value)this.value=_;else{for(let E of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let R=this.value[E],S=_[E];R!==null&&S!==null&&yt(R+S)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[E]=vj(this.value[E],_[E])}this.value.reason=this.value.reason||_.reason,this.value.invalidCounters||=_.invalidCounters}return!0}usage(){if(this.value)return{...this.value,modelReported:this.reported.size>1?null:[...this.reported][0]??this.session.models.get(this.thread)??null,mixedModels:this.reported.size>1}}finish(){this.ended=!0,this.id&&this.session.remember(this.thread,this.id)}}});import{readFileSync as bj,writeFileSync as X5,mkdirSync as G5}from"node:fs";import{join as wj,dirname as V5}from"node:path";import{homedir as Ej}from"node:os";function Sj(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function kj(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=Sj(t.slice(e+1).trim());return n?{key:n,value:r}:null}function Rj(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Zc(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function Ij(){return wj(Ej(),".lmctl","config.toml")}function jr(t){let e=t??Ij(),n;try{n=bj(e,"utf-8")}catch{return{tools:{}}}return xj(n)}function eS(t){if(typeof t=="number")return Number.isFinite(t)?t:null;let e=String(t).trim();if(!e)return null;let n=e.match(/^(\d+(?:\.\d+)?)\s*([KkMm]?)$/);if(!n)return null;let r=parseFloat(n[1]);if(!Number.isFinite(r))return null;switch(n[2]){case"K":case"k":return Math.round(r*1e3);case"M":case"m":return Math.round(r*1e6);default:return Math.round(r)}}function xj(t){let e={},n={},r=t.split(`
2243
- `),s={kind:"none"},i={},o=!1,a={};function l(){if(s.kind==="tool"){let d=e[s.tool]??{};if(s.profile){let m=d.profiles?.[s.profile]??{};i.description&&(m.description=i.description),i.flags!==void 0&&(m.flags=i.flags),d.profiles||(d.profiles={}),d.profiles[s.profile]=m}else i.start&&(d.start=i.start),i.resume&&(d.resume=i.resume),i.agent&&(d.agent=i.agent),i.profile_flag!==void 0&&(d.profile_flag=i.profile_flag);e[s.tool]=d}else if(s.kind==="compact"){let d=s.provider?n.providers?.[s.provider]??{}:n.global??{};if(i.min!==void 0){let m=eS(i.min);m!==null&&(d.min=m)}if(i.max!==void 0){let m=eS(i.max);m!==null&&(d.max=m)}s.provider?(n.providers||(n.providers={}),n.providers[s.provider]=d):n.global=d}i={}}for(let d of r){let m=d.trim();if(!m||m.startsWith("#"))continue;let p=Rj(m);if(p!==null){if(o=!0,l(),p.startsWith("tool.")){let g=".profile.",h=p.indexOf(g);h!==-1?s={kind:"tool",tool:p.slice(5,h),profile:p.slice(h+g.length)}:s={kind:"tool",tool:p.slice(5),profile:null}}else p==="compact"?s={kind:"compact",provider:null}:p.startsWith("compact.")?s={kind:"compact",provider:p.slice(8)}:s={kind:"none"};continue}let f=kj(m);f&&s.kind!=="none"?i[f.key]=f.value:f&&!o&&(a[f.key]=f.value)}l();let c={tools:e};(n.global||n.providers)&&(c.compact=n);let u=a.site_name;return u!==void 0&&u.length>0&&(c.site_name=u),c}function Aj(t,e,n){if(!n)return"";let r=t.tools[e]??Hf[e],s=r?.profiles?.[n]?.flags??Hf[e]?.profiles?.[n]?.flags;if(s!==void 0)return s.trim();if(r?.profile_flag)return r.profile_flag.replace(/\{\{profile\}\}/g,n).trim();throw new Error(`Profile "${n}" is not configured for tool "${e}"`)}function tS(t,e){return!!t.tools[e]}function nS(t,e,n,r,s){let i=t.tools[e]??Hf[e],o;if(i?.agent){let l=Zc(r);o=i.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=Tj[e];if(!l)throw new Error(`No agent command configured for tool "${e}"`);let c=l.argv.map(u=>u.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,r));if(l.mode==="stdin"){let u=c.map(Zc).join(" ");o=`printf '%s\\n' ${Zc(r)} | ${u}`}else o=c.map(Zc).join(" ")}let a=Aj(t,e,s);return a&&(o+=" "+a),o}var Hf,Tj,Ri=M(()=>{"use strict";Hf={muse:{start:"muse",resume:"muse resume {{session_id}} --yolo",profiles:{default:{description:"Default profile",flags:""}}},claude:{start:"claude",resume:"claude --resume {{session_id}} --dangerously-skip-permissions",profiles:{default:{description:"Default profile",flags:""}}},codex:{start:"codex",resume:"codex resume {{session_id}} --dangerously-bypass-approvals-and-sandbox",profiles:{default:{description:"Default profile",flags:""}}},opencode:{start:"opencode",resume:"opencode --session {{session_id}}",profiles:{default:{description:"Default profile",flags:""}}},gemini:{start:"gemini",resume:"gemini --resume {{session_id}} -y",profiles:{default:{description:"Default profile",flags:""}}},copilot:{start:"copilot",resume:"copilot --resume={{session_id}} --yolo",profiles:{default:{description:"Default profile",flags:""}}},qwen:{start:"qwen",resume:"qwen --resume {{session_id}} --approval-mode yolo",profiles:{default:{description:"Default profile",flags:""}}},agy:{start:"agy",resume:"agy --conversation {{session_id}} --dangerously-skip-permissions",profiles:{default:{description:"Default profile",flags:""}}},kimi:{start:"kimi --auto",resume:"kimi --session {{session_id}} --auto",profiles:{default:{description:"Default profile",flags:""}}},hermes:{start:"hermes",resume:"hermes --yolo --resume {{session_id}}",profiles:{default:{description:"Default profile",flags:""}}}},Tj={claude:{mode:"argv",argv:["claude","-p","{{prompt}}","--resume","{{session_id}}"]},codex:{mode:"argv",argv:["codex","exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","resume","{{session_id}}","{{prompt}}"]},opencode:{mode:"argv",argv:["opencode","run","--session","{{session_id}}","{{prompt}}"]},gemini:{mode:"argv",argv:["gemini","-p","{{prompt}}","--resume","{{session_id}}"]},copilot:{mode:"argv",argv:["gh","copilot","--","--resume={{session_id}}","-p","{{prompt}}","-s","--allow-all-tools"]},qwen:{mode:"argv",argv:["qwen","-p","{{prompt}}","--resume","{{session_id}}","--approval-mode","yolo"]},agy:{mode:"argv",argv:["agy","--conversation","{{session_id}}","-p","{{prompt}}","--dangerously-skip-permissions","--print-timeout","8h"]},kimi:{mode:"argv",argv:["kimi","-p","{{prompt}}","--session","{{session_id}}","--output-format","stream-json"]},hermes:{mode:"argv",argv:["hermes","--yolo","-z","{{prompt}}","--resume","{{session_id}}"]}}});function rS(t=process.env){let e=t.LMCTL_ONE_SHOT_TIMEOUT_MS;if(!e)return 6e5;let n=Number(e);return!Number.isFinite(n)||n<=0?6e5:n}var sS=M(()=>{"use strict"});function tu(t){let e=t?.prompt??ce;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${ce}${Nj}${t.teamfile}:
2244
- ${n}${Oj}${JSON.stringify(t.teamfile)}${Lj}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
2245
- ${e}`),e}var Cj,ce,eu,Nj,Oj,Lj,Qe=M(()=>{"use strict";Cj="ACK: waiting for explicit lmctl task.",ce=`lmctl seed initial connection only. Create or pin this provider session, then stop. Do not inspect files, run commands, infer a task, delegate, or edit. Reply exactly: ${Cj}`,eu=`send this exact lmctl seed instruction: "${ce}"`,Nj=`
2242
+ `)){let o;try{o=JSON.parse(i)}catch{continue}if(o.type==="thread.started"&&typeof o.thread_id=="string"&&(e=o.thread_id),o.type==="turn.started"&&(n=!0),o.type!=="turn.completed"||!n||r)continue;r=!0;let a=o.usage;if(!a)continue;let l=yt(a.input_tokens),c=yt(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:yt(a.output_tokens),reasoning:yt(a.reasoning_output_tokens),modelReported:typeof o.model=="string"?o.model:null,providerCostUsd:null,reason:null,invalidCounters:yn([a.input_tokens,a.cached_input_tokens,a.output_tokens,a.reasoning_output_tokens])||l!==null&&c!==null&&c>l},[s.inputUncached,s.cacheRead,s.output].includes(null)&&(s.reason="counter_not_exposed")}return(jf(t)||$f(t))&&(s={source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:"counter_not_exposed",invalidCounters:!0}),{sessionId:e,usage:s}}var yt,wj,Mf,Pf,Df,Uf=M(()=>{"use strict";Po();yt=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,wj=(t,e)=>t===null||e===null?null:yt(t+e),Mf=(t,e)=>JSON.stringify([t,e]),Pf=class{finished=new Set;seen=new Set;models=new Map;reportModel(e,n){typeof n=="string"&&n&&n!=="<synthetic>"&&this.models.set(e,n)}remember(e,n){typeof n=="string"&&n&&this.finished.add(Mf(e,n))}turn(e,n=""){return new Df(this,e,n)}};Df=class{constructor(e,n,r){this.session=e;this.thread=n;this.id=r}value;ended=!1;reported=new Set;bind(e){return typeof e!="string"||!e||this.ended||this.session.finished.has(Mf(this.thread,e))||this.id&&this.id!==e?!1:(this.id=e,!0)}event(e){let n=e.method,r=e.params,s=r?.turn,i=r?.turnId??s?.id,o=typeof r?.threadId=="string"?r.threadId:this.thread;if(this.thread&&o!==this.thread||(this.thread||(this.thread=o),typeof i=="string"&&this.session.finished.has(Mf(o,i))))return!1;if(n==="turn/started")return this.bind(i);if(this.id&&i&&i!==this.id)return!1;if(n==="turn/completed")return this.id?!this.ended:this.bind(i);if(n!=="thread/tokenUsage/updated")return!0;if(this.ended||!this.id||r?.threadId!==this.thread||r?.turnId!==this.id)return!1;let a=r.tokenUsage;if(!a?.last||typeof a.last!="object"||Array.isArray(a.last)||[a.last.inputTokens,a.last.cachedInputTokens,a.last.outputTokens].every(E=>E==null))return!0;let l=E=>["inputTokens","cachedInputTokens","cacheWriteInputTokens","outputTokens","reasoningOutputTokens","totalTokens"].map(R=>E[R]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(E=>yt(a.total[E])!==null)?l(a.total):null,u=typeof e.id=="string"&&e.id.length>0||typeof e.id=="number"&&Number.isSafeInteger(e.id)?e.id:null,d=yt(e.emittedAtMs)??u,m=yt(e.ordinal)??yt(r.ordinal),p=JSON.stringify([this.thread,this.id,c,l(a.last),d,u,m]),f=d!==null||m!==null;if(f&&this.session.seen.has(p))return!1;f&&this.session.seen.add(p);let g=a.last,h=yt(g.inputTokens),y=yt(g.cachedInputTokens),_={source:"wire",inputUncached:h===null||y===null||y>h?null:h-y,cacheRead:y,cacheWrite:yt(g.cacheWriteInputTokens??0),output:yt(g.outputTokens),reasoning:yt(g.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:yn([g.inputTokens,g.cachedInputTokens,g.cacheWriteInputTokens,g.outputTokens,g.reasoningOutputTokens])||h!==null&&y!==null&&y>h};[_.inputUncached,_.cacheRead,_.cacheWrite,_.output].includes(null)&&(_.reason="counter_not_exposed");let v=r.model??g.model;if(typeof v=="string"&&v&&v!=="<synthetic>"&&this.reported.add(v),!this.value)this.value=_;else{for(let E of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let R=this.value[E],S=_[E];R!==null&&S!==null&&yt(R+S)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[E]=wj(this.value[E],_[E])}this.value.reason=this.value.reason||_.reason,this.value.invalidCounters||=_.invalidCounters}return!0}usage(){if(this.value)return{...this.value,modelReported:this.reported.size>1?null:[...this.reported][0]??this.session.models.get(this.thread)??null,mixedModels:this.reported.size>1}}finish(){this.ended=!0,this.id&&this.session.remember(this.thread,this.id)}}});import{readFileSync as Ej,writeFileSync as J5,mkdirSync as V5}from"node:fs";import{join as Tj,dirname as K5}from"node:path";import{homedir as Sj}from"node:os";function Rj(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function Ij(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=Rj(t.slice(e+1).trim());return n?{key:n,value:r}:null}function xj(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Zc(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function Aj(){return Tj(Sj(),".lmctl","config.toml")}function jr(t){let e=t??Aj(),n;try{n=Ej(e,"utf-8")}catch{return{tools:{}}}return Cj(n)}function eS(t){if(typeof t=="number")return Number.isFinite(t)?t:null;let e=String(t).trim();if(!e)return null;let n=e.match(/^(\d+(?:\.\d+)?)\s*([KkMm]?)$/);if(!n)return null;let r=parseFloat(n[1]);if(!Number.isFinite(r))return null;switch(n[2]){case"K":case"k":return Math.round(r*1e3);case"M":case"m":return Math.round(r*1e6);default:return Math.round(r)}}function Cj(t){let e={},n={},r=t.split(`
2243
+ `),s={kind:"none"},i={},o=!1,a={};function l(){if(s.kind==="tool"){let d=e[s.tool]??{};if(s.profile){let m=d.profiles?.[s.profile]??{};i.description&&(m.description=i.description),i.flags!==void 0&&(m.flags=i.flags),d.profiles||(d.profiles={}),d.profiles[s.profile]=m}else i.start&&(d.start=i.start),i.resume&&(d.resume=i.resume),i.agent&&(d.agent=i.agent),i.profile_flag!==void 0&&(d.profile_flag=i.profile_flag);e[s.tool]=d}else if(s.kind==="compact"){let d=s.provider?n.providers?.[s.provider]??{}:n.global??{};if(i.min!==void 0){let m=eS(i.min);m!==null&&(d.min=m)}if(i.max!==void 0){let m=eS(i.max);m!==null&&(d.max=m)}s.provider?(n.providers||(n.providers={}),n.providers[s.provider]=d):n.global=d}i={}}for(let d of r){let m=d.trim();if(!m||m.startsWith("#"))continue;let p=xj(m);if(p!==null){if(o=!0,l(),p.startsWith("tool.")){let g=".profile.",h=p.indexOf(g);h!==-1?s={kind:"tool",tool:p.slice(5,h),profile:p.slice(h+g.length)}:s={kind:"tool",tool:p.slice(5),profile:null}}else p==="compact"?s={kind:"compact",provider:null}:p.startsWith("compact.")?s={kind:"compact",provider:p.slice(8)}:s={kind:"none"};continue}let f=Ij(m);f&&s.kind!=="none"?i[f.key]=f.value:f&&!o&&(a[f.key]=f.value)}l();let c={tools:e};(n.global||n.providers)&&(c.compact=n);let u=a.site_name;return u!==void 0&&u.length>0&&(c.site_name=u),c}function Nj(t,e,n){if(!n)return"";let r=t.tools[e]??Hf[e],s=r?.profiles?.[n]?.flags??Hf[e]?.profiles?.[n]?.flags;if(s!==void 0)return s.trim();if(r?.profile_flag)return r.profile_flag.replace(/\{\{profile\}\}/g,n).trim();throw new Error(`Profile "${n}" is not configured for tool "${e}"`)}function tS(t,e){return!!t.tools[e]}function nS(t,e,n,r,s){let i=t.tools[e]??Hf[e],o;if(i?.agent){let l=Zc(r);o=i.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=kj[e];if(!l)throw new Error(`No agent command configured for tool "${e}"`);let c=l.argv.map(u=>u.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,r));if(l.mode==="stdin"){let u=c.map(Zc).join(" ");o=`printf '%s\\n' ${Zc(r)} | ${u}`}else o=c.map(Zc).join(" ")}let a=Nj(t,e,s);return a&&(o+=" "+a),o}var Hf,kj,Ri=M(()=>{"use strict";Hf={muse:{start:"muse",resume:"muse resume {{session_id}} --yolo",profiles:{default:{description:"Default profile",flags:""}}},claude:{start:"claude",resume:"claude --resume {{session_id}} --dangerously-skip-permissions",profiles:{default:{description:"Default profile",flags:""}}},codex:{start:"codex",resume:"codex resume {{session_id}} --dangerously-bypass-approvals-and-sandbox",profiles:{default:{description:"Default profile",flags:""}}},opencode:{start:"opencode",resume:"opencode --session {{session_id}}",profiles:{default:{description:"Default profile",flags:""}}},gemini:{start:"gemini",resume:"gemini --resume {{session_id}} -y",profiles:{default:{description:"Default profile",flags:""}}},copilot:{start:"copilot",resume:"copilot --resume={{session_id}} --yolo",profiles:{default:{description:"Default profile",flags:""}}},qwen:{start:"qwen",resume:"qwen --resume {{session_id}} --approval-mode yolo",profiles:{default:{description:"Default profile",flags:""}}},agy:{start:"agy",resume:"agy --conversation {{session_id}} --dangerously-skip-permissions",profiles:{default:{description:"Default profile",flags:""}}},kimi:{start:"kimi --auto",resume:"kimi --session {{session_id}} --auto",profiles:{default:{description:"Default profile",flags:""}}},hermes:{start:"hermes",resume:"hermes --yolo --resume {{session_id}}",profiles:{default:{description:"Default profile",flags:""}}}},kj={claude:{mode:"argv",argv:["claude","-p","{{prompt}}","--resume","{{session_id}}"]},codex:{mode:"argv",argv:["codex","exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","resume","{{session_id}}","{{prompt}}"]},opencode:{mode:"argv",argv:["opencode","run","--session","{{session_id}}","{{prompt}}"]},gemini:{mode:"argv",argv:["gemini","-p","{{prompt}}","--resume","{{session_id}}"]},copilot:{mode:"argv",argv:["gh","copilot","--","--resume={{session_id}}","-p","{{prompt}}","-s","--allow-all-tools"]},qwen:{mode:"argv",argv:["qwen","-p","{{prompt}}","--resume","{{session_id}}","--approval-mode","yolo"]},agy:{mode:"argv",argv:["agy","--conversation","{{session_id}}","-p","{{prompt}}","--dangerously-skip-permissions","--print-timeout","8h"]},kimi:{mode:"argv",argv:["kimi","-p","{{prompt}}","--session","{{session_id}}","--output-format","stream-json"]},hermes:{mode:"argv",argv:["hermes","--yolo","-z","{{prompt}}","--resume","{{session_id}}"]}}});function rS(t=process.env){let e=t.LMCTL_ONE_SHOT_TIMEOUT_MS;if(!e)return 6e5;let n=Number(e);return!Number.isFinite(n)||n<=0?6e5:n}var sS=M(()=>{"use strict"});function tu(t){let e=t?.prompt??ce;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${ce}${Lj}${t.teamfile}:
2244
+ ${n}${Mj}${JSON.stringify(t.teamfile)}${Pj}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
2245
+ ${e}`),e}var Oj,ce,eu,Lj,Mj,Pj,Qe=M(()=>{"use strict";Oj="ACK: waiting for explicit lmctl task.",ce=`lmctl seed initial connection only. Create or pin this provider session, then stop. Do not inspect files, run commands, infer a task, delegate, or edit. Reply exactly: ${Oj}`,eu=`send this exact lmctl seed instruction: "${ce}"`,Lj=`
2246
2246
 
2247
- Teamfile `,Oj=`
2247
+ Teamfile `,Mj=`
2248
2248
 
2249
- After this seed finishes, use \`lmctl prompt `,Lj=' <alias> "<message>"` to send a message. Do not run or use lmctl prompt during this seed. Reply only with the ACK above and wait.'});import{spawn as iS}from"node:child_process";import{mkdirSync as Mj}from"node:fs";var Is,be,at=M(()=>{"use strict";Uf();Ri();sS();Qe();ln();jc();an();Mr();Is=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},be=class t{name;capabilities;injection;protocol;provider;binary;seedArgs;seedTimeoutMs;seedStdin;resumeTemplate;startTemplate;transportFn;constructor(e){this.protocol=e.protocol,this.name=e.provider.name,this.provider=e.provider,this.capabilities=e.capabilities,this.injection=e.injection,this.binary=e.binary,this.seedArgs=e.seedArgs,this.seedTimeoutMs=e.seedTimeoutMs??6e4,this.seedStdin=e.seedStdin,this.resumeTemplate=e.resumeTemplate,this.startTemplate=e.startTemplate,this.transportFn=e.transport}discover(){return this.provider.discoverSessions()}load(e){return this.provider.loadSession(e)}resolvePath(e){return this.provider.resolveSessionPath(e)}delete(e){return this.provider.deleteSession(e)}getWatchPaths(){return this.provider.getWatchPaths?.()??[]}seedArgsFor(e){let n=e?.prompt;return n===void 0?this.seedArgs:this.seedArgs.map(r=>r===ce?n:r)}turnOptsFor(e){return e}get seedBinary(){return this.binary}seed(e,n){return n?.signal?.aborted?Promise.resolve({success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"}):(Mj(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=iS(this.binary,this.seedArgsFor(n),{cwd:e,env:Ti(n?.env,e),signal:n?.signal,stdio:["pipe","pipe","pipe"],timeout:this.seedTimeoutMs})}catch(l){return r({success:!1,error:l instanceof Error?l.message:String(l)})}let i="",o="";s.stdout?.on("data",l=>{i+=l.toString()}),s.stderr?.on("data",l=>{o+=l.toString()});let a=n?.prompt!==void 0&&this.seedStdin!==void 0?`${n.prompt}
2250
- `:this.seedStdin;a&&s.stdin?.write(a),s.stdin?.end(),s.on("exit",(l,c)=>{if(l===0&&!c)r({success:!0});else{let u=Ss(o).trim(),d=Ss(i).trim(),m=u||d;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:m?Oe(m,{provider:this.name}):c?`terminated by ${c}`:`exit code ${l}`})}}),s.on("error",l=>{r({success:!1,error:l.message,errorCode:l.code})})}))}resumeCommand(e,n){return this.resumeTemplate.replace(/\{\{session_id\}\}/g,e)}startCommand(e){return this.startTemplate}manualSeedHint(e){return{launchCommand:`cd ${e} && ${this.binary}`,postLaunchNote:eu,lsCommand:`lmctl ls --provider ${this.name} --sessiondir ${e}`}}static DEFAULT_IDLE_TIMEOUT_MS=8*60*60*1e3;sendTurn(e,n){let r=this.turnOptsFor(n);if(r.userConfig&&tS(r.userConfig,this.name)){let i=r.userConfig.tools[this.name];if(i?.agent)return this.runOneShotAgent(e,r,i.agent)}let s=r.timeoutMs??t.DEFAULT_IDLE_TIMEOUT_MS;return s<=0&&!r.signal?this.transportFn(e,{...r,binary:this.binary}):this.withTimeouts(s,e,r)}withTimeouts(e,n,r){let s=new AbortController,i,o,a="",l,c=r.sessionId,u,d=()=>{e<=0||(clearTimeout(i),i=setTimeout(()=>{r.onIdleWarning?.(e),m(),s.abort(),u&&u({text:a,...l?{usage:l}:{},sessionId:c,durationMs:e,status:"stalled",stalledAfterMs:e})},e))},m=()=>{clearTimeout(i)};r.signal&&(r.signal.aborted?(o="external",s.abort()):r.signal.addEventListener("abort",()=>{o="external",s.abort()},{once:!0})),d();let p={...r,binary:this.binary,signal:s.signal,onUsage:h=>{l=h,r.onUsage?.(h)},onSessionId:h=>{h&&(c=h),r.onSessionId?.(h)},onDelta:h=>{a+=h,d(),r.onDelta?.(h)},onProgress:h=>{h.kind!=="api_retry"&&d(),r.onProgress?.(h)}},f=this.transportFn(n,p).then(h=>(m(),{...h,status:h.status??"ok"})).catch(h=>{throw m(),o==="external"?Object.assign(new Is("Turn cancelled","external"),{usage:h.usage??l,sessionId:c}):h}),g=new Promise(h=>{u=h});return Promise.race([f,g])}runOneShotAgent(e,n,r){let s=nS(n.userConfig,this.name,n.sessionId,e,n.profile),i=Date.now();return new Promise((o,a)=>{let l=n.timeoutMs!==void 0&&n.timeoutMs<=0?0:rS(n.env),c=iS(s,{shell:!0,cwd:n.cwd,env:Ue(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),u=!1,d=!1,m,p,f=!1,g=null,h=null,y=()=>{clearTimeout(m),m=setTimeout(()=>{!jf(_)&&!$f(_)&&E(g,h)},100)},b=l>0?setTimeout(()=>{d=!0,c.kill(),this.name==="codex"&&E(null)},l):void 0,_="",v="";if(c.stdout?.on("data",R=>{let S=R.toString();_+=S,n.onDelta?.(S),f&&!u&&y()}),c.stderr?.on("data",R=>{v+=R.toString(),f&&!u&&y()}),n.signal){if(n.signal.aborted)return clearTimeout(b),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let E=(R,S=null)=>{if(u)return;u=!0,clearTimeout(b),clearTimeout(m),clearTimeout(p),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let I=Date.now()-i,N=this.name==="codex"?ZT(_):{};N.usage&&n.onUsage?.(N.usage),N.sessionId&&n.onSessionId?.(N.sessionId);let O=A=>Object.assign(A,{usage:N.usage,sessionId:N.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new Is("Turn cancelled","external")));else if(d)a(O(new Error(`Agent command timed out after ${l}ms`)));else if(R===0||R===null&&S===null)o({text:_.trim(),sessionId:N.sessionId??n.sessionId,durationMs:I,...N.usage?{usage:N.usage}:{}});else{let A=v.trim();a(O(new Me(A?Oe(A,{provider:this.name}):S?`Agent command terminated by ${S}`:`Agent command exited with code ${R}`,R,S,v)))}};this.name==="codex"?(c.on("close",(R,S)=>E(R,S)),c.on("exit",(R,S)=>{u||(f=!0,g=R,h=S,y(),p=setTimeout(()=>E(R,S),5e3))})):c.on("exit",(R,S)=>E(R,S)),c.on("error",R=>{u||(u=!0,clearTimeout(b),clearTimeout(m),clearTimeout(p),a(R))})})}}});function aS(t){if(!t.length)return;let e={...t[0]},n=new Set(t.map(r=>r.modelReported).filter(r=>r!==null));for(let r of t.slice(1)){for(let s of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let i=e[s],o=r[s];i!==null&&o!==null&&He(i+o)===null&&(e.invalidCounters=!0),e[s]=i===null||o===null?null:He(i+o)}e.invalidCounters||=r.invalidCounters,e.reason||=r.reason}return e.modelReported=n.size===1?[...n][0]:null,e.mixedModels=n.size>1,(e.invalidCounters||["inputUncached","cacheRead","cacheWrite","output"].some(r=>e[r]===null))&&(e.reason="counter_not_exposed"),e}var He,Ur,oS,nu,Ii,ru=M(()=>{"use strict";Po();He=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,Ur=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,oS=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});nu=class{constructor(e,n){this.session=e;this.seen=n}parts=[];event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=Ur(r?.first?.id),i=Ur(r?.last?.id),o=Ur(r?.stream?.id),a=Ur(r?.stream?.kind),l=s&&i&&o&&a?JSON.stringify([this.session,a,o,s,i]):Ur(e.viewCursor)?JSON.stringify([this.session,e.viewCursor]):null;if(l&&this.seen.has(l))return!1;l&&this.seen.add(l);let c=e.usage,u=He(e.promptTokens),d=He(c.outputTokens),m=He(c.cacheReadTokens),p=He(c.cacheWriteTokens),f=u===0,g=m??(f?0:null),h=p??(f?0:null),y=u!==null&&g!==null&&h!==null&&g+h<=u?u-g-h:null,b=(g??0)>0||(h??0)>0,_={...oS(),inputUncached:y,cacheRead:g,cacheWrite:h,output:d,reasoning:He(c.reasoningTokens),modelReported:Ur(e.modelId),invalidCounters:yn([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||b||y===null||d===null||He(e.totalTokens)!==null&&u!==null&&d!==null&&e.totalTokens!==u+d||He(c.reasoningTokens)!==null&&d!==null&&c.reasoningTokens>d};return this.parts.push(_),!0}usage(){return aS(this.parts)}},Ii=class{constructor(e,n,r){this.session=e;this.boundary=n;this.seen=r}parts=new Map;ownershipUncertain=!1;latestSnapshot;invalidateOwnership(){this.ownershipUncertain=!0,this.latestSnapshot&&(this.latestSnapshot.invalidCounters=!0,this.latestSnapshot.reason="counter_not_exposed")}update(e,n=1/0){let r=e.filter(l=>He(l.seq)!==null&&l.seq>this.boundary&&l.seq<=n),s=r.find(l=>l.type==="turn/start")?.data?.turn,i=new Set(r.map(l=>l.data?.turn).filter(l=>He(l)!==null)),o=this.ownershipUncertain||i.size>1,a=new Map;for(let l of r){let c=l.data;if(!c||s!==void 0&&c.turn!==s)continue;let u=l.type==="assistant/message",d=u?c.usage:l.type==="assistant/chunk"&&c.chunk?.type==="usage"?c.chunk.usage:void 0;if(!d||typeof d!="object")continue;let m=He(c.turn)!==null&&He(c.step)!==null?["step",c.turn,c.step]:Ur(c.message?.id)?["message",c.message.id]:["seq",l.seq],p=JSON.stringify([this.session,...m]);if(this.seen.has(p))continue;let f=a.get(p);(!f||u||!f.final)&&a.set(p,{record:l,final:u})}this.parts=new Map;for(let[l,{record:c,final:u}]of a){let d=c.data,m=u?d.usage:d.chunk.usage;this.parts.set(l,{...oS(),inputUncached:He(m.inputTokens),cacheRead:He(m.cacheReadTokens),output:He(m.outputTokens),reasoning:He(m.reasoningTokens),modelReported:Ur(d.message?.source?.model),invalidCounters:o||[m.inputTokens,m.cacheReadTokens,m.outputTokens].some(p=>He(p)===null)||yn([m.inputTokens,m.cacheReadTokens,m.outputTokens,m.reasoningTokens])||He(m.reasoningTokens)!==null&&He(m.outputTokens)!==null&&m.reasoningTokens>m.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=aS([...this.parts.values()]);return e&&this.ownershipUncertain&&(e.invalidCounters=!0,e.reason="counter_not_exposed"),this.latestSnapshot=e,e}finish(){for(let e of this.parts.keys())this.seen.add(e)}}});import{spawn as Pj}from"node:child_process";import{randomBytes as Dj}from"node:crypto";import{realpath as su}from"node:fs/promises";function fa(){let t=Dj(16);t.writeUIntBE(Date.now(),0,6),t[6]=t[6]&15|112,t[8]=t[8]&63|128;let e=t.toString("hex");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}async function iu(t){if(t.signal?.aborted)throw new Error("Aborted");if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t.sessionId))throw new Error("Muse requires a native session UUID");let e=t.permissionMode==="plan",n=["serve",...e?["--disable-write","--disable-shell"]:["--disable-sandbox","--trust-workspace"],...t.model?["--model",t.model]:[]];qe("muse",n,t.permissionMode??"yolo");let r=Pj(t.progPath??"muse",n,{cwd:t.cwd,env:Ue(t.env,t.cwd,t.sessionId),stdio:["pipe","pipe","pipe"]}),s,i=new Set,o=new Set,a,l,c=!1,u=!1,d=!1,m=!1,p=0,f=uT(),g=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",w=>{f.append(w)});let y=(w,T,k)=>{if(s===w){if(s=void 0,w.id&&o.add(w.id),T){let x=w.usage.usage()??(w.outcome?{source:null,inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:"turn_not_completed"}:void 0);Object.assign(T,{usage:x?{...x,outcome:w.outcome}:void 0,sessionId:h})}else k&&(k.usage=w.usage.usage());w.cleanup(),w.drained(),w.settled||(w.settled=!0,T?w.reject(T):(p++,w.resolve(k)))}},b=w=>{a||(a=w,s&&y(s,a),v.close(a),!m&&!c&&ve(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},_=(w,T)=>{let k=T.params;if(!k||k.sessionId!==h)return;let x=T.method;if(x==="view/gap"||x==="session/closed"){b(new Error(`Muse ${x}: the conversation cannot continue without reopening`));return}if(x==="turn/unqueued"&&k.turnId===w.id){w.outcome="cancelled",y(w,new Is("Muse queued turn cancelled","external"));return}x==="turn/started"&&k.turnId===w.id&&(w.queued=!1);let C=k.item,L=k.turnId??C?.turnId;if(L&&L!==w.id||x==="session/tokenUsage"&&(w.settled||k.turnId!==w.id||!w.usage.event(k,w.id)))return;w.opts.onEvent?.(T);let P={kind:"other",raw:T};if(["item/started","item/updated","item/completed"].includes(x)&&C?.turnId===w.id&&typeof C.itemId=="string"){let F=w.items.get(C.itemId);if(F&&typeof C.revision=="number"&&C.revision<=F.revision)return;w.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&x!=="item/updated"?P={kind:x==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...x==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:T}:C.kind==="reasoning"?P={kind:"thinking",raw:T}:C.kind==="agentMessage"&&(P={kind:"text",raw:T})}else if(x==="item/delta"&&typeof k.itemId=="string"&&typeof k.delta=="string"){let F=w.items.get(k.itemId);if(!F)return;F.kind==="agentMessage"&&(k.field===void 0||k.field==="text")?(F.text=(F.text??"")+k.delta,w.cancelled||w.opts.onDelta?.(k.delta),P={kind:"text",raw:T}):F.kind==="reasoning"&&(P={kind:"thinking",raw:T})}if(w.cancelled||w.opts.onProgress?.(P),x!=="turn/completed"||k.turnId!==w.id)return;if(!["completed","failed","cancelled"].includes(k.terminal)){b(new Error(`Muse returned an unknown turn terminal: ${String(k.terminal)}`));return}if(w.cancelled||k.terminal==="cancelled"){w.outcome="cancelled",y(w,new Is("Muse turn cancelled",w.cancelled?"external":"provider"));return}if(k.terminal!=="completed"){w.outcome="error",y(w,new Error(k.error?.message??k.reason??`Muse turn ended with ${String(k.terminal)}`));return}let j=[...w.items.values()].filter(F=>F.kind==="agentMessage");y(w,void 0,{text:j.map(F=>typeof F.text=="string"?F.text:"").join(`
2251
- `),sessionId:h,durationMs:typeof k.durationMs=="number"?k.durationMs:Date.now()-w.started,stopReason:k.terminal,...j.some(F=>F.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},v=Dr(r,{provider:"muse",protocol:"msp",onProtocolError:b,onNotification:w=>{if(g=Date.now(),w.method==="view/gap"||w.method==="session/closed"){w.params?.sessionId===h&&!c&&b(new Error(`Muse ${w.method}: session must be reopened`));return}let T=s;T&&(T.id?_(T,w):T.events.push(w))}}),E=async(w,T,k=fa())=>(await v.sendRpc(w,{...T,commandId:k})).result,R=w=>{!w.id||w.interruptSent||s!==w||(w.interruptSent=!0,E("turn/interrupt",{sessionId:h,turnId:w.id}).catch(T=>{s===w&&b(T instanceof Error?T:new Error(String(T)))}))},S=w=>{!w.id||w.unqueueSent||s!==w||(w.unqueueSent=!0,E("turn/unqueue",{sessionId:h,turnId:w.id}).catch(T=>{let k=T instanceof Error?T.message:String(T);/already started|not queued|launch boundary|turn is running/i.test(k)?(w.queued=!1,R(w)):s===w&&b(T instanceof Error?T:new Error(k))}))},I=w=>{w.queued?S(w):R(w)};r.on("error",w=>b(new Error(`Unable to start Muse: ${w.message}`)));let N=()=>{c||m||a||d||(d=!0,ve(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(w=>b(w instanceof Error?w:new Error(String(w)))))};r.stdin.on("error",N),r.stdout.on("end",N),r.on("exit",()=>{m=!0}),r.on("close",(w,T)=>{m=!0,c?v.close(new Error("Muse session closed")):b(new Error(Ei(`Muse exited (${T??w}) after ${p} completed prompt(s)`,f.text().trim()?Oe(f.text(),{provider:"muse"}):""))),s&&y(s,new Error("Muse session closed"))});let O=()=>{if(l)return l;c=!0;let w=!!s;return s&&(s.cancelled=!0,I(s)),l=(async()=>{m||(await new Promise(T=>Sn(u?t.holdOpen:void 0,{isAborted:()=>w,hasChildExited:()=>m,isTurnInFlight:()=>!!s,lastEventAtMs:()=>g,closeStdin:()=>{r.stdin.end(),T()},label:"muse"})),await ve(r,{stdinEnd:!1,softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{})),s&&y(s,new Error("Muse session closed")),v.close(new Error("Muse session closed"))})(),l},A=()=>{b(new Error("Aborted")),O()};t.signal?.addEventListener("abort",A,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let w=(await v.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(w?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof w.museHome!="string"||await su(w.museHome)!==await su(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(w.sessionDurability!==void 0&&w.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");v.sendNotification("initialized");let T=e?"denyUnmatched":"allowAll",x=(t.create?await E("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:T,...t.model?{modelId:t.model}:{}}):await E("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(x?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof x.workspaceRoot!="string"||await su(x.workspaceRoot)!==await su(t.cwd))throw new Error("Muse session belongs to a different working directory");if(x.activeTurnId||x.status!=="idle")throw new Error(`Muse session is not idle (${String(x.status)})`);if((await E("session/setApprovalMode",{sessionId:h,mode:T}))?.effectiveMode?.mode!==T)throw new Error("Muse did not apply the requested approval mode");if(!t.create&&t.model&&x.modelId!==t.model&&(await E("session/setModel",{sessionId:h,model:{modelId:t.model,...x.providerId?{providerId:x.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");u=!0}catch(w){throw await O(),a??w}finally{t.signal?.removeEventListener("abort",A)}return{provider:"muse",sessionId:h,get completedTurns(){return p},close:O,async sendTurn(w,T={}){if(s?.cancelled&&await s.drain,a)throw new Error(a.message);if(c)throw new Error("Muse session is closed");if(s)throw new Error("Muse already has an active turn");if(T.signal?.aborted)throw new Error("Aborted");return new Promise((k,x)=>{let C,L=new Promise(F=>{C=F}),P={usage:new nu(h,i),commandId:fa(),events:[],items:new Map,opts:T,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:k,reject:x,drain:L,drained:C,cleanup:()=>{}};s=P;let j=()=>{P.cancelled=!0,P.settled=!0,x(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),I(P)};P.cleanup=()=>T.signal?.removeEventListener("abort",j),T.signal?.addEventListener("abort",j,{once:!0}),E("turn/start",{sessionId:h,input:[{type:"text",text:w}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then(F=>{if(s===P){if(F?.commandId!==P.commandId||F.status!=="accepted"||!["started","queued"].includes(F.disposition)||typeof F.turnId!="string"||F.turnId.length===0||o.has(F.turnId)){b(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=F.turnId,P.queued=F.disposition==="queued",P.cancelled&&I(P);for(let Z of P.events)s===P&&_(P,Z);P.events=[]}},F=>{s===P&&y(P,F instanceof Error?F:new Error(String(F)))})})}}}var lS=M(()=>{"use strict";ru();at();_f();ks();ln();sa();kn();an()});import{join as Bf}from"node:path";import{mkdir as Fj}from"node:fs/promises";function Wf(t={}){let e=Ol(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,i)=>{if(i.bundleSession)return Zn(i.bundleSession,"muse",i.sessionId,s,i);let o=i.sessionId||fa(),a=await iu({...i,sessionId:o,create:i.sessionId==="",env:n(i.env),expectedHome:Bf(e,"muse")});try{return await a.sendTurn(s,i)}finally{await a.close()}};return new class extends be{constructor(){super({provider:new Nl({museDataHome:e}),protocol:{transport:"muse-msp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"muse",seedArgs:[],startTemplate:"muse",resumeTemplate:"muse resume {{session_id}}",transport:r})}openSession(s){return iu({...s,env:n(s.env),expectedHome:Bf(e,"muse")})}async seed(s,i){await Fj(s,{recursive:!0});let o=fa(),a,l;try{a=await iu({sessionId:o,cwd:s,create:!0,env:n(i?.env),signal:i?.signal,expectedHome:Bf(e,"muse"),model:i?.model,effort:i?.effort}),i?.signal?.throwIfAborted();try{i?.onDispatch?.()}catch{}let c=await a.sendTurn(i?.prompt??ce,{signal:i?.signal});if(l=c.usage,await a.close(),!await this.load(o))throw new Error("Muse seed did not persist a readable native session");return{success:!0,sessionId:o,usage:c.usage}}catch(c){return{success:!1,sessionId:o,usage:c?.usage??l,error:`Muse seed failed: ${c instanceof Error?c.message:String(c)}`}}finally{await a?.close()}}}}var qf=M(()=>{"use strict";at();Pm();lS();$r();Qe()});function uS(t){if(t.length===0)return"";if(t.length===1)return t[0];let e=[];for(let n=0;n<t.length;n++)n===0?e.push(t[n]):e.push(`
2249
+ After this seed finishes, use \`lmctl prompt `,Pj=' <alias> "<message>"` to send a message. Do not run or use lmctl prompt during this seed. Reply only with the ACK above and wait.'});import{spawn as iS}from"node:child_process";import{mkdirSync as Dj}from"node:fs";var Is,be,at=M(()=>{"use strict";Uf();Ri();sS();Qe();ln();jc();an();Mr();Is=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},be=class t{name;capabilities;injection;protocol;provider;binary;seedArgs;seedTimeoutMs;seedStdin;resumeTemplate;startTemplate;transportFn;constructor(e){this.protocol=e.protocol,this.name=e.provider.name,this.provider=e.provider,this.capabilities=e.capabilities,this.injection=e.injection,this.binary=e.binary,this.seedArgs=e.seedArgs,this.seedTimeoutMs=e.seedTimeoutMs??6e4,this.seedStdin=e.seedStdin,this.resumeTemplate=e.resumeTemplate,this.startTemplate=e.startTemplate,this.transportFn=e.transport}discover(){return this.provider.discoverSessions()}load(e){return this.provider.loadSession(e)}resolvePath(e){return this.provider.resolveSessionPath(e)}delete(e){return this.provider.deleteSession(e)}getWatchPaths(){return this.provider.getWatchPaths?.()??[]}seedArgsFor(e){let n=e?.prompt;return n===void 0?this.seedArgs:this.seedArgs.map(r=>r===ce?n:r)}turnOptsFor(e){return e}get seedBinary(){return this.binary}seed(e,n){return n?.signal?.aborted?Promise.resolve({success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"}):(Dj(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=iS(this.binary,this.seedArgsFor(n),{cwd:e,env:Ti(n?.env,e),signal:n?.signal,stdio:["pipe","pipe","pipe"],timeout:this.seedTimeoutMs})}catch(l){return r({success:!1,error:l instanceof Error?l.message:String(l)})}let i="",o="";s.stdout?.on("data",l=>{i+=l.toString()}),s.stderr?.on("data",l=>{o+=l.toString()});let a=n?.prompt!==void 0&&this.seedStdin!==void 0?`${n.prompt}
2250
+ `:this.seedStdin;a&&s.stdin?.write(a),s.stdin?.end(),s.on("exit",(l,c)=>{if(l===0&&!c)r({success:!0});else{let u=Ss(o).trim(),d=Ss(i).trim(),m=u||d;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:m?Oe(m,{provider:this.name}):c?`terminated by ${c}`:`exit code ${l}`})}}),s.on("error",l=>{r({success:!1,error:l.message,errorCode:l.code})})}))}resumeCommand(e,n){return this.resumeTemplate.replace(/\{\{session_id\}\}/g,e)}startCommand(e){return this.startTemplate}manualSeedHint(e){return{launchCommand:`cd ${e} && ${this.binary}`,postLaunchNote:eu,lsCommand:`lmctl ls --provider ${this.name} --sessiondir ${e}`}}static DEFAULT_IDLE_TIMEOUT_MS=8*60*60*1e3;sendTurn(e,n){let r=this.turnOptsFor(n);if(r.userConfig&&tS(r.userConfig,this.name)){let i=r.userConfig.tools[this.name];if(i?.agent)return this.runOneShotAgent(e,r,i.agent)}let s=r.timeoutMs??t.DEFAULT_IDLE_TIMEOUT_MS;return s<=0&&!r.signal?this.transportFn(e,{...r,binary:this.binary}):this.withTimeouts(s,e,r)}withTimeouts(e,n,r){let s=new AbortController,i,o,a="",l,c=r.sessionId,u,d=()=>{e<=0||(clearTimeout(i),i=setTimeout(()=>{r.onIdleWarning?.(e),m(),s.abort(),u&&u({text:a,...l?{usage:l}:{},sessionId:c,durationMs:e,status:"stalled",stalledAfterMs:e})},e))},m=()=>{clearTimeout(i)};r.signal&&(r.signal.aborted?(o="external",s.abort()):r.signal.addEventListener("abort",()=>{o="external",s.abort()},{once:!0})),d();let p={...r,binary:this.binary,signal:s.signal,onUsage:h=>{l=h,r.onUsage?.(h)},onSessionId:h=>{h&&(c=h),r.onSessionId?.(h)},onDelta:h=>{a+=h,d(),r.onDelta?.(h)},onProgress:h=>{h.kind!=="api_retry"&&d(),r.onProgress?.(h)}},f=this.transportFn(n,p).then(h=>(m(),{...h,status:h.status??"ok"})).catch(h=>{throw m(),o==="external"?Object.assign(new Is("Turn cancelled","external"),{usage:h.usage??l,sessionId:c}):h}),g=new Promise(h=>{u=h});return Promise.race([f,g])}runOneShotAgent(e,n,r){let s=nS(n.userConfig,this.name,n.sessionId,e,n.profile),i=Date.now();return new Promise((o,a)=>{let l=n.timeoutMs!==void 0&&n.timeoutMs<=0?0:rS(n.env),c=iS(s,{shell:!0,cwd:n.cwd,env:Ue(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),u=!1,d=!1,m,p,f=!1,g=null,h=null,y=()=>{clearTimeout(m),m=setTimeout(()=>{!jf(_)&&!$f(_)&&E(g,h)},100)},b=l>0?setTimeout(()=>{d=!0,c.kill(),this.name==="codex"&&E(null)},l):void 0,_="",v="";if(c.stdout?.on("data",R=>{let S=R.toString();_+=S,n.onDelta?.(S),f&&!u&&y()}),c.stderr?.on("data",R=>{v+=R.toString(),f&&!u&&y()}),n.signal){if(n.signal.aborted)return clearTimeout(b),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let E=(R,S=null)=>{if(u)return;u=!0,clearTimeout(b),clearTimeout(m),clearTimeout(p),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let I=Date.now()-i,N=this.name==="codex"?ZT(_):{};N.usage&&n.onUsage?.(N.usage),N.sessionId&&n.onSessionId?.(N.sessionId);let O=A=>Object.assign(A,{usage:N.usage,sessionId:N.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new Is("Turn cancelled","external")));else if(d)a(O(new Error(`Agent command timed out after ${l}ms`)));else if(R===0||R===null&&S===null)o({text:_.trim(),sessionId:N.sessionId??n.sessionId,durationMs:I,...N.usage?{usage:N.usage}:{}});else{let A=v.trim();a(O(new Me(A?Oe(A,{provider:this.name}):S?`Agent command terminated by ${S}`:`Agent command exited with code ${R}`,R,S,v)))}};this.name==="codex"?(c.on("close",(R,S)=>E(R,S)),c.on("exit",(R,S)=>{u||(f=!0,g=R,h=S,y(),p=setTimeout(()=>E(R,S),5e3))})):c.on("exit",(R,S)=>E(R,S)),c.on("error",R=>{u||(u=!0,clearTimeout(b),clearTimeout(m),clearTimeout(p),a(R))})})}}});function aS(t){if(!t.length)return;let e={...t[0]},n=new Set(t.map(r=>r.modelReported).filter(r=>r!==null));for(let r of t.slice(1)){for(let s of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let i=e[s],o=r[s];i!==null&&o!==null&&He(i+o)===null&&(e.invalidCounters=!0),e[s]=i===null||o===null?null:He(i+o)}e.invalidCounters||=r.invalidCounters,e.reason||=r.reason}return e.modelReported=n.size===1?[...n][0]:null,e.mixedModels=n.size>1,(e.invalidCounters||["inputUncached","cacheRead","cacheWrite","output"].some(r=>e[r]===null))&&(e.reason="counter_not_exposed"),e}var He,Ur,oS,nu,Ii,ru=M(()=>{"use strict";Po();He=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,Ur=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,oS=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});nu=class{constructor(e,n){this.session=e;this.seen=n}parts=[];event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=Ur(r?.first?.id),i=Ur(r?.last?.id),o=Ur(r?.stream?.id),a=Ur(r?.stream?.kind),l=s&&i&&o&&a?JSON.stringify([this.session,a,o,s,i]):Ur(e.viewCursor)?JSON.stringify([this.session,e.viewCursor]):null;if(l&&this.seen.has(l))return!1;l&&this.seen.add(l);let c=e.usage,u=He(e.promptTokens),d=He(c.outputTokens),m=He(c.cacheReadTokens),p=He(c.cacheWriteTokens),f=u===0,g=m??(f?0:null),h=p??(f?0:null),y=u!==null&&g!==null&&h!==null&&g+h<=u?u-g-h:null,b=(g??0)>0||(h??0)>0,_={...oS(),inputUncached:y,cacheRead:g,cacheWrite:h,output:d,reasoning:He(c.reasoningTokens),modelReported:Ur(e.modelId),invalidCounters:yn([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||b||y===null||d===null||He(e.totalTokens)!==null&&u!==null&&d!==null&&e.totalTokens!==u+d||He(c.reasoningTokens)!==null&&d!==null&&c.reasoningTokens>d};return this.parts.push(_),!0}usage(){return aS(this.parts)}},Ii=class{constructor(e,n,r){this.session=e;this.boundary=n;this.seen=r}parts=new Map;ownershipUncertain=!1;latestSnapshot;invalidateOwnership(){this.ownershipUncertain=!0,this.latestSnapshot&&(this.latestSnapshot.invalidCounters=!0,this.latestSnapshot.reason="counter_not_exposed")}update(e,n=1/0){let r=e.filter(l=>He(l.seq)!==null&&l.seq>this.boundary&&l.seq<=n),s=r.find(l=>l.type==="turn/start")?.data?.turn,i=new Set(r.map(l=>l.data?.turn).filter(l=>He(l)!==null)),o=this.ownershipUncertain||i.size>1,a=new Map;for(let l of r){let c=l.data;if(!c||s!==void 0&&c.turn!==s)continue;let u=l.type==="assistant/message",d=u?c.usage:l.type==="assistant/chunk"&&c.chunk?.type==="usage"?c.chunk.usage:void 0;if(!d||typeof d!="object")continue;let m=He(c.turn)!==null&&He(c.step)!==null?["step",c.turn,c.step]:Ur(c.message?.id)?["message",c.message.id]:["seq",l.seq],p=JSON.stringify([this.session,...m]);if(this.seen.has(p))continue;let f=a.get(p);(!f||u||!f.final)&&a.set(p,{record:l,final:u})}this.parts=new Map;for(let[l,{record:c,final:u}]of a){let d=c.data,m=u?d.usage:d.chunk.usage;this.parts.set(l,{...oS(),inputUncached:He(m.inputTokens),cacheRead:He(m.cacheReadTokens),output:He(m.outputTokens),reasoning:He(m.reasoningTokens),modelReported:Ur(d.message?.source?.model),invalidCounters:o||[m.inputTokens,m.cacheReadTokens,m.outputTokens].some(p=>He(p)===null)||yn([m.inputTokens,m.cacheReadTokens,m.outputTokens,m.reasoningTokens])||He(m.reasoningTokens)!==null&&He(m.outputTokens)!==null&&m.reasoningTokens>m.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=aS([...this.parts.values()]);return e&&this.ownershipUncertain&&(e.invalidCounters=!0,e.reason="counter_not_exposed"),this.latestSnapshot=e,e}finish(){for(let e of this.parts.keys())this.seen.add(e)}}});import{spawn as Fj}from"node:child_process";import{randomBytes as $j}from"node:crypto";import{realpath as su}from"node:fs/promises";function fa(){let t=$j(16);t.writeUIntBE(Date.now(),0,6),t[6]=t[6]&15|112,t[8]=t[8]&63|128;let e=t.toString("hex");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}async function iu(t){if(t.signal?.aborted)throw new Error("Aborted");if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t.sessionId))throw new Error("Muse requires a native session UUID");let e=t.permissionMode==="plan",n=["serve",...e?["--disable-write","--disable-shell"]:["--disable-sandbox","--trust-workspace"],...t.model?["--model",t.model]:[]];qe("muse",n,t.permissionMode??"yolo");let r=Fj(t.progPath??"muse",n,{cwd:t.cwd,env:Ue(t.env,t.cwd,t.sessionId),stdio:["pipe","pipe","pipe"]}),s,i=new Set,o=new Set,a,l,c=!1,u=!1,d=!1,m=!1,p=0,f=uT(),g=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",w=>{f.append(w)});let y=(w,T,k)=>{if(s===w){if(s=void 0,w.id&&o.add(w.id),T){let x=w.usage.usage()??(w.outcome?{source:null,inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:"turn_not_completed"}:void 0);Object.assign(T,{usage:x?{...x,outcome:w.outcome}:void 0,sessionId:h})}else k&&(k.usage=w.usage.usage());w.cleanup(),w.drained(),w.settled||(w.settled=!0,T?w.reject(T):(p++,w.resolve(k)))}},b=w=>{a||(a=w,s&&y(s,a),v.close(a),!m&&!c&&ve(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},_=(w,T)=>{let k=T.params;if(!k||k.sessionId!==h)return;let x=T.method;if(x==="view/gap"||x==="session/closed"){b(new Error(`Muse ${x}: the conversation cannot continue without reopening`));return}if(x==="turn/unqueued"&&k.turnId===w.id){w.outcome="cancelled",y(w,new Is("Muse queued turn cancelled","external"));return}x==="turn/started"&&k.turnId===w.id&&(w.queued=!1);let C=k.item,L=k.turnId??C?.turnId;if(L&&L!==w.id||x==="session/tokenUsage"&&(w.settled||k.turnId!==w.id||!w.usage.event(k,w.id)))return;w.opts.onEvent?.(T);let P={kind:"other",raw:T};if(["item/started","item/updated","item/completed"].includes(x)&&C?.turnId===w.id&&typeof C.itemId=="string"){let F=w.items.get(C.itemId);if(F&&typeof C.revision=="number"&&C.revision<=F.revision)return;w.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&x!=="item/updated"?P={kind:x==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...x==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:T}:C.kind==="reasoning"?P={kind:"thinking",raw:T}:C.kind==="agentMessage"&&(P={kind:"text",raw:T})}else if(x==="item/delta"&&typeof k.itemId=="string"&&typeof k.delta=="string"){let F=w.items.get(k.itemId);if(!F)return;F.kind==="agentMessage"&&(k.field===void 0||k.field==="text")?(F.text=(F.text??"")+k.delta,w.cancelled||w.opts.onDelta?.(k.delta),P={kind:"text",raw:T}):F.kind==="reasoning"&&(P={kind:"thinking",raw:T})}if(w.cancelled||w.opts.onProgress?.(P),x!=="turn/completed"||k.turnId!==w.id)return;if(!["completed","failed","cancelled"].includes(k.terminal)){b(new Error(`Muse returned an unknown turn terminal: ${String(k.terminal)}`));return}if(w.cancelled||k.terminal==="cancelled"){w.outcome="cancelled",y(w,new Is("Muse turn cancelled",w.cancelled?"external":"provider"));return}if(k.terminal!=="completed"){w.outcome="error",y(w,new Error(k.error?.message??k.reason??`Muse turn ended with ${String(k.terminal)}`));return}let j=[...w.items.values()].filter(F=>F.kind==="agentMessage");y(w,void 0,{text:j.map(F=>typeof F.text=="string"?F.text:"").join(`
2251
+ `),sessionId:h,durationMs:typeof k.durationMs=="number"?k.durationMs:Date.now()-w.started,stopReason:k.terminal,...j.some(F=>F.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},v=Dr(r,{provider:"muse",protocol:"msp",onProtocolError:b,onNotification:w=>{if(g=Date.now(),w.method==="view/gap"||w.method==="session/closed"){w.params?.sessionId===h&&!c&&b(new Error(`Muse ${w.method}: session must be reopened`));return}let T=s;T&&(T.id?_(T,w):T.events.push(w))}}),E=async(w,T,k=fa())=>(await v.sendRpc(w,{...T,commandId:k})).result,R=w=>{!w.id||w.interruptSent||s!==w||(w.interruptSent=!0,E("turn/interrupt",{sessionId:h,turnId:w.id}).catch(T=>{s===w&&b(T instanceof Error?T:new Error(String(T)))}))},S=w=>{!w.id||w.unqueueSent||s!==w||(w.unqueueSent=!0,E("turn/unqueue",{sessionId:h,turnId:w.id}).catch(T=>{let k=T instanceof Error?T.message:String(T);/already started|not queued|launch boundary|turn is running/i.test(k)?(w.queued=!1,R(w)):s===w&&b(T instanceof Error?T:new Error(k))}))},I=w=>{w.queued?S(w):R(w)};r.on("error",w=>b(new Error(`Unable to start Muse: ${w.message}`)));let N=()=>{c||m||a||d||(d=!0,ve(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(w=>b(w instanceof Error?w:new Error(String(w)))))};r.stdin.on("error",N),r.stdout.on("end",N),r.on("exit",()=>{m=!0}),r.on("close",(w,T)=>{m=!0,c?v.close(new Error("Muse session closed")):b(new Error(Ei(`Muse exited (${T??w}) after ${p} completed prompt(s)`,f.text().trim()?Oe(f.text(),{provider:"muse"}):""))),s&&y(s,new Error("Muse session closed"))});let O=()=>{if(l)return l;c=!0;let w=!!s;return s&&(s.cancelled=!0,I(s)),l=(async()=>{m||(await new Promise(T=>Sn(u?t.holdOpen:void 0,{isAborted:()=>w,hasChildExited:()=>m,isTurnInFlight:()=>!!s,lastEventAtMs:()=>g,closeStdin:()=>{r.stdin.end(),T()},label:"muse"})),await ve(r,{stdinEnd:!1,softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{})),s&&y(s,new Error("Muse session closed")),v.close(new Error("Muse session closed"))})(),l},A=()=>{b(new Error("Aborted")),O()};t.signal?.addEventListener("abort",A,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let w=(await v.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(w?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof w.museHome!="string"||await su(w.museHome)!==await su(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(w.sessionDurability!==void 0&&w.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");v.sendNotification("initialized");let T=e?"denyUnmatched":"allowAll",x=(t.create?await E("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:T,...t.model?{modelId:t.model}:{}}):await E("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(x?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof x.workspaceRoot!="string"||await su(x.workspaceRoot)!==await su(t.cwd))throw new Error("Muse session belongs to a different working directory");if(x.activeTurnId||x.status!=="idle")throw new Error(`Muse session is not idle (${String(x.status)})`);if((await E("session/setApprovalMode",{sessionId:h,mode:T}))?.effectiveMode?.mode!==T)throw new Error("Muse did not apply the requested approval mode");if(!t.create&&t.model&&x.modelId!==t.model&&(await E("session/setModel",{sessionId:h,model:{modelId:t.model,...x.providerId?{providerId:x.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");u=!0}catch(w){throw await O(),a??w}finally{t.signal?.removeEventListener("abort",A)}return{provider:"muse",sessionId:h,get completedTurns(){return p},close:O,async sendTurn(w,T={}){if(s?.cancelled&&await s.drain,a)throw new Error(a.message);if(c)throw new Error("Muse session is closed");if(s)throw new Error("Muse already has an active turn");if(T.signal?.aborted)throw new Error("Aborted");return new Promise((k,x)=>{let C,L=new Promise(F=>{C=F}),P={usage:new nu(h,i),commandId:fa(),events:[],items:new Map,opts:T,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:k,reject:x,drain:L,drained:C,cleanup:()=>{}};s=P;let j=()=>{P.cancelled=!0,P.settled=!0,x(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),I(P)};P.cleanup=()=>T.signal?.removeEventListener("abort",j),T.signal?.addEventListener("abort",j,{once:!0}),E("turn/start",{sessionId:h,input:[{type:"text",text:w}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then(F=>{if(s===P){if(F?.commandId!==P.commandId||F.status!=="accepted"||!["started","queued"].includes(F.disposition)||typeof F.turnId!="string"||F.turnId.length===0||o.has(F.turnId)){b(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=F.turnId,P.queued=F.disposition==="queued",P.cancelled&&I(P);for(let Z of P.events)s===P&&_(P,Z);P.events=[]}},F=>{s===P&&y(P,F instanceof Error?F:new Error(String(F)))})})}}}var lS=M(()=>{"use strict";ru();at();_f();ks();ln();sa();kn();an()});import{join as Bf}from"node:path";import{mkdir as jj}from"node:fs/promises";function Wf(t={}){let e=Ol(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,i)=>{if(i.bundleSession)return Zn(i.bundleSession,"muse",i.sessionId,s,i);let o=i.sessionId||fa(),a=await iu({...i,sessionId:o,create:i.sessionId==="",env:n(i.env),expectedHome:Bf(e,"muse")});try{return await a.sendTurn(s,i)}finally{await a.close()}};return new class extends be{constructor(){super({provider:new Nl({museDataHome:e}),protocol:{transport:"muse-msp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"muse",seedArgs:[],startTemplate:"muse",resumeTemplate:"muse resume {{session_id}}",transport:r})}openSession(s){return iu({...s,env:n(s.env),expectedHome:Bf(e,"muse")})}async seed(s,i){await jj(s,{recursive:!0});let o=fa(),a,l;try{a=await iu({sessionId:o,cwd:s,create:!0,env:n(i?.env),signal:i?.signal,expectedHome:Bf(e,"muse"),model:i?.model,effort:i?.effort}),i?.signal?.throwIfAborted();try{i?.onDispatch?.()}catch{}let c=await a.sendTurn(i?.prompt??ce,{signal:i?.signal});if(l=c.usage,await a.close(),!await this.load(o))throw new Error("Muse seed did not persist a readable native session");return{success:!0,sessionId:o,usage:c.usage}}catch(c){return{success:!1,sessionId:o,usage:c?.usage??l,error:`Muse seed failed: ${c instanceof Error?c.message:String(c)}`}}finally{await a?.close()}}}}var qf=M(()=>{"use strict";at();Pm();lS();$r();Qe()});function uS(t){if(t.length===0)return"";if(t.length===1)return t[0];let e=[];for(let n=0;n<t.length;n++)n===0?e.push(t[n]):e.push(`
2252
2252
 
2253
2253
  --- additional response (turn ${n+1} of ${t.length}; likely an injected mid-call notification) ---
2254
2254
 
2255
- `+t[n]);return e.join("")}function ou(t={}){let e=[],n="",r=!1,s=t.usageState,i,o=new Set,a=t.resultIds??s?.resultIds??new Set,l=u=>typeof u=="number"&&Number.isSafeInteger(u)&&u>=0?u:null,c=(u,d)=>u===null||d===null?null:u+d;return{processLine(u){if(!u.trim())return;let d;try{d=JSON.parse(u)}catch{return}let m=Gf(d,n||s?.sessionId||t.sessionId||"");if(m&&a.has(m))return;m&&a.add(m),t.onEvent?.(d);let p=d.type;if(p==="system"&&d.subtype==="init"&&(n=d.session_id||n,s&&(cS(s,n),typeof d.model=="string"&&(s.model=d.model))),p==="assistant"){let f=d.message;typeof f?.model=="string"&&f.model!=="<synthetic>"&&o.add(f.model);let g=f?.content;if(Array.isArray(g))for(let h of g)h.type==="text"&&h.text&&t.onText?.(h.text)}if(p==="result"&&(r=!0,e.push(d),s)){cS(s,typeof d.session_id=="string"?d.session_id:n);let f=d.usage,g=d.total_cost_usd,h=typeof g=="number"&&Number.isFinite(g)&&g>=0,y=s.cost,b=h&&y!==null&&g>=y?g-y:null;if(s.cost=h?g:null,f&&typeof f=="object"){let _=f.cache_creation,v=l(f.cache_creation_input_tokens),E=pp({cacheWrite5m:_?.ephemeral_5m_input_tokens,cacheWrite1h:_?.ephemeral_1h_input_tokens},v),R=f.output_tokens_details,S={source:"wire",inputUncached:l(f.input_tokens),cacheRead:l(f.cache_read_input_tokens),cacheWrite:l(f.cache_creation_input_tokens),output:l(f.output_tokens),reasoning:l(R?.thinking_tokens),modelReported:null,providerCostUsd:b,reason:b===null?"cumulative_only":null,cacheWrite5m:E?.five??null,cacheWrite1h:E?.one??null,invalidCounters:yn([f.input_tokens,f.cache_read_input_tokens,f.cache_creation_input_tokens,f.output_tokens,R?.thinking_tokens])};if([S.inputUncached,S.cacheRead,S.cacheWrite,S.output].includes(null)&&(S.reason="counter_not_exposed"),!i)i=S;else{for(let I of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])i[I]=c(i[I]??null,S[I]??null);i.reason=i.reason||S.reason,i.invalidCounters||=S.invalidCounters}}}},usage(){if(i)return{...i,modelReported:o.size>1?null:[...o][0]??s?.model??null,mixedModels:o.size>1}},sawResult(){return r},finalize(){if(!r)return null;let u=dS(e),d=uS(u.resultTexts);return{result:d,usage:this.usage(),sessionId:u.sessionId||n||t.sessionId||"",durationMs:u.durationMs,numTurns:u.numTurns,isError:u.isError&&d.trim().length===0,errorMessage:u.errorMessage}}}}function dS(t){let e=[],n=0,r=0,s="",i=!1,o;for(let a of t){e.push(a.result||"");let l=a.duration_ms;typeof l=="number"&&Number.isFinite(l)&&(n+=l);let c=a.num_turns;typeof c=="number"&&Number.isFinite(c)&&(r=c);let u=a.session_id;if(typeof u=="string"&&u&&(s=u),a.is_error===!0){i=!0;let d=a.errors,m=Array.isArray(d)?d.filter(f=>typeof f=="string").join("; "):void 0,p=typeof a.subtype=="string"?a.subtype:"unknown";o=m&&m.length>0?m:`result subtype=${p} (no error detail provided)`}}return{resultTexts:e,durationMs:n,numTurns:r,sessionId:s,isError:i,errorMessage:o}}function Xf(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function cS(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Gf(t,e=""){return t.type==="result"&&typeof t.uuid=="string"&&t.uuid.length>0?JSON.stringify([typeof t.session_id=="string"?t.session_id:e,t.uuid]):null}var Jf=M(()=>{"use strict";Po();gs()});import{spawn as pS}from"node:child_process";import{existsSync as fS}from"node:fs";import{join as au}from"node:path";import{readdir as $j}from"node:fs/promises";function gS(){let t=process.env.LMCTL_RESULT_GRACE_TIMEOUT_MS;if(t===void 0||t.trim().length===0)return 72e5;let e=Number(t);return Number.isFinite(e)&&e>0?e:72e5}function hS(){let t=process.env.LMCTL_TOOL_USE_GRACE_TIMEOUT_MS;if(t===void 0||t.trim().length===0)return 27e5;let e=Number(t);return Number.isFinite(e)&&e>0?e:27e5}function yS(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function Uj(t){let e=t.stderr.trim(),n=t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`,r=`lmctl: ${t.tool} ${n} before returning a final result event.
2255
+ `+t[n]);return e.join("")}function ou(t={}){let e=[],n="",r=!1,s=t.usageState,i,o=new Set,a=t.resultIds??s?.resultIds??new Set,l=u=>typeof u=="number"&&Number.isSafeInteger(u)&&u>=0?u:null,c=(u,d)=>u===null||d===null?null:u+d;return{processLine(u){if(!u.trim())return;let d;try{d=JSON.parse(u)}catch{return}let m=Gf(d,n||s?.sessionId||t.sessionId||"");if(m&&a.has(m))return;m&&a.add(m),t.onEvent?.(d);let p=d.type;if(p==="system"&&d.subtype==="init"&&(n=d.session_id||n,s&&(cS(s,n),typeof d.model=="string"&&(s.model=d.model))),p==="assistant"){let f=d.message;typeof f?.model=="string"&&f.model!=="<synthetic>"&&o.add(f.model);let g=f?.content;if(Array.isArray(g))for(let h of g)h.type==="text"&&h.text&&t.onText?.(h.text)}if(p==="result"&&(r=!0,e.push(d),s)){cS(s,typeof d.session_id=="string"?d.session_id:n);let f=d.usage,g=d.total_cost_usd,h=typeof g=="number"&&Number.isFinite(g)&&g>=0,y=s.cost,b=h&&y!==null&&g>=y?g-y:null;if(s.cost=h?g:null,f&&typeof f=="object"){let _=f.cache_creation,v=l(f.cache_creation_input_tokens),E=pp({cacheWrite5m:_?.ephemeral_5m_input_tokens,cacheWrite1h:_?.ephemeral_1h_input_tokens},v),R=f.output_tokens_details,S={source:"wire",inputUncached:l(f.input_tokens),cacheRead:l(f.cache_read_input_tokens),cacheWrite:l(f.cache_creation_input_tokens),output:l(f.output_tokens),reasoning:l(R?.thinking_tokens),modelReported:null,providerCostUsd:b,reason:b===null?"cumulative_only":null,cacheWrite5m:E?.five??null,cacheWrite1h:E?.one??null,invalidCounters:yn([f.input_tokens,f.cache_read_input_tokens,f.cache_creation_input_tokens,f.output_tokens,R?.thinking_tokens])};if([S.inputUncached,S.cacheRead,S.cacheWrite,S.output].includes(null)&&(S.reason="counter_not_exposed"),!i)i=S;else{for(let I of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])i[I]=c(i[I]??null,S[I]??null);i.reason=i.reason||S.reason,i.invalidCounters||=S.invalidCounters}}}},usage(){if(i)return{...i,modelReported:o.size>1?null:[...o][0]??s?.model??null,mixedModels:o.size>1}},sawResult(){return r},finalize(){if(!r)return null;let u=dS(e),d=uS(u.resultTexts);return{result:d,usage:this.usage(),sessionId:u.sessionId||n||t.sessionId||"",durationMs:u.durationMs,numTurns:u.numTurns,isError:u.isError&&d.trim().length===0,errorMessage:u.errorMessage}}}}function dS(t){let e=[],n=0,r=0,s="",i=!1,o;for(let a of t){e.push(a.result||"");let l=a.duration_ms;typeof l=="number"&&Number.isFinite(l)&&(n+=l);let c=a.num_turns;typeof c=="number"&&Number.isFinite(c)&&(r=c);let u=a.session_id;if(typeof u=="string"&&u&&(s=u),a.is_error===!0){i=!0;let d=a.errors,m=Array.isArray(d)?d.filter(f=>typeof f=="string").join("; "):void 0,p=typeof a.subtype=="string"?a.subtype:"unknown";o=m&&m.length>0?m:`result subtype=${p} (no error detail provided)`}}return{resultTexts:e,durationMs:n,numTurns:r,sessionId:s,isError:i,errorMessage:o}}function Xf(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function cS(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Gf(t,e=""){return t.type==="result"&&typeof t.uuid=="string"&&t.uuid.length>0?JSON.stringify([typeof t.session_id=="string"?t.session_id:e,t.uuid]):null}var Jf=M(()=>{"use strict";Po();gs()});import{spawn as pS}from"node:child_process";import{existsSync as fS}from"node:fs";import{join as au}from"node:path";import{readdir as Uj}from"node:fs/promises";function gS(){let t=process.env.LMCTL_RESULT_GRACE_TIMEOUT_MS;if(t===void 0||t.trim().length===0)return 72e5;let e=Number(t);return Number.isFinite(e)&&e>0?e:72e5}function hS(){let t=process.env.LMCTL_TOOL_USE_GRACE_TIMEOUT_MS;if(t===void 0||t.trim().length===0)return 27e5;let e=Number(t);return Number.isFinite(e)&&e>0?e:27e5}function yS(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function Bj(t){let e=t.stderr.trim(),n=t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`,r=`lmctl: ${t.tool} ${n} before returning a final result event.
2256
2256
  One possible cause: the provider stream ended before a complete response was delivered; for Claude Code this can appear as "API Error: Stream idle timeout - partial response received".`;return e?`Original provider error:
2257
2257
  ${Oe(e,{provider:t.tool})}
2258
2258
 
2259
- ${r}`:r}function _S(t){let e=t.tool||"claude",n=t.binaryPath||jj[e]||"claude",r=["-p","","--output-format","stream-json","--input-format","stream-json"];e==="claude"&&r.push("--verbose"),t.sessionId&&r.push("--resume",t.sessionId),t.model&&r.push("--model",t.model);let s=t.permissionMode??"yolo",i=Pr(e,s)??Hj[e]??["--dangerously-skip-permissions"];if(r.push(...i),qe(e,r,s),t.cwd&&!fS(t.cwd))throw X({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new Ce(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let o=Ue(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?TT(o):o}}function vS(t,e){return new Promise((n,r)=>{let s=Date.now(),i,o,a,l;try{({tool:i,binary:o,args:a,spawnEnv:l}=_S(e))}catch(q){return r(q instanceof Error?q:new Error(String(q)))}let c=pS(o,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",q=>{ze(`stream-json: stdin pipe error, ignored (exit handler reports): ${q.message}`)});let u=!1;if(e.signal){if(e.signal.aborted)return u=!0,X({event:"transport_abort",provider:i,phase:"pre_spawn"}),ve(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,X({event:"transport_abort",provider:i}),ve(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:L.usage()}))},{once:!0})}let d="",m=!1,p=!1,f=0,g=!1,h="",y="",b,_,v=null,E=null,R=!1,S=!1,I=gS(),N=hS();function O(){b!==void 0&&(clearTimeout(b),b=void 0)}function A(){_!==void 0&&(clearTimeout(_),_=void 0)}let w=null;function T(){return m||u||L.sawResult()}function k(q){return q==="text_done"?I:N}async function x(q){if(q==="text_done"?b=void 0:_=void 0,T()||v!==null)return;w??=Date.now();let Y=k(q);if(e.holdOpen){let de=(e.holdOpen.maxHoldMs??Wc)-(Date.now()-w),ee=de>0?await qc(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),de,e.signal):!1;if(T()||(q==="text_done"?b!==void 0:_!==void 0))return;if(ee===!0){X({event:"transport_stall_grace_deferred",provider:i,grace_kind:q,grace_ms:Y,reason:"outstanding_dispatched_work"}),C(q);return}}E=q,v=q==="text_done"?`${i} finished responding but never emitted its closing result event (${Y}ms of silence after its last message)`:`${i} went silent mid-turn and never emitted its closing result event (${Y}ms of silence)`,X({event:"transport_stall_grace_fired",provider:i,grace_kind:q,grace_ms:Y}),ve(c).catch(()=>{})}function C(q){let Y=setTimeout(()=>{x(q)},k(q));Y.unref?.(),q==="text_done"?(O(),b=Y):(A(),_=Y)}let L=ou({usageState:i==="claude"?Xf(!!e.sessionId):void 0,onEvent:q=>{f=Date.now(),g=q.type!=="result",q.type==="system"&&q.subtype==="init"&&(y=q.session_id||y),q.type==="assistant"?(R=!yS(q),S=R&&q.message?.stop_reason==="pause_turn"):(q.type==="result"||q.type==="user")&&(R=!1,S=!1),O(),i==="claude"&&R&&!S&&!L.sawResult()&&C("text_done"),A(),i==="claude"&&!L.sawResult()&&C("tool_use_silence"),e.onEvent?.(q)},onText:q=>{h+=q,e.onText?.(q)}});function P(){p||(p=!0,Sn(e.holdOpen,{isAborted:()=>u,hasChildExited:()=>m,isTurnInFlight:()=>g,lastEventAtMs:()=>f,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function j(q){let Y=L.sawResult();L.processLine(q);let ne=L.usage();ne&&e.onUsage?.(ne),!Y&&L.sawResult()&&P()}c.stdout?.on("data",q=>{d+=q.toString();let Y=d.split(`
2259
+ ${r}`:r}function _S(t){let e=t.tool||"claude",n=t.binaryPath||Hj[e]||"claude",r=["-p","","--output-format","stream-json","--input-format","stream-json"];e==="claude"&&r.push("--verbose"),t.sessionId&&r.push("--resume",t.sessionId),t.model&&r.push("--model",t.model);let s=t.permissionMode??"yolo",i=Pr(e,s)??Wj[e]??["--dangerously-skip-permissions"];if(r.push(...i),qe(e,r,s),t.cwd&&!fS(t.cwd))throw X({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new Ce(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let o=Ue(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?TT(o):o}}function vS(t,e){return new Promise((n,r)=>{let s=Date.now(),i,o,a,l;try{({tool:i,binary:o,args:a,spawnEnv:l}=_S(e))}catch(q){return r(q instanceof Error?q:new Error(String(q)))}let c=pS(o,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",q=>{ze(`stream-json: stdin pipe error, ignored (exit handler reports): ${q.message}`)});let u=!1;if(e.signal){if(e.signal.aborted)return u=!0,X({event:"transport_abort",provider:i,phase:"pre_spawn"}),ve(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,X({event:"transport_abort",provider:i}),ve(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:L.usage()}))},{once:!0})}let d="",m=!1,p=!1,f=0,g=!1,h="",y="",b,_,v=null,E=null,R=!1,S=!1,I=gS(),N=hS();function O(){b!==void 0&&(clearTimeout(b),b=void 0)}function A(){_!==void 0&&(clearTimeout(_),_=void 0)}let w=null;function T(){return m||u||L.sawResult()}function k(q){return q==="text_done"?I:N}async function x(q){if(q==="text_done"?b=void 0:_=void 0,T()||v!==null)return;w??=Date.now();let Y=k(q);if(e.holdOpen){let de=(e.holdOpen.maxHoldMs??Wc)-(Date.now()-w),ee=de>0?await qc(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),de,e.signal):!1;if(T()||(q==="text_done"?b!==void 0:_!==void 0))return;if(ee===!0){X({event:"transport_stall_grace_deferred",provider:i,grace_kind:q,grace_ms:Y,reason:"outstanding_dispatched_work"}),C(q);return}}E=q,v=q==="text_done"?`${i} finished responding but never emitted its closing result event (${Y}ms of silence after its last message)`:`${i} went silent mid-turn and never emitted its closing result event (${Y}ms of silence)`,X({event:"transport_stall_grace_fired",provider:i,grace_kind:q,grace_ms:Y}),ve(c).catch(()=>{})}function C(q){let Y=setTimeout(()=>{x(q)},k(q));Y.unref?.(),q==="text_done"?(O(),b=Y):(A(),_=Y)}let L=ou({usageState:i==="claude"?Xf(!!e.sessionId):void 0,onEvent:q=>{f=Date.now(),g=q.type!=="result",q.type==="system"&&q.subtype==="init"&&(y=q.session_id||y),q.type==="assistant"?(R=!yS(q),S=R&&q.message?.stop_reason==="pause_turn"):(q.type==="result"||q.type==="user")&&(R=!1,S=!1),O(),i==="claude"&&R&&!S&&!L.sawResult()&&C("text_done"),A(),i==="claude"&&!L.sawResult()&&C("tool_use_silence"),e.onEvent?.(q)},onText:q=>{h+=q,e.onText?.(q)}});function P(){p||(p=!0,Sn(e.holdOpen,{isAborted:()=>u,hasChildExited:()=>m,isTurnInFlight:()=>g,lastEventAtMs:()=>f,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function j(q){let Y=L.sawResult();L.processLine(q);let ne=L.usage();ne&&e.onUsage?.(ne),!Y&&L.sawResult()&&P()}c.stdout?.on("data",q=>{d+=q.toString();let Y=d.split(`
2260
2260
  `);d=Y.pop()||"";for(let ne of Y)j(ne)});let F="";c.stderr?.on("data",q=>{F+=q.toString()}),c.on("error",q=>{X({event:"transport_error",provider:i,error_class:"TransportConnectionError",error_message:q.message}),r(new Ce(`Failed to spawn ${o}: ${q.message}`,{cause:q}))}),c.on("exit",(q,Y)=>{if(m=!0,O(),A(),u)return;d.trim()&&j(d);let ne=L.finalize();if(ne?.isError)X({event:"transport_error",provider:i,error_class:"Error",reason:"provider_result_error",error_message:ne.errorMessage}),r(Object.assign(new Error(`${i} reported an error for this turn (no assistant output)`+(e.sessionId?` \u2014 session=${e.sessionId}`:"")+`: ${ne.errorMessage??"unknown error"}`),{usage:ne.usage,sessionId:ne.sessionId}));else if(ne)ze(`stream-json: result ${ne.result.slice(0,80)}${ne.result.length>80?"...":""} (${ne.durationMs}ms)`),n({result:ne.result,sessionId:ne.sessionId,durationMs:ne.durationMs,numTurns:ne.numTurns,usage:ne.usage,exitCode:q});else if(v!==null&&E==="text_done"&&h.trim().length>0)X({event:"transport_stall_finalized",provider:i,reason:v,text_len:h.length}),n({result:h,sessionId:y||e.sessionId||"",durationMs:Date.now()-s,numTurns:1,exitCode:q,warnings:[v]});else if(v!==null&&E==="tool_use_silence"){let de=F.trim()?`
2261
2261
  ${Oe(F,{provider:i})}`:"",ee=`${v} \u2014 a tool call was still in flight, so any streamed text is incomplete mid-turn narration, not a real answer`+(e.sessionId?` (session=${e.sessionId})`:"")+de;X({event:"transport_error",provider:i,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:q,signal:Y,stderr_summary:ee}),r(new Me(ee,q,Y,F))}else{let de=v!==null?`${v} \u2014 and produced no usable content to fall back on`+(e.sessionId?` (session=${e.sessionId})`:"")+(F.trim()?`
2262
- ${Oe(F,{provider:i})}`:""):Uj({tool:i,exitCode:q,signal:Y,stderr:F});X({event:"transport_error",provider:i,error_class:"Error",reason:v!==null?"provider_stalled_no_content":"provider_no_result",exit_code:q,signal:Y,stderr_summary:de}),r(new Me(de,q,Y,F))}});let Z=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(Z+`
2263
- `),ze(`stream-json: prompt sent (${t.length} chars)`)})}function Bj(t){return t==="qwen"?[au(ae,".qwen","projects")]:[au(ae,".claude","projects")]}async function mS(t,e,n){let r=n??Bj(t),s=null;for(let a of r){let l;try{l=await $j(a)}catch{continue}for(let c of l){for(let u of[au(a,c,`${e}.jsonl`),au(a,c,"chats",`${e}.jsonl`)])if(fS(u)){s=u;break}if(s!==null)break}if(s!==null)break}if(s===null)throw new Error(`stream-json bundle: no session file for session "${e}" under ${r.join(", ")} \u2014 the session must exist on disk before a bundle can resume it`);let o=(await jt(s,5).catch(()=>[])).map(a=>a?.sessionId).find(a=>typeof a=="string"&&a.length>0);if(o!==e)throw new Error(`stream-json bundle: session file ${s} header does not match the requested session (expected "${e}", header carries ${o??"no sessionId"}) \u2014 the session was likely re-seeded externally; aborting instead of writing into the wrong session`)}async function bS(t){let{tool:e,binary:n,args:r,spawnEnv:s}=_S(t),i=pS(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),o=Date.now();i.stdin?.on("error",H=>{ze(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${H.message}`)});let a={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnActive:!1,completedTurns:0,closed:!1,closing:null},l=t.sessionId||"",c=e==="claude"?Xf(!!t.sessionId):void 0,u=c?.resultIds??new Set,d=null,m="";i.stderr?.on("data",H=>{m+=H.toString()});let p="",f="",g=!1,h=!1,y=null,b=null,_=null,v,E,R=gS(),S=hS(),I=null,N=[],O=()=>a.exited?Promise.resolve():new Promise(H=>{N.push(H)}),A=()=>new Me(`stream-json bundle process (${e}) exited${a.signal!==null?` by ${a.signal}`:a.exitCode!==null?` with code ${a.exitCode}`:""} after ${a.completedTurns} completed prompt(s); the bundle cannot continue`,a.exitCode,a.signal,m);function w(){v!==void 0&&(clearTimeout(v),v=void 0)}function T(){E!==void 0&&(clearTimeout(E),E=void 0)}function k(){return a.exited||I===null||I.aborted||I.processor.sawResult()}function x(H){return H==="text_done"?R:S}async function C(H){if(H==="text_done"?v=void 0:E=void 0,k()||y!==null)return;_??=Date.now();let W=x(H);if(t.holdOpen){let pe=(t.holdOpen.maxHoldMs??Wc)-(Date.now()-_),bt=pe>0?await qc(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),pe,void 0):!1;if(k()||(H==="text_done"?v!==void 0:E!==void 0))return;if(bt===!0){X({event:"transport_stall_grace_deferred",provider:e,grace_kind:H,grace_ms:W,reason:"outstanding_dispatched_work"}),L(H);return}}b=H,y=H==="text_done"?`${e} finished responding but never emitted its closing result event (${W}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${W}ms of silence)`,X({event:"transport_stall_grace_fired",provider:e,grace_kind:H,grace_ms:W}),ve(i).catch(()=>{})}function L(H){if(t.serviceHosted)return;let W=setTimeout(()=>{C(H)},x(H));W.unref?.(),H==="text_done"?(w(),v=W):(T(),E=W)}let P=!1,j,F,Z=new Promise((H,W)=>{j=H,F=W});Z.catch(()=>{});let q=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,F(new Error(`stream-json bundle: ${e} emitted no init event within the open timeout \u2014 cannot verify the resumed session identity`)))},t.closeTimeoutMs!==void 0?Math.max(t.closeTimeoutMs,5e3):3e4);q?.unref?.();function Y(H){P||(P=!0,q!==void 0&&clearTimeout(q),H?F(H):j())}let ne="";function de(H){if(a.lastEventAtMs=Date.now(),H.type==="system"&&H.subtype==="init"){if(c&&typeof H.model=="string"&&(c.model=H.model),f=H.session_id||f,t.sessionId&&typeof H.session_id=="string"&&H.session_id.length>0&&H.session_id!==t.sessionId){let V=new Error(`stream-json bundle: provider resumed a different session (init reported "${H.session_id}", expected "${t.sessionId}")`);Y(V),ve(i).catch(()=>{});return}Y()}let W=I?.processor.sawResult()??!0;H.type==="assistant"?(g=!yS(H),h=g&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(g=!1,h=!1),w(),e==="claude"&&a.turnActive&&g&&!h&&!W&&L("text_done"),T(),e==="claude"&&a.turnActive&&!W&&L("tool_use_silence")}function ee(){let H=I;if(H===null)return;let W=H.processor.finalize();if(W!==null){if(I=null,a.turnActive=!1,w(),T(),W.isError){X({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:W.errorMessage}),H.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${W.errorMessage??"unknown error"}`),{usage:W.usage,sessionId:W.sessionId}));return}a.completedTurns+=1,l=W.sessionId||l,ze(`stream-json bundle: result ${W.result.slice(0,80)}${W.result.length>80?"...":""} (${W.durationMs}ms)`),H.resolve({result:W.result,sessionId:W.sessionId||l,durationMs:W.durationMs,numTurns:W.numTurns,usage:W.usage})}}function tt(H){if(!H.trim())return;let W;try{W=JSON.parse(H)}catch{return}let V=Gf(W,f||l);if(V&&u.has(V))return;let pe=I;if(pe===null&&V&&(u.add(V),c&&(c.cost=null)),de(W),pe!==null){let bt=pe.processor.sawResult();pe.processor.processLine(H),pe.onEventForward?.(W),!bt&&pe.processor.sawResult()&&ee()}}i.stdout?.on("data",H=>{ne+=H.toString();let W=ne.split(`
2262
+ ${Oe(F,{provider:i})}`:""):Bj({tool:i,exitCode:q,signal:Y,stderr:F});X({event:"transport_error",provider:i,error_class:"Error",reason:v!==null?"provider_stalled_no_content":"provider_no_result",exit_code:q,signal:Y,stderr_summary:de}),r(new Me(de,q,Y,F))}});let Z=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(Z+`
2263
+ `),ze(`stream-json: prompt sent (${t.length} chars)`)})}function qj(t){return t==="qwen"?[au(ae,".qwen","projects")]:[au(ae,".claude","projects")]}async function mS(t,e,n){let r=n??qj(t),s=null;for(let a of r){let l;try{l=await Uj(a)}catch{continue}for(let c of l){for(let u of[au(a,c,`${e}.jsonl`),au(a,c,"chats",`${e}.jsonl`)])if(fS(u)){s=u;break}if(s!==null)break}if(s!==null)break}if(s===null)throw new Error(`stream-json bundle: no session file for session "${e}" under ${r.join(", ")} \u2014 the session must exist on disk before a bundle can resume it`);let o=(await jt(s,5).catch(()=>[])).map(a=>a?.sessionId).find(a=>typeof a=="string"&&a.length>0);if(o!==e)throw new Error(`stream-json bundle: session file ${s} header does not match the requested session (expected "${e}", header carries ${o??"no sessionId"}) \u2014 the session was likely re-seeded externally; aborting instead of writing into the wrong session`)}async function bS(t){let{tool:e,binary:n,args:r,spawnEnv:s}=_S(t),i=pS(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),o=Date.now();i.stdin?.on("error",H=>{ze(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${H.message}`)});let a={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnActive:!1,completedTurns:0,closed:!1,closing:null},l=t.sessionId||"",c=e==="claude"?Xf(!!t.sessionId):void 0,u=c?.resultIds??new Set,d=null,m="";i.stderr?.on("data",H=>{m+=H.toString()});let p="",f="",g=!1,h=!1,y=null,b=null,_=null,v,E,R=gS(),S=hS(),I=null,N=[],O=()=>a.exited?Promise.resolve():new Promise(H=>{N.push(H)}),A=()=>new Me(`stream-json bundle process (${e}) exited${a.signal!==null?` by ${a.signal}`:a.exitCode!==null?` with code ${a.exitCode}`:""} after ${a.completedTurns} completed prompt(s); the bundle cannot continue`,a.exitCode,a.signal,m);function w(){v!==void 0&&(clearTimeout(v),v=void 0)}function T(){E!==void 0&&(clearTimeout(E),E=void 0)}function k(){return a.exited||I===null||I.aborted||I.processor.sawResult()}function x(H){return H==="text_done"?R:S}async function C(H){if(H==="text_done"?v=void 0:E=void 0,k()||y!==null)return;_??=Date.now();let W=x(H);if(t.holdOpen){let pe=(t.holdOpen.maxHoldMs??Wc)-(Date.now()-_),bt=pe>0?await qc(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),pe,void 0):!1;if(k()||(H==="text_done"?v!==void 0:E!==void 0))return;if(bt===!0){X({event:"transport_stall_grace_deferred",provider:e,grace_kind:H,grace_ms:W,reason:"outstanding_dispatched_work"}),L(H);return}}b=H,y=H==="text_done"?`${e} finished responding but never emitted its closing result event (${W}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${W}ms of silence)`,X({event:"transport_stall_grace_fired",provider:e,grace_kind:H,grace_ms:W}),ve(i).catch(()=>{})}function L(H){if(t.serviceHosted)return;let W=setTimeout(()=>{C(H)},x(H));W.unref?.(),H==="text_done"?(w(),v=W):(T(),E=W)}let P=!1,j,F,Z=new Promise((H,W)=>{j=H,F=W});Z.catch(()=>{});let q=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,F(new Error(`stream-json bundle: ${e} emitted no init event within the open timeout \u2014 cannot verify the resumed session identity`)))},t.closeTimeoutMs!==void 0?Math.max(t.closeTimeoutMs,5e3):3e4);q?.unref?.();function Y(H){P||(P=!0,q!==void 0&&clearTimeout(q),H?F(H):j())}let ne="";function de(H){if(a.lastEventAtMs=Date.now(),H.type==="system"&&H.subtype==="init"){if(c&&typeof H.model=="string"&&(c.model=H.model),f=H.session_id||f,t.sessionId&&typeof H.session_id=="string"&&H.session_id.length>0&&H.session_id!==t.sessionId){let V=new Error(`stream-json bundle: provider resumed a different session (init reported "${H.session_id}", expected "${t.sessionId}")`);Y(V),ve(i).catch(()=>{});return}Y()}let W=I?.processor.sawResult()??!0;H.type==="assistant"?(g=!yS(H),h=g&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(g=!1,h=!1),w(),e==="claude"&&a.turnActive&&g&&!h&&!W&&L("text_done"),T(),e==="claude"&&a.turnActive&&!W&&L("tool_use_silence")}function ee(){let H=I;if(H===null)return;let W=H.processor.finalize();if(W!==null){if(I=null,a.turnActive=!1,w(),T(),W.isError){X({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:W.errorMessage}),H.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${W.errorMessage??"unknown error"}`),{usage:W.usage,sessionId:W.sessionId}));return}a.completedTurns+=1,l=W.sessionId||l,ze(`stream-json bundle: result ${W.result.slice(0,80)}${W.result.length>80?"...":""} (${W.durationMs}ms)`),H.resolve({result:W.result,sessionId:W.sessionId||l,durationMs:W.durationMs,numTurns:W.numTurns,usage:W.usage})}}function tt(H){if(!H.trim())return;let W;try{W=JSON.parse(H)}catch{return}let V=Gf(W,f||l);if(V&&u.has(V))return;let pe=I;if(pe===null&&V&&(u.add(V),c&&(c.cost=null)),de(W),pe!==null){let bt=pe.processor.sawResult();pe.processor.processLine(H),pe.onEventForward?.(W),!bt&&pe.processor.sawResult()&&ee()}}i.stdout?.on("data",H=>{ne+=H.toString();let W=ne.split(`
2264
2264
  `);ne=W.pop()||"";for(let V of W)tt(V)}),i.on("error",H=>{if(d=new Ce(`Failed to spawn ${n}: ${H.message}`,{cause:H}),X({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:H.message}),Y(d),I!==null){let W=I;I=null,a.turnActive=!1,W.reject(d)}}),i.on("exit",(H,W)=>{a.exited=!0,a.exitCode=H,a.signal=W,w(),T(),ne.trim()&&tt(ne),Y(a.exited&&!P?new Me(`stream-json bundle: ${e} ${W?`terminated by ${W}`:`exited (code ${String(H)})`} before its init event`,H,W):void 0);let V=I;if(V!==null&&(I=null,a.turnActive=!1,!V.aborted))if(y!==null&&b==="text_done"&&p.trim().length>0)X({event:"transport_stall_finalized",provider:e,reason:y,text_len:p.length}),V.resolve({result:p,sessionId:f||t.sessionId||"",durationMs:Date.now()-V.startMs,numTurns:1,warnings:[y]});else if(y!==null&&b==="tool_use_silence"){let pe=m.trim()?Oe(m,{provider:e}):"";X({event:"transport_error",provider:e,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:H,signal:W,...pe?{stderr_summary:pe}:{}}),V.reject(new Me(`${y} \u2014 a tool call was still in flight, so any streamed text is incomplete mid-turn narration, not a real answer`+(t.sessionId?` (session=${t.sessionId})`:"")+(pe?`
2265
2265
  ${pe}`:""),H,W,m))}else{let pe=A(),bt=m.trim()?Oe(m,{provider:e}):"";X({event:"transport_error",provider:e,error_class:"Error",reason:y!==null?"provider_stalled_no_content":"provider_no_result",exit_code:H,signal:W,...bt?{stderr_summary:bt}:{}}),V.reject(new Me(bt?`${pe.message}
2266
2266
  ${bt}`:pe.message,H,W,m))}for(let pe of N.splice(0))pe()}),i.on("close",(H,W)=>{if(!a.exited){a.exited=!0,a.exitCode=H,a.signal=W,w(),T(),P||Y(new Me(`stream-json bundle: ${e} ${W?`terminated by ${W}`:`closed (code ${String(H)})`} before its init event`,H,W));for(let V of N.splice(0))V()}});try{t.sessionId&&await mS(e,t.sessionId,t.sessionFileRoots),await Z}catch(H){let W=d??(H instanceof Error?H:new Error(String(H)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)i.stdin?.end(),await O();else{let V=t.closeTimeoutMs??2e3;await ve(i,{softDelayMs:Math.min(1e3,V),killDelayMs:Math.min(1e3,V)}).catch(()=>{})}throw W}let Xe=H=>new Promise(W=>{setTimeout(W,H).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(H,W={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw A();if(I!==null)throw new Error(`stream-json bundle session (${e}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);let V=()=>(a.closed=!0,ve(i).catch(()=>{}),new Error("Aborted"));if(W.signal?.aborted)throw V();if(t.sessionId&&(await mS(e,t.sessionId,t.sessionFileRoots),a.exited))throw A();if(W.signal?.aborted)throw V();return p="",g=!1,h=!1,y=null,b=null,_=null,new Promise((pe,bt)=>{let js=ou({usageState:c,resultIds:u,sessionId:f||l,onText:$=>{p+=$,W.onText?.($)}}),Us={processor:js,resolve:pe,reject:bt,startMs:Date.now(),aborted:!1,onEventForward:W.onEvent};I=Us,a.turnActive=!0;let Hs=()=>{Us.aborted=!0,X({event:"transport_abort",provider:e}),a.closed=!0,ve(i).catch(()=>{}),I===Us&&(I=null,a.turnActive=!1),bt(Object.assign(new Error("Aborted"),{usage:js.usage()}))};W.signal?.addEventListener("abort",Hs,{once:!0});let Xa=JSON.stringify({type:"user",message:{role:"user",content:H}});i.stdin?.write(`${Xa}
2267
- `),ze(`stream-json bundle: prompt sent (${H.length} chars)`)})},close(){return a.closing!==null||(a.closing=(async()=>{if(a.closed=!0,!a.exited&&(t.holdOpen!==void 0?await new Promise(H=>{Sn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>a.exited,isTurnInFlight:()=>a.turnActive,lastEventAtMs:()=>a.lastEventAtMs,closeStdin:()=>{i.stdin?.end(),H()},label:e})}):i.stdin?.end(),!a.exited)){let H=t.closeTimeoutMs;if(H===void 0&&t.serviceHosted)await O();else{let W=H??2e3;await Promise.race([O(),Xe(W)]),a.exited||await ve(i,{stdinEnd:!1,softDelayMs:Math.min(1e3,W),killDelayMs:Math.min(1e3,W)}).catch(()=>{})}}})()),a.closing}}}var jj,Hj,Vf=M(()=>{"use strict";Mr();ks();kn();ke();sa();ln();Jf();We();an();Jf();jj={claude:"claude",qwen:"qwen"};Hj={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function lu(t={}){return[]}var zf=M(()=>{"use strict"});function Kf(t){return t==="plan"?"read-only":"danger-full-access"}function wS(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function cu(){return{agentItems:new Map,resultText:""}}function xi(t,e,n,r){let s=t.method;if(!s)return!1;let i=t.params;if(s==="turn/started")return e.agentItems.clear(),e.resultText="",!1;if(s==="item/started"){let o=i?.item;if(o?.type==="agentMessage"&&typeof o.id=="string"){let a=typeof o.phase=="string"?o.phase:void 0,l=a==="commentary"||a==="final_answer"?a:void 0;return e.agentItems.set(o.id,{phase:l,buffer:""}),!0}return!1}if(s==="item/agentMessage/delta"){let o=i?.delta||"",a=typeof i?.itemId=="string"?i.itemId:void 0;if(!o)return!0;let l=a?e.agentItems.get(a):void 0;return l?(l.phase==="commentary"||(l.buffer+=o),n?.(o),l.phase&&i&&(i._lmctlItemPhase=l.phase)):(e.resultText+=o,n?.(o)),!0}if(s==="item/completed"){let o=i?.item;if(o?.type==="agentMessage"&&typeof o.id=="string"){let a=e.agentItems.get(o.id);if(a){if(a.phase!=="commentary"){let l=typeof o.text=="string"?o.text:a.buffer;if(r&&typeof o.text=="string"&&o.text!==a.buffer){let c=typeof i?.threadId=="string"?i.threadId:void 0,u=typeof i?.turnId=="string"?i.turnId:void 0;r({itemId:o.id,threadId:c,turnId:u,expectedFromItemText:o.text,gotFromBuffer:a.buffer})}e.resultText+=l}e.agentItems.delete(o.id)}return!0}return!1}return!1}function uu(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function ES(t){let e=t.params,n=e?.error,r=typeof n?.message=="string"?n.message:void 0,s=r&&r.length>0?r:"(no message)";return e?.willRetry===!0?{willRetry:!0}:{willRetry:!1,turnError:new Error(`Turn errored: ${s}`)}}function du(){return{pendingCodexError:null}}function mu(t,e){let n=ES(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function pu(t,e){if(e.pendingCodexError){let i=e.pendingCodexError;return e.pendingCodexError=null,{shouldReject:!0,turnError:i}}let r=t.params?.turn;if((typeof r?.status=="string"?r.status:void 0)==="failed"){let i=r?.error,o=typeof i?.message=="string"?i.message:void 0,a=o&&o.length>0?o:"(no message)";return{shouldReject:!0,turnError:new Error(`Turn errored: ${a}`)}}return{shouldReject:!1}}var Yf=M(()=>{"use strict"});import{spawn as TS}from"node:child_process";import{createInterface as SS}from"node:readline";import{existsSync as Wj,readFileSync as qj}from"node:fs";import{fileURLToPath as Xj}from"node:url";function kS(){return wS(Gj)}function Hr(t,e){ze(`[codex:${t}] ${JSON.stringify(e)}`)}function Jj(t){let e=t.stderr.trim(),n=`lmctl: codex app-server ${t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`} before completing the turn.
2267
+ `),ze(`stream-json bundle: prompt sent (${H.length} chars)`)})},close(){return a.closing!==null||(a.closing=(async()=>{if(a.closed=!0,!a.exited&&(t.holdOpen!==void 0?await new Promise(H=>{Sn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>a.exited,isTurnInFlight:()=>a.turnActive,lastEventAtMs:()=>a.lastEventAtMs,closeStdin:()=>{i.stdin?.end(),H()},label:e})}):i.stdin?.end(),!a.exited)){let H=t.closeTimeoutMs;if(H===void 0&&t.serviceHosted)await O();else{let W=H??2e3;await Promise.race([O(),Xe(W)]),a.exited||await ve(i,{stdinEnd:!1,softDelayMs:Math.min(1e3,W),killDelayMs:Math.min(1e3,W)}).catch(()=>{})}}})()),a.closing}}}var Hj,Wj,Vf=M(()=>{"use strict";Mr();ks();kn();ke();sa();ln();Jf();We();an();Jf();Hj={claude:"claude",qwen:"qwen"};Wj={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function lu(t={}){return[]}var zf=M(()=>{"use strict"});function Kf(t){return t==="plan"?"read-only":"danger-full-access"}function wS(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function cu(){return{agentItems:new Map,resultText:""}}function xi(t,e,n,r){let s=t.method;if(!s)return!1;let i=t.params;if(s==="turn/started")return e.agentItems.clear(),e.resultText="",!1;if(s==="item/started"){let o=i?.item;if(o?.type==="agentMessage"&&typeof o.id=="string"){let a=typeof o.phase=="string"?o.phase:void 0,l=a==="commentary"||a==="final_answer"?a:void 0;return e.agentItems.set(o.id,{phase:l,buffer:""}),!0}return!1}if(s==="item/agentMessage/delta"){let o=i?.delta||"",a=typeof i?.itemId=="string"?i.itemId:void 0;if(!o)return!0;let l=a?e.agentItems.get(a):void 0;return l?(l.phase==="commentary"||(l.buffer+=o),n?.(o),l.phase&&i&&(i._lmctlItemPhase=l.phase)):(e.resultText+=o,n?.(o)),!0}if(s==="item/completed"){let o=i?.item;if(o?.type==="agentMessage"&&typeof o.id=="string"){let a=e.agentItems.get(o.id);if(a){if(a.phase!=="commentary"){let l=typeof o.text=="string"?o.text:a.buffer;if(r&&typeof o.text=="string"&&o.text!==a.buffer){let c=typeof i?.threadId=="string"?i.threadId:void 0,u=typeof i?.turnId=="string"?i.turnId:void 0;r({itemId:o.id,threadId:c,turnId:u,expectedFromItemText:o.text,gotFromBuffer:a.buffer})}e.resultText+=l}e.agentItems.delete(o.id)}return!0}return!1}return!1}function uu(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function ES(t){let e=t.params,n=e?.error,r=typeof n?.message=="string"?n.message:void 0,s=r&&r.length>0?r:"(no message)";return e?.willRetry===!0?{willRetry:!0}:{willRetry:!1,turnError:new Error(`Turn errored: ${s}`)}}function du(){return{pendingCodexError:null}}function mu(t,e){let n=ES(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function pu(t,e){if(e.pendingCodexError){let i=e.pendingCodexError;return e.pendingCodexError=null,{shouldReject:!0,turnError:i}}let r=t.params?.turn;if((typeof r?.status=="string"?r.status:void 0)==="failed"){let i=r?.error,o=typeof i?.message=="string"?i.message:void 0,a=o&&o.length>0?o:"(no message)";return{shouldReject:!0,turnError:new Error(`Turn errored: ${a}`)}}return{shouldReject:!1}}var Yf=M(()=>{"use strict"});import{spawn as TS}from"node:child_process";import{createInterface as SS}from"node:readline";import{existsSync as Xj,readFileSync as Gj}from"node:fs";import{fileURLToPath as Jj}from"node:url";function kS(){return wS(Vj)}function Hr(t,e){ze(`[codex:${t}] ${JSON.stringify(e)}`)}function zj(t){let e=t.stderr.trim(),n=`lmctl: codex app-server ${t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`} before completing the turn.
2268
2268
  One possible cause: Codex stopped before delivering a terminal turn/completed event.`;return e?`Original provider error:
2269
2269
  ${Oe(e,{provider:"codex"})}
2270
2270
 
2271
- ${n}`:n}function RS(t){let e=t.binaryPath||"codex",n=["app-server","--listen","stdio://"];t.model&&n.push("-c",`model=${JSON.stringify(t.model)}`);let r=t.isLead??t.alias?.toLowerCase()==="lead",s=r?lu():[];n.push(...s),Le()&&Bt(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let i=t.permissionMode??"yolo",o=Kf(i);if(qe("codex",n,i),t.cwd&&!Wj(t.cwd))throw X({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new Ce(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:o,permissionMode:i,spawnEnv:Ue(t.env,t.cwd,t.threadId)}}function IS(t,e){let n=e.result;if(n?.thread?.id){t.reportModel(n.thread.id,n.model);for(let r of n.thread.turns??[])t.remember(n.thread.id,r.id)}}function xS(t,e){return new Promise((n,r)=>{let s,i,o;try{({binary:s,codexArgs:i,sandbox:o}=RS(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=TS(s,i,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:Ue(e.env,e.cwd,e.threadId)}),l=Ff(),c=l.turn(e.threadId||""),u=O=>Object.assign(O,{usage:c.usage(),sessionId:g}),d=!1;if(e.signal){if(e.signal.aborted)return d=!0,X({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),ve(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,X({event:"transport_abort",provider:"codex"}),ve(a).catch(()=>{}),r(u(new Error("Aborted")))},{once:!0})}let m=SS({input:a.stdout}),p=new Map,f=1,g=e.threadId||"",h="",y=!1,b=!1,_=Date.now(),v=cu(),E=du();function R(O,A={}){return new Promise((w,T)=>{let k=f++;p.set(k,{resolve:w,reject:T});let x=JSON.stringify({jsonrpc:"2.0",id:k,method:O,params:A});a.stdin?.write(x+`
2271
+ ${n}`:n}function RS(t){let e=t.binaryPath||"codex",n=["app-server","--listen","stdio://"];t.model&&n.push("-c",`model=${JSON.stringify(t.model)}`);let r=t.isLead??t.alias?.toLowerCase()==="lead",s=r?lu():[];n.push(...s),Le()&&Bt(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let i=t.permissionMode??"yolo",o=Kf(i);if(qe("codex",n,i),t.cwd&&!Xj(t.cwd))throw X({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new Ce(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:o,permissionMode:i,spawnEnv:Ue(t.env,t.cwd,t.threadId)}}function IS(t,e){let n=e.result;if(n?.thread?.id){t.reportModel(n.thread.id,n.model);for(let r of n.thread.turns??[])t.remember(n.thread.id,r.id)}}function xS(t,e){return new Promise((n,r)=>{let s,i,o;try{({binary:s,codexArgs:i,sandbox:o}=RS(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=TS(s,i,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:Ue(e.env,e.cwd,e.threadId)}),l=Ff(),c=l.turn(e.threadId||""),u=O=>Object.assign(O,{usage:c.usage(),sessionId:g}),d=!1;if(e.signal){if(e.signal.aborted)return d=!0,X({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),ve(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,X({event:"transport_abort",provider:"codex"}),ve(a).catch(()=>{}),r(u(new Error("Aborted")))},{once:!0})}let m=SS({input:a.stdout}),p=new Map,f=1,g=e.threadId||"",h="",y=!1,b=!1,_=Date.now(),v=cu(),E=du();function R(O,A={}){return new Promise((w,T)=>{let k=f++;p.set(k,{resolve:w,reject:T});let x=JSON.stringify({jsonrpc:"2.0",id:k,method:O,params:A});a.stdin?.write(x+`
2272
2272
  `)})}function S(O,A={}){let w=JSON.stringify({jsonrpc:"2.0",method:O,params:A});a.stdin?.write(w+`
2273
- `)}m.on("line",O=>{let A;try{A=JSON.parse(O)}catch{return}if(typeof A.id=="number"&&p.has(A.id)){IS(l,A);let x=p.get(A.id);if(p.delete(A.id),A.error){let C=A.error,L=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(A.error);x.reject(ra(`codex app-server error: ${L}`,C))}else x.resolve(A);e.onEvent?.(A);return}let w=A.method;if(!w){e.onEvent?.(A);return}if(d||!c.event(A))return;let T=c.usage();if(T&&e.onUsage?.(T),w==="thread/started"){let C=A.params?.thread;C?.id&&(g=C.id,e.onSessionId?.(g))}let k=Le()?x=>{Hr("item.text/buffer-mismatch",{itemId:x.itemId,threadId:x.threadId??null,turnId:x.turnId??null,expectedFromItemText:x.expectedFromItemText,gotFromBuffer:x.gotFromBuffer,expectedLen:x.expectedFromItemText.length,gotLen:x.gotFromBuffer.length})}:void 0;if(w==="turn/started"){let x=A.params,C=x?.turn;C?.id&&(h=C.id),xi(A,v,e.onDelta,k),Le()&&Hr("turn/started",{params:x??null})}if(Le()&&(w==="item/started"||w==="item/completed")){let x=A.params;x?.item?.type==="agentMessage"&&Hr(w,{params:x??null})}if(w==="item/started"||w==="item/agentMessage/delta"||w==="item/completed"){if(w==="item/agentMessage/delta"){let x=A.params;Le()&&Hr("agentMessage/delta",{params:x??null})}xi(A,v,e.onDelta,k)}if(w==="turn/completed"){c.finish();let x=A.params;if(Le())for(let[L,P]of v.agentItems.entries())P.buffer&&Hr("turn/completed/unflushed-item",{itemId:L,phase:P.phase,bufferLen:P.buffer.length});uu(v),Le()&&Hr("turn/completed",{params:x??null});let C=pu(A,E);C.shouldReject?(Le()&&Hr("turn/completed/terminal-reject",{message:C.turnError.message}),b=!0,y=!0,a.stdin?.end(),r(u(C.turnError))):(y=!0,a.stdin?.end())}if(w==="error"){let x=mu(A,E);if(Le()){let C=A.params,L=C?.error,P=typeof L?.message=="string"?L.message:"(no message)";Hr(x.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:x.willRetry,params:C??null})}}e.onEvent?.(A)});let I="";a.stderr?.on("data",O=>{I+=O.toString()});let N=O=>{X({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let A=new Ce(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let w of p.values())w.reject(u(A));p.clear(),r(u(A))};a.on("error",N),a.stdin?.on("error",N),a.on("exit",(O,A)=>{if(d||b)return;if(y){n({result:v.resultText,usage:c.usage(),threadId:g,turnId:h,durationMs:Date.now()-_,exitCode:O});return}if(E.pendingCodexError){r(u(E.pendingCodexError));return}let w=Jj({exitCode:O,signal:A,stderr:I});X({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:A,stderr_summary:w}),r(u(new Me(w,O,A,I)))}),(async()=>{try{if(await R("initialize",kS()),S("initialized",{}),e.threadId)try{let O=R("thread/resume",{threadId:e.threadId,sandbox:o,approvalPolicy:"never",...e.model?{model:e.model}:{}}),A,w=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((T,k)=>{A=setTimeout(()=>k(new Error("resume timeout")),3e4)});try{let k=(await Promise.race([O,w])).result?.thread?.id;if(e.requireResume&&k!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${k??"unknown"}")`)}finally{clearTimeout(A)}g=e.threadId,e.onSessionId?.(g)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
2273
+ `)}m.on("line",O=>{let A;try{A=JSON.parse(O)}catch{return}if(typeof A.id=="number"&&p.has(A.id)){IS(l,A);let x=p.get(A.id);if(p.delete(A.id),A.error){let C=A.error,L=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(A.error);x.reject(ra(`codex app-server error: ${L}`,C))}else x.resolve(A);e.onEvent?.(A);return}let w=A.method;if(!w){e.onEvent?.(A);return}if(d||!c.event(A))return;let T=c.usage();if(T&&e.onUsage?.(T),w==="thread/started"){let C=A.params?.thread;C?.id&&(g=C.id,e.onSessionId?.(g))}let k=Le()?x=>{Hr("item.text/buffer-mismatch",{itemId:x.itemId,threadId:x.threadId??null,turnId:x.turnId??null,expectedFromItemText:x.expectedFromItemText,gotFromBuffer:x.gotFromBuffer,expectedLen:x.expectedFromItemText.length,gotLen:x.gotFromBuffer.length})}:void 0;if(w==="turn/started"){let x=A.params,C=x?.turn;C?.id&&(h=C.id),xi(A,v,e.onDelta,k),Le()&&Hr("turn/started",{params:x??null})}if(Le()&&(w==="item/started"||w==="item/completed")){let x=A.params;x?.item?.type==="agentMessage"&&Hr(w,{params:x??null})}if(w==="item/started"||w==="item/agentMessage/delta"||w==="item/completed"){if(w==="item/agentMessage/delta"){let x=A.params;Le()&&Hr("agentMessage/delta",{params:x??null})}xi(A,v,e.onDelta,k)}if(w==="turn/completed"){c.finish();let x=A.params;if(Le())for(let[L,P]of v.agentItems.entries())P.buffer&&Hr("turn/completed/unflushed-item",{itemId:L,phase:P.phase,bufferLen:P.buffer.length});uu(v),Le()&&Hr("turn/completed",{params:x??null});let C=pu(A,E);C.shouldReject?(Le()&&Hr("turn/completed/terminal-reject",{message:C.turnError.message}),b=!0,y=!0,a.stdin?.end(),r(u(C.turnError))):(y=!0,a.stdin?.end())}if(w==="error"){let x=mu(A,E);if(Le()){let C=A.params,L=C?.error,P=typeof L?.message=="string"?L.message:"(no message)";Hr(x.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:x.willRetry,params:C??null})}}e.onEvent?.(A)});let I="";a.stderr?.on("data",O=>{I+=O.toString()});let N=O=>{X({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let A=new Ce(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let w of p.values())w.reject(u(A));p.clear(),r(u(A))};a.on("error",N),a.stdin?.on("error",N),a.on("exit",(O,A)=>{if(d||b)return;if(y){n({result:v.resultText,usage:c.usage(),threadId:g,turnId:h,durationMs:Date.now()-_,exitCode:O});return}if(E.pendingCodexError){r(u(E.pendingCodexError));return}let w=zj({exitCode:O,signal:A,stderr:I});X({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:A,stderr_summary:w}),r(u(new Me(w,O,A,I)))}),(async()=>{try{if(await R("initialize",kS()),S("initialized",{}),e.threadId)try{let O=R("thread/resume",{threadId:e.threadId,sandbox:o,approvalPolicy:"never",...e.model?{model:e.model}:{}}),A,w=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((T,k)=>{A=setTimeout(()=>k(new Error("resume timeout")),3e4)});try{let k=(await Promise.race([O,w])).result?.thread?.id;if(e.requireResume&&k!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${k??"unknown"}")`)}finally{clearTimeout(A)}g=e.threadId,e.onSessionId?.(g)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
2274
2274
  `),X({event:"codex_thread_resume_fallback",provider:"codex",thread_id:e.threadId,error_message:O instanceof Error?O.message:String(O)});let w=(await R("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:o,...e.model?{model:e.model}:{}})).result?.thread;w?.id&&(g=w.id,e.onSessionId?.(g))}else{let A=(await R("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:o,...e.model?{model:e.model}:{}})).result?.thread;A?.id&&(g=A.id,e.onSessionId?.(g))}c=l.turn(g),await R("turn/start",{threadId:g,input:[{type:"text",text:t}],...e.model?{model:e.model}:{}})}catch(O){ve(a).catch(()=>{}),r(O instanceof Error?O:new Error(String(O)))}})()})}async function AS(t){let{binary:e,codexArgs:n,sandbox:r}=RS(t),s=TS(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ue(t.env,t.cwd,t.threadId)}),i=Date.now(),o={exited:!1,exitCode:null,signal:null,completedTurns:0,closed:!1,closing:null},a=t.threadId||"",l=Ff(),c=null,u="";s.stderr?.on("data",A=>{u+=A.toString()});let d=SS({input:s.stdout}),m=new Map,p=1;function f(A,w={}){return new Promise((T,k)=>{let x=p++;m.set(x,{resolve:T,reject:k});let C=JSON.stringify({jsonrpc:"2.0",id:x,method:A,params:w});s.stdin?.write(C+`
2275
2275
  `)})}function g(A,w={}){let T=JSON.stringify({jsonrpc:"2.0",method:A,params:w});s.stdin?.write(T+`
2276
2276
  `)}let h=[],y=()=>o.exited?Promise.resolve():new Promise(A=>{h.push(A)}),b=()=>new Me(`codex bundle process exited${o.signal!==null?` by ${o.signal}`:o.exitCode!==null?` with code ${o.exitCode}`:""} after ${o.completedTurns} completed prompt(s); the bundle cannot continue`,o.exitCode,o.signal,u),_=null,v=null,E,R,S=A=>{A.turnId&&f("turn/interrupt",{threadId:a,turnId:A.turnId}).catch(()=>{})};function I(A){let w=_;w===null||w.settled||(w.settled=!0,_=null,w.usage.finish(),A&&w.reject(Object.assign(A,{usage:w.usage.usage(),sessionId:a})))}d.on("line",A=>{let w;try{w=JSON.parse(A)}catch{return}if(typeof w.id=="number"&&m.has(w.id)){IS(l,w);let P=m.get(w.id);if(m.delete(w.id),w.error){let j=w.error,F=typeof j?.message=="string"&&j.message.length>0?j.message:JSON.stringify(w.error);P.reject(ra(`codex app-server error: ${F}`,j))}else P.resolve(w);_?.onEvent?.(w);return}let T=w.method;if(!T){_?.onEvent?.(w);return}if(T==="thread/started"){let j=w.params?.thread;j?.id&&(a=j.id,t.onSessionId?.(a))}let k=w.params,x=k?.turnId??k?.turn?.id;if(v&&(T==="turn/started"&&!v.turnId&&x&&(v.usage.bind(x),v.usage.finish(),v.turnId=x,S(v)),T==="turn/completed"&&x===v.turnId&&(l.remember(a,x),v=null,R?.()),T.startsWith("turn/")||T.startsWith("item/")||T==="error"))return;let C=_;if(x&&C?.turnId&&x!==C.turnId||C!==null&&!C.usage.event(w))return;let L=C?.usage.usage();if(L&&C?.onUsage?.(L),T==="turn/started"&&C!==null){let j=w.params?.turn;j?.id&&(C.turnId=j.id),xi(w,C.agentState,C.onDelta,void 0)}if(C!==null&&(T==="item/started"||T==="item/agentMessage/delta"||T==="item/completed")&&xi(w,C.agentState,C.onDelta,void 0),T==="turn/completed"&&C!==null&&!C.settled){uu(C.agentState);let P=pu(w,C.turnState);C.settled=!0,C.usage.finish(),_=null,P.shouldReject?C.reject(Object.assign(P.turnError,{usage:C.usage.usage(),sessionId:a})):(o.completedTurns+=1,C.resolve({text:C.agentState.resultText,usage:C.usage.usage(),sessionId:a,turnId:C.turnId,durationMs:Date.now()-C.startMs}))}T==="error"&&C!==null&&mu(w,C.turnState),C?.onEvent?.(w)});let N=A=>{c=new Ce(`Failed to spawn codex app-server: ${A.message}`,{cause:A}),X({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:A.message});for(let w of m.values())w.reject(c);m.clear(),I(c)};s.on("error",N),s.stdin?.on("error",N),s.on("exit",(A,w)=>{o.exited=!0,R?.(),o.exitCode=A,o.signal=w;let T=b();for(let x of m.values())x.reject(T);m.clear();let k=_;if(k!==null&&!k.settled)if(k.settled=!0,k.usage.finish(),_=null,k.turnState.pendingCodexError)k.reject(Object.assign(k.turnState.pendingCodexError,{usage:k.usage.usage(),sessionId:a}));else{let x=u.trim()?Oe(u,{provider:"codex"}):"";X({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:A,signal:w,...x?{stderr_summary:x}:{}}),k.reject(Object.assign(new Me(x?`${T.message}
2277
- ${x}`:T.message,A,w,u),{usage:k.usage.usage(),sessionId:a}))}for(let x of h.splice(0))x()}),s.on("close",(A,w)=>{if(!o.exited){o.exited=!0,o.exitCode=A,o.signal=w;for(let T of h.splice(0))T()}});try{if(await f("initialize",kS()),g("initialized",{}),t.threadId){let A;try{A=await f("thread/resume",{threadId:t.threadId,sandbox:r,approvalPolicy:"never",...t.model?{model:t.model}:{}})}catch(T){throw new Error(`Cannot resume codex thread ${t.threadId} for a bundle: ${T instanceof Error?T.message:String(T)} (the thread/start fallback is disabled in bundle mode)`)}let w=A.result?.thread;if(w?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${w?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let w=(await f("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;w?.id&&(a=w.id,t.onSessionId?.(a))}}catch(A){let w=c??(A instanceof Error?A:new Error(String(A)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)s.stdin?.end(),await y();else{let T=t.closeTimeoutMs??2e3;await ve(s,{softDelayMs:Math.min(1e3,T),killDelayMs:Math.min(1e3,T)}).catch(()=>{})}throw w}let O=A=>new Promise(w=>{setTimeout(w,A).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return o.completedTurns},async sendTurn(A,w={}){if(E&&await E,o.closed||o.closing!==null)throw new Error("codex bundle session is closed");if(o.exited)throw b();if(_!==null)throw new Error("codex bundle session has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending");if(w.signal?.aborted)throw new Error("Aborted");return new Promise((T,k)=>{let x={usage:l.turn(a),onUsage:w.onUsage,agentState:cu(),turnState:du(),resolve:T,reject:k,startMs:Date.now(),turnId:"",onDelta:w.onDelta,onEvent:w.onEvent,settled:!1};_=x;let C=()=>{x.settled||(x.settled=!0,_=null,v=x,E=new Promise(L=>{R=L}),S(x),w.signal?.removeEventListener("abort",C),x.usage.finish(),k(Object.assign(new Error("Aborted"),{usage:x.usage.usage(),sessionId:a})))};w.signal?.addEventListener("abort",C,{once:!0}),f("turn/start",{threadId:a,input:[{type:"text",text:A}],...t.model?{model:t.model}:{}}).then(L=>{x.usage.bind(L.result?.turn?.id)}).catch(L=>{if(x.settled){v===x&&(v=null,R?.());return}x.settled=!0,_=null,w.signal?.removeEventListener("abort",C),x.usage.finish(),k(Object.assign(o.exited?b():L instanceof Error?L:new Error(String(L)),{usage:x.usage.usage(),sessionId:a}))})})},close(){return o.closing!==null||(o.closing=(async()=>{if(o.closed=!0,R?.(),!o.exited&&(t.holdOpen!==void 0?await new Promise(A=>{Sn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>o.exited,isTurnInFlight:()=>_!==null,lastEventAtMs:()=>i,closeStdin:()=>{s.stdin?.end(),A()},label:"codex"})}):s.stdin?.end(),!o.exited)){let A=t.closeTimeoutMs;if(A===void 0&&t.serviceHosted)await y();else{let w=A??2e3;await Promise.race([y(),O(w)]),o.exited||await ve(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,w),killDelayMs:Math.min(1e3,w)}).catch(()=>{})}}})()),o.closing}}}var Gj,CS=M(()=>{"use strict";Uf();ke();ke();Mr();ks();sa();kn();zf();ke();ln();an();Yf();Yf();Gj=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(qj(Xj(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Pe(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function NS(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=Vj){let r=t.keys().next().value;r!==void 0&&t.delete(r)}t.set(n.id,Date.now()),e(n);return}if(n.kind==="tool_result"&&typeof n.id=="string"&&n.elapsedMs===void 0){let r=t.get(n.id);if(r!==void 0){e({...n,elapsedMs:Date.now()-r}),t.delete(n.id);return}}e(n)}}function OS(){let t=new Map;return(e,n)=>{zj(e,NS(t,n))}}function zj(t,e){let n=t.type;if(n==="system"){let r=t.subtype;if(r==="api_retry"){let s=typeof t.attempt=="number"?t.attempt:void 0,i=typeof t.max_retries=="number"?t.max_retries:void 0,o=typeof t.error_status=="number"?t.error_status:void 0,a=typeof t.error=="string"?t.error:void 0,l=typeof t.retry_delay_ms=="number"?t.retry_delay_ms:void 0,c=[];s!==void 0&&c.push(i!==void 0?`attempt ${s}/${i}`:`attempt ${s}`),o!==void 0&&c.push(`HTTP ${o}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(Pe(a,60));let u=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:u});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,i=typeof t.error=="string"?t.error:void 0,o=["api_error"];s!==void 0&&o.push(`HTTP ${s}`),i&&o.push(Pe(i,80)),e({kind:"other",summary:o.join(": "),raw:t});return}e({kind:"system",summary:r||"system",raw:t});return}if(n==="assistant"||n==="user"){let s=t.message?.content;if(!Array.isArray(s))return;for(let i of s){let o=i.type;if(o==="text"){let a=i.text||"";a&&e({kind:"text",summary:Pe(a),raw:i})}else if(o==="tool_use"){let a=i.name||"tool",l=typeof i.id=="string"?i.id:void 0,c=i.input,u="";c&&(typeof c.command=="string"?u=c.command:typeof c.file_path=="string"?u=c.file_path:typeof c.path=="string"?u=c.path:typeof c.pattern=="string"?u=c.pattern:typeof c.url=="string"?u=c.url:u=Pe(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:Pe(u),id:l,raw:i})}else if(o==="thinking"||o==="redacted_thinking"){let a=i.thinking||i.data||"";e({kind:"thinking",summary:Pe(a),raw:i})}else if(o==="tool_result"){let l=i.is_error===!0?"error":"ok",c=typeof i.tool_use_id=="string"?i.tool_use_id:void 0,u,d=i.content;if(typeof d=="string")u=`${d.split(`
2277
+ ${x}`:T.message,A,w,u),{usage:k.usage.usage(),sessionId:a}))}for(let x of h.splice(0))x()}),s.on("close",(A,w)=>{if(!o.exited){o.exited=!0,o.exitCode=A,o.signal=w;for(let T of h.splice(0))T()}});try{if(await f("initialize",kS()),g("initialized",{}),t.threadId){let A;try{A=await f("thread/resume",{threadId:t.threadId,sandbox:r,approvalPolicy:"never",...t.model?{model:t.model}:{}})}catch(T){throw new Error(`Cannot resume codex thread ${t.threadId} for a bundle: ${T instanceof Error?T.message:String(T)} (the thread/start fallback is disabled in bundle mode)`)}let w=A.result?.thread;if(w?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${w?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let w=(await f("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;w?.id&&(a=w.id,t.onSessionId?.(a))}}catch(A){let w=c??(A instanceof Error?A:new Error(String(A)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)s.stdin?.end(),await y();else{let T=t.closeTimeoutMs??2e3;await ve(s,{softDelayMs:Math.min(1e3,T),killDelayMs:Math.min(1e3,T)}).catch(()=>{})}throw w}let O=A=>new Promise(w=>{setTimeout(w,A).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return o.completedTurns},async sendTurn(A,w={}){if(E&&await E,o.closed||o.closing!==null)throw new Error("codex bundle session is closed");if(o.exited)throw b();if(_!==null)throw new Error("codex bundle session has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending");if(w.signal?.aborted)throw new Error("Aborted");return new Promise((T,k)=>{let x={usage:l.turn(a),onUsage:w.onUsage,agentState:cu(),turnState:du(),resolve:T,reject:k,startMs:Date.now(),turnId:"",onDelta:w.onDelta,onEvent:w.onEvent,settled:!1};_=x;let C=()=>{x.settled||(x.settled=!0,_=null,v=x,E=new Promise(L=>{R=L}),S(x),w.signal?.removeEventListener("abort",C),x.usage.finish(),k(Object.assign(new Error("Aborted"),{usage:x.usage.usage(),sessionId:a})))};w.signal?.addEventListener("abort",C,{once:!0}),f("turn/start",{threadId:a,input:[{type:"text",text:A}],...t.model?{model:t.model}:{}}).then(L=>{x.usage.bind(L.result?.turn?.id)}).catch(L=>{if(x.settled){v===x&&(v=null,R?.());return}x.settled=!0,_=null,w.signal?.removeEventListener("abort",C),x.usage.finish(),k(Object.assign(o.exited?b():L instanceof Error?L:new Error(String(L)),{usage:x.usage.usage(),sessionId:a}))})})},close(){return o.closing!==null||(o.closing=(async()=>{if(o.closed=!0,R?.(),!o.exited&&(t.holdOpen!==void 0?await new Promise(A=>{Sn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>o.exited,isTurnInFlight:()=>_!==null,lastEventAtMs:()=>i,closeStdin:()=>{s.stdin?.end(),A()},label:"codex"})}):s.stdin?.end(),!o.exited)){let A=t.closeTimeoutMs;if(A===void 0&&t.serviceHosted)await y();else{let w=A??2e3;await Promise.race([y(),O(w)]),o.exited||await ve(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,w),killDelayMs:Math.min(1e3,w)}).catch(()=>{})}}})()),o.closing}}}var Vj,CS=M(()=>{"use strict";Uf();ke();ke();Mr();ks();sa();kn();zf();ke();ln();an();Yf();Yf();Vj=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(Gj(Jj(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Pe(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function NS(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=Kj){let r=t.keys().next().value;r!==void 0&&t.delete(r)}t.set(n.id,Date.now()),e(n);return}if(n.kind==="tool_result"&&typeof n.id=="string"&&n.elapsedMs===void 0){let r=t.get(n.id);if(r!==void 0){e({...n,elapsedMs:Date.now()-r}),t.delete(n.id);return}}e(n)}}function OS(){let t=new Map;return(e,n)=>{Yj(e,NS(t,n))}}function Yj(t,e){let n=t.type;if(n==="system"){let r=t.subtype;if(r==="api_retry"){let s=typeof t.attempt=="number"?t.attempt:void 0,i=typeof t.max_retries=="number"?t.max_retries:void 0,o=typeof t.error_status=="number"?t.error_status:void 0,a=typeof t.error=="string"?t.error:void 0,l=typeof t.retry_delay_ms=="number"?t.retry_delay_ms:void 0,c=[];s!==void 0&&c.push(i!==void 0?`attempt ${s}/${i}`:`attempt ${s}`),o!==void 0&&c.push(`HTTP ${o}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(Pe(a,60));let u=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:u});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,i=typeof t.error=="string"?t.error:void 0,o=["api_error"];s!==void 0&&o.push(`HTTP ${s}`),i&&o.push(Pe(i,80)),e({kind:"other",summary:o.join(": "),raw:t});return}e({kind:"system",summary:r||"system",raw:t});return}if(n==="assistant"||n==="user"){let s=t.message?.content;if(!Array.isArray(s))return;for(let i of s){let o=i.type;if(o==="text"){let a=i.text||"";a&&e({kind:"text",summary:Pe(a),raw:i})}else if(o==="tool_use"){let a=i.name||"tool",l=typeof i.id=="string"?i.id:void 0,c=i.input,u="";c&&(typeof c.command=="string"?u=c.command:typeof c.file_path=="string"?u=c.file_path:typeof c.path=="string"?u=c.path:typeof c.pattern=="string"?u=c.pattern:typeof c.url=="string"?u=c.url:u=Pe(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:Pe(u),id:l,raw:i})}else if(o==="thinking"||o==="redacted_thinking"){let a=i.thinking||i.data||"";e({kind:"thinking",summary:Pe(a),raw:i})}else if(o==="tool_result"){let l=i.is_error===!0?"error":"ok",c=typeof i.tool_use_id=="string"?i.tool_use_id:void 0,u,d=i.content;if(typeof d=="string")u=`${d.split(`
2278
2278
  `).length} lines, ${d.length} chars`;else if(Array.isArray(d)){let m=d.map(p=>typeof p=="object"&&p&&"text"in p?p.text:"").filter(Boolean).join("");m&&(u=`${m.split(`
2279
- `).length} lines, ${m.length} chars`)}e({kind:"tool_result",status:l,summary:u,id:c,raw:i})}else o&&e({kind:"other",summary:o,raw:i})}return}if(n==="result"){e({kind:"system",summary:"result",raw:t});return}}async function fu(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?OS():void 0;if(e.bundleSession!==void 0)return Zn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await vS(t,{sessionId:e.sessionId,cwd:e.cwd,env:e.env,tool:n,binaryPath:e.progPath,model:e.model,permissionMode:e.permissionMode,onText:e.onDelta,onUsage:e.onUsage,onEvent:i=>{typeof i.session_id=="string"&&i.session_id&&e.onSessionId?.(i.session_id),r&&r(i,e.onProgress)},signal:e.signal,holdOpen:e.holdOpen});return{text:s.result,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs,numTurns:s.numTurns,...s.warnings!==void 0&&s.warnings.length>0?{warnings:s.warnings}:{}}}async function gu(t){let e=t.binary==="qwen"?"qwen":"claude",n=await bS({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let i=OS(),o=await n.sendTurn(r,{onText:s.onDelta,onEvent:a=>{s.onEvent?.(a),s.onProgress&&i(a,s.onProgress)},signal:s.signal});return{text:o.result,...o.usage?{usage:o.usage}:{},sessionId:o.sessionId,durationMs:o.durationMs,...o.warnings!==void 0?{warnings:o.warnings}:{}}},close:()=>n.close()}}function LS(){let t=new Map;return(e,n)=>{Kj(e,NS(t,n))}}function Kj(t,e){if(t.method!=="session/update")return;let s=t.params?.update;if(!s)return;let i=s.sessionUpdate;if(i){if(i==="agent_message_chunk"){let a=s.content?.text||"";a&&e({kind:"text",summary:Pe(a)});return}if(i==="agent_thought_chunk"||i==="thought"||i==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:Pe(a)});return}if(i==="tool_call"){let o=s.title||s.kind||"tool",a=typeof s.toolCallId=="string"?s.toolCallId:void 0,l="",c=s.rawInput;c&&(typeof c.command=="string"?l=c.command:typeof c.file_path=="string"?l=c.file_path:typeof c.path=="string"?l=c.path:l=Pe(JSON.stringify(c))),e({kind:"tool_use",tool:o,summary:Pe(l),id:a});return}if(i==="tool_call_update"){let o=s.status||"",a=typeof s.toolCallId=="string"?s.toolCallId:void 0;if(o==="completed"||o==="failed")e({kind:"tool_result",summary:o,status:o==="failed"?"error":"ok",id:a});else if(o==="in_progress"){let l=s.content,c=typeof l=="string"?l:typeof l?.text=="string"?l.text:"",u=c?`running\u2026 ${Pe(c,80)}`:"running\u2026";e({kind:"other",summary:u,id:a})}return}e({kind:"other",summary:i})}}function MS(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function cn(t,e){let n=e.acpTool||e.binary,r=e.onProgress?LS():void 0;if(e.bundleSession!==void 0)return Zn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=[];if(e.model&&n==="copilot"){let a="copilot --acp does not implement per-session model selection";ht({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let i=await zT(t,{tool:n,sessionId:e.sessionId,onSessionId:e.onSessionId,cwd:e.cwd,env:e.env,binaryPath:e.progPath,model:e.model,effort:e.effort,alias:e.alias,permissionMode:e.permissionMode,acpMode:e.acpMode,requireResume:e.requireResume,onDelta:e.onDelta,onEvent:r?a=>r(a,e.onProgress):void 0,signal:e.signal,holdOpen:e.holdOpen}),o=[...s,...i.warnings??[]];return{text:i.result,sessionId:i.sessionId,durationMs:i.durationMs,stopReason:i.stopReason,...MS(i.result,i.sawActivity)!==void 0?{status:"empty"}:{},...o.length>0?{warnings:o}:{}}}async function Rn(t){let e=t.acpTool||t.binary,n=await KT({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,effort:t.effort,alias:t.alias,permissionMode:t.permissionMode,acpMode:t.acpMode,requireResume:!0,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let i=LS(),o=await n.sendTurn(r,{...s,onEvent:a=>{s.onEvent?.(a),s.onProgress&&i(a,s.onProgress)}});return{text:o.result,sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,sawActivity:o.sawActivity,...MS(o.result,o.sawActivity)?{status:"empty"}:{},...o.warnings!==void 0?{warnings:o.warnings}:{}}},close:()=>n.close()}}function PS(t,e){let n=t.method;if(!n)return;let r=t.params;if(n==="turn/started"){e({kind:"system",summary:"turn started"});return}if(n==="turn/completed"){e({kind:"system",summary:"turn completed"});return}if(n==="error"){let s=r?.error,i=typeof s?.message=="string"?s.message:void 0,o=i&&i.length>0?i:"(no message)",a=r?.willRetry===!0;e(a?{kind:"api_retry",summary:`codex retry: ${Pe(o,120)}`}:{kind:"other",summary:`codex error: ${Pe(o,120)}`});return}if(n==="item/started"||n==="item/completed"){let s=r?.item;if(!s)return;let i=s.type,o=n==="item/started";switch(i){case"commandExecution":{let a=typeof s.id=="string"?s.id:void 0,l=s.command,c=Array.isArray(l)?l.join(" "):typeof l=="string"?l:"";if(o)e({kind:"tool_use",tool:"Bash",summary:Pe(c||"(command)"),id:a});else{let u=s.exitCode,d=s.status||"",m=typeof s.durationMs=="number"?s.durationMs:void 0,p=typeof u=="number"?`exit ${u}`:d||"done",f=[];typeof u=="number"?f.push(`exit ${u}`):d&&f.push(d),typeof m=="number"&&f.push(`${Math.round(m/1e3)}s`),e({kind:"tool_result",summary:f.join(", ")||"done",status:p,elapsedMs:m,id:a})}return}case"fileChange":{let a=typeof s.id=="string"?s.id:void 0;if(o){let l=s.changes,c=Array.isArray(l)?l.map(u=>u.path||"").filter(Boolean).join(", "):"";e({kind:"tool_use",tool:"FileChange",summary:Pe(c||"(edit)"),id:a})}else{let l=s.status||"done";e({kind:"tool_result",summary:l,status:l,id:a})}return}case"mcpToolCall":{let a=typeof s.id=="string"?s.id:void 0,l=s.server||"mcp",c=s.tool||"tool";if(o)e({kind:"tool_use",tool:`${l}/${c}`,summary:"",id:a});else{let u=s.status||"done";e({kind:"tool_result",summary:u,status:u,id:a})}return}case"webSearch":{let a=typeof s.id=="string"?s.id:void 0;e(o?{kind:"tool_use",tool:"WebSearch",summary:Pe(s.query||""),id:a}:{kind:"tool_result",summary:"done",status:"done",id:a});return}case"reasoning":{o&&e({kind:"thinking",summary:""});return}case"agentMessage":case"userMessage":return;default:{i&&e({kind:o?"tool_use":"tool_result",tool:i,summary:""});return}}}if(n==="item/agentMessage/delta"){let s=r?.delta||"";if(s){let i=typeof r?._lmctlItemPhase=="string"?r._lmctlItemPhase:void 0;e(i==="commentary"?{kind:"thinking",summary:Pe(s)}:{kind:"text",summary:Pe(s)})}return}if(n.startsWith("item/reasoning/")||n==="item/reasoning/summaryTextDelta"||n==="item/reasoning/textDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";e({kind:"thinking",summary:Pe(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let i=s.split(`
2279
+ `).length} lines, ${m.length} chars`)}e({kind:"tool_result",status:l,summary:u,id:c,raw:i})}else o&&e({kind:"other",summary:o,raw:i})}return}if(n==="result"){e({kind:"system",summary:"result",raw:t});return}}async function fu(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?OS():void 0;if(e.bundleSession!==void 0)return Zn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await vS(t,{sessionId:e.sessionId,cwd:e.cwd,env:e.env,tool:n,binaryPath:e.progPath,model:e.model,permissionMode:e.permissionMode,onText:e.onDelta,onUsage:e.onUsage,onEvent:i=>{typeof i.session_id=="string"&&i.session_id&&e.onSessionId?.(i.session_id),r&&r(i,e.onProgress)},signal:e.signal,holdOpen:e.holdOpen});return{text:s.result,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs,numTurns:s.numTurns,...s.warnings!==void 0&&s.warnings.length>0?{warnings:s.warnings}:{}}}async function gu(t){let e=t.binary==="qwen"?"qwen":"claude",n=await bS({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let i=OS(),o=await n.sendTurn(r,{onText:s.onDelta,onEvent:a=>{s.onEvent?.(a),s.onProgress&&i(a,s.onProgress)},signal:s.signal});return{text:o.result,...o.usage?{usage:o.usage}:{},sessionId:o.sessionId,durationMs:o.durationMs,...o.warnings!==void 0?{warnings:o.warnings}:{}}},close:()=>n.close()}}function LS(){let t=new Map;return(e,n)=>{Qj(e,NS(t,n))}}function Qj(t,e){if(t.method!=="session/update")return;let s=t.params?.update;if(!s)return;let i=s.sessionUpdate;if(i){if(i==="agent_message_chunk"){let a=s.content?.text||"";a&&e({kind:"text",summary:Pe(a)});return}if(i==="agent_thought_chunk"||i==="thought"||i==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:Pe(a)});return}if(i==="tool_call"){let o=s.title||s.kind||"tool",a=typeof s.toolCallId=="string"?s.toolCallId:void 0,l="",c=s.rawInput;c&&(typeof c.command=="string"?l=c.command:typeof c.file_path=="string"?l=c.file_path:typeof c.path=="string"?l=c.path:l=Pe(JSON.stringify(c))),e({kind:"tool_use",tool:o,summary:Pe(l),id:a});return}if(i==="tool_call_update"){let o=s.status||"",a=typeof s.toolCallId=="string"?s.toolCallId:void 0;if(o==="completed"||o==="failed")e({kind:"tool_result",summary:o,status:o==="failed"?"error":"ok",id:a});else if(o==="in_progress"){let l=s.content,c=typeof l=="string"?l:typeof l?.text=="string"?l.text:"",u=c?`running\u2026 ${Pe(c,80)}`:"running\u2026";e({kind:"other",summary:u,id:a})}return}e({kind:"other",summary:i})}}function MS(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function cn(t,e){let n=e.acpTool||e.binary,r=e.onProgress?LS():void 0;if(e.bundleSession!==void 0)return Zn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=[];if(e.model&&n==="copilot"){let a="copilot --acp does not implement per-session model selection";ht({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let i=await zT(t,{tool:n,sessionId:e.sessionId,onSessionId:e.onSessionId,cwd:e.cwd,env:e.env,binaryPath:e.progPath,model:e.model,effort:e.effort,alias:e.alias,permissionMode:e.permissionMode,acpMode:e.acpMode,requireResume:e.requireResume,onDelta:e.onDelta,onEvent:r?a=>r(a,e.onProgress):void 0,signal:e.signal,holdOpen:e.holdOpen}),o=[...s,...i.warnings??[]];return{text:i.result,sessionId:i.sessionId,durationMs:i.durationMs,stopReason:i.stopReason,...MS(i.result,i.sawActivity)!==void 0?{status:"empty"}:{},...o.length>0?{warnings:o}:{}}}async function Rn(t){let e=t.acpTool||t.binary,n=await KT({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,effort:t.effort,alias:t.alias,permissionMode:t.permissionMode,acpMode:t.acpMode,requireResume:!0,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let i=LS(),o=await n.sendTurn(r,{...s,onEvent:a=>{s.onEvent?.(a),s.onProgress&&i(a,s.onProgress)}});return{text:o.result,sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,sawActivity:o.sawActivity,...MS(o.result,o.sawActivity)?{status:"empty"}:{},...o.warnings!==void 0?{warnings:o.warnings}:{}}},close:()=>n.close()}}function PS(t,e){let n=t.method;if(!n)return;let r=t.params;if(n==="turn/started"){e({kind:"system",summary:"turn started"});return}if(n==="turn/completed"){e({kind:"system",summary:"turn completed"});return}if(n==="error"){let s=r?.error,i=typeof s?.message=="string"?s.message:void 0,o=i&&i.length>0?i:"(no message)",a=r?.willRetry===!0;e(a?{kind:"api_retry",summary:`codex retry: ${Pe(o,120)}`}:{kind:"other",summary:`codex error: ${Pe(o,120)}`});return}if(n==="item/started"||n==="item/completed"){let s=r?.item;if(!s)return;let i=s.type,o=n==="item/started";switch(i){case"commandExecution":{let a=typeof s.id=="string"?s.id:void 0,l=s.command,c=Array.isArray(l)?l.join(" "):typeof l=="string"?l:"";if(o)e({kind:"tool_use",tool:"Bash",summary:Pe(c||"(command)"),id:a});else{let u=s.exitCode,d=s.status||"",m=typeof s.durationMs=="number"?s.durationMs:void 0,p=typeof u=="number"?`exit ${u}`:d||"done",f=[];typeof u=="number"?f.push(`exit ${u}`):d&&f.push(d),typeof m=="number"&&f.push(`${Math.round(m/1e3)}s`),e({kind:"tool_result",summary:f.join(", ")||"done",status:p,elapsedMs:m,id:a})}return}case"fileChange":{let a=typeof s.id=="string"?s.id:void 0;if(o){let l=s.changes,c=Array.isArray(l)?l.map(u=>u.path||"").filter(Boolean).join(", "):"";e({kind:"tool_use",tool:"FileChange",summary:Pe(c||"(edit)"),id:a})}else{let l=s.status||"done";e({kind:"tool_result",summary:l,status:l,id:a})}return}case"mcpToolCall":{let a=typeof s.id=="string"?s.id:void 0,l=s.server||"mcp",c=s.tool||"tool";if(o)e({kind:"tool_use",tool:`${l}/${c}`,summary:"",id:a});else{let u=s.status||"done";e({kind:"tool_result",summary:u,status:u,id:a})}return}case"webSearch":{let a=typeof s.id=="string"?s.id:void 0;e(o?{kind:"tool_use",tool:"WebSearch",summary:Pe(s.query||""),id:a}:{kind:"tool_result",summary:"done",status:"done",id:a});return}case"reasoning":{o&&e({kind:"thinking",summary:""});return}case"agentMessage":case"userMessage":return;default:{i&&e({kind:o?"tool_use":"tool_result",tool:i,summary:""});return}}}if(n==="item/agentMessage/delta"){let s=r?.delta||"";if(s){let i=typeof r?._lmctlItemPhase=="string"?r._lmctlItemPhase:void 0;e(i==="commentary"?{kind:"thinking",summary:Pe(s)}:{kind:"text",summary:Pe(s)})}return}if(n.startsWith("item/reasoning/")||n==="item/reasoning/summaryTextDelta"||n==="item/reasoning/textDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";e({kind:"thinking",summary:Pe(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let i=s.split(`
2280
2280
  `).filter(l=>l.length>0),o=i[i.length-1]||"",a=i.length>1?`${i.length} lines: ${Pe(o,60)}`:Pe(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n==="item/commandExecution/terminalInteraction"||n==="item/commandExecution/outputChunk"||n==="item/commandExecution/output"){let s=(typeof r?.stdin=="string"?r.stdin:"")||(typeof r?.delta=="string"?r.delta:"")||(typeof r?.output=="string"?r.output:"")||(typeof r?.text=="string"?r.text:"")||(typeof r?.content=="string"?r.content:"")||(typeof r?.chunk=="string"?r.chunk:"")||"";if(s){let i=s.split(`
2281
- `).filter(l=>l.length>0),o=i[i.length-1]||"",a=i.length>1?`${i.length} lines: ${Pe(o,60)}`:Pe(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n.startsWith("item/")){e({kind:"other",summary:n.slice(5)});return}}async function DS(t,e){if(e.bundleSession!==void 0)return Zn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await xS(t,{threadId:e.sessionId,requireResume:e.requireResume,onSessionId:e.onSessionId,onUsage:e.onUsage,cwd:e.cwd,env:e.env,binaryPath:e.progPath,model:e.model,alias:e.alias,isLead:e.isLead,permissionMode:e.permissionMode,onDelta:e.onDelta,onEvent:e.onProgress?r=>PS(r,e.onProgress):void 0,signal:e.signal});return{text:n.result,...n.usage?{usage:n.usage}:{},sessionId:n.threadId,durationMs:n.durationMs}}async function FS(t){let e=await AS({threadId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:"codex",get sessionId(){return e.sessionId},get completedTurns(){return e.completedTurns},async sendTurn(n,r={}){let s=await e.sendTurn(n,{...r,onEvent:i=>{r.onEvent?.(i),r.onProgress&&PS(i,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var Vj,tr=M(()=>{"use strict";Vf();Vf();CS();Nf();$r();ke();Vj=256});function Qf(t={}){let e=Pl(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends be{constructor(){super({provider:new Ml({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. A stored session can be resumed (history is rebuilt from its completed turns)."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>cn(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return Rn({...r,env:n(r.env),binary:"miniplayer",acpTool:"miniplayer"})}manualSeedHint(){return{launchCommand:"miniplayer --help",postLaunchNote:'Use lmctl prompt --provider miniplayer --model <model> "<prompt>". Each invocation creates a fresh run unless a session id is given.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal; use lmctl prompt or lmctl batch")}async seed(r,s){try{s?.signal?.throwIfAborted();try{s?.onDispatch?.()}catch{}let i=await cn(s?.prompt??ce,{binary:"miniplayer",acpTool:"miniplayer",sessionId:"",requireResume:!1,cwd:r,env:n(s?.env),signal:s?.signal,model:s?.model});return{success:!0,sessionId:i.sessionId,usage:i.usage}}catch(i){return{success:!1,usage:i?.usage,error:`miniplayer seed failed: ${i instanceof Error?i.message:String(i)}`}}}}}var Zf=M(()=>{"use strict";at();Fl();tr();Qe()});import{readdir as hu,stat as $S,unlink as Yj}from"node:fs/promises";import{join as Ai,basename as jS}from"node:path";function Qj(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function Zj(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return Se(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}function eU(t,e){t.input=Math.max(t.input,e.input),t.cacheRead=Math.max(t.cacheRead,e.cacheRead),t.cacheWrite=Math.max(t.cacheWrite,e.cacheWrite),t.output=Math.max(t.output,e.output),t.cacheWriteSplitExposed||=e.cacheWriteSplitExposed,e.cacheWrite5m!==void 0&&(t.cacheWrite5m=Math.max(t.cacheWrite5m??0,e.cacheWrite5m)),e.cacheWrite1h!==void 0&&(t.cacheWrite1h=Math.max(t.cacheWrite1h??0,e.cacheWrite1h))}function tU(t){let e=t?.cache_creation?.ephemeral_5m_input_tokens,n=t?.cache_creation?.ephemeral_1h_input_tokens,r=typeof e=="number"||typeof n=="number",s=(e??0)+(n??0);return{input:t?.input_tokens??0,cacheRead:t?.cache_read_input_tokens??0,cacheWrite:Math.max(t?.cache_creation_input_tokens??0,s),...typeof e=="number"?{cacheWrite5m:e}:{},...typeof n=="number"?{cacheWrite1h:n}:{},cacheWriteSplitExposed:r,output:t?.output_tokens??0}}function nU(t){let e=t.cacheWrite1h??0;if(!t.cacheWriteSplitExposed)return{total:t.cacheWrite,fiveMinute:t.cacheWrite,oneHour:0};let n=t.cacheWrite5m??Math.max(0,t.cacheWrite-e),r=n+e;return{total:Math.max(t.cacheWrite,r),fiveMinute:r>t.cacheWrite?n:n+(t.cacheWrite-r),oneHour:e}}async function US(t){let e=0,n=0,r=0,s=0,i=0,o=0,a,l,c=new Map,u=[];for await(let f of Ae(t))if(!f.isSidechain){if(f.type==="user"&&!f.isMeta&&f.message){let g=f.message.content;if(typeof g=="string"){if(g.includes("<command-name>")||g.includes("<local-command-"))continue;e++,l=Q(g.trim(),80)}}else if(f.type==="assistant"&&f.message){let g=f.message.content;if(Array.isArray(g))for(let y of g)y.type==="text"&&e++;let h=f.message.usage;if(h){let y=tU(h),b=f.message.id?.trim();if(b){let v=c.get(b);v?eU(v,y):c.set(b,y)}else u.push(y);let _=y.input+y.cacheWrite+y.cacheRead;_&&(o=_),a={inputTokens:y.input,cacheWriteInputTokens:y.cacheWrite,cachedInputTokens:y.cacheRead,outputTokens:y.output}}}}let d=0,m=0,p=f=>{let g=nU(f);n+=f.input+f.cacheRead+g.total,r+=f.cacheRead,s+=g.total,d+=g.fiveMinute,m+=g.oneHour,i+=f.output};for(let f of c.values())p(f);for(let f of u)p(f);return{messageCount:e,totalInputTokens:n,totalCacheReadInputTokens:r,totalCacheWriteInputTokens:s,totalCacheWrite5mInputTokens:d,totalCacheWrite1hInputTokens:m,totalOutputTokens:i,lastInputTokens:o,lastTokenUsage:a,lastUserMessage:l}}function rU(t){let e=sU(t),n=new Set;for(let r of t){if(r.role!=="tool_use"||r.toolName!=="Bash"||r.toolInputData?.run_in_background!==!0||r.toolCallId===void 0)continue;let s=e.get(r.toolCallId);if(s===void 0)continue;let i=s.content.match(/Command running in background with ID:\s*([A-Za-z0-9_-]+)/)?.[1];i!==void 0&&(n.add(i),r.backgroundTaskId=i,s.backgroundTaskId=i)}for(let r of t){if(r.role!=="tool_use"||r.toolName!=="TaskOutput"&&r.toolName!=="TaskStop"||r.toolCallId===void 0)continue;let s=r.toolInputData?.task_id;if(typeof s!="string"||!n.has(s))continue;r.backgroundTaskId=s;let i=e.get(r.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function sU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var yu,HS=M(()=>{"use strict";We();yu=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Ai(ae,".claude"),this.projectsDir=Ai(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await hu(this.projectsDir)}catch{return e}for(let r of n){let s=Ai(this.projectsDir,r);if(!(await $S(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await hu(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=jS(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Ai(s,a);try{let u=await this.extractSummary(c,l);u&&e.push(u)}catch{}}}return e}async extractSummary(e,n){let r=await jt(e,50),s=await $e(e),i="",o,a,l,c,u,d;for(let p of r)if(!Qj(p.type)&&(!i&&p.cwd&&(i=p.cwd),!o&&p.slug&&(o=p.slug),!a&&p.version&&(a=p.version),!d&&p.timestamp&&(d=new Date(p.timestamp)),p.type==="assistant"&&p.message?.model&&(l=p.message.model),p.type==="user"&&!p.isMeta&&p.message)){let f=p.message.content;if(typeof f=="string"){if(f.includes("<command-name>")||f.includes("<local-command-"))continue;c||(c=Q(f.trim(),80)),u=Q(f.trim(),80)}}if(!i)return null;let m=await US(e);return{provider:"claude",sessionId:n,slug:o,cwd:i,createdAt:d||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:m.lastUserMessage??u,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:m.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:m.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:m.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await $e(n),s=[],i="",o,a,l,c,u,d,m,p=e,f,g=[];for await(let y of Ae(n))if(y.type!=="file-history-snapshot"&&!y.isSidechain){if(!i&&y.cwd&&(i=y.cwd),!o&&y.slug&&(o=y.slug),!a&&y.version&&(a=y.version),!c&&y.gitBranch&&(c=y.gitBranch),!m&&y.timestamp&&(m=new Date(y.timestamp)),y.sessionId&&(p=y.sessionId),y.type==="system"||y.type==="progress"||y.type==="queue-operation"){s.push({role:"system",timestamp:new Date(y.timestamp||0),content:Zj(y)});continue}if(y.type==="user"&&y.message){if(y.isMeta)continue;let b=new Date(y.timestamp||0),_=y.message.content;if(y.isCompactSummary!==!0&&y.isVisibleInTranscriptOnly!==!0&&y.promptSource!=="system"&&y.toolUseResult===void 0&&y.origin?.kind!=="task-notification"&&y.interruptedMessageId===void 0&&y.interruptedByShutdown!==!0&&y.scheduledTaskId===void 0&&y.scheduledFireId===void 0&&!(Array.isArray(_)&&_.some(v=>v.type==="tool_result"))){let v=typeof _=="string"?_:Array.isArray(_)?_.filter(E=>E.type==="text"&&typeof E.text=="string").map(E=>E.text).join(`
2282
- `):"";v&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(v.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(v.trim())&&!v.trimStart().startsWith("lmctl seed initial connection only.")&&g.push(v)}if(typeof _=="string"){let v=_.trim();if(v.includes("<command-name>")||v.includes("<local-command-")||/^<task-notification>\s*</u.test(v)||v.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(v))continue;u||(u=Q(_.trim(),80)),d=Q(_.trim(),80),f=void 0,s.push({role:"user",timestamp:b,content:Se(_.trim())})}else if(Array.isArray(_)){for(let v of _)if(v.type==="tool_result"){let E=typeof v.content=="string"?Se(v.content):JSON.stringify(v.content);s.push({role:"tool_result",timestamp:b,content:E,toolCallId:v.tool_use_id})}}}if(y.type==="assistant"&&y.message){y.message.stop_reason===null||y.message.stop_reason==="tool_use"?f="in_progress":typeof y.message.stop_reason=="string"&&(f="complete"),y.message.model&&(l=y.message.model);let b=new Date(y.timestamp||0),_=y.message.content;if(Array.isArray(_))for(let v of _)v.type==="text"&&v.text?s.push({role:"assistant",timestamp:b,content:Se(v.text),model:y.message.model,...typeof y.message.stop_reason=="string"?{stopReason:y.message.stop_reason}:{}}):v.type==="tool_use"?s.push({role:"tool_use",timestamp:b,content:v.name||"unknown tool",toolName:v.name,toolInput:JSON.stringify(v.input,null,2),toolInputData:v.input,toolCallId:v.id,model:y.message.model,...typeof y.message.stop_reason=="string"?{stopReason:y.message.stop_reason}:{}}):v.type==="thinking"&&v.thinking&&s.push({role:"thinking",timestamp:b,content:v.thinking})}}if(!i)return null;rU(s);let h=await US(n);return{provider:"claude",sessionId:p,slug:o,cwd:i,createdAt:m||r.createdAt,modifiedAt:r.modifiedAt,model:l,cliVersion:a,startCommand:"claude",gitBranch:c,turnStatus:f,firstUserMessage:u,lastUserMessage:d,messageCount:h.messageCount,filePath:n,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:h.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:h.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:h.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:s,userPrompts:g}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await Yj(n),!0):!1}async resolveSessionFile(e){let n;try{n=await hu(this.projectsDir)}catch{return null}let r=[];for(let o of n){let a=Ai(this.projectsDir,o);if(!(await $S(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await hu(a)}catch{continue}for(let u of c){if(!u.endsWith(".jsonl"))continue;let d=jS(u,".jsonl");/^[0-9a-f]{8}-/.test(d)&&r.push({filePath:Ai(a,u),fileSessionId:d})}}let s=r.find(o=>o.fileSessionId===e);if(s)return s.filePath;let i=r.filter(o=>o.fileSessionId.startsWith(e));if(i.length===1)return i[0].filePath;for(let o of r){let a=await jt(o.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return o.filePath}return null}}});import{join as BS}from"node:path";function tg(t){return new eg(t)}var eg,ng=M(()=>{"use strict";HS();at();We();tr();Qe();eg=class extends be{claudeDir;constructor(e){super({provider:new yu(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",ce,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:fu}),this.claudeDir=e?.claudeDir??BS(ae,".claude")}openSession(e){return gu({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[BS(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as iU,stat as WS,unlink as oU}from"node:fs/promises";import{join as ga,basename as aU}from"node:path";function rg(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&lU.has(n)}function cU(t,e,n){return`${t}|${e.toISOString()}|${n}`}function ha(t,e,n){let r=cU(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function qS(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function uU(t){if(!t)return;let e=t.cached_input_tokens??t.cache_read_input_tokens;return{inputTokens:t.input_tokens,cachedInputTokens:e,outputTokens:t.output_tokens,reasoningOutputTokens:t.reasoning_output_tokens,totalTokens:t.total_tokens}}function Ci(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t))return t.map(n=>{if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.text=="string")return r.text;if(typeof r.image_url=="string")return"[input_image]";if(typeof r.type=="string")return`[${r.type}]`}return Ci(n)}).filter(n=>n.length>0).join(`
2283
- `);try{return JSON.stringify(t)}catch{return String(t)}}function dU(t){let e=t;if(typeof t=="string")try{e=JSON.parse(t)}catch{return}return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function mU(t,e){if(e===void 0)return;let n={input:e};if(t!=="apply_patch"||typeof e!="string")return n;let r=[...e.matchAll(/^\*\*\* (?:(Add|Update|Delete) File|(Move) to): (.+)\r?$/gm)].map(s=>({kind:s[1]??s[2],path:s[3]?.trim()})).filter(s=>!!(s.kind&&s.path));return r.length>0&&(n.path=r[0].path,n.paths=r.map(s=>s.path),n.kinds=r.map(s=>s.kind)),n}async function XS(t){let e=0,n=0,r=0,s=0,i=0,o,a,l=new Set,c,u;for await(let d of Ae(t)){if(d.type==="event_msg"&&d.payload?.type==="user_message"){let m=d.payload.message||d.payload.text;m&&(u=Q(m.trim(),80))}if(d.type==="response_item"&&d.payload){let m=d.payload;if(m.type==="message"&&m.role==="user"&&m.content){let p=m.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let f=0;f<m.content.length;f++){let g=m.content[f];rg(p,f)||g.type==="input_text"&&typeof g.text=="string"&&g.text&&(e++,u=Q(g.text.trim(),80))}}else if(m.type==="message"&&m.role==="assistant"&&m.content)for(let p of m.content)p.type==="output_text"&&typeof p.text=="string"&&p.text&&e++}if(d.payload&&typeof d.payload.model_context_window=="number"&&(c=d.payload.model_context_window),d.type==="event_msg"&&d.payload?.type==="token_count"&&d.payload.info?.total_token_usage){let m=d.payload.info.total_token_usage;n=m.input_tokens??n,r=m.cached_input_tokens??m.cache_read_input_tokens??r,s=m.output_tokens??s,i=m.reasoning_output_tokens??i;let p=d.payload.info.last_token_usage;if(p&&typeof p.input_tokens=="number"&&typeof p.output_tokens=="number"){let g=JSON.stringify([d.timestamp??null,d.ordinal??null,m,p]);if(!l.has(g)){l.add(g);let h=[p.input_tokens,p.cached_input_tokens??p.cache_read_input_tokens??0,p.output_tokens,p.reasoning_output_tokens??0];a??=[0,0,0,0],h.forEach((y,b)=>{a[b]+=y})}}let f=uU(d.payload.info.last_token_usage);f&&(o=f),typeof d.payload.info.model_context_window=="number"&&(c=d.payload.info.model_context_window)}}return a&&([n,r,s,i]=a),{messageCount:e,totalInputTokens:n,totalCachedInputTokens:r,totalOutputTokens:s,totalReasoningOutputTokens:i,lastTokenUsage:o,modelContextWindow:c,lastUserMessage:u}}var lU,_u,GS=M(()=>{"use strict";We();lU=new Set(["agents_md.instructions","environments.environment_context","plugins.recommendations","plugins.usage_instructions","apps.instructions","collaboration_mode.instructions","generic.developer_instructions","host_skills.instructions","model_switch.instructions","multi_agent.mode_instructions","multi_agent.role_instructions","multi_agent.usage_hint","permissions.instructions","skills.instructions"]);_u=class{name="codex";codexDirs;constructor(e={}){let n=[ga(ae,".codex"),ga(ae,".code")];if(e.codexDirs&&e.codexDirs.length>0){this.codexDirs=[...new Set(e.codexDirs)];return}let r=[e.codexDir||n[0],e.codeDir||n[1]];this.codexDirs=[...new Set(r)]}getWatchPaths(){return this.codexDirs.map(e=>({directory:ga(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=ga(n,"sessions");try{await WS(r),e.push(r)}catch{}}return e}async discoverSessions(){let e=[],n=await this.getSessionsDirs();for(let r of n){let s=await this.findSessionFiles(r);for(let i of s)try{let o=await this.extractSummary(i);o&&e.push(o)}catch{}}return e}async findSessionFiles(e){let n=[],r;try{r=await iU(e)}catch{return n}for(let s of r){let i=ga(e,s),o=await WS(i).catch(()=>null);if(o)if(o.isDirectory()){let a=await this.findSessionFiles(i);n.push(...a)}else s.endsWith(".jsonl")&&n.push(i)}return n}extractSessionIdFromFilename(e){let n=aU(e,".jsonl"),r=n.match(/rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/);return r?r[1]:n}async extractSummary(e){let n=await jt(e,30),r=await $e(e),s=this.extractSessionIdFromFilename(e),i="",o,a,l,c,u,d,m;for(let f of n){if(f.type==="session_meta"&&f.payload&&(f.payload.id&&(s=f.payload.id),f.payload.cwd&&(i=f.payload.cwd),f.payload.cli_version&&(o=f.payload.cli_version),f.payload.timestamp&&(l=new Date(f.payload.timestamp)),f.payload.originator&&(d=f.payload.originator),f.payload.source&&(m=f.payload.source)),f.type==="turn_context"&&f.payload&&(f.payload.model&&(a=f.payload.model),!i&&f.payload.cwd&&(i=f.payload.cwd)),f.type==="event_msg"&&f.payload?.type==="user_message"){let g=f.payload.message||f.payload.text;g&&(c||(c=Q(g.trim(),80)),u=Q(g.trim(),80))}if(f.type==="response_item"&&f.payload?.type==="message"&&f.payload.role==="user"&&f.payload.content){let g=f.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let h=0;h<f.payload.content.length;h++){let y=f.payload.content[h];rg(g,h)||y.type==="input_text"&&typeof y.text=="string"&&y.text&&(c||(c=Q(y.text.trim(),80)),u=Q(y.text.trim(),80))}}}if(!i)return null;let p=await XS(e);return{provider:"codex",sessionId:s,cwd:i,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:o,startCommand:qS(d,m),firstUserMessage:c,lastUserMessage:p.lastUserMessage??u,messageCount:p.messageCount,filePath:e,totalInputTokens:p.totalInputTokens||void 0,totalCachedInputTokens:p.totalCachedInputTokens||void 0,totalOutputTokens:p.totalOutputTokens||void 0,totalReasoningOutputTokens:p.totalReasoningOutputTokens||void 0,lastInputTokens:p.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:p.lastTokenUsage,modelContextWindow:p.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await $e(n),s=[],i="",o,a,l,c,u,d=e,m,p,f=new Set,g=[],h=new Set,y=[],b=(E,R)=>{let S=y.find(I=>!I.mirrored&&I.source!==R&&I.text===E);S?S.mirrored=!0:y.push({text:E,source:R,mirrored:!1})},_=()=>{g.push(...y.map(E=>E.text)),y=[]};for await(let E of Ae(n)){let R=E.timestamp?new Date(E.timestamp):new Date;if(E.type==="session_meta"&&E.payload){E.payload.id&&(d=E.payload.id),E.payload.cwd&&(i=E.payload.cwd),E.payload.cli_version&&(o=E.payload.cli_version),E.payload.timestamp&&(l=new Date(E.payload.timestamp)),m=qS(E.payload.originator,E.payload.source);continue}if(E.type==="turn_context"&&E.payload){E.payload.model&&(a=E.payload.model),!i&&E.payload.cwd&&(i=E.payload.cwd);continue}if(E.type==="response_item"&&E.payload){let S=E.payload;if(S.type==="message"){if(S.role==="user"&&S.content){let I=S.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(I)){let N=S.content.filter((O,A)=>I[A]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
2284
- `);I.includes("user.text")&&N&&(!S.id||!h.has(S.id))&&(b(N,"metadata"),S.id&&h.add(S.id))}for(let N=0;N<S.content.length;N++){let O=S.content[N];if(!rg(I,N)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let A=O.text.trim();c||(c=Q(A,80)),u=Q(A,80),ha(s,f,{role:"user",timestamp:R,content:Se(A)})}}continue}if(S.role==="assistant"&&S.content){for(let I of S.content)I.type==="output_text"&&typeof I.text=="string"&&I.text&&ha(s,f,{role:"assistant",timestamp:R,content:Se(I.text),model:a});continue}if(S.role!=="user"&&S.role!=="assistant"&&S.content){for(let I of S.content)(I.type==="input_text"||I.type==="output_text")&&typeof I.text=="string"&&I.text&&ha(s,f,{role:"system",timestamp:R,content:Se(I.text.trim())});continue}}if(S.type==="function_call"){s.push({role:"tool_use",timestamp:R,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments!==void 0?Se(Ci(S.arguments)):void 0,toolInputData:dU(S.arguments),toolCallId:S.call_id});continue}if(S.type==="function_call_output"){s.push({role:"tool_result",timestamp:R,content:Se(Ci(S.output)),toolCallId:S.call_id});continue}if(S.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:R,content:S.name||"unknown tool",toolName:S.name,toolInput:S.input!==void 0?Se(Ci(S.input)):void 0,toolInputData:mU(S.name,S.input),toolCallId:S.call_id});continue}if(S.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:R,content:Se(Ci(S.output)),toolCallId:S.call_id});continue}if(S.type==="reasoning"&&S.summary){let I=S.summary.map(N=>Ci(N.text)).join(`
2285
- `);I.trim()&&ha(s,f,{role:"thinking",timestamp:R,content:Se(I)});continue}}if(E.type==="event_msg"&&E.payload&&(E.payload.type==="task_started"?(_(),p="in_progress"):E.payload.type==="task_complete"?p="complete":E.payload.type==="turn_aborted"&&(p="aborted"),E.payload.type==="user_message"&&typeof E.payload.message=="string"&&b(E.payload.message,"event"),E.payload.type==="agent_reasoning")){let S=E.payload.message||E.payload.text;S&&ha(s,f,{role:"thinking",timestamp:R,content:Se(S)})}}if(!i)return null;_();let v=await XS(n);return{provider:"codex",sessionId:d,cwd:i,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:o,startCommand:m,turnStatus:p,firstUserMessage:c,lastUserMessage:u,messageCount:v.messageCount,filePath:n,totalInputTokens:v.totalInputTokens||void 0,totalCachedInputTokens:v.totalCachedInputTokens||void 0,totalOutputTokens:v.totalOutputTokens||void 0,totalReasoningOutputTokens:v.totalReasoningOutputTokens||void 0,lastInputTokens:v.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:v.lastTokenUsage,modelContextWindow:v.modelContextWindow,messages:s,userPrompts:g}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await oU(n),!0):!1}async resolveSessionFile(e){let n=await this.getSessionsDirs(),r=[];for(let i of n){let o=await this.findSessionFiles(i);r.push(...o)}for(let i of r)if(this.extractSessionIdFromFilename(i)===e)return i;let s=[];for(let i of r)this.extractSessionIdFromFilename(i).startsWith(e)&&s.push(i);if(s.length===1)return s[0];for(let i of r){let o=await jt(i,1);if(o.length>0&&o[0].type==="session_meta"){let a=o[0].payload?.id;if(a===e||a&&a.startsWith(e))return i}}return null}}});import{execFile as pU}from"node:child_process";import{realpathSync as JS,readdirSync as fU}from"node:fs";import{homedir as gU}from"node:os";import{join as vu,resolve as VS,sep as hU}from"node:path";function og(t){return new ig(t)}var sg,ig,ag=M(()=>{"use strict";GS();at();tr();Qe();sg="gpt-5.6-sol",ig=class extends be{nativeLaunchFailureHint="If the message mentions a shared background server or feature mismatch, it could be a CLI/daemon version mismatch: compare codex --version with codex app-server daemon version (cliVersion vs appServerVersion) and search the web for the error text.";constructor(e){super({provider:new _u(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append"},binary:"codex",seedArgs:["exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","-"],seedStdin:`${ce}
2286
- `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:DS})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(N,O)=>new Promise(A=>{let w=Math.ceil(n-performance.now());if(w<=0){A(void 0);return}let T,k=()=>{try{T?.kill("SIGKILL")}catch{}},x=()=>{k()},C=()=>{k()},L=()=>{k()};process.once("exit",x),process.once("SIGINT",C),process.once("SIGTERM",L);let P=()=>{process.removeListener("exit",x),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",L)};T=pU(N,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:w,killSignal:"SIGKILL",maxBuffer:65536},(j,F)=>{P(),A(j?void 0:F)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let i;try{i=JSON.parse(s)}catch{let N=s.match(/\{[\s\S]*\}/);if(N)try{i=JSON.parse(N[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let o=N=>typeof N=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(N)&&N.length<=100,a=typeof i?.cliVersion=="string"?i.cliVersion:typeof i?.cli_version=="string"?i.cli_version:"",l=typeof i?.appServerVersion=="string"?i.appServerVersion:typeof i?.app_server_version=="string"?i.app_server_version:"",c=a.trim(),u=l.trim(),d=typeof i?.status=="string"?i.status.toLowerCase():"";if(!(d==="running"||d==="alreadyrunning")||!o(c)||!o(u))return{kind:"ok"};if(c===u)return{kind:"ok"};let p="codex CLI "+c+" differs from the running codex daemon "+u,f="To align your CLI: npm i -g @openai/codex@"+u,g=p+"; using the daemon's binary. "+f,h={kind:"ok",message:p+"; no matching daemon binary is available, launching the PATH CLI. "+f},y=VS(e.cwd,e.env.CODEX_HOME||vu(e.env.HOME||gU(),".codex")),b=[],_=[],v=process.platform==="win32"?"codex.exe":"codex",E=i.managedCodexPath??i.managed_codex_path;typeof E=="string"&&E.trim().length>0&&b.push(E.trim());let R=N=>N.replace(/\+.*$/,""),S=R(u),I=process.arch==="arm64"?"aarch64":"x86_64";for(let N of["app-server-daemon","standalone"]){let O=vu(y,"packages",N,"releases");try{_.push(JS(O)+hU);let A=fU(O).filter(w=>process.arch==="x64"&&(w.includes("aarch64")||w.includes("arm64"))||process.arch==="arm64"&&(w.includes("x86_64")||w.includes("x64")||w.includes("i686"))?!1:w===u||w===S||w.startsWith(u+"-")||w.startsWith(S+"-"));A.sort((w,T)=>{let k=w.includes(I)?0:1,x=T.includes(I)?0:1;return k!==x?k-x:w.localeCompare(T)});for(let w of A)b.push(vu(O,w,"bin",v)),b.push(vu(O,w,v))}catch{}}for(let N of new Set(b)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=JS(VS(e.cwd,N)),!_.some(T=>O.startsWith(T)))continue}catch{continue}let w=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(w&&(w===u||R(w)===S))return{kind:"use-binary",binary:O,message:g}}return h}openSession(e){return FS({...e,model:e.model??sg})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??sg;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:sg}}}});import{createHash as yU}from"node:crypto";import{readdir as ya,readFile as zS,stat as bu,unlink as _U}from"node:fs/promises";import{join as Wt,basename as vU,dirname as bU}from"node:path";import{cwd as wU}from"node:process";function lg(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function KS(t){return t==="user"}function cg(t){return t==="gemini"||t==="assistant"}function xs(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function EU(t){return`${t.sessionId}\0${t.cwd}`}function TU(t,e){let n=t.filePaths??[t.filePath],r=e.filePaths??[e.filePath],s=[...new Set([...n,...r])],i=e.modifiedAt.getTime()>=t.modifiedAt.getTime()?e:t;return{...i,createdAt:t.createdAt.getTime()<=e.createdAt.getTime()?t.createdAt:e.createdAt,modifiedAt:i.modifiedAt,filePath:i.filePath,filePaths:s}}function wu(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function YS(t){let e=0,n=0,r=0,s=0,i=0,o;for(let a of t){if(!cg(a.type)||!a.tokens)continue;let l=wu(a.tokens.input),c=wu(a.tokens.cached),u=Math.max(l-c,0),d=wu(a.tokens.output),m=wu(a.tokens.thoughts);e+=l,n+=c,r+=d,s+=m,i=l,o={inputTokens:u,cachedInputTokens:c,cacheWriteInputTokens:0,outputTokens:d,reasoningOutputTokens:m,totalTokens:l+d+m}}return{totalInputTokens:e,totalCachedInputTokens:n,totalOutputTokens:r,totalReasoningOutputTokens:s,lastInputTokens:i,lastTokenUsage:o}}function SU(t){return yU("sha256").update(t).digest("hex")}function _a(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=bU(n);if(r===n)break;n=r}}var Eu,QS=M(()=>{"use strict";We();Jl();ke();Eu=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||Wt(ae,".gemini");this.geminiProjectsFile=Wt(n,"projects.json"),this.geminiTmpDir=Wt(n,"tmp");let r=e.claudeDir||Wt(ae,".claude");this.claudeProjectsDir=Wt(r,"projects");let s=[Wt(ae,".codex"),Wt(ae,".code")],i=e.codexDirs&&e.codexDirs.length>0?e.codexDirs:[e.codexDir||s[0],e.codeDir||s[1]];this.codexSessionDirs=[...new Set(i)].map(o=>Wt(o,"sessions")),this.extraWorkspacePaths=e.extraWorkspacePaths||[]}getWatchPaths(){return[{directory:this.geminiTmpDir,filePattern:/\.jsonl?$/}]}async discoverSessions(){let e=await this.findSessionFiles(),n=new Map;for(let r of e)try{let s=await this.extractSummary(r);if(!s)continue;let i=EU(s),o=n.get(i);n.set(i,o?TU(o,s):s)}catch{}return[...n.values()]}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r;try{r=await this.readSessionFile(n)}catch{return null}if(!r)return null;let s=await $e(n),i=[],o=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",u=await this.resolveWorkspace(c),d,m,p;for(let y of a){let b=xs(y.timestamp),_=y.type,v=Se(lg(y.content));if(KS(_)){let R=lg(y.content);R&&o.push(R);let S=v.trim();S&&(d||(d=Q(S,80)),m=Q(S,80)),i.push({role:"user",timestamp:b,content:S||v});continue}if(cg(_)){y.model&&(p=y.model);for(let R of y.thoughts||[]){let S=[R.subject,R.description].filter(Boolean).join(`
2287
- `).trim();S&&i.push({role:"thinking",timestamp:xs(R.timestamp,b),content:Se(S)})}i.push({role:"assistant",timestamp:b,content:v,model:y.model});continue}let E=_?`[${_}] `:"";i.push({role:"system",timestamp:b,content:`${E}${v}`.trim()})}let f=xs(r.startTime,s.createdAt),g=xs(r.lastUpdated,s.modifiedAt),h=YS(a);return{provider:"gemini",sessionId:l,cwd:u,createdAt:f,modifiedAt:g,model:p,startCommand:"gemini",firstUserMessage:d,lastUserMessage:m,messageCount:i.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:n,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCachedInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,totalReasoningOutputTokens:h.totalReasoningOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:i,userPrompts:o}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await $e(e),s=n.messages||[],i=n.sessionId||this.extractSessionIdFromFilename(e),o=n.projectHash||"",a=await this.resolveWorkspace(o),l,c,u,d=0;for(let p of s)if(KS(p.type)){d++;let f=lg(p.content).trim();f&&(l||(l=Q(Se(f),80)),c=Q(Se(f),80))}else cg(p.type)&&(d++,p.model&&(u=p.model));let m=YS(s);return{provider:"gemini",sessionId:i,cwd:a,createdAt:xs(n.startTime,r.createdAt),modifiedAt:xs(n.lastUpdated,r.modifiedAt),model:u,startCommand:"gemini",firstUserMessage:l,lastUserMessage:c,messageCount:d,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async readSessionFile(e){let n=await zS(e,"utf-8");if(Mo(n)==="unknown")return X({event:"gemini_session_format_unknown",provider:"gemini",file:e,preview:n.slice(0,120),message:`gemini session file at ${e} matches neither old (.json with messages[]) nor new (.jsonl with kind metadata) format. Skipping; lmctl ls / audit / stats will not see this session.`}),null;try{return us(n)}catch{return null}}extractSessionIdFromFilename(e){let n=vU(e).replace(/\.jsonl?$/,""),r=n.match(/session-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-(.+)$/);return r?r[1]:n}async findSessionFiles(){let e=[],n;try{n=await ya(this.geminiTmpDir)}catch{return e}for(let r of n){let s=Wt(this.geminiTmpDir,r,"chats");if(!(await bu(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await ya(s)}catch{continue}for(let a of o)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(Wt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await _U(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let i=await this.readSessionFile(s).catch(()=>null),o=this.extractSessionIdFromFilename(s),a=i?.sessionId||o,l=a===e||a.startsWith(e),c=o===e||o.startsWith(e)||o.length>=8&&e.startsWith(o);if(!l&&!c)continue;let u=await $e(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:xs(i?.lastUpdated,u.modifiedAt)})}return r.sort((s,i)=>{let o=i.modifiedAt.getTime()-s.modifiedAt.getTime();return o!==0?o:i.filePath.localeCompare(s.filePath)}),r[0]?.filePath??null}async resolveWorkspace(e){return e?(await this.getWorkspaceHashMap()).get(e)||`[hash:${e.slice(0,16)}]`:"(unknown workspace)"}async getWorkspaceHashMap(){if(this.workspaceHashMap)return this.workspaceHashMap;let e=new Set;_a(e,wU());for(let r of this.extraWorkspacePaths)_a(e,r);for(let r of await this.collectGeminiProjectPaths())_a(e,r);for(let r of await this.collectCodexCwds())_a(e,r);for(let r of await this.collectClaudeCwds())_a(e,r);let n=new Map;for(let r of e)n.set(SU(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await zS(this.geminiProjectsFile,"utf-8")}catch{return[]}try{let r=JSON.parse(e).projects;return!r||typeof r!="object"||Array.isArray(r)?[]:Object.keys(r)}catch{return[]}}async collectCodexCwds(){let e=new Set;for(let n of this.codexSessionDirs){let r=await this.findJsonlFiles(n);for(let s of r){let o=(await jt(s,1).catch(()=>[]))[0]?.payload?.cwd;o&&e.add(o)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await ya(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=Wt(this.claudeProjectsDir,r);if(!(await bu(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await ya(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=Wt(s,a),u=(await jt(l,1).catch(()=>[]))[0]?.cwd;u&&e.add(u)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await bu(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await ya(e)}catch{return n}for(let i of s){let o=Wt(e,i),a=await bu(o).catch(()=>null);if(a)if(a.isDirectory()){let l=await this.findJsonlFiles(o);n.push(...l)}else i.endsWith(".jsonl")&&n.push(o)}return n}}});import{readFileSync as kU,writeFileSync as RU,mkdirSync as IU}from"node:fs";import{join as xU,dirname as AU}from"node:path";import{randomUUID as CU}from"node:crypto";function dg(t){return new ug(t)}var ug,mg=M(()=>{"use strict";_i();QS();at();Qe();Jl();ug=class extends be{constructor(e){super({provider:new Eu(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!1,canResumeInteractive:!1,canFork:!0,forkSupport:"automatic",canStructuredTurn:!1,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"skill-file",leaderSetupHint:"Place skill files in the project's .gemini/ directory"},binary:"gemini",seedArgs:["-p",ce,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(Or))})}seed(e,n){return Promise.resolve({success:!1,error:Or})}sendTurn(e,n){return Promise.reject(new Error(Or))}openSession(e){return Promise.reject(new Error(Or))}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
2288
- `)}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}manualSeedHint(e){return{launchCommand:`cd ${e} && gemini --skip-trust`,postLaunchNote:eu,lsCommand:`lmctl ls --provider gemini --sessiondir ${e}`}}async fork(e,n){let r=await this.resolvePath(e);if(!r)return{success:!1,error:`Session file not found for ${e}`};try{let s=kU(r,"utf-8"),i=Mo(s),o=us(s),a=CU();o.sessionId=a,o.kind="main";let l=AU(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),u=i==="jsonl"?".jsonl":".json",d=`session-${c}-${a.slice(0,8)}${u}`,m=xU(l,d);return IU(l,{recursive:!0}),RU(m,Sb(o,i),"utf-8"),{success:!0,sessionId:a,filePath:m}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}}});import{readdir as ZS,readFile as NU,rm as OU,stat as Ni}from"node:fs/promises";import{basename as LU,join as un}from"node:path";function MU(t){if(!t)return null;let e={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,reasoningTokens:0},n=!1;for(let r of Object.values(t))r?.usage&&(n=!0,e.inputTokens+=r.usage.inputTokens??0,e.outputTokens+=r.usage.outputTokens??0,e.cacheReadTokens+=r.usage.cacheReadTokens??0,e.cacheWriteTokens+=r.usage.cacheWriteTokens??0,e.reasoningTokens+=r.usage.reasoningTokens??0);return n?e:null}function pg(){return{shutdownTotals:null,assistantOutputSum:0}}function tk(t,e){if(e.type==="assistant.message"){let n=e.data?.outputTokens;typeof n=="number"&&(t.assistantOutputSum+=n,t.lastAssistantOutputTokens=n)}else if(e.type==="session.shutdown"){let n=MU(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function ek(t){let e=t.shutdownTotals,n=t.lastAssistantOutputTokens!==void 0?{outputTokens:t.lastAssistantOutputTokens}:void 0;return{totalInputTokens:e?.inputTokens,totalCachedInputTokens:e?.cacheReadTokens,totalCacheWriteInputTokens:e?.cacheWriteTokens,totalOutputTokens:e?.outputTokens??(t.lastAssistantOutputTokens===void 0?void 0:t.assistantOutputSum),totalReasoningOutputTokens:e?.reasoningTokens,lastTokenUsage:n}}function PU(t){let e={};for(let n of t.split(`
2289
- `)){let r=n.match(/^(\w+):\s*(.*)$/);r&&(e[r[1]]=r[2].trim())}return{id:e.id,cwd:e.cwd,summary_count:e.summary_count?parseInt(e.summary_count,10):void 0,created_at:e.created_at,updated_at:e.updated_at,summary:e.summary}}function As(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function DU(t){let e=0,n=pg(),r;for await(let s of Ae(t)){if(s.type==="user.message"){e++;let i=(s.data?.content||"").trim();i&&(r=Q(i,80))}else s.type==="assistant.message"&&(s.data?.content||"").trim()&&e++;tk(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function FU(t){let e=$U(t),n=new Map;for(let r of t){if(r.role!=="tool_use"||r.toolCallId===void 0)continue;if(r.toolName==="bash"){let l=e.get(r.toolCallId),u=[l?.content,l?.toolDetailedContent].filter(m=>typeof m=="string").join(`
2290
- `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(u===void 0)continue;let d=`copilot-shell:${u}:${r.toolCallId}`;n.set(u,d),r.backgroundTaskId=d,l!==void 0&&(l.backgroundTaskId=d);continue}if(!["read_bash","write_bash","stop_bash"].includes(r.toolName??""))continue;let s=r.toolInputData?.shellId;if(typeof s!="string"&&typeof s!="number")continue;let i=String(s),o=n.get(i);if(o===void 0)continue;r.backgroundTaskId=o;let a=e.get(r.toolCallId);a!==void 0&&(a.backgroundTaskId=o)}}function $U(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var Tu,nk=M(()=>{"use strict";We();Tu=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||un(ae,".copilot");this.sessionStateDir=un(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await ZS(this.sessionStateDir)}catch{return e}for(let r of n){let s=un(this.sessionStateDir,r);if((await Ni(s).catch(()=>null))?.isDirectory())try{let o=await this.extractSummary(s,r);o&&e.push(o)}catch{}}return e}async loadSession(e){let n=await this.resolveSessionDir(e);if(!n)return null;let r=await this.readWorkspaceYaml(n),s=un(n,"events.jsonl"),i=await Ni(s).catch(()=>null),o=i?s:un(n,"workspace.yaml"),a=await $e(i?s:n),l=[],c=[],u=r?.cwd||"(unknown workspace)",d,m,p,f,g,h,y=r?.id||LU(n)||e,b=pg();if(i)for await(let _ of Ae(s)){let v=As(_.timestamp)||a.modifiedAt;if(tk(b,_),_.type==="session.start"&&_.data){_.data.sessionId&&(y=_.data.sessionId),_.data.copilotVersion&&(m=_.data.copilotVersion),_.data.startTime&&(h=As(_.data.startTime)),_.data.selectedModel&&(d=_.data.selectedModel),_.data.context&&(_.data.context.cwd&&(u=_.data.context.cwd),_.data.context.branch&&(p=_.data.context.branch));continue}if(_.type==="session.model_change"&&_.data?.newModel){d=_.data.newModel;continue}if(_.type==="user.message"&&_.data){let E=_.data.content||"";E&&c.push(E);let R=E.trim();R&&(f||(f=Q(R,80)),g=Q(R,80)),l.push({role:"user",timestamp:v,content:Se(R||E)});continue}if(_.type==="assistant.message"&&_.data){let E=(_.data.content||"").trim();if(E&&l.push({role:"assistant",timestamp:v,content:Se(E),model:d}),_.data.toolRequests)for(let R of _.data.toolRequests)l.push({role:"tool_use",timestamp:v,content:R.name||"unknown tool",toolName:R.name,toolInput:R.arguments?JSON.stringify(R.arguments,null,2):void 0,toolInputData:Vt(R.arguments),toolCallId:R.toolCallId});continue}if(_.type==="tool.execution_complete"&&_.data){let E=_.data.result?.content||"",R=_.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:v,content:Se(E),toolDetailedContent:R?Se(R):void 0,toolCallId:_.data.toolCallId});continue}if(_.type==="assistant.reasoning"&&_.data?.content){l.push({role:"thinking",timestamp:v,content:Se(_.data.content)});continue}if(_.type==="session.error"||_.type==="session.warning"||_.type==="session.info"||_.type==="system.message"){let E=_.data?.message||"";E.trim()&&l.push({role:"system",timestamp:v,content:Se(E)});continue}}if(!f){let _=(r?.summary||"").trim();_&&(f=Q(_,80))}return FU(l),{provider:"copilot",sessionId:y,cwd:u,createdAt:h??As(r?.created_at)??a.createdAt,modifiedAt:As(r?.updated_at)??a.modifiedAt,model:d,cliVersion:m,startCommand:"copilot",gitBranch:p,firstUserMessage:f,lastUserMessage:g,messageCount:l.filter(_=>_.role==="user"||_.role==="assistant").length,filePath:o,...ek(b),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=un(e,"events.jsonl"),i=await Ni(s).catch(()=>null),o=i?s:un(e,"workspace.yaml"),a=await $e(i?s:e),l=i?await jt(s,20):[],c=r?.id||n,u=r?.cwd||"(unknown workspace)",d,m,p,f,g;for(let y of l)if(y.type==="session.start"&&y.data&&(y.data.sessionId&&(c=y.data.sessionId),y.data.copilotVersion&&(m=y.data.copilotVersion),y.data.startTime&&(p=As(y.data.startTime)),y.data.selectedModel&&(d=y.data.selectedModel),y.data.context?.cwd&&(u=y.data.context.cwd)),y.type==="session.model_change"&&y.data?.newModel&&(d||(d=y.data.newModel)),y.type==="user.message"&&y.data){let b=(y.data.content||"").trim();b&&(f||(f=Q(b,80)),g=Q(b,80))}if(!f){let y=(r?.summary||"").trim();y&&(f=Q(y,80))}let h=i?await DU(s):{messageCount:0,tokens:pg()};return{provider:"copilot",sessionId:c,cwd:u,createdAt:p??As(r?.created_at)??a.createdAt,modifiedAt:As(r?.updated_at)??a.modifiedAt,model:d,cliVersion:m,startCommand:"copilot",firstUserMessage:f,lastUserMessage:h.lastUserMessage??g,messageCount:h.messageCount,filePath:o,...ek(h.tokens)}}async readWorkspaceYaml(e){let n=un(e,"workspace.yaml");try{let r=await NU(n,"utf-8");return PU(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await OU(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await ZS(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=un(this.sessionStateDir,e);if((await Ni(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let i=un(this.sessionStateDir,s);(await Ni(i).catch(()=>null))?.isDirectory()&&r.push(i)}if(r.length===1)return r[0];for(let s of n){let i=un(this.sessionStateDir,s);if(!(await Ni(i).catch(()=>null))?.isDirectory())continue;let a=await this.readWorkspaceYaml(i);if(a&&(a.id===e||a.id?.startsWith(e)))return i}return null}}});function gg(t){return new fg(t)}var fg,hg=M(()=>{"use strict";nk();at();tr();ke();Qe();fg=class extends be{copilotDir;constructor(e){super({provider:new Tu(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",ce,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>cn(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return Rn({...e,env:this.copilotDir!==void 0?{...e.env??process.env,COPILOT_HOME:this.copilotDir}:e.env,binary:"copilot",acpTool:"copilot"})}async seed(e,n){let r=await super.seed(e,n);if(n?.model===void 0||n.model.trim().length===0)return r;let s="copilot seed does not implement per-session model selection";return ht({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function _g(t){return new yg(t)}var yg,vg=M(()=>{"use strict";la();at();tr();Qe();yg=class extends be{constructor(e){super({provider:new Si(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"custom-tool",leaderSetupHint:"OpenCode supports custom tools via .opencode/tools/ directory"},binary:"opencode",seedArgs:["run",ce],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>cn(n,{...r,acpTool:"opencode"})})}openSession(e){return Rn({...e,binary:"opencode",acpTool:"opencode"})}seedArgsFor(e){let n=["run"];return e?.model&&n.push("--model",e.model),e?.effort&&n.push("--variant",e.effort),n.push(e?.prompt??ce),n}}});import{appendFile as jU,mkdir as UU,readFile as rk,readdir as sk,rm as HU,stat as ik}from"node:fs/promises";import{basename as BU,dirname as WU,isAbsolute as ok,join as Cs,relative as qU,resolve as bg}from"node:path";function wg(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function VU(t){return typeof t=="number"?new Date(t):wg(t)??new Date(0)}function ak(t){return typeof t=="string"?t.trim():Array.isArray(t)?t.map(e=>e&&typeof e=="object"&&"text"in e&&typeof e.text=="string"?e.text:"").filter(Boolean).join(`
2291
- `).trim():""}function lk(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function zU(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:lk(t)??""}function KU(t){let e=YU(t),n=new Set;for(let r of t){if(r.role!=="tool_use"||r.toolName!=="Bash"||r.toolInputData?.run_in_background!==!0||r.toolCallId===void 0)continue;let s=e.get(r.toolCallId);if(s===void 0)continue;let i=s.content.match(/(?:^|\n)task_id:\s*([^\s]+)/)?.[1];i!==void 0&&(n.add(i),r.backgroundTaskId=i,s.backgroundTaskId=i)}for(let r of t){if(r.role!=="tool_use"||r.toolName!=="TaskOutput"&&r.toolName!=="TaskStop"||r.toolCallId===void 0)continue;let s=r.toolInputData?.task_id;if(typeof s!="string"||!n.has(s))continue;r.backgroundTaskId=s;let i=e.get(r.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function YU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var XU,GU,JU,Su,ck=M(()=>{"use strict";We();XU="1.4",GU="1.5",JU=new Set([XU,GU]),Su=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=bg(e?.kimiHome??process.env.KIMI_CODE_HOME??Cs(ae,".kimi-code")),this.sessionsDir=Cs(this.homeDir,"sessions")}async discoverSessions(){let e=[];for(let n of await this.sessionFiles())try{let r=await this.summary(n);r&&e.push(r)}catch{}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){let n=await this.findSession(e);if(!n)return null;let r=await this.summary(n);if(!r)return null;let s=await this.parseWire(n.wirePath);return{...r,messages:s.messages,userPrompts:s.userPrompts}}async resolveSessionPath(e){return(await this.findSession(e))?.wirePath??null}async deleteSession(e){let n=await this.findSession(e);return n?(await HU(n.sessionDir,{recursive:!0,force:!0}),await UU(WU(this.indexPath()),{recursive:!0,mode:448}),await jU(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
2292
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Cs(this.homeDir,"session_index.jsonl")}async sessionFiles(){let e=await this.readIndex(),n=new Map;for(let s of e.values())this.validSessionDir(s.sessionDir,s.sessionId)&&n.set(s.sessionId,this.filesFor(s.sessionId,s.sessionDir,s.workDir));let r;try{r=await sk(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=Cs(this.sessionsDir,s.name),o;try{o=await sk(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=Cs(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await rk(this.indexPath(),"utf-8")}catch{return new Map}let n=new Map;for(let r of e.split(/\r?\n/))if(r.trim())try{let s=JSON.parse(r);if(typeof s.sessionId!="string")continue;s.deleted===!0?n.delete(s.sessionId):typeof s.sessionDir=="string"&&typeof s.workDir=="string"&&n.set(s.sessionId,{sessionId:s.sessionId,sessionDir:bg(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Cs(n,"state.json"),wirePath:Cs(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!ok(e)||BU(e)!==n)return!1;let r=qU(this.sessionsDir,bg(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!ok(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(i=>i.sessionId===e);if(r)return r;let s=n.filter(i=>i.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await rk(e,"utf-8"));return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async summary(e){let n=await this.readState(e.statePath);if(!n)return null;let r;try{r=await ik(e.wirePath)}catch{return null}let s=await ik(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=wg(n.createdAt)??s.birthtime,a=wg(n.updatedAt)??(s.mtime>r.mtime?s.mtime:r.mtime);return{provider:"kimi",sessionId:e.sessionId,slug:n.title,cwd:n.workDir??e.indexedWorkDir??"(unknown)",createdAt:o,modifiedAt:a,model:i.model,startCommand:"kimi",firstUserMessage:i.firstUserMessage,lastUserMessage:i.lastUserMessage??(n.lastPrompt?Q(n.lastPrompt.trim(),80):void 0),messageCount:i.messageCount,filePath:e.wirePath,filePaths:[e.statePath,e.wirePath],totalInputTokens:i.totalInputTokens,totalCachedInputTokens:i.totalCachedInputTokens,totalCacheWriteInputTokens:i.totalCacheWriteInputTokens,totalOutputTokens:i.totalOutputTokens,lastInputTokens:i.lastInputTokens,lastTokenUsage:i.lastTokenUsage}}async parseWire(e){let n=[],r=[],s=new Set,i=!0,o,a,l,c=0,u=0,d=0,m=0,p=!1,f=0,g,h;for await(let y of Ae(e)){let b=VU(y.time??y.created_at);if(i&&(i=!1,y.type==="metadata"&&!JU.has(y.protocol_version))){let v=`Kimi transcript wire protocol version ${JSON.stringify(y.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:b,content:v}],userPrompts:[],messageCount:1,firstUserMessage:v,lastUserMessage:v}}if((y.type==="config.update"||y.type==="profile.bind")&&y.modelAlias&&(o=y.modelAlias),y.type==="usage.record"){y.model&&(o=y.model),p||=y.usage!==void 0;let v=y.usage?.inputOther??0,E=y.usage?.inputCacheRead??0,R=y.usage?.inputCacheCreation??0,S=y.usage?.output??0;c+=v,u+=E,d+=R,m+=S,y.usageScope==="turn"&&(g=v+E+R,h={inputTokens:v,cachedInputTokens:E,cacheWriteInputTokens:R,outputTokens:S,totalTokens:g+S});continue}if(y.type==="turn.prompt"&&y.origin?.kind==="user"){let v=ak(y.input);v&&((!y.promptId||!s.has(y.promptId))&&(r.push(v),y.promptId&&s.add(y.promptId)),a??=Q(v,80),l=Q(v,80),n.push({role:"user",timestamp:b,content:v}),f++);continue}if(y.type==="turn.steer"){let v=ak(y.input);v&&(n.push({role:"system",timestamp:b,content:v}),f++);continue}if(y.type!=="context.append_loop_event"||!y.event)continue;let _=y.event;_.type==="content.part"&&_.part?.type==="text"&&_.part.text?(n.push({role:"assistant",timestamp:b,content:_.part.text,model:o}),f++):_.type==="content.part"&&_.part?.type==="think"&&_.part.think?n.push({role:"thinking",timestamp:b,content:_.part.think,model:o}):_.type==="tool.call"?n.push({role:"tool_use",timestamp:b,content:_.name??"tool",toolName:_.name,toolInput:lk(_.args),toolInputData:Vt(_.args),toolCallId:_.toolCallId,model:o}):_.type==="tool.result"&&n.push({role:"tool_result",timestamp:b,content:zU(_.result),toolCallId:_.toolCallId,model:o})}return KU(n),{messages:n,userPrompts:r,messageCount:f,model:o,firstUserMessage:a,lastUserMessage:l,totalInputTokens:p?c:void 0,totalCachedInputTokens:p?u:void 0,totalCacheWriteInputTokens:p?d:void 0,totalOutputTokens:p?m:void 0,lastInputTokens:g,lastTokenUsage:h}}}});function Tg(t){return new Eg(t)}var Eg,Sg=M(()=>{"use strict";ck();at();tr();Qe();Eg=class extends be{kimiHome;constructor(e){super({provider:new Su(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Kimi supports skills through ~/.kimi-code/skills and --skills-dir."},binary:"kimi",seedArgs:["-p",ce,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>cn(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return Rn({...e,env:this.kimiHome!==void 0?{...e.env??process.env,KIMI_CODE_HOME:this.kimiHome}:e.env,binary:"kimi",acpTool:"kimi"})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??ce,"--output-format","stream-json"),n}}});import{spawn as QU}from"node:child_process";import{mkdirSync as ZU}from"node:fs";function Rg(t){return new kg(t)}async function e1(t,e){let n=Date.now(),r=uk({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});qe("lmplayer",r,e.permissionMode??"yolo");let s=await mk(e.binary,r,{cwd:e.cwd,env:Ue(e.env,e.cwd,e.sessionId),signal:e.signal,onText:i=>{e.onProgress?.({kind:"text",summary:i.slice(0,120)}),e.onDelta?.(i)}});if(s.code!==0&&s.code!==null)throw new Error(dk(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function uk(t){let e=["run"];return t.model&&e.push("--model",t.model),t.sessionId&&e.push("--session",t.sessionId),t.formatJson&&e.push("--format","json"),t.effort&&e.push("--effort",t.effort),e.push(...Pr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function dk(t){let n=[Ss(t.stderr).trim(),t.error].filter(Boolean).join(`
2293
- `);return n?Oe(n,{provider:"lmplayer"}):`exit code ${t.code}`}function mk(t,e,n){return new Promise((r,s)=>{let i;try{i=QU(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(g){s(g);return}let o="",a="",l="",c,u,d,m=[],p=!1,f=g=>{let h=g.trim();if(!h)return;let y;try{y=JSON.parse(h)}catch{m.push(g),n.onText?.(g);return}if(!Oi(y))return;let b=ku(y,!1);c===void 0&&b!==void 0&&(c=b),u=ku(y,!0)??u;let _=t1(y);_!==void 0&&(d=_);let v=pk(y);v&&(m.push(v),n.onText?.(v))};i.stdout?.on("data",g=>{let h=g.toString("utf8");o+=h,l+=h;let y=l.indexOf(`
2281
+ `).filter(l=>l.length>0),o=i[i.length-1]||"",a=i.length>1?`${i.length} lines: ${Pe(o,60)}`:Pe(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n.startsWith("item/")){e({kind:"other",summary:n.slice(5)});return}}async function DS(t,e){if(e.bundleSession!==void 0)return Zn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await xS(t,{threadId:e.sessionId,requireResume:e.requireResume,onSessionId:e.onSessionId,onUsage:e.onUsage,cwd:e.cwd,env:e.env,binaryPath:e.progPath,model:e.model,alias:e.alias,isLead:e.isLead,permissionMode:e.permissionMode,onDelta:e.onDelta,onEvent:e.onProgress?r=>PS(r,e.onProgress):void 0,signal:e.signal});return{text:n.result,...n.usage?{usage:n.usage}:{},sessionId:n.threadId,durationMs:n.durationMs}}async function FS(t){let e=await AS({threadId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:"codex",get sessionId(){return e.sessionId},get completedTurns(){return e.completedTurns},async sendTurn(n,r={}){let s=await e.sendTurn(n,{...r,onEvent:i=>{r.onEvent?.(i),r.onProgress&&PS(i,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var Kj,tr=M(()=>{"use strict";Vf();Vf();CS();Nf();$r();ke();Kj=256});function Qf(t={}){let e=Pl(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends be{constructor(){super({provider:new Ml({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. A stored session can be resumed (history is rebuilt from its completed turns)."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>cn(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return Rn({...r,env:n(r.env),binary:"miniplayer",acpTool:"miniplayer"})}manualSeedHint(){return{launchCommand:"miniplayer --help",postLaunchNote:'Use lmctl prompt --provider miniplayer --model <model> "<prompt>". Each invocation creates a fresh run unless a session id is given.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal; use lmctl prompt or lmctl batch")}async seed(r,s){try{s?.signal?.throwIfAborted();try{s?.onDispatch?.()}catch{}let i=await cn(s?.prompt??ce,{binary:"miniplayer",acpTool:"miniplayer",sessionId:"",requireResume:!1,cwd:r,env:n(s?.env),signal:s?.signal,model:s?.model});return{success:!0,sessionId:i.sessionId,usage:i.usage}}catch(i){return{success:!1,usage:i?.usage,error:`miniplayer seed failed: ${i instanceof Error?i.message:String(i)}`}}}}}var Zf=M(()=>{"use strict";at();Fl();tr();Qe()});import{readdir as hu,stat as $S,unlink as Zj}from"node:fs/promises";import{join as Ai,basename as jS}from"node:path";function eU(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function tU(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return Se(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}function nU(t,e){t.input=Math.max(t.input,e.input),t.cacheRead=Math.max(t.cacheRead,e.cacheRead),t.cacheWrite=Math.max(t.cacheWrite,e.cacheWrite),t.output=Math.max(t.output,e.output),t.cacheWriteSplitExposed||=e.cacheWriteSplitExposed,e.cacheWrite5m!==void 0&&(t.cacheWrite5m=Math.max(t.cacheWrite5m??0,e.cacheWrite5m)),e.cacheWrite1h!==void 0&&(t.cacheWrite1h=Math.max(t.cacheWrite1h??0,e.cacheWrite1h))}function rU(t){let e=t?.cache_creation?.ephemeral_5m_input_tokens,n=t?.cache_creation?.ephemeral_1h_input_tokens,r=typeof e=="number"||typeof n=="number",s=(e??0)+(n??0);return{input:t?.input_tokens??0,cacheRead:t?.cache_read_input_tokens??0,cacheWrite:Math.max(t?.cache_creation_input_tokens??0,s),...typeof e=="number"?{cacheWrite5m:e}:{},...typeof n=="number"?{cacheWrite1h:n}:{},cacheWriteSplitExposed:r,output:t?.output_tokens??0}}function sU(t){let e=t.cacheWrite1h??0;if(!t.cacheWriteSplitExposed)return{total:t.cacheWrite,fiveMinute:t.cacheWrite,oneHour:0};let n=t.cacheWrite5m??Math.max(0,t.cacheWrite-e),r=n+e;return{total:Math.max(t.cacheWrite,r),fiveMinute:r>t.cacheWrite?n:n+(t.cacheWrite-r),oneHour:e}}async function US(t){let e=0,n=0,r=0,s=0,i=0,o=0,a,l,c=new Map,u=[];for await(let f of Ae(t))if(!f.isSidechain){if(f.type==="user"&&!f.isMeta&&f.message){let g=f.message.content;if(typeof g=="string"){if(g.includes("<command-name>")||g.includes("<local-command-"))continue;e++,l=Q(g.trim(),80)}}else if(f.type==="assistant"&&f.message){let g=f.message.content;if(Array.isArray(g))for(let y of g)y.type==="text"&&e++;let h=f.message.usage;if(h){let y=rU(h),b=f.message.id?.trim();if(b){let v=c.get(b);v?nU(v,y):c.set(b,y)}else u.push(y);let _=y.input+y.cacheWrite+y.cacheRead;_&&(o=_),a={inputTokens:y.input,cacheWriteInputTokens:y.cacheWrite,cachedInputTokens:y.cacheRead,outputTokens:y.output}}}}let d=0,m=0,p=f=>{let g=sU(f);n+=f.input+f.cacheRead+g.total,r+=f.cacheRead,s+=g.total,d+=g.fiveMinute,m+=g.oneHour,i+=f.output};for(let f of c.values())p(f);for(let f of u)p(f);return{messageCount:e,totalInputTokens:n,totalCacheReadInputTokens:r,totalCacheWriteInputTokens:s,totalCacheWrite5mInputTokens:d,totalCacheWrite1hInputTokens:m,totalOutputTokens:i,lastInputTokens:o,lastTokenUsage:a,lastUserMessage:l}}function iU(t){let e=oU(t),n=new Set;for(let r of t){if(r.role!=="tool_use"||r.toolName!=="Bash"||r.toolInputData?.run_in_background!==!0||r.toolCallId===void 0)continue;let s=e.get(r.toolCallId);if(s===void 0)continue;let i=s.content.match(/Command running in background with ID:\s*([A-Za-z0-9_-]+)/)?.[1];i!==void 0&&(n.add(i),r.backgroundTaskId=i,s.backgroundTaskId=i)}for(let r of t){if(r.role!=="tool_use"||r.toolName!=="TaskOutput"&&r.toolName!=="TaskStop"||r.toolCallId===void 0)continue;let s=r.toolInputData?.task_id;if(typeof s!="string"||!n.has(s))continue;r.backgroundTaskId=s;let i=e.get(r.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function oU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var yu,HS=M(()=>{"use strict";We();yu=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Ai(ae,".claude"),this.projectsDir=Ai(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await hu(this.projectsDir)}catch{return e}for(let r of n){let s=Ai(this.projectsDir,r);if(!(await $S(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await hu(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=jS(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Ai(s,a);try{let u=await this.extractSummary(c,l);u&&e.push(u)}catch{}}}return e}async extractSummary(e,n){let r=await jt(e,50),s=await $e(e),i="",o,a,l,c,u,d;for(let p of r)if(!eU(p.type)&&(!i&&p.cwd&&(i=p.cwd),!o&&p.slug&&(o=p.slug),!a&&p.version&&(a=p.version),!d&&p.timestamp&&(d=new Date(p.timestamp)),p.type==="assistant"&&p.message?.model&&(l=p.message.model),p.type==="user"&&!p.isMeta&&p.message)){let f=p.message.content;if(typeof f=="string"){if(f.includes("<command-name>")||f.includes("<local-command-"))continue;c||(c=Q(f.trim(),80)),u=Q(f.trim(),80)}}if(!i)return null;let m=await US(e);return{provider:"claude",sessionId:n,slug:o,cwd:i,createdAt:d||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:m.lastUserMessage??u,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:m.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:m.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:m.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await $e(n),s=[],i="",o,a,l,c,u,d,m,p=e,f,g=[];for await(let y of Ae(n))if(y.type!=="file-history-snapshot"&&!y.isSidechain){if(!i&&y.cwd&&(i=y.cwd),!o&&y.slug&&(o=y.slug),!a&&y.version&&(a=y.version),!c&&y.gitBranch&&(c=y.gitBranch),!m&&y.timestamp&&(m=new Date(y.timestamp)),y.sessionId&&(p=y.sessionId),y.type==="system"||y.type==="progress"||y.type==="queue-operation"){s.push({role:"system",timestamp:new Date(y.timestamp||0),content:tU(y)});continue}if(y.type==="user"&&y.message){if(y.isMeta)continue;let b=new Date(y.timestamp||0),_=y.message.content;if(y.isCompactSummary!==!0&&y.isVisibleInTranscriptOnly!==!0&&y.promptSource!=="system"&&y.toolUseResult===void 0&&y.origin?.kind!=="task-notification"&&y.interruptedMessageId===void 0&&y.interruptedByShutdown!==!0&&y.scheduledTaskId===void 0&&y.scheduledFireId===void 0&&!(Array.isArray(_)&&_.some(v=>v.type==="tool_result"))){let v=typeof _=="string"?_:Array.isArray(_)?_.filter(E=>E.type==="text"&&typeof E.text=="string").map(E=>E.text).join(`
2282
+ `):"";v&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(v.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(v.trim())&&!v.trimStart().startsWith("lmctl seed initial connection only.")&&g.push(v)}if(typeof _=="string"){let v=_.trim();if(v.includes("<command-name>")||v.includes("<local-command-")||/^<task-notification>\s*</u.test(v)||v.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(v))continue;u||(u=Q(_.trim(),80)),d=Q(_.trim(),80),f=void 0,s.push({role:"user",timestamp:b,content:Se(_.trim())})}else if(Array.isArray(_)){for(let v of _)if(v.type==="tool_result"){let E=typeof v.content=="string"?Se(v.content):JSON.stringify(v.content);s.push({role:"tool_result",timestamp:b,content:E,toolCallId:v.tool_use_id})}}}if(y.type==="assistant"&&y.message){y.message.stop_reason===null||y.message.stop_reason==="tool_use"?f="in_progress":typeof y.message.stop_reason=="string"&&(f="complete"),y.message.model&&(l=y.message.model);let b=new Date(y.timestamp||0),_=y.message.content;if(Array.isArray(_))for(let v of _)v.type==="text"&&v.text?s.push({role:"assistant",timestamp:b,content:Se(v.text),model:y.message.model,...typeof y.message.stop_reason=="string"?{stopReason:y.message.stop_reason}:{}}):v.type==="tool_use"?s.push({role:"tool_use",timestamp:b,content:v.name||"unknown tool",toolName:v.name,toolInput:JSON.stringify(v.input,null,2),toolInputData:v.input,toolCallId:v.id,model:y.message.model,...typeof y.message.stop_reason=="string"?{stopReason:y.message.stop_reason}:{}}):v.type==="thinking"&&v.thinking&&s.push({role:"thinking",timestamp:b,content:v.thinking})}}if(!i)return null;iU(s);let h=await US(n);return{provider:"claude",sessionId:p,slug:o,cwd:i,createdAt:m||r.createdAt,modifiedAt:r.modifiedAt,model:l,cliVersion:a,startCommand:"claude",gitBranch:c,turnStatus:f,firstUserMessage:u,lastUserMessage:d,messageCount:h.messageCount,filePath:n,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:h.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:h.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:h.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:s,userPrompts:g}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await Zj(n),!0):!1}async resolveSessionFile(e){let n;try{n=await hu(this.projectsDir)}catch{return null}let r=[];for(let o of n){let a=Ai(this.projectsDir,o);if(!(await $S(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await hu(a)}catch{continue}for(let u of c){if(!u.endsWith(".jsonl"))continue;let d=jS(u,".jsonl");/^[0-9a-f]{8}-/.test(d)&&r.push({filePath:Ai(a,u),fileSessionId:d})}}let s=r.find(o=>o.fileSessionId===e);if(s)return s.filePath;let i=r.filter(o=>o.fileSessionId.startsWith(e));if(i.length===1)return i[0].filePath;for(let o of r){let a=await jt(o.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return o.filePath}return null}}});import{join as BS}from"node:path";function tg(t){return new eg(t)}var eg,ng=M(()=>{"use strict";HS();at();We();tr();Qe();eg=class extends be{claudeDir;constructor(e){super({provider:new yu(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",ce,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:fu}),this.claudeDir=e?.claudeDir??BS(ae,".claude")}openSession(e){return gu({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[BS(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as aU,stat as WS,unlink as lU}from"node:fs/promises";import{join as ga,basename as cU}from"node:path";function rg(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&uU.has(n)}function dU(t,e,n){return`${t}|${e.toISOString()}|${n}`}function ha(t,e,n){let r=dU(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function qS(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function mU(t){if(!t)return;let e=t.cached_input_tokens??t.cache_read_input_tokens;return{inputTokens:t.input_tokens,cachedInputTokens:e,outputTokens:t.output_tokens,reasoningOutputTokens:t.reasoning_output_tokens,totalTokens:t.total_tokens}}function Ci(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t))return t.map(n=>{if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.text=="string")return r.text;if(typeof r.image_url=="string")return"[input_image]";if(typeof r.type=="string")return`[${r.type}]`}return Ci(n)}).filter(n=>n.length>0).join(`
2283
+ `);try{return JSON.stringify(t)}catch{return String(t)}}function pU(t){let e=t;if(typeof t=="string")try{e=JSON.parse(t)}catch{return}return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function fU(t,e){if(e===void 0)return;let n={input:e};if(t!=="apply_patch"||typeof e!="string")return n;let r=[...e.matchAll(/^\*\*\* (?:(Add|Update|Delete) File|(Move) to): (.+)\r?$/gm)].map(s=>({kind:s[1]??s[2],path:s[3]?.trim()})).filter(s=>!!(s.kind&&s.path));return r.length>0&&(n.path=r[0].path,n.paths=r.map(s=>s.path),n.kinds=r.map(s=>s.kind)),n}async function XS(t){let e=0,n=0,r=0,s=0,i=0,o,a,l=new Set,c,u;for await(let d of Ae(t)){if(d.type==="event_msg"&&d.payload?.type==="user_message"){let m=d.payload.message||d.payload.text;m&&(u=Q(m.trim(),80))}if(d.type==="response_item"&&d.payload){let m=d.payload;if(m.type==="message"&&m.role==="user"&&m.content){let p=m.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let f=0;f<m.content.length;f++){let g=m.content[f];rg(p,f)||g.type==="input_text"&&typeof g.text=="string"&&g.text&&(e++,u=Q(g.text.trim(),80))}}else if(m.type==="message"&&m.role==="assistant"&&m.content)for(let p of m.content)p.type==="output_text"&&typeof p.text=="string"&&p.text&&e++}if(d.payload&&typeof d.payload.model_context_window=="number"&&(c=d.payload.model_context_window),d.type==="event_msg"&&d.payload?.type==="token_count"&&d.payload.info?.total_token_usage){let m=d.payload.info.total_token_usage;n=m.input_tokens??n,r=m.cached_input_tokens??m.cache_read_input_tokens??r,s=m.output_tokens??s,i=m.reasoning_output_tokens??i;let p=d.payload.info.last_token_usage;if(p&&typeof p.input_tokens=="number"&&typeof p.output_tokens=="number"){let g=JSON.stringify([d.timestamp??null,d.ordinal??null,m,p]);if(!l.has(g)){l.add(g);let h=[p.input_tokens,p.cached_input_tokens??p.cache_read_input_tokens??0,p.output_tokens,p.reasoning_output_tokens??0];a??=[0,0,0,0],h.forEach((y,b)=>{a[b]+=y})}}let f=mU(d.payload.info.last_token_usage);f&&(o=f),typeof d.payload.info.model_context_window=="number"&&(c=d.payload.info.model_context_window)}}return a&&([n,r,s,i]=a),{messageCount:e,totalInputTokens:n,totalCachedInputTokens:r,totalOutputTokens:s,totalReasoningOutputTokens:i,lastTokenUsage:o,modelContextWindow:c,lastUserMessage:u}}var uU,_u,GS=M(()=>{"use strict";We();uU=new Set(["agents_md.instructions","environments.environment_context","plugins.recommendations","plugins.usage_instructions","apps.instructions","collaboration_mode.instructions","generic.developer_instructions","host_skills.instructions","model_switch.instructions","multi_agent.mode_instructions","multi_agent.role_instructions","multi_agent.usage_hint","permissions.instructions","skills.instructions"]);_u=class{name="codex";codexDirs;constructor(e={}){let n=[ga(ae,".codex"),ga(ae,".code")];if(e.codexDirs&&e.codexDirs.length>0){this.codexDirs=[...new Set(e.codexDirs)];return}let r=[e.codexDir||n[0],e.codeDir||n[1]];this.codexDirs=[...new Set(r)]}getWatchPaths(){return this.codexDirs.map(e=>({directory:ga(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=ga(n,"sessions");try{await WS(r),e.push(r)}catch{}}return e}async discoverSessions(){let e=[],n=await this.getSessionsDirs();for(let r of n){let s=await this.findSessionFiles(r);for(let i of s)try{let o=await this.extractSummary(i);o&&e.push(o)}catch{}}return e}async findSessionFiles(e){let n=[],r;try{r=await aU(e)}catch{return n}for(let s of r){let i=ga(e,s),o=await WS(i).catch(()=>null);if(o)if(o.isDirectory()){let a=await this.findSessionFiles(i);n.push(...a)}else s.endsWith(".jsonl")&&n.push(i)}return n}extractSessionIdFromFilename(e){let n=cU(e,".jsonl"),r=n.match(/rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/);return r?r[1]:n}async extractSummary(e){let n=await jt(e,30),r=await $e(e),s=this.extractSessionIdFromFilename(e),i="",o,a,l,c,u,d,m;for(let f of n){if(f.type==="session_meta"&&f.payload&&(f.payload.id&&(s=f.payload.id),f.payload.cwd&&(i=f.payload.cwd),f.payload.cli_version&&(o=f.payload.cli_version),f.payload.timestamp&&(l=new Date(f.payload.timestamp)),f.payload.originator&&(d=f.payload.originator),f.payload.source&&(m=f.payload.source)),f.type==="turn_context"&&f.payload&&(f.payload.model&&(a=f.payload.model),!i&&f.payload.cwd&&(i=f.payload.cwd)),f.type==="event_msg"&&f.payload?.type==="user_message"){let g=f.payload.message||f.payload.text;g&&(c||(c=Q(g.trim(),80)),u=Q(g.trim(),80))}if(f.type==="response_item"&&f.payload?.type==="message"&&f.payload.role==="user"&&f.payload.content){let g=f.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let h=0;h<f.payload.content.length;h++){let y=f.payload.content[h];rg(g,h)||y.type==="input_text"&&typeof y.text=="string"&&y.text&&(c||(c=Q(y.text.trim(),80)),u=Q(y.text.trim(),80))}}}if(!i)return null;let p=await XS(e);return{provider:"codex",sessionId:s,cwd:i,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:o,startCommand:qS(d,m),firstUserMessage:c,lastUserMessage:p.lastUserMessage??u,messageCount:p.messageCount,filePath:e,totalInputTokens:p.totalInputTokens||void 0,totalCachedInputTokens:p.totalCachedInputTokens||void 0,totalOutputTokens:p.totalOutputTokens||void 0,totalReasoningOutputTokens:p.totalReasoningOutputTokens||void 0,lastInputTokens:p.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:p.lastTokenUsage,modelContextWindow:p.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await $e(n),s=[],i="",o,a,l,c,u,d=e,m,p,f=new Set,g=[],h=new Set,y=[],b=(E,R)=>{let S=y.find(I=>!I.mirrored&&I.source!==R&&I.text===E);S?S.mirrored=!0:y.push({text:E,source:R,mirrored:!1})},_=()=>{g.push(...y.map(E=>E.text)),y=[]};for await(let E of Ae(n)){let R=E.timestamp?new Date(E.timestamp):new Date;if(E.type==="session_meta"&&E.payload){E.payload.id&&(d=E.payload.id),E.payload.cwd&&(i=E.payload.cwd),E.payload.cli_version&&(o=E.payload.cli_version),E.payload.timestamp&&(l=new Date(E.payload.timestamp)),m=qS(E.payload.originator,E.payload.source);continue}if(E.type==="turn_context"&&E.payload){E.payload.model&&(a=E.payload.model),!i&&E.payload.cwd&&(i=E.payload.cwd);continue}if(E.type==="response_item"&&E.payload){let S=E.payload;if(S.type==="message"){if(S.role==="user"&&S.content){let I=S.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(I)){let N=S.content.filter((O,A)=>I[A]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
2284
+ `);I.includes("user.text")&&N&&(!S.id||!h.has(S.id))&&(b(N,"metadata"),S.id&&h.add(S.id))}for(let N=0;N<S.content.length;N++){let O=S.content[N];if(!rg(I,N)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let A=O.text.trim();c||(c=Q(A,80)),u=Q(A,80),ha(s,f,{role:"user",timestamp:R,content:Se(A)})}}continue}if(S.role==="assistant"&&S.content){for(let I of S.content)I.type==="output_text"&&typeof I.text=="string"&&I.text&&ha(s,f,{role:"assistant",timestamp:R,content:Se(I.text),model:a});continue}if(S.role!=="user"&&S.role!=="assistant"&&S.content){for(let I of S.content)(I.type==="input_text"||I.type==="output_text")&&typeof I.text=="string"&&I.text&&ha(s,f,{role:"system",timestamp:R,content:Se(I.text.trim())});continue}}if(S.type==="function_call"){s.push({role:"tool_use",timestamp:R,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments!==void 0?Se(Ci(S.arguments)):void 0,toolInputData:pU(S.arguments),toolCallId:S.call_id});continue}if(S.type==="function_call_output"){s.push({role:"tool_result",timestamp:R,content:Se(Ci(S.output)),toolCallId:S.call_id});continue}if(S.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:R,content:S.name||"unknown tool",toolName:S.name,toolInput:S.input!==void 0?Se(Ci(S.input)):void 0,toolInputData:fU(S.name,S.input),toolCallId:S.call_id});continue}if(S.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:R,content:Se(Ci(S.output)),toolCallId:S.call_id});continue}if(S.type==="reasoning"&&S.summary){let I=S.summary.map(N=>Ci(N.text)).join(`
2285
+ `);I.trim()&&ha(s,f,{role:"thinking",timestamp:R,content:Se(I)});continue}}if(E.type==="event_msg"&&E.payload&&(E.payload.type==="task_started"?(_(),p="in_progress"):E.payload.type==="task_complete"?p="complete":E.payload.type==="turn_aborted"&&(p="aborted"),E.payload.type==="user_message"&&typeof E.payload.message=="string"&&b(E.payload.message,"event"),E.payload.type==="agent_reasoning")){let S=E.payload.message||E.payload.text;S&&ha(s,f,{role:"thinking",timestamp:R,content:Se(S)})}}if(!i)return null;_();let v=await XS(n);return{provider:"codex",sessionId:d,cwd:i,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:o,startCommand:m,turnStatus:p,firstUserMessage:c,lastUserMessage:u,messageCount:v.messageCount,filePath:n,totalInputTokens:v.totalInputTokens||void 0,totalCachedInputTokens:v.totalCachedInputTokens||void 0,totalOutputTokens:v.totalOutputTokens||void 0,totalReasoningOutputTokens:v.totalReasoningOutputTokens||void 0,lastInputTokens:v.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:v.lastTokenUsage,modelContextWindow:v.modelContextWindow,messages:s,userPrompts:g}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await lU(n),!0):!1}async resolveSessionFile(e){let n=await this.getSessionsDirs(),r=[];for(let i of n){let o=await this.findSessionFiles(i);r.push(...o)}for(let i of r)if(this.extractSessionIdFromFilename(i)===e)return i;let s=[];for(let i of r)this.extractSessionIdFromFilename(i).startsWith(e)&&s.push(i);if(s.length===1)return s[0];for(let i of r){let o=await jt(i,1);if(o.length>0&&o[0].type==="session_meta"){let a=o[0].payload?.id;if(a===e||a&&a.startsWith(e))return i}}return null}}});import{execFile as gU}from"node:child_process";import{realpathSync as JS,readdirSync as hU}from"node:fs";import{homedir as yU}from"node:os";import{join as vu,resolve as VS,sep as _U}from"node:path";function og(t){return new ig(t)}var sg,ig,ag=M(()=>{"use strict";GS();at();tr();Qe();sg="gpt-5.6-sol",ig=class extends be{nativeLaunchFailureHint="If the message mentions a shared background server or feature mismatch, it could be a CLI/daemon version mismatch: compare codex --version with codex app-server daemon version (cliVersion vs appServerVersion) and search the web for the error text.";constructor(e){super({provider:new _u(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append"},binary:"codex",seedArgs:["exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","-"],seedStdin:`${ce}
2286
+ `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:DS})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(N,O)=>new Promise(A=>{let w=Math.ceil(n-performance.now());if(w<=0){A(void 0);return}let T,k=()=>{try{T?.kill("SIGKILL")}catch{}},x=()=>{k()},C=()=>{k()},L=()=>{k()};process.once("exit",x),process.once("SIGINT",C),process.once("SIGTERM",L);let P=()=>{process.removeListener("exit",x),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",L)};T=gU(N,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:w,killSignal:"SIGKILL",maxBuffer:65536},(j,F)=>{P(),A(j?void 0:F)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let i;try{i=JSON.parse(s)}catch{let N=s.match(/\{[\s\S]*\}/);if(N)try{i=JSON.parse(N[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let o=N=>typeof N=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(N)&&N.length<=100,a=typeof i?.cliVersion=="string"?i.cliVersion:typeof i?.cli_version=="string"?i.cli_version:"",l=typeof i?.appServerVersion=="string"?i.appServerVersion:typeof i?.app_server_version=="string"?i.app_server_version:"",c=a.trim(),u=l.trim(),d=typeof i?.status=="string"?i.status.toLowerCase():"";if(!(d==="running"||d==="alreadyrunning")||!o(c)||!o(u))return{kind:"ok"};if(c===u)return{kind:"ok"};let p="codex CLI "+c+" differs from the running codex daemon "+u,f="To align your CLI: npm i -g @openai/codex@"+u,g=p+"; using the daemon's binary. "+f,h={kind:"ok",message:p+"; no matching daemon binary is available, launching the PATH CLI. "+f},y=VS(e.cwd,e.env.CODEX_HOME||vu(e.env.HOME||yU(),".codex")),b=[],_=[],v=process.platform==="win32"?"codex.exe":"codex",E=i.managedCodexPath??i.managed_codex_path;typeof E=="string"&&E.trim().length>0&&b.push(E.trim());let R=N=>N.replace(/\+.*$/,""),S=R(u),I=process.arch==="arm64"?"aarch64":"x86_64";for(let N of["app-server-daemon","standalone"]){let O=vu(y,"packages",N,"releases");try{_.push(JS(O)+_U);let A=hU(O).filter(w=>process.arch==="x64"&&(w.includes("aarch64")||w.includes("arm64"))||process.arch==="arm64"&&(w.includes("x86_64")||w.includes("x64")||w.includes("i686"))?!1:w===u||w===S||w.startsWith(u+"-")||w.startsWith(S+"-"));A.sort((w,T)=>{let k=w.includes(I)?0:1,x=T.includes(I)?0:1;return k!==x?k-x:w.localeCompare(T)});for(let w of A)b.push(vu(O,w,"bin",v)),b.push(vu(O,w,v))}catch{}}for(let N of new Set(b)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=JS(VS(e.cwd,N)),!_.some(T=>O.startsWith(T)))continue}catch{continue}let w=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(w&&(w===u||R(w)===S))return{kind:"use-binary",binary:O,message:g}}return h}openSession(e){return FS({...e,model:e.model??sg})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??sg;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:sg}}}});import{createHash as vU}from"node:crypto";import{readdir as ya,readFile as zS,stat as bu,unlink as bU}from"node:fs/promises";import{join as Wt,basename as wU,dirname as EU}from"node:path";import{cwd as TU}from"node:process";function lg(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function KS(t){return t==="user"}function cg(t){return t==="gemini"||t==="assistant"}function xs(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function SU(t){return`${t.sessionId}\0${t.cwd}`}function kU(t,e){let n=t.filePaths??[t.filePath],r=e.filePaths??[e.filePath],s=[...new Set([...n,...r])],i=e.modifiedAt.getTime()>=t.modifiedAt.getTime()?e:t;return{...i,createdAt:t.createdAt.getTime()<=e.createdAt.getTime()?t.createdAt:e.createdAt,modifiedAt:i.modifiedAt,filePath:i.filePath,filePaths:s}}function wu(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function YS(t){let e=0,n=0,r=0,s=0,i=0,o;for(let a of t){if(!cg(a.type)||!a.tokens)continue;let l=wu(a.tokens.input),c=wu(a.tokens.cached),u=Math.max(l-c,0),d=wu(a.tokens.output),m=wu(a.tokens.thoughts);e+=l,n+=c,r+=d,s+=m,i=l,o={inputTokens:u,cachedInputTokens:c,cacheWriteInputTokens:0,outputTokens:d,reasoningOutputTokens:m,totalTokens:l+d+m}}return{totalInputTokens:e,totalCachedInputTokens:n,totalOutputTokens:r,totalReasoningOutputTokens:s,lastInputTokens:i,lastTokenUsage:o}}function RU(t){return vU("sha256").update(t).digest("hex")}function _a(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=EU(n);if(r===n)break;n=r}}var Eu,QS=M(()=>{"use strict";We();Jl();ke();Eu=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||Wt(ae,".gemini");this.geminiProjectsFile=Wt(n,"projects.json"),this.geminiTmpDir=Wt(n,"tmp");let r=e.claudeDir||Wt(ae,".claude");this.claudeProjectsDir=Wt(r,"projects");let s=[Wt(ae,".codex"),Wt(ae,".code")],i=e.codexDirs&&e.codexDirs.length>0?e.codexDirs:[e.codexDir||s[0],e.codeDir||s[1]];this.codexSessionDirs=[...new Set(i)].map(o=>Wt(o,"sessions")),this.extraWorkspacePaths=e.extraWorkspacePaths||[]}getWatchPaths(){return[{directory:this.geminiTmpDir,filePattern:/\.jsonl?$/}]}async discoverSessions(){let e=await this.findSessionFiles(),n=new Map;for(let r of e)try{let s=await this.extractSummary(r);if(!s)continue;let i=SU(s),o=n.get(i);n.set(i,o?kU(o,s):s)}catch{}return[...n.values()]}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r;try{r=await this.readSessionFile(n)}catch{return null}if(!r)return null;let s=await $e(n),i=[],o=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",u=await this.resolveWorkspace(c),d,m,p;for(let y of a){let b=xs(y.timestamp),_=y.type,v=Se(lg(y.content));if(KS(_)){let R=lg(y.content);R&&o.push(R);let S=v.trim();S&&(d||(d=Q(S,80)),m=Q(S,80)),i.push({role:"user",timestamp:b,content:S||v});continue}if(cg(_)){y.model&&(p=y.model);for(let R of y.thoughts||[]){let S=[R.subject,R.description].filter(Boolean).join(`
2287
+ `).trim();S&&i.push({role:"thinking",timestamp:xs(R.timestamp,b),content:Se(S)})}i.push({role:"assistant",timestamp:b,content:v,model:y.model});continue}let E=_?`[${_}] `:"";i.push({role:"system",timestamp:b,content:`${E}${v}`.trim()})}let f=xs(r.startTime,s.createdAt),g=xs(r.lastUpdated,s.modifiedAt),h=YS(a);return{provider:"gemini",sessionId:l,cwd:u,createdAt:f,modifiedAt:g,model:p,startCommand:"gemini",firstUserMessage:d,lastUserMessage:m,messageCount:i.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:n,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCachedInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,totalReasoningOutputTokens:h.totalReasoningOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:i,userPrompts:o}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await $e(e),s=n.messages||[],i=n.sessionId||this.extractSessionIdFromFilename(e),o=n.projectHash||"",a=await this.resolveWorkspace(o),l,c,u,d=0;for(let p of s)if(KS(p.type)){d++;let f=lg(p.content).trim();f&&(l||(l=Q(Se(f),80)),c=Q(Se(f),80))}else cg(p.type)&&(d++,p.model&&(u=p.model));let m=YS(s);return{provider:"gemini",sessionId:i,cwd:a,createdAt:xs(n.startTime,r.createdAt),modifiedAt:xs(n.lastUpdated,r.modifiedAt),model:u,startCommand:"gemini",firstUserMessage:l,lastUserMessage:c,messageCount:d,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async readSessionFile(e){let n=await zS(e,"utf-8");if(Mo(n)==="unknown")return X({event:"gemini_session_format_unknown",provider:"gemini",file:e,preview:n.slice(0,120),message:`gemini session file at ${e} matches neither old (.json with messages[]) nor new (.jsonl with kind metadata) format. Skipping; lmctl ls / audit / stats will not see this session.`}),null;try{return us(n)}catch{return null}}extractSessionIdFromFilename(e){let n=wU(e).replace(/\.jsonl?$/,""),r=n.match(/session-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-(.+)$/);return r?r[1]:n}async findSessionFiles(){let e=[],n;try{n=await ya(this.geminiTmpDir)}catch{return e}for(let r of n){let s=Wt(this.geminiTmpDir,r,"chats");if(!(await bu(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await ya(s)}catch{continue}for(let a of o)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(Wt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await bU(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let i=await this.readSessionFile(s).catch(()=>null),o=this.extractSessionIdFromFilename(s),a=i?.sessionId||o,l=a===e||a.startsWith(e),c=o===e||o.startsWith(e)||o.length>=8&&e.startsWith(o);if(!l&&!c)continue;let u=await $e(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:xs(i?.lastUpdated,u.modifiedAt)})}return r.sort((s,i)=>{let o=i.modifiedAt.getTime()-s.modifiedAt.getTime();return o!==0?o:i.filePath.localeCompare(s.filePath)}),r[0]?.filePath??null}async resolveWorkspace(e){return e?(await this.getWorkspaceHashMap()).get(e)||`[hash:${e.slice(0,16)}]`:"(unknown workspace)"}async getWorkspaceHashMap(){if(this.workspaceHashMap)return this.workspaceHashMap;let e=new Set;_a(e,TU());for(let r of this.extraWorkspacePaths)_a(e,r);for(let r of await this.collectGeminiProjectPaths())_a(e,r);for(let r of await this.collectCodexCwds())_a(e,r);for(let r of await this.collectClaudeCwds())_a(e,r);let n=new Map;for(let r of e)n.set(RU(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await zS(this.geminiProjectsFile,"utf-8")}catch{return[]}try{let r=JSON.parse(e).projects;return!r||typeof r!="object"||Array.isArray(r)?[]:Object.keys(r)}catch{return[]}}async collectCodexCwds(){let e=new Set;for(let n of this.codexSessionDirs){let r=await this.findJsonlFiles(n);for(let s of r){let o=(await jt(s,1).catch(()=>[]))[0]?.payload?.cwd;o&&e.add(o)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await ya(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=Wt(this.claudeProjectsDir,r);if(!(await bu(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await ya(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=Wt(s,a),u=(await jt(l,1).catch(()=>[]))[0]?.cwd;u&&e.add(u)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await bu(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await ya(e)}catch{return n}for(let i of s){let o=Wt(e,i),a=await bu(o).catch(()=>null);if(a)if(a.isDirectory()){let l=await this.findJsonlFiles(o);n.push(...l)}else i.endsWith(".jsonl")&&n.push(o)}return n}}});import{readFileSync as IU,writeFileSync as xU,mkdirSync as AU}from"node:fs";import{join as CU,dirname as NU}from"node:path";import{randomUUID as OU}from"node:crypto";function dg(t){return new ug(t)}var ug,mg=M(()=>{"use strict";_i();QS();at();Qe();Jl();ug=class extends be{constructor(e){super({provider:new Eu(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!1,canResumeInteractive:!1,canFork:!0,forkSupport:"automatic",canStructuredTurn:!1,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"skill-file",leaderSetupHint:"Place skill files in the project's .gemini/ directory"},binary:"gemini",seedArgs:["-p",ce,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(Or))})}seed(e,n){return Promise.resolve({success:!1,error:Or})}sendTurn(e,n){return Promise.reject(new Error(Or))}openSession(e){return Promise.reject(new Error(Or))}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
2288
+ `)}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}manualSeedHint(e){return{launchCommand:`cd ${e} && gemini --skip-trust`,postLaunchNote:eu,lsCommand:`lmctl ls --provider gemini --sessiondir ${e}`}}async fork(e,n){let r=await this.resolvePath(e);if(!r)return{success:!1,error:`Session file not found for ${e}`};try{let s=IU(r,"utf-8"),i=Mo(s),o=us(s),a=OU();o.sessionId=a,o.kind="main";let l=NU(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),u=i==="jsonl"?".jsonl":".json",d=`session-${c}-${a.slice(0,8)}${u}`,m=CU(l,d);return AU(l,{recursive:!0}),xU(m,Sb(o,i),"utf-8"),{success:!0,sessionId:a,filePath:m}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}}});import{readdir as ZS,readFile as LU,rm as MU,stat as Ni}from"node:fs/promises";import{basename as PU,join as un}from"node:path";function DU(t){if(!t)return null;let e={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,reasoningTokens:0},n=!1;for(let r of Object.values(t))r?.usage&&(n=!0,e.inputTokens+=r.usage.inputTokens??0,e.outputTokens+=r.usage.outputTokens??0,e.cacheReadTokens+=r.usage.cacheReadTokens??0,e.cacheWriteTokens+=r.usage.cacheWriteTokens??0,e.reasoningTokens+=r.usage.reasoningTokens??0);return n?e:null}function pg(){return{shutdownTotals:null,assistantOutputSum:0}}function tk(t,e){if(e.type==="assistant.message"){let n=e.data?.outputTokens;typeof n=="number"&&(t.assistantOutputSum+=n,t.lastAssistantOutputTokens=n)}else if(e.type==="session.shutdown"){let n=DU(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function ek(t){let e=t.shutdownTotals,n=t.lastAssistantOutputTokens!==void 0?{outputTokens:t.lastAssistantOutputTokens}:void 0;return{totalInputTokens:e?.inputTokens,totalCachedInputTokens:e?.cacheReadTokens,totalCacheWriteInputTokens:e?.cacheWriteTokens,totalOutputTokens:e?.outputTokens??(t.lastAssistantOutputTokens===void 0?void 0:t.assistantOutputSum),totalReasoningOutputTokens:e?.reasoningTokens,lastTokenUsage:n}}function FU(t){let e={};for(let n of t.split(`
2289
+ `)){let r=n.match(/^(\w+):\s*(.*)$/);r&&(e[r[1]]=r[2].trim())}return{id:e.id,cwd:e.cwd,summary_count:e.summary_count?parseInt(e.summary_count,10):void 0,created_at:e.created_at,updated_at:e.updated_at,summary:e.summary}}function As(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function $U(t){let e=0,n=pg(),r;for await(let s of Ae(t)){if(s.type==="user.message"){e++;let i=(s.data?.content||"").trim();i&&(r=Q(i,80))}else s.type==="assistant.message"&&(s.data?.content||"").trim()&&e++;tk(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function jU(t){let e=UU(t),n=new Map;for(let r of t){if(r.role!=="tool_use"||r.toolCallId===void 0)continue;if(r.toolName==="bash"){let l=e.get(r.toolCallId),u=[l?.content,l?.toolDetailedContent].filter(m=>typeof m=="string").join(`
2290
+ `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(u===void 0)continue;let d=`copilot-shell:${u}:${r.toolCallId}`;n.set(u,d),r.backgroundTaskId=d,l!==void 0&&(l.backgroundTaskId=d);continue}if(!["read_bash","write_bash","stop_bash"].includes(r.toolName??""))continue;let s=r.toolInputData?.shellId;if(typeof s!="string"&&typeof s!="number")continue;let i=String(s),o=n.get(i);if(o===void 0)continue;r.backgroundTaskId=o;let a=e.get(r.toolCallId);a!==void 0&&(a.backgroundTaskId=o)}}function UU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var Tu,nk=M(()=>{"use strict";We();Tu=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||un(ae,".copilot");this.sessionStateDir=un(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await ZS(this.sessionStateDir)}catch{return e}for(let r of n){let s=un(this.sessionStateDir,r);if((await Ni(s).catch(()=>null))?.isDirectory())try{let o=await this.extractSummary(s,r);o&&e.push(o)}catch{}}return e}async loadSession(e){let n=await this.resolveSessionDir(e);if(!n)return null;let r=await this.readWorkspaceYaml(n),s=un(n,"events.jsonl"),i=await Ni(s).catch(()=>null),o=i?s:un(n,"workspace.yaml"),a=await $e(i?s:n),l=[],c=[],u=r?.cwd||"(unknown workspace)",d,m,p,f,g,h,y=r?.id||PU(n)||e,b=pg();if(i)for await(let _ of Ae(s)){let v=As(_.timestamp)||a.modifiedAt;if(tk(b,_),_.type==="session.start"&&_.data){_.data.sessionId&&(y=_.data.sessionId),_.data.copilotVersion&&(m=_.data.copilotVersion),_.data.startTime&&(h=As(_.data.startTime)),_.data.selectedModel&&(d=_.data.selectedModel),_.data.context&&(_.data.context.cwd&&(u=_.data.context.cwd),_.data.context.branch&&(p=_.data.context.branch));continue}if(_.type==="session.model_change"&&_.data?.newModel){d=_.data.newModel;continue}if(_.type==="user.message"&&_.data){let E=_.data.content||"";E&&c.push(E);let R=E.trim();R&&(f||(f=Q(R,80)),g=Q(R,80)),l.push({role:"user",timestamp:v,content:Se(R||E)});continue}if(_.type==="assistant.message"&&_.data){let E=(_.data.content||"").trim();if(E&&l.push({role:"assistant",timestamp:v,content:Se(E),model:d}),_.data.toolRequests)for(let R of _.data.toolRequests)l.push({role:"tool_use",timestamp:v,content:R.name||"unknown tool",toolName:R.name,toolInput:R.arguments?JSON.stringify(R.arguments,null,2):void 0,toolInputData:Vt(R.arguments),toolCallId:R.toolCallId});continue}if(_.type==="tool.execution_complete"&&_.data){let E=_.data.result?.content||"",R=_.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:v,content:Se(E),toolDetailedContent:R?Se(R):void 0,toolCallId:_.data.toolCallId});continue}if(_.type==="assistant.reasoning"&&_.data?.content){l.push({role:"thinking",timestamp:v,content:Se(_.data.content)});continue}if(_.type==="session.error"||_.type==="session.warning"||_.type==="session.info"||_.type==="system.message"){let E=_.data?.message||"";E.trim()&&l.push({role:"system",timestamp:v,content:Se(E)});continue}}if(!f){let _=(r?.summary||"").trim();_&&(f=Q(_,80))}return jU(l),{provider:"copilot",sessionId:y,cwd:u,createdAt:h??As(r?.created_at)??a.createdAt,modifiedAt:As(r?.updated_at)??a.modifiedAt,model:d,cliVersion:m,startCommand:"copilot",gitBranch:p,firstUserMessage:f,lastUserMessage:g,messageCount:l.filter(_=>_.role==="user"||_.role==="assistant").length,filePath:o,...ek(b),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=un(e,"events.jsonl"),i=await Ni(s).catch(()=>null),o=i?s:un(e,"workspace.yaml"),a=await $e(i?s:e),l=i?await jt(s,20):[],c=r?.id||n,u=r?.cwd||"(unknown workspace)",d,m,p,f,g;for(let y of l)if(y.type==="session.start"&&y.data&&(y.data.sessionId&&(c=y.data.sessionId),y.data.copilotVersion&&(m=y.data.copilotVersion),y.data.startTime&&(p=As(y.data.startTime)),y.data.selectedModel&&(d=y.data.selectedModel),y.data.context?.cwd&&(u=y.data.context.cwd)),y.type==="session.model_change"&&y.data?.newModel&&(d||(d=y.data.newModel)),y.type==="user.message"&&y.data){let b=(y.data.content||"").trim();b&&(f||(f=Q(b,80)),g=Q(b,80))}if(!f){let y=(r?.summary||"").trim();y&&(f=Q(y,80))}let h=i?await $U(s):{messageCount:0,tokens:pg()};return{provider:"copilot",sessionId:c,cwd:u,createdAt:p??As(r?.created_at)??a.createdAt,modifiedAt:As(r?.updated_at)??a.modifiedAt,model:d,cliVersion:m,startCommand:"copilot",firstUserMessage:f,lastUserMessage:h.lastUserMessage??g,messageCount:h.messageCount,filePath:o,...ek(h.tokens)}}async readWorkspaceYaml(e){let n=un(e,"workspace.yaml");try{let r=await LU(n,"utf-8");return FU(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await MU(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await ZS(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=un(this.sessionStateDir,e);if((await Ni(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let i=un(this.sessionStateDir,s);(await Ni(i).catch(()=>null))?.isDirectory()&&r.push(i)}if(r.length===1)return r[0];for(let s of n){let i=un(this.sessionStateDir,s);if(!(await Ni(i).catch(()=>null))?.isDirectory())continue;let a=await this.readWorkspaceYaml(i);if(a&&(a.id===e||a.id?.startsWith(e)))return i}return null}}});function gg(t){return new fg(t)}var fg,hg=M(()=>{"use strict";nk();at();tr();ke();Qe();fg=class extends be{copilotDir;constructor(e){super({provider:new Tu(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",ce,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>cn(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return Rn({...e,env:this.copilotDir!==void 0?{...e.env??process.env,COPILOT_HOME:this.copilotDir}:e.env,binary:"copilot",acpTool:"copilot"})}async seed(e,n){let r=await super.seed(e,n);if(n?.model===void 0||n.model.trim().length===0)return r;let s="copilot seed does not implement per-session model selection";return ht({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function _g(t){return new yg(t)}var yg,vg=M(()=>{"use strict";la();at();tr();Qe();yg=class extends be{constructor(e){super({provider:new Si(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"custom-tool",leaderSetupHint:"OpenCode supports custom tools via .opencode/tools/ directory"},binary:"opencode",seedArgs:["run",ce],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>cn(n,{...r,acpTool:"opencode"})})}openSession(e){return Rn({...e,binary:"opencode",acpTool:"opencode"})}seedArgsFor(e){let n=["run"];return e?.model&&n.push("--model",e.model),e?.effort&&n.push("--variant",e.effort),n.push(e?.prompt??ce),n}}});import{appendFile as HU,mkdir as BU,readFile as rk,readdir as sk,rm as WU,stat as ik}from"node:fs/promises";import{basename as qU,dirname as XU,isAbsolute as ok,join as Cs,relative as GU,resolve as bg}from"node:path";function wg(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function KU(t){return typeof t=="number"?new Date(t):wg(t)??new Date(0)}function ak(t){return typeof t=="string"?t.trim():Array.isArray(t)?t.map(e=>e&&typeof e=="object"&&"text"in e&&typeof e.text=="string"?e.text:"").filter(Boolean).join(`
2291
+ `).trim():""}function lk(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function YU(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:lk(t)??""}function QU(t){let e=ZU(t),n=new Set;for(let r of t){if(r.role!=="tool_use"||r.toolName!=="Bash"||r.toolInputData?.run_in_background!==!0||r.toolCallId===void 0)continue;let s=e.get(r.toolCallId);if(s===void 0)continue;let i=s.content.match(/(?:^|\n)task_id:\s*([^\s]+)/)?.[1];i!==void 0&&(n.add(i),r.backgroundTaskId=i,s.backgroundTaskId=i)}for(let r of t){if(r.role!=="tool_use"||r.toolName!=="TaskOutput"&&r.toolName!=="TaskStop"||r.toolCallId===void 0)continue;let s=r.toolInputData?.task_id;if(typeof s!="string"||!n.has(s))continue;r.backgroundTaskId=s;let i=e.get(r.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function ZU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var JU,VU,zU,Su,ck=M(()=>{"use strict";We();JU="1.4",VU="1.5",zU=new Set([JU,VU]),Su=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=bg(e?.kimiHome??process.env.KIMI_CODE_HOME??Cs(ae,".kimi-code")),this.sessionsDir=Cs(this.homeDir,"sessions")}async discoverSessions(){let e=[];for(let n of await this.sessionFiles())try{let r=await this.summary(n);r&&e.push(r)}catch{}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){let n=await this.findSession(e);if(!n)return null;let r=await this.summary(n);if(!r)return null;let s=await this.parseWire(n.wirePath);return{...r,messages:s.messages,userPrompts:s.userPrompts}}async resolveSessionPath(e){return(await this.findSession(e))?.wirePath??null}async deleteSession(e){let n=await this.findSession(e);return n?(await WU(n.sessionDir,{recursive:!0,force:!0}),await BU(XU(this.indexPath()),{recursive:!0,mode:448}),await HU(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
2292
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Cs(this.homeDir,"session_index.jsonl")}async sessionFiles(){let e=await this.readIndex(),n=new Map;for(let s of e.values())this.validSessionDir(s.sessionDir,s.sessionId)&&n.set(s.sessionId,this.filesFor(s.sessionId,s.sessionDir,s.workDir));let r;try{r=await sk(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=Cs(this.sessionsDir,s.name),o;try{o=await sk(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=Cs(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await rk(this.indexPath(),"utf-8")}catch{return new Map}let n=new Map;for(let r of e.split(/\r?\n/))if(r.trim())try{let s=JSON.parse(r);if(typeof s.sessionId!="string")continue;s.deleted===!0?n.delete(s.sessionId):typeof s.sessionDir=="string"&&typeof s.workDir=="string"&&n.set(s.sessionId,{sessionId:s.sessionId,sessionDir:bg(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Cs(n,"state.json"),wirePath:Cs(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!ok(e)||qU(e)!==n)return!1;let r=GU(this.sessionsDir,bg(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!ok(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(i=>i.sessionId===e);if(r)return r;let s=n.filter(i=>i.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await rk(e,"utf-8"));return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async summary(e){let n=await this.readState(e.statePath);if(!n)return null;let r;try{r=await ik(e.wirePath)}catch{return null}let s=await ik(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=wg(n.createdAt)??s.birthtime,a=wg(n.updatedAt)??(s.mtime>r.mtime?s.mtime:r.mtime);return{provider:"kimi",sessionId:e.sessionId,slug:n.title,cwd:n.workDir??e.indexedWorkDir??"(unknown)",createdAt:o,modifiedAt:a,model:i.model,startCommand:"kimi",firstUserMessage:i.firstUserMessage,lastUserMessage:i.lastUserMessage??(n.lastPrompt?Q(n.lastPrompt.trim(),80):void 0),messageCount:i.messageCount,filePath:e.wirePath,filePaths:[e.statePath,e.wirePath],totalInputTokens:i.totalInputTokens,totalCachedInputTokens:i.totalCachedInputTokens,totalCacheWriteInputTokens:i.totalCacheWriteInputTokens,totalOutputTokens:i.totalOutputTokens,lastInputTokens:i.lastInputTokens,lastTokenUsage:i.lastTokenUsage}}async parseWire(e){let n=[],r=[],s=new Set,i=!0,o,a,l,c=0,u=0,d=0,m=0,p=!1,f=0,g,h;for await(let y of Ae(e)){let b=KU(y.time??y.created_at);if(i&&(i=!1,y.type==="metadata"&&!zU.has(y.protocol_version))){let v=`Kimi transcript wire protocol version ${JSON.stringify(y.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:b,content:v}],userPrompts:[],messageCount:1,firstUserMessage:v,lastUserMessage:v}}if((y.type==="config.update"||y.type==="profile.bind")&&y.modelAlias&&(o=y.modelAlias),y.type==="usage.record"){y.model&&(o=y.model),p||=y.usage!==void 0;let v=y.usage?.inputOther??0,E=y.usage?.inputCacheRead??0,R=y.usage?.inputCacheCreation??0,S=y.usage?.output??0;c+=v,u+=E,d+=R,m+=S,y.usageScope==="turn"&&(g=v+E+R,h={inputTokens:v,cachedInputTokens:E,cacheWriteInputTokens:R,outputTokens:S,totalTokens:g+S});continue}if(y.type==="turn.prompt"&&y.origin?.kind==="user"){let v=ak(y.input);v&&((!y.promptId||!s.has(y.promptId))&&(r.push(v),y.promptId&&s.add(y.promptId)),a??=Q(v,80),l=Q(v,80),n.push({role:"user",timestamp:b,content:v}),f++);continue}if(y.type==="turn.steer"){let v=ak(y.input);v&&(n.push({role:"system",timestamp:b,content:v}),f++);continue}if(y.type!=="context.append_loop_event"||!y.event)continue;let _=y.event;_.type==="content.part"&&_.part?.type==="text"&&_.part.text?(n.push({role:"assistant",timestamp:b,content:_.part.text,model:o}),f++):_.type==="content.part"&&_.part?.type==="think"&&_.part.think?n.push({role:"thinking",timestamp:b,content:_.part.think,model:o}):_.type==="tool.call"?n.push({role:"tool_use",timestamp:b,content:_.name??"tool",toolName:_.name,toolInput:lk(_.args),toolInputData:Vt(_.args),toolCallId:_.toolCallId,model:o}):_.type==="tool.result"&&n.push({role:"tool_result",timestamp:b,content:YU(_.result),toolCallId:_.toolCallId,model:o})}return QU(n),{messages:n,userPrompts:r,messageCount:f,model:o,firstUserMessage:a,lastUserMessage:l,totalInputTokens:p?c:void 0,totalCachedInputTokens:p?u:void 0,totalCacheWriteInputTokens:p?d:void 0,totalOutputTokens:p?m:void 0,lastInputTokens:g,lastTokenUsage:h}}}});function Tg(t){return new Eg(t)}var Eg,Sg=M(()=>{"use strict";ck();at();tr();Qe();Eg=class extends be{kimiHome;constructor(e){super({provider:new Su(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Kimi supports skills through ~/.kimi-code/skills and --skills-dir."},binary:"kimi",seedArgs:["-p",ce,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>cn(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return Rn({...e,env:this.kimiHome!==void 0?{...e.env??process.env,KIMI_CODE_HOME:this.kimiHome}:e.env,binary:"kimi",acpTool:"kimi"})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??ce,"--output-format","stream-json"),n}}});import{spawn as e1}from"node:child_process";import{mkdirSync as t1}from"node:fs";function Rg(t){return new kg(t)}async function n1(t,e){let n=Date.now(),r=uk({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});qe("lmplayer",r,e.permissionMode??"yolo");let s=await mk(e.binary,r,{cwd:e.cwd,env:Ue(e.env,e.cwd,e.sessionId),signal:e.signal,onText:i=>{e.onProgress?.({kind:"text",summary:i.slice(0,120)}),e.onDelta?.(i)}});if(s.code!==0&&s.code!==null)throw new Error(dk(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function uk(t){let e=["run"];return t.model&&e.push("--model",t.model),t.sessionId&&e.push("--session",t.sessionId),t.formatJson&&e.push("--format","json"),t.effort&&e.push("--effort",t.effort),e.push(...Pr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function dk(t){let n=[Ss(t.stderr).trim(),t.error].filter(Boolean).join(`
2293
+ `);return n?Oe(n,{provider:"lmplayer"}):`exit code ${t.code}`}function mk(t,e,n){return new Promise((r,s)=>{let i;try{i=e1(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(g){s(g);return}let o="",a="",l="",c,u,d,m=[],p=!1,f=g=>{let h=g.trim();if(!h)return;let y;try{y=JSON.parse(h)}catch{m.push(g),n.onText?.(g);return}if(!Oi(y))return;let b=ku(y,!1);c===void 0&&b!==void 0&&(c=b),u=ku(y,!0)??u;let _=r1(y);_!==void 0&&(d=_);let v=pk(y);v&&(m.push(v),n.onText?.(v))};i.stdout?.on("data",g=>{let h=g.toString("utf8");o+=h,l+=h;let y=l.indexOf(`
2294
2294
  `);for(;y>=0;){let b=l.slice(0,y);l=l.slice(y+1),f(b),y=l.indexOf(`
2295
- `)}}),i.stderr?.on("data",g=>{a+=g.toString("utf8")}),n.signal&&(n.signal.aborted?i.kill():n.signal.addEventListener("abort",()=>i.kill(),{once:!0})),i.on("exit",g=>{p||(p=!0,l.length>0&&f(l),r({code:g,stdout:o,stderr:a,sessionId:c??u,text:m.join(""),error:d}))}),i.on("error",g=>{p||(p=!0,s(g))})})}function t1(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Oi(e)){let n=e.data;if(Oi(n)&&typeof n.message=="string"&&n.message.length>0)return typeof e.name=="string"?`${e.name}: ${n.message}`:n.message;if(typeof e.message=="string"&&e.message.length>0)return e.message}}function pk(t){for(let e of["text","content","delta","output","message"]){let n=t[e];if(typeof n=="string")return n}for(let e of["data","event","payload","part"]){let n=t[e];if(Oi(n)){let r=pk(n);if(r)return r}}}function ku(t,e){for(let r of["sessionID","sessionId","session_id"]){let s=t[r];if(typeof s=="string"&&s.length>0)return s}let n=t.session;if(typeof n=="string"&&n.length>0)return n;if(Oi(n)){let r=ku(n,e);if(r!==void 0)return r}if(e){let r=t.id;if(typeof r=="string"&&r.length>0)return r}for(let r of["data","event","payload","part"]){let s=t[r];if(Oi(s)){let i=ku(s,e);if(i!==void 0)return i}}}function Oi(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var kg,Ig=M(()=>{"use strict";la();at();Qe();kn();ln();jc();an();kg=class extends be{constructor(e){super({provider:new Si({providerName:"lmplayer",startCommand:"lmplayer",dbPaths:e?.lmplayerDbPaths,dbPath:e?.lmplayerDbPath}),protocol:{transport:"lmplayer",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none"},binary:"lmplayer",seedArgs:["run","--format","json","--dangerously-skip-permissions",ce],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:e1})}async sendTurn(e,n){let r=await super.sendTurn(e,n);return n.permissionMode==="plan"?{...r,warnings:[...r.warnings??[],"lmplayer does not enforce plan mode; this turn used full permissions"]}:r}seedArgsFor(e){return uk({prompt:e?.prompt??ce,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){ZU(e,{recursive:!0});let r=this.seedArgsFor(n);qe("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await mk(this.binary,r,{cwd:e,env:Ti(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:dk(s)}:s.sessionId?{success:!0,sessionId:s.sessionId}:{success:!1,error:"lmplayer seed failed; provider did not report a sessionID"}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}manualSeedHint(e){return{launchCommand:`cd ${e} && lmplayer run --format json --dangerously-skip-permissions "${ce}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as Ru,readFile as n1,rm as r1}from"node:fs/promises";import{basename as fk,join as Br}from"node:path";function s1(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function va(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function i1(t,e){if(!e)return;t.observed=!0;let n=va(e.promptTokenCount),r=va(e.cachedContentTokenCount),s=va(e.candidatesTokenCount),i=va(e.thoughtsTokenCount);t.totalInputTokens+=n,t.totalCachedInputTokens+=r,t.totalOutputTokens+=s,t.totalReasoningOutputTokens+=i,t.lastInputTokens=n,t.lastTokenUsage={inputTokens:Math.max(n-r,0),cachedInputTokens:r,outputTokens:s,reasoningOutputTokens:i,totalTokens:va(e.totalTokenCount)||n+s}}function o1(t){return{totalInputTokens:t.observed?t.totalInputTokens:void 0,totalCachedInputTokens:t.observed?t.totalCachedInputTokens:void 0,totalOutputTokens:t.observed?t.totalOutputTokens:void 0,totalReasoningOutputTokens:t.observed?t.totalReasoningOutputTokens:void 0,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}}function gk(t){return t.type==="user"||t.message?.role==="user"}function hk(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function yk(t){let e=t.message;return e?typeof e.content=="string"?e.content:Array.isArray(e.content)?e.content.filter(n=>n.type==="text").map(n=>n.text||"").join(`
2295
+ `)}}),i.stderr?.on("data",g=>{a+=g.toString("utf8")}),n.signal&&(n.signal.aborted?i.kill():n.signal.addEventListener("abort",()=>i.kill(),{once:!0})),i.on("exit",g=>{p||(p=!0,l.length>0&&f(l),r({code:g,stdout:o,stderr:a,sessionId:c??u,text:m.join(""),error:d}))}),i.on("error",g=>{p||(p=!0,s(g))})})}function r1(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Oi(e)){let n=e.data;if(Oi(n)&&typeof n.message=="string"&&n.message.length>0)return typeof e.name=="string"?`${e.name}: ${n.message}`:n.message;if(typeof e.message=="string"&&e.message.length>0)return e.message}}function pk(t){for(let e of["text","content","delta","output","message"]){let n=t[e];if(typeof n=="string")return n}for(let e of["data","event","payload","part"]){let n=t[e];if(Oi(n)){let r=pk(n);if(r)return r}}}function ku(t,e){for(let r of["sessionID","sessionId","session_id"]){let s=t[r];if(typeof s=="string"&&s.length>0)return s}let n=t.session;if(typeof n=="string"&&n.length>0)return n;if(Oi(n)){let r=ku(n,e);if(r!==void 0)return r}if(e){let r=t.id;if(typeof r=="string"&&r.length>0)return r}for(let r of["data","event","payload","part"]){let s=t[r];if(Oi(s)){let i=ku(s,e);if(i!==void 0)return i}}}function Oi(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var kg,Ig=M(()=>{"use strict";la();at();Qe();kn();ln();jc();an();kg=class extends be{constructor(e){super({provider:new Si({providerName:"lmplayer",startCommand:"lmplayer",dbPaths:e?.lmplayerDbPaths,dbPath:e?.lmplayerDbPath}),protocol:{transport:"lmplayer",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none"},binary:"lmplayer",seedArgs:["run","--format","json","--dangerously-skip-permissions",ce],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:n1})}async sendTurn(e,n){let r=await super.sendTurn(e,n);return n.permissionMode==="plan"?{...r,warnings:[...r.warnings??[],"lmplayer does not enforce plan mode; this turn used full permissions"]}:r}seedArgsFor(e){return uk({prompt:e?.prompt??ce,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){t1(e,{recursive:!0});let r=this.seedArgsFor(n);qe("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await mk(this.binary,r,{cwd:e,env:Ti(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:dk(s)}:s.sessionId?{success:!0,sessionId:s.sessionId}:{success:!1,error:"lmplayer seed failed; provider did not report a sessionID"}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}manualSeedHint(e){return{launchCommand:`cd ${e} && lmplayer run --format json --dangerously-skip-permissions "${ce}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as Ru,readFile as s1,rm as i1}from"node:fs/promises";import{basename as fk,join as Br}from"node:path";function o1(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function va(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function a1(t,e){if(!e)return;t.observed=!0;let n=va(e.promptTokenCount),r=va(e.cachedContentTokenCount),s=va(e.candidatesTokenCount),i=va(e.thoughtsTokenCount);t.totalInputTokens+=n,t.totalCachedInputTokens+=r,t.totalOutputTokens+=s,t.totalReasoningOutputTokens+=i,t.lastInputTokens=n,t.lastTokenUsage={inputTokens:Math.max(n-r,0),cachedInputTokens:r,outputTokens:s,reasoningOutputTokens:i,totalTokens:va(e.totalTokenCount)||n+s}}function l1(t){return{totalInputTokens:t.observed?t.totalInputTokens:void 0,totalCachedInputTokens:t.observed?t.totalCachedInputTokens:void 0,totalOutputTokens:t.observed?t.totalOutputTokens:void 0,totalReasoningOutputTokens:t.observed?t.totalReasoningOutputTokens:void 0,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}}function gk(t){return t.type==="user"||t.message?.role==="user"}function hk(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function yk(t){let e=t.message;return e?typeof e.content=="string"?e.content:Array.isArray(e.content)?e.content.filter(n=>n.type==="text").map(n=>n.text||"").join(`
2296
2296
  `):Array.isArray(e.parts)?e.parts.filter(n=>!n.thought&&n.type!=="thinking").map(n=>n.text||"").join(`
2297
- `):"":""}function _k(t){return t.model||t.message?.model}function a1(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:bk(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function ba(t,e=!1){if(t!==void 0){if(typeof t=="string")return t;try{return JSON.stringify(t,null,e?2:void 0)}catch{return String(t)}}}function l1(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return ba(e.output??e.error??t)}return ba(t)}function bk(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function vk(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:ba(t.args,!0),toolInputData:Vt(t.args),toolCallId:t.id,model:n}}var Iu,wk=M(()=>{"use strict";We();Iu=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||Br(ae,".qwen")}async discoverSessions(){let e=Br(this.baseDir,"projects"),n;try{n=await Ru(e)}catch{return[]}let r=[];for(let s of n){let i=Br(e,s,"chats"),o;try{o=await Ru(i)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=Br(i,a);try{let u=await this.extractSummary(c,l);u&&r.push(u)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await $e(e),i="(unknown)",o,a,l,c,u=0;for await(let d of Ae(e)){if(r=!0,d.cwd&&(i=d.cwd,d.version&&(a=d.version)),d.type==="system"&&d.cwd&&(i=d.cwd,d.version&&(a=d.version),d.model&&(o=d.model)),gk(d)){let m=yk(d).trim();m&&(l||(l=Q(m,80)),c=Q(m,80),u++)}if(hk(d)){let m=_k(d);m&&(o=m),u+=a1(d)}}return r?{provider:"qwen",sessionId:n,cwd:i,createdAt:s.createdAt,modifiedAt:s.modifiedAt,model:o,cliVersion:a,startCommand:"qwen",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e}:null}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=fk(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await $e(e),s="(unknown)",i,o,a,l,c,u,d=[],m=s1();for await(let p of Ae(e)){if(i1(m,p.usageMetadata),p.cwd&&(s=p.cwd,p.version&&(o=p.version),p.gitBranch&&(a=p.gitBranch)),p.type==="system"&&p.cwd&&(s=p.cwd,p.version&&(o=p.version),p.model&&(i=p.model),p.gitBranch&&(a=p.gitBranch)),!p.message)continue;let f=p.message,g=p.timestamp?new Date(p.timestamp):r.modifiedAt;if(p.type==="tool_result"){let h=bk(p).filter(y=>y.functionResponse!==void 0);h.length===0&&p.toolCallResult?.callId&&d.push({role:"tool_result",timestamp:g,content:ba(p.toolCallResult.resultDisplay??p.toolCallResult.error??p.toolCallResult.status)??"tool result",toolCallId:p.toolCallResult.callId});for(let y of h){let b=y.functionResponse,_=l1(b.response),v=ba(p.toolCallResult?.resultDisplay);d.push({role:"tool_result",timestamp:g,content:v??_??p.toolCallResult?.status??"tool result",toolName:b.name,toolCallId:p.toolCallResult?.callId??b.id,..._!==void 0?{toolDetailedContent:_}:{}})}}else if(gk(p)){let h=yk(p);h.trim()&&(c||(c=Q(h.trim(),80)),u=Q(h.trim(),80)),d.push({role:"user",timestamp:g,content:h})}else if(hk(p)){let h=_k(p);if(h&&(i=h),Array.isArray(f.content))for(let y of f.content)y.type==="text"&&y.text?d.push({role:"assistant",timestamp:g,content:y.text,model:h}):y.type==="thinking"&&y.thinking?d.push({role:"thinking",timestamp:g,content:y.thinking}):y.functionCall&&d.push(vk(y.functionCall,g,h));else if(typeof f.content=="string")d.push({role:"assistant",timestamp:g,content:f.content,model:h});else if(Array.isArray(f.parts))for(let y of f.parts)if(y.thought||y.type==="thinking"){let b=y.thinking||y.text;b&&d.push({role:"thinking",timestamp:g,content:b})}else y.functionCall?d.push(vk(y.functionCall,g,h)):y.text&&d.push({role:"assistant",timestamp:g,content:y.text,model:h})}}return{provider:"qwen",sessionId:n,slug:l,cwd:s,createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:i,cliVersion:o,gitBranch:a,startCommand:"qwen",firstUserMessage:c,lastUserMessage:u,messageCount:d.filter(p=>p.role==="user"||p.role==="assistant").length,filePath:e,...o1(m),messages:d}}async resolveSessionPath(e){let n=Br(this.baseDir,"projects");try{let r=await Ru(n),s=[];for(let i of r){let o=Br(n,i,"chats",`${e}.jsonl`);try{return await n1(o,{flag:"r"}),o}catch{continue}}for(let i of r){let o=Br(n,i,"chats"),a;try{a=await Ru(o)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;fk(l,".jsonl").startsWith(e)&&s.push(Br(o,l))}}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{return await r1(n),!0}catch{return!1}}}});function Ag(t){return new xg(t)}var xg,Cg=M(()=>{"use strict";wk();at();tr();Qe();xg=class extends be{constructor(e){super({provider:new Iu(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",ce,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:fu})}openSession(e){return gu({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as Ek,readFile as Tk,rm as Sk,stat as kk}from"node:fs/promises";import{basename as Ng,join as In}from"node:path";import{fileURLToPath as c1}from"node:url";async function u1(t){let e=await Promise.all(t.map(n=>$e(n)));return{createdAt:new Date(Math.min(...e.map(n=>n.createdAt.getTime()))),modifiedAt:new Date(Math.max(...e.map(n=>n.modifiedAt.getTime())))}}function d1(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function Rk(t){return t.type==="USER_INPUT"}function Ik(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function m1(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function xk(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function Ak(t){if(!t)return;let e=/Model Selection` from [^\n]+? to ([^\n]+)/.exec(t);if(e)return e[1].replace(/\. No need\b[\s\S]*$/,"").replace(/\. If reporting\b[\s\S]*$/,"").replace(/\.\s*$/,"").trim()}function p1(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function f1(t){for await(let e of Ae(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let i=g1(s);if(i)return i}let r=h1(e.content);if(r)return r}return null}function g1(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=e.Cwd??e.cwd??e.DirectoryPath;return typeof n!="string"?null:n.replace(/^"|"$/g,"")}function h1(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function y1(t,e){if(t.status!=="RUNNING"||!t.content)return;let n=/task id:\s*([^/\s]+)\/(task-(\d+))\b/.exec(t.content);if(!(!n||n[1]!==e)&&!(t.step_index===void 0||Number(n[3])!==t.step_index))return n[2]}function _1(t,e){let n=new Set;for(let r of e){let s=v1(t,n,r);if(!s)continue;n.add(s);let i=r.event.step_index===void 0?void 0:`agy-step-${r.event.step_index}`;s.message.toolCallId=i,s.message.backgroundTaskId=r.message.backgroundTaskId,r.message.toolName=s.name,r.message.toolCallId=i}}function v1(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:T1(n.event.content);if(r!==void 0)return Ck(t.filter(i=>!e.has(i)&&S1(i)===r),n.event.step_index);let s=E1(n.event);if(s!==void 0)return Ck(t.filter(i=>!e.has(i)&&b1(i.name,n.event.type)&&Ok(w1(i))===s),n.event.step_index)}function Ck(t,e){if(t.length===0)return;if(t.length===1)return t[0];if(e===void 0)return;let n=t.map(r=>({call:r,distance:r.stepIndex===void 0?Number.POSITIVE_INFINITY:Math.abs(e-r.stepIndex)})).sort((r,s)=>r.distance-s.distance);return n[0].distance<n[1].distance?n[0].call:void 0}function b1(t,e){return e==="VIEW_FILE"?t==="view_file":e!=="CODE_ACTION"?!1:t==="write_to_file"||t==="replace_file_content"||t==="multi_replace_file_content"}function w1(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function E1(t){if(!t.content)return;let e;return t.type==="VIEW_FILE"?e=/File Path:\s*`?([^`\n]+)`?/.exec(t.content)?.[1]:t.type==="CODE_ACTION"&&(e=/Created file\s+(.+?)\s+with requested content/.exec(t.content)?.[1]??/changes were made by .*? tool to:\s*(.+?)\.\s*(?:If relevant|$)/s.exec(t.content)?.[1]),Ok(e)}function Ok(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return c1(e)}catch{return}}function T1(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function S1(t){if(t.name==="run_command"){let e=t.input?.CommandLine;return typeof e=="string"?e:void 0}if(t.name==="schedule"){let e=t.input?.DurationSeconds,n=t.input?.Prompt;return typeof e!="string"&&typeof e!="number"||typeof n!="string"?void 0:`Timer: ${e}s, Prompt: ${n}`}}function Nk(t){if(t.endsWith(".db"))return Ng(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var xu,Lk=M(()=>{"use strict";We();xu=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||In(ae,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:In(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=In(this.baseDir,"conversations"),n;try{n=await Ek(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let i=Ng(s,".db");try{let o=await this.extractSummary(i);o&&r.push(o)}catch{}}return r}conversationPath(e){return In(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return In(this.baseDir,"brain",e,".system_generated","logs",n?"transcript_full.jsonl":"transcript.jsonl")}async existingTranscriptPath(e){for(let n of[this.transcriptPath(e,!0),this.transcriptPath(e,!1)])try{return await kk(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,i=await u1([n,r].filter(Boolean)),o=await this.resolveCwd(e,r),a,l,c,u=0;if(r)for await(let d of Ae(r)){let m=Ak(d.content);if(m&&(a=m),Rk(d)){let p=xk(d.content).trim();p&&(l||(l=Q(p,80)),c=Q(p,80)),u++}else Ik(d)&&d.content&&u++}return{provider:"agy",sessionId:e,cwd:o,createdAt:i.createdAt,modifiedAt:i.modifiedAt,model:a,startCommand:"agy",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:s,filePaths:r?[n,r]:[n]}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=Nk(n);if(!r)return null;let s=await this.extractSummary(r);if(!s)return null;let i=await this.existingTranscriptPath(r),o=[],a=s.model,l=s.firstUserMessage,c=s.lastUserMessage,u=[],d=[];if(i)for await(let m of Ae(i)){let p=d1(m.created_at,s.modifiedAt),f=Ak(m.content);if(f&&(a=f),Rk(m)){let g=xk(m.content),h=g.trim();h&&(l||(l=Q(h,80)),c=Q(h,80)),o.push({role:"user",timestamp:p,content:g});continue}if(Array.isArray(m.tool_calls))for(let g of m.tool_calls){let h=g.name||"tool",y=p1(g.args),b=Vt(g.args),_={role:"tool_use",timestamp:p,content:y,toolName:h,toolInput:y,toolInputData:b};o.push(_),u.push({name:h,stepIndex:m.step_index,input:b,message:_})}if(Ik(m)&&m.content)o.push({role:"assistant",timestamp:p,content:m.content,model:a});else if(m1(m)&&m.content){let g=y1(m,r),h=g===void 0?null:await this.readTaskLog(r,g),y={role:"tool_result",timestamp:h?.modifiedAt??p,content:m.content,toolName:m.type?.toLowerCase(),backgroundTaskId:g,...h===null?{}:{toolDetailedContent:h.content}};o.push(y),d.push({event:m,message:y})}m.thinking&&o.push({role:"thinking",timestamp:p,content:m.thinking})}return _1(u,d),{...s,model:a,firstUserMessage:l,lastUserMessage:c,messageCount:o.filter(m=>m.role==="user"||m.role==="assistant").length,messages:o}}async resolveSessionPath(e){let n=this.conversationPath(e);try{return await kk(n),n}catch{}let r=In(this.baseDir,"conversations");try{let s=[];for(let i of await Ek(r)){if(!i.endsWith(".db"))continue;Ng(i,".db").startsWith(e)&&s.push(In(r,i))}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;let r=Nk(n);return r?(await Sk(this.conversationPath(r),{force:!0}),await Sk(In(this.baseDir,"brain",r),{recursive:!0,force:!0}),!0):!1}async resolveCwd(e,n){let r=await this.cwdFromLastConversationCache(e);if(r)return r;if(n){let s=await f1(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=In(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await Tk(n,"utf8"));for(let[s,i]of Object.entries(r))if(i===e)return s}catch{}return null}async readTaskLog(e,n){if(!/^task-\d+$/.test(n))return null;let r=In(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,i]=await Promise.all([Tk(r,"utf8"),$e(r)]);return{content:s,modifiedAt:i.modifiedAt}}catch{return null}}}});import{spawn as k1}from"node:child_process";import{StringDecoder as Mk}from"node:string_decoder";function Au(t){return async(e,n)=>{let r=Date.now(),s=t.buildArgs(e,n);t.assertArgs?.(s,n),n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot started (no streaming events)`});let{stdout:i}=await R1(t.label,n.binary,s,{cwd:n.cwd,env:Ue(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:i.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function R1(t,e,n,r){return new Promise((s,i)=>{if(r.signal?.aborted){i(new Error(`${t} turn aborted`));return}let o;try{o=k1(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(m){i(m);return}let a="",l="",c=new Mk("utf8"),u=new Mk("utf8");o.stdout?.on("data",m=>{a+=c.write(m)}),o.stderr?.on("data",m=>{l+=u.write(m)});let d=()=>{o.kill("SIGTERM"),i(new Error(`${t} turn aborted`))};o.on("error",m=>{r.signal?.removeEventListener("abort",d),i(m)}),o.on("close",(m,p)=>{if(r.signal?.removeEventListener("abort",d),a+=c.end(),l+=u.end(),m===0){s({stdout:a,stderr:l});return}let f=p?`signal ${p}`:`exit code ${m}`,g=l.trim()||a.trim();i(new Error(Ei(`${t} failed (${f})`,g?Oe(g,{provider:t}):"")))}),r.signal?.aborted?d():r.signal?.addEventListener("abort",d,{once:!0})})}var Og=M(()=>{"use strict";ln();an()});import{basename as I1}from"node:path";import{randomUUID as x1}from"node:crypto";function Mg(t){return new Lg(t)}function C1(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Lg,A1,Pg=M(()=>{"use strict";Lk();at();Qe();kn();Og();Lg=class extends be{constructor(e){super({provider:new xu(e),protocol:{transport:"print",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append",leaderSetupHint:"Antigravity uses one-shot print turns; no streaming events are available."},binary:"agy",seedArgs:["-p",ce,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:A1})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||I1(s)!==`${n.sessionId}.db`)throw new Error(`agy cannot resume missing conversation "${n.sessionId}"`)}let r=await super.sendTurn(e,n);return n.permissionMode==="plan"?{...r,warnings:[...r.warnings??[],"agy does not enforce plan mode; this turn used full permissions"]}:r}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}async seed(e,n){let r=x1(),s=`[lmctl-seed:${r}]`,i=await super.seed(e,{...n,prompt:tu({flightToken:r,prompt:n?.prompt})});if(!i.success&&(i.errorCode==="ENOENT"||i.errorCode==="ABORT_ERR"))return i;let o=(await this.provider.discoverSessions()).filter(a=>a.firstUserMessage?.startsWith(s));if(i.success&&o.length===1)return{...i,sessionId:o[0].sessionId};for(let a of o)await this.provider.deleteSession(a.sessionId);return{...i,success:!1,error:i.error??`agy seed created ${o.length} identifiable sessions; expected one`}}manualSeedHint(e){return{launchCommand:`cd ${e} && agy --dangerously-skip-permissions`,postLaunchNote:"Send the lmctl seed instruction, wait for the conversation to write, then exit.",lsCommand:`lmctl ls --provider agy --sessiondir ${e}`}}},A1=Au({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",C1(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>qe("agy",t,e.permissionMode??"yolo")})});import{existsSync as wa,readdirSync as N1,statSync as Pk}from"node:fs";import{readdir as Dg,rm as O1}from"node:fs/promises";import Dk,{join as xn}from"node:path";function L1(t){if(t.length===0)throw new Error("cannot encode an empty project path");let e="",n=!1;for(let s=0;s<t.length;s++){let i=t.charCodeAt(s),o=String.fromCharCode(i);o==="/"||o==="\\"||o===":"?(n||(e+="-"),n=!0):o!=="~"&&/^[A-Za-z0-9._-]$/.test(o)?(e+=o,n=!1):(e+="~"+i.toString(16).toUpperCase().padStart(4,"0"),n=!1)}return`--${(e.replace(/^-+/,"")||"root").slice(0,251)}--`}function M1(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Li(t,e){let n=e??(process.platform==="win32"?Dk.win32:Dk.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!wa(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let i=N1(r),o=[];for(let a of i){let l=/^session(?:\.v(\d+))?\.jsonl\.zstd$/.exec(a);if(l){let c=l[1]?parseInt(l[1],10):0;if(Number.isSafeInteger(c))try{let u=n.join(r,a);Pk(u).isFile()&&o.push({name:a,version:c})}catch{}}}if(o.length>0)return o.sort((a,l)=>l.version-a.version),n.join(r,o[0].name)}catch{}try{if(wa(t)&&Pk(t).isFile())return t}catch{}return n.join(r,s)}function Fg(t){if(typeof t=="string")return t;if(!Array.isArray(t))return"";let e=[];for(let n of t)n&&typeof n=="object"&&n.type==="text"&&typeof n.text=="string"&&e.push(n.text);return e.join("")}function P1(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)n&&typeof n=="object"&&n.type==="reasoning"&&typeof n.text=="string"&&e.push(n.text);return e}function Fk(t){let e=[];for(let n of t){let r=n.data??{},s=n.time?new Date(n.time):new Date(0);if(n.type==="user/message"){let i=r;if(i.source?.kind!==void 0&&i.source.kind!=="user")continue;e.push({role:"user",timestamp:s,content:Fg(i.content)})}else if(n.type==="assistant/message"){let i=r.message;for(let o of P1(i?.content))e.push({role:"thinking",timestamp:s,content:o});e.push({role:"assistant",timestamp:s,content:Fg(i?.content),model:i?.source?.model})}else if(n.type==="tool/call"){let i=r,o;if(typeof i.arguments=="string")try{o=JSON.parse(i.arguments)}catch{}else i.arguments&&typeof i.arguments=="object"&&(o=i.arguments);e.push({role:"tool_use",timestamp:s,content:typeof i.arguments=="string"?i.arguments:JSON.stringify(i.arguments??{}),toolName:i.name,toolCallId:i.callId,toolInputData:o})}else if(n.type==="tool/result"){let i=r,a=(Array.isArray(i.message?.content)?i.message.content:[])[0];e.push({role:"tool_result",timestamp:s,content:Fg(a?.content??i.message?.content),toolCallId:a?.toolCallId??i.message?.source?.callId})}}return e}function D1(t){for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type==="turn/end")return n.data?.reason?.kind==="completed"?"complete":"aborted";if(n.type==="turn/start")return"in_progress"}}function $k(t,e,n){let r=t.find(p=>p.type==="session");if(!r)return null;let s=r,i=r.data,o=s.id??i?.id;if(!o)return null;let a;for(let p of t)if(p.type==="request/header"){let f=p.data?.header;f?.config?.model&&(a=f.config.model)}let l=t.map(p=>p.time).filter(p=>typeof p=="number"),c=s.createdAt??i?.createdAt,u=c?new Date(c):new Date(0),d=l.length>0?new Date(Math.max(...l)):u,m=n.filter(p=>p.role==="user");return{provider:"dsh",sessionId:o,cwd:s.cwd??i?.cwd??"",createdAt:u,modifiedAt:d,model:a,firstUserMessage:m[0]?.content,lastUserMessage:m.at(-1)?.content,messageCount:n.filter(p=>p.role==="user"||p.role==="assistant").length,filePath:e,...F1(t)}}function F1(t){let e=new Map;for(let o of t){let a=o.data?.turn??null,l=e.get(a)??[];l.push(o),e.set(a,l)}let n=[],r=[];for(let o of e.values()){let a=new Ii("",-1,new Set);a.update(o);let l=a.usage();l&&(n.push(l),r.push(a.lastUsage()))}if(!n.length)return{};let s=o=>{if(n.some(l=>l.invalidCounters||l[o]===null))return;let a=n.reduce((l,c)=>l+c[o],0);return Number.isSafeInteger(a)?a:void 0},i=r.at(-1);return{totalInputTokens:s("inputUncached"),totalCachedInputTokens:s("cacheRead"),totalOutputTokens:s("output"),totalReasoningOutputTokens:s("reasoning"),lastInputTokens:i.inputUncached!==null&&i.cacheRead!==null?i.inputUncached+i.cacheRead:void 0,lastTokenUsage:{totalTokens:i.inputUncached!==null&&i.cacheRead!==null&&i.output!==null?i.inputUncached+i.cacheRead+i.output:void 0,inputTokens:i.inputUncached??void 0,cachedInputTokens:i.cacheRead??void 0,outputTokens:i.output??void 0,reasoningOutputTokens:i.reasoning??void 0}}}var Cu,jk=M(()=>{"use strict";ru();We();Ul();Cu=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||xn(ae,".dsh");this.sessionsDir=xn(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Dg(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Dg(xn(this.sessionsDir,r))}catch{continue}for(let i of s)if(i.startsWith("session-"))try{let o=await this.readSummary(r,i);o&&e.push(o)}catch{}}return e}async loadSession(e){let n=await this.findSessionDir(e);if(!n)return null;let r=await this.readRecords(n.cwdDir,n.sessionDir);if(r.length===0)return null;let s=Fk(r),i=$k(r,n.filePath,s);return i?{...i,turnStatus:D1(r),messages:s}:null}async resolveSessionPath(e){return(await this.findSessionDir(e))?.filePath??null}async deleteSession(e){let n=await this.findSessionDir(e);return n?(await O1(xn(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=L1(e),s=M1(e),i=r,o=xn(this.sessionsDir,r,n),a=xn(this.sessionsDir,s,n);!wa(o)&&wa(a)&&(i=s);let l=xn(this.sessionsDir,i,n);return Li(l)}async findSessionDir(e){let n;try{n=await Dg(this.sessionsDir)}catch{return null}for(let r of n){let s=e,i=xn(this.sessionsDir,r,s);try{let o=Li(i);if(wa(o))return{cwdDir:r,sessionDir:s,filePath:o}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=xn(this.sessionsDir,e,n),i=Li(s),o=await r(i),a=jl(o),l=[];for(let c of a.split(`
2298
- `))if(c.trim())try{let u=JSON.parse(c);if(u.type?.endsWith("-chunks")||u.type==="assistant/chunk"&&u.data?.chunk?.type!=="usage")continue;l.push(u)}catch{}return l}async readSummary(e,n){let r=xn(this.sessionsDir,e,n),s=Li(r),i=await this.readRecords(e,n);return i.length===0?null:$k(i,s,Fk(i))}}});import{spawn as $1}from"node:child_process";import{randomUUID as j1}from"node:crypto";function $g(t,e=[]){if(t==null)return t;if(typeof t=="string"){let n=t;for(let r of e)r&&typeof r=="string"&&r.length>=8&&n.includes(r)&&(n=n.replaceAll(r,"[REDACTED]"));return n=n.replace(/(?:sk-|dsh-)[A-Za-z0-9_\-\.]+/gi,"[REDACTED]"),n=n.replace(/(?:token=)[A-Za-z0-9_\-\.]+/gi,"token=[REDACTED]"),n=n.replace(/bearer\s+[A-Za-z0-9_\-\.]+/gi,"Bearer [REDACTED]"),n}if(Array.isArray(t))return t.map(n=>$g(n,e));if(typeof t=="object"){let n={};for(let[r,s]of Object.entries(t))/api[_-]?key|secret|token|password|auth|authorization|credential|cookie/i.test(r)?n[r]="[REDACTED]":n[r]=$g(s,e);return n}return t}function H1(t){let e;try{e=new URL(t)}catch{throw new Error("invalid dsh boot URL: malformed URL")}if(e.protocol!=="http:")throw new Error(`invalid dsh boot URL scheme "${e.protocol}": must be http:`);if(e.username||e.password)throw new Error("invalid dsh boot URL: userinfo credentials are not allowed");let n=e.hostname;if(!(n==="127.0.0.1"||n==="localhost"||n==="::1"||n==="[::1]"))throw new Error(`invalid dsh boot URL host "${n}": loopback host (127.0.0.1 or localhost) required`);return e}function Hk(t,e=2e3){if(!t||t.exitCode!==null||t.signalCode!==null)return;try{t.kill("SIGTERM")}catch{}let n,r=()=>{n!==void 0&&(clearTimeout(n),n=void 0)};if(t.once("exit",r),t.exitCode!==null||t.signalCode!==null){r();return}n=setTimeout(()=>{n=void 0;try{t.exitCode===null&&t.signalCode===null&&t.kill("SIGKILL")}catch{}},e),n.unref()}async function Nu(t,e=n=>jg.spawn(n)){if(Wr){let n=await Wr.catch(()=>{});if(n?.alive)return n;Wr=void 0}return Wr=e(t),Wr}async function Ea(){if(!Wr)return;(await Wr.catch(()=>{}))?.shutdown(),Wr=void 0}var U1,Uk,nr,jg,Wr,Bk=M(()=>{"use strict";an();U1=/dsh web:\s*(https?:\/\/\S+)/,Uk=2e4;nr=class t extends Error{method;detail;constructor(e,n,r=[]){let s=$g(n,r),i=typeof s=="string"?s:JSON.stringify(s);super(`dsh RPC ${e} failed: ${i}`),this.name="DshRpcCallError",this.method=e,this.detail=s,Object.setPrototypeOf(this,t.prototype)}};jg=class t{constructor(e,n,r,s=!1,i){this.baseUrl=e;this.child=n;this.cookie=r;this.isV2=s;this.tokenUrl=i;if(this.cookie&&this.recordSecret(this.cookie),this.tokenUrl){this.recordSecret(this.tokenUrl);try{let a=new URL(this.tokenUrl).searchParams.get("token");a&&this.recordSecret(a)}catch{}}}static MAX_RETAINED_SECRETS=8;cookieExchangePromise;knownSecrets=[];recordSecret(e){if(!e||typeof e!="string"||e.length<8)return;let n=r=>{if(r.length<8)return;let s=this.knownSecrets.indexOf(r);for(s!==-1&&this.knownSecrets.splice(s,1),this.knownSecrets.push(r);this.knownSecrets.length>t.MAX_RETAINED_SECRETS;)this.knownSecrets.shift()};if(n(e),e.includes("=")){let r=e.split("=")[1];r&&r.length>=8&&n(r)}}getSecretsToRedact(e=[]){let n=new Set;for(let r of this.knownSecrets)r&&r.length>=8&&n.add(r);if(this.cookie&&this.cookie.length>=8){n.add(this.cookie);let r=this.cookie.split("=")[1];r&&r.length>=8&&n.add(r)}if(this.tokenUrl)try{let s=new URL(this.tokenUrl).searchParams.get("token");s&&s.length>=8&&n.add(s)}catch{}for(let r of e)if(r&&r.length>=8&&(n.add(r),r.includes("="))){let s=r.split("=")[1];s&&s.length>=8&&n.add(s)}return Array.from(n)}static forTesting(e,n){let r=e,s=n?.isV2??!1,i=n?.cookie;try{let o=new URL(e);o.searchParams.has("token")&&(s=!0,r=o.origin)}catch{}return new t(r,void 0,i,s,e)}static async fromBootUrl(e,n,r){let s=H1(e),i=s.searchParams.has("token"),o;if(i)for(let a=0;a<5;a++){if(r?.aborted)throw new Error("dsh web boot aborted");try{let c=(await fetch(e,{redirect:"manual",signal:r})).headers.get("set-cookie");if(c){o=c.split(";")[0];break}}catch(l){if(r?.aborted)throw l;await new Promise(c=>setTimeout(c,100))}}return new t(s.origin,n,o,i,e)}async ensureCookie(e=!1){return this.tokenUrl?this.cookie&&!e?this.cookie:(this.cookieExchangePromise||(this.cookieExchangePromise=(async()=>{for(let n=0;n<5;n++)try{let r=AbortSignal.timeout(1e4),i=(await fetch(this.tokenUrl,{redirect:"manual",signal:r})).headers.get("set-cookie");if(i)return this.cookie=i.split(";")[0],this.recordSecret(this.cookie),this.cookie}catch{await new Promise(r=>setTimeout(r,100))}return this.cookie})().finally(()=>{this.cookieExchangePromise=void 0})),this.cookieExchangePromise):this.cookie}async rpc(e,n){this.isV2&&await this.ensureCookie();let r=this.cookie,s=r?[r]:[],i=`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,o=this.isV2?e.includes("/")?e:e.replace(/\./g,"/"):e.includes(".")?e:e.replace(/\//g,"."),a=n;if(this.isV2){let m=n;if(o==="session/prompt"&&m&&typeof m=="object"){let p=m;p.requestId||(m={...p,requestId:j1()})}m&&typeof m=="object"&&"args"in m?a=m:a={args:{request:m}}}let l={"content-type":"application/json"};this.cookie&&(l.cookie=this.cookie);let c;try{c=await fetch(`${this.baseUrl}/api/${o}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:i,method:o,payload:a}),redirect:"manual"})}catch(m){throw new nr(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new nr(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s));if((c.status===401||c.status===403)&&this.isV2&&this.tokenUrl){let m=await this.ensureCookie(!0);if(m&&m!==l.cookie){l.cookie=m,s.push(m);try{c=await fetch(`${this.baseUrl}/api/${o}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:i,method:o,payload:a}),redirect:"manual"})}catch(p){throw new nr(e,`transport error: ${p instanceof Error?p.message:String(p)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new nr(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s))}}let u;try{u=await c.json()}catch{u=void 0}if(!c.ok)throw new nr(e,u??c.statusText,this.getSecretsToRedact(s));let d=u&&typeof u=="object"?u.result:void 0;if(!d||typeof d!="object"||typeof d.ok!="boolean")throw new nr(e,"malformed response: HTTP 200 but body is not a well-formed {result:{ok,\u2026}} envelope",this.getSecretsToRedact(s));if(d.ok===!1)throw new nr(e,d.error??d,this.getSecretsToRedact(s));return"value"in d?d.value:void 0}get alive(){return this.child!==void 0&&this.child.exitCode===null&&this.child.signalCode===null}shutdown(){this.child!==void 0&&this.alive&&Hk(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=$1("dsh",["web","--no-open","--port","0"],{env:e,stdio:["ignore","pipe","pipe"]}),i=!1,o=!1,a="",l="",c="",u=new AbortController,d=p=>{i||(i=!0,clearTimeout(m),u.abort(),Hk(s,2e3),r(p))},m=setTimeout(()=>{let p=[l?`stdout:
2297
+ `):"":""}function _k(t){return t.model||t.message?.model}function c1(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:bk(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function ba(t,e=!1){if(t!==void 0){if(typeof t=="string")return t;try{return JSON.stringify(t,null,e?2:void 0)}catch{return String(t)}}}function u1(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return ba(e.output??e.error??t)}return ba(t)}function bk(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function vk(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:ba(t.args,!0),toolInputData:Vt(t.args),toolCallId:t.id,model:n}}var Iu,wk=M(()=>{"use strict";We();Iu=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||Br(ae,".qwen")}async discoverSessions(){let e=Br(this.baseDir,"projects"),n;try{n=await Ru(e)}catch{return[]}let r=[];for(let s of n){let i=Br(e,s,"chats"),o;try{o=await Ru(i)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=Br(i,a);try{let u=await this.extractSummary(c,l);u&&r.push(u)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await $e(e),i="(unknown)",o,a,l,c,u=0;for await(let d of Ae(e)){if(r=!0,d.cwd&&(i=d.cwd,d.version&&(a=d.version)),d.type==="system"&&d.cwd&&(i=d.cwd,d.version&&(a=d.version),d.model&&(o=d.model)),gk(d)){let m=yk(d).trim();m&&(l||(l=Q(m,80)),c=Q(m,80),u++)}if(hk(d)){let m=_k(d);m&&(o=m),u+=c1(d)}}return r?{provider:"qwen",sessionId:n,cwd:i,createdAt:s.createdAt,modifiedAt:s.modifiedAt,model:o,cliVersion:a,startCommand:"qwen",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e}:null}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=fk(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await $e(e),s="(unknown)",i,o,a,l,c,u,d=[],m=o1();for await(let p of Ae(e)){if(a1(m,p.usageMetadata),p.cwd&&(s=p.cwd,p.version&&(o=p.version),p.gitBranch&&(a=p.gitBranch)),p.type==="system"&&p.cwd&&(s=p.cwd,p.version&&(o=p.version),p.model&&(i=p.model),p.gitBranch&&(a=p.gitBranch)),!p.message)continue;let f=p.message,g=p.timestamp?new Date(p.timestamp):r.modifiedAt;if(p.type==="tool_result"){let h=bk(p).filter(y=>y.functionResponse!==void 0);h.length===0&&p.toolCallResult?.callId&&d.push({role:"tool_result",timestamp:g,content:ba(p.toolCallResult.resultDisplay??p.toolCallResult.error??p.toolCallResult.status)??"tool result",toolCallId:p.toolCallResult.callId});for(let y of h){let b=y.functionResponse,_=u1(b.response),v=ba(p.toolCallResult?.resultDisplay);d.push({role:"tool_result",timestamp:g,content:v??_??p.toolCallResult?.status??"tool result",toolName:b.name,toolCallId:p.toolCallResult?.callId??b.id,..._!==void 0?{toolDetailedContent:_}:{}})}}else if(gk(p)){let h=yk(p);h.trim()&&(c||(c=Q(h.trim(),80)),u=Q(h.trim(),80)),d.push({role:"user",timestamp:g,content:h})}else if(hk(p)){let h=_k(p);if(h&&(i=h),Array.isArray(f.content))for(let y of f.content)y.type==="text"&&y.text?d.push({role:"assistant",timestamp:g,content:y.text,model:h}):y.type==="thinking"&&y.thinking?d.push({role:"thinking",timestamp:g,content:y.thinking}):y.functionCall&&d.push(vk(y.functionCall,g,h));else if(typeof f.content=="string")d.push({role:"assistant",timestamp:g,content:f.content,model:h});else if(Array.isArray(f.parts))for(let y of f.parts)if(y.thought||y.type==="thinking"){let b=y.thinking||y.text;b&&d.push({role:"thinking",timestamp:g,content:b})}else y.functionCall?d.push(vk(y.functionCall,g,h)):y.text&&d.push({role:"assistant",timestamp:g,content:y.text,model:h})}}return{provider:"qwen",sessionId:n,slug:l,cwd:s,createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:i,cliVersion:o,gitBranch:a,startCommand:"qwen",firstUserMessage:c,lastUserMessage:u,messageCount:d.filter(p=>p.role==="user"||p.role==="assistant").length,filePath:e,...l1(m),messages:d}}async resolveSessionPath(e){let n=Br(this.baseDir,"projects");try{let r=await Ru(n),s=[];for(let i of r){let o=Br(n,i,"chats",`${e}.jsonl`);try{return await s1(o,{flag:"r"}),o}catch{continue}}for(let i of r){let o=Br(n,i,"chats"),a;try{a=await Ru(o)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;fk(l,".jsonl").startsWith(e)&&s.push(Br(o,l))}}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{return await i1(n),!0}catch{return!1}}}});function Ag(t){return new xg(t)}var xg,Cg=M(()=>{"use strict";wk();at();tr();Qe();xg=class extends be{constructor(e){super({provider:new Iu(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",ce,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:fu})}openSession(e){return gu({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as Ek,readFile as Tk,rm as Sk,stat as kk}from"node:fs/promises";import{basename as Ng,join as In}from"node:path";import{fileURLToPath as d1}from"node:url";async function m1(t){let e=await Promise.all(t.map(n=>$e(n)));return{createdAt:new Date(Math.min(...e.map(n=>n.createdAt.getTime()))),modifiedAt:new Date(Math.max(...e.map(n=>n.modifiedAt.getTime())))}}function p1(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function Rk(t){return t.type==="USER_INPUT"}function Ik(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function f1(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function xk(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function Ak(t){if(!t)return;let e=/Model Selection` from [^\n]+? to ([^\n]+)/.exec(t);if(e)return e[1].replace(/\. No need\b[\s\S]*$/,"").replace(/\. If reporting\b[\s\S]*$/,"").replace(/\.\s*$/,"").trim()}function g1(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function h1(t){for await(let e of Ae(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let i=y1(s);if(i)return i}let r=_1(e.content);if(r)return r}return null}function y1(t){if(!t||typeof t!="object"||Array.isArray(t))return null;let e=t,n=e.Cwd??e.cwd??e.DirectoryPath;return typeof n!="string"?null:n.replace(/^"|"$/g,"")}function _1(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function v1(t,e){if(t.status!=="RUNNING"||!t.content)return;let n=/task id:\s*([^/\s]+)\/(task-(\d+))\b/.exec(t.content);if(!(!n||n[1]!==e)&&!(t.step_index===void 0||Number(n[3])!==t.step_index))return n[2]}function b1(t,e){let n=new Set;for(let r of e){let s=w1(t,n,r);if(!s)continue;n.add(s);let i=r.event.step_index===void 0?void 0:`agy-step-${r.event.step_index}`;s.message.toolCallId=i,s.message.backgroundTaskId=r.message.backgroundTaskId,r.message.toolName=s.name,r.message.toolCallId=i}}function w1(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:k1(n.event.content);if(r!==void 0)return Ck(t.filter(i=>!e.has(i)&&R1(i)===r),n.event.step_index);let s=S1(n.event);if(s!==void 0)return Ck(t.filter(i=>!e.has(i)&&E1(i.name,n.event.type)&&Ok(T1(i))===s),n.event.step_index)}function Ck(t,e){if(t.length===0)return;if(t.length===1)return t[0];if(e===void 0)return;let n=t.map(r=>({call:r,distance:r.stepIndex===void 0?Number.POSITIVE_INFINITY:Math.abs(e-r.stepIndex)})).sort((r,s)=>r.distance-s.distance);return n[0].distance<n[1].distance?n[0].call:void 0}function E1(t,e){return e==="VIEW_FILE"?t==="view_file":e!=="CODE_ACTION"?!1:t==="write_to_file"||t==="replace_file_content"||t==="multi_replace_file_content"}function T1(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function S1(t){if(!t.content)return;let e;return t.type==="VIEW_FILE"?e=/File Path:\s*`?([^`\n]+)`?/.exec(t.content)?.[1]:t.type==="CODE_ACTION"&&(e=/Created file\s+(.+?)\s+with requested content/.exec(t.content)?.[1]??/changes were made by .*? tool to:\s*(.+?)\.\s*(?:If relevant|$)/s.exec(t.content)?.[1]),Ok(e)}function Ok(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return d1(e)}catch{return}}function k1(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function R1(t){if(t.name==="run_command"){let e=t.input?.CommandLine;return typeof e=="string"?e:void 0}if(t.name==="schedule"){let e=t.input?.DurationSeconds,n=t.input?.Prompt;return typeof e!="string"&&typeof e!="number"||typeof n!="string"?void 0:`Timer: ${e}s, Prompt: ${n}`}}function Nk(t){if(t.endsWith(".db"))return Ng(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var xu,Lk=M(()=>{"use strict";We();xu=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||In(ae,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:In(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=In(this.baseDir,"conversations"),n;try{n=await Ek(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let i=Ng(s,".db");try{let o=await this.extractSummary(i);o&&r.push(o)}catch{}}return r}conversationPath(e){return In(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return In(this.baseDir,"brain",e,".system_generated","logs",n?"transcript_full.jsonl":"transcript.jsonl")}async existingTranscriptPath(e){for(let n of[this.transcriptPath(e,!0),this.transcriptPath(e,!1)])try{return await kk(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,i=await m1([n,r].filter(Boolean)),o=await this.resolveCwd(e,r),a,l,c,u=0;if(r)for await(let d of Ae(r)){let m=Ak(d.content);if(m&&(a=m),Rk(d)){let p=xk(d.content).trim();p&&(l||(l=Q(p,80)),c=Q(p,80)),u++}else Ik(d)&&d.content&&u++}return{provider:"agy",sessionId:e,cwd:o,createdAt:i.createdAt,modifiedAt:i.modifiedAt,model:a,startCommand:"agy",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:s,filePaths:r?[n,r]:[n]}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=Nk(n);if(!r)return null;let s=await this.extractSummary(r);if(!s)return null;let i=await this.existingTranscriptPath(r),o=[],a=s.model,l=s.firstUserMessage,c=s.lastUserMessage,u=[],d=[];if(i)for await(let m of Ae(i)){let p=p1(m.created_at,s.modifiedAt),f=Ak(m.content);if(f&&(a=f),Rk(m)){let g=xk(m.content),h=g.trim();h&&(l||(l=Q(h,80)),c=Q(h,80)),o.push({role:"user",timestamp:p,content:g});continue}if(Array.isArray(m.tool_calls))for(let g of m.tool_calls){let h=g.name||"tool",y=g1(g.args),b=Vt(g.args),_={role:"tool_use",timestamp:p,content:y,toolName:h,toolInput:y,toolInputData:b};o.push(_),u.push({name:h,stepIndex:m.step_index,input:b,message:_})}if(Ik(m)&&m.content)o.push({role:"assistant",timestamp:p,content:m.content,model:a});else if(f1(m)&&m.content){let g=v1(m,r),h=g===void 0?null:await this.readTaskLog(r,g),y={role:"tool_result",timestamp:h?.modifiedAt??p,content:m.content,toolName:m.type?.toLowerCase(),backgroundTaskId:g,...h===null?{}:{toolDetailedContent:h.content}};o.push(y),d.push({event:m,message:y})}m.thinking&&o.push({role:"thinking",timestamp:p,content:m.thinking})}return b1(u,d),{...s,model:a,firstUserMessage:l,lastUserMessage:c,messageCount:o.filter(m=>m.role==="user"||m.role==="assistant").length,messages:o}}async resolveSessionPath(e){let n=this.conversationPath(e);try{return await kk(n),n}catch{}let r=In(this.baseDir,"conversations");try{let s=[];for(let i of await Ek(r)){if(!i.endsWith(".db"))continue;Ng(i,".db").startsWith(e)&&s.push(In(r,i))}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;let r=Nk(n);return r?(await Sk(this.conversationPath(r),{force:!0}),await Sk(In(this.baseDir,"brain",r),{recursive:!0,force:!0}),!0):!1}async resolveCwd(e,n){let r=await this.cwdFromLastConversationCache(e);if(r)return r;if(n){let s=await h1(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=In(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await Tk(n,"utf8"));for(let[s,i]of Object.entries(r))if(i===e)return s}catch{}return null}async readTaskLog(e,n){if(!/^task-\d+$/.test(n))return null;let r=In(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,i]=await Promise.all([Tk(r,"utf8"),$e(r)]);return{content:s,modifiedAt:i.modifiedAt}}catch{return null}}}});import{spawn as I1}from"node:child_process";import{StringDecoder as Mk}from"node:string_decoder";function Au(t){return async(e,n)=>{let r=Date.now(),s=t.buildArgs(e,n);t.assertArgs?.(s,n),n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot started (no streaming events)`});let{stdout:i}=await x1(t.label,n.binary,s,{cwd:n.cwd,env:Ue(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:i.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function x1(t,e,n,r){return new Promise((s,i)=>{if(r.signal?.aborted){i(new Error(`${t} turn aborted`));return}let o;try{o=I1(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(m){i(m);return}let a="",l="",c=new Mk("utf8"),u=new Mk("utf8");o.stdout?.on("data",m=>{a+=c.write(m)}),o.stderr?.on("data",m=>{l+=u.write(m)});let d=()=>{o.kill("SIGTERM"),i(new Error(`${t} turn aborted`))};o.on("error",m=>{r.signal?.removeEventListener("abort",d),i(m)}),o.on("close",(m,p)=>{if(r.signal?.removeEventListener("abort",d),a+=c.end(),l+=u.end(),m===0){s({stdout:a,stderr:l});return}let f=p?`signal ${p}`:`exit code ${m}`,g=l.trim()||a.trim();i(new Error(Ei(`${t} failed (${f})`,g?Oe(g,{provider:t}):"")))}),r.signal?.aborted?d():r.signal?.addEventListener("abort",d,{once:!0})})}var Og=M(()=>{"use strict";ln();an()});import{basename as A1}from"node:path";import{randomUUID as C1}from"node:crypto";function Mg(t){return new Lg(t)}function O1(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Lg,N1,Pg=M(()=>{"use strict";Lk();at();Qe();kn();Og();Lg=class extends be{constructor(e){super({provider:new xu(e),protocol:{transport:"print",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append",leaderSetupHint:"Antigravity uses one-shot print turns; no streaming events are available."},binary:"agy",seedArgs:["-p",ce,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:N1})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||A1(s)!==`${n.sessionId}.db`)throw new Error(`agy cannot resume missing conversation "${n.sessionId}"`)}let r=await super.sendTurn(e,n);return n.permissionMode==="plan"?{...r,warnings:[...r.warnings??[],"agy does not enforce plan mode; this turn used full permissions"]}:r}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}async seed(e,n){let r=C1(),s=`[lmctl-seed:${r}]`,i=await super.seed(e,{...n,prompt:tu({flightToken:r,prompt:n?.prompt})});if(!i.success&&(i.errorCode==="ENOENT"||i.errorCode==="ABORT_ERR"))return i;let o=(await this.provider.discoverSessions()).filter(a=>a.firstUserMessage?.startsWith(s));if(i.success&&o.length===1)return{...i,sessionId:o[0].sessionId};for(let a of o)await this.provider.deleteSession(a.sessionId);return{...i,success:!1,error:i.error??`agy seed created ${o.length} identifiable sessions; expected one`}}manualSeedHint(e){return{launchCommand:`cd ${e} && agy --dangerously-skip-permissions`,postLaunchNote:"Send the lmctl seed instruction, wait for the conversation to write, then exit.",lsCommand:`lmctl ls --provider agy --sessiondir ${e}`}}},N1=Au({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",O1(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>qe("agy",t,e.permissionMode??"yolo")})});import{existsSync as wa,readdirSync as L1,statSync as Pk}from"node:fs";import{readdir as Dg,rm as M1}from"node:fs/promises";import Dk,{join as xn}from"node:path";function P1(t){if(t.length===0)throw new Error("cannot encode an empty project path");let e="",n=!1;for(let s=0;s<t.length;s++){let i=t.charCodeAt(s),o=String.fromCharCode(i);o==="/"||o==="\\"||o===":"?(n||(e+="-"),n=!0):o!=="~"&&/^[A-Za-z0-9._-]$/.test(o)?(e+=o,n=!1):(e+="~"+i.toString(16).toUpperCase().padStart(4,"0"),n=!1)}return`--${(e.replace(/^-+/,"")||"root").slice(0,251)}--`}function D1(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Li(t,e){let n=e??(process.platform==="win32"?Dk.win32:Dk.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!wa(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let i=L1(r),o=[];for(let a of i){let l=/^session(?:\.v(\d+))?\.jsonl\.zstd$/.exec(a);if(l){let c=l[1]?parseInt(l[1],10):0;if(Number.isSafeInteger(c))try{let u=n.join(r,a);Pk(u).isFile()&&o.push({name:a,version:c})}catch{}}}if(o.length>0)return o.sort((a,l)=>l.version-a.version),n.join(r,o[0].name)}catch{}try{if(wa(t)&&Pk(t).isFile())return t}catch{}return n.join(r,s)}function Fg(t){if(typeof t=="string")return t;if(!Array.isArray(t))return"";let e=[];for(let n of t)n&&typeof n=="object"&&n.type==="text"&&typeof n.text=="string"&&e.push(n.text);return e.join("")}function F1(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)n&&typeof n=="object"&&n.type==="reasoning"&&typeof n.text=="string"&&e.push(n.text);return e}function Fk(t){let e=[];for(let n of t){let r=n.data??{},s=n.time?new Date(n.time):new Date(0);if(n.type==="user/message"){let i=r;if(i.source?.kind!==void 0&&i.source.kind!=="user")continue;e.push({role:"user",timestamp:s,content:Fg(i.content)})}else if(n.type==="assistant/message"){let i=r.message;for(let o of F1(i?.content))e.push({role:"thinking",timestamp:s,content:o});e.push({role:"assistant",timestamp:s,content:Fg(i?.content),model:i?.source?.model})}else if(n.type==="tool/call"){let i=r,o;if(typeof i.arguments=="string")try{o=JSON.parse(i.arguments)}catch{}else i.arguments&&typeof i.arguments=="object"&&(o=i.arguments);e.push({role:"tool_use",timestamp:s,content:typeof i.arguments=="string"?i.arguments:JSON.stringify(i.arguments??{}),toolName:i.name,toolCallId:i.callId,toolInputData:o})}else if(n.type==="tool/result"){let i=r,a=(Array.isArray(i.message?.content)?i.message.content:[])[0];e.push({role:"tool_result",timestamp:s,content:Fg(a?.content??i.message?.content),toolCallId:a?.toolCallId??i.message?.source?.callId})}}return e}function $1(t){for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type==="turn/end")return n.data?.reason?.kind==="completed"?"complete":"aborted";if(n.type==="turn/start")return"in_progress"}}function $k(t,e,n){let r=t.find(p=>p.type==="session");if(!r)return null;let s=r,i=r.data,o=s.id??i?.id;if(!o)return null;let a;for(let p of t)if(p.type==="request/header"){let f=p.data?.header;f?.config?.model&&(a=f.config.model)}let l=t.map(p=>p.time).filter(p=>typeof p=="number"),c=s.createdAt??i?.createdAt,u=c?new Date(c):new Date(0),d=l.length>0?new Date(Math.max(...l)):u,m=n.filter(p=>p.role==="user");return{provider:"dsh",sessionId:o,cwd:s.cwd??i?.cwd??"",createdAt:u,modifiedAt:d,model:a,firstUserMessage:m[0]?.content,lastUserMessage:m.at(-1)?.content,messageCount:n.filter(p=>p.role==="user"||p.role==="assistant").length,filePath:e,...j1(t)}}function j1(t){let e=new Map;for(let o of t){let a=o.data?.turn??null,l=e.get(a)??[];l.push(o),e.set(a,l)}let n=[],r=[];for(let o of e.values()){let a=new Ii("",-1,new Set);a.update(o);let l=a.usage();l&&(n.push(l),r.push(a.lastUsage()))}if(!n.length)return{};let s=o=>{if(n.some(l=>l.invalidCounters||l[o]===null))return;let a=n.reduce((l,c)=>l+c[o],0);return Number.isSafeInteger(a)?a:void 0},i=r.at(-1);return{totalInputTokens:s("inputUncached"),totalCachedInputTokens:s("cacheRead"),totalOutputTokens:s("output"),totalReasoningOutputTokens:s("reasoning"),lastInputTokens:i.inputUncached!==null&&i.cacheRead!==null?i.inputUncached+i.cacheRead:void 0,lastTokenUsage:{totalTokens:i.inputUncached!==null&&i.cacheRead!==null&&i.output!==null?i.inputUncached+i.cacheRead+i.output:void 0,inputTokens:i.inputUncached??void 0,cachedInputTokens:i.cacheRead??void 0,outputTokens:i.output??void 0,reasoningOutputTokens:i.reasoning??void 0}}}var Cu,jk=M(()=>{"use strict";ru();We();Ul();Cu=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||xn(ae,".dsh");this.sessionsDir=xn(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Dg(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Dg(xn(this.sessionsDir,r))}catch{continue}for(let i of s)if(i.startsWith("session-"))try{let o=await this.readSummary(r,i);o&&e.push(o)}catch{}}return e}async loadSession(e){let n=await this.findSessionDir(e);if(!n)return null;let r=await this.readRecords(n.cwdDir,n.sessionDir);if(r.length===0)return null;let s=Fk(r),i=$k(r,n.filePath,s);return i?{...i,turnStatus:$1(r),messages:s}:null}async resolveSessionPath(e){return(await this.findSessionDir(e))?.filePath??null}async deleteSession(e){let n=await this.findSessionDir(e);return n?(await M1(xn(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=P1(e),s=D1(e),i=r,o=xn(this.sessionsDir,r,n),a=xn(this.sessionsDir,s,n);!wa(o)&&wa(a)&&(i=s);let l=xn(this.sessionsDir,i,n);return Li(l)}async findSessionDir(e){let n;try{n=await Dg(this.sessionsDir)}catch{return null}for(let r of n){let s=e,i=xn(this.sessionsDir,r,s);try{let o=Li(i);if(wa(o))return{cwdDir:r,sessionDir:s,filePath:o}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=xn(this.sessionsDir,e,n),i=Li(s),o=await r(i),a=jl(o),l=[];for(let c of a.split(`
2298
+ `))if(c.trim())try{let u=JSON.parse(c);if(u.type?.endsWith("-chunks")||u.type==="assistant/chunk"&&u.data?.chunk?.type!=="usage")continue;l.push(u)}catch{}return l}async readSummary(e,n){let r=xn(this.sessionsDir,e,n),s=Li(r),i=await this.readRecords(e,n);return i.length===0?null:$k(i,s,Fk(i))}}});import{spawn as U1}from"node:child_process";import{randomUUID as H1}from"node:crypto";function $g(t,e=[]){if(t==null)return t;if(typeof t=="string"){let n=t;for(let r of e)r&&typeof r=="string"&&r.length>=8&&n.includes(r)&&(n=n.replaceAll(r,"[REDACTED]"));return n=n.replace(/(?:sk-|dsh-)[A-Za-z0-9_\-\.]+/gi,"[REDACTED]"),n=n.replace(/(?:token=)[A-Za-z0-9_\-\.]+/gi,"token=[REDACTED]"),n=n.replace(/bearer\s+[A-Za-z0-9_\-\.]+/gi,"Bearer [REDACTED]"),n}if(Array.isArray(t))return t.map(n=>$g(n,e));if(typeof t=="object"){let n={};for(let[r,s]of Object.entries(t))/api[_-]?key|secret|token|password|auth|authorization|credential|cookie/i.test(r)?n[r]="[REDACTED]":n[r]=$g(s,e);return n}return t}function W1(t){let e;try{e=new URL(t)}catch{throw new Error("invalid dsh boot URL: malformed URL")}if(e.protocol!=="http:")throw new Error(`invalid dsh boot URL scheme "${e.protocol}": must be http:`);if(e.username||e.password)throw new Error("invalid dsh boot URL: userinfo credentials are not allowed");let n=e.hostname;if(!(n==="127.0.0.1"||n==="localhost"||n==="::1"||n==="[::1]"))throw new Error(`invalid dsh boot URL host "${n}": loopback host (127.0.0.1 or localhost) required`);return e}function Hk(t,e=2e3){if(!t||t.exitCode!==null||t.signalCode!==null)return;try{t.kill("SIGTERM")}catch{}let n,r=()=>{n!==void 0&&(clearTimeout(n),n=void 0)};if(t.once("exit",r),t.exitCode!==null||t.signalCode!==null){r();return}n=setTimeout(()=>{n=void 0;try{t.exitCode===null&&t.signalCode===null&&t.kill("SIGKILL")}catch{}},e),n.unref()}async function Nu(t,e=n=>jg.spawn(n)){if(Wr){let n=await Wr.catch(()=>{});if(n?.alive)return n;Wr=void 0}return Wr=e(t),Wr}async function Ea(){if(!Wr)return;(await Wr.catch(()=>{}))?.shutdown(),Wr=void 0}var B1,Uk,nr,jg,Wr,Bk=M(()=>{"use strict";an();B1=/dsh web:\s*(https?:\/\/\S+)/,Uk=2e4;nr=class t extends Error{method;detail;constructor(e,n,r=[]){let s=$g(n,r),i=typeof s=="string"?s:JSON.stringify(s);super(`dsh RPC ${e} failed: ${i}`),this.name="DshRpcCallError",this.method=e,this.detail=s,Object.setPrototypeOf(this,t.prototype)}};jg=class t{constructor(e,n,r,s=!1,i){this.baseUrl=e;this.child=n;this.cookie=r;this.isV2=s;this.tokenUrl=i;if(this.cookie&&this.recordSecret(this.cookie),this.tokenUrl){this.recordSecret(this.tokenUrl);try{let a=new URL(this.tokenUrl).searchParams.get("token");a&&this.recordSecret(a)}catch{}}}static MAX_RETAINED_SECRETS=8;cookieExchangePromise;knownSecrets=[];recordSecret(e){if(!e||typeof e!="string"||e.length<8)return;let n=r=>{if(r.length<8)return;let s=this.knownSecrets.indexOf(r);for(s!==-1&&this.knownSecrets.splice(s,1),this.knownSecrets.push(r);this.knownSecrets.length>t.MAX_RETAINED_SECRETS;)this.knownSecrets.shift()};if(n(e),e.includes("=")){let r=e.split("=")[1];r&&r.length>=8&&n(r)}}getSecretsToRedact(e=[]){let n=new Set;for(let r of this.knownSecrets)r&&r.length>=8&&n.add(r);if(this.cookie&&this.cookie.length>=8){n.add(this.cookie);let r=this.cookie.split("=")[1];r&&r.length>=8&&n.add(r)}if(this.tokenUrl)try{let s=new URL(this.tokenUrl).searchParams.get("token");s&&s.length>=8&&n.add(s)}catch{}for(let r of e)if(r&&r.length>=8&&(n.add(r),r.includes("="))){let s=r.split("=")[1];s&&s.length>=8&&n.add(s)}return Array.from(n)}static forTesting(e,n){let r=e,s=n?.isV2??!1,i=n?.cookie;try{let o=new URL(e);o.searchParams.has("token")&&(s=!0,r=o.origin)}catch{}return new t(r,void 0,i,s,e)}static async fromBootUrl(e,n,r){let s=W1(e),i=s.searchParams.has("token"),o;if(i)for(let a=0;a<5;a++){if(r?.aborted)throw new Error("dsh web boot aborted");try{let c=(await fetch(e,{redirect:"manual",signal:r})).headers.get("set-cookie");if(c){o=c.split(";")[0];break}}catch(l){if(r?.aborted)throw l;await new Promise(c=>setTimeout(c,100))}}return new t(s.origin,n,o,i,e)}async ensureCookie(e=!1){return this.tokenUrl?this.cookie&&!e?this.cookie:(this.cookieExchangePromise||(this.cookieExchangePromise=(async()=>{for(let n=0;n<5;n++)try{let r=AbortSignal.timeout(1e4),i=(await fetch(this.tokenUrl,{redirect:"manual",signal:r})).headers.get("set-cookie");if(i)return this.cookie=i.split(";")[0],this.recordSecret(this.cookie),this.cookie}catch{await new Promise(r=>setTimeout(r,100))}return this.cookie})().finally(()=>{this.cookieExchangePromise=void 0})),this.cookieExchangePromise):this.cookie}async rpc(e,n){this.isV2&&await this.ensureCookie();let r=this.cookie,s=r?[r]:[],i=`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,o=this.isV2?e.includes("/")?e:e.replace(/\./g,"/"):e.includes(".")?e:e.replace(/\//g,"."),a=n;if(this.isV2){let m=n;if(o==="session/prompt"&&m&&typeof m=="object"){let p=m;p.requestId||(m={...p,requestId:H1()})}m&&typeof m=="object"&&"args"in m?a=m:a={args:{request:m}}}let l={"content-type":"application/json"};this.cookie&&(l.cookie=this.cookie);let c;try{c=await fetch(`${this.baseUrl}/api/${o}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:i,method:o,payload:a}),redirect:"manual"})}catch(m){throw new nr(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new nr(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s));if((c.status===401||c.status===403)&&this.isV2&&this.tokenUrl){let m=await this.ensureCookie(!0);if(m&&m!==l.cookie){l.cookie=m,s.push(m);try{c=await fetch(`${this.baseUrl}/api/${o}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:i,method:o,payload:a}),redirect:"manual"})}catch(p){throw new nr(e,`transport error: ${p instanceof Error?p.message:String(p)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new nr(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s))}}let u;try{u=await c.json()}catch{u=void 0}if(!c.ok)throw new nr(e,u??c.statusText,this.getSecretsToRedact(s));let d=u&&typeof u=="object"?u.result:void 0;if(!d||typeof d!="object"||typeof d.ok!="boolean")throw new nr(e,"malformed response: HTTP 200 but body is not a well-formed {result:{ok,\u2026}} envelope",this.getSecretsToRedact(s));if(d.ok===!1)throw new nr(e,d.error??d,this.getSecretsToRedact(s));return"value"in d?d.value:void 0}get alive(){return this.child!==void 0&&this.child.exitCode===null&&this.child.signalCode===null}shutdown(){this.child!==void 0&&this.alive&&Hk(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=U1("dsh",["web","--no-open","--port","0"],{env:e,stdio:["ignore","pipe","pipe"]}),i=!1,o=!1,a="",l="",c="",u=new AbortController,d=p=>{i||(i=!0,clearTimeout(m),u.abort(),Hk(s,2e3),r(p))},m=setTimeout(()=>{let p=[l?`stdout:
2299
2299
  ${l}`:"",c?`stderr:
2300
2300
  ${c}`:""].filter(Boolean).join(`
2301
2301
  `);d(new Error(`dsh web sidecar did not report a boot URL within ${Uk}ms `+(p?`
2302
2302
  ${Oe(p,{provider:"dsh"})}`:"(no output captured)")))},Uk);s.stdout?.on("data",p=>{let f=p.toString();if(l+=f,a+=f,i||o)return;let g=a.split(`
2303
- `);a=g.pop()??"";for(let h of g){let y=U1.exec(h);if(y){o=!0,t.fromBootUrl(y[1],s,u.signal).then(b=>{i||(i=!0,clearTimeout(m),n(b))},b=>{d(b instanceof Error?b:new Error(String(b)))});return}}}),s.stderr?.on("data",p=>{c+=p.toString()}),s.on("error",p=>{d(p)}),s.on("exit",(p,f)=>{let g=f?`signal ${f}`:`exit code ${p}`;d(new Error(Ei(`dsh web exited before reporting a boot URL (${g})`,c.trim()?Oe(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as Wk}from"node:crypto";import{existsSync as qk,statSync as B1}from"node:fs";import{readFile as W1,mkdir as q1}from"node:fs/promises";function qg(t){return new Wg(t)}function Bg(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function G1(t){let e=t?.kind??"unknown",n=t?.error?.message;return n?`dsh turn ended with reason=${e}: ${n}`:`dsh turn ended with reason=${e} and no assistant text`}function Ou(t){return t instanceof Error?t.message:String(t)}async function Xk(t,e){let n;try{n=await W1(t)}catch{return e?.(),[]}e&&ko(n).reduce((i,o)=>i+o.length,0)!==n.length&&e?.();let r=jl(n),s=[];for(let i of r.split(`
2304
- `))if(i.trim())try{let o=JSON.parse(i);o!==null&&typeof o=="object"&&!Array.isArray(o)&&s.push(o)}catch{e?.()}return s}function J1(t){let n=t.data?.message?.content;if(typeof n=="string")return n;if(!Array.isArray(n))return"";let r=[];for(let s of n)s&&typeof s=="object"&&s.type==="text"&&typeof s.text=="string"&&r.push(s.text);return r.join("")}function Lu(t,e){return Li(t,e)}var Ug,X1,Hg,Wg,Xg=M(()=>{"use strict";ru();$r();at();jk();Ul();Bk();Qe();kn();Ug=new Map,X1=500,Hg=8*60*60*1e3;Wg=class extends be{dshProvider;usageSeen=new Set;constructor(e){let n=new Cu(e);super({provider:n,protocol:{transport:"dsh-rpc",perTurnCancellation:"unsupported",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append",leaderSetupHint:"dsh has no in-session leader-injection mechanism; the seed prompt carries lmctl's leader instructions."},binary:"dsh",seedArgs:[],resumeTemplate:"dsh web --no-open --port 0 # continuity is via the RPC sidecar, not a resume flag",startTemplate:"dsh web --no-open --port 0",transport:(r,s)=>this.dshPromptTurn(r,s)}),this.dshProvider=n}manualSeedHint(e){return{launchCommand:`cd ${e} && dsh web`,postLaunchNote:"dsh has no interactive terminal session to seed into \u2014 continuity lives in the web profile's session store, not a TTY. Boot the sidecar with the command above, open the printed http:// URL, and start a session rooted at this directory in the web UI; lmctl's managed sidecar can then cold-resume it by id (cross-profile session sharing is verified). Send lmctl's seed instruction there, wait for the reply, then find the new session id with the ls command below and register it manually.",lsCommand:`lmctl ls --provider dsh --sessiondir ${e}`}}async seed(e,n){await q1(e,{recursive:!0});let r=`session-${Wk()}`,s=Bg(n?.env??process.env);qe("dsh",[],"yolo");try{let i;try{i=await Nu(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${Ou(a)}`}}try{await i.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${Ou(a)}`}}if(n?.model)try{await i.rpc("session.selectModel",{sessionId:r,provider:"deepseek-official",model:n.model})}catch(a){return{success:!1,error:`session.selectModel("${n.model}") failed: ${Ou(a)}`}}let o=n?.prompt??ce;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(i,e,r,o,Hg,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${Ou(a)}`}}}finally{await Ea()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Zn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Bg(n.env??process.env);qe("dsh",[],n.permissionMode??"yolo");let i=!n.sessionId,o=i?`session-${Wk()}`:n.sessionId,a;try{let l=await Nu(s);i&&await l.rpc("session.create",{sessionId:o,cwd:n.cwd}),n.model&&(await l.rpc("session.selectModel",{sessionId:o,provider:"deepseek-official",model:n.model}),n.onProgress?.({kind:"system",summary:`dsh model set to ${n.model}`})),n.onProgress?.({kind:"system",summary:"dsh session.prompt sent"}),a=await this.promptAndWait(l,n.cwd,o,e,n.timeoutMs??Hg,n.signal)}finally{await Ea()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:o,durationMs:Date.now()-r}}async openSession(e){let n=Bg(e.env??process.env);qe("dsh",[],e.permissionMode??"yolo");let r=await Nu(n),s=Lu(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),i=!1;try{i=qk(s)&&B1(s).isFile()}catch{i=!1}if(!i)throw await Ea(),new Error(`dsh bundle: session file does not exist for session "${e.sessionId}" (${s}) \u2014 the session must exist before a bundle can resume it`);e.model&&await r.rpc("session.selectModel",{sessionId:e.sessionId,provider:"deepseek-official",model:e.model});let o=e.sessionId,a=this,l=0,c=!1,u=null,d=!1,m=!1,p=async()=>{m||(m=!0,await Ea())};return{provider:"dsh",sessionId:o,get completedTurns(){return l},async sendTurn(f,g={}){if(c||u!==null)throw new Error("dsh bundle session is closed");if(d)throw new Error("dsh bundle session has a turn still in flight");if(g.signal?.aborted)throw new Error("Aborted");if(s=Lu(s),!qk(s))throw new Error(`dsh bundle: session file for session "${o}" disappeared mid-bundle \u2014 identity re-check failed (external re-seed?)`);d=!0;let h=Date.now();try{let y,b=a.promptAndWait(r,e.cwd,o,f,Hg,g.signal,R=>{y=R});b.catch(()=>{});let _=()=>{},v=new Promise((R,S)=>{_=()=>{(async()=>{c=!0,await p()})().finally(()=>S(Object.assign(new Error("Aborted"),{usage:y,sessionId:o})))},g.signal?.addEventListener("abort",_,{once:!0})}),E;try{E=await Promise.race([b,v])}finally{g.signal?.removeEventListener("abort",_)}return l+=1,{...E,sessionId:o,durationMs:Date.now()-h}}finally{d=!1}},close(){return u!==null||(u=(async()=>{c=!0,await p()})()),u}}}async promptAndWait(e,n,r,s,i,o,a){let l=Date.now(),c=Lu(this.dshProvider.sessionFilePath(n,r)),u=!1,d=await Xk(c,()=>{u=!0}),m=d.reduce((b,_)=>typeof _.seq=="number"&&Number.isSafeInteger(_.seq)?Math.max(b,_.seq):b,-1),p=new Ii(r,m,this.usageSeen);u&&p.invalidateOwnership();let f=JSON.stringify([c,r]),g=Ug.get(f)??new Set;if(g.size){p.invalidateOwnership();for(let b of g)b.invalidateOwnership()}g.add(p),Ug.set(f,g),d.filter(b=>b.type==="turn/start"||b.type==="turn/end").at(-1)?.type==="turn/start"&&p.invalidateOwnership();let y;try{await e.rpc("session.prompt",{sessionId:r,mode:"queue",content:[{type:"text",text:s}]});let b=i>0?Date.now()+i:1/0;for(;;){c=Lu(c);let _=await Xk(c),v=_.find(E=>E.type==="turn/end"&&(E.seq??-1)>m);if(_.length&&p.update(_,v?.seq??1/0),a?.(p.usage()),o?.aborted)throw new Error("Aborted");if(v){let E=v.data?.reason;E?.kind!=="completed"&&(y=E?.kind==="aborted"?"cancelled":"error");let R=[..._].reverse().find(N=>N.type==="assistant/message"&&(N.seq??-1)>m&&(N.seq??1/0)<=(v.seq??1/0)),S=R?J1(R):"";if(E?.kind!=="completed"&&!S)throw new Error(G1(E));p.finish();let I=p.usage();return{text:S,sessionId:r,durationMs:Date.now()-l,usage:I?{...I,...E?.kind==="completed"?{}:{outcome:E?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>b)throw new Error(`dsh turn timed out after ${i}ms waiting for turn/end`);await new Promise(E=>setTimeout(E,X1))}}catch(b){if(p.finish(),b instanceof Error){let _=p.usage();Object.assign(b,{usage:_?{..._,outcome:y}:void 0,sessionId:r})}throw b}finally{g.delete(p),g.size||Ug.delete(f)}}}});import{existsSync as V1}from"node:fs";import{join as Kk,resolve as z1}from"node:path";import{createRequire as K1}from"node:module";function Y1(){return Gg===null&&(Gg=K1(import.meta.url)("node:sqlite").DatabaseSync),Gg}function Jg(t={}){return z1(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||Kk(ae,".hermes"))}function Q1(t={}){return Kk(Jg(t),"state.db")}function Ta(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function At(t){return typeof t=="string"&&t.length>0?t:void 0}function Z1(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function Vk(t){return At(t.cwd)??At(Z1(t.model_config).cwd)??"(unknown)"}function eH(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function tH(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function zk(t){let e=t.input_tokens??0,n=t.output_tokens??0,r=t.cache_read_tokens??0,s=t.cache_write_tokens??0,i=t.reasoning_tokens??0;return(t.message_count??0)>0&&e+n+r+s+i>0?{totalInputTokens:e,totalCachedInputTokens:r,totalCacheWriteInputTokens:s,totalOutputTokens:n,totalReasoningOutputTokens:i}:{}}var Gg,Gk,Jk,Mu,Yk=M(()=>{"use strict";We();ke();Gg=null;Gk="acp";Jk=`id, source, model, model_config, started_at,
2303
+ `);a=g.pop()??"";for(let h of g){let y=B1.exec(h);if(y){o=!0,t.fromBootUrl(y[1],s,u.signal).then(b=>{i||(i=!0,clearTimeout(m),n(b))},b=>{d(b instanceof Error?b:new Error(String(b)))});return}}}),s.stderr?.on("data",p=>{c+=p.toString()}),s.on("error",p=>{d(p)}),s.on("exit",(p,f)=>{let g=f?`signal ${f}`:`exit code ${p}`;d(new Error(Ei(`dsh web exited before reporting a boot URL (${g})`,c.trim()?Oe(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as Wk}from"node:crypto";import{existsSync as qk,statSync as q1}from"node:fs";import{readFile as X1,mkdir as G1}from"node:fs/promises";function qg(t){return new Wg(t)}function Bg(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function V1(t){let e=t?.kind??"unknown",n=t?.error?.message;return n?`dsh turn ended with reason=${e}: ${n}`:`dsh turn ended with reason=${e} and no assistant text`}function Ou(t){return t instanceof Error?t.message:String(t)}async function Xk(t,e){let n;try{n=await X1(t)}catch{return e?.(),[]}e&&ko(n).reduce((i,o)=>i+o.length,0)!==n.length&&e?.();let r=jl(n),s=[];for(let i of r.split(`
2304
+ `))if(i.trim())try{let o=JSON.parse(i);o!==null&&typeof o=="object"&&!Array.isArray(o)&&s.push(o)}catch{e?.()}return s}function z1(t){let n=t.data?.message?.content;if(typeof n=="string")return n;if(!Array.isArray(n))return"";let r=[];for(let s of n)s&&typeof s=="object"&&s.type==="text"&&typeof s.text=="string"&&r.push(s.text);return r.join("")}function Lu(t,e){return Li(t,e)}var Ug,J1,Hg,Wg,Xg=M(()=>{"use strict";ru();$r();at();jk();Ul();Bk();Qe();kn();Ug=new Map,J1=500,Hg=8*60*60*1e3;Wg=class extends be{dshProvider;usageSeen=new Set;constructor(e){let n=new Cu(e);super({provider:n,protocol:{transport:"dsh-rpc",perTurnCancellation:"unsupported",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append",leaderSetupHint:"dsh has no in-session leader-injection mechanism; the seed prompt carries lmctl's leader instructions."},binary:"dsh",seedArgs:[],resumeTemplate:"dsh web --no-open --port 0 # continuity is via the RPC sidecar, not a resume flag",startTemplate:"dsh web --no-open --port 0",transport:(r,s)=>this.dshPromptTurn(r,s)}),this.dshProvider=n}manualSeedHint(e){return{launchCommand:`cd ${e} && dsh web`,postLaunchNote:"dsh has no interactive terminal session to seed into \u2014 continuity lives in the web profile's session store, not a TTY. Boot the sidecar with the command above, open the printed http:// URL, and start a session rooted at this directory in the web UI; lmctl's managed sidecar can then cold-resume it by id (cross-profile session sharing is verified). Send lmctl's seed instruction there, wait for the reply, then find the new session id with the ls command below and register it manually.",lsCommand:`lmctl ls --provider dsh --sessiondir ${e}`}}async seed(e,n){await G1(e,{recursive:!0});let r=`session-${Wk()}`,s=Bg(n?.env??process.env);qe("dsh",[],"yolo");try{let i;try{i=await Nu(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${Ou(a)}`}}try{await i.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${Ou(a)}`}}if(n?.model)try{await i.rpc("session.selectModel",{sessionId:r,provider:"deepseek-official",model:n.model})}catch(a){return{success:!1,error:`session.selectModel("${n.model}") failed: ${Ou(a)}`}}let o=n?.prompt??ce;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(i,e,r,o,Hg,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${Ou(a)}`}}}finally{await Ea()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Zn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Bg(n.env??process.env);qe("dsh",[],n.permissionMode??"yolo");let i=!n.sessionId,o=i?`session-${Wk()}`:n.sessionId,a;try{let l=await Nu(s);i&&await l.rpc("session.create",{sessionId:o,cwd:n.cwd}),n.model&&(await l.rpc("session.selectModel",{sessionId:o,provider:"deepseek-official",model:n.model}),n.onProgress?.({kind:"system",summary:`dsh model set to ${n.model}`})),n.onProgress?.({kind:"system",summary:"dsh session.prompt sent"}),a=await this.promptAndWait(l,n.cwd,o,e,n.timeoutMs??Hg,n.signal)}finally{await Ea()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:o,durationMs:Date.now()-r}}async openSession(e){let n=Bg(e.env??process.env);qe("dsh",[],e.permissionMode??"yolo");let r=await Nu(n),s=Lu(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),i=!1;try{i=qk(s)&&q1(s).isFile()}catch{i=!1}if(!i)throw await Ea(),new Error(`dsh bundle: session file does not exist for session "${e.sessionId}" (${s}) \u2014 the session must exist before a bundle can resume it`);e.model&&await r.rpc("session.selectModel",{sessionId:e.sessionId,provider:"deepseek-official",model:e.model});let o=e.sessionId,a=this,l=0,c=!1,u=null,d=!1,m=!1,p=async()=>{m||(m=!0,await Ea())};return{provider:"dsh",sessionId:o,get completedTurns(){return l},async sendTurn(f,g={}){if(c||u!==null)throw new Error("dsh bundle session is closed");if(d)throw new Error("dsh bundle session has a turn still in flight");if(g.signal?.aborted)throw new Error("Aborted");if(s=Lu(s),!qk(s))throw new Error(`dsh bundle: session file for session "${o}" disappeared mid-bundle \u2014 identity re-check failed (external re-seed?)`);d=!0;let h=Date.now();try{let y,b=a.promptAndWait(r,e.cwd,o,f,Hg,g.signal,R=>{y=R});b.catch(()=>{});let _=()=>{},v=new Promise((R,S)=>{_=()=>{(async()=>{c=!0,await p()})().finally(()=>S(Object.assign(new Error("Aborted"),{usage:y,sessionId:o})))},g.signal?.addEventListener("abort",_,{once:!0})}),E;try{E=await Promise.race([b,v])}finally{g.signal?.removeEventListener("abort",_)}return l+=1,{...E,sessionId:o,durationMs:Date.now()-h}}finally{d=!1}},close(){return u!==null||(u=(async()=>{c=!0,await p()})()),u}}}async promptAndWait(e,n,r,s,i,o,a){let l=Date.now(),c=Lu(this.dshProvider.sessionFilePath(n,r)),u=!1,d=await Xk(c,()=>{u=!0}),m=d.reduce((b,_)=>typeof _.seq=="number"&&Number.isSafeInteger(_.seq)?Math.max(b,_.seq):b,-1),p=new Ii(r,m,this.usageSeen);u&&p.invalidateOwnership();let f=JSON.stringify([c,r]),g=Ug.get(f)??new Set;if(g.size){p.invalidateOwnership();for(let b of g)b.invalidateOwnership()}g.add(p),Ug.set(f,g),d.filter(b=>b.type==="turn/start"||b.type==="turn/end").at(-1)?.type==="turn/start"&&p.invalidateOwnership();let y;try{await e.rpc("session.prompt",{sessionId:r,mode:"queue",content:[{type:"text",text:s}]});let b=i>0?Date.now()+i:1/0;for(;;){c=Lu(c);let _=await Xk(c),v=_.find(E=>E.type==="turn/end"&&(E.seq??-1)>m);if(_.length&&p.update(_,v?.seq??1/0),a?.(p.usage()),o?.aborted)throw new Error("Aborted");if(v){let E=v.data?.reason;E?.kind!=="completed"&&(y=E?.kind==="aborted"?"cancelled":"error");let R=[..._].reverse().find(N=>N.type==="assistant/message"&&(N.seq??-1)>m&&(N.seq??1/0)<=(v.seq??1/0)),S=R?z1(R):"";if(E?.kind!=="completed"&&!S)throw new Error(V1(E));p.finish();let I=p.usage();return{text:S,sessionId:r,durationMs:Date.now()-l,usage:I?{...I,...E?.kind==="completed"?{}:{outcome:E?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>b)throw new Error(`dsh turn timed out after ${i}ms waiting for turn/end`);await new Promise(E=>setTimeout(E,J1))}}catch(b){if(p.finish(),b instanceof Error){let _=p.usage();Object.assign(b,{usage:_?{..._,outcome:y}:void 0,sessionId:r})}throw b}finally{g.delete(p),g.size||Ug.delete(f)}}}});import{existsSync as K1}from"node:fs";import{join as Kk,resolve as Y1}from"node:path";import{createRequire as Q1}from"node:module";function Z1(){return Gg===null&&(Gg=Q1(import.meta.url)("node:sqlite").DatabaseSync),Gg}function Jg(t={}){return Y1(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||Kk(ae,".hermes"))}function eH(t={}){return Kk(Jg(t),"state.db")}function Ta(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function At(t){return typeof t=="string"&&t.length>0?t:void 0}function tH(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function Vk(t){return At(t.cwd)??At(tH(t.model_config).cwd)??"(unknown)"}function nH(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function rH(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function zk(t){let e=t.input_tokens??0,n=t.output_tokens??0,r=t.cache_read_tokens??0,s=t.cache_write_tokens??0,i=t.reasoning_tokens??0;return(t.message_count??0)>0&&e+n+r+s+i>0?{totalInputTokens:e,totalCachedInputTokens:r,totalCacheWriteInputTokens:s,totalOutputTokens:n,totalReasoningOutputTokens:i}:{}}var Gg,Gk,Jk,Mu,Yk=M(()=>{"use strict";We();ke();Gg=null;Gk="acp";Jk=`id, source, model, model_config, started_at,
2305
2305
  last_activity_at, message_count, input_tokens, output_tokens,
2306
- cache_read_tokens, cache_write_tokens, reasoning_tokens, cwd, title`;Mu=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=Q1(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!V1(this.dbPath))return null;let e=null;try{return e=new(Y1())(this.dbPath,{open:!0,readOnly:!0}),e.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),e}catch(n){return e?.close(),X({event:"hermes_store_unavailable",provider:this.name,db_path:this.dbPath,error_message:n instanceof Error?n.message:String(n)}),null}}selectSessionRow(e,n){return e.prepare(`SELECT ${Jk} FROM sessions WHERE id = ? AND source = ?`).get(n,Gk)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${Jk} FROM sessions
2306
+ cache_read_tokens, cache_write_tokens, reasoning_tokens, cwd, title`;Mu=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=eH(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!K1(this.dbPath))return null;let e=null;try{return e=new(Z1())(this.dbPath,{open:!0,readOnly:!0}),e.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),e}catch(n){return e?.close(),X({event:"hermes_store_unavailable",provider:this.name,db_path:this.dbPath,error_message:n instanceof Error?n.message:String(n)}),null}}selectSessionRow(e,n){return e.prepare(`SELECT ${Jk} FROM sessions WHERE id = ? AND source = ?`).get(n,Gk)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${Jk} FROM sessions
2307
2307
  WHERE source = ?
2308
2308
  ORDER BY COALESCE(last_activity_at, started_at) DESC
2309
2309
  LIMIT ?`).all(Gk,this.discoverLimit),r=[];for(let s of n){let i=this.previewTexts(e,s.id);r.push({provider:this.name,sessionId:s.id,slug:At(s.title),cwd:Vk(s),createdAt:Ta(s.started_at),modifiedAt:Ta(s.last_activity_at??s.started_at),model:At(s.model),startCommand:this.name,firstUserMessage:i.first,lastUserMessage:i.last,messageCount:s.message_count??0,filePath:this.dbPath,...zk(s)})}return r}catch(n){return X({event:"hermes_discover_sessions_failed",provider:this.name,db_path:this.dbPath,error_message:n instanceof Error?n.message:String(n)}),[]}finally{e.close()}}activeMessageRows(e,n){let r=new Set(e.prepare("PRAGMA table_info(messages)").all().map(a=>a.name)),i=`id, session_id, role, content, tool_call_id, tool_calls, tool_name,
2310
2310
  timestamp, finish_reason${["_compressed_summary","display_kind"].filter(a=>r.has(a)).map(a=>`, ${a}`).join("")}`,o="WHERE session_id = ? AND role IN ('user', 'assistant', 'tool')";try{return e.prepare(`SELECT ${i} FROM messages ${o} AND active = 1 ORDER BY id ASC`).all(n)}catch(a){if(!/no such column/i.test(a instanceof Error?a.message:String(a)))throw a;return e.prepare(`SELECT ${i} FROM messages ${o} ORDER BY id ASC`).all(n)}}previewTexts(e,n){try{let[r,s]=["ASC","DESC"].map(i=>{let o=`SELECT content FROM messages WHERE session_id = ?
2311
- AND role = 'user' AND content != ''`,a;try{a=e.prepare(`${o} AND active = 1 ORDER BY id ${i} LIMIT 1`).get(n)}catch(l){if(!/no such column: active/i.test(String(l)))throw l;a=e.prepare(`${o} ORDER BY id ${i} LIMIT 1`).get(n)}return a?Q(a.content,80):void 0});return{first:r,last:s}}catch{return{}}}async loadSession(e){let n=this.openDb();if(!n)return null;try{let r=this.selectSessionRow(n,e);if(!r)return null;let s=this.activeMessageRows(n,e),i=[],o=[],a,l;for(let c of s){let u=Ta(c.timestamp),d=c.content??"";if(c.role==="user"){d&&c._compressed_summary!==1&&c.display_kind!=="hidden"&&o.push(d),d.length>0&&(a||(a=Q(d,80)),l=Q(d,80)),i.push({role:"user",timestamp:u,content:d||"(empty)"});continue}if(c.role==="tool"){i.push({role:"tool_result",timestamp:u,content:d,toolCallId:At(c.tool_call_id),toolName:At(c.tool_name)});continue}d.length>0&&i.push({role:"assistant",timestamp:u,content:d,model:At(r.model),stopReason:At(c.finish_reason)});for(let m of eH(c.tool_calls)){let p=tH(m.function?.arguments);i.push({role:"tool_use",timestamp:u,content:At(m.function?.name)??"tool_call",toolName:At(m.function?.name),toolCallId:At(m.call_id)??At(m.id),toolInput:typeof m.function?.arguments=="string"?m.function.arguments:JSON.stringify(m.function?.arguments??{}),toolInputData:Vt(p)})}}return{provider:this.name,sessionId:r.id,slug:At(r.title),cwd:Vk(r),createdAt:Ta(r.started_at),modifiedAt:Ta(r.last_activity_at??r.started_at),model:At(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??i.length,filePath:this.dbPath,...zk(r),messages:i,userPrompts:o}}catch(r){return X({event:"hermes_load_session_failed",provider:this.name,session_id:e,db_path:this.dbPath,error_message:r instanceof Error?r.message:String(r)}),null}finally{n.close()}}async resolveSessionPath(e){let n=this.openDb();if(!n)return null;try{return this.selectSessionRow(n,e)?this.dbPath:null}catch{return null}finally{n.close()}}async deleteSession(e){return!1}}});import{mkdir as nH}from"node:fs/promises";function sH(t){return rH.test(t)}function Qk(t){if(t==="plan")throw new Error(`provider "hermes" does not support --permission-mode plan: Hermes's ACP mode ladder (default/accept_edits/dont_ask) governs file edits only and has no plan-equivalent, so lmctl refuses rather than silently running the member with edit auto-approval.`);return iH}function zg(t){return new Vg(t)}var rH,iH,Vg,Kg=M(()=>{"use strict";at();Yk();tr();Qe();ke();rH=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;iH="dont_ask";Vg=class extends be{hermesProvider;hermesHome;constructor(e){let n=new Mu(e);super({provider:n,protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Hermes has no provider-side leader-injection mechanism; the seed prompt carries lmctl's leader instructions."},binary:"hermes",seedArgs:[],resumeTemplate:"hermes --yolo --resume {{session_id}}",startTemplate:"hermes",transport:async(r,s)=>cn(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:Qk(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=Jg(e)}async openSession(e){return Rn({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:Qk(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await nH(e,{recursive:!0});let r=[];if(n?.effort){let i="hermes has no ACP-level effort surface";X({event:"hermes_effort_ignored",provider:this.name,effort:n.effort,reason:i}),r.push(`hermes seed ignored effort=${n.effort}: ${i}`)}let s;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}s=await this.sendTurn(n?.prompt??ce,{sessionId:"",cwd:e,env:n?.env,signal:n?.signal,model:n?.model})}catch(i){return{success:!1,error:`hermes ACP seed failed: ${i instanceof Error?i.message:String(i)}`}}return sH(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(X({event:"hermes_seed_contract_violation",provider:this.name,session_id:s.sessionId,reason:"session/new did not return a UUID session id"}),{success:!1,error:`hermes ACP session/new did not return a UUID session id (got ${JSON.stringify(s.sessionId)})`})}}});import{readdir as Zk,rm as oH,stat as aH}from"node:fs/promises";import{join as Yg}from"node:path";function Qg(t){return typeof t.content=="string"?t.content:Array.isArray(t.content)?t.content.filter(e=>e.type==="text"&&e.text).map(e=>e.text).join(" "):""}function eR(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var Pu,tR=M(()=>{"use strict";We();Pu=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||Yg(ae,".pi","agent","sessions")}getWatchPaths(){return[{directory:this.baseDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[];for(let n of await this.listSessionFiles())try{let r=await this.extractSummary(n);r&&e.push(r)}catch{}return e}async listSessionFiles(){let e;try{e=await Zk(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=Yg(this.baseDir,r);try{if(!(await aH(s)).isDirectory())continue;for(let i of await Zk(s))i.endsWith(".jsonl")&&n.push(Yg(s,i))}catch{}}return n}async readHeader(e){for await(let n of Ae(e))return n.type==="session"?n:null;return null}async extractSummary(e){let n=await this.readHeader(e);if(!n)return null;let r=await $e(e),s,i,o,a=0,l=0,c=0,u=0,d=0,m=0,p=0,f;for await(let g of Ae(e)){if(g.type==="model_change"&&g.provider&&g.modelId){s=`${g.provider}/${g.modelId}`;continue}if(g.type!=="message"||!g.message)continue;let h=g.message;if(h.provider&&h.model&&(s=`${h.provider}/${h.model}`),h.role==="user"){let y=Qg(h).trim();y&&(i||(i=Q(y,80)),o=Q(y,80)),a++}else if(h.role==="assistant"){a++;let y=h.usage;y&&(l+=y.input??0,c+=y.cacheRead??0,u+=y.cacheWrite??0,d+=y.output??0,m+=y.reasoning??0,p=y.input??0,f={inputTokens:y.input,cachedInputTokens:y.cacheRead,cacheWriteInputTokens:y.cacheWrite,outputTokens:y.output,reasoningOutputTokens:y.reasoning,totalTokens:y.totalTokens})}}return{provider:"pi",sessionId:n.id,cwd:n.cwd??"(unknown)",createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:s,startCommand:"pi",firstUserMessage:i,lastUserMessage:o,messageCount:a,filePath:e,totalInputTokens:l,totalCachedInputTokens:c,totalCacheWriteInputTokens:u,totalOutputTokens:d,totalReasoningOutputTokens:m,lastInputTokens:p,lastTokenUsage:f}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=await this.extractSummary(n);if(!r)return null;let s=[],i=r.model;for await(let o of Ae(n)){if(o.type==="model_change"&&o.provider&&o.modelId){i=`${o.provider}/${o.modelId}`;continue}if(o.type!=="message"||!o.message)continue;let a=o.message;a.provider&&a.model&&(i=`${a.provider}/${a.model}`);let l=a.timestamp?new Date(a.timestamp):r.modifiedAt;if(a.role==="user")s.push({role:"user",timestamp:l,content:Qg(a)});else if(a.role==="assistant"&&Array.isArray(a.content))for(let c of a.content)c.type==="text"&&c.text?s.push({role:"assistant",timestamp:l,content:c.text,model:i}):c.type==="thinking"&&c.thinking?s.push({role:"thinking",timestamp:l,content:c.thinking}):c.type==="toolCall"&&s.push({role:"tool_use",timestamp:l,content:eR(c.arguments),toolName:c.name??"tool",toolInput:eR(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:Qg(a),toolName:a.toolName,toolCallId:a.toolCallId})}return{...r,model:i,messages:s}}async resolveSessionPath(e){let n=`_${e}.jsonl`,r=[];for(let s of await this.listSessionFiles()){if(s.endsWith(n))return s;s.split("_").pop()?.replace(/\.jsonl$/,"")?.startsWith(e)&&r.push(s)}return r.length===1?r[0]:null}async deleteSession(e){let n=await this.resolveSessionPath(e);return n?(await oH(n,{force:!0}),!0):!1}}});function eh(t){return new Zg(t)}var Zg,lH,th=M(()=>{"use strict";tR();at();Qe();kn();Og();Zg=class extends be{constructor(e){super({provider:new Pu(e),protocol:{transport:"print",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append",leaderSetupHint:"pi uses one-shot print turns; no streaming events are available."},binary:"pi",seedArgs:["-p",ce],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:lH})}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}manualSeedHint(e){return{launchCommand:`cd ${e} && pi`,postLaunchNote:"Send the lmctl seed instruction, wait for the session file to write, then exit.",lsCommand:`lmctl ls --provider pi --sessiondir ${e}`}}},lH=Au({label:"pi",buildArgs:(t,e)=>{let n=[...e.sessionId?["--session",e.sessionId]:[],"-p",t];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>qe("pi",t,e.permissionMode??"yolo")})});import{createHash as cH}from"node:crypto";import{existsSync as uH,mkdirSync as rh,readFileSync as dH,renameSync as mH,rmdirSync as cR,statSync as pH,writeFileSync as fH}from"node:fs";import{dirname as ah,join as nR,resolve as nh}from"node:path";function gH(t){return cH("sha256").update(t).digest("hex").slice(0,8)}function hH(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function yH(t,e){let n=e?.prompt??"",r=/\bYou are alias\s+([A-Za-z][A-Za-z0-9_-]*)\b/.exec(n);return r!==null?r[1]:t.split(/[\\/]/).filter(Boolean).pop()??"session"}function uR(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Du(t){return Math.max(1,Math.ceil(t.length/4))}function Pi(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return nh(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?nR(ah(nh(n)),".lmctl-claude-mock","sessions.json"):nR(nh(t),".lmctl-claude-mock","sessions.json")}function rR(){return{schemaVersion:1,sessions:{}}}function Sa(t){if(!uH(t))return rR();try{let e=JSON.parse(dH(t,"utf8")),n=typeof e.sessions=="object"&&e.sessions!==null?e.sessions:{},r=typeof e.script=="object"&&e.script!==null?e.script:void 0,s=typeof e.scriptContains=="object"&&e.scriptContains!==null?e.scriptContains:void 0,i=sh(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...i!==void 0?{defaultDelayMs:i}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return rR()}}function dR(t,e){rh(ah(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;fH(n,`${JSON.stringify(e,null,2)}
2312
- `,"utf8"),mH(n,t)}function bH(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function wH(t){let e=`${t}.lock`;rh(ah(t),{recursive:!0});let n=Date.now()+sR;for(;;)try{return rh(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-pH(e).mtimeMs>_H){try{cR(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${sR}ms: ${e}`);bH(vH)}}function EH(t){try{cR(t)}catch{}}function mR(t,e){let n=wH(t);try{return e()}finally{EH(n)}}function TH(t){return{...t,timestamp:t.timestamp.toISOString()}}function SH(t){return{...t,timestamp:new Date(t.timestamp)}}function kH(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(TH)}}function pR(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(SH)}}function Fu(t,e=process.cwd()){let n=Mi.get(t);if(n!==void 0)return n;let s=Sa(Pi(e)).sessions[t];if(s===void 0)return;let i=pR(s);return Mi.set(i.sessionId,i),i}function iR(t){Mi.set(t.sessionId,t);let e=Pi(t.cwd);mR(e,()=>{let n=Sa(e);n.sessions[t.sessionId]=kH({...t,filePath:e}),dR(e,n)})}function RH(t,e=process.cwd()){let n=Pi(e);return mR(n,()=>{let r=Sa(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],dR(n,r)),s})}function IH(){let t=Sa(Pi()),e=Object.values(t.sessions).map(pR);for(let n of e)Mi.set(n.sessionId,n);return e}function sh(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function oR(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=sh(t.delayMs);return{kind:"success",text:t.text,...e!==void 0?{delayMs:e}:{}}}if(t!==void 0&&typeof t.error=="string"&&typeof t.text!="string"){let e=sh(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function aR(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function xH(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=oR(n[t]??n[uR(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let i=oR(r[s]);if(i!==void 0)return i}}}function lR(t){return{provider:"ClaudeMock",sessionId:t.sessionId,cwd:t.cwd,createdAt:t.createdAt,modifiedAt:t.modifiedAt,messageCount:t.messages.length,filePath:t.filePath,cliVersion:"ClaudeMock/0",model:"claude-mock",totalInputTokens:t.totalInputTokens,totalOutputTokens:t.totalOutputTokens,lastTokenUsage:{totalTokens:t.totalInputTokens+t.totalOutputTokens}}}function lh(){return new oh}var Mi,_H,vH,sR,ih,oh,ch=M(()=>{"use strict";Mi=new Map;_H=5e3,vH=15,sR=1e4;ih=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of IH())e.set(n.sessionId,n);for(let n of Mi.values())e.set(n.sessionId,n);return[...e.values()].map(lR)}async loadSession(e){let n=Fu(e);return n===void 0?null:{...lR(n),messages:n.messages.slice()}}async resolveSessionPath(e){return Fu(e)?.filePath??null}async deleteSession(e){let n=Mi.delete(e),r=RH(e);return n||r}},oh=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new ih;discover(){return this.provider.discoverSessions()}load(e){return this.provider.loadSession(e)}resolvePath(e){return this.provider.resolveSessionPath(e)}delete(e){return this.provider.deleteSession(e)}getWatchPaths(){return[]}async seed(e,n){try{n?.onDispatch?.()}catch{}let r=hH(yH(e,n)),s=`mock-${r}-${gH(`${e}:${r}`)}`,i=new Date,o=Pi(e),a=Fu(s,e),l=n?.prompt??"ClaudeMock seed",c=Du(l),u={sessionId:s,cwd:e,filePath:o,createdAt:a?.createdAt??i,modifiedAt:i,messages:a?.messages.slice()??[],totalInputTokens:a?.totalInputTokens??0,totalOutputTokens:a?.totalOutputTokens??0};return u.messages.push({role:"user",timestamp:i,content:l}),u.messages.push({role:"assistant",timestamp:i,content:"ACK: ClaudeMock seeded"}),u.totalInputTokens+=c,u.totalOutputTokens+=Du("ACK: ClaudeMock seeded"),iR(u),{success:!0,sessionId:s}}resumeCommand(e){return`ClaudeMock --resume ${e}`}startCommand(){return"ClaudeMock"}manualSeedHint(e){return{launchCommand:`cd ${e} && ClaudeMock`,postLaunchNote:"ClaudeMock is a hermetic test provider; no manual seed is required.",lsCommand:`lmctl ls --provider ClaudeMock --sessiondir ${e}`}}forkHint(e){return"ClaudeMock does not support fork."}async fork(e,n){return{success:!1,error:"ClaudeMock does not support fork."}}async sendTurn(e,n){let r=Date.now(),s=Fu(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let i=new Date,o=Sa(Pi(n.cwd)),a=xH(e,o),l=a?.delayMs??o.defaultDelayMs;if(a?.kind==="error")throw await aR(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${uR(e)}`;return s.messages.push({role:"user",timestamp:i,content:e}),s.messages.push({role:"assistant",timestamp:i,content:c,model:n.model??"claude-mock"}),s.modifiedAt=i,s.totalInputTokens+=Du(e),s.totalOutputTokens+=Du(c),iR(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await aR(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function rr(t){let e=[Wf({museDataHome:t?.museDataHome}),Qf({miniplayerHome:t?.miniplayerHome}),tg({claudeDir:t?.claudeDir}),og({codexDir:t?.codexDir,codeDir:t?.codeDir}),dg({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),gg({copilotDir:t?.copilotDir}),_g({dbPaths:t?.opencodeDbPaths}),Tg({kimiHome:t?.kimiHome}),Rg({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Ag({qwenDir:t?.qwenDir}),Mg({agyDir:t?.agyDir}),qg({dshHome:t?.dshHome}),zg({hermesHome:t?.hermesHome}),eh({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(lh()),e}var uh=M(()=>{"use strict";qf();qf();Zf();Zf();ng();ag();mg();hg();vg();Sg();Ig();Cg();Pg();Xg();Kg();th();ch();ng();ag();mg();hg();vg();Sg();Ig();Cg();Pg();Xg();Kg();th();ch()});var fR,gR,hR=M(()=>{"use strict";fR=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],gR=["agy","pi","lmplayer"]});var vR={};Mn(vR,{BUNDLE_CAPABLE_PROVIDERS:()=>fR,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>gR,ProviderRegistry:()=>pa,TransportConnectionError:()=>Ce,TransportError:()=>Lr,TransportJsonError:()=>Bc,TransportProcessError:()=>Me,TransportRpcError:()=>na,_resetDefaultRegistryForTests:()=>LH,bundleSupportedProviders:()=>Uu,canUsePersistentSession:()=>Kc,chat:()=>ka,countTokens:()=>PH,createAdapterRegistry:()=>er,createAllAdapters:()=>rr,deleteSession:()=>gh,listSessions:()=>fh,openBundleSession:()=>dh,openConversation:()=>mh,seed:()=>ph});import{accessSync as AH,constants as CH,statSync as NH}from"node:fs";import{join as OH,delimiter as yR}from"node:path";function qr(){return $u===null&&($u=er(rr())),$u}function LH(){$u=null}function ju(t,e){Ac(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function ka(t){let e=t.registry??qr(),n=ju(e,t.provider),r={sessionId:t.sessionId,cwd:t.cwd,env:t.env,onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal,timeoutMs:t.timeoutMs,model:t.model,effort:t.effort,progPath:t.progPath,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,requireResume:t.requireResume,bundleSession:t.bundleSession},s=t.bundleSession===void 0?await Qc(n,{...r,execution:"per-turn",requireResume:t.requireResume??!1}):void 0,i;try{i=s?await s.sendTurn(t.prompt,{onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal}):await n.sendTurn(t.prompt,r)}finally{await s?.close()}return{text:i.text,...i.usage?{usage:i.usage}:{},sessionId:i.sessionId,durationMs:i.durationMs,stopReason:i.stopReason,numTurns:i.numTurns,status:i.status,stalledAfterMs:i.stalledAfterMs,...i.warnings!==void 0?{warnings:i.warnings}:{}}}function Uu(t){return(t??qr()).getAllAdapters().filter(n=>vn(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function dh(t){let e=t.registry??qr(),n=ju(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Uu(e).join(", ")})`);return Qc(n,{...t,execution:"persistent"})}async function mh(t){return Qc(ju(t.registry??qr(),t.provider),t)}async function ph(t){let e=t.registry??qr(),n=ju(e,t.provider);if(n.seedBinary==="agy"){let u=t.env??process.env,d=u.PATH??u.Path??"/usr/bin:/bin",m=yR===";"?["",...(u.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!d.split(yR).some(f=>{try{return m.some(g=>{try{let h=OH(f||t.cwd,"agy"+g);return AH(h,CH.X_OK),NH(h).isFile()}catch{return!1}})}catch{return!1}}))return{success:!1,error:"Failed to spawn agy: executable not found on PATH",errorCode:"ENOENT"}}if(t.signal?.aborted)return{success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"};let r=await _R(e,t.provider,t.cwd);if(t.signal?.aborted)return{success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"};let s=await n.seed(t.cwd,{...t.env?{env:t.env}:{},...t.signal?{signal:t.signal}:{},onDispatch:t.onDispatch,model:t.model,effort:t.effort,prompt:t.prompt}),i;try{i=s.usage}catch{}let o={usage:i},a=s.warnings!==void 0&&s.warnings.length>0?{warnings:s.warnings}:{};if(s.success&&s.sessionId)return{success:!0,sessionId:s.sessionId,...a,...o};if(!s.success&&(s.errorCode==="ENOENT"||s.errorCode==="ABORT_ERR"))return{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...o};let l=await _R(e,t.provider,t.cwd),c=MH(r,l);return s.success?c?{success:!0,sessionId:c,...a,...o}:{success:!0,...a,...o}:(c&&await n.delete?.(c).catch(()=>{}),{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...o})}async function _R(t,e,n){let r=await t.listAll({provider:e,workspace:n}),s=new Map;for(let i of r)s.set(i.sessionId,i.modifiedAt);return s}function MH(t,e){let n=[];for(let r of e.keys())t.has(r)||n.push(r);return n.length===1?n[0]:void 0}async function fh(t={}){return(t.registry??qr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function gh(t,e,n=qr()){return n.deleteSession(e,t)}async function PH(t){let n=await(t.registry??qr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,i=n.totalCacheWriteInputTokens??0,o=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:i,output:o,reasoningOutput:a,total:r+s+i+o+a,lastTurn:n.lastTokenUsage}}var $u,sr=M(()=>{"use strict";$r();_i();Lf();uh();$r();Lf();uh();hR();Mr();$u=null});function yh(t){return vn(t)&&FH.has(t)}function Ra(){return hh===null&&(hh=er(rr())),hh}function ER(t,e,n={}){if(!yh(t))return null;try{let r=Ra().getAdapter?.(t);if(r===void 0)return null;let s=r.resumeCommand(e).trim();if(s.length===0)return null;let i=s.split(/\s+/),o=t==="codex"&&n.isLead===!0?lu({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?DH[t]?.(n.model):void 0;return n.model!==void 0&&n.model.trim().length>0&&a===void 0&&n.onModelIgnored?.({provider:t,model:n.model,reason:`${t} terminal resume does not implement per-session model selection`}),[...i,...a??[],...o,...bR[t]??[]]}catch{return null}}async function TR(t,e){try{let n=Ra().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function SR(t){try{return Ra().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function Xr(t,e){return Ra().getSession(t,e)}async function _h(t){return(await Ra().resolveSessions(t)).map(n=>n.provider.name)}var bR,DH,FH,wR,hh,Di=M(()=>{"use strict";_i();sr();zf();bR={muse:["--yolo"],claude:["--dangerously-skip-permissions"],codex:["--dangerously-bypass-approvals-and-sandbox"],gemini:["-y"],copilot:["--yolo"],opencode:[],qwen:["--approval-mode","yolo"],agy:[],pi:[],lmplayer:["--auto"],kimi:[],hermes:[]},DH={muse:t=>["--model",t],claude:t=>["--model",t],codex:t=>["--model",t],gemini:t=>["--model",t],opencode:t=>["--model",t],qwen:t=>["--model",t],agy:t=>["--model",t],lmplayer:t=>["--model",t],kimi:t=>["--model",t],hermes:t=>["--model",t],pi:t=>["--model",t]},FH=new Set(Object.keys(bR)),wR=/^[\w.:-]+$/;hh=null});import{homedir as $H}from"node:os";function kR(t,e){let n=new Set;return{text:t.replace(UH,(s,i)=>{let o=i.trim(),a=jH[o];return a===void 0?(n.add(o),s):a(e)}),unknownNames:[...n].sort()}}function RR(t){return{workdir:t.workdir,teamfile:t.teamfile,date:HH(t.date)}}function HH(t){return t.toISOString().slice(0,10)}var jH,UH,IR=M(()=>{"use strict";wn();jH={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>zo(t.teamfile),home:()=>$H(),date:t=>t.date},UH=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});import{existsSync as BH,mkdirSync as WH,readFileSync as qH,renameSync as XH,unlinkSync as GH,writeFileSync as JH}from"node:fs";import{homedir as AR}from"node:os";import{dirname as Ia,join as _t,resolve as VH}from"node:path";function $i(t,e,n){let r=Ia(VH(n)),s=new Set,i=new Map;for(let o of e.members){if(s.add(o.provider),o.teamfile!==void 0)continue;let a=o.sessiondir??r,l=i.get(a)??new Set;l.add(o.provider),i.set(a,l)}for(let[o,a]of i.entries())An(_t(o,".mcp.json"),"mcpServers",[Gr(),Jr()]),a.has("opencode")&&An(_t(o,".opencode","opencode.json"),"mcp",[CR(),NR()]),a.has("kimi")&&An(_t(o,".kimi-code","mcp.json"),"mcpServers",[Gr(),Jr()]);for(let o of s)ZH(o)}function KH(t=vh??AR()){return _t(t,".copilot","mcp-config.json")}function YH(t,e){Zt.mkdirSync(Ia(t),{recursive:!0});let n=_t(Ia(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Zt.writeFileSync(n,`${JSON.stringify(e,null,2)}
2313
- `,"utf8"),Zt.renameSync(n,t)}catch(r){try{Zt.unlinkSync(n)}catch{}throw r}}function QH(t,e){Zt.mkdirSync(Ia(t),{recursive:!0});let n=_t(Ia(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Zt.writeFileSync(n,e,"utf8"),Zt.renameSync(n,t)}catch(r){try{Zt.unlinkSync(n)}catch{}throw r}}function An(t,e,n){try{if(!Zt.existsSync(t))return;let r=JSON.parse(Zt.readFileSync(t,"utf8"));if(!Fi(r)||!Fi(r[e]))return;let s={...r[e]},i=[];for(let{name:o,shouldRemove:a}of n)Object.prototype.hasOwnProperty.call(s,o)&&a(s[o])&&(delete s[o],i.push(o));if(i.length===0)return;r[e]=s,YH(t,r),X({event:"mcp_cleanup",path:t,removed:i})}catch{}}function Gr(){return{name:Bu,shouldRemove:aB}}function CR(){return{name:Bu,shouldRemove:lB}}function Jr(){return{name:Hu,shouldRemove:iB}}function NR(){return{name:Hu,shouldRemove:oB}}function ZH(t){let e=vh??AR();switch(t){case"copilot":An(KH(e),"mcpServers",[Gr(),Jr()]);return;case"claude":An(_t(e,".claude.json"),"mcpServers",[Gr(),Jr()]);return;case"gemini":An(_t(e,".gemini","settings.json"),"mcpServers",[Gr(),Jr()]);return;case"qwen":An(_t(e,".qwen","settings.json"),"mcpServers",[Gr(),Jr()]);return;case"agy":An(_t(e,".gemini","antigravity-cli","settings.json"),"mcpServers",[Gr(),Jr()]);return;case"opencode":An(_t(e,".config","opencode","opencode.json"),"mcp",[CR(),NR()]);return;case"kimi":An(_t(vh===void 0?process.env.KIMI_CODE_HOME??_t(e,".kimi-code"):_t(e,".kimi-code"),"mcp.json"),"mcpServers",[Gr(),Jr()]);return;case"codex":eB(_t(e,".codex","config.toml"));return;default:return}}function eB(t){try{if(!Zt.existsSync(t))return;let e=Zt.readFileSync(t,"utf8"),n=tB(e);if(n===null)return;let r=e.split(/\n/),s=[],i=new Set,o=!1,a;for(let l of r){let c=OR(l);if(c===null)return;if(c!==void 0){if(xR(c,n)){o=!0,a=c[1],i.add(a);continue}o=!1,a=void 0,s.push(l);continue}if(o){if(/^\s*(?:#.*)?$/.test(l)){s.push(l);continue}a!==void 0&&i.add(a);continue}let u=rB(l);if(u===null)return;if(u!==void 0&&xR(u,n)){i.add(u[1]);continue}s.push(l)}if(i.size===0)return;QH(t,s.join(`
2314
- `)),X({event:"mcp_cleanup",path:t,removed:[...i]})}catch{}}function xR(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function tB(t){let e=new Map,n;for(let s of t.split(/\n/)){let i=OR(s);if(i===null)return null;if(i!==void 0){n=i;continue}let o=s.indexOf("=");if(o<0)continue;let a=s.slice(0,o).trim(),l=s.slice(o+1).trim(),c=nB(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==Hu&&c[1]!==Bu)continue;let u=e.get(c[1])??{};if(c[2]==="command"){let d=LR(l);if(d===null)return null;u.command=d}else if(c[2]==="args"){let d=sB(l);if(d===null)return null;u.args=d}e.set(c[1],u)}let r=new Set;for(let[s,i]of e.entries())s===Hu&&PR(i.command,i.args)&&r.add(s),s===Bu&&DR(i.command,i.args)&&r.add(s);return r}function nB(t,e){if(t.startsWith("mcp_servers"))return Wu(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=Wu(t);return n===null?null:[...e,...n]}function OR(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:Wu(e[1])}function rB(t){let e=t.indexOf("=");if(e<0)return;let n=t.slice(0,e).trim();if(!(n.length===0||!n.startsWith("mcp_servers")))return Wu(n)}function Wu(t){let e=[],n=0,r=()=>{for(;n<t.length&&/\s/.test(t[n]);)n+=1};for(;n<t.length;){if(r(),n>=t.length)return null;if(t[n]==='"'){n+=1;let s="",i=!1;for(;n<t.length;){let o=t[n];if(o==="\\"){if(n+1>=t.length)return null;s+=t[n+1],n+=2;continue}if(o==='"'){n+=1,i=!0;break}s+=o,n+=1}if(!i)return null;e.push(s)}else{let s=n;for(;n<t.length&&/[A-Za-z0-9_-]/.test(t[n]);)n+=1;if(n===s)return null;e.push(t.slice(s,n))}if(r(),n>=t.length)break;if(t[n]!==".")return null;n+=1}return e.length>0?e:null}function LR(t){let e=MR(t).trim();if(e.startsWith('"'))try{let n=JSON.parse(e);return typeof n=="string"?n:null}catch{return null}return e.startsWith("'")&&e.endsWith("'")&&e.length>=2?e.slice(1,-1):null}function sB(t){let e=MR(t).trim();if(!e.startsWith("[")||!e.endsWith("]"))return null;let n=e.slice(1,-1).trim();if(n.length===0)return[];let r=n.split(",").map(s=>LR(s.trim()));return r.some(s=>s===null)?null:r}function MR(t){let e;for(let n=0;n<t.length;n+=1){let r=t[n];if(e!==void 0){if(e==='"'&&r==="\\"){n+=1;continue}r===e&&(e=void 0);continue}if(r==='"'||r==="'"){e=r;continue}if(r==="#")return t.slice(0,n)}return t}function iB(t){return Fi(t)?t.type==="stdio"&&typeof t.command=="string"&&PR(t.command,t.args):!1}function oB(t){return!Fi(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&$R(t.command[0])&&t.command[1]==="mcp"||t.command.length===3&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&typeof t.command[2]=="string"&&FR(t.command[0],[t.command[1],t.command[2]])}function aB(t){return Fi(t)?t.type==="stdio"&&DR(t.command,t.args):!1}function lB(t){return!Fi(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&jR(t.command[0])&&t.command[1]==="mcp"}function PR(t,e){return $R(t)&&UR(e)||FR(t,e)}function DR(t,e){return jR(t)&&UR(e)}function FR(t,e){return cB(t)&&Array.isArray(e)&&e.length===2&&uB(e[0])&&e[1]==="mcp"}function $R(t){return typeof t=="string"&&bh(t)==="lmctl"}function jR(t){return typeof t=="string"&&bh(t)==="lmctl0"}function cB(t){if(typeof t!="string")return!1;let e=bh(t).toLowerCase();return e==="node"||e==="node.exe"}function uB(t){if(typeof t!="string")return!1;let e=t.replace(/\\/g,"/");return e==="lmctl-cli/dist/index.js"||e.endsWith("/lmctl-cli/dist/index.js")}function bh(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function UR(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Fi(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Hu,Bu,zH,Zt,vh,qu=M(()=>{"use strict";ke();Hu="lmctl",Bu="lmctl0",zH={existsSync:BH,mkdirSync:WH,readFileSync:qH,writeFileSync:JH,renameSync:XH,unlinkSync:GH},Zt=zH});import{createHash as dB}from"node:crypto";import{accessSync as mB,constants as HR,existsSync as pB,readFileSync as Eh,realpathSync as Th,statSync as fB,writeFileSync as BR}from"node:fs";import{dirname as Ns,resolve as qR}from"node:path";function JR(t){return EE(t,Xu!==void 0?{snapshot:Xu}:{})}function VR(t){return TE(t,Xu!==void 0?{snapshot:Xu}:{})}async function _B(t,e,n){let r=t.filter(i=>i.teamfile===void 0&&i.provider.trim().toLowerCase()==="opencode"&&i.model!==void 0&&i.model.length>0);return(await Promise.all(r.map(async i=>({member:i,result:await yB({cwd:i.sessiondir??e,model:i.model,...i.effort!==void 0?{effort:i.effort}:{},...n!==void 0?{env:n}:{}})})))).flatMap(({member:i,result:o})=>o.status==="rejected"?[`[${i.alias}] ${o.option}="${o.value}" rejected by opencode: ${o.error}`]:[])}function vB(t,e){let n=Ns(e),r=new Set,s=[];for(let i of t){if(i.teamfile!==void 0)continue;let o=i.sessiondir??n,a=qR(o);if(r.has(a))continue;let l=bB(a);l!==void 0&&(r.add(a),s.push(`${i.alias}: sessiondir ${a} is not writable (seed would fail: ${l}) \u2014 fix permissions or set a writable sessiondir`))}return s}function bB(t){try{if(ji.existsSync(t)){if(!ji.statSync(t).isDirectory())return"ENOTDIR";ji.accessSync(t,HR.W_OK);return}let e=EB(t);if(e===void 0)return;if(!ji.statSync(e).isDirectory())return"ENOTDIR";ji.accessSync(e,HR.W_OK);return}catch(e){return TB(e)??"permission check failed"}}function wB(t){let e=qR(t);try{return Th(e)}catch{return e}}function EB(t){let e=t;for(;;){try{if(ji.existsSync(e))return e}catch{return}let n=Ns(e);if(n===e)return;e=n}}function TB(t){if(typeof t=="object"&&t!==null&&"code"in t){let e=t.code;if(typeof e=="string"&&e.length>0)return e}}async function SB(t,e){let n;try{n=await he(e,l=>It(t,l))}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let r;try{r=Ht(n)}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let s=qp(r,Ns(n));e.stderr.write(`notice: checking teamfile and models ...
2315
- `);let i=Fp(r.members,{agyModelsRunner:XR,codexModelsRunner:GR});i.push(...await JR(r.members)),s.push(...await VR(r.members));let o=Eh(n,"utf8"),a=kR(o,RR({workdir:Ns(n),teamfile:n,date:new Date})).unknownNames;a.length>0&&i.push(`unknown template placeholder${a.length===1?"":"s"}: ${a.map(l=>`{{${l}}}`).join(", ")}`),i.push(...mf(r.members,Ns(n))),i.push(...vB(r.members,n)),i.push(...await _B(r.members,Ns(n),e.env));for(let l of s)e.stderr.write(`error: ${l.field}: ${l.message}
2316
- `);for(let l of r.members)Sh([l],e),l.session!==void 0&&l.session.length<Ui&&i.push(`${l.alias}: sessionid is shorter than ${Ui} chars; run lmctl seed to refresh it`);return{ok:!0,result:{config:r,absTeamfile:n,errors:s,warnings:i}}}function IB(t,e){let n=kB.exec(t);if(n){let s=e.get(n[1].toLowerCase());if(s!==void 0)return{alias:s,message:n[2]}}let r=RB.exec(t);if(r){let s=e.get(r[1].toLowerCase());if(s!==void 0)return{alias:s,message:r[2]}}return{alias:"",message:t}}async function zR(t,e){let n=await SB(t,e);if(!n.ok)return{status:"error",errors:[{alias:"",message:n.message}],warnings:[],counts:{errors:1,warnings:0}};let{config:r,errors:s,warnings:i}=n.result,o=new Map(r.members.map(c=>[c.alias.toLowerCase(),c.alias])),a=s.map(c=>({alias:o.get(c.field.toLowerCase())??"",message:c.message})),l=i.map(c=>IB(c,o));for(let c of l)e.stderr.write(`warning: ${c.alias?`${c.alias}: `:""}${c.message}
2311
+ AND role = 'user' AND content != ''`,a;try{a=e.prepare(`${o} AND active = 1 ORDER BY id ${i} LIMIT 1`).get(n)}catch(l){if(!/no such column: active/i.test(String(l)))throw l;a=e.prepare(`${o} ORDER BY id ${i} LIMIT 1`).get(n)}return a?Q(a.content,80):void 0});return{first:r,last:s}}catch{return{}}}async loadSession(e){let n=this.openDb();if(!n)return null;try{let r=this.selectSessionRow(n,e);if(!r)return null;let s=this.activeMessageRows(n,e),i=[],o=[],a,l;for(let c of s){let u=Ta(c.timestamp),d=c.content??"";if(c.role==="user"){d&&c._compressed_summary!==1&&c.display_kind!=="hidden"&&o.push(d),d.length>0&&(a||(a=Q(d,80)),l=Q(d,80)),i.push({role:"user",timestamp:u,content:d||"(empty)"});continue}if(c.role==="tool"){i.push({role:"tool_result",timestamp:u,content:d,toolCallId:At(c.tool_call_id),toolName:At(c.tool_name)});continue}d.length>0&&i.push({role:"assistant",timestamp:u,content:d,model:At(r.model),stopReason:At(c.finish_reason)});for(let m of nH(c.tool_calls)){let p=rH(m.function?.arguments);i.push({role:"tool_use",timestamp:u,content:At(m.function?.name)??"tool_call",toolName:At(m.function?.name),toolCallId:At(m.call_id)??At(m.id),toolInput:typeof m.function?.arguments=="string"?m.function.arguments:JSON.stringify(m.function?.arguments??{}),toolInputData:Vt(p)})}}return{provider:this.name,sessionId:r.id,slug:At(r.title),cwd:Vk(r),createdAt:Ta(r.started_at),modifiedAt:Ta(r.last_activity_at??r.started_at),model:At(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??i.length,filePath:this.dbPath,...zk(r),messages:i,userPrompts:o}}catch(r){return X({event:"hermes_load_session_failed",provider:this.name,session_id:e,db_path:this.dbPath,error_message:r instanceof Error?r.message:String(r)}),null}finally{n.close()}}async resolveSessionPath(e){let n=this.openDb();if(!n)return null;try{return this.selectSessionRow(n,e)?this.dbPath:null}catch{return null}finally{n.close()}}async deleteSession(e){return!1}}});import{mkdir as sH}from"node:fs/promises";function oH(t){return iH.test(t)}function Qk(t){if(t==="plan")throw new Error(`provider "hermes" does not support --permission-mode plan: Hermes's ACP mode ladder (default/accept_edits/dont_ask) governs file edits only and has no plan-equivalent, so lmctl refuses rather than silently running the member with edit auto-approval.`);return aH}function zg(t){return new Vg(t)}var iH,aH,Vg,Kg=M(()=>{"use strict";at();Yk();tr();Qe();ke();iH=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;aH="dont_ask";Vg=class extends be{hermesProvider;hermesHome;constructor(e){let n=new Mu(e);super({provider:n,protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Hermes has no provider-side leader-injection mechanism; the seed prompt carries lmctl's leader instructions."},binary:"hermes",seedArgs:[],resumeTemplate:"hermes --yolo --resume {{session_id}}",startTemplate:"hermes",transport:async(r,s)=>cn(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:Qk(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=Jg(e)}async openSession(e){return Rn({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:Qk(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await sH(e,{recursive:!0});let r=[];if(n?.effort){let i="hermes has no ACP-level effort surface";X({event:"hermes_effort_ignored",provider:this.name,effort:n.effort,reason:i}),r.push(`hermes seed ignored effort=${n.effort}: ${i}`)}let s;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}s=await this.sendTurn(n?.prompt??ce,{sessionId:"",cwd:e,env:n?.env,signal:n?.signal,model:n?.model})}catch(i){return{success:!1,error:`hermes ACP seed failed: ${i instanceof Error?i.message:String(i)}`}}return oH(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(X({event:"hermes_seed_contract_violation",provider:this.name,session_id:s.sessionId,reason:"session/new did not return a UUID session id"}),{success:!1,error:`hermes ACP session/new did not return a UUID session id (got ${JSON.stringify(s.sessionId)})`})}}});import{readdir as Zk,rm as lH,stat as cH}from"node:fs/promises";import{join as Yg}from"node:path";function Qg(t){return typeof t.content=="string"?t.content:Array.isArray(t.content)?t.content.filter(e=>e.type==="text"&&e.text).map(e=>e.text).join(" "):""}function eR(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var Pu,tR=M(()=>{"use strict";We();Pu=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||Yg(ae,".pi","agent","sessions")}getWatchPaths(){return[{directory:this.baseDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[];for(let n of await this.listSessionFiles())try{let r=await this.extractSummary(n);r&&e.push(r)}catch{}return e}async listSessionFiles(){let e;try{e=await Zk(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=Yg(this.baseDir,r);try{if(!(await cH(s)).isDirectory())continue;for(let i of await Zk(s))i.endsWith(".jsonl")&&n.push(Yg(s,i))}catch{}}return n}async readHeader(e){for await(let n of Ae(e))return n.type==="session"?n:null;return null}async extractSummary(e){let n=await this.readHeader(e);if(!n)return null;let r=await $e(e),s,i,o,a=0,l=0,c=0,u=0,d=0,m=0,p=0,f;for await(let g of Ae(e)){if(g.type==="model_change"&&g.provider&&g.modelId){s=`${g.provider}/${g.modelId}`;continue}if(g.type!=="message"||!g.message)continue;let h=g.message;if(h.provider&&h.model&&(s=`${h.provider}/${h.model}`),h.role==="user"){let y=Qg(h).trim();y&&(i||(i=Q(y,80)),o=Q(y,80)),a++}else if(h.role==="assistant"){a++;let y=h.usage;y&&(l+=y.input??0,c+=y.cacheRead??0,u+=y.cacheWrite??0,d+=y.output??0,m+=y.reasoning??0,p=y.input??0,f={inputTokens:y.input,cachedInputTokens:y.cacheRead,cacheWriteInputTokens:y.cacheWrite,outputTokens:y.output,reasoningOutputTokens:y.reasoning,totalTokens:y.totalTokens})}}return{provider:"pi",sessionId:n.id,cwd:n.cwd??"(unknown)",createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:s,startCommand:"pi",firstUserMessage:i,lastUserMessage:o,messageCount:a,filePath:e,totalInputTokens:l,totalCachedInputTokens:c,totalCacheWriteInputTokens:u,totalOutputTokens:d,totalReasoningOutputTokens:m,lastInputTokens:p,lastTokenUsage:f}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=await this.extractSummary(n);if(!r)return null;let s=[],i=r.model;for await(let o of Ae(n)){if(o.type==="model_change"&&o.provider&&o.modelId){i=`${o.provider}/${o.modelId}`;continue}if(o.type!=="message"||!o.message)continue;let a=o.message;a.provider&&a.model&&(i=`${a.provider}/${a.model}`);let l=a.timestamp?new Date(a.timestamp):r.modifiedAt;if(a.role==="user")s.push({role:"user",timestamp:l,content:Qg(a)});else if(a.role==="assistant"&&Array.isArray(a.content))for(let c of a.content)c.type==="text"&&c.text?s.push({role:"assistant",timestamp:l,content:c.text,model:i}):c.type==="thinking"&&c.thinking?s.push({role:"thinking",timestamp:l,content:c.thinking}):c.type==="toolCall"&&s.push({role:"tool_use",timestamp:l,content:eR(c.arguments),toolName:c.name??"tool",toolInput:eR(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:Qg(a),toolName:a.toolName,toolCallId:a.toolCallId})}return{...r,model:i,messages:s}}async resolveSessionPath(e){let n=`_${e}.jsonl`,r=[];for(let s of await this.listSessionFiles()){if(s.endsWith(n))return s;s.split("_").pop()?.replace(/\.jsonl$/,"")?.startsWith(e)&&r.push(s)}return r.length===1?r[0]:null}async deleteSession(e){let n=await this.resolveSessionPath(e);return n?(await lH(n,{force:!0}),!0):!1}}});function eh(t){return new Zg(t)}var Zg,uH,th=M(()=>{"use strict";tR();at();Qe();kn();Og();Zg=class extends be{constructor(e){super({provider:new Pu(e),protocol:{transport:"print",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append",leaderSetupHint:"pi uses one-shot print turns; no streaming events are available."},binary:"pi",seedArgs:["-p",ce],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:uH})}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}manualSeedHint(e){return{launchCommand:`cd ${e} && pi`,postLaunchNote:"Send the lmctl seed instruction, wait for the session file to write, then exit.",lsCommand:`lmctl ls --provider pi --sessiondir ${e}`}}},uH=Au({label:"pi",buildArgs:(t,e)=>{let n=[...e.sessionId?["--session",e.sessionId]:[],"-p",t];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>qe("pi",t,e.permissionMode??"yolo")})});import{createHash as dH}from"node:crypto";import{existsSync as mH,mkdirSync as rh,readFileSync as pH,renameSync as fH,rmdirSync as cR,statSync as gH,writeFileSync as hH}from"node:fs";import{dirname as ah,join as nR,resolve as nh}from"node:path";function yH(t){return dH("sha256").update(t).digest("hex").slice(0,8)}function _H(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function vH(t,e){let n=e?.prompt??"",r=/\bYou are alias\s+([A-Za-z][A-Za-z0-9_-]*)\b/.exec(n);return r!==null?r[1]:t.split(/[\\/]/).filter(Boolean).pop()??"session"}function uR(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Du(t){return Math.max(1,Math.ceil(t.length/4))}function Pi(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return nh(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?nR(ah(nh(n)),".lmctl-claude-mock","sessions.json"):nR(nh(t),".lmctl-claude-mock","sessions.json")}function rR(){return{schemaVersion:1,sessions:{}}}function Sa(t){if(!mH(t))return rR();try{let e=JSON.parse(pH(t,"utf8")),n=typeof e.sessions=="object"&&e.sessions!==null?e.sessions:{},r=typeof e.script=="object"&&e.script!==null?e.script:void 0,s=typeof e.scriptContains=="object"&&e.scriptContains!==null?e.scriptContains:void 0,i=sh(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...i!==void 0?{defaultDelayMs:i}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return rR()}}function dR(t,e){rh(ah(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;hH(n,`${JSON.stringify(e,null,2)}
2312
+ `,"utf8"),fH(n,t)}function EH(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function TH(t){let e=`${t}.lock`;rh(ah(t),{recursive:!0});let n=Date.now()+sR;for(;;)try{return rh(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-gH(e).mtimeMs>bH){try{cR(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${sR}ms: ${e}`);EH(wH)}}function SH(t){try{cR(t)}catch{}}function mR(t,e){let n=TH(t);try{return e()}finally{SH(n)}}function kH(t){return{...t,timestamp:t.timestamp.toISOString()}}function RH(t){return{...t,timestamp:new Date(t.timestamp)}}function IH(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(kH)}}function pR(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(RH)}}function Fu(t,e=process.cwd()){let n=Mi.get(t);if(n!==void 0)return n;let s=Sa(Pi(e)).sessions[t];if(s===void 0)return;let i=pR(s);return Mi.set(i.sessionId,i),i}function iR(t){Mi.set(t.sessionId,t);let e=Pi(t.cwd);mR(e,()=>{let n=Sa(e);n.sessions[t.sessionId]=IH({...t,filePath:e}),dR(e,n)})}function xH(t,e=process.cwd()){let n=Pi(e);return mR(n,()=>{let r=Sa(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],dR(n,r)),s})}function AH(){let t=Sa(Pi()),e=Object.values(t.sessions).map(pR);for(let n of e)Mi.set(n.sessionId,n);return e}function sh(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function oR(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=sh(t.delayMs);return{kind:"success",text:t.text,...e!==void 0?{delayMs:e}:{}}}if(t!==void 0&&typeof t.error=="string"&&typeof t.text!="string"){let e=sh(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function aR(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function CH(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=oR(n[t]??n[uR(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let i=oR(r[s]);if(i!==void 0)return i}}}function lR(t){return{provider:"ClaudeMock",sessionId:t.sessionId,cwd:t.cwd,createdAt:t.createdAt,modifiedAt:t.modifiedAt,messageCount:t.messages.length,filePath:t.filePath,cliVersion:"ClaudeMock/0",model:"claude-mock",totalInputTokens:t.totalInputTokens,totalOutputTokens:t.totalOutputTokens,lastTokenUsage:{totalTokens:t.totalInputTokens+t.totalOutputTokens}}}function lh(){return new oh}var Mi,bH,wH,sR,ih,oh,ch=M(()=>{"use strict";Mi=new Map;bH=5e3,wH=15,sR=1e4;ih=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of AH())e.set(n.sessionId,n);for(let n of Mi.values())e.set(n.sessionId,n);return[...e.values()].map(lR)}async loadSession(e){let n=Fu(e);return n===void 0?null:{...lR(n),messages:n.messages.slice()}}async resolveSessionPath(e){return Fu(e)?.filePath??null}async deleteSession(e){let n=Mi.delete(e),r=xH(e);return n||r}},oh=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new ih;discover(){return this.provider.discoverSessions()}load(e){return this.provider.loadSession(e)}resolvePath(e){return this.provider.resolveSessionPath(e)}delete(e){return this.provider.deleteSession(e)}getWatchPaths(){return[]}async seed(e,n){try{n?.onDispatch?.()}catch{}let r=_H(vH(e,n)),s=`mock-${r}-${yH(`${e}:${r}`)}`,i=new Date,o=Pi(e),a=Fu(s,e),l=n?.prompt??"ClaudeMock seed",c=Du(l),u={sessionId:s,cwd:e,filePath:o,createdAt:a?.createdAt??i,modifiedAt:i,messages:a?.messages.slice()??[],totalInputTokens:a?.totalInputTokens??0,totalOutputTokens:a?.totalOutputTokens??0};return u.messages.push({role:"user",timestamp:i,content:l}),u.messages.push({role:"assistant",timestamp:i,content:"ACK: ClaudeMock seeded"}),u.totalInputTokens+=c,u.totalOutputTokens+=Du("ACK: ClaudeMock seeded"),iR(u),{success:!0,sessionId:s}}resumeCommand(e){return`ClaudeMock --resume ${e}`}startCommand(){return"ClaudeMock"}manualSeedHint(e){return{launchCommand:`cd ${e} && ClaudeMock`,postLaunchNote:"ClaudeMock is a hermetic test provider; no manual seed is required.",lsCommand:`lmctl ls --provider ClaudeMock --sessiondir ${e}`}}forkHint(e){return"ClaudeMock does not support fork."}async fork(e,n){return{success:!1,error:"ClaudeMock does not support fork."}}async sendTurn(e,n){let r=Date.now(),s=Fu(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let i=new Date,o=Sa(Pi(n.cwd)),a=CH(e,o),l=a?.delayMs??o.defaultDelayMs;if(a?.kind==="error")throw await aR(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${uR(e)}`;return s.messages.push({role:"user",timestamp:i,content:e}),s.messages.push({role:"assistant",timestamp:i,content:c,model:n.model??"claude-mock"}),s.modifiedAt=i,s.totalInputTokens+=Du(e),s.totalOutputTokens+=Du(c),iR(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await aR(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function rr(t){let e=[Wf({museDataHome:t?.museDataHome}),Qf({miniplayerHome:t?.miniplayerHome}),tg({claudeDir:t?.claudeDir}),og({codexDir:t?.codexDir,codeDir:t?.codeDir}),dg({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),gg({copilotDir:t?.copilotDir}),_g({dbPaths:t?.opencodeDbPaths}),Tg({kimiHome:t?.kimiHome}),Rg({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Ag({qwenDir:t?.qwenDir}),Mg({agyDir:t?.agyDir}),qg({dshHome:t?.dshHome}),zg({hermesHome:t?.hermesHome}),eh({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(lh()),e}var uh=M(()=>{"use strict";qf();qf();Zf();Zf();ng();ag();mg();hg();vg();Sg();Ig();Cg();Pg();Xg();Kg();th();ch();ng();ag();mg();hg();vg();Sg();Ig();Cg();Pg();Xg();Kg();th();ch()});var fR,gR,hR=M(()=>{"use strict";fR=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],gR=["agy","pi","lmplayer"]});var vR={};Mn(vR,{BUNDLE_CAPABLE_PROVIDERS:()=>fR,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>gR,ProviderRegistry:()=>pa,TransportConnectionError:()=>Ce,TransportError:()=>Lr,TransportJsonError:()=>Bc,TransportProcessError:()=>Me,TransportRpcError:()=>na,_resetDefaultRegistryForTests:()=>PH,bundleSupportedProviders:()=>Uu,canUsePersistentSession:()=>Kc,chat:()=>ka,countTokens:()=>FH,createAdapterRegistry:()=>er,createAllAdapters:()=>rr,deleteSession:()=>gh,listSessions:()=>fh,openBundleSession:()=>dh,openConversation:()=>mh,seed:()=>ph});import{accessSync as NH,constants as OH,statSync as LH}from"node:fs";import{join as MH,delimiter as yR}from"node:path";function qr(){return $u===null&&($u=er(rr())),$u}function PH(){$u=null}function ju(t,e){Ac(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function ka(t){let e=t.registry??qr(),n=ju(e,t.provider),r={sessionId:t.sessionId,cwd:t.cwd,env:t.env,onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal,timeoutMs:t.timeoutMs,model:t.model,effort:t.effort,progPath:t.progPath,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,requireResume:t.requireResume,bundleSession:t.bundleSession},s=t.bundleSession===void 0?await Qc(n,{...r,execution:"per-turn",requireResume:t.requireResume??!1}):void 0,i;try{i=s?await s.sendTurn(t.prompt,{onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal}):await n.sendTurn(t.prompt,r)}finally{await s?.close()}return{text:i.text,...i.usage?{usage:i.usage}:{},sessionId:i.sessionId,durationMs:i.durationMs,stopReason:i.stopReason,numTurns:i.numTurns,status:i.status,stalledAfterMs:i.stalledAfterMs,...i.warnings!==void 0?{warnings:i.warnings}:{}}}function Uu(t){return(t??qr()).getAllAdapters().filter(n=>vn(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function dh(t){let e=t.registry??qr(),n=ju(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Uu(e).join(", ")})`);return Qc(n,{...t,execution:"persistent"})}async function mh(t){return Qc(ju(t.registry??qr(),t.provider),t)}async function ph(t){let e=t.registry??qr(),n=ju(e,t.provider);if(n.seedBinary==="agy"){let u=t.env??process.env,d=u.PATH??u.Path??"/usr/bin:/bin",m=yR===";"?["",...(u.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!d.split(yR).some(f=>{try{return m.some(g=>{try{let h=MH(f||t.cwd,"agy"+g);return NH(h,OH.X_OK),LH(h).isFile()}catch{return!1}})}catch{return!1}}))return{success:!1,error:"Failed to spawn agy: executable not found on PATH",errorCode:"ENOENT"}}if(t.signal?.aborted)return{success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"};let r=await _R(e,t.provider,t.cwd);if(t.signal?.aborted)return{success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"};let s=await n.seed(t.cwd,{...t.env?{env:t.env}:{},...t.signal?{signal:t.signal}:{},onDispatch:t.onDispatch,model:t.model,effort:t.effort,prompt:t.prompt}),i;try{i=s.usage}catch{}let o={usage:i},a=s.warnings!==void 0&&s.warnings.length>0?{warnings:s.warnings}:{};if(s.success&&s.sessionId)return{success:!0,sessionId:s.sessionId,...a,...o};if(!s.success&&(s.errorCode==="ENOENT"||s.errorCode==="ABORT_ERR"))return{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...o};let l=await _R(e,t.provider,t.cwd),c=DH(r,l);return s.success?c?{success:!0,sessionId:c,...a,...o}:{success:!0,...a,...o}:(c&&await n.delete?.(c).catch(()=>{}),{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...o})}async function _R(t,e,n){let r=await t.listAll({provider:e,workspace:n}),s=new Map;for(let i of r)s.set(i.sessionId,i.modifiedAt);return s}function DH(t,e){let n=[];for(let r of e.keys())t.has(r)||n.push(r);return n.length===1?n[0]:void 0}async function fh(t={}){return(t.registry??qr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function gh(t,e,n=qr()){return n.deleteSession(e,t)}async function FH(t){let n=await(t.registry??qr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,i=n.totalCacheWriteInputTokens??0,o=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:i,output:o,reasoningOutput:a,total:r+s+i+o+a,lastTurn:n.lastTokenUsage}}var $u,sr=M(()=>{"use strict";$r();_i();Lf();uh();$r();Lf();uh();hR();Mr();$u=null});function yh(t){return vn(t)&&jH.has(t)}function Ra(){return hh===null&&(hh=er(rr())),hh}function ER(t,e,n={}){if(!yh(t))return null;try{let r=Ra().getAdapter?.(t);if(r===void 0)return null;let s=r.resumeCommand(e).trim();if(s.length===0)return null;let i=s.split(/\s+/),o=t==="codex"&&n.isLead===!0?lu({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?$H[t]?.(n.model):void 0;return n.model!==void 0&&n.model.trim().length>0&&a===void 0&&n.onModelIgnored?.({provider:t,model:n.model,reason:`${t} terminal resume does not implement per-session model selection`}),[...i,...a??[],...o,...bR[t]??[]]}catch{return null}}async function TR(t,e){try{let n=Ra().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function SR(t){try{return Ra().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function Xr(t,e){return Ra().getSession(t,e)}async function _h(t){return(await Ra().resolveSessions(t)).map(n=>n.provider.name)}var bR,$H,jH,wR,hh,Di=M(()=>{"use strict";_i();sr();zf();bR={muse:["--yolo"],claude:["--dangerously-skip-permissions"],codex:["--dangerously-bypass-approvals-and-sandbox"],gemini:["-y"],copilot:["--yolo"],opencode:[],qwen:["--approval-mode","yolo"],agy:[],pi:[],lmplayer:["--auto"],kimi:[],hermes:[]},$H={muse:t=>["--model",t],claude:t=>["--model",t],codex:t=>["--model",t],gemini:t=>["--model",t],opencode:t=>["--model",t],qwen:t=>["--model",t],agy:t=>["--model",t],lmplayer:t=>["--model",t],kimi:t=>["--model",t],hermes:t=>["--model",t],pi:t=>["--model",t]},jH=new Set(Object.keys(bR)),wR=/^[\w.:-]+$/;hh=null});import{homedir as UH}from"node:os";function kR(t,e){let n=new Set;return{text:t.replace(BH,(s,i)=>{let o=i.trim(),a=HH[o];return a===void 0?(n.add(o),s):a(e)}),unknownNames:[...n].sort()}}function RR(t){return{workdir:t.workdir,teamfile:t.teamfile,date:WH(t.date)}}function WH(t){return t.toISOString().slice(0,10)}var HH,BH,IR=M(()=>{"use strict";wn();HH={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>zo(t.teamfile),home:()=>UH(),date:t=>t.date},BH=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});import{existsSync as qH,mkdirSync as XH,readFileSync as GH,renameSync as JH,unlinkSync as VH,writeFileSync as zH}from"node:fs";import{homedir as AR}from"node:os";import{dirname as Ia,join as _t,resolve as KH}from"node:path";function $i(t,e,n){let r=Ia(KH(n)),s=new Set,i=new Map;for(let o of e.members){if(s.add(o.provider),o.teamfile!==void 0)continue;let a=o.sessiondir??r,l=i.get(a)??new Set;l.add(o.provider),i.set(a,l)}for(let[o,a]of i.entries())An(_t(o,".mcp.json"),"mcpServers",[Gr(),Jr()]),a.has("opencode")&&An(_t(o,".opencode","opencode.json"),"mcp",[CR(),NR()]),a.has("kimi")&&An(_t(o,".kimi-code","mcp.json"),"mcpServers",[Gr(),Jr()]);for(let o of s)tB(o)}function QH(t=vh??AR()){return _t(t,".copilot","mcp-config.json")}function ZH(t,e){Zt.mkdirSync(Ia(t),{recursive:!0});let n=_t(Ia(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Zt.writeFileSync(n,`${JSON.stringify(e,null,2)}
2313
+ `,"utf8"),Zt.renameSync(n,t)}catch(r){try{Zt.unlinkSync(n)}catch{}throw r}}function eB(t,e){Zt.mkdirSync(Ia(t),{recursive:!0});let n=_t(Ia(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Zt.writeFileSync(n,e,"utf8"),Zt.renameSync(n,t)}catch(r){try{Zt.unlinkSync(n)}catch{}throw r}}function An(t,e,n){try{if(!Zt.existsSync(t))return;let r=JSON.parse(Zt.readFileSync(t,"utf8"));if(!Fi(r)||!Fi(r[e]))return;let s={...r[e]},i=[];for(let{name:o,shouldRemove:a}of n)Object.prototype.hasOwnProperty.call(s,o)&&a(s[o])&&(delete s[o],i.push(o));if(i.length===0)return;r[e]=s,ZH(t,r),X({event:"mcp_cleanup",path:t,removed:i})}catch{}}function Gr(){return{name:Bu,shouldRemove:cB}}function CR(){return{name:Bu,shouldRemove:uB}}function Jr(){return{name:Hu,shouldRemove:aB}}function NR(){return{name:Hu,shouldRemove:lB}}function tB(t){let e=vh??AR();switch(t){case"copilot":An(QH(e),"mcpServers",[Gr(),Jr()]);return;case"claude":An(_t(e,".claude.json"),"mcpServers",[Gr(),Jr()]);return;case"gemini":An(_t(e,".gemini","settings.json"),"mcpServers",[Gr(),Jr()]);return;case"qwen":An(_t(e,".qwen","settings.json"),"mcpServers",[Gr(),Jr()]);return;case"agy":An(_t(e,".gemini","antigravity-cli","settings.json"),"mcpServers",[Gr(),Jr()]);return;case"opencode":An(_t(e,".config","opencode","opencode.json"),"mcp",[CR(),NR()]);return;case"kimi":An(_t(vh===void 0?process.env.KIMI_CODE_HOME??_t(e,".kimi-code"):_t(e,".kimi-code"),"mcp.json"),"mcpServers",[Gr(),Jr()]);return;case"codex":nB(_t(e,".codex","config.toml"));return;default:return}}function nB(t){try{if(!Zt.existsSync(t))return;let e=Zt.readFileSync(t,"utf8"),n=rB(e);if(n===null)return;let r=e.split(/\n/),s=[],i=new Set,o=!1,a;for(let l of r){let c=OR(l);if(c===null)return;if(c!==void 0){if(xR(c,n)){o=!0,a=c[1],i.add(a);continue}o=!1,a=void 0,s.push(l);continue}if(o){if(/^\s*(?:#.*)?$/.test(l)){s.push(l);continue}a!==void 0&&i.add(a);continue}let u=iB(l);if(u===null)return;if(u!==void 0&&xR(u,n)){i.add(u[1]);continue}s.push(l)}if(i.size===0)return;eB(t,s.join(`
2314
+ `)),X({event:"mcp_cleanup",path:t,removed:[...i]})}catch{}}function xR(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function rB(t){let e=new Map,n;for(let s of t.split(/\n/)){let i=OR(s);if(i===null)return null;if(i!==void 0){n=i;continue}let o=s.indexOf("=");if(o<0)continue;let a=s.slice(0,o).trim(),l=s.slice(o+1).trim(),c=sB(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==Hu&&c[1]!==Bu)continue;let u=e.get(c[1])??{};if(c[2]==="command"){let d=LR(l);if(d===null)return null;u.command=d}else if(c[2]==="args"){let d=oB(l);if(d===null)return null;u.args=d}e.set(c[1],u)}let r=new Set;for(let[s,i]of e.entries())s===Hu&&PR(i.command,i.args)&&r.add(s),s===Bu&&DR(i.command,i.args)&&r.add(s);return r}function sB(t,e){if(t.startsWith("mcp_servers"))return Wu(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=Wu(t);return n===null?null:[...e,...n]}function OR(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:Wu(e[1])}function iB(t){let e=t.indexOf("=");if(e<0)return;let n=t.slice(0,e).trim();if(!(n.length===0||!n.startsWith("mcp_servers")))return Wu(n)}function Wu(t){let e=[],n=0,r=()=>{for(;n<t.length&&/\s/.test(t[n]);)n+=1};for(;n<t.length;){if(r(),n>=t.length)return null;if(t[n]==='"'){n+=1;let s="",i=!1;for(;n<t.length;){let o=t[n];if(o==="\\"){if(n+1>=t.length)return null;s+=t[n+1],n+=2;continue}if(o==='"'){n+=1,i=!0;break}s+=o,n+=1}if(!i)return null;e.push(s)}else{let s=n;for(;n<t.length&&/[A-Za-z0-9_-]/.test(t[n]);)n+=1;if(n===s)return null;e.push(t.slice(s,n))}if(r(),n>=t.length)break;if(t[n]!==".")return null;n+=1}return e.length>0?e:null}function LR(t){let e=MR(t).trim();if(e.startsWith('"'))try{let n=JSON.parse(e);return typeof n=="string"?n:null}catch{return null}return e.startsWith("'")&&e.endsWith("'")&&e.length>=2?e.slice(1,-1):null}function oB(t){let e=MR(t).trim();if(!e.startsWith("[")||!e.endsWith("]"))return null;let n=e.slice(1,-1).trim();if(n.length===0)return[];let r=n.split(",").map(s=>LR(s.trim()));return r.some(s=>s===null)?null:r}function MR(t){let e;for(let n=0;n<t.length;n+=1){let r=t[n];if(e!==void 0){if(e==='"'&&r==="\\"){n+=1;continue}r===e&&(e=void 0);continue}if(r==='"'||r==="'"){e=r;continue}if(r==="#")return t.slice(0,n)}return t}function aB(t){return Fi(t)?t.type==="stdio"&&typeof t.command=="string"&&PR(t.command,t.args):!1}function lB(t){return!Fi(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&$R(t.command[0])&&t.command[1]==="mcp"||t.command.length===3&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&typeof t.command[2]=="string"&&FR(t.command[0],[t.command[1],t.command[2]])}function cB(t){return Fi(t)?t.type==="stdio"&&DR(t.command,t.args):!1}function uB(t){return!Fi(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&jR(t.command[0])&&t.command[1]==="mcp"}function PR(t,e){return $R(t)&&UR(e)||FR(t,e)}function DR(t,e){return jR(t)&&UR(e)}function FR(t,e){return dB(t)&&Array.isArray(e)&&e.length===2&&mB(e[0])&&e[1]==="mcp"}function $R(t){return typeof t=="string"&&bh(t)==="lmctl"}function jR(t){return typeof t=="string"&&bh(t)==="lmctl0"}function dB(t){if(typeof t!="string")return!1;let e=bh(t).toLowerCase();return e==="node"||e==="node.exe"}function mB(t){if(typeof t!="string")return!1;let e=t.replace(/\\/g,"/");return e==="lmctl-cli/dist/index.js"||e.endsWith("/lmctl-cli/dist/index.js")}function bh(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function UR(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Fi(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Hu,Bu,YH,Zt,vh,qu=M(()=>{"use strict";ke();Hu="lmctl",Bu="lmctl0",YH={existsSync:qH,mkdirSync:XH,readFileSync:GH,writeFileSync:zH,renameSync:JH,unlinkSync:VH},Zt=YH});import{createHash as pB}from"node:crypto";import{accessSync as fB,constants as HR,existsSync as gB,readFileSync as Eh,realpathSync as Th,statSync as hB,writeFileSync as BR}from"node:fs";import{dirname as Ns,resolve as qR}from"node:path";function JR(t){return EE(t,Xu!==void 0?{snapshot:Xu}:{})}function VR(t){return TE(t,Xu!==void 0?{snapshot:Xu}:{})}async function bB(t,e,n){let r=t.filter(i=>i.teamfile===void 0&&i.provider.trim().toLowerCase()==="opencode"&&i.model!==void 0&&i.model.length>0);return(await Promise.all(r.map(async i=>({member:i,result:await vB({cwd:i.sessiondir??e,model:i.model,...i.effort!==void 0?{effort:i.effort}:{},...n!==void 0?{env:n}:{}})})))).flatMap(({member:i,result:o})=>o.status==="rejected"?[`[${i.alias}] ${o.option}="${o.value}" rejected by opencode: ${o.error}`]:[])}function wB(t,e){let n=Ns(e),r=new Set,s=[];for(let i of t){if(i.teamfile!==void 0)continue;let o=i.sessiondir??n,a=qR(o);if(r.has(a))continue;let l=EB(a);l!==void 0&&(r.add(a),s.push(`${i.alias}: sessiondir ${a} is not writable (seed would fail: ${l}) \u2014 fix permissions or set a writable sessiondir`))}return s}function EB(t){try{if(ji.existsSync(t)){if(!ji.statSync(t).isDirectory())return"ENOTDIR";ji.accessSync(t,HR.W_OK);return}let e=SB(t);if(e===void 0)return;if(!ji.statSync(e).isDirectory())return"ENOTDIR";ji.accessSync(e,HR.W_OK);return}catch(e){return kB(e)??"permission check failed"}}function TB(t){let e=qR(t);try{return Th(e)}catch{return e}}function SB(t){let e=t;for(;;){try{if(ji.existsSync(e))return e}catch{return}let n=Ns(e);if(n===e)return;e=n}}function kB(t){if(typeof t=="object"&&t!==null&&"code"in t){let e=t.code;if(typeof e=="string"&&e.length>0)return e}}async function RB(t,e){let n;try{n=await he(e,l=>It(t,l))}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let r;try{r=Ht(n)}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let s=qp(r,Ns(n));e.stderr.write(`notice: checking teamfile and models ...
2315
+ `);let i=Fp(r.members,{agyModelsRunner:XR,codexModelsRunner:GR});i.push(...await JR(r.members)),s.push(...await VR(r.members));let o=Eh(n,"utf8"),a=kR(o,RR({workdir:Ns(n),teamfile:n,date:new Date})).unknownNames;a.length>0&&i.push(`unknown template placeholder${a.length===1?"":"s"}: ${a.map(l=>`{{${l}}}`).join(", ")}`),i.push(...mf(r.members,Ns(n))),i.push(...wB(r.members,n)),i.push(...await bB(r.members,Ns(n),e.env));for(let l of s)e.stderr.write(`error: ${l.field}: ${l.message}
2316
+ `);for(let l of r.members)Sh([l],e),l.session!==void 0&&l.session.length<Ui&&i.push(`${l.alias}: sessionid is shorter than ${Ui} chars; run lmctl seed to refresh it`);return{ok:!0,result:{config:r,absTeamfile:n,errors:s,warnings:i}}}function AB(t,e){let n=IB.exec(t);if(n){let s=e.get(n[1].toLowerCase());if(s!==void 0)return{alias:s,message:n[2]}}let r=xB.exec(t);if(r){let s=e.get(r[1].toLowerCase());if(s!==void 0)return{alias:s,message:r[2]}}return{alias:"",message:t}}async function zR(t,e){let n=await RB(t,e);if(!n.ok)return{status:"error",errors:[{alias:"",message:n.message}],warnings:[],counts:{errors:1,warnings:0}};let{config:r,errors:s,warnings:i}=n.result,o=new Map(r.members.map(c=>[c.alias.toLowerCase(),c.alias])),a=s.map(c=>({alias:o.get(c.field.toLowerCase())??"",message:c.message})),l=i.map(c=>AB(c,o));for(let c of l)e.stderr.write(`warning: ${c.alias?`${c.alias}: `:""}${c.message}
2317
2317
  `);return e.stderr.write(`notice: ${a.length} error${a.length===1?"":"s"}, ${l.length} warning${l.length===1?"":"s"}
2318
- `),{status:a.length>0?"error":"ok",errors:a,warnings:l,counts:{errors:a.length,warnings:l.length}}}function xB(t,e,n,r){if(e.preamble===void 0)return t.toLowerCase()!=="lead"?void 0:tu({teamfile:n,teamfileContent:r});if(typeof e.preamble=="string")return e.preamble;for(let[s,i]of Object.entries(e.preamble))if(s.toLowerCase()===t.toLowerCase())return i}async function KR(t,e,n={}){let r;try{r=await he(e,_=>It(t,_))}catch(_){return ir(e,`${t}: ${_ instanceof Error?_.message:String(_)}`)}let s;try{s=Th(r)}catch(_){return ir(e,`${t}: ${_ instanceof Error?_.message:String(_)}`)}let i=Ns(r),o;try{o=Ht(r)}catch(_){return ir(e,`${t}: ${_ instanceof Error?_.message:String(_)}`)}let a=Eh(r,"utf8"),l=a.split(`
2319
- `),c=a,u=OB(l),d=qp(o,i);if(d.length>0){Sh(o.members,e);for(let _ of d)e.stderr.write(`error: ${_.field}: ${_.message}
2318
+ `),{status:a.length>0?"error":"ok",errors:a,warnings:l,counts:{errors:a.length,warnings:l.length}}}function CB(t,e,n,r){if(e.preamble===void 0)return t.toLowerCase()!=="lead"?void 0:tu({teamfile:n,teamfileContent:r});if(typeof e.preamble=="string")return e.preamble;for(let[s,i]of Object.entries(e.preamble))if(s.toLowerCase()===t.toLowerCase())return i}async function KR(t,e,n={}){let r;try{r=await he(e,_=>It(t,_))}catch(_){return ir(e,`${t}: ${_ instanceof Error?_.message:String(_)}`)}let s;try{s=Th(r)}catch(_){return ir(e,`${t}: ${_ instanceof Error?_.message:String(_)}`)}let i=Ns(r),o;try{o=Ht(r)}catch(_){return ir(e,`${t}: ${_ instanceof Error?_.message:String(_)}`)}let a=Eh(r,"utf8"),l=a.split(`
2319
+ `),c=a,u=MB(l),d=qp(o,i);if(d.length>0){Sh(o.members,e);for(let _ of d)e.stderr.write(`error: ${_.field}: ${_.message}
2320
2320
  `);return 1}try{$i(e,o,r)}catch{}Sh(o.members,e),e.stderr.write(`notice: checking teamfile and models ...
2321
2321
  `);for(let _ of Fp(o.members,{agyModelsRunner:XR,codexModelsRunner:GR}))e.stderr.write(`warning: ${_}
2322
2322
  `);for(let _ of await JR(o.members))e.stderr.write(`warning: ${_}
@@ -2328,77 +2328,77 @@ ${Oe(p,{provider:"dsh"})}`:"(no output captured)")))},Uk);s.stdout?.on("data",p=
2328
2328
  `);let E=tT(e,N=>`${_.alias}: still launching (${N}s elapsed)
2329
2329
  `),R=p?l.map((N,O)=>O===u.get(_.alias.toLowerCase())?N.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,""):N).join(`
2330
2330
  `):l.join(`
2331
- `),S=xB(_.alias,n,r,R),I;try{I=HE(r,_.alias)}catch(N){return E.stop(),ir(e,N instanceof Error?N.message:String(N))}try{let N,O;try{N=await hB({env:e.env,signal:n.signal,onDispatch:()=>{O??=Yo(e,{provider:_.provider,cwd:v,modelRequested:_.model??null,sessionId:""},"operator",{teamfile:r,alias:_.alias})},provider:_.provider,cwd:v,..._.model!==void 0?{model:_.model}:{},..._.effort!==void 0?{effort:_.effort}:{},...S!==void 0?{prompt:S}:{}}),await O?.finish({status:n.signal?.aborted?"cancelled":N.error!==void 0||!N.sessionId||N.sessionId.length<Ui?li(N.error??"",N.errorCode==="ABORT_ERR"):"ok",sessionId:N.sessionId,usage:Kn(N)})}catch(x){throw await O?.finish(Qo(x,{aborted:n.signal?.aborted||x?.code==="ABORT_ERR"})),x}finally{E.stop()}if(n.signal?.aborted)return ir(e,"Seed cancelled during dispatch.");for(let x of N.warnings??[])e.stderr.write(`warning: ${_.alias}: ${x}
2331
+ `),S=CB(_.alias,n,r,R),I;try{I=HE(r,_.alias)}catch(N){return E.stop(),ir(e,N instanceof Error?N.message:String(N))}try{let N,O;try{N=await _B({env:e.env,signal:n.signal,onDispatch:()=>{O??=Yo(e,{provider:_.provider,cwd:v,modelRequested:_.model??null,sessionId:""},"operator",{teamfile:r,alias:_.alias})},provider:_.provider,cwd:v,..._.model!==void 0?{model:_.model}:{},..._.effort!==void 0?{effort:_.effort}:{},...S!==void 0?{prompt:S}:{}}),await O?.finish({status:n.signal?.aborted?"cancelled":N.error!==void 0||!N.sessionId||N.sessionId.length<Ui?li(N.error??"",N.errorCode==="ABORT_ERR"):"ok",sessionId:N.sessionId,usage:Kn(N)})}catch(x){throw await O?.finish(Qo(x,{aborted:n.signal?.aborted||x?.code==="ABORT_ERR"})),x}finally{E.stop()}if(n.signal?.aborted)return ir(e,"Seed cancelled during dispatch.");for(let x of N.warnings??[])e.stderr.write(`warning: ${_.alias}: ${x}
2332
2332
  `);if(N.error!==void 0||N.sessionId===void 0||N.sessionId.length<Ui){let x=`provider did not report a sessionid; no new session was found for ${v} (possible provider workspace/cwd mismatch)`;return e.stderr.write(`error: ${_.alias}: seed failed${N.error!==void 0?`: ${N.error}`:`; ${x}`}
2333
2333
  `),1}let A=u.get(_.alias.toLowerCase());if(A===void 0)return e.stderr.write(`error: ${_.alias}: could not find matching _MEMBER_ line to update
2334
- `),1;let w=wB(v),T=wh(l[A],"sessionid",N.sessionId);T=wh(T,"sessiondir",w);let k=_.model;if(_.model===void 0){let x;try{x=(await Xr(N.sessionId,_.provider))?.model}catch{x=void 0}x!==void 0&&x.length>0&&(T=wh(T,"model",x),k=x)}if((p||n.guardFile)&&Eh(r,"utf8")!==c)return ir(e,`Teamfile changed during seeding; new session ${N.sessionId} was not attached. Existing bindings preserved.`);l[A]=T,f+=1,c=l.join(`
2334
+ `),1;let w=TB(v),T=wh(l[A],"sessionid",N.sessionId);T=wh(T,"sessiondir",w);let k=_.model;if(_.model===void 0){let x;try{x=(await Xr(N.sessionId,_.provider))?.model}catch{x=void 0}x!==void 0&&x.length>0&&(T=wh(T,"model",x),k=x)}if((p||n.guardFile)&&Eh(r,"utf8")!==c)return ir(e,`Teamfile changed during seeding; new session ${N.sessionId} was not attached. Existing bindings preserved.`);l[A]=T,f+=1,c=l.join(`
2335
2335
  `),BR(r,c,"utf8"),n.onSeeded?.({alias:_.alias,provider:_.provider,sessionid:N.sessionId,sessiondir:w,...k!==void 0?{model:k}:{}}),e.stdout.write(`${_.alias}: seeded ${N.sessionId} provider=${_.provider} sessiondir=${w} model=${k?JSON.stringify(k):"default (not reported)"}
2336
2336
  `)}finally{I()}}let h=l.join(`
2337
- `),y=PB(h,Th(r));y!==h&&BR(r,y,"utf8"),f===0&&e.stdout.write(`no members needed seeding
2338
- `);let b=new Date().toISOString();try{await he(e,_=>{NB(_,{teamfilePath:s,name:o.name,rawText:y,now:b})})}catch(_){return ir(e,_ instanceof Error?_.message:String(_))}return 0}function AB(t){return dB("sha256").update(t).digest("hex")}function CB(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:AB(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function NB(t,e){let n=Mc(e.rawText,e.teamfilePath);Jp(t,e.teamfilePath,n);let r=CB(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function OB(t){let e=new Map;for(let n=0;n<t.length;n+=1){let r=t[n];if(!/^\s*_MEMBER_\s+\S/.test(r))continue;let s=LB(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function LB(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function wh(t,e,n){let r=`${e}=${MB(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(i,o)=>`${o}${r}`):`${t.trimEnd()} ${r}`}function MB(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function PB(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
2337
+ `),y=FB(h,Th(r));y!==h&&BR(r,y,"utf8"),f===0&&e.stdout.write(`no members needed seeding
2338
+ `);let b=new Date().toISOString();try{await he(e,_=>{LB(_,{teamfilePath:s,name:o.name,rawText:y,now:b})})}catch(_){return ir(e,_ instanceof Error?_.message:String(_))}return 0}function NB(t){return pB("sha256").update(t).digest("hex")}function OB(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:NB(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function LB(t,e){let n=Mc(e.rawText,e.teamfilePath);Jp(t,e.teamfilePath,n);let r=OB(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function MB(t){let e=new Map;for(let n=0;n<t.length;n+=1){let r=t[n];if(!/^\s*_MEMBER_\s+\S/.test(r))continue;let s=PB(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function PB(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function wh(t,e,n){let r=`${e}=${DB(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(i,o)=>`${o}${r}`):`${t.trimEnd()} ${r}`}function DB(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function FB(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
2339
2339
  `),s=r>=0?t.slice(0,r):t,i=r>=0?t.slice(r+1):"";return s===n?t:s.startsWith("#teamfile:")?i.length>0?`${n}
2340
2340
  ${i}`:`${n}
2341
2341
  `:t.length>0?`${n}
2342
2342
  ${t}`:`${n}
2343
2343
  `}function ir(t,e){return t.stderr.write(`error: ${e}
2344
2344
  `),1}function Sh(t,e){for(let n of t)n.teamfile!==void 0&&e.stderr.write(`warning: member "${n.alias}" uses deprecated member-level teamfile=; cross-team calls now work at runtime without _CONNECT_
2345
- `)}var Ui,gB,hB,ji,yB,XR,GR,Xu,kB,RB,YR=M(()=>{"use strict";Uo();cf();wn();xc();pf();Nf();Up();Di();zn();Ts();IR();qu();Kp();Qe();Ui=5,gB={existsSync:pB,statSync:fB,accessSync:mB},hB=async t=>{let{seed:e}=await Promise.resolve().then(()=>(sr(),vR)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:Kn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:Kn(n),sessionId:n.sessionId}},ji=gB,yB=zc;kB=/^\[([^\]]+)\]\s+(.*)$/s,RB=/^([^:\s][^:]*):\s+(.*)$/s});function me(t){if(!gi(t))return B("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return B("cancelled","Context is closed")}function or(t){try{let e=t?.code;return e==="ENOENT"?"missing":e==="EACCES"||e==="EPERM"||e==="EISDIR"?"read":"schema"}catch{return"read"}}function lt(t,e){let n=r=>s=>{e?.(s,r),r==="stderr"&&s.startsWith("warning:")?t.onWarning(s):t.onProgress(s,r)};return{cwd:t.cwd,env:{...t.env,LMCTL_DB:t.dbPath},dal:t.dal,stdout:{write:n("stdout")},stderr:{write:n("stderr")}}}function ar(t){return dt.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var en=M(()=>{"use strict";Un();Qt();mt()});import{existsSync as DB}from"node:fs";import{resolve as xa}from"node:path";function FB(t,e){try{let n=me(t);if(n)return n;if(typeof e!="string"||!e)return B("invalid_argument","Teamfile must be a nonempty string");let r=Ht(xa(t.cwd,e));return fe({members:r.members.map(s=>({alias:s.alias,provider:s.provider,model:s.model,sessionid:s.session,sessiondir:s.sessiondir}))})}catch(n){return B(or(n),G(n))}}function $B(t,e,n){try{let r=me(t);if(r)return r;if(typeof e!="string"||!Vo(e)||typeof n!="string"||!Qp(n))return B("invalid_argument","Expected a teamfile path and valid alias");let s=xt(xa(t.cwd,e),n,t.dal);return fe({member:{alias:s.alias,provider:s.provider,model:s.model,sessionid:s.sessionid,sessiondir:s.sessiondir},isLead:s.isLead,teamfile:s.teamfile})}catch(r){let s;try{s=r instanceof Ne?r.kind:void 0}catch{}return s==="not_found"&&!G(r).includes("teamfile not found")?{status:"not_found",code:"not_found",error:G(r)}:B(s==="not_found"?"schema":s??or(r),G(r))}}async function jB(t,e){try{let n=me(t);if(n)return n;if(typeof e!="string"||!e)return B("invalid_argument","Teamfile must be a nonempty string");let r=await zR(xa(t.cwd,e),lt(t)),s={errors:r.errors,warnings:r.warnings,counts:r.counts};return r.status==="ok"?fe(s):B("schema",r.errors.map(i=>i.message).join("; "),s)}catch(n){let r=G(n);return B(or(n),r,{errors:[{alias:"",message:r}],warnings:[],counts:{errors:1,warnings:0}})}}async function UB(t,e,n={}){let r=[],s=!1;try{let i=me(t);if(i)return i;if(typeof e!="string"||!e)return B("invalid_argument","Teamfile must be a nonempty string");if(!DB(xa(t.cwd,e)))return B("invalid_argument","Teamfile does not exist: "+e,{seeded:r});if(!n||typeof n!="object"||Array.isArray(n))return B("invalid_argument","Seed options must be a map");let o=dt.find(p=>p.name==="seedTeam").params.find(p=>p.name==="options").keys,a=n.preamble;if(Object.keys(n).some(p=>!o.some(f=>f.name===p))||a!==void 0&&typeof a!="string"&&(typeof a!="object"||a===null||Array.isArray(a)))return B("invalid_argument","Seed options accept a string or alias map preamble only");let l=typeof a=="object"&&a!==null?{...a}:a,c=[],u=QR(c),d=lt(t,(p,f)=>{f==="stderr"&&u(p)});s=!0;let m=await KR(xa(t.cwd,e),d,{signal:t.signal,...l===void 0?{}:{preamble:l},onSeeded:p=>{r.push({...p})}});return m===0?fe({seeded:r}):B("provider",c.join(`
2346
- `)||`Seed failed with exit code ${m}`,{seeded:r})}catch(i){return B(or(i),G(i),{seeded:r})}}function QR(t){return e=>{let n=!1;for(let r of e.split(/\r?\n/))r.startsWith("error:")?(t.push(r.replace(/^error:\s*/,"")),n=!0):n&&r.length>0&&t.push(r)}}var ZR=M(()=>{"use strict";Un();wn();En();YR();en();mt()});import{readFileSync as HB}from"node:fs";import{resolve as BB}from"node:path";function WB(t,e,n={}){try{let r=me(t);if(r)return r;if(typeof e!="string"||!e)return B("invalid_argument","Prompt path must be a nonempty string");if(!n||typeof n!="object"||Array.isArray(n))return B("invalid_argument","Prompt options must be a map");let s=n.single,i=dt.find(a=>a.name==="readPrompts").params.find(a=>a.name==="options").keys;if(Object.keys(n).some(a=>!i.some(l=>l.name===a))||s!==void 0&&typeof s!="boolean")return B("invalid_argument","Prompt options accept a boolean single only");let o=HB(BB(t.cwd,e),"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2347
- `);return fe({prompts:s?[o.trim()].filter(a=>a.length>0):o.split(/\n\s*\n/u).map(a=>a.trim()).filter(Boolean)})}catch(r){return B(or(r),G(r))}}var eI=M(()=>{"use strict";Un();en();mt()});import{join as ct}from"node:path";function dn(t){let e=tI.get(t);if(e)return e;let n=t.env.HOME;if(!n)return er(rr());let r=t.env.XDG_DATA_HOME||ct(n,".local/share"),s=t.env.XDG_CONFIG_HOME||ct(n,".config");return e=er(rr({museDataHome:r,miniplayerHome:t.env.MINIPLAYER_HOME||ct(r,"miniplayer"),claudeDir:ct(n,".claude"),codexDir:ct(n,".codex"),codeDir:ct(n,".code"),geminiDir:ct(n,".gemini"),copilotDir:ct(n,".copilot"),qwenDir:ct(n,".qwen"),opencodeDbPaths:[ct(r,"opencode/opencode.db"),ct(s,"opencode/opencode.db")],agyDir:ct(n,".gemini/antigravity-cli"),dshHome:ct(n,".dsh"),hermesHome:t.env.HERMES_HOME??ct(n,".hermes"),kimiHome:t.env.KIMI_CODE_HOME??ct(n,".kimi-code"),piDir:ct(n,".pi/agent/sessions"),lmplayerDbPaths:Sf(t.env,n)})),tI.set(t,e),e}var tI,Aa=M(()=>{"use strict";sr();la();tI=new WeakMap});import{resolve as qB}from"node:path";function nI(t){let e=new Date(t.clock());return[e.getHours(),e.getMinutes(),e.getSeconds()].map(n=>String(n).padStart(2,"0")).join(":")}async function rI(t,e,n,r,s,i){let o=null,a=!1,l="invalid_argument",c,u,d=new Set,m=(h,y="",b=null,_)=>({status:h,reply:y,error:b,sessionid:o,messageId:null,teamChatLogId:null,..._?{code:_}:{}}),p,f,g={status:"error"};try{let h=me(t);if(h)return m("error","",h.error,h.code);if(!e||typeof e!="object"||Array.isArray(e))throw Error("promptAgent: member must be a map");let y={};for(let T of["provider","alias","model","effort","sessiondir","sessionid"]){let k=e[T];if(k!=null&&(typeof k!="string"||!k.trim()))throw Error(`promptAgent: ${T} must be a nonempty string when supplied`);k!=null&&(y[T]=k)}if(!y.provider)throw Error("promptAgent: provider is required");if(o=y.sessionid??null,typeof n!="string")throw Error("promptAgent: prompt must be a string");if(!r||typeof r!="object"||Array.isArray(r))throw Error("promptAgent: options must be a map");let{permissionMode:b="yolo",idleTimeoutMs:_}=r;if(Object.keys(r).some(T=>!ar("promptAgent").includes(T)))throw Error("promptAgent: unknown option");if(b!=="yolo"&&b!=="plan")throw Error("promptAgent: permissionMode must be yolo or plan");if(_!=null&&(typeof _!="number"||!Number.isFinite(_)||_<0))throw Error("promptAgent: idleTimeoutMs must be a finite nonnegative number");p=Nr(t);let v=o?JSON.stringify([y.provider,o]):void 0;if(s&&(v!==i||!p.handoffSessions.has(v)))return m("error","","Reservation target does not match member","invalid_argument");if(p.activeAgents.has(e)||v!==void 0&&(p.activeSessions.has(v)||!s&&p.handoffSessions.has(v)))return m("busy","","promptAgent: session already has an active turn in this context","busy");p.activeAgents.add(e),a=!0,v&&(p.activeSessions.add(v),d.add(v));let E=lt(t);l="provider",E.stderr.write(`agent ${nI(t)}: prompting ${y.alias??y.provider}
2345
+ `)}var Ui,yB,_B,ji,vB,XR,GR,Xu,IB,xB,YR=M(()=>{"use strict";Uo();cf();wn();xc();pf();Nf();Up();Di();zn();Ts();IR();qu();Kp();Qe();Ui=5,yB={existsSync:gB,statSync:hB,accessSync:fB},_B=async t=>{let{seed:e}=await Promise.resolve().then(()=>(sr(),vR)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:Kn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:Kn(n),sessionId:n.sessionId}},ji=yB,vB=zc;IB=/^\[([^\]]+)\]\s+(.*)$/s,xB=/^([^:\s][^:]*):\s+(.*)$/s});function me(t){if(!gi(t))return B("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return B("cancelled","Context is closed")}function or(t){try{let e=t?.code;return e==="ENOENT"?"missing":e==="EACCES"||e==="EPERM"||e==="EISDIR"?"read":"schema"}catch{return"read"}}function lt(t,e){let n=r=>s=>{e?.(s,r),r==="stderr"&&s.startsWith("warning:")?t.onWarning(s):t.onProgress(s,r)};return{cwd:t.cwd,env:{...t.env,LMCTL_DB:t.dbPath},dal:t.dal,stdout:{write:n("stdout")},stderr:{write:n("stderr")}}}function ar(t){return dt.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var en=M(()=>{"use strict";Un();Qt();mt()});import{existsSync as $B}from"node:fs";import{resolve as xa}from"node:path";function jB(t,e){try{let n=me(t);if(n)return n;if(typeof e!="string"||!e)return B("invalid_argument","Teamfile must be a nonempty string");let r=Ht(xa(t.cwd,e));return fe({members:r.members.map(s=>({alias:s.alias,provider:s.provider,model:s.model,sessionid:s.session,sessiondir:s.sessiondir}))})}catch(n){return B(or(n),G(n))}}function UB(t,e,n){try{let r=me(t);if(r)return r;if(typeof e!="string"||!Vo(e)||typeof n!="string"||!Qp(n))return B("invalid_argument","Expected a teamfile path and valid alias");let s=xt(xa(t.cwd,e),n,t.dal);return fe({member:{alias:s.alias,provider:s.provider,model:s.model,sessionid:s.sessionid,sessiondir:s.sessiondir},isLead:s.isLead,teamfile:s.teamfile})}catch(r){let s;try{s=r instanceof Ne?r.kind:void 0}catch{}return s==="not_found"&&!G(r).includes("teamfile not found")?{status:"not_found",code:"not_found",error:G(r)}:B(s==="not_found"?"schema":s??or(r),G(r))}}async function HB(t,e){try{let n=me(t);if(n)return n;if(typeof e!="string"||!e)return B("invalid_argument","Teamfile must be a nonempty string");let r=await zR(xa(t.cwd,e),lt(t)),s={errors:r.errors,warnings:r.warnings,counts:r.counts};return r.status==="ok"?fe(s):B("schema",r.errors.map(i=>i.message).join("; "),s)}catch(n){let r=G(n);return B(or(n),r,{errors:[{alias:"",message:r}],warnings:[],counts:{errors:1,warnings:0}})}}async function BB(t,e,n={}){let r=[],s=!1;try{let i=me(t);if(i)return i;if(typeof e!="string"||!e)return B("invalid_argument","Teamfile must be a nonempty string");if(!$B(xa(t.cwd,e)))return B("invalid_argument","Teamfile does not exist: "+e,{seeded:r});if(!n||typeof n!="object"||Array.isArray(n))return B("invalid_argument","Seed options must be a map");let o=dt.find(p=>p.name==="seedTeam").params.find(p=>p.name==="options").keys,a=n.preamble;if(Object.keys(n).some(p=>!o.some(f=>f.name===p))||a!==void 0&&typeof a!="string"&&(typeof a!="object"||a===null||Array.isArray(a)))return B("invalid_argument","Seed options accept a string or alias map preamble only");let l=typeof a=="object"&&a!==null?{...a}:a,c=[],u=QR(c),d=lt(t,(p,f)=>{f==="stderr"&&u(p)});s=!0;let m=await KR(xa(t.cwd,e),d,{signal:t.signal,...l===void 0?{}:{preamble:l},onSeeded:p=>{r.push({...p})}});return m===0?fe({seeded:r}):B("provider",c.join(`
2346
+ `)||`Seed failed with exit code ${m}`,{seeded:r})}catch(i){return B(or(i),G(i),{seeded:r})}}function QR(t){return e=>{let n=!1;for(let r of e.split(/\r?\n/))r.startsWith("error:")?(t.push(r.replace(/^error:\s*/,"")),n=!0):n&&r.length>0&&t.push(r)}}var ZR=M(()=>{"use strict";Un();wn();En();YR();en();mt()});import{readFileSync as WB}from"node:fs";import{resolve as qB}from"node:path";function XB(t,e,n={}){try{let r=me(t);if(r)return r;if(typeof e!="string"||!e)return B("invalid_argument","Prompt path must be a nonempty string");if(!n||typeof n!="object"||Array.isArray(n))return B("invalid_argument","Prompt options must be a map");let s=n.single,i=dt.find(a=>a.name==="readPrompts").params.find(a=>a.name==="options").keys;if(Object.keys(n).some(a=>!i.some(l=>l.name===a))||s!==void 0&&typeof s!="boolean")return B("invalid_argument","Prompt options accept a boolean single only");let o=WB(qB(t.cwd,e),"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2347
+ `);return fe({prompts:s?[o.trim()].filter(a=>a.length>0):o.split(/\n\s*\n/u).map(a=>a.trim()).filter(Boolean)})}catch(r){return B(or(r),G(r))}}var eI=M(()=>{"use strict";Un();en();mt()});import{join as ct}from"node:path";function dn(t){let e=tI.get(t);if(e)return e;let n=t.env.HOME;if(!n)return er(rr());let r=t.env.XDG_DATA_HOME||ct(n,".local/share"),s=t.env.XDG_CONFIG_HOME||ct(n,".config");return e=er(rr({museDataHome:r,miniplayerHome:t.env.MINIPLAYER_HOME||ct(r,"miniplayer"),claudeDir:ct(n,".claude"),codexDir:ct(n,".codex"),codeDir:ct(n,".code"),geminiDir:ct(n,".gemini"),copilotDir:ct(n,".copilot"),qwenDir:ct(n,".qwen"),opencodeDbPaths:[ct(r,"opencode/opencode.db"),ct(s,"opencode/opencode.db")],agyDir:ct(n,".gemini/antigravity-cli"),dshHome:ct(n,".dsh"),hermesHome:t.env.HERMES_HOME??ct(n,".hermes"),kimiHome:t.env.KIMI_CODE_HOME??ct(n,".kimi-code"),piDir:ct(n,".pi/agent/sessions"),lmplayerDbPaths:Sf(t.env,n)})),tI.set(t,e),e}var tI,Aa=M(()=>{"use strict";sr();la();tI=new WeakMap});import{resolve as GB}from"node:path";function nI(t){let e=new Date(t.clock());return[e.getHours(),e.getMinutes(),e.getSeconds()].map(n=>String(n).padStart(2,"0")).join(":")}async function rI(t,e,n,r,s,i){let o=null,a=!1,l="invalid_argument",c,u,d=new Set,m=(h,y="",b=null,_)=>({status:h,reply:y,error:b,sessionid:o,messageId:null,teamChatLogId:null,..._?{code:_}:{}}),p,f,g={status:"error"};try{let h=me(t);if(h)return m("error","",h.error,h.code);if(!e||typeof e!="object"||Array.isArray(e))throw Error("promptAgent: member must be a map");let y={};for(let T of["provider","alias","model","effort","sessiondir","sessionid"]){let k=e[T];if(k!=null&&(typeof k!="string"||!k.trim()))throw Error(`promptAgent: ${T} must be a nonempty string when supplied`);k!=null&&(y[T]=k)}if(!y.provider)throw Error("promptAgent: provider is required");if(o=y.sessionid??null,typeof n!="string")throw Error("promptAgent: prompt must be a string");if(!r||typeof r!="object"||Array.isArray(r))throw Error("promptAgent: options must be a map");let{permissionMode:b="yolo",idleTimeoutMs:_}=r;if(Object.keys(r).some(T=>!ar("promptAgent").includes(T)))throw Error("promptAgent: unknown option");if(b!=="yolo"&&b!=="plan")throw Error("promptAgent: permissionMode must be yolo or plan");if(_!=null&&(typeof _!="number"||!Number.isFinite(_)||_<0))throw Error("promptAgent: idleTimeoutMs must be a finite nonnegative number");p=Nr(t);let v=o?JSON.stringify([y.provider,o]):void 0;if(s&&(v!==i||!p.handoffSessions.has(v)))return m("error","","Reservation target does not match member","invalid_argument");if(p.activeAgents.has(e)||v!==void 0&&(p.activeSessions.has(v)||!s&&p.handoffSessions.has(v)))return m("busy","","promptAgent: session already has an active turn in this context","busy");p.activeAgents.add(e),a=!0,v&&(p.activeSessions.add(v),d.add(v));let E=lt(t);l="provider",E.stderr.write(`agent ${nI(t)}: prompting ${y.alias??y.provider}
2348
2348
  `);let R=t.clock(),S=R,I=setInterval(()=>{try{let T=t.clock();T-S>=5e3&&E.stderr.write(`agent ${nI(t)}: still running (${Math.round((T-R)/1e3)}s elapsed)
2349
- `)}catch(T){u=T,clearInterval(I)}},5e3);I.unref(),c={poke(){try{S=t.clock()}catch(T){u=T}},stop(){clearInterval(I)}};let N=y.provider,O=qB(t.cwd,y.sessiondir??t.cwd);if(!o&&["agy","pi","dsh"].includes(N)){if(b!=="yolo")throw Error(`promptAgent: fresh ${N} sessions require yolo seed; supply sessionid for resume`);let T,k;try{k=await ph({provider:N,cwd:O,model:y.model,effort:y.effort,env:{...t.env},signal:t.signal,onDispatch:()=>{T??=Yo(E,{provider:N,cwd:O,modelRequested:y.model??null,sessionId:""},"agent")}}),await T?.finish({status:t.signal.aborted?"cancelled":k.success&&k.sessionId?"ok":"error",sessionId:k.sessionId,usage:Kn(k)})}catch(C){throw await T?.finish(Qo(C,t.signal)),C}for(let C of k.warnings??[])E.stderr.write(`warning: ${C}
2349
+ `)}catch(T){u=T,clearInterval(I)}},5e3);I.unref(),c={poke(){try{S=t.clock()}catch(T){u=T}},stop(){clearInterval(I)}};let N=y.provider,O=GB(t.cwd,y.sessiondir??t.cwd);if(!o&&["agy","pi","dsh"].includes(N)){if(b!=="yolo")throw Error(`promptAgent: fresh ${N} sessions require yolo seed; supply sessionid for resume`);let T,k;try{k=await ph({provider:N,cwd:O,model:y.model,effort:y.effort,env:{...t.env},signal:t.signal,onDispatch:()=>{T??=Yo(E,{provider:N,cwd:O,modelRequested:y.model??null,sessionId:""},"agent")}}),await T?.finish({status:t.signal.aborted?"cancelled":k.success&&k.sessionId?"ok":"error",sessionId:k.sessionId,usage:Kn(k)})}catch(C){throw await T?.finish(Qo(C,t.signal)),C}for(let C of k.warnings??[])E.stderr.write(`warning: ${C}
2350
2350
  `);if(!k.success||!k.sessionId)throw Error(k.error??"promptAgent: provider did not identify the seeded session");o=k.sessionId;let x=JSON.stringify([N,o]);if(p.activeSessions.has(x)||!s&&p.handoffSessions.has(x))return m("busy","","promptAgent: seeded session is already active","busy");p.activeSessions.add(x),d.add(x)}let A=o??"";f=Yo(E,{provider:N,cwd:O,modelRequested:y.model??null,sessionId:A},"agent");let w=await ka({provider:N,cwd:O,sessionId:A,prompt:n,model:y.model,effort:y.effort,alias:y.alias,isLead:!1,permissionMode:b,timeoutMs:_,requireResume:!!A,env:{...t.env},signal:t.signal,onDelta:()=>c?.poke(),onProgress:()=>c?.poke()});if(g={status:t.signal.aborted?"cancelled":w.status??"ok",usage:Kn(w),sessionId:w.sessionId},u!==void 0)throw u;for(let T of w.warnings??[])E.stderr.write(`warning: ${T}
2351
- `);return A&&w.sessionId!==A?(g.status=t.signal.aborted?"cancelled":"error",m("error","","promptAgent: provider changed session identity during resume","provider")):(w.sessionId&&(o=w.sessionId),w.status==="stalled"?m("stalled",w.text,"provider stalled"):w.status==="empty"?m("empty","","promptAgent: provider reported a normal completion but returned no content and no observed activity -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error"):w.sessionId?m("ok",w.text):(g.status=t.signal.aborted?"cancelled":"error",m("error",w.text,"promptAgent: provider did not return a session ID","provider")))}catch(h){return g=Qo(h,t.signal,g),m("error","",G(h),l)}finally{if(await f?.finish(g),c?.stop(),a&&p){p.activeAgents.delete(e);for(let h of d)p.activeSessions.delete(h)}}}async function sI(t,e,n,r={}){return rI(t,e,n,r,!1)}async function iI(t,e,n,r={},s){return rI(t,e,n,r,!0,s)}var kh=M(()=>{"use strict";sr();Qt();en();mt();cf()});import{randomUUID as XB}from"node:crypto";import{resolve as GB}from"node:path";function Ca(t){try{if(!t||typeof t!="object"||Array.isArray(t))return B("invalid_argument","Session target requires provider and sessionid");let e=t.provider,n=t.sessionid;return typeof e!="string"||!e.trim()||typeof n!="string"||!n.trim()?B("invalid_argument","Session target requires provider and sessionid"):{provider:e,sessionid:n}}catch(e){return B("invalid_argument",G(e))}}function Ju(t){return JSON.stringify([t.provider,t.sessionid])}function oI(t,e){try{let n=me(t);if(n)return n;let r=Ca(e);if("status"in r)return r;let s=Nr(t),i=Ju(r);return s.activeAgents.has(e)||s.activeSessions.has(i)?{status:"busy",error:"Session has an active turn in this context",busyReason:"turn"}:s.handoffSessions.has(i)?{status:"busy",error:"Session is reserved for handoff",busyReason:"handoff"}:fe({})}catch(n){return B("invalid_argument",G(n))}}async function aI(t,e,n,r,s={}){let i=e&&typeof e=="object"?Gu.get(e):void 0;return!i||i.ctx!==t||Nr(t).reservations.get(i.key)!==e?{status:"error",error:"Invalid or released session reservation",code:"invalid_argument",reply:"",sessionid:null,messageId:null,teamChatLogId:null}:iI(t,n,r,s,i.key)}function lI(t,e){try{let n=me(t);if(n)return n;let r=Ca(e);if("status"in r)return r;let s=Nr(t),i=Ju(r);if(s.activeSessions.has(i)||s.handoffSessions.has(i))return{status:"busy",error:"Session is already active in this context"};let o=Object.freeze({id:XB()}),a=!1,l=()=>{},c=()=>{a||(a=!0,s.reservations.get(i)===o&&(s.handoffSessions.delete(i),s.reservations.delete(i)),l())};return l=_n(t,{async close(){c()},finalizeSync(){c()}}),Gu.set(o,{ctx:t,key:i,release:c}),s.handoffSessions.add(i),s.reservations.set(i,o),fe({reservation:o})}catch(n){return B("invalid_argument",G(n))}}function cI(t,e,n=void 0){try{let r=me(t);if(r&&!(r.code==="cancelled"&&n))return r;let s=Ca(e);if("status"in s)return s;let i=Nr(t),o=Ju(s);if(n!==void 0){let l=Gu.get(n);return!l||l.ctx!==t||l.key!==o?B("invalid_argument","Reservation target does not match this context and session"):(l.release(),fe({}))}let a=i.reservations.get(o);return a&&Gu.get(a)?.release(),fe({})}catch(r){return B("invalid_argument",G(r))}}async function uI(t,e={}){try{let n=me(t);if(n)return n;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Session options must be a map");let{provider:r,workspace:s,all:i}=e;if(Object.keys(e).some(a=>!ar("listSessions").includes(a))||r!==void 0&&(typeof r!="string"||!r.trim())||s!==void 0&&(typeof s!="string"||!s.trim())||i!==void 0&&typeof i!="boolean")return B("invalid_argument","Expected provider, workspace and all session options");let o=await fh({registry:dn(t),provider:r,workspace:i?void 0:GB(t.cwd,s??t.cwd)});return fe({sessions:o.map(a=>({provider:a.provider,sessionid:a.sessionId,sessiondir:a.cwd,modifiedAt:a.modifiedAt.toISOString()}))})}catch(n){return B("provider",G(n))}}async function dI(t,e){try{let n=me(t);if(n)return n;let r=Ca(e);if("status"in r)return r;let s=await dn(t).getSession(r.sessionid,r.provider);return s?fe({messages:s.messages.map(i=>({role:i.role,content:i.content}))}):{status:"not_found",error:null}}catch(n){return B("provider",G(n))}}async function mI(t,e,n){try{let r=me(t);if(r)return r;let s=Ca(e);if("status"in s)return s;if(!n||typeof n!="object"||Array.isArray(n)||n.force!==!0||Object.keys(n).some(a=>!ar("deleteSession").includes(a)))return B("invalid_argument","force: true is required because cross-process turns cannot be detected");let i=Nr(t),o=Ju(s);if(i.activeAgents.has(e)||i.activeSessions.has(o)||i.handoffSessions.has(o))return{status:"busy",error:"Session has an active turn in this context"};i.activeSessions.add(o);try{return{status:await gh(s.provider,s.sessionid,dn(t))?"deleted":"not_found",error:null}}finally{i.activeSessions.delete(o)}}catch(r){return B("provider",G(r))}}var Gu,pI=M(()=>{"use strict";Aa();kh();sr();Qt();en();mt();Gu=new WeakMap});function vt(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);return Number.isFinite(e)?Math.round(Math.min(1,Math.max(0,e))*1e6)/1e6:null}function Cn(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return vt(e==="percent"?n/100:n)}function fI(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);if(!Number.isFinite(e))return null;try{return new Date(Math.trunc(e)*1e3).toISOString().replace(".000Z","Z")}catch{return null}}function gI(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function hI(t){let e=Number(t);return Number.isFinite(e)?e===300||e>=240&&e<=360?"five_hour":e===10080||e>=9e3&&e<=11500?"weekly":e===43200||e===44640||e>=38e3&&e<=46e3?"monthly":"unknown":"unknown"}function yI(t){let e=String(t??"").trim().toLowerCase().replace(/-/g,"_").split("_").filter(Boolean);for(let n of[e[0],e.at(-1)]){if(n?.startsWith("5h")||n?.startsWith("five")||n==="session")return"five_hour";if(n?.startsWith("7d")||n?.startsWith("seven")||n?.startsWith("week"))return"weekly";if(n?.startsWith("30d")||n?.startsWith("month"))return"monthly"}return"unknown"}function Hi(t,e=[]){let n=t==null?"":String(t);for(let r of e)typeof r=="string"&&r.length>=4&&(n=n.replaceAll(r,"***REDACTED***"));for(let r of VB)n=n.replace(r,"***REDACTED***");return n}function qt(t){let e=vt(t.used_fraction),n=vt(t.remaining_fraction),r=t.resets_at==null?gI(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?fI(r):fI(gI(t.resets_at_iso)),i={bucket_id:t.bucket_id,...t.group_name!=null?{group_name:t.group_name}:{},window_type:t.window_type??"unknown",used_fraction:e??(n===null?null:vt(1-n)),remaining_fraction:n??(e===null?null:vt(1-e)),resets_at:r==null||!Number.isFinite(r)?null:Math.trunc(r),resets_at_iso:s,is_exhausted:t.is_exhausted??(n!==null?n<=0:e!==null?e>=1:null)};for(let o of["raw_value","raw_scale","limit_name","metered_feature","allowed","limit_reached"])t[o]!=null&&(i[o]=t[o]);return i}function Ze(t,e,n={}){let r={$schema:JB,provider:t,status:e,source:n.source??null,read_at:n.read_at??Math.floor(Date.now()/1e3),account_id:n.account_id??null,plan_type:n.plan_type??null,ordinary_usage_allowed:n.ordinary_usage_allowed??null,buckets:n.buckets??[]};for(let s of["credits","spend_control","characteristics","reason","detail","retry_after_seconds"])n[s]!=null&&(r[s]=n[s]);return r}function Ct(t,e,n,r,s,i=[],o){return Ze(t,e,{source:s??null,reason:n,...r==null?{}:{detail:Hi(r,i)},...o==null?{}:{retry_after_seconds:o}})}function _I(t){let e=t.get("retry-after");if(e===null)return null;let n=Number.parseFloat(e);return Number.isFinite(n)&&n>=0?Math.trunc(n):null}function Xt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let i=Hi(n,[...r].filter(o=>typeof o=="string")).replace(/("(?:access[_-]?token|refresh[_-]?token|authorization|api[_-]?key|password)"\s*:\s*")[^"\r\n]*(")/gi,"$1***REDACTED***$2");t.onRawResponse?.({source:e,...s===void 0?{}:{http_status:s},text:i}),t.debug?.(`[debug] ${e}${s===void 0?"":` HTTP ${s}`} raw response:
2352
- ${i}`)}function Bi(t,e,n=[]){let r;try{let i=JSON.parse(e);r=typeof i?.error=="string"?i.error:i?.error?.message??i?.message??i?.detail}catch{/^\s*[<{[]/.test(e)||(r=e.trim())}if(typeof r!="string"||!r.trim())return t;let s=Hi(r,n);return{...t,detail:s,provider_message:s}}var JB,VB,lr=M(()=>{"use strict";JB="https://lmctl.com/schemas/lmratelimit-v1.json";VB=[/sk-ant-[A-Za-z0-9_-]{4,}/g,/sk-[A-Za-z0-9_-]{16,}/g,/\bbearer\s+[A-Za-z0-9._-]{8,}/gi,/\boat01[-_][A-Za-z0-9_-]{8,}/g,/\bcsrf[-_][A-Za-z0-9_-]{4,}/gi,/\b(?:csrf[-_]?token|x-codeium-csrf-token)\s*[:=]\s*['"]?[A-Za-z0-9._-]{4,}/gi]});import{spawnSync as zB}from"node:child_process";import{readdirSync as KB,readFileSync as YB}from"node:fs";import{join as QB}from"node:path";function aW(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function lW(t){let e=t.trim().toLowerCase(),n={"gemini models":"gemini","claude and gpt models":"3p",gemini:"gemini","3p models":"3p","3p":"3p"};return n[e]?n[e]:e.replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"unknown"}function cW(t){let e=t.toLowerCase();return e.includes("weekly")?"weekly":e.includes("five hour")||e.includes("5-hour")||e.includes("5 hour")?"five_hour":e.includes("monthly")||e.includes("month")?"monthly":null}function uW(t){let e={weekly:"weekly",five_hour:"5h",monthly:"monthly"},n=[];for(let r of t.split(/\r?\n/)){let s=r.trim().split(" ").map(l=>l.trim());if(s.length<3||!s[0]||!s[1])continue;let i=cW(s[1]);if(!i)continue;let o=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(o))continue;let a=vt(o/100);n.push(qt({bucket_id:`${lW(s[0])}-${e[i]}`,group_name:s[0],window_type:i,used_fraction:a===null?null:vt(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:o,raw_scale:"remaining_percent"}))}return n.sort((r,s)=>String(r.group_name??"").localeCompare(String(s.group_name??""))||String(r.bucket_id??"").localeCompare(String(s.bucket_id??"")))}function Na(t,e,n){return Ct("agy","provider_unavailable",t,e,"agy_cli_print")}function dW(t,e,n={}){try{let r=sW(Math.max(t,60)*1e3,aW(e));if(Xt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return Na("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return Na("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return Na("cli_failed",r.error.message,t);let s=uW(r.stdout??"");return s.length===0?Na("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ze("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return Na("cli_failed",r instanceof Error?r.message:String(r),t)}}function wI(t){if(!t||typeof t!="string")return null;let e=t.trim();if(!e||e.includes("@")||e.includes("/")||e.includes("\\")||e.includes("?")||e.includes("#")||e.includes("://")||/\s/.test(e))return null;let n;try{n=new URL(`http://${e}`)}catch{return null}if(n.username||n.password||n.pathname!=="/"||n.search||n.hash)return null;let r=n.hostname.toLowerCase();if(!(r==="localhost"||r==="127.0.0.1"||r==="[::1]"||r==="::1")||!n.port)return null;let i=Number(n.port);return!Number.isInteger(i)||i<1||i>65535||n.port!==String(i)?null:`${r==="::1"||r==="[::1]"?"[::1]":r}:${i}`}function mW(t){let e=[],n=new Set,r=(s,i,o)=>{if(!s||!i)return;let a=wI(s);!a||n.has(`${a}\0${i}`)||(n.add(`${a}\0${i}`),e.push([a,i,o]))};r(t[vI],t[bI],-1);try{for(let s of KB("/proc"))if(/^\d+$/.test(s))try{let i={};for(let o of YB(QB("/proc",s,"environ")).toString("utf8").split("\0")){let a=o.indexOf("=");a>0&&(i[o.slice(0,a)]=o.slice(a+1))}r(i[vI],i[bI],Number(s))}catch{}}catch{}return e}function pW(t){if(typeof t!="object"||t===null)return null;let e=t.response;if(typeof e!="object"||e===null)return null;let n=e.groups;if(!Array.isArray(n))return null;let r=[];for(let s of n){if(typeof s!="object"||s===null)continue;let i=s,o=typeof i.displayName=="string"?i.displayName:null;if(Array.isArray(i.buckets))for(let a of i.buckets){if(typeof a!="object"||a===null)continue;let l=a,c=Cn(l.remainingFraction,"fraction");r.push(qt({bucket_id:l.bucketId??l.displayName??"unknown",group_name:o,window_type:yI(l.window),used_fraction:c===null?null:vt(1-c),remaining_fraction:c,resets_at_iso:l.resetTime??null,raw_value:l.remainingFraction??null,raw_scale:"remaining_fraction"}))}}return r.length===0?null:(r.sort((s,i)=>String(s.group_name??"").localeCompare(String(i.group_name??""))||String(s.bucket_id??"").localeCompare(String(i.bucket_id??""))),Ze("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function fW(t,e,n={}){try{let s=oW(e).map(([a,l,c])=>[wI(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return Ct("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let i=[],o=Date.now()+t*1e3;for(let[a,l,c]of s){let u=o-Date.now();if(u<=0){i.push("overall connect deadline exceeded");break}try{let d=await iW(`http://${a}${ZB}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},u);if(Xt(n,"agy_connect_rpc",d.body,[l],d.status),d.status===200){let m;try{m=JSON.parse(d.body)}catch{i.push(`pid=${c}: unparseable response`);continue}let p=pW(m);if(p)return p;i.push(`pid=${c}: response had no quota groups`)}else d.status===401||d.status===403?i.push(`pid=${c}: HTTP ${d.status} unauthorized`):i.push(`pid=${c}: HTTP ${d.status}`)}catch(d){i.push(`pid=${c}: ${d instanceof Error?d.message:String(d)}`)}}return Ct("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${i.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return Ct("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function EI(t){let e=await fW(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=dW(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:Ct("agy","provider_unavailable","cli_and_language_server_unavailable",`cli: ${String(n.reason??n.status)} (${String(n.detail??"no detail")}); connect: ${String(e.reason??e.status)} (${String(e.detail??"no detail")})`,"agy_cli_print")}var vI,bI,ZB,eW,tW,nW,rW,sW,iW,oW,TI=M(()=>{"use strict";lr();lr();vI="ANTIGRAVITY_LS_ADDRESS",bI="ANTIGRAVITY_CSRF_TOKEN",ZB="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",eW=["-p","/usage"],tW=(t,e)=>{let n=zB("agy",eW,{encoding:"utf8",timeout:t,maxBuffer:16777216,env:e,stdio:["ignore","pipe","ignore"]});return{status:n.status,stdout:typeof n.stdout=="string"?n.stdout:"",error:n.error}},nW=async(t,e,n)=>{let r=await fetch(t,{method:"POST",headers:e,body:"{}",signal:AbortSignal.timeout(n),redirect:"error"});return{status:r.status,body:await r.text()}},rW=t=>mW(t),sW=tW,iW=nW,oW=rW});import{randomUUID as RI}from"node:crypto";import{mkdirSync as gW,readFileSync as Rh,realpathSync as hW,renameSync as yW,rmSync as Ih,statSync as SI,writeFileSync as II}from"node:fs";import{homedir as _W}from"node:os";import{join as xh}from"node:path";import{setTimeout as vW}from"node:timers/promises";function Nh(t){return xh(t.CLAUDE_CONFIG_DIR??xh(t.HOME??_W(),".claude"),".credentials.json")}function Ah(t){let e=JSON.parse(Rh(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function Ch(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function xI(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=Nh(t);try{let n=Ch(Ah(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:hW(e)}:{error:"not_claude_ai_subscriber"}}catch(n){return n.code==="ENOENT"?{error:t.ANTHROPIC_API_KEY?"not_claude_ai_subscriber":"no_credentials_found"}:{error:"credentials_unreadable"}}}function Vu(t){return typeof t.expiresAt=="number"&&Date.now()+EW>=t.expiresAt}function kI(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function TW(t,e){let n=`${t}.lmctl-refresh.lock`,r=xh(n,"owner.json"),s=RI();for(;;){e.throwIfAborted();try{gW(n,{mode:448});try{II(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(i){throw Ih(n,{recursive:!0,force:!0}),i}return()=>{try{JSON.parse(Rh(r,"utf8")).token===s&&Ih(n,{recursive:!0,force:!0})}catch{}}}catch(i){if(i.code!=="EEXIST")throw i;let o=!1;try{let a=JSON.parse(Rh(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){o=l.code==="ESRCH"}else o=Date.now()-SI(n).mtimeMs>6e4}catch{try{o=Date.now()-SI(n).mtimeMs>6e4}catch{continue}}if(o)throw new Error("refresh_lock_stale");await vW(50,void 0,{signal:e})}}}async function AI(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await TW(t.path,e);try{let r=Ch(Ah(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!kI(r,t.oauth)&&!Vu(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(wW,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:bW})});if(!s.ok)throw new Error(`refresh_http_${s.status}`);let i=await s.json();if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||typeof i.expires_in!="number"||!Number.isFinite(i.expires_in)||i.expires_in<=0||i.refresh_token!==void 0&&(typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token)))throw new Error("invalid_refresh_response");let o=Math.floor(Date.now()+i.expires_in*1e3);if(!Number.isSafeInteger(o)||o<=Date.now())throw new Error("invalid_refresh_response");let a=Ah(t.path),l=Ch(a);if(!l||!kI(r,l)){if(l&&typeof l.accessToken=="string"&&!Vu(l))return l;throw new Error("credentials_changed")}let c={...l,accessToken:i.access_token,refreshToken:i.refresh_token??r.refreshToken,expiresAt:o,...typeof i.scope=="string"?{scopes:i.scope.split(/\s+/).filter(Boolean)}:{}},u=`${t.path}.${RI()}.tmp`;try{II(u,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),yW(u,t.path)}finally{Ih(u,{force:!0})}return c}finally{n()}}var bW,wW,EW,CI=M(()=>{"use strict";bW="9d1c250a-e61b-44d9-88ed-5944d1962f5e",wW="https://console.anthropic.com/v1/oauth/token",EW=3e5});import{spawnSync as LI}from"node:child_process";function RW(t){let e=String(t??"").toLowerCase();return e.includes("session")||e.includes("five")||e.includes("5h")?"five_hour":e.includes("week")||e.includes("seven")||e.includes("7d")?"weekly":e.includes("month")||e.includes("30d")?"monthly":"unknown"}function MI(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function IW(t){try{let e=LI("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:MI(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function mn(t,e,n,r="claude_oauth_api",s){return Ct("claude",t,e,n,r,void 0,s)}function xW(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function AW(t){if(!t)return;let e=/^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{1,2})(?::(\d{2}))?\s*(am|pm)?(?:\s*\(([^)]+)\))?$/i.exec(t.trim());if(!e)return;let n=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].indexOf(e[1].slice(0,3).toLowerCase());if(n<0)return;let r=Number(e[3]),s=Number(e[4]??0);(e[5]??"").toLowerCase()==="pm"&&r!==12&&(r+=12),(e[5]??"").toLowerCase()==="am"&&r===12&&(r=0);let i=new Date(Date.UTC(new Date().getUTCFullYear(),n,Number(e[2]),r,s));return Number.isFinite(i.getTime())?Math.floor(i.getTime()/1e3):void 0}function NW(t){let e=[];for(let n of t.split(/\r?\n/)){let r=CW.exec(n.trim());if(!r)continue;let s=r[1].trim(),o=s.toLowerCase()==="session",a=/\(([^)]+)\)/.exec(s)?.[1]?.trim()??s,l=o?"session":a.toLowerCase()==="all models"?"week-all-models":`week-scoped-${a}`,c=o?"five_hour":"weekly";e.push(qt({bucket_id:l,group_name:o?"session":"weekly",window_type:c,used_fraction:Cn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:AW(r[3])}))}return e.sort((n,r)=>String(n.window_type).localeCompare(String(r.window_type))||String(n.bucket_id).localeCompare(String(r.bucket_id)))}function OW(t){let e={},n;for(let r of t.split(/\r?\n/)){let s=/^Last\s+(\S+)\s*[·-]\s*(\d+)\s+requests?\s*[·-]\s*(\d+)\s+sessions?\s*$/.exec(r.trim());if(s){n={requests:Number(s[2]),sessions:Number(s[3])},e[`window_${s[1].toLowerCase()}`]=n;continue}let i=/^\s+(\d+)%\s+of your usage\s+(.+?)\s*$/.exec(r);if(!i||!n)continue;let o=i[2].toLowerCase(),a=o.includes(">150k context")?"pct_high_context":o.includes("active for 8+ hours")?"pct_long_sessions":o.includes("subagent-heavy")?"pct_subagent_heavy":o.includes("ran in parallel")?"pct_parallel_sessions":void 0;a&&(n[a]=Number(i[1]))}return e}function LW(t,e){let n=t&&typeof t=="object"?t:void 0,r=e&&typeof e=="object"?e:void 0,s=!!(n?.limit||n?.used||n?.percent!==void 0);if(!s&&(!r||r.is_enabled===!1))return;let i=s&&n?.limit&&typeof n.limit=="object"?n.limit:{},o=s&&n?.used&&typeof n.used=="object"?n.used:{},a=y=>{let b=typeof y=="number"?y:typeof y=="string"&&y.trim()!==""?Number(y):NaN;return Number.isSafeInteger(b)&&b>=0&&b<=9?b:void 0},l=y=>{let b=typeof y=="number"?y:typeof y=="string"&&y.trim()!==""?Number(y):NaN;return Number.isFinite(b)?b:void 0},c=a(i.exponent??r?.decimal_places??2),u=a(o.exponent??r?.decimal_places??2),d=s?i.amount_minor:r?.monthly_limit,m=s?o.amount_minor:r?.used_credits,p=(y,b,_)=>b===void 0||_!==void 0&&_!=="USD"||l(y)===void 0?void 0:(l(y)/10**b).toFixed(2),f=Cn(s?n?.percent:r?.utilization,"percent"),g=s?n?.spend_limit_reached??r?.spend_limit_reached:r?.spend_limit_reached,h={limit_usd:p(d,c,i.currency??r?.currency),used_usd:p(m,u,o.currency??r?.currency),remaining_fraction:f==null?void 0:Math.max(0,1-f),resets_at_iso:s?n?.resets_at:void 0,...typeof g=="boolean"?{reached:g}:{}};return Object.values(h).every(y=>y==null)?void 0:h}async function OI(t,e,n,r={}){try{let s=LI("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:MI(e),maxBuffer:16777216}),i=typeof s.stdout=="string"?s.stdout:"";Xt(r,"claude_cli_print",i,[t.accessToken,t.refreshToken]);let o=NW(i);if(!o.length)return;let a=OW(i);return Ze("claude",et.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:o,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function PI({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=xI(e);if(s.error==="not_claude_ai_subscriber")return mn(et.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return mn(et.unavailable,"credentials_missing",`credentials file not found: ${Nh(e)}`);if(s.error)return mn(et.expired,"oauth_token_expired_or_invalid",s.error);let i=s.oauth,o=Array.isArray(i.scopes)?i.scopes:[];if(o.length&&!o.includes(NI))return mn(et.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${NI} scope required by the usage endpoint`);let a=new AbortController,l=setTimeout(()=>a.abort(),t*1e3),c,u;try{let y=!1,b=async()=>{try{i=await AI({...s,oauth:i},a.signal),y=!0}catch(v){let E=v instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(v.message)?v.message:"refresh_failed";if(E==="refresh_http_429")return mn(et.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(E==="refresh_lock_stale")return mn(et.expired,"oauth_refresh_locked","a previous Claude credential refresh exited without releasing its lock; remove the stale .credentials.json.lmctl-refresh.lock directory before retrying");let R=E==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(E);return mn(R?et.expired:et.unavailable,R?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${E})${R?"; renew Claude login":"; try again later"}`)}};if(Vu(i)){let v=await b();if(v)return v}let _=()=>fetch(`${SW}/api/oauth/usage`,{headers:{Authorization:`Bearer ${i.accessToken}`,"anthropic-beta":kW,"Content-Type":"application/json","User-Agent":IW(e)},signal:a.signal});if(c=await _(),u=await c.text(),Xt({debug:n,onRawResponse:r},"claude_oauth_api",u,[i.accessToken,i.refreshToken],c.status),c.status===401&&!y&&s.path&&i.refreshToken){let v=await b();if(v)return v;c=await _(),u=await c.text(),Xt({debug:n,onRawResponse:r},"claude_oauth_api",u,[i.accessToken,i.refreshToken],c.status)}}catch(y){let b=await OI(i,e,t,{debug:n,onRawResponse:r});return b||mn(et.unavailable,"request_failed",`${y instanceof Error?y.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let d=(...y)=>Bi(mn(...y),u,[String(i.accessToken??""),String(i.refreshToken??"")]);if(c.status===401)return d(et.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return d(et.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let y=xW(c.headers),b=await OI(i,e,t,{debug:n,onRawResponse:r});return b||d(et.throttled,"rate_limited",`usage endpoint rate limited${y==null?"":`; retry after ${y}s`}`,"claude_oauth_api",y)}if(c.status!==200)return d(et.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let m;try{m=JSON.parse(u)}catch{return mn(et.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!m||typeof m!="object"||Array.isArray(m))return mn(et.unavailable,"malformed_response","response was not an object");let p=m,f=Array.isArray(p.limits)?p.limits:[],g=f.length?f.flatMap(y=>{if(!y||typeof y!="object")return[];let b=y.kind,_=RW(b==="session"?"session":b),v=y.scope?.model?.display_name,E=b==="session"?"session":b==="weekly_all"?"week-all-models":`week-scoped-${v||b}`;return[qt({bucket_id:E,group_name:b==="session"?"session":"weekly",window_type:_,used_fraction:Cn(y.percent,"percent"),resets_at_iso:y.resets_at,raw_value:y.percent,raw_scale:"used_percent"})]}):["five_hour","seven_day"].flatMap(y=>{let b=p[y];return!b||typeof b!="object"?[]:[qt({bucket_id:y==="five_hour"?"session":"week-all-models",group_name:y==="five_hour"?"session":"weekly",window_type:y==="five_hour"?"five_hour":"weekly",used_fraction:Cn(b.utilization,"percent"),resets_at_iso:b.resets_at,raw_value:b.utilization,raw_scale:"used_percent"})]}),h=LW(p.spend,p.extra_usage);return Ze("claude",et.ok,{source:"claude_oauth_api",account_id:null,plan_type:i.subscriptionType??i.rateLimitTier??null,ordinary_usage_allowed:null,buckets:g.sort((y,b)=>String(y.window_type).localeCompare(String(b.window_type))||String(y.bucket_id).localeCompare(String(b.bucket_id))),...h?{spend_control:h}:{}})}var SW,kW,NI,et,CW,DI=M(()=>{"use strict";lr();CI();lr();SW="https://api.anthropic.com",kW="oauth-2025-04-20",NI="user:profile";et={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};CW=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as jI}from"node:crypto";import{mkdirSync as MW,readFileSync as Oh,realpathSync as PW,renameSync as DW,rmSync as Lh,statSync as FI,writeFileSync as UI}from"node:fs";import{homedir as FW}from"node:os";import{join as Mh}from"node:path";import{setTimeout as $W}from"node:timers/promises";function Oa(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function Dh(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||Mh(t.HOME||FW(),".codex");return Mh(e,"auth.json")}function Ph(t){let e=Oa(JSON.parse(Oh(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function HI(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=Dh(t);try{let n=Oa(Ph(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:PW(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function $I(t,e){return t.access_token===e.access_token&&t.refresh_token===e.refresh_token&&t.id_token===e.id_token&&t.account_id===e.account_id}async function HW(t,e){let n=`${t}.lmctl-refresh.lock`,r=Mh(n,"owner.json"),s=jI();for(;;){e.throwIfAborted();try{MW(n,{mode:448});try{UI(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(i){throw Lh(n,{recursive:!0,force:!0}),i}return()=>{try{JSON.parse(Oh(r,"utf8")).token===s&&Lh(n,{recursive:!0,force:!0})}catch{}}}catch(i){if(i.code!=="EEXIST")throw i;let o=!1;try{let a=JSON.parse(Oh(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){o=l.code==="ESRCH"}else o=Date.now()-FI(n).mtimeMs>6e4}catch{try{o=Date.now()-FI(n).mtimeMs>6e4}catch{continue}}if(o)throw new Error("refresh_lock_stale");await $W(50,void 0,{signal:e})}}}async function BI(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await HW(t.path,e);try{let r=Ph(t.path),s=Oa(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!$I(s,t.tokens)&&typeof s.access_token=="string")return s;if(typeof s.refresh_token!="string"||!s.refresh_token)throw new Error("no_refresh_token");let i=await fetch(jW,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:UW})});if(!i.ok)throw new Error(`refresh_http_${i.status}`);let o=Oa(await i.json());if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||o.refresh_token!==void 0&&(typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token))||o.id_token!==void 0&&(typeof o.id_token!="string"||!/^\S+$/.test(o.id_token)))throw new Error("invalid_refresh_response");let a=Ph(t.path),l=Oa(a.tokens);if(!l||!$I(s,l)){if(l&&typeof l.access_token=="string")return l;throw new Error("credentials_changed")}let c={...l,access_token:o.access_token,...o.refresh_token===void 0?{}:{refresh_token:o.refresh_token},...o.id_token===void 0?{}:{id_token:o.id_token}},u={...a,tokens:c,last_refresh:new Date().toISOString()},d=`${t.path}.${jI()}.tmp`;try{UI(d,JSON.stringify(u),{flag:"wx",mode:384}),DW(d,t.path)}finally{Lh(d,{force:!0})}return c}finally{n()}}var jW,UW,WI=M(()=>{"use strict";jW="https://auth.openai.com/oauth/token",UW="app_EMoamEEZ73f0CkXaXp7hrann"});function Nn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function qI(t){let e=typeof t=="number"?t:Number(t);if(!Number.isFinite(e)||e<=0)return"unknown";let n=e/60;return n>=240&&n<=360?"five_hour":n>=9e3&&n<=11500?"weekly":n>=38e3&&n<=46e3?"monthly":"unknown"}function XI(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function qW(t){if(Nn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function XW(t){let e=[],n=Nn(t.rate_limit)?t.rate_limit:{},r=typeof n.allowed=="boolean"?n.allowed:void 0,s=typeof n.limit_reached=="boolean"?n.limit_reached:void 0;for(let o of["primary_window","secondary_window"]){let a=Nn(n[o])?n[o]:void 0;if(!a)continue;let l=qI(a.limit_window_seconds);e.push(qt({bucket_id:`codex-${XI(l)}`,group_name:"codex",window_type:l,used_fraction:Cn(a.used_percent,"percent"),resets_at:a.reset_at,raw_value:a.used_percent,raw_scale:"used_percent",...r===void 0?{}:{allowed:r},...s===void 0?{}:{limit_reached:s}}))}let i=Array.isArray(t.additional_rate_limits)?t.additional_rate_limits:[];for(let o of i){if(!Nn(o))continue;let a=Nn(o.rate_limit)?o.rate_limit:{},l=typeof o.limit_name=="string"?o.limit_name:void 0,c=typeof o.metered_feature=="string"?o.metered_feature:void 0,u=c||l||"additional",d=typeof a.allowed=="boolean"?a.allowed:void 0,m=typeof a.limit_reached=="boolean"?a.limit_reached:void 0;for(let p of["primary_window","secondary_window"]){let f=Nn(a[p])?a[p]:void 0;if(!f)continue;let g=qI(f.limit_window_seconds);e.push(qt({bucket_id:`${u}-${XI(g)}`,group_name:l||u,window_type:g,used_fraction:Cn(f.used_percent,"percent"),resets_at:f.reset_at,raw_value:f.used_percent,raw_scale:"used_percent",...l===void 0?{}:{limit_name:l},...c===void 0?{}:{metered_feature:c},...d===void 0?{}:{allowed:d},...m===void 0?{}:{limit_reached:m}}))}}return e.sort((o,a)=>String(o.group_name??"").localeCompare(String(a.group_name??""))||String(o.bucket_id).localeCompare(String(a.bucket_id)))}function GW(t){let e=Nn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Nn(t.spend_control)?t.spend_control:void 0,s=Nn(t.credits)?t.credits:void 0;return Ze("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:XW(t),...s?{credits:qW(s)}:{},...r?{spend_control:r}:{}})}async function GI(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,i=HI(n),o=i.tokens;if(!o||typeof o.access_token!="string")return Ze("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${Dh(n)} (or $CODEX_ACCESS_TOKEN)`});let a=new AbortController,l=setTimeout(()=>a.abort(),Math.ceil(e*1e3)),c=o.access_token,u=new Set([o.access_token,o.refresh_token,o.id_token].filter(d=>typeof d=="string"&&!!d));try{let d=typeof o.account_id=="string"?o.account_id:void 0,m=typeof o.refresh_token=="string"?o.refresh_token:void 0,p=typeof o.id_token=="string"?o.id_token:void 0,f="",g=()=>[...u],h=(R,S)=>Bi(Ze("codex",R,S),f,g()),y=!1,b=async()=>{if(!(y||!i.path||typeof o.refresh_token!="string"))try{let R=await BI({...i,tokens:{...o,refresh_token:m}},a.signal);typeof R.access_token=="string"&&(u.add(R.access_token),c=R.access_token),d=typeof R.account_id=="string"?R.account_id:d,typeof R.refresh_token=="string"&&(u.add(R.refresh_token),m=R.refresh_token),typeof R.id_token=="string"&&(u.add(R.id_token),p=R.id_token),y=!0;return}catch(R){let S=R instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(R.message)?R.message:"refresh_failed",I=S==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(S);return Ze("codex",I?"auth_expired":"provider_unavailable",{source:"codex_http",reason:I?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${S})${I?"; renew Codex login":"; try again later"}`})}},_=()=>{let R={Authorization:`Bearer ${c}`,"User-Agent":WW,"Content-Type":"application/json",Accept:"application/json"};d&&(R["ChatGPT-Account-Id"]=d);let S=(n.CODEX_BASE_URL||BW).replace(/\/$/,"");return fetch(`${S}/wham/usage`,{headers:R,signal:a.signal})},v=await _();if(f=await v.text(),Xt({debug:r,onRawResponse:s},"codex_http",f,g(),v.status),v.status===401&&i.path&&m){let R=await b();if(R)return R;v=await _(),f=await v.text(),Xt({debug:r,onRawResponse:s},"codex_http",f,g(),v.status)}if(v.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(v.status===429){let R=v.headers.get("retry-after"),S=R===null?void 0:Number.parseInt(R,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...S!==void 0&&Number.isFinite(S)&&S>=0?{retry_after_seconds:S}:{}})}if(!v.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${v.status}`,detail:"codex usage endpoint returned an unexpected status"});let E;try{E=JSON.parse(f)}catch(R){return Ze("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:Hi(String(R),u)})}return Nn(E)?GW(E):Ze("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(d){let m=d instanceof Error?`${d.name}: ${d.message}`:String(d);return Ze("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:Hi(m,u)})}finally{clearTimeout(l)}}var BW,WW,JI=M(()=>{"use strict";lr();WI();lr();BW="https://chatgpt.com/backend-api",WW="codex-cli"});import{createHash as JW,randomUUID as VW}from"node:crypto";import{readFileSync as QI,openSync as zW,fsyncSync as KW,closeSync as YW,mkdirSync as VI,writeFileSync as ZI,renameSync as QW,rmSync as ZW,rmdirSync as eq,statSync as Fh,utimesSync as tq}from"node:fs";import{homedir as nq}from"node:os";import{basename as rq,dirname as sq,join as zu}from"node:path";import{setTimeout as ex}from"node:timers/promises";function oq(t){let e;try{e=QI(t,"utf8")}catch(s){if(s.code==="ENOENT")return{};throw new Error("config_unreadable")}let n={},r="other";for(let s of e.split(/\r?\n/)){let i=/^\s*\[providers\.(?:"managed:kimi-code"|'managed:kimi-code')(\.oauth)?\]\s*(?:#.*)?$/.exec(s);if(i){r=i[1]?"oauth.":"";continue}if(/^\s*\[/.test(s)){if(s.includes("managed:kimi-code"))throw new Error("config_format_unsupported");r="other";continue}if(r==="other")continue;if(/^\s*oauth\s*=/.test(s))throw new Error("config_format_unsupported");let o=/^\s*(base_url|oauth_host|storage|key)\s*=\s*("(?:[^"\\]|\\.)*"|'[^']*')\s*(?:#.*)?$/.exec(s);if(!o&&/^\s*(base_url|oauth_host|storage|key)\s*=/.test(s))throw new Error("config_malformed");if(o)try{n[r+o[1]]=o[2].startsWith('"')?JSON.parse(o[2]):o[2].slice(1,-1)}catch{throw new Error("config_malformed")}}return n}function Ku(t){let e;try{e=JSON.parse(QI(t,"utf8"))}catch(n){throw new Error(n.code==="ENOENT"?"credentials_missing":"credentials_malformed")}if(e&&typeof e=="object"&&e.access_token===""&&e.refresh_token==="")throw new Error("credentials_revoked");if(!e||typeof e!="object"||Array.isArray(e)||typeof e.access_token!="string"||!e.access_token.trim())throw new Error("credentials_malformed");return e}function tx(t){let e=t.KIMI_CODE_HOME??zu(t.HOME??nq(),".kimi-code"),n=oq(t.KIMI_CODE_CONFIG_PATH??zu(e,"config.toml")),r=t.KIMI_CODE_BASE_URL!==void 0||t.KIMI_CODE_OAUTH_HOST!==void 0||t.KIMI_OAUTH_HOST!==void 0,s=KI(t.KIMI_CODE_BASE_URL??n.base_url??zI),i=KI(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?$h:n["oauth.oauth_host"]??$h)),o=s===zI&&i===$h?"kimi-code":`kimi-code-env-${JW("sha256").update(JSON.stringify({oauthHost:i,baseUrl:s})).digest("hex").slice(0,16)}`;if(!t.KIMI_CREDENTIALS_PATH&&!r&&n["oauth.key"]===`oauth/${o}`&&n["oauth.storage"]&&n["oauth.storage"]!=="file")throw new Error("credential_storage_unsupported");let a=t.KIMI_CREDENTIALS_PATH??zu(e,"credentials",`${o}.json`),l=Ku(a),c=a,u=rq(a,".json");return{home:e,path:c,lockTarget:zu(e,"oauth",u),baseUrl:s,oauthHost:i,token:l}}function Yu(t){if(typeof t.expires_at!="number")return!1;let e=typeof t.expires_in=="number"?t.expires_in:0;return t.expires_at-Date.now()/1e3<Math.max(300,e*.5)}function YI(t,e){return t.access_token===e.access_token&&t.refresh_token===e.refresh_token&&t.expires_at===e.expires_at&&t.expires_in===e.expires_in}async function aq(t,e){VI(sq(t),{recursive:!0}),ZI(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{VI(n);break}catch(o){if(o.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-Fh(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await ex(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=Fh(n),s=()=>{let o;try{o=Fh(n)}catch{throw new Error("refresh_lock_lost")}if(o.ino!==r.ino||o.dev!==r.dev)throw new Error("refresh_lock_lost")},i=setInterval(()=>{try{s();let o=new Date;tq(n,o,o)}catch{}},1e3);return i.unref(),{assertOwned:s,release(){clearInterval(i);try{s(),eq(n)}catch{}}}}async function nx(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await aq(t.lockTarget,e);try{let r=Ku(t.path);if(!YI(r,t.token)&&!Yu(r))return r;if(typeof r.refresh_token!="string"||!r.refresh_token)throw new Error("no_refresh_token");let s;for(let d=0;d<3;d++){try{if(s=await fetch(`${t.oauthHost}/api/oauth/token`,{method:"POST",signal:e,headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","User-Agent":"lmctl"},body:new URLSearchParams({client_id:iq,grant_type:"refresh_token",refresh_token:r.refresh_token})}),![429,500,502,503,504].includes(s.status)||d===2)break;await s.body?.cancel()}catch{if(e.aborted||d===2)throw new Error("refresh_request_failed")}await ex(1e3*2**d,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let d=Ku(t.path);if(d.refresh_token!==r.refresh_token)return d}catch{}throw new Error(`refresh_http_${s.status}`)}let i=await s.json(),o=Number(i?.expires_in);if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token)||!Number.isFinite(o)||o<=0)throw new Error("invalid_refresh_response");let a=Math.floor(Date.now()/1e3)+o;if(!Number.isSafeInteger(a))throw new Error("invalid_refresh_response");n.assertOwned();let l=Ku(t.path);if(!YI(l,r)){if(!Yu(l))return l;throw new Error("credentials_changed")}let c={...l,access_token:i.access_token,refresh_token:i.refresh_token,expires_at:a,expires_in:o,...typeof i.scope=="string"?{scope:i.scope}:{},...typeof i.token_type=="string"?{token_type:i.token_type}:{}},u=`${t.path}.${VW()}.tmp`;try{let d=zW(u,"wx",384);try{ZI(d,JSON.stringify(c,null,2)+`
2353
- `),KW(d)}finally{YW(d)}n.assertOwned(),QW(u,t.path)}finally{ZW(u,{force:!0})}return c}finally{n.release()}}var zI,$h,iq,KI,rx=M(()=>{"use strict";zI="https://api.kimi.com/coding/v1",$h="https://auth.kimi.com",iq="17e5f671-d194-4dfb-9706-5516cb48c098",KI=t=>t.trim().replace(/\/+$/,"")});function sx(t){let e=o=>{if(typeof o!="number"&&typeof o!="string"||typeof o=="string"&&o.trim()==="")return;let a=Number(o);return Number.isFinite(a)&&a>=0?a:void 0},n=e(t.limit),r=e(t.used),s=e(t.remaining);if(n===void 0||n<=0||r===void 0&&(s===void 0||s>n))return;let i=r??n-s;return{used:i,limit:n,remaining:Math.max(0,n-i)}}async function ix({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=tx(e)}catch(g){let h=g instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(g.message)?g.message:"credentials_unreadable";return Ct("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let i=s.token,o=new AbortController,a=setTimeout(()=>o.abort(),t*1e3),l,c;try{let g=!1,h=async()=>{i=await nx({...s,token:i},o.signal),g=!0};Yu(i)&&await h();let y=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${i.access_token}`,Accept:"application/json"},signal:o.signal});l=await y(),c=await l.text(),Xt({debug:n,onRawResponse:r},"kimi_http",c,[i.access_token,i.refresh_token],l.status),l.status===401&&!g&&i.refresh_token&&(await h(),l=await y(),c=await l.text(),Xt({debug:n,onRawResponse:r},"kimi_http",c,[i.access_token,i.refresh_token],l.status))}catch(g){let h=g instanceof Error&&/^(no_refresh_token|credentials_changed|credentials_revoked|invalid_refresh_response|refresh_locked|refresh_lock_stale|refresh_lock_failed|refresh_lock_lost|refresh_request_failed|refresh_http_\d+)$/.test(g.message)?g.message:"request_failed",y=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),b=h==="refresh_lock_stale"?"Kimi refresh lock is stale; run the native Kimi CLI to recover its lock, or verify no refresh is active before removing the .lock directory":y?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return Ct("kimi",y?"auth_expired":"provider_unavailable",h,b,"kimi_http")}finally{clearTimeout(a)}let u=(g,h,y)=>Bi(Ct("kimi",g,h,h,"kimi_http",[],y),c,[i.access_token]);if(l.status===401)return u("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return u("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let g=_I(l.headers);return u("reader_throttled","HTTP 429 from Kimi usage endpoint",g)}if(l.status!==200)return u("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let d;try{d=JSON.parse(c)}catch{return Ct("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!d||typeof d!="object")return Ct("kimi","provider_unavailable","malformed_response","response was not an object");let m=[],p=new Set;function f(g){let h=String(g.bucket_id),y=h,b=2;for(;p.has(h);)h=`${y}-${b}`,b++;p.add(h),g.bucket_id=h,m.push(qt(g))}if(Array.isArray(d.limits))for(let g of d.limits){if(!g||typeof g!="object")continue;let h=g.window,y=g.detail;if(!h||typeof h!="object"||!y||typeof y!="object")continue;let b=0;if(h.timeUnit==="TIME_UNIT_MINUTE")b=Number(h.duration);else if(h.timeUnit==="TIME_UNIT_HOUR")b=Number(h.duration)*60;else if(h.timeUnit==="TIME_UNIT_DAY")b=Number(h.duration)*1440;else if(h.timeUnit==="TIME_UNIT_WEEK")b=Number(h.duration)*10080;else if(h.timeUnit==="TIME_UNIT_MONTH")b=Number(h.duration)*43200;else continue;let _=hI(b),v="window";_==="five_hour"&&(v="5h"),_==="weekly"&&(v="weekly"),_==="monthly"&&(v="monthly");let E=sx(y);if(!E)continue;let{used:R,limit:S,remaining:I}=E;f({bucket_id:`kimi-${v}`,window_type:_,used_fraction:vt(R/S),remaining_fraction:vt(I/S),resets_at_iso:y.resetTime,raw_value:R,raw_scale:"count"})}if(d.usage&&typeof d.usage=="object"){let g=sx(d.usage);g&&f({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:vt(g.used/g.limit),remaining_fraction:vt(g.remaining/g.limit),resets_at_iso:d.usage.resetTime,raw_value:g.used,raw_scale:"count"})}if(d.usages&&typeof d.usages=="object"){let g=[{key:"limit_5h",id:"kimi-5h",type:"five_hour"},{key:"limit_7d",id:"kimi-weekly",type:"weekly"},{key:"limit_month_total",id:"kimi-monthly",type:"monthly"},{key:"limit_month_code",id:"kimi-monthly-code",type:"monthly"}];for(let{key:h,id:y,type:b}of g){let _=d.usages[h];if(!_||typeof _!="object"||_.used_ratio==null||_.used_ratio===""||typeof _.used_ratio=="boolean")continue;let v=Number(_.used_ratio);!Number.isFinite(v)||v<0||p.has(y)||(p.add(y),m.push(qt({bucket_id:y,window_type:b,used_fraction:vt(v),resets_at_iso:typeof _.reset_time=="string"&&_.reset_time?_.reset_time:null,raw_value:v,raw_scale:"ratio"})))}}return Ze("kimi","ok",{source:"kimi_http",buckets:m})}var ox=M(()=>{"use strict";lr();rx();lr()});async function lx(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(u=>typeof u!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let u of e)if(!ax.includes(u))return{status:"error",error:`unknown provider: ${u} (valid targets: ${ax.join(", ")})`,readings:[]};let n=t.timeoutSeconds??lq;if(!Number.isFinite(n)||n<=0)return{status:"error",error:"timeoutSeconds must be a positive finite number",readings:[]};let r=t.env??process.env,s=new Set(e.includes("all")?["codex","agy","claude","kimi"]:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let o=Object.entries({codex:GI,agy:EI,claude:PI,kimi:ix}).filter(([u])=>s.has(u)).map(async([,u])=>{let d=[],m=await u({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:f=>d.push(f)}:{}}),p=t.includeRaw?{...m,raw_responses:d}:m;return p&&t.onReading?.(p),p}),a=await Promise.allSettled(o),l=a.find(u=>u.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(u=>u.status==="fulfilled").map(u=>u.value).filter(Boolean)}}var ax,lq,cx=M(()=>{"use strict";TI();DI();JI();ox();ax=["all","codex","agy","claude","kimi"],lq=15});async function cq(t,e={}){try{let n=me(t);if(n)return n;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Ratelimit options must be a map");let{providers:r,provider:s,timeoutSeconds:i=15}=e,o=r??(s===void 0?["all"]:[s]);if(Object.keys(e).some(l=>!ar("readRatelimits").includes(l))||!Array.isArray(o)||o.some(l=>typeof l!="string"||!l||l.startsWith("-")))return B("invalid_argument","providers must be a list of provider names");if(typeof i!="number"||!Number.isFinite(i)||i<=0)return B("invalid_argument","timeoutSeconds must be a positive finite number");let a=await lx({providers:o.length?[...o]:["all"],timeoutSeconds:i,env:{...t.env},progress:l=>t.onProgress(l+`
2354
- `,"stderr")});return a.status==="ok"?fe({readings:a.readings}):B("provider",a.error,{readings:[]})}catch(n){return B("provider",G(n),{readings:[]})}}var ux=M(()=>{"use strict";cx();en();mt()});function jh(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function gq(t,e,n,r){let s=new Set,i=[];for(let o of e){let a=n===null?null:ic(t,o,n,r),l=a?.kind==="priced"||a?.kind==="estimated"?`id:${a.model.normalizedId}`:a?.kind==="known-unpriced"?`id:${a.id}`:`raw:${o.trim().toLowerCase()}`;s.has(l)||(s.add(l),i.push(o))}return i}async function dx(t,e,n){let r=[...new Set([...n.messages.map(A=>A.model),...(n.responses??[]).map(A=>A.model??void 0)].filter(A=>A!==void 0&&A!=="<synthetic>"))],s=[...n.messages].reverse().find(A=>A.model!==void 0&&A.model!=="<synthetic>")?.model,i=n.model??s??null,o=hr(n.responses??[],n.captureStatus!=="partial"),a=t==="gemini"&&(n.totalOutputTokens!==void 0||n.totalReasoningOutputTokens!==void 0)?(n.totalOutputTokens??0)+(n.totalReasoningOutputTokens??0):n.totalOutputTokens??null,l={input:n.responses?o.input_uncached:n.totalInputTokens??null,output:n.responses?o.output:a,cachedInput:n.responses?o.input_cached:n.totalCachedInputTokens??null},c=await fs(),u=gq(t,r,c.catalog,c.aliases),d=n.responses===void 0&&u.length>1,m="unavailable",p=null,f=null,g=null,h=null,y=!1,b=null,_=null;if(i!==null&&c.catalog!==null){let A=ai(t,i,c.catalog,c.aliases);if(m=A.state.kind,A.offer!==null)_=A.offer.pricing,p=A.offer.route,f=A.offer.source,g=A.offer.sourceModelId,h=A.provenance,y=A.offer.estimated;else switch(A.state.kind){case"unresolved":b=`alias "${A.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":b=`"${A.state.id}" is a known model with no published price row`;break;case"unknown":b=`model "${i}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":b=`model "${i}" is not offered by provider "${t}" (found under: ${A.state.otherProviders.join(", ")})`;break;default:b=`no lmprice catalog coverage for provider "${t}"`;break}}else i!==null&&(b="lmprice catalog unavailable");let v=_===null?null:{inputPer1m:_.input_per_1m_tokens,outputPer1m:_.output_per_1m_tokens,cachedInputPer1m:_.input_cache_read_per_1m_tokens},E=l.cachedInput??0,R=n.totalCacheWriteInputTokens??0,S=["claude","codex","gemini","qwen","copilot"].includes(t),I=l.input===null?null:Math.max(0,l.input-(S?E:0)-(t==="claude"||t==="copilot"?R:0)),N=l.input===null||l.output===null?null:Fo({input:I,output:l.output,cachedInput:E,...R>0?{cacheWrite:R,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},_);if(N===null&&E>0&&_!==null&&_.input_cache_read_per_1m_tokens==null&&(b="no applicable cache-read price rate"),n.responses)if(N=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(A=>A.response_id)).size!==n.responses.length)b="session accounting coverage is incomplete";else if(!c.catalog)b="lmprice catalog unavailable";else{let A=0,w=null;for(let T of n.responses){let k=T.tokens;if(!T.model){w="a response lacks a model";break}let x=n.turns?.flatMap(Xe=>Xe.rawUsage??[]).find(Xe=>Xe.responseId===T.response_id)?.values,C=x?.promptTokens??x?.prompt_tokens,L=x?.input_tokens,P=x?.cache_read_tokens??x?.input_cache_read_tokens,j=x?.cache_write_tokens??x?.input_cache_write_tokens;if(typeof L=="number"&&typeof P=="number"&&P>L||typeof C=="number"&&typeof P=="number"&&P>C||typeof C=="number"&&typeof j=="number"&&j>C||typeof C=="number"&&typeof P=="number"&&typeof j=="number"&&P+j>C){w=`${t} reported contradictory token counters`;break}if(k.output===null){w=`${t} does not record output tokens`;break}if(k.input_cached===null){w=`${t} does not record cached input tokens`;break}let F=T.model_provider??t,Z=jh(T.model??""),q=(F==="deepseek"||T.model_provider==="deepseek")&&(T.model_provider===void 0||T.model_provider==="deepseek")&&fq.has(Z),Y=k.input_cache_write;if(Y===null&&!q){w=`${t} does not record cache-write input tokens`;break}if(t==="agy"&&(Y??0)>0){w="cache-write inclusion in input is not verified";break}let ne=["kimi","opencode","miniplayer"].includes(t),de=ai(F,T.model,c.catalog,c.aliases),ee=de.offer??ai(t,T.model,c.catalog,c.aliases).offer;if(ee===null){switch(de.state.kind){case"no-catalog":w=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":w=`alias "${de.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":w=`"${de.state.id}" is a known model with no published price row`;break;case"unknown":w=`model "${T.model}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":w=`model "${T.model}" is not offered by provider "${t}" (found under: ${de.state.otherProviders.join(", ")})`;break;default:w=`no applicable price for response model "${T.model}"`;break}break}if(Y===null){let Xe=(ee.route??"").toLowerCase(),H=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(Xe),W=jh(ee.sourceModelId??""),V=ee.provider==="deepseek"&&ee.source!=="openrouter"&&!H&&W===Z;if(q&&V)Y=0;else{w=`${t} does not record cache-write input tokens`;break}}if(k.input_uncached===null){w=`${t} does not record uncached input tokens`;break}let tt=Fo({input:Math.max(0,k.input_uncached-(ne?Y:0)),cachedInput:k.input_cached,cacheWrite:Y,output:k.output},ee?.pricing??null);if(tt===null){w=`no applicable price for response model "${T.model}"`;break}A+=tt,!p&&ee&&(p=ee.route,m="priced")}N=w?null:A,b=w}return N===null&&(!n.responses&&l.input===null&&l.output===null?b=`${t} does not record token usage`:!n.responses&&l.input===null&&!b?b=`${t} does not record input tokens`:!n.responses&&l.output===null&&!b?b=`${t} does not record output tokens`:b||(b=`no lmprice entry for "${i??"unknown"}"`),(m==="priced"||m==="estimated")&&(m="unavailable",p=null,f=null,g=null,h=null,v=null)),{schema_version:hq,provider:t,sessionId:e,model:i,modelsUsed:u,approximate:d,tokens:l,pricePerModel:v,costUsd:N,priceResolution:m,priceRoute:p,priceSource:f,priceSourceModelId:g,priceProvenance:h,priceEstimated:y,costUnavailableReason:b,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}var pq,fq,hq,mx=M(()=>{"use strict";To();Di();pq=xd(Pc(),1);gs();oc();zn();En();xc();fq=new Set([...Rc,...Ic,"deepseek-v4.1-flash","deepseek-chat","deepseek-reasoner","deepseek-coder","deepseek-v3","deepseek-v3.2","deepseek-r1"].map(jh));hq=1});async function px(t,e,n,r){let s={role:"assistant",content:r,provider:e,sessionid:n,model:null,usage:{input:null,cachedInput:null,cacheWrite:null,output:null},costUsd:null,costUnavailableReason:null,priceRoute:null,priceDataSource:"unavailable"};try{let i=await Xr(n,e);if(!i)return{...s,costUnavailableReason:"session not readable after the turn"};let o=i.turns?.at(-1),a=new Set(o?.responseIds??[]),l=(i.responses??[]).filter(m=>a.has(m.response_id));if(!o||!l.length)return{...s,costUnavailableReason:`${e} does not record per-turn accounting`};let c={...i,turns:[o],responses:l,messages:[],model:l.at(-1)?.model??o.model??i.model},u=await dx(e,n,c),d=m=>l.some(p=>p.tokens[m]===null)?null:l.reduce((p,f)=>p+f.tokens[m],0);return{...s,model:u.model,usage:{input:d("input_uncached"),cachedInput:d("input_cached"),cacheWrite:d("input_cache_write"),output:d("output")},costUsd:u.costUsd,costUnavailableReason:u.costUnavailableReason,priceRoute:u.priceRoute,priceDataSource:u.priceDataSource}}catch(i){return{...s,costUnavailableReason:`cost unavailable: ${i instanceof Error?i.message:String(i)}`}}}var fx=M(()=>{"use strict";Di();mx()});import{basename as yq}from"node:path";function yx(t,e){let n=new Date(e.now.getTime()-Vr()).toISOString(),r=bx(t,n).filter(p=>!p.sender.teamfile.startsWith("prompt:")),s=wq(e.sender,r),i=Eq(e.sender,r);i!==null&&i.teamfile===e.root&&!hx(s[0],i)&&s.unshift({...i,at:null});let o={teamfile:e.receiverTeamfile,alias:e.receiverAlias,at:e.now.getTime()},a=[...s,o],l=s.filter(p=>hx(p,o)),c=l.map(p=>p.at).filter(p=>p!==null).sort((p,f)=>f-p)[0]??null,u=c!==null&&e.now.getTime()-c<_q,d=Uh(e.sender,r).length;return{stop:l.length>=1&&u&&d>=vq,chain:Tq(a)}}function _x(t,e){let n=new Date(e.now.getTime()-Vr()).toISOString(),r=bx(t,n),s=Uh(e.sender,r);if(s.length===0)return null;let i=s[0];return i.sender.teamfile.startsWith("prompt:")?i.receiver.teamfile:i.sender.teamfile}function Vr(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return gx;let n=Number(e);return!Number.isFinite(n)||n<=0?gx:n}function vx(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function bq(t){return{sender:{teamfile:t.sender_teamfile,alias:t.sender_alias},receiver:{teamfile:t.receiver_teamfile,alias:t.receiver_alias},at:Date.parse(t.started_at)}}function bx(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(bq).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function wq(t,e,n={}){let r=new Map;for(let a of e)r.set(Os(a.receiver),a);let s=[{...t,at:null}],i=t,o=new Set([Os(t)]);for(let a=0;a<64;a+=1){let l=r.get(Os(i));if(l===void 0)break;s[0]={...s[0],at:s[0].at??l.at};let c={...l.sender,at:l.at};if(l.sender.teamfile.startsWith("prompt:")&&n.includePromptSender!==!0)break;let u=Os(l.sender);if(o.has(u))break;s.unshift(c),o.add(u),i=l.sender}return s}function Uh(t,e){let n=Os(t),r=new Set([n]),s=[n],i=[];for(let o=0;s.length>0&&o<128;o+=1){let a=s.shift();for(let l of e){let c=Os(l.sender),u=Os(l.receiver);c!==a&&u!==a||(i.includes(l)||i.push(l),r.has(c)||(r.add(c),s.push(c)),r.has(u)||(r.add(u),s.push(u)))}}return i.sort((o,a)=>o.at-a.at)}function Eq(t,e){let n=Uh(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function hx(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function Os(t){return`${t.teamfile}\0${t.alias}`}function Tq(t){return t.map(e=>`${yq(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var _q,vq,gx,Qu=M(()=>{"use strict";_q=6e4,vq=2,gx=8*60*60*1e3});function Hh(t,e){if(pc(e)!=="dead")return null;let n=`holder process verified not alive; reconciled to aborted (invocation #${e.id}, holder pid ${e.holder_pid??"unknown"} on ${e.holder_host??"unknown"})`;return t.abortTrackedInvocationAndTerminalizeMessage(e.id,{holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat_at:e.last_heartbeat_at},n)}function Zu(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
2351
+ `);return A&&w.sessionId!==A?(g.status=t.signal.aborted?"cancelled":"error",m("error","","promptAgent: provider changed session identity during resume","provider")):(w.sessionId&&(o=w.sessionId),w.status==="stalled"?m("stalled",w.text,"provider stalled"):w.status==="empty"?m("empty","","promptAgent: provider reported a normal completion but returned no content and no observed activity -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error"):w.sessionId?m("ok",w.text):(g.status=t.signal.aborted?"cancelled":"error",m("error",w.text,"promptAgent: provider did not return a session ID","provider")))}catch(h){return g=Qo(h,t.signal,g),m("error","",G(h),l)}finally{if(await f?.finish(g),c?.stop(),a&&p){p.activeAgents.delete(e);for(let h of d)p.activeSessions.delete(h)}}}async function sI(t,e,n,r={}){return rI(t,e,n,r,!1)}async function iI(t,e,n,r={},s){return rI(t,e,n,r,!0,s)}var kh=M(()=>{"use strict";sr();Qt();en();mt();cf()});import{randomUUID as JB}from"node:crypto";import{resolve as VB}from"node:path";function Ca(t){try{if(!t||typeof t!="object"||Array.isArray(t))return B("invalid_argument","Session target requires provider and sessionid");let e=t.provider,n=t.sessionid;return typeof e!="string"||!e.trim()||typeof n!="string"||!n.trim()?B("invalid_argument","Session target requires provider and sessionid"):{provider:e,sessionid:n}}catch(e){return B("invalid_argument",G(e))}}function Ju(t){return JSON.stringify([t.provider,t.sessionid])}function oI(t,e){try{let n=me(t);if(n)return n;let r=Ca(e);if("status"in r)return r;let s=Nr(t),i=Ju(r);return s.activeAgents.has(e)||s.activeSessions.has(i)?{status:"busy",error:"Session has an active turn in this context",busyReason:"turn"}:s.handoffSessions.has(i)?{status:"busy",error:"Session is reserved for handoff",busyReason:"handoff"}:fe({})}catch(n){return B("invalid_argument",G(n))}}async function aI(t,e,n,r,s={}){let i=e&&typeof e=="object"?Gu.get(e):void 0;return!i||i.ctx!==t||Nr(t).reservations.get(i.key)!==e?{status:"error",error:"Invalid or released session reservation",code:"invalid_argument",reply:"",sessionid:null,messageId:null,teamChatLogId:null}:iI(t,n,r,s,i.key)}function lI(t,e){try{let n=me(t);if(n)return n;let r=Ca(e);if("status"in r)return r;let s=Nr(t),i=Ju(r);if(s.activeSessions.has(i)||s.handoffSessions.has(i))return{status:"busy",error:"Session is already active in this context"};let o=Object.freeze({id:JB()}),a=!1,l=()=>{},c=()=>{a||(a=!0,s.reservations.get(i)===o&&(s.handoffSessions.delete(i),s.reservations.delete(i)),l())};return l=_n(t,{async close(){c()},finalizeSync(){c()}}),Gu.set(o,{ctx:t,key:i,release:c}),s.handoffSessions.add(i),s.reservations.set(i,o),fe({reservation:o})}catch(n){return B("invalid_argument",G(n))}}function cI(t,e,n=void 0){try{let r=me(t);if(r&&!(r.code==="cancelled"&&n))return r;let s=Ca(e);if("status"in s)return s;let i=Nr(t),o=Ju(s);if(n!==void 0){let l=Gu.get(n);return!l||l.ctx!==t||l.key!==o?B("invalid_argument","Reservation target does not match this context and session"):(l.release(),fe({}))}let a=i.reservations.get(o);return a&&Gu.get(a)?.release(),fe({})}catch(r){return B("invalid_argument",G(r))}}async function uI(t,e={}){try{let n=me(t);if(n)return n;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Session options must be a map");let{provider:r,workspace:s,all:i}=e;if(Object.keys(e).some(a=>!ar("listSessions").includes(a))||r!==void 0&&(typeof r!="string"||!r.trim())||s!==void 0&&(typeof s!="string"||!s.trim())||i!==void 0&&typeof i!="boolean")return B("invalid_argument","Expected provider, workspace and all session options");let o=await fh({registry:dn(t),provider:r,workspace:i?void 0:VB(t.cwd,s??t.cwd)});return fe({sessions:o.map(a=>({provider:a.provider,sessionid:a.sessionId,sessiondir:a.cwd,modifiedAt:a.modifiedAt.toISOString()}))})}catch(n){return B("provider",G(n))}}async function dI(t,e){try{let n=me(t);if(n)return n;let r=Ca(e);if("status"in r)return r;let s=await dn(t).getSession(r.sessionid,r.provider);return s?fe({messages:s.messages.map(i=>({role:i.role,content:i.content}))}):{status:"not_found",error:null}}catch(n){return B("provider",G(n))}}async function mI(t,e,n){try{let r=me(t);if(r)return r;let s=Ca(e);if("status"in s)return s;if(!n||typeof n!="object"||Array.isArray(n)||n.force!==!0||Object.keys(n).some(a=>!ar("deleteSession").includes(a)))return B("invalid_argument","force: true is required because cross-process turns cannot be detected");let i=Nr(t),o=Ju(s);if(i.activeAgents.has(e)||i.activeSessions.has(o)||i.handoffSessions.has(o))return{status:"busy",error:"Session has an active turn in this context"};i.activeSessions.add(o);try{return{status:await gh(s.provider,s.sessionid,dn(t))?"deleted":"not_found",error:null}}finally{i.activeSessions.delete(o)}}catch(r){return B("provider",G(r))}}var Gu,pI=M(()=>{"use strict";Aa();kh();sr();Qt();en();mt();Gu=new WeakMap});function vt(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);return Number.isFinite(e)?Math.round(Math.min(1,Math.max(0,e))*1e6)/1e6:null}function Cn(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return vt(e==="percent"?n/100:n)}function fI(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);if(!Number.isFinite(e))return null;try{return new Date(Math.trunc(e)*1e3).toISOString().replace(".000Z","Z")}catch{return null}}function gI(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function hI(t){let e=Number(t);return Number.isFinite(e)?e===300||e>=240&&e<=360?"five_hour":e===10080||e>=9e3&&e<=11500?"weekly":e===43200||e===44640||e>=38e3&&e<=46e3?"monthly":"unknown":"unknown"}function yI(t){let e=String(t??"").trim().toLowerCase().replace(/-/g,"_").split("_").filter(Boolean);for(let n of[e[0],e.at(-1)]){if(n?.startsWith("5h")||n?.startsWith("five")||n==="session")return"five_hour";if(n?.startsWith("7d")||n?.startsWith("seven")||n?.startsWith("week"))return"weekly";if(n?.startsWith("30d")||n?.startsWith("month"))return"monthly"}return"unknown"}function Hi(t,e=[]){let n=t==null?"":String(t);for(let r of e)typeof r=="string"&&r.length>=4&&(n=n.replaceAll(r,"***REDACTED***"));for(let r of KB)n=n.replace(r,"***REDACTED***");return n}function qt(t){let e=vt(t.used_fraction),n=vt(t.remaining_fraction),r=t.resets_at==null?gI(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?fI(r):fI(gI(t.resets_at_iso)),i={bucket_id:t.bucket_id,...t.group_name!=null?{group_name:t.group_name}:{},window_type:t.window_type??"unknown",used_fraction:e??(n===null?null:vt(1-n)),remaining_fraction:n??(e===null?null:vt(1-e)),resets_at:r==null||!Number.isFinite(r)?null:Math.trunc(r),resets_at_iso:s,is_exhausted:t.is_exhausted??(n!==null?n<=0:e!==null?e>=1:null)};for(let o of["raw_value","raw_scale","limit_name","metered_feature","allowed","limit_reached"])t[o]!=null&&(i[o]=t[o]);return i}function Ze(t,e,n={}){let r={$schema:zB,provider:t,status:e,source:n.source??null,read_at:n.read_at??Math.floor(Date.now()/1e3),account_id:n.account_id??null,plan_type:n.plan_type??null,ordinary_usage_allowed:n.ordinary_usage_allowed??null,buckets:n.buckets??[]};for(let s of["credits","spend_control","characteristics","reason","detail","retry_after_seconds"])n[s]!=null&&(r[s]=n[s]);return r}function Ct(t,e,n,r,s,i=[],o){return Ze(t,e,{source:s??null,reason:n,...r==null?{}:{detail:Hi(r,i)},...o==null?{}:{retry_after_seconds:o}})}function _I(t){let e=t.get("retry-after");if(e===null)return null;let n=Number.parseFloat(e);return Number.isFinite(n)&&n>=0?Math.trunc(n):null}function Xt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let i=Hi(n,[...r].filter(o=>typeof o=="string")).replace(/("(?:access[_-]?token|refresh[_-]?token|authorization|api[_-]?key|password)"\s*:\s*")[^"\r\n]*(")/gi,"$1***REDACTED***$2");t.onRawResponse?.({source:e,...s===void 0?{}:{http_status:s},text:i}),t.debug?.(`[debug] ${e}${s===void 0?"":` HTTP ${s}`} raw response:
2352
+ ${i}`)}function Bi(t,e,n=[]){let r;try{let i=JSON.parse(e);r=typeof i?.error=="string"?i.error:i?.error?.message??i?.message??i?.detail}catch{/^\s*[<{[]/.test(e)||(r=e.trim())}if(typeof r!="string"||!r.trim())return t;let s=Hi(r,n);return{...t,detail:s,provider_message:s}}var zB,KB,lr=M(()=>{"use strict";zB="https://lmctl.com/schemas/lmratelimit-v1.json";KB=[/sk-ant-[A-Za-z0-9_-]{4,}/g,/sk-[A-Za-z0-9_-]{16,}/g,/\bbearer\s+[A-Za-z0-9._-]{8,}/gi,/\boat01[-_][A-Za-z0-9_-]{8,}/g,/\bcsrf[-_][A-Za-z0-9_-]{4,}/gi,/\b(?:csrf[-_]?token|x-codeium-csrf-token)\s*[:=]\s*['"]?[A-Za-z0-9._-]{4,}/gi]});import{spawnSync as YB}from"node:child_process";import{readdirSync as QB,readFileSync as ZB}from"node:fs";import{join as eW}from"node:path";function cW(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function uW(t){let e=t.trim().toLowerCase(),n={"gemini models":"gemini","claude and gpt models":"3p",gemini:"gemini","3p models":"3p","3p":"3p"};return n[e]?n[e]:e.replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"unknown"}function dW(t){let e=t.toLowerCase();return e.includes("weekly")?"weekly":e.includes("five hour")||e.includes("5-hour")||e.includes("5 hour")?"five_hour":e.includes("monthly")||e.includes("month")?"monthly":null}function mW(t){let e={weekly:"weekly",five_hour:"5h",monthly:"monthly"},n=[];for(let r of t.split(/\r?\n/)){let s=r.trim().split(" ").map(l=>l.trim());if(s.length<3||!s[0]||!s[1])continue;let i=dW(s[1]);if(!i)continue;let o=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(o))continue;let a=vt(o/100);n.push(qt({bucket_id:`${uW(s[0])}-${e[i]}`,group_name:s[0],window_type:i,used_fraction:a===null?null:vt(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:o,raw_scale:"remaining_percent"}))}return n.sort((r,s)=>String(r.group_name??"").localeCompare(String(s.group_name??""))||String(r.bucket_id??"").localeCompare(String(s.bucket_id??"")))}function Na(t,e,n){return Ct("agy","provider_unavailable",t,e,"agy_cli_print")}function pW(t,e,n={}){try{let r=oW(Math.max(t,60)*1e3,cW(e));if(Xt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return Na("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return Na("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return Na("cli_failed",r.error.message,t);let s=mW(r.stdout??"");return s.length===0?Na("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ze("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return Na("cli_failed",r instanceof Error?r.message:String(r),t)}}function wI(t){if(!t||typeof t!="string")return null;let e=t.trim();if(!e||e.includes("@")||e.includes("/")||e.includes("\\")||e.includes("?")||e.includes("#")||e.includes("://")||/\s/.test(e))return null;let n;try{n=new URL(`http://${e}`)}catch{return null}if(n.username||n.password||n.pathname!=="/"||n.search||n.hash)return null;let r=n.hostname.toLowerCase();if(!(r==="localhost"||r==="127.0.0.1"||r==="[::1]"||r==="::1")||!n.port)return null;let i=Number(n.port);return!Number.isInteger(i)||i<1||i>65535||n.port!==String(i)?null:`${r==="::1"||r==="[::1]"?"[::1]":r}:${i}`}function fW(t){let e=[],n=new Set,r=(s,i,o)=>{if(!s||!i)return;let a=wI(s);!a||n.has(`${a}\0${i}`)||(n.add(`${a}\0${i}`),e.push([a,i,o]))};r(t[vI],t[bI],-1);try{for(let s of QB("/proc"))if(/^\d+$/.test(s))try{let i={};for(let o of ZB(eW("/proc",s,"environ")).toString("utf8").split("\0")){let a=o.indexOf("=");a>0&&(i[o.slice(0,a)]=o.slice(a+1))}r(i[vI],i[bI],Number(s))}catch{}}catch{}return e}function gW(t){if(typeof t!="object"||t===null)return null;let e=t.response;if(typeof e!="object"||e===null)return null;let n=e.groups;if(!Array.isArray(n))return null;let r=[];for(let s of n){if(typeof s!="object"||s===null)continue;let i=s,o=typeof i.displayName=="string"?i.displayName:null;if(Array.isArray(i.buckets))for(let a of i.buckets){if(typeof a!="object"||a===null)continue;let l=a,c=Cn(l.remainingFraction,"fraction");r.push(qt({bucket_id:l.bucketId??l.displayName??"unknown",group_name:o,window_type:yI(l.window),used_fraction:c===null?null:vt(1-c),remaining_fraction:c,resets_at_iso:l.resetTime??null,raw_value:l.remainingFraction??null,raw_scale:"remaining_fraction"}))}}return r.length===0?null:(r.sort((s,i)=>String(s.group_name??"").localeCompare(String(i.group_name??""))||String(s.bucket_id??"").localeCompare(String(i.bucket_id??""))),Ze("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function hW(t,e,n={}){try{let s=lW(e).map(([a,l,c])=>[wI(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return Ct("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let i=[],o=Date.now()+t*1e3;for(let[a,l,c]of s){let u=o-Date.now();if(u<=0){i.push("overall connect deadline exceeded");break}try{let d=await aW(`http://${a}${tW}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},u);if(Xt(n,"agy_connect_rpc",d.body,[l],d.status),d.status===200){let m;try{m=JSON.parse(d.body)}catch{i.push(`pid=${c}: unparseable response`);continue}let p=gW(m);if(p)return p;i.push(`pid=${c}: response had no quota groups`)}else d.status===401||d.status===403?i.push(`pid=${c}: HTTP ${d.status} unauthorized`):i.push(`pid=${c}: HTTP ${d.status}`)}catch(d){i.push(`pid=${c}: ${d instanceof Error?d.message:String(d)}`)}}return Ct("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${i.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return Ct("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function EI(t){let e=await hW(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=pW(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:Ct("agy","provider_unavailable","cli_and_language_server_unavailable",`cli: ${String(n.reason??n.status)} (${String(n.detail??"no detail")}); connect: ${String(e.reason??e.status)} (${String(e.detail??"no detail")})`,"agy_cli_print")}var vI,bI,tW,nW,rW,sW,iW,oW,aW,lW,TI=M(()=>{"use strict";lr();lr();vI="ANTIGRAVITY_LS_ADDRESS",bI="ANTIGRAVITY_CSRF_TOKEN",tW="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",nW=["-p","/usage"],rW=(t,e)=>{let n=YB("agy",nW,{encoding:"utf8",timeout:t,maxBuffer:16777216,env:e,stdio:["ignore","pipe","ignore"]});return{status:n.status,stdout:typeof n.stdout=="string"?n.stdout:"",error:n.error}},sW=async(t,e,n)=>{let r=await fetch(t,{method:"POST",headers:e,body:"{}",signal:AbortSignal.timeout(n),redirect:"error"});return{status:r.status,body:await r.text()}},iW=t=>fW(t),oW=rW,aW=sW,lW=iW});import{randomUUID as RI}from"node:crypto";import{mkdirSync as yW,readFileSync as Rh,realpathSync as _W,renameSync as vW,rmSync as Ih,statSync as SI,writeFileSync as II}from"node:fs";import{homedir as bW}from"node:os";import{join as xh}from"node:path";import{setTimeout as wW}from"node:timers/promises";function Nh(t){return xh(t.CLAUDE_CONFIG_DIR??xh(t.HOME??bW(),".claude"),".credentials.json")}function Ah(t){let e=JSON.parse(Rh(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function Ch(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function xI(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=Nh(t);try{let n=Ch(Ah(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:_W(e)}:{error:"not_claude_ai_subscriber"}}catch(n){return n.code==="ENOENT"?{error:t.ANTHROPIC_API_KEY?"not_claude_ai_subscriber":"no_credentials_found"}:{error:"credentials_unreadable"}}}function Vu(t){return typeof t.expiresAt=="number"&&Date.now()+SW>=t.expiresAt}function kI(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function kW(t,e){let n=`${t}.lmctl-refresh.lock`,r=xh(n,"owner.json"),s=RI();for(;;){e.throwIfAborted();try{yW(n,{mode:448});try{II(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(i){throw Ih(n,{recursive:!0,force:!0}),i}return()=>{try{JSON.parse(Rh(r,"utf8")).token===s&&Ih(n,{recursive:!0,force:!0})}catch{}}}catch(i){if(i.code!=="EEXIST")throw i;let o=!1;try{let a=JSON.parse(Rh(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){o=l.code==="ESRCH"}else o=Date.now()-SI(n).mtimeMs>6e4}catch{try{o=Date.now()-SI(n).mtimeMs>6e4}catch{continue}}if(o)throw new Error("refresh_lock_stale");await wW(50,void 0,{signal:e})}}}async function AI(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await kW(t.path,e);try{let r=Ch(Ah(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!kI(r,t.oauth)&&!Vu(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(TW,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:EW})});if(!s.ok)throw new Error(`refresh_http_${s.status}`);let i=await s.json();if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||typeof i.expires_in!="number"||!Number.isFinite(i.expires_in)||i.expires_in<=0||i.refresh_token!==void 0&&(typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token)))throw new Error("invalid_refresh_response");let o=Math.floor(Date.now()+i.expires_in*1e3);if(!Number.isSafeInteger(o)||o<=Date.now())throw new Error("invalid_refresh_response");let a=Ah(t.path),l=Ch(a);if(!l||!kI(r,l)){if(l&&typeof l.accessToken=="string"&&!Vu(l))return l;throw new Error("credentials_changed")}let c={...l,accessToken:i.access_token,refreshToken:i.refresh_token??r.refreshToken,expiresAt:o,...typeof i.scope=="string"?{scopes:i.scope.split(/\s+/).filter(Boolean)}:{}},u=`${t.path}.${RI()}.tmp`;try{II(u,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),vW(u,t.path)}finally{Ih(u,{force:!0})}return c}finally{n()}}var EW,TW,SW,CI=M(()=>{"use strict";EW="9d1c250a-e61b-44d9-88ed-5944d1962f5e",TW="https://console.anthropic.com/v1/oauth/token",SW=3e5});import{spawnSync as LI}from"node:child_process";function xW(t){let e=String(t??"").toLowerCase();return e.includes("session")||e.includes("five")||e.includes("5h")?"five_hour":e.includes("week")||e.includes("seven")||e.includes("7d")?"weekly":e.includes("month")||e.includes("30d")?"monthly":"unknown"}function MI(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function AW(t){try{let e=LI("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:MI(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function mn(t,e,n,r="claude_oauth_api",s){return Ct("claude",t,e,n,r,void 0,s)}function CW(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function NW(t){if(!t)return;let e=/^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{1,2})(?::(\d{2}))?\s*(am|pm)?(?:\s*\(([^)]+)\))?$/i.exec(t.trim());if(!e)return;let n=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].indexOf(e[1].slice(0,3).toLowerCase());if(n<0)return;let r=Number(e[3]),s=Number(e[4]??0);(e[5]??"").toLowerCase()==="pm"&&r!==12&&(r+=12),(e[5]??"").toLowerCase()==="am"&&r===12&&(r=0);let i=new Date(Date.UTC(new Date().getUTCFullYear(),n,Number(e[2]),r,s));return Number.isFinite(i.getTime())?Math.floor(i.getTime()/1e3):void 0}function LW(t){let e=[];for(let n of t.split(/\r?\n/)){let r=OW.exec(n.trim());if(!r)continue;let s=r[1].trim(),o=s.toLowerCase()==="session",a=/\(([^)]+)\)/.exec(s)?.[1]?.trim()??s,l=o?"session":a.toLowerCase()==="all models"?"week-all-models":`week-scoped-${a}`,c=o?"five_hour":"weekly";e.push(qt({bucket_id:l,group_name:o?"session":"weekly",window_type:c,used_fraction:Cn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:NW(r[3])}))}return e.sort((n,r)=>String(n.window_type).localeCompare(String(r.window_type))||String(n.bucket_id).localeCompare(String(r.bucket_id)))}function MW(t){let e={},n;for(let r of t.split(/\r?\n/)){let s=/^Last\s+(\S+)\s*[·-]\s*(\d+)\s+requests?\s*[·-]\s*(\d+)\s+sessions?\s*$/.exec(r.trim());if(s){n={requests:Number(s[2]),sessions:Number(s[3])},e[`window_${s[1].toLowerCase()}`]=n;continue}let i=/^\s+(\d+)%\s+of your usage\s+(.+?)\s*$/.exec(r);if(!i||!n)continue;let o=i[2].toLowerCase(),a=o.includes(">150k context")?"pct_high_context":o.includes("active for 8+ hours")?"pct_long_sessions":o.includes("subagent-heavy")?"pct_subagent_heavy":o.includes("ran in parallel")?"pct_parallel_sessions":void 0;a&&(n[a]=Number(i[1]))}return e}function PW(t,e){let n=t&&typeof t=="object"?t:void 0,r=e&&typeof e=="object"?e:void 0,s=!!(n?.limit||n?.used||n?.percent!==void 0);if(!s&&(!r||r.is_enabled===!1))return;let i=s&&n?.limit&&typeof n.limit=="object"?n.limit:{},o=s&&n?.used&&typeof n.used=="object"?n.used:{},a=y=>{let b=typeof y=="number"?y:typeof y=="string"&&y.trim()!==""?Number(y):NaN;return Number.isSafeInteger(b)&&b>=0&&b<=9?b:void 0},l=y=>{let b=typeof y=="number"?y:typeof y=="string"&&y.trim()!==""?Number(y):NaN;return Number.isFinite(b)?b:void 0},c=a(i.exponent??r?.decimal_places??2),u=a(o.exponent??r?.decimal_places??2),d=s?i.amount_minor:r?.monthly_limit,m=s?o.amount_minor:r?.used_credits,p=(y,b,_)=>b===void 0||_!==void 0&&_!=="USD"||l(y)===void 0?void 0:(l(y)/10**b).toFixed(2),f=Cn(s?n?.percent:r?.utilization,"percent"),g=s?n?.spend_limit_reached??r?.spend_limit_reached:r?.spend_limit_reached,h={limit_usd:p(d,c,i.currency??r?.currency),used_usd:p(m,u,o.currency??r?.currency),remaining_fraction:f==null?void 0:Math.max(0,1-f),resets_at_iso:s?n?.resets_at:void 0,...typeof g=="boolean"?{reached:g}:{}};return Object.values(h).every(y=>y==null)?void 0:h}async function OI(t,e,n,r={}){try{let s=LI("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:MI(e),maxBuffer:16777216}),i=typeof s.stdout=="string"?s.stdout:"";Xt(r,"claude_cli_print",i,[t.accessToken,t.refreshToken]);let o=LW(i);if(!o.length)return;let a=MW(i);return Ze("claude",et.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:o,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function PI({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=xI(e);if(s.error==="not_claude_ai_subscriber")return mn(et.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return mn(et.unavailable,"credentials_missing",`credentials file not found: ${Nh(e)}`);if(s.error)return mn(et.expired,"oauth_token_expired_or_invalid",s.error);let i=s.oauth,o=Array.isArray(i.scopes)?i.scopes:[];if(o.length&&!o.includes(NI))return mn(et.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${NI} scope required by the usage endpoint`);let a=new AbortController,l=setTimeout(()=>a.abort(),t*1e3),c,u;try{let y=!1,b=async()=>{try{i=await AI({...s,oauth:i},a.signal),y=!0}catch(v){let E=v instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(v.message)?v.message:"refresh_failed";if(E==="refresh_http_429")return mn(et.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(E==="refresh_lock_stale")return mn(et.expired,"oauth_refresh_locked","a previous Claude credential refresh exited without releasing its lock; remove the stale .credentials.json.lmctl-refresh.lock directory before retrying");let R=E==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(E);return mn(R?et.expired:et.unavailable,R?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${E})${R?"; renew Claude login":"; try again later"}`)}};if(Vu(i)){let v=await b();if(v)return v}let _=()=>fetch(`${RW}/api/oauth/usage`,{headers:{Authorization:`Bearer ${i.accessToken}`,"anthropic-beta":IW,"Content-Type":"application/json","User-Agent":AW(e)},signal:a.signal});if(c=await _(),u=await c.text(),Xt({debug:n,onRawResponse:r},"claude_oauth_api",u,[i.accessToken,i.refreshToken],c.status),c.status===401&&!y&&s.path&&i.refreshToken){let v=await b();if(v)return v;c=await _(),u=await c.text(),Xt({debug:n,onRawResponse:r},"claude_oauth_api",u,[i.accessToken,i.refreshToken],c.status)}}catch(y){let b=await OI(i,e,t,{debug:n,onRawResponse:r});return b||mn(et.unavailable,"request_failed",`${y instanceof Error?y.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let d=(...y)=>Bi(mn(...y),u,[String(i.accessToken??""),String(i.refreshToken??"")]);if(c.status===401)return d(et.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return d(et.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let y=CW(c.headers),b=await OI(i,e,t,{debug:n,onRawResponse:r});return b||d(et.throttled,"rate_limited",`usage endpoint rate limited${y==null?"":`; retry after ${y}s`}`,"claude_oauth_api",y)}if(c.status!==200)return d(et.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let m;try{m=JSON.parse(u)}catch{return mn(et.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!m||typeof m!="object"||Array.isArray(m))return mn(et.unavailable,"malformed_response","response was not an object");let p=m,f=Array.isArray(p.limits)?p.limits:[],g=f.length?f.flatMap(y=>{if(!y||typeof y!="object")return[];let b=y.kind,_=xW(b==="session"?"session":b),v=y.scope?.model?.display_name,E=b==="session"?"session":b==="weekly_all"?"week-all-models":`week-scoped-${v||b}`;return[qt({bucket_id:E,group_name:b==="session"?"session":"weekly",window_type:_,used_fraction:Cn(y.percent,"percent"),resets_at_iso:y.resets_at,raw_value:y.percent,raw_scale:"used_percent"})]}):["five_hour","seven_day"].flatMap(y=>{let b=p[y];return!b||typeof b!="object"?[]:[qt({bucket_id:y==="five_hour"?"session":"week-all-models",group_name:y==="five_hour"?"session":"weekly",window_type:y==="five_hour"?"five_hour":"weekly",used_fraction:Cn(b.utilization,"percent"),resets_at_iso:b.resets_at,raw_value:b.utilization,raw_scale:"used_percent"})]}),h=PW(p.spend,p.extra_usage);return Ze("claude",et.ok,{source:"claude_oauth_api",account_id:null,plan_type:i.subscriptionType??i.rateLimitTier??null,ordinary_usage_allowed:null,buckets:g.sort((y,b)=>String(y.window_type).localeCompare(String(b.window_type))||String(y.bucket_id).localeCompare(String(b.bucket_id))),...h?{spend_control:h}:{}})}var RW,IW,NI,et,OW,DI=M(()=>{"use strict";lr();CI();lr();RW="https://api.anthropic.com",IW="oauth-2025-04-20",NI="user:profile";et={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};OW=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as jI}from"node:crypto";import{mkdirSync as DW,readFileSync as Oh,realpathSync as FW,renameSync as $W,rmSync as Lh,statSync as FI,writeFileSync as UI}from"node:fs";import{homedir as jW}from"node:os";import{join as Mh}from"node:path";import{setTimeout as UW}from"node:timers/promises";function Oa(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function Dh(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||Mh(t.HOME||jW(),".codex");return Mh(e,"auth.json")}function Ph(t){let e=Oa(JSON.parse(Oh(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function HI(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=Dh(t);try{let n=Oa(Ph(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:FW(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function $I(t,e){return t.access_token===e.access_token&&t.refresh_token===e.refresh_token&&t.id_token===e.id_token&&t.account_id===e.account_id}async function WW(t,e){let n=`${t}.lmctl-refresh.lock`,r=Mh(n,"owner.json"),s=jI();for(;;){e.throwIfAborted();try{DW(n,{mode:448});try{UI(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(i){throw Lh(n,{recursive:!0,force:!0}),i}return()=>{try{JSON.parse(Oh(r,"utf8")).token===s&&Lh(n,{recursive:!0,force:!0})}catch{}}}catch(i){if(i.code!=="EEXIST")throw i;let o=!1;try{let a=JSON.parse(Oh(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){o=l.code==="ESRCH"}else o=Date.now()-FI(n).mtimeMs>6e4}catch{try{o=Date.now()-FI(n).mtimeMs>6e4}catch{continue}}if(o)throw new Error("refresh_lock_stale");await UW(50,void 0,{signal:e})}}}async function BI(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await WW(t.path,e);try{let r=Ph(t.path),s=Oa(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!$I(s,t.tokens)&&typeof s.access_token=="string")return s;if(typeof s.refresh_token!="string"||!s.refresh_token)throw new Error("no_refresh_token");let i=await fetch(HW,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:BW})});if(!i.ok)throw new Error(`refresh_http_${i.status}`);let o=Oa(await i.json());if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||o.refresh_token!==void 0&&(typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token))||o.id_token!==void 0&&(typeof o.id_token!="string"||!/^\S+$/.test(o.id_token)))throw new Error("invalid_refresh_response");let a=Ph(t.path),l=Oa(a.tokens);if(!l||!$I(s,l)){if(l&&typeof l.access_token=="string")return l;throw new Error("credentials_changed")}let c={...l,access_token:o.access_token,...o.refresh_token===void 0?{}:{refresh_token:o.refresh_token},...o.id_token===void 0?{}:{id_token:o.id_token}},u={...a,tokens:c,last_refresh:new Date().toISOString()},d=`${t.path}.${jI()}.tmp`;try{UI(d,JSON.stringify(u),{flag:"wx",mode:384}),$W(d,t.path)}finally{Lh(d,{force:!0})}return c}finally{n()}}var HW,BW,WI=M(()=>{"use strict";HW="https://auth.openai.com/oauth/token",BW="app_EMoamEEZ73f0CkXaXp7hrann"});function Nn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function qI(t){let e=typeof t=="number"?t:Number(t);if(!Number.isFinite(e)||e<=0)return"unknown";let n=e/60;return n>=240&&n<=360?"five_hour":n>=9e3&&n<=11500?"weekly":n>=38e3&&n<=46e3?"monthly":"unknown"}function XI(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function GW(t){if(Nn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function JW(t){let e=[],n=Nn(t.rate_limit)?t.rate_limit:{},r=typeof n.allowed=="boolean"?n.allowed:void 0,s=typeof n.limit_reached=="boolean"?n.limit_reached:void 0;for(let o of["primary_window","secondary_window"]){let a=Nn(n[o])?n[o]:void 0;if(!a)continue;let l=qI(a.limit_window_seconds);e.push(qt({bucket_id:`codex-${XI(l)}`,group_name:"codex",window_type:l,used_fraction:Cn(a.used_percent,"percent"),resets_at:a.reset_at,raw_value:a.used_percent,raw_scale:"used_percent",...r===void 0?{}:{allowed:r},...s===void 0?{}:{limit_reached:s}}))}let i=Array.isArray(t.additional_rate_limits)?t.additional_rate_limits:[];for(let o of i){if(!Nn(o))continue;let a=Nn(o.rate_limit)?o.rate_limit:{},l=typeof o.limit_name=="string"?o.limit_name:void 0,c=typeof o.metered_feature=="string"?o.metered_feature:void 0,u=c||l||"additional",d=typeof a.allowed=="boolean"?a.allowed:void 0,m=typeof a.limit_reached=="boolean"?a.limit_reached:void 0;for(let p of["primary_window","secondary_window"]){let f=Nn(a[p])?a[p]:void 0;if(!f)continue;let g=qI(f.limit_window_seconds);e.push(qt({bucket_id:`${u}-${XI(g)}`,group_name:l||u,window_type:g,used_fraction:Cn(f.used_percent,"percent"),resets_at:f.reset_at,raw_value:f.used_percent,raw_scale:"used_percent",...l===void 0?{}:{limit_name:l},...c===void 0?{}:{metered_feature:c},...d===void 0?{}:{allowed:d},...m===void 0?{}:{limit_reached:m}}))}}return e.sort((o,a)=>String(o.group_name??"").localeCompare(String(a.group_name??""))||String(o.bucket_id).localeCompare(String(a.bucket_id)))}function VW(t){let e=Nn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Nn(t.spend_control)?t.spend_control:void 0,s=Nn(t.credits)?t.credits:void 0;return Ze("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:JW(t),...s?{credits:GW(s)}:{},...r?{spend_control:r}:{}})}async function GI(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,i=HI(n),o=i.tokens;if(!o||typeof o.access_token!="string")return Ze("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${Dh(n)} (or $CODEX_ACCESS_TOKEN)`});let a=new AbortController,l=setTimeout(()=>a.abort(),Math.ceil(e*1e3)),c=o.access_token,u=new Set([o.access_token,o.refresh_token,o.id_token].filter(d=>typeof d=="string"&&!!d));try{let d=typeof o.account_id=="string"?o.account_id:void 0,m=typeof o.refresh_token=="string"?o.refresh_token:void 0,p=typeof o.id_token=="string"?o.id_token:void 0,f="",g=()=>[...u],h=(R,S)=>Bi(Ze("codex",R,S),f,g()),y=!1,b=async()=>{if(!(y||!i.path||typeof o.refresh_token!="string"))try{let R=await BI({...i,tokens:{...o,refresh_token:m}},a.signal);typeof R.access_token=="string"&&(u.add(R.access_token),c=R.access_token),d=typeof R.account_id=="string"?R.account_id:d,typeof R.refresh_token=="string"&&(u.add(R.refresh_token),m=R.refresh_token),typeof R.id_token=="string"&&(u.add(R.id_token),p=R.id_token),y=!0;return}catch(R){let S=R instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(R.message)?R.message:"refresh_failed",I=S==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(S);return Ze("codex",I?"auth_expired":"provider_unavailable",{source:"codex_http",reason:I?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${S})${I?"; renew Codex login":"; try again later"}`})}},_=()=>{let R={Authorization:`Bearer ${c}`,"User-Agent":XW,"Content-Type":"application/json",Accept:"application/json"};d&&(R["ChatGPT-Account-Id"]=d);let S=(n.CODEX_BASE_URL||qW).replace(/\/$/,"");return fetch(`${S}/wham/usage`,{headers:R,signal:a.signal})},v=await _();if(f=await v.text(),Xt({debug:r,onRawResponse:s},"codex_http",f,g(),v.status),v.status===401&&i.path&&m){let R=await b();if(R)return R;v=await _(),f=await v.text(),Xt({debug:r,onRawResponse:s},"codex_http",f,g(),v.status)}if(v.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(v.status===429){let R=v.headers.get("retry-after"),S=R===null?void 0:Number.parseInt(R,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...S!==void 0&&Number.isFinite(S)&&S>=0?{retry_after_seconds:S}:{}})}if(!v.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${v.status}`,detail:"codex usage endpoint returned an unexpected status"});let E;try{E=JSON.parse(f)}catch(R){return Ze("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:Hi(String(R),u)})}return Nn(E)?VW(E):Ze("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(d){let m=d instanceof Error?`${d.name}: ${d.message}`:String(d);return Ze("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:Hi(m,u)})}finally{clearTimeout(l)}}var qW,XW,JI=M(()=>{"use strict";lr();WI();lr();qW="https://chatgpt.com/backend-api",XW="codex-cli"});import{createHash as zW,randomUUID as KW}from"node:crypto";import{readFileSync as QI,openSync as YW,fsyncSync as QW,closeSync as ZW,mkdirSync as VI,writeFileSync as ZI,renameSync as eq,rmSync as tq,rmdirSync as nq,statSync as Fh,utimesSync as rq}from"node:fs";import{homedir as sq}from"node:os";import{basename as iq,dirname as oq,join as zu}from"node:path";import{setTimeout as ex}from"node:timers/promises";function lq(t){let e;try{e=QI(t,"utf8")}catch(s){if(s.code==="ENOENT")return{};throw new Error("config_unreadable")}let n={},r="other";for(let s of e.split(/\r?\n/)){let i=/^\s*\[providers\.(?:"managed:kimi-code"|'managed:kimi-code')(\.oauth)?\]\s*(?:#.*)?$/.exec(s);if(i){r=i[1]?"oauth.":"";continue}if(/^\s*\[/.test(s)){if(s.includes("managed:kimi-code"))throw new Error("config_format_unsupported");r="other";continue}if(r==="other")continue;if(/^\s*oauth\s*=/.test(s))throw new Error("config_format_unsupported");let o=/^\s*(base_url|oauth_host|storage|key)\s*=\s*("(?:[^"\\]|\\.)*"|'[^']*')\s*(?:#.*)?$/.exec(s);if(!o&&/^\s*(base_url|oauth_host|storage|key)\s*=/.test(s))throw new Error("config_malformed");if(o)try{n[r+o[1]]=o[2].startsWith('"')?JSON.parse(o[2]):o[2].slice(1,-1)}catch{throw new Error("config_malformed")}}return n}function Ku(t){let e;try{e=JSON.parse(QI(t,"utf8"))}catch(n){throw new Error(n.code==="ENOENT"?"credentials_missing":"credentials_malformed")}if(e&&typeof e=="object"&&e.access_token===""&&e.refresh_token==="")throw new Error("credentials_revoked");if(!e||typeof e!="object"||Array.isArray(e)||typeof e.access_token!="string"||!e.access_token.trim())throw new Error("credentials_malformed");return e}function tx(t){let e=t.KIMI_CODE_HOME??zu(t.HOME??sq(),".kimi-code"),n=lq(t.KIMI_CODE_CONFIG_PATH??zu(e,"config.toml")),r=t.KIMI_CODE_BASE_URL!==void 0||t.KIMI_CODE_OAUTH_HOST!==void 0||t.KIMI_OAUTH_HOST!==void 0,s=KI(t.KIMI_CODE_BASE_URL??n.base_url??zI),i=KI(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?$h:n["oauth.oauth_host"]??$h)),o=s===zI&&i===$h?"kimi-code":`kimi-code-env-${zW("sha256").update(JSON.stringify({oauthHost:i,baseUrl:s})).digest("hex").slice(0,16)}`;if(!t.KIMI_CREDENTIALS_PATH&&!r&&n["oauth.key"]===`oauth/${o}`&&n["oauth.storage"]&&n["oauth.storage"]!=="file")throw new Error("credential_storage_unsupported");let a=t.KIMI_CREDENTIALS_PATH??zu(e,"credentials",`${o}.json`),l=Ku(a),c=a,u=iq(a,".json");return{home:e,path:c,lockTarget:zu(e,"oauth",u),baseUrl:s,oauthHost:i,token:l}}function Yu(t){if(typeof t.expires_at!="number")return!1;let e=typeof t.expires_in=="number"?t.expires_in:0;return t.expires_at-Date.now()/1e3<Math.max(300,e*.5)}function YI(t,e){return t.access_token===e.access_token&&t.refresh_token===e.refresh_token&&t.expires_at===e.expires_at&&t.expires_in===e.expires_in}async function cq(t,e){VI(oq(t),{recursive:!0}),ZI(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{VI(n);break}catch(o){if(o.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-Fh(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await ex(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=Fh(n),s=()=>{let o;try{o=Fh(n)}catch{throw new Error("refresh_lock_lost")}if(o.ino!==r.ino||o.dev!==r.dev)throw new Error("refresh_lock_lost")},i=setInterval(()=>{try{s();let o=new Date;rq(n,o,o)}catch{}},1e3);return i.unref(),{assertOwned:s,release(){clearInterval(i);try{s(),nq(n)}catch{}}}}async function nx(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await cq(t.lockTarget,e);try{let r=Ku(t.path);if(!YI(r,t.token)&&!Yu(r))return r;if(typeof r.refresh_token!="string"||!r.refresh_token)throw new Error("no_refresh_token");let s;for(let d=0;d<3;d++){try{if(s=await fetch(`${t.oauthHost}/api/oauth/token`,{method:"POST",signal:e,headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","User-Agent":"lmctl"},body:new URLSearchParams({client_id:aq,grant_type:"refresh_token",refresh_token:r.refresh_token})}),![429,500,502,503,504].includes(s.status)||d===2)break;await s.body?.cancel()}catch{if(e.aborted||d===2)throw new Error("refresh_request_failed")}await ex(1e3*2**d,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let d=Ku(t.path);if(d.refresh_token!==r.refresh_token)return d}catch{}throw new Error(`refresh_http_${s.status}`)}let i=await s.json(),o=Number(i?.expires_in);if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token)||!Number.isFinite(o)||o<=0)throw new Error("invalid_refresh_response");let a=Math.floor(Date.now()/1e3)+o;if(!Number.isSafeInteger(a))throw new Error("invalid_refresh_response");n.assertOwned();let l=Ku(t.path);if(!YI(l,r)){if(!Yu(l))return l;throw new Error("credentials_changed")}let c={...l,access_token:i.access_token,refresh_token:i.refresh_token,expires_at:a,expires_in:o,...typeof i.scope=="string"?{scope:i.scope}:{},...typeof i.token_type=="string"?{token_type:i.token_type}:{}},u=`${t.path}.${KW()}.tmp`;try{let d=YW(u,"wx",384);try{ZI(d,JSON.stringify(c,null,2)+`
2353
+ `),QW(d)}finally{ZW(d)}n.assertOwned(),eq(u,t.path)}finally{tq(u,{force:!0})}return c}finally{n.release()}}var zI,$h,aq,KI,rx=M(()=>{"use strict";zI="https://api.kimi.com/coding/v1",$h="https://auth.kimi.com",aq="17e5f671-d194-4dfb-9706-5516cb48c098",KI=t=>t.trim().replace(/\/+$/,"")});function sx(t){let e=o=>{if(typeof o!="number"&&typeof o!="string"||typeof o=="string"&&o.trim()==="")return;let a=Number(o);return Number.isFinite(a)&&a>=0?a:void 0},n=e(t.limit),r=e(t.used),s=e(t.remaining);if(n===void 0||n<=0||r===void 0&&(s===void 0||s>n))return;let i=r??n-s;return{used:i,limit:n,remaining:Math.max(0,n-i)}}async function ix({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=tx(e)}catch(g){let h=g instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(g.message)?g.message:"credentials_unreadable";return Ct("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let i=s.token,o=new AbortController,a=setTimeout(()=>o.abort(),t*1e3),l,c;try{let g=!1,h=async()=>{i=await nx({...s,token:i},o.signal),g=!0};Yu(i)&&await h();let y=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${i.access_token}`,Accept:"application/json"},signal:o.signal});l=await y(),c=await l.text(),Xt({debug:n,onRawResponse:r},"kimi_http",c,[i.access_token,i.refresh_token],l.status),l.status===401&&!g&&i.refresh_token&&(await h(),l=await y(),c=await l.text(),Xt({debug:n,onRawResponse:r},"kimi_http",c,[i.access_token,i.refresh_token],l.status))}catch(g){let h=g instanceof Error&&/^(no_refresh_token|credentials_changed|credentials_revoked|invalid_refresh_response|refresh_locked|refresh_lock_stale|refresh_lock_failed|refresh_lock_lost|refresh_request_failed|refresh_http_\d+)$/.test(g.message)?g.message:"request_failed",y=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),b=h==="refresh_lock_stale"?"Kimi refresh lock is stale; run the native Kimi CLI to recover its lock, or verify no refresh is active before removing the .lock directory":y?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return Ct("kimi",y?"auth_expired":"provider_unavailable",h,b,"kimi_http")}finally{clearTimeout(a)}let u=(g,h,y)=>Bi(Ct("kimi",g,h,h,"kimi_http",[],y),c,[i.access_token]);if(l.status===401)return u("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return u("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let g=_I(l.headers);return u("reader_throttled","HTTP 429 from Kimi usage endpoint",g)}if(l.status!==200)return u("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let d;try{d=JSON.parse(c)}catch{return Ct("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!d||typeof d!="object")return Ct("kimi","provider_unavailable","malformed_response","response was not an object");let m=[],p=new Set;function f(g){let h=String(g.bucket_id),y=h,b=2;for(;p.has(h);)h=`${y}-${b}`,b++;p.add(h),g.bucket_id=h,m.push(qt(g))}if(Array.isArray(d.limits))for(let g of d.limits){if(!g||typeof g!="object")continue;let h=g.window,y=g.detail;if(!h||typeof h!="object"||!y||typeof y!="object")continue;let b=0;if(h.timeUnit==="TIME_UNIT_MINUTE")b=Number(h.duration);else if(h.timeUnit==="TIME_UNIT_HOUR")b=Number(h.duration)*60;else if(h.timeUnit==="TIME_UNIT_DAY")b=Number(h.duration)*1440;else if(h.timeUnit==="TIME_UNIT_WEEK")b=Number(h.duration)*10080;else if(h.timeUnit==="TIME_UNIT_MONTH")b=Number(h.duration)*43200;else continue;let _=hI(b),v="window";_==="five_hour"&&(v="5h"),_==="weekly"&&(v="weekly"),_==="monthly"&&(v="monthly");let E=sx(y);if(!E)continue;let{used:R,limit:S,remaining:I}=E;f({bucket_id:`kimi-${v}`,window_type:_,used_fraction:vt(R/S),remaining_fraction:vt(I/S),resets_at_iso:y.resetTime,raw_value:R,raw_scale:"count"})}if(d.usage&&typeof d.usage=="object"){let g=sx(d.usage);g&&f({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:vt(g.used/g.limit),remaining_fraction:vt(g.remaining/g.limit),resets_at_iso:d.usage.resetTime,raw_value:g.used,raw_scale:"count"})}if(d.usages&&typeof d.usages=="object"){let g=[{key:"limit_5h",id:"kimi-5h",type:"five_hour"},{key:"limit_7d",id:"kimi-weekly",type:"weekly"},{key:"limit_month_total",id:"kimi-monthly",type:"monthly"},{key:"limit_month_code",id:"kimi-monthly-code",type:"monthly"}];for(let{key:h,id:y,type:b}of g){let _=d.usages[h];if(!_||typeof _!="object"||_.used_ratio==null||_.used_ratio===""||typeof _.used_ratio=="boolean")continue;let v=Number(_.used_ratio);!Number.isFinite(v)||v<0||p.has(y)||(p.add(y),m.push(qt({bucket_id:y,window_type:b,used_fraction:vt(v),resets_at_iso:typeof _.reset_time=="string"&&_.reset_time?_.reset_time:null,raw_value:v,raw_scale:"ratio"})))}}return Ze("kimi","ok",{source:"kimi_http",buckets:m})}var ox=M(()=>{"use strict";lr();rx();lr()});async function lx(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(u=>typeof u!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let u of e)if(!ax.includes(u))return{status:"error",error:`unknown provider: ${u} (valid targets: ${ax.join(", ")})`,readings:[]};let n=t.timeoutSeconds??uq;if(!Number.isFinite(n)||n<=0)return{status:"error",error:"timeoutSeconds must be a positive finite number",readings:[]};let r=t.env??process.env,s=new Set(e.includes("all")?["codex","agy","claude","kimi"]:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let o=Object.entries({codex:GI,agy:EI,claude:PI,kimi:ix}).filter(([u])=>s.has(u)).map(async([,u])=>{let d=[],m=await u({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:f=>d.push(f)}:{}}),p=t.includeRaw?{...m,raw_responses:d}:m;return p&&t.onReading?.(p),p}),a=await Promise.allSettled(o),l=a.find(u=>u.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(u=>u.status==="fulfilled").map(u=>u.value).filter(Boolean)}}var ax,uq,cx=M(()=>{"use strict";TI();DI();JI();ox();ax=["all","codex","agy","claude","kimi"],uq=15});async function dq(t,e={}){try{let n=me(t);if(n)return n;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Ratelimit options must be a map");let{providers:r,provider:s,timeoutSeconds:i=15}=e,o=r??(s===void 0?["all"]:[s]);if(Object.keys(e).some(l=>!ar("readRatelimits").includes(l))||!Array.isArray(o)||o.some(l=>typeof l!="string"||!l||l.startsWith("-")))return B("invalid_argument","providers must be a list of provider names");if(typeof i!="number"||!Number.isFinite(i)||i<=0)return B("invalid_argument","timeoutSeconds must be a positive finite number");let a=await lx({providers:o.length?[...o]:["all"],timeoutSeconds:i,env:{...t.env},progress:l=>t.onProgress(l+`
2354
+ `,"stderr")});return a.status==="ok"?fe({readings:a.readings}):B("provider",a.error,{readings:[]})}catch(n){return B("provider",G(n),{readings:[]})}}var ux=M(()=>{"use strict";cx();en();mt()});function jh(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function yq(t,e,n,r){let s=new Set,i=[];for(let o of e){let a=n===null?null:ic(t,o,n,r),l=a?.kind==="priced"||a?.kind==="estimated"?`id:${a.model.normalizedId}`:a?.kind==="known-unpriced"?`id:${a.id}`:`raw:${o.trim().toLowerCase()}`;s.has(l)||(s.add(l),i.push(o))}return i}async function dx(t,e,n){let r=[...new Set([...n.messages.map(A=>A.model),...(n.responses??[]).map(A=>A.model??void 0)].filter(A=>A!==void 0&&A!=="<synthetic>"))],s=[...n.messages].reverse().find(A=>A.model!==void 0&&A.model!=="<synthetic>")?.model,i=n.model??s??null,o=hr(n.responses??[],n.captureStatus!=="partial"),a=t==="gemini"&&(n.totalOutputTokens!==void 0||n.totalReasoningOutputTokens!==void 0)?(n.totalOutputTokens??0)+(n.totalReasoningOutputTokens??0):n.totalOutputTokens??null,l={input:n.responses?o.input_uncached:n.totalInputTokens??null,output:n.responses?o.output:a,cachedInput:n.responses?o.input_cached:n.totalCachedInputTokens??null},c=await fs(),u=yq(t,r,c.catalog,c.aliases),d=n.responses===void 0&&u.length>1,m="unavailable",p=null,f=null,g=null,h=null,y=!1,b=null,_=null;if(i!==null&&c.catalog!==null){let A=ai(t,i,c.catalog,c.aliases);if(m=A.state.kind,A.offer!==null)_=A.offer.pricing,p=A.offer.route,f=A.offer.source,g=A.offer.sourceModelId,h=A.provenance,y=A.offer.estimated;else switch(A.state.kind){case"unresolved":b=`alias "${A.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":b=`"${A.state.id}" is a known model with no published price row`;break;case"unknown":b=`model "${i}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":b=`model "${i}" is not offered by provider "${t}" (found under: ${A.state.otherProviders.join(", ")})`;break;default:b=`no lmprice catalog coverage for provider "${t}"`;break}}else i!==null&&(b="lmprice catalog unavailable");let v=_===null?null:{inputPer1m:_.input_per_1m_tokens,outputPer1m:_.output_per_1m_tokens,cachedInputPer1m:_.input_cache_read_per_1m_tokens},E=l.cachedInput??0,R=n.totalCacheWriteInputTokens??0,S=["claude","codex","gemini","qwen","copilot"].includes(t),I=l.input===null?null:Math.max(0,l.input-(S?E:0)-(t==="claude"||t==="copilot"?R:0)),N=l.input===null||l.output===null?null:Fo({input:I,output:l.output,cachedInput:E,...R>0?{cacheWrite:R,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},_);if(N===null&&E>0&&_!==null&&_.input_cache_read_per_1m_tokens==null&&(b="no applicable cache-read price rate"),n.responses)if(N=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(A=>A.response_id)).size!==n.responses.length)b="session accounting coverage is incomplete";else if(!c.catalog)b="lmprice catalog unavailable";else{let A=0,w=null;for(let T of n.responses){let k=T.tokens;if(!T.model){w="a response lacks a model";break}let x=n.turns?.flatMap(Xe=>Xe.rawUsage??[]).find(Xe=>Xe.responseId===T.response_id)?.values,C=x?.promptTokens??x?.prompt_tokens,L=x?.input_tokens,P=x?.cache_read_tokens??x?.input_cache_read_tokens,j=x?.cache_write_tokens??x?.input_cache_write_tokens;if(typeof L=="number"&&typeof P=="number"&&P>L||typeof C=="number"&&typeof P=="number"&&P>C||typeof C=="number"&&typeof j=="number"&&j>C||typeof C=="number"&&typeof P=="number"&&typeof j=="number"&&P+j>C){w=`${t} reported contradictory token counters`;break}if(k.output===null){w=`${t} does not record output tokens`;break}if(k.input_cached===null){w=`${t} does not record cached input tokens`;break}let F=T.model_provider??t,Z=jh(T.model??""),q=(F==="deepseek"||T.model_provider==="deepseek")&&(T.model_provider===void 0||T.model_provider==="deepseek")&&hq.has(Z),Y=k.input_cache_write;if(Y===null&&!q){w=`${t} does not record cache-write input tokens`;break}if(t==="agy"&&(Y??0)>0){w="cache-write inclusion in input is not verified";break}let ne=["kimi","opencode","miniplayer"].includes(t),de=ai(F,T.model,c.catalog,c.aliases),ee=de.offer??ai(t,T.model,c.catalog,c.aliases).offer;if(ee===null){switch(de.state.kind){case"no-catalog":w=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":w=`alias "${de.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":w=`"${de.state.id}" is a known model with no published price row`;break;case"unknown":w=`model "${T.model}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":w=`model "${T.model}" is not offered by provider "${t}" (found under: ${de.state.otherProviders.join(", ")})`;break;default:w=`no applicable price for response model "${T.model}"`;break}break}if(Y===null){let Xe=(ee.route??"").toLowerCase(),H=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(Xe),W=jh(ee.sourceModelId??""),V=ee.provider==="deepseek"&&ee.source!=="openrouter"&&!H&&W===Z;if(q&&V)Y=0;else{w=`${t} does not record cache-write input tokens`;break}}if(k.input_uncached===null){w=`${t} does not record uncached input tokens`;break}let tt=Fo({input:Math.max(0,k.input_uncached-(ne?Y:0)),cachedInput:k.input_cached,cacheWrite:Y,output:k.output},ee?.pricing??null);if(tt===null){w=`no applicable price for response model "${T.model}"`;break}A+=tt,!p&&ee&&(p=ee.route,m="priced")}N=w?null:A,b=w}return N===null&&(!n.responses&&l.input===null&&l.output===null?b=`${t} does not record token usage`:!n.responses&&l.input===null&&!b?b=`${t} does not record input tokens`:!n.responses&&l.output===null&&!b?b=`${t} does not record output tokens`:b||(b=`no lmprice entry for "${i??"unknown"}"`),(m==="priced"||m==="estimated")&&(m="unavailable",p=null,f=null,g=null,h=null,v=null)),{schema_version:_q,provider:t,sessionId:e,model:i,modelsUsed:u,approximate:d,tokens:l,pricePerModel:v,costUsd:N,priceResolution:m,priceRoute:p,priceSource:f,priceSourceModelId:g,priceProvenance:h,priceEstimated:y,costUnavailableReason:b,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}var gq,hq,_q,mx=M(()=>{"use strict";To();Di();gq=xd(Pc(),1);gs();oc();zn();En();xc();hq=new Set([...Rc,...Ic,"deepseek-v4.1-flash","deepseek-chat","deepseek-reasoner","deepseek-coder","deepseek-v3","deepseek-v3.2","deepseek-r1"].map(jh));_q=1});async function px(t,e,n,r){let s={role:"assistant",content:r,provider:e,sessionid:n,model:null,usage:{input:null,cachedInput:null,cacheWrite:null,output:null},costUsd:null,costUnavailableReason:null,priceRoute:null,priceDataSource:"unavailable"};try{let i=await Xr(n,e);if(!i)return{...s,costUnavailableReason:"session not readable after the turn"};let o=i.turns?.at(-1),a=new Set(o?.responseIds??[]),l=(i.responses??[]).filter(m=>a.has(m.response_id));if(!o||!l.length)return{...s,costUnavailableReason:`${e} does not record per-turn accounting`};let c={...i,turns:[o],responses:l,messages:[],model:l.at(-1)?.model??o.model??i.model},u=await dx(e,n,c),d=m=>l.some(p=>p.tokens[m]===null)?null:l.reduce((p,f)=>p+f.tokens[m],0);return{...s,model:u.model,usage:{input:d("input_uncached"),cachedInput:d("input_cached"),cacheWrite:d("input_cache_write"),output:d("output")},costUsd:u.costUsd,costUnavailableReason:u.costUnavailableReason,priceRoute:u.priceRoute,priceDataSource:u.priceDataSource}}catch(i){return{...s,costUnavailableReason:`cost unavailable: ${i instanceof Error?i.message:String(i)}`}}}var fx=M(()=>{"use strict";Di();mx()});import{basename as vq}from"node:path";function yx(t,e){let n=new Date(e.now.getTime()-Vr()).toISOString(),r=bx(t,n).filter(p=>!p.sender.teamfile.startsWith("prompt:")),s=Tq(e.sender,r),i=Sq(e.sender,r);i!==null&&i.teamfile===e.root&&!hx(s[0],i)&&s.unshift({...i,at:null});let o={teamfile:e.receiverTeamfile,alias:e.receiverAlias,at:e.now.getTime()},a=[...s,o],l=s.filter(p=>hx(p,o)),c=l.map(p=>p.at).filter(p=>p!==null).sort((p,f)=>f-p)[0]??null,u=c!==null&&e.now.getTime()-c<bq,d=Uh(e.sender,r).length;return{stop:l.length>=1&&u&&d>=wq,chain:kq(a)}}function _x(t,e){let n=new Date(e.now.getTime()-Vr()).toISOString(),r=bx(t,n),s=Uh(e.sender,r);if(s.length===0)return null;let i=s[0];return i.sender.teamfile.startsWith("prompt:")?i.receiver.teamfile:i.sender.teamfile}function Vr(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return gx;let n=Number(e);return!Number.isFinite(n)||n<=0?gx:n}function vx(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function Eq(t){return{sender:{teamfile:t.sender_teamfile,alias:t.sender_alias},receiver:{teamfile:t.receiver_teamfile,alias:t.receiver_alias},at:Date.parse(t.started_at)}}function bx(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(Eq).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function Tq(t,e,n={}){let r=new Map;for(let a of e)r.set(Os(a.receiver),a);let s=[{...t,at:null}],i=t,o=new Set([Os(t)]);for(let a=0;a<64;a+=1){let l=r.get(Os(i));if(l===void 0)break;s[0]={...s[0],at:s[0].at??l.at};let c={...l.sender,at:l.at};if(l.sender.teamfile.startsWith("prompt:")&&n.includePromptSender!==!0)break;let u=Os(l.sender);if(o.has(u))break;s.unshift(c),o.add(u),i=l.sender}return s}function Uh(t,e){let n=Os(t),r=new Set([n]),s=[n],i=[];for(let o=0;s.length>0&&o<128;o+=1){let a=s.shift();for(let l of e){let c=Os(l.sender),u=Os(l.receiver);c!==a&&u!==a||(i.includes(l)||i.push(l),r.has(c)||(r.add(c),s.push(c)),r.has(u)||(r.add(u),s.push(u)))}}return i.sort((o,a)=>o.at-a.at)}function Sq(t,e){let n=Uh(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function hx(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function Os(t){return`${t.teamfile}\0${t.alias}`}function kq(t){return t.map(e=>`${vq(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var bq,wq,gx,Qu=M(()=>{"use strict";bq=6e4,wq=2,gx=8*60*60*1e3});function Hh(t,e){if(pc(e)!=="dead")return null;let n=`holder process verified not alive; reconciled to aborted (invocation #${e.id}, holder pid ${e.holder_pid??"unknown"} on ${e.holder_host??"unknown"})`;return t.abortTrackedInvocationAndTerminalizeMessage(e.id,{holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat_at:e.last_heartbeat_at},n)}function Zu(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
2355
2355
  FROM tracked_invocation
2356
2356
  WHERE target_teamfile = ?
2357
2357
  AND target_alias = ?
2358
- AND status = 'running'`,e,n),s=0;for(let i of r)Hh(t,i)!==null&&(s+=1);return s}var ed=M(()=>{"use strict";En();Yt();Xn()});function Sq(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return wx;let n=Number(e);return!Number.isFinite(n)||n<=0?wx:n}async function kq(t,e,n){try{let r=xt(e,n,t),s=r.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let i;if(typeof r.provider=="string"&&r.provider.trim()!=="")i=r.provider;else{let c=await _h(s);if(c.length!==1)return null;i=c[0]}let o=await Xr(s,i);if(o===null)return null;let a=o.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function Ex(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let i=s??Sq(),o=await kq(t,n,r),a=o!==null&&o>=i;return a&&X({event:"session_idle_reclaim",receiver_teamfile:n,receiver_alias:r,idle_ms:o,idle_minutes:o===null?null:Math.round(o/6e4),threshold_ms:i,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var wx,Tx=M(()=>{"use strict";ke();Di();En();wx=36e5});function Rq(t){return t===null?null:ft(t)?"live":"dead"}function Bh(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:Rq(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function Iq(t){return(0,Sx.formatDuration)(t)}function Wh(t){let e=[];return t.idle_ms!==null&&e.push(`active ${Iq(t.idle_ms)}`),e.push(`since ${t.since}`),e.push(t.holder_pid===null?"holder_pid=unavailable":`holder_pid=${t.holder_pid}, ${t.holder_liveness}`),`(${e.join("; ")})`}var Sx,kx=M(()=>{"use strict";ws();Sx=xd(Pc(),1)});import{randomUUID as xq}from"node:crypto";import{hostname as Rx,networkInterfaces as Aq}from"node:os";function Ix(t){let e=(t.now??new Date).toISOString();return{lock_id:xq(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??Rx(),holder_ips:t.ips??Mq(),started_at:e,last_heartbeat:e}}function xx(t=process.env){return Ax(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,Cq)}function Oq(t=process.env){return Ax(t.LMCTL_TERMINAL_LOCK_STALE_MS,Nq)}function qh(t,e={}){let n=e.now??new Date,r=e.localHost??Rx(),s=e.staleMs??Oq();if(t.holder_host===r)return(e.isProcessAlive??Lq)(t.holder_pid)?{live:!0,reason:"local-pid-alive"}:{live:!1,reason:"dead-pid"};let i=Date.parse(t.last_heartbeat);return Number.isFinite(i)?n.getTime()-i<=s?{live:!0,reason:"remote-heartbeat-fresh"}:{live:!1,reason:"stale-heartbeat"}:{live:!1,reason:"stale-heartbeat"}}function Ls(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function Ax(t,e){if(t===void 0||t.trim()==="")return e;let n=t.trim(),r=Number.parseInt(n,10);return!Number.isFinite(r)||r<=0||String(r)!==n?e:r}function Lq(t){if(!Number.isInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return(e!==null&&typeof e=="object"&&"code"in e?e.code:void 0)!=="ESRCH"}}function Mq(){let t=new Set;for(let e of Object.values(Aq()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var Cq,Nq,La=M(()=>{"use strict";Cq=15e3,Nq=12e4});function td(t,e=process.env,n){let r=n?.db?.name??fi(void 0,e),s=e.LMCTL_DB===r?e:{...e,LMCTL_DB:void 0};return`lmctl ${t}: LMCTL_SELF_SESSIONID is set but does not match any member of a registered team.
2358
+ AND status = 'running'`,e,n),s=0;for(let i of r)Hh(t,i)!==null&&(s+=1);return s}var ed=M(()=>{"use strict";En();Yt();Xn()});function Rq(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return wx;let n=Number(e);return!Number.isFinite(n)||n<=0?wx:n}async function Iq(t,e,n){try{let r=xt(e,n,t),s=r.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let i;if(typeof r.provider=="string"&&r.provider.trim()!=="")i=r.provider;else{let c=await _h(s);if(c.length!==1)return null;i=c[0]}let o=await Xr(s,i);if(o===null)return null;let a=o.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function Ex(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let i=s??Rq(),o=await Iq(t,n,r),a=o!==null&&o>=i;return a&&X({event:"session_idle_reclaim",receiver_teamfile:n,receiver_alias:r,idle_ms:o,idle_minutes:o===null?null:Math.round(o/6e4),threshold_ms:i,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var wx,Tx=M(()=>{"use strict";ke();Di();En();wx=36e5});function xq(t){return t===null?null:ft(t)?"live":"dead"}function Bh(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:xq(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function Aq(t){return(0,Sx.formatDuration)(t)}function Wh(t){let e=[];return t.idle_ms!==null&&e.push(`active ${Aq(t.idle_ms)}`),e.push(`since ${t.since}`),e.push(t.holder_pid===null?"holder_pid=unavailable":`holder_pid=${t.holder_pid}, ${t.holder_liveness}`),`(${e.join("; ")})`}var Sx,kx=M(()=>{"use strict";ws();Sx=xd(Pc(),1)});import{randomUUID as Cq}from"node:crypto";import{hostname as Rx,networkInterfaces as Nq}from"node:os";function Ix(t){let e=(t.now??new Date).toISOString();return{lock_id:Cq(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??Rx(),holder_ips:t.ips??Dq(),started_at:e,last_heartbeat:e}}function xx(t=process.env){return Ax(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,Oq)}function Mq(t=process.env){return Ax(t.LMCTL_TERMINAL_LOCK_STALE_MS,Lq)}function qh(t,e={}){let n=e.now??new Date,r=e.localHost??Rx(),s=e.staleMs??Mq();if(t.holder_host===r)return(e.isProcessAlive??Pq)(t.holder_pid)?{live:!0,reason:"local-pid-alive"}:{live:!1,reason:"dead-pid"};let i=Date.parse(t.last_heartbeat);return Number.isFinite(i)?n.getTime()-i<=s?{live:!0,reason:"remote-heartbeat-fresh"}:{live:!1,reason:"stale-heartbeat"}:{live:!1,reason:"stale-heartbeat"}}function Ls(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function Ax(t,e){if(t===void 0||t.trim()==="")return e;let n=t.trim(),r=Number.parseInt(n,10);return!Number.isFinite(r)||r<=0||String(r)!==n?e:r}function Pq(t){if(!Number.isInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return(e!==null&&typeof e=="object"&&"code"in e?e.code:void 0)!=="ESRCH"}}function Dq(){let t=new Set;for(let e of Object.values(Nq()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var Oq,Lq,La=M(()=>{"use strict";Oq=15e3,Lq=12e4});function td(t,e=process.env,n){let r=n?.db?.name??fi(void 0,e),s=e.LMCTL_DB===r?e:{...e,LMCTL_DB:void 0};return`lmctl ${t}: LMCTL_SELF_SESSIONID is set but does not match any member of a registered team.
2359
2359
  The session marker may be stale or the team may not be registered in this lmctl database.
2360
2360
  Consulted ${rE(r,s)}
2361
- To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function nd(t,e){let n=Pq(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Pq(t,e){let n=t[yf];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let i of e.listRootTeams()){let o;try{o=bi(i.teamfile_path,e)}catch{continue}for(let a of o.members)a.teamfile===void 0&&a.session===n&&r.push(`${i.teamfile_path}:${a.alias}`)}let s=[...new Set(r)];if(s.length===0)return{ok:!1,reason:"not-found"};if(s.length>1)throw new Error("LMCTL_SELF_SESSIONID matches multiple team members; the team registry is ambiguous");return{ok:!0,identity:s[0]}}var Xh=M(()=>{"use strict";Yt();bo();ln();vc();Ts()});function rd(t){let e=Zp(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Gh=M(()=>{"use strict";En()});function Jh(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,i=()=>t.dal!==void 0?t.dal:(s===null&&(s=ot({path:on(t)})),s),o=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>i().listAgentInflight().some(a=>a.sender_teamfile===e.teamfile&&a.sender_alias===e.alias&&!(a.receiver_teamfile===e.teamfile&&a.receiver_alias===e.alias)&&a.holder_pid!==null&&ft(a.holder_pid)),pollMs:Dq,settleMs:Fq,maxHoldMs:Ar(n),onHold:()=>X({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{o(),!(!a.held&&a.reason==="cleared")&&X({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function Cx(t){let e=t.literalPrompt?t.newMessage:$q(t.newMessage,{newMessageFrom:t.newMessageFrom??jq(t.sender)});if(e.length===0)throw new Error(`no message to deliver for ${t.sender.teamfile}:${t.sender.alias} -> ${t.receiver.teamfile}:${t.receiver.alias}`);let n=!1,r=Le(),s=0,i=0,o=0,a={provider:t.receiver.provider,sessionId:t.receiver.sessionId,cwd:t.receiver.cwd,prompt:e,permissionMode:t.permissionMode,env:t.env,onDelta:c=>{n=!0,r&&(s+=1,o=Buffer.byteLength(c,"utf8"),i+=o),t.onDelta?.(c)},onProgress:c=>t.onProgress?.(c)};t.registry&&(a.registry=t.registry),t.signal&&(a.signal=t.signal),t.receiver.model!==void 0&&(a.model=t.receiver.model),t.receiver.effort!==void 0&&(a.effort=t.receiver.effort),a.alias=t.receiver.alias,a.isLead=t.receiver.isLead,t.idleTimeoutMs!==void 0&&(a.timeoutMs=t.idleTimeoutMs),t.requireResume!==void 0&&(a.requireResume=t.requireResume),t.bundleSession!==void 0&&(a.bundleSession=t.bundleSession),a.holdOpen=Jh(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await ka(a);if(t.requireResume&&l.sessionId!==t.receiver.sessionId)throw Object.assign(new Error(`provider session changed: expected ${t.receiver.sessionId}, received ${l.sessionId??"(missing)"}`),{usage:l.usage,sessionId:l.sessionId});return r&&Bt(JSON.stringify({event:"chat_return",alias:t.receiver.alias,provider:t.receiver.provider,streamed:n,blockCount:s,streamedBytes:i,resultTextBytes:Buffer.byteLength(l.text,"utf8"),lastChunkBytes:o,tailPreview:l.text.slice(-200)})),l.status==="stalled"?{status:"stalled",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,stalledAfterMs:l.stalledAfterMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}:l.status==="empty"?{status:"empty",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}:{status:"ok",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}}function $q(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
2362
- `)}function jq(t){return`${t.teamfile}:${t.alias}`}var _te,Dq,Fq,Vh=M(()=>{"use strict";sr();ke();zn();Yt();ws();Xn();_te=60*60*1e3,Dq=2e3,Fq=5e3});async function Wi(t){let e=t.onEvent??(()=>{}),n=Uq(t.io,e),r=null,s=null,i=null,o,a,l=null,c=!1,u=null,d=t.prompt,m,p=()=>{let f=t.signal?.reason;if(i===null||!["SIGINT","SIGTERM","SIGHUP"].includes(f))return;let g;try{g=n.dal??ot({path:on(n)}),g.finishTrackedInvocation(i,{status:"cancelled",signal:f,exit_code:f==="SIGINT"?130:f==="SIGTERM"?143:129,error:`prompt holder received ${f}`,team_chat_log_id:l}),s!==null&&g.releaseAgentInflight(s.row,s.leaseId)}catch(h){n.stderr.write(`error: failed to record holder ${f}: ${String(h)}
2363
- `)}finally{n.dal===void 0&&g?.close()}};t.signal?.addEventListener("abort",p,{once:!0});try{let f=t.resolvedNativeTarget,g=f!==void 0;if(g&&(t.heldLease===void 0||t.conversation===void 0))throw new Ne("native session turns require a caller-held lease and conversation");let h=g?f:await he(n,C=>xt(t.teamfile,t.alias,C));if(t.expectedSession!==void 0&&(h.provider!==t.expectedSession.provider||h.sessionid!==t.expectedSession.sessionid))throw new Ne(`session changed for ${h.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${h.provider}:${h.sessionid}`);if(g&&(t.conversation.provider!==h.provider||t.conversation.sessionId!==h.sessionid))throw new Ne("native session changed for "+h.alias+"; expected "+h.provider+":"+h.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let y=h.teamfile,b=await he(n,C=>Yq(C,t.env??process.env)),_=b.sender,v=g?"native:"+h.provider+":"+h.sessionid:await Qq(n,{explicitRoot:t.rootFlag,sender:_,receiverTeamfile:y,operatorOrigin:b.origin==="operator"}),E=t.env??process.env;if(!g){let C=await he(n,L=>L.getRootTeam(v)?.name??null);C!==null&&(E.LMBEE_TEAM_NAME=C)}if(i=await qq(n,{receiverTeamfile:y,receiverAlias:h.alias,sender:_,rootTeamfile:v,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:b.origin,parentInvocationId:Dc(E.LMCTL_INVOCATION_ID)}),o=Vq(n,i),t.signal?.aborted)throw p(),Error("Chat turn cancelled");i!==null&&(E.LMCTL_INVOCATION_ID=String(i));try{g||$i(n,Ht(y),y)}catch{}r={root_teamfile:v,sender_teamfile:_?.teamfile??null,sender_alias:_?.alias??null,receiver_teamfile:y,receiver_alias:h.alias,receiver_provider:h.provider,receiver_session_id:h.sessionid,origin:b.origin,message_type:t.messageType??null};let R=await Fx(n,y,h.alias);if(R!==null){let C=Ls(R);return Ms(i,r,t.prompt,C,"unavailable"),u=zh(C,null),{status:"busy",message:C,teamChatLogId:null}}let S=!1;if(t.heldLease!==void 0){let C=t.heldLease;if(!await he(n,P=>{let j=P.getAgentInflight(y,h.alias);return j===null||j.sender_teamfile!==C.row.sender_teamfile||j.sender_alias!==C.row.sender_alias||j.started_at!==C.row.started_at||j.holder_pid!==process.pid?!1:P.heartbeatAgentInflight(C.row,C.leaseId,new Date().toISOString())})){let P=`bundle lease lost for ${h.alias}: this batch no longer holds the in-flight lease (reclaimed or taken over); aborting before this prompt instead of dispatching unsynchronized`;return Ms(i,r,t.prompt,P,"unavailable"),u=Ma(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await Hq(n,y,h.alias);if(C.busy){let L=await Bq(n,y,h.alias);return L+=await Wq(n,y,h.alias),Ms(i,r,t.prompt,L,"unavailable"),u=zh(L,null),{status:"busy",message:L,teamChatLogId:null}}S=C.idleReclaim}if(_!==null&&_.teamfile!==y){let C=await he(n,L=>yx(L,{root:v,sender:_,receiverTeamfile:y,receiverAlias:h.alias,now:new Date}));if(C.stop){let L=vx(C.chain);return Ms(i,r,t.prompt,L,"cycle"),u=Ma(L,null),{status:"error",errorKind:"cycle",message:L,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await Zq(n,{receiver_teamfile:y,receiver_alias:h.alias,sender_teamfile:_?.teamfile??y,sender_alias:_?.alias??"operator",...S?{force:!0,reclaimReason:"session-idle"}:{}});if(!C.acquired){let L=$x(y,h.alias,C.current);return L+=` ${Wh(Bh({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,Ms(i,r,t.prompt,L,"unavailable"),u=zh(L,null),{status:"busy",message:L,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=ui(L=>he(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,L)),{intervalMs:Px,onError:L=>{Le()&&Bt(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:L instanceof Error?L.message:String(L)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");m=ac({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=m.startedAt);let I=await Cx({sender:_??{teamfile:y,alias:"operator"},receiver:{teamfile:y,alias:h.alias,provider:h.provider,sessionId:h.sessionid,cwd:h.sessiondir,...h.model!==void 0?{model:h.model}:{},...h.effort!==void 0?{effort:h.effort}:{},...h.isLead!==void 0?{isLead:h.isLead}:{}},signal:t.signal,newMessage:t.prompt,newMessageFrom:_===null?"operator":`${_.teamfile}:${_.alias}`,...g?{literalPrompt:!0}:{},io:n,permissionMode:t.permissionMode,...t.expectedSession!==void 0?{requireResume:!0}:{},...t.bundleSession!==void 0?{bundleSession:t.bundleSession}:{},...t.conversation!==void 0?{bundleSession:t.conversation}:{},...t.registry!==void 0?{registry:t.registry}:{},env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:C=>e({kind:"delta",chunk:C}),onProgress:C=>e({kind:"progress",alias:h.alias,event:C}),onPromptBuilt:async C=>{d=C,l===null&&(l=await t2(n,{...r,message:C,usage:m}),l!==null&&(t.onAccepted?.(Gn(l)),i!==null&&await Jq(n,i,l))),i!==null&&await Gq(n,i,C)}});d=I.prompt;let N=I.status==="stalled",O=I.status==="empty",A=null,w=N?`provider stalled${I.stalledAfterMs!==void 0?` after ${I.stalledAfterMs}ms`:""}`:O?"provider returned no content and no observed activity for this turn -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error":I.status==="error"?I.error??I.receipt:null,T=N||O||I.status==="error"?"error":"ok",k=await jo(m,{status:I.status,sessionId:I.sessionId,usage:I.usage},()=>af(n),{db:n.dal?.db,dbPath:on(n),env:n.env});l!==null?(await Lx(n,l,{...r,message:d,response:I.receipt,status:T,error_detail:w,usage:k}),c=!0,A=l):A=await Mx(n,{...r,message:d,response:I.receipt,status:T,error_detail:w,usage:k});let x=I.status!=="error"?I.warnings:void 0;if(N||O){let C=w;Ms(i,r,d,C,"error"),u=Ma(C,A,I.receipt,x)}else u=zq(I.receipt,A,x);return{status:N?"stalled":O?"empty":"ok",replyText:I.receipt,wroteDelta:I.wroteDelta,teamChatLogId:A,messageId:A===null?null:Gn(A),durationMs:I.durationMs}}catch(f){let g=f instanceof Error?f.message:String(f),h=f,y=m?await jo(m,{status:li(g,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>af(n),{db:n.dal?.db,dbPath:on(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Lx(n,l,{...r,message:d,response:null,status:"error",error_detail:g,usage:y}),c=!0),l===null&&r!==null&&y&&(l=await Mx(n,{...r,message:d,response:null,status:"error",error_detail:g,usage:y})),Ms(i,r,d,g,"error"),u={...Ma(g,l),signal:f?.signal??null,exit_code:f?.exitCode??null},{status:"error",errorKind:f instanceof Ne?"target":"provider",message:g,teamChatLogId:l,messageId:l===null?null:Gn(l)}}finally{t.signal?.removeEventListener("abort",p),o!==void 0&&clearInterval(o),a!==void 0&&clearInterval(a),l!==null&&await n2(n,r,Gn(l)),s!==null&&await e2(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),i!==null&&await Xq(n,i,u??Ma("chat turn exited without a terminal outcome",null))}}function Uq(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function Hq(t,e,n){let r=await he(t,i=>(Zu(i,e,n),di(i,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await he(t,i=>Ex(i,r,e,n));return{busy:!s,idleReclaim:s}}async function Bq(t,e,n){let r=await Fx(t,e,n);if(r!==null)return Ls(r);let s=await he(t,i=>i.getAgentInflight(e,n));return s!==null?$x(e,n,s):`${n} is busy; wait and retry`}async function Wq(t,e,n){let r=await he(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Wh(Bh({holderPid:r.holder_pid,since:r.started_at}))}`}async function qq(t,e){try{return(await he(t,r=>r.startTrackedInvocation({kind:"chat",origin:e.origin,scope_teamfile:e.receiverTeamfile,from_identity:e.sender===null?"operator":`${e.sender.teamfile}:${e.sender.alias}`,target_teamfile:e.receiverTeamfile,target_alias:e.receiverAlias,root_teamfile:e.rootTeamfile,cwd:e.cwd??null,command:Kq(e.receiverTeamfile,e.receiverAlias,e.prompt),holder_pid:process.pid,request_payload:e.prompt,parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({provider:e.provider,model:e.model??null,sessionid:e.sessionId??null})}))).id}catch(n){return Le()&&Bt(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function Xq(t,e,n){try{await he(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){Le()&&Bt(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Gq(t,e,n){try{await he(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){Le()&&Bt(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Jq(t,e,n){try{await he(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){Le()&&Bt(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function Vq(t,e){if(e===null)return;let n=setInterval(()=>{he(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{Le()&&Bt(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Px);return n.unref?.(),n}function Dx(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function zq(t,e,n){return{status:"done",result_summary:sd(t),error:null,team_chat_log_id:e,...Dx(n)}}function zh(t,e){return{status:"busy",result_summary:sd(t),error:t,team_chat_log_id:e}}function Ma(t,e,n,r){return{status:"error",result_summary:n===void 0?cT(t,500):sd(n),error:t,team_chat_log_id:e,...Dx(r)}}function sd(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function Kq(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Yq(t,e){let n=nd(e,t);if(n.ok)return{sender:rd(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(td("chat",e,t))}async function Qq(t,e){if(e.explicitRoot!==void 0)return await he(t,r=>It(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await he(t,r=>_x(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function Zq(t,e){return await he(t,n=>{let r=Le(),s=xr(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:Vr(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Bt(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:s.reclaimReason===null?"acquired":"reclaimed",...s.reclaimReason===null?{}:{reclaim_reason:s.reclaimReason,holder:Ox(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Bt(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:"rejected",holder:Ox(s.current)})),{acquired:!1,current:s.current})})}async function Fx(t,e,n){return await he(t,r=>{for(let i=0;i<2;i+=1){let o=r.getTerminalLock(e,n);if(o===null)return null;if(qh(o).live)return o;let l=r.getAgentInflight(e,n);if(r.clearTerminalLock(e,n,o.lock_id))return l!==null&&l.sender_teamfile===e&&l.sender_alias==="terminal"&&r.clearObservedTerminalAgentInflight(e,n,{sender_teamfile:l.sender_teamfile,sender_alias:l.sender_alias,started_at:l.started_at,holder_pid:l.holder_pid}),null}let s=r.getTerminalLock(e,n);return s===null?null:qh(s).live?s:null})}function Ox(t){return t===null?null:{sender_teamfile:t.sender_teamfile,sender_alias:t.sender_alias,holder_pid:t.holder_pid,started_at:t.started_at}}async function e2(t,e,n){try{return await he(t,r=>r.releaseAgentInflight(e,n))}catch(r){t.stderr.write(`warning: failed to release chat in-flight slot: ${r instanceof Error?r.message:String(r)}
2364
- `)}return!1}function $x(t,e,n){return`${e} is servicing ${n.sender_alias} (${n.sender_teamfile}) since ${n.started_at} \u2014 wait and retry, or inspect without waking it: lmctl tail "${t}" ${e}`}async function t2(t,e){let n=Pa(e.message);try{return await he(t,r=>r.beginTeamChatLog({usage:e.usage,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,receiver_provider:e.receiver_provider,receiver_session_id:e.receiver_session_id,provider_prompt:e.message,message:n.text,response:null,origin:e.origin,status:"running",error_detail:null,truncated:n.truncated?1:0,message_type:e.message_type??null,created_at:e.started_at??new Date().toISOString()}))}catch(r){return t.stderr.write(`warning: failed to begin chat log: ${r instanceof Error?r.message:String(r)}
2361
+ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function nd(t,e){let n=Fq(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Fq(t,e){let n=t[yf];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let i of e.listRootTeams()){let o;try{o=bi(i.teamfile_path,e)}catch{continue}for(let a of o.members)a.teamfile===void 0&&a.session===n&&r.push(`${i.teamfile_path}:${a.alias}`)}let s=[...new Set(r)];if(s.length===0)return{ok:!1,reason:"not-found"};if(s.length>1)throw new Error("LMCTL_SELF_SESSIONID matches multiple team members; the team registry is ambiguous");return{ok:!0,identity:s[0]}}var Xh=M(()=>{"use strict";Yt();bo();ln();vc();Ts()});function rd(t){let e=Zp(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Gh=M(()=>{"use strict";En()});function Jh(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,i=()=>t.dal!==void 0?t.dal:(s===null&&(s=ot({path:on(t)})),s),o=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>i().listAgentInflight().some(a=>a.sender_teamfile===e.teamfile&&a.sender_alias===e.alias&&!(a.receiver_teamfile===e.teamfile&&a.receiver_alias===e.alias)&&a.holder_pid!==null&&ft(a.holder_pid)),pollMs:$q,settleMs:jq,maxHoldMs:Ar(n),onHold:()=>X({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{o(),!(!a.held&&a.reason==="cleared")&&X({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function Cx(t){let e=t.literalPrompt?t.newMessage:Uq(t.newMessage,{newMessageFrom:t.newMessageFrom??Hq(t.sender)});if(e.length===0)throw new Error(`no message to deliver for ${t.sender.teamfile}:${t.sender.alias} -> ${t.receiver.teamfile}:${t.receiver.alias}`);let n=!1,r=Le(),s=0,i=0,o=0,a={provider:t.receiver.provider,sessionId:t.receiver.sessionId,cwd:t.receiver.cwd,prompt:e,permissionMode:t.permissionMode,env:t.env,onDelta:c=>{n=!0,r&&(s+=1,o=Buffer.byteLength(c,"utf8"),i+=o),t.onDelta?.(c)},onProgress:c=>t.onProgress?.(c)};t.registry&&(a.registry=t.registry),t.signal&&(a.signal=t.signal),t.receiver.model!==void 0&&(a.model=t.receiver.model),t.receiver.effort!==void 0&&(a.effort=t.receiver.effort),a.alias=t.receiver.alias,a.isLead=t.receiver.isLead,t.idleTimeoutMs!==void 0&&(a.timeoutMs=t.idleTimeoutMs),t.requireResume!==void 0&&(a.requireResume=t.requireResume),t.bundleSession!==void 0&&(a.bundleSession=t.bundleSession),a.holdOpen=Jh(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await ka(a);if(t.requireResume&&l.sessionId!==t.receiver.sessionId)throw Object.assign(new Error(`provider session changed: expected ${t.receiver.sessionId}, received ${l.sessionId??"(missing)"}`),{usage:l.usage,sessionId:l.sessionId});return r&&Bt(JSON.stringify({event:"chat_return",alias:t.receiver.alias,provider:t.receiver.provider,streamed:n,blockCount:s,streamedBytes:i,resultTextBytes:Buffer.byteLength(l.text,"utf8"),lastChunkBytes:o,tailPreview:l.text.slice(-200)})),l.status==="stalled"?{status:"stalled",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,stalledAfterMs:l.stalledAfterMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}:l.status==="empty"?{status:"empty",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}:{status:"ok",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}}function Uq(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
2362
+ `)}function Hq(t){return`${t.teamfile}:${t.alias}`}var bte,$q,jq,Vh=M(()=>{"use strict";sr();ke();zn();Yt();ws();Xn();bte=60*60*1e3,$q=2e3,jq=5e3});async function Wi(t){let e=t.onEvent??(()=>{}),n=Bq(t.io,e),r=null,s=null,i=null,o,a,l=null,c=!1,u=null,d=t.prompt,m,p=()=>{let f=t.signal?.reason;if(i===null||!["SIGINT","SIGTERM","SIGHUP"].includes(f))return;let g;try{g=n.dal??ot({path:on(n)}),g.finishTrackedInvocation(i,{status:"cancelled",signal:f,exit_code:f==="SIGINT"?130:f==="SIGTERM"?143:129,error:`prompt holder received ${f}`,team_chat_log_id:l}),s!==null&&g.releaseAgentInflight(s.row,s.leaseId)}catch(h){n.stderr.write(`error: failed to record holder ${f}: ${String(h)}
2363
+ `)}finally{n.dal===void 0&&g?.close()}};t.signal?.addEventListener("abort",p,{once:!0});try{let f=t.resolvedNativeTarget,g=f!==void 0;if(g&&(t.heldLease===void 0||t.conversation===void 0))throw new Ne("native session turns require a caller-held lease and conversation");let h=g?f:await he(n,C=>xt(t.teamfile,t.alias,C));if(t.expectedSession!==void 0&&(h.provider!==t.expectedSession.provider||h.sessionid!==t.expectedSession.sessionid))throw new Ne(`session changed for ${h.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${h.provider}:${h.sessionid}`);if(g&&(t.conversation.provider!==h.provider||t.conversation.sessionId!==h.sessionid))throw new Ne("native session changed for "+h.alias+"; expected "+h.provider+":"+h.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let y=h.teamfile,b=await he(n,C=>Zq(C,t.env??process.env)),_=b.sender,v=g?"native:"+h.provider+":"+h.sessionid:await e2(n,{explicitRoot:t.rootFlag,sender:_,receiverTeamfile:y,operatorOrigin:b.origin==="operator"}),E=t.env??process.env;if(!g){let C=await he(n,L=>L.getRootTeam(v)?.name??null);C!==null&&(E.LMBEE_TEAM_NAME=C)}if(i=await Gq(n,{receiverTeamfile:y,receiverAlias:h.alias,sender:_,rootTeamfile:v,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:b.origin,parentInvocationId:Dc(E.LMCTL_INVOCATION_ID)}),o=Kq(n,i),t.signal?.aborted)throw p(),Error("Chat turn cancelled");i!==null&&(E.LMCTL_INVOCATION_ID=String(i));try{g||$i(n,Ht(y),y)}catch{}r={root_teamfile:v,sender_teamfile:_?.teamfile??null,sender_alias:_?.alias??null,receiver_teamfile:y,receiver_alias:h.alias,receiver_provider:h.provider,receiver_session_id:h.sessionid,origin:b.origin,message_type:t.messageType??null};let R=await Fx(n,y,h.alias);if(R!==null){let C=Ls(R);return Ms(i,r,t.prompt,C,"unavailable"),u=zh(C,null),{status:"busy",message:C,teamChatLogId:null}}let S=!1;if(t.heldLease!==void 0){let C=t.heldLease;if(!await he(n,P=>{let j=P.getAgentInflight(y,h.alias);return j===null||j.sender_teamfile!==C.row.sender_teamfile||j.sender_alias!==C.row.sender_alias||j.started_at!==C.row.started_at||j.holder_pid!==process.pid?!1:P.heartbeatAgentInflight(C.row,C.leaseId,new Date().toISOString())})){let P=`bundle lease lost for ${h.alias}: this batch no longer holds the in-flight lease (reclaimed or taken over); aborting before this prompt instead of dispatching unsynchronized`;return Ms(i,r,t.prompt,P,"unavailable"),u=Ma(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await Wq(n,y,h.alias);if(C.busy){let L=await qq(n,y,h.alias);return L+=await Xq(n,y,h.alias),Ms(i,r,t.prompt,L,"unavailable"),u=zh(L,null),{status:"busy",message:L,teamChatLogId:null}}S=C.idleReclaim}if(_!==null&&_.teamfile!==y){let C=await he(n,L=>yx(L,{root:v,sender:_,receiverTeamfile:y,receiverAlias:h.alias,now:new Date}));if(C.stop){let L=vx(C.chain);return Ms(i,r,t.prompt,L,"cycle"),u=Ma(L,null),{status:"error",errorKind:"cycle",message:L,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await t2(n,{receiver_teamfile:y,receiver_alias:h.alias,sender_teamfile:_?.teamfile??y,sender_alias:_?.alias??"operator",...S?{force:!0,reclaimReason:"session-idle"}:{}});if(!C.acquired){let L=$x(y,h.alias,C.current);return L+=` ${Wh(Bh({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,Ms(i,r,t.prompt,L,"unavailable"),u=zh(L,null),{status:"busy",message:L,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=ui(L=>he(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,L)),{intervalMs:Px,onError:L=>{Le()&&Bt(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:L instanceof Error?L.message:String(L)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");m=ac({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=m.startedAt);let I=await Cx({sender:_??{teamfile:y,alias:"operator"},receiver:{teamfile:y,alias:h.alias,provider:h.provider,sessionId:h.sessionid,cwd:h.sessiondir,...h.model!==void 0?{model:h.model}:{},...h.effort!==void 0?{effort:h.effort}:{},...h.isLead!==void 0?{isLead:h.isLead}:{}},signal:t.signal,newMessage:t.prompt,newMessageFrom:_===null?"operator":`${_.teamfile}:${_.alias}`,...g?{literalPrompt:!0}:{},io:n,permissionMode:t.permissionMode,...t.expectedSession!==void 0?{requireResume:!0}:{},...t.bundleSession!==void 0?{bundleSession:t.bundleSession}:{},...t.conversation!==void 0?{bundleSession:t.conversation}:{},...t.registry!==void 0?{registry:t.registry}:{},env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:C=>e({kind:"delta",chunk:C}),onProgress:C=>e({kind:"progress",alias:h.alias,event:C}),onPromptBuilt:async C=>{d=C,l===null&&(l=await r2(n,{...r,message:C,usage:m}),l!==null&&(t.onAccepted?.(Gn(l)),i!==null&&await zq(n,i,l))),i!==null&&await Vq(n,i,C)}});d=I.prompt;let N=I.status==="stalled",O=I.status==="empty",A=null,w=N?`provider stalled${I.stalledAfterMs!==void 0?` after ${I.stalledAfterMs}ms`:""}`:O?"provider returned no content and no observed activity for this turn -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error":I.status==="error"?I.error??I.receipt:null,T=N||O||I.status==="error"?"error":"ok",k=await jo(m,{status:I.status,sessionId:I.sessionId,usage:I.usage},()=>af(n),{db:n.dal?.db,dbPath:on(n),env:n.env});l!==null?(await Lx(n,l,{...r,message:d,response:I.receipt,status:T,error_detail:w,usage:k}),c=!0,A=l):A=await Mx(n,{...r,message:d,response:I.receipt,status:T,error_detail:w,usage:k});let x=I.status!=="error"?I.warnings:void 0;if(N||O){let C=w;Ms(i,r,d,C,"error"),u=Ma(C,A,I.receipt,x)}else u=Yq(I.receipt,A,x);return{status:N?"stalled":O?"empty":"ok",replyText:I.receipt,wroteDelta:I.wroteDelta,teamChatLogId:A,messageId:A===null?null:Gn(A),durationMs:I.durationMs}}catch(f){let g=f instanceof Error?f.message:String(f),h=f,y=m?await jo(m,{status:li(g,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>af(n),{db:n.dal?.db,dbPath:on(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Lx(n,l,{...r,message:d,response:null,status:"error",error_detail:g,usage:y}),c=!0),l===null&&r!==null&&y&&(l=await Mx(n,{...r,message:d,response:null,status:"error",error_detail:g,usage:y})),Ms(i,r,d,g,"error"),u={...Ma(g,l),signal:f?.signal??null,exit_code:f?.exitCode??null},{status:"error",errorKind:f instanceof Ne?"target":"provider",message:g,teamChatLogId:l,messageId:l===null?null:Gn(l)}}finally{t.signal?.removeEventListener("abort",p),o!==void 0&&clearInterval(o),a!==void 0&&clearInterval(a),l!==null&&await s2(n,r,Gn(l)),s!==null&&await n2(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),i!==null&&await Jq(n,i,u??Ma("chat turn exited without a terminal outcome",null))}}function Bq(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function Wq(t,e,n){let r=await he(t,i=>(Zu(i,e,n),di(i,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await he(t,i=>Ex(i,r,e,n));return{busy:!s,idleReclaim:s}}async function qq(t,e,n){let r=await Fx(t,e,n);if(r!==null)return Ls(r);let s=await he(t,i=>i.getAgentInflight(e,n));return s!==null?$x(e,n,s):`${n} is busy; wait and retry`}async function Xq(t,e,n){let r=await he(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Wh(Bh({holderPid:r.holder_pid,since:r.started_at}))}`}async function Gq(t,e){try{return(await he(t,r=>r.startTrackedInvocation({kind:"chat",origin:e.origin,scope_teamfile:e.receiverTeamfile,from_identity:e.sender===null?"operator":`${e.sender.teamfile}:${e.sender.alias}`,target_teamfile:e.receiverTeamfile,target_alias:e.receiverAlias,root_teamfile:e.rootTeamfile,cwd:e.cwd??null,command:Qq(e.receiverTeamfile,e.receiverAlias,e.prompt),holder_pid:process.pid,request_payload:e.prompt,parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({provider:e.provider,model:e.model??null,sessionid:e.sessionId??null})}))).id}catch(n){return Le()&&Bt(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function Jq(t,e,n){try{await he(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){Le()&&Bt(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Vq(t,e,n){try{await he(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){Le()&&Bt(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function zq(t,e,n){try{await he(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){Le()&&Bt(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function Kq(t,e){if(e===null)return;let n=setInterval(()=>{he(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{Le()&&Bt(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Px);return n.unref?.(),n}function Dx(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function Yq(t,e,n){return{status:"done",result_summary:sd(t),error:null,team_chat_log_id:e,...Dx(n)}}function zh(t,e){return{status:"busy",result_summary:sd(t),error:t,team_chat_log_id:e}}function Ma(t,e,n,r){return{status:"error",result_summary:n===void 0?cT(t,500):sd(n),error:t,team_chat_log_id:e,...Dx(r)}}function sd(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function Qq(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Zq(t,e){let n=nd(e,t);if(n.ok)return{sender:rd(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(td("chat",e,t))}async function e2(t,e){if(e.explicitRoot!==void 0)return await he(t,r=>It(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await he(t,r=>_x(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function t2(t,e){return await he(t,n=>{let r=Le(),s=xr(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:Vr(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Bt(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:s.reclaimReason===null?"acquired":"reclaimed",...s.reclaimReason===null?{}:{reclaim_reason:s.reclaimReason,holder:Ox(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Bt(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:"rejected",holder:Ox(s.current)})),{acquired:!1,current:s.current})})}async function Fx(t,e,n){return await he(t,r=>{for(let i=0;i<2;i+=1){let o=r.getTerminalLock(e,n);if(o===null)return null;if(qh(o).live)return o;let l=r.getAgentInflight(e,n);if(r.clearTerminalLock(e,n,o.lock_id))return l!==null&&l.sender_teamfile===e&&l.sender_alias==="terminal"&&r.clearObservedTerminalAgentInflight(e,n,{sender_teamfile:l.sender_teamfile,sender_alias:l.sender_alias,started_at:l.started_at,holder_pid:l.holder_pid}),null}let s=r.getTerminalLock(e,n);return s===null?null:qh(s).live?s:null})}function Ox(t){return t===null?null:{sender_teamfile:t.sender_teamfile,sender_alias:t.sender_alias,holder_pid:t.holder_pid,started_at:t.started_at}}async function n2(t,e,n){try{return await he(t,r=>r.releaseAgentInflight(e,n))}catch(r){t.stderr.write(`warning: failed to release chat in-flight slot: ${r instanceof Error?r.message:String(r)}
2364
+ `)}return!1}function $x(t,e,n){return`${e} is servicing ${n.sender_alias} (${n.sender_teamfile}) since ${n.started_at} \u2014 wait and retry, or inspect without waking it: lmctl tail "${t}" ${e}`}async function r2(t,e){let n=Pa(e.message);try{return await he(t,r=>r.beginTeamChatLog({usage:e.usage,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,receiver_provider:e.receiver_provider,receiver_session_id:e.receiver_session_id,provider_prompt:e.message,message:n.text,response:null,origin:e.origin,status:"running",error_detail:null,truncated:n.truncated?1:0,message_type:e.message_type??null,created_at:e.started_at??new Date().toISOString()}))}catch(r){return t.stderr.write(`warning: failed to begin chat log: ${r instanceof Error?r.message:String(r)}
2365
2365
  `),null}}async function Lx(t,e,n){let r=Pa(n.message),s=n.response===null?null:Pa(n.response);try{await he(t,i=>i.finishTeamChatLog(e,{usage:n.usage,root_teamfile:n.root_teamfile,sender_teamfile:n.sender_teamfile,sender_alias:n.sender_alias,receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,receiver_provider:n.receiver_provider,receiver_session_id:n.receiver_session_id,provider_prompt:n.message,message:r.text,response:s?.text??null,origin:n.origin,status:n.status,error_detail:n.error_detail,truncated:r.truncated||s?.truncated?1:0,created_at:new Date().toISOString()}))}catch(i){t.stderr.write(`warning: failed to finish chat log ${e}: ${i instanceof Error?i.message:String(i)}
2366
- `)}}async function n2(t,e,n){if(e!==null)try{await he(t,r=>{r.clearCurrentlyHandlingMessage(e.receiver_teamfile,e.receiver_alias,n)})}catch(r){t.stderr.write(`warning: failed to clear chat causal pointer: ${r instanceof Error?r.message:String(r)}
2366
+ `)}}async function s2(t,e,n){if(e!==null)try{await he(t,r=>{r.clearCurrentlyHandlingMessage(e.receiver_teamfile,e.receiver_alias,n)})}catch(r){t.stderr.write(`warning: failed to clear chat causal pointer: ${r instanceof Error?r.message:String(r)}
2367
2367
  `)}}async function Mx(t,e){let n=Pa(e.message),r=e.response===null?null:Pa(e.response);try{return await he(t,s=>s.insertTeamChatLog({usage:e.usage,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,receiver_provider:e.receiver_provider,receiver_session_id:e.receiver_session_id,provider_prompt:e.message,message:n.text,response:r?.text??null,origin:e.origin,status:e.status,error_detail:e.error_detail,truncated:n.truncated||r?.truncated?1:0,message_type:e.message_type??null,created_at:e.started_at??new Date().toISOString()}))}catch(s){return t.stderr.write(`warning: failed to record chat log: ${s instanceof Error?s.message:String(s)}
2368
- `),null}}function Ms(t,e,n,r,s){t!==null||e===null||X({event:"chat_attempt_error",reason:s,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,origin:e.origin,error_detail:r,message_preview:sd(n)})}function Pa(t){return t.length<=Nx?{text:t,truncated:!1}:{text:t.slice(0,Nx),truncated:!0}}var Nx,Px,id=M(()=>{"use strict";Uo();lf();an();Yt();En();wn();qu();Ts();Qu();ke();zn();Xn();ed();Tx();kx();La();Xh();Gh();Vh();hc();Nx=256*1024,Px=3e4});function ad(t,e){let n=!1,r=()=>{if(n)return;n=!0;let s=od.get(t);s||(s={pending:0,timeout:t.db.pragma("busy_timeout",{simple:!0})},od.set(t,s)),s.pending++,t.db.pragma("busy_timeout=0")};return e.addEventListener("abort",r,{once:!0}),e.aborted&&r(),()=>{if(e.removeEventListener("abort",r),!n)return;let s=od.get(t);if(--s.pending===0){od.delete(t);try{t.db.pragma("busy_timeout="+s.timeout)}catch{}}}}var od,Kh=M(()=>{"use strict";od=new WeakMap});import{resolve as r2}from"node:path";async function jx(t,e){let n=(d,m)=>({status:"error",error:d,code:m,reply:"",messageId:null,teamChatLogId:null}),r="invalid_argument",s,i,o=()=>{},a=()=>{},l,c,u=()=>{if(c)throw c;if(!l||!i)return;let d=l,m=i.db.pragma("busy_timeout",{simple:!0});try{if(i.db.pragma("busy_timeout=0"),!i.releaseAgentInflight(d.row,d.leaseId)){let p=i.getAgentInflight(d.row.receiver_teamfile,d.row.receiver_alias);if(p&&p.active_count>0)throw Error("Prompt lease release was not acknowledged")}l=void 0}catch(p){throw c=p instanceof Error?p:Error(G(p)),c}finally{i.db.pragma("busy_timeout="+m)}};try{let d=me(t);if(d)return n(d.error,d.code);if(s=t.dal,!e||typeof e!="object"||Array.isArray(e))return n("promptMember: request must be a map","invalid_argument");let m={...e},p=dt.find(y=>y.name==="promptMember").params.find(y=>y.name==="request").keys;if(Object.keys(m).some(y=>!p.some(b=>b.name===y)))return n("promptMember: unknown request key","invalid_argument");if(typeof m.teamfile!="string"||typeof m.alias!="string"||typeof m.prompt!="string")return n("promptMember: teamfile, alias and prompt must be strings","invalid_argument");let f=m.permissionMode??"yolo";if(f!=="yolo"&&f!=="plan")return n("promptMember: permissionMode must be yolo or plan","invalid_argument");if(m.idleTimeoutMs!=null&&(typeof m.idleTimeoutMs!="number"||!Number.isFinite(m.idleTimeoutMs)||m.idleTimeoutMs<0))return n("promptMember: idleTimeoutMs must be finite and nonnegative","invalid_argument");if(m.messageType!==void 0&&typeof m.messageType!="string")return n("promptMember: messageType must be a string","invalid_argument");r="provider";let g=lt(t);Object.defineProperty(g,"dal",{enumerable:!0,get(){return i||(i=s??ot({path:t.dbPath}),o=ad(i,t.signal)),i}}),a=_n(t,{async close(){u()},finalizeSync(){u()}});let h=await Wi({signal:t.signal,onInflightAcquired:y=>{l=y,t.closed&&u()},onInflightReleased:y=>{l?.leaseId===y&&(l=void 0)},teamfile:r2(t.cwd,m.teamfile),alias:m.alias,prompt:m.prompt,permissionMode:f,idleTimeoutMs:m.idleTimeoutMs,messageType:m.messageType,env:g.env,io:g});return u(),{status:h.status,reply:"replyText"in h?h.replyText:"",error:"message"in h?h.message:null,messageId:"messageId"in h?h.messageId:null,teamChatLogId:h.teamChatLogId}}catch(d){return n(G(d),r)}finally{try{u()}catch{}o(),c||(a(),s||i?.close())}}var Ux=M(()=>{"use strict";id();en();Qt();Yt();Kh();Un();mt()});import{performance as Hx}from"node:perf_hooks";import{randomUUID as s2}from"node:crypto";import{resolve as i2,join as o2}from"node:path";function Yh(t){let e=Bx.get(t);if(e)return e;let n,r,s=new Promise((i,o)=>{n=i,r=o});Bx.set(t,s);try{Promise.resolve(t.close()).then(n,r)}catch(i){r(i)}return s}function ld(t){let e=new Date(t.clock());return[e.getHours(),e.getMinutes(),e.getSeconds()].map(n=>String(n).padStart(2,"0")).join(":")}function qx(t,e){let n=lt(t),r=t.clock(),s=r,i=setInterval(()=>{try{t.clock()-s>=5e3&&n.stderr.write(e(Math.round((t.clock()-r)/1e3)))}catch{}},5e3);return i.unref(),{poke(){s=t.clock()},stop(){clearInterval(i)}}}async function a2(t,e){let n=e.provider.trim().toLowerCase(),r=jr(t.env.HOME?o2(t.env.HOME,".lmctl/config.toml"):void 0);return Kc(n,r,Uu())}function l2(t,e){let n=nd(t,e);if(n.ok)return rd(n.identity);if(n.reason==="unset")return null;throw Error(td("batch",t,e))}function Xx(t,e,n=!1){let r=sn(t.ctx),s=n?r.db.pragma("busy_timeout",{simple:!0}):void 0;n&&r.db.pragma("busy_timeout=0");try{e(r)}finally{n&&r.db.pragma("busy_timeout="+s)}}function cd(t,e,n=!1){t.rootId===null||t.rootFinished||(Xx(t,r=>{if(!r.finishTrackedInvocation(t.rootId,e)){let i=r.getTrackedInvocation(t.rootId);if(!i||i.status==="running")throw Error("Batch invocation could not be finalized")}},n),t.rootFinished=!0)}function Qh(t,e=!1){t.timer?.stop(),t.timer=void 0;for(let n of["lease","turnLease"]){let r=t[n];r&&(Xx(t,s=>{if(!s.releaseAgentInflight(r.row,r.leaseId))throw Error("Batch lease release refused: ownership changed")},e),t[n]=void 0)}}async function Da(t,e,n){if(t.closing)return t.closing;let r,s;t.closing=new Promise((a,l)=>{r=a,s=l});let i=Hx.now();t.closed=!0,t.controller.abort();let o=async a=>{let l,c=5e3-(Hx.now()-i);if(c<=0)throw Error("Batch cleanup exceeded its 5 second total deadline");try{await Promise.race([a,new Promise((u,d)=>{l=setTimeout(()=>d(Error("Batch cleanup exceeded its 5 second total deadline")),c)})])}finally{clearTimeout(l)}};return(async()=>{let a=[];try{t.bundle&&await o(Yh(t.bundle))}catch(l){a.push(G(l))}finally{t.bundle=void 0}if(t.turnDone)try{await o(t.turnDone)}catch(l){a.push(G(l))}if(!t.terminal){try{Qh(t,!0)}catch(c){a.push(G(c))}let l=(t.failed||a.length)&&e==="done"?"error":e;try{cd(t,{...t.rootFinish,status:l,exit_code:l==="done"?0:1,error:l==="done"?void 0:n??t.failed??(a.length?a.join(`
2368
+ `),null}}function Ms(t,e,n,r,s){t!==null||e===null||X({event:"chat_attempt_error",reason:s,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,origin:e.origin,error_detail:r,message_preview:sd(n)})}function Pa(t){return t.length<=Nx?{text:t,truncated:!1}:{text:t.slice(0,Nx),truncated:!0}}var Nx,Px,id=M(()=>{"use strict";Uo();lf();an();Yt();En();wn();qu();Ts();Qu();ke();zn();Xn();ed();Tx();kx();La();Xh();Gh();Vh();hc();Nx=256*1024,Px=3e4});function ad(t,e){let n=!1,r=()=>{if(n)return;n=!0;let s=od.get(t);s||(s={pending:0,timeout:t.db.pragma("busy_timeout",{simple:!0})},od.set(t,s)),s.pending++,t.db.pragma("busy_timeout=0")};return e.addEventListener("abort",r,{once:!0}),e.aborted&&r(),()=>{if(e.removeEventListener("abort",r),!n)return;let s=od.get(t);if(--s.pending===0){od.delete(t);try{t.db.pragma("busy_timeout="+s.timeout)}catch{}}}}var od,Kh=M(()=>{"use strict";od=new WeakMap});import{resolve as i2}from"node:path";async function jx(t,e){let n=(d,m)=>({status:"error",error:d,code:m,reply:"",messageId:null,teamChatLogId:null}),r="invalid_argument",s,i,o=()=>{},a=()=>{},l,c,u=()=>{if(c)throw c;if(!l||!i)return;let d=l,m=i.db.pragma("busy_timeout",{simple:!0});try{if(i.db.pragma("busy_timeout=0"),!i.releaseAgentInflight(d.row,d.leaseId)){let p=i.getAgentInflight(d.row.receiver_teamfile,d.row.receiver_alias);if(p&&p.active_count>0)throw Error("Prompt lease release was not acknowledged")}l=void 0}catch(p){throw c=p instanceof Error?p:Error(G(p)),c}finally{i.db.pragma("busy_timeout="+m)}};try{let d=me(t);if(d)return n(d.error,d.code);if(s=t.dal,!e||typeof e!="object"||Array.isArray(e))return n("promptMember: request must be a map","invalid_argument");let m={...e},p=dt.find(y=>y.name==="promptMember").params.find(y=>y.name==="request").keys;if(Object.keys(m).some(y=>!p.some(b=>b.name===y)))return n("promptMember: unknown request key","invalid_argument");if(typeof m.teamfile!="string"||typeof m.alias!="string"||typeof m.prompt!="string")return n("promptMember: teamfile, alias and prompt must be strings","invalid_argument");let f=m.permissionMode??"yolo";if(f!=="yolo"&&f!=="plan")return n("promptMember: permissionMode must be yolo or plan","invalid_argument");if(m.idleTimeoutMs!=null&&(typeof m.idleTimeoutMs!="number"||!Number.isFinite(m.idleTimeoutMs)||m.idleTimeoutMs<0))return n("promptMember: idleTimeoutMs must be finite and nonnegative","invalid_argument");if(m.messageType!==void 0&&typeof m.messageType!="string")return n("promptMember: messageType must be a string","invalid_argument");r="provider";let g=lt(t);Object.defineProperty(g,"dal",{enumerable:!0,get(){return i||(i=s??ot({path:t.dbPath}),o=ad(i,t.signal)),i}}),a=_n(t,{async close(){u()},finalizeSync(){u()}});let h=await Wi({signal:t.signal,onInflightAcquired:y=>{l=y,t.closed&&u()},onInflightReleased:y=>{l?.leaseId===y&&(l=void 0)},teamfile:i2(t.cwd,m.teamfile),alias:m.alias,prompt:m.prompt,permissionMode:f,idleTimeoutMs:m.idleTimeoutMs,messageType:m.messageType,env:g.env,io:g});return u(),{status:h.status,reply:"replyText"in h?h.replyText:"",error:"message"in h?h.message:null,messageId:"messageId"in h?h.messageId:null,teamChatLogId:h.teamChatLogId}}catch(d){return n(G(d),r)}finally{try{u()}catch{}o(),c||(a(),s||i?.close())}}var Ux=M(()=>{"use strict";id();en();Qt();Yt();Kh();Un();mt()});import{performance as Hx}from"node:perf_hooks";import{randomUUID as o2}from"node:crypto";import{resolve as a2,join as l2}from"node:path";function Yh(t){let e=Bx.get(t);if(e)return e;let n,r,s=new Promise((i,o)=>{n=i,r=o});Bx.set(t,s);try{Promise.resolve(t.close()).then(n,r)}catch(i){r(i)}return s}function ld(t){let e=new Date(t.clock());return[e.getHours(),e.getMinutes(),e.getSeconds()].map(n=>String(n).padStart(2,"0")).join(":")}function qx(t,e){let n=lt(t),r=t.clock(),s=r,i=setInterval(()=>{try{t.clock()-s>=5e3&&n.stderr.write(e(Math.round((t.clock()-r)/1e3)))}catch{}},5e3);return i.unref(),{poke(){s=t.clock()},stop(){clearInterval(i)}}}async function c2(t,e){let n=e.provider.trim().toLowerCase(),r=jr(t.env.HOME?l2(t.env.HOME,".lmctl/config.toml"):void 0);return Kc(n,r,Uu())}function u2(t,e){let n=nd(t,e);if(n.ok)return rd(n.identity);if(n.reason==="unset")return null;throw Error(td("batch",t,e))}function Xx(t,e,n=!1){let r=sn(t.ctx),s=n?r.db.pragma("busy_timeout",{simple:!0}):void 0;n&&r.db.pragma("busy_timeout=0");try{e(r)}finally{n&&r.db.pragma("busy_timeout="+s)}}function cd(t,e,n=!1){t.rootId===null||t.rootFinished||(Xx(t,r=>{if(!r.finishTrackedInvocation(t.rootId,e)){let i=r.getTrackedInvocation(t.rootId);if(!i||i.status==="running")throw Error("Batch invocation could not be finalized")}},n),t.rootFinished=!0)}function Qh(t,e=!1){t.timer?.stop(),t.timer=void 0;for(let n of["lease","turnLease"]){let r=t[n];r&&(Xx(t,s=>{if(!s.releaseAgentInflight(r.row,r.leaseId))throw Error("Batch lease release refused: ownership changed")},e),t[n]=void 0)}}async function Da(t,e,n){if(t.closing)return t.closing;let r,s;t.closing=new Promise((a,l)=>{r=a,s=l});let i=Hx.now();t.closed=!0,t.controller.abort();let o=async a=>{let l,c=5e3-(Hx.now()-i);if(c<=0)throw Error("Batch cleanup exceeded its 5 second total deadline");try{await Promise.race([a,new Promise((u,d)=>{l=setTimeout(()=>d(Error("Batch cleanup exceeded its 5 second total deadline")),c)})])}finally{clearTimeout(l)}};return(async()=>{let a=[];try{t.bundle&&await o(Yh(t.bundle))}catch(l){a.push(G(l))}finally{t.bundle=void 0}if(t.turnDone)try{await o(t.turnDone)}catch(l){a.push(G(l))}if(!t.terminal){try{Qh(t,!0)}catch(c){a.push(G(c))}let l=(t.failed||a.length)&&e==="done"?"error":e;try{cd(t,{...t.rootFinish,status:l,exit_code:l==="done"?0:1,error:l==="done"?void 0:n??t.failed??(a.length?a.join(`
2369
2369
  `):t.rootFinish.error),result_summary:t.completed+"/"+t.request.promptCount+" prompts completed"},!0)}catch(c){a.push(G(c))}}if(t.criticalFailure&&a.push(t.criticalFailure),a.length)throw Error(a.join(`
2370
2370
  `));t.untrack()})().then(r,s),t.closing}function Gx(t,e,n=!0){t.closed=!0,t.terminal=!0;let r=[];try{Qh(t,!0)}catch(s){r.push(G(s))}try{cd(t,{status:n?"cancelled":"error",...n?{signal:e}:{},error:n?"batch interrupted by "+e:"batch cleanup deadline exceeded",result_summary:t.completed+"/"+t.request.promptCount+" prompts completed"},!0)}catch(s){r.push(G(s))}if(t.controller.abort(e),t.bundle&&Yh(t.bundle).catch(()=>{}),t.bundle=void 0,r.length)throw t.criticalFailure=r.join(`
2371
- `),Error(t.criticalFailure);t.untrack()}function Jx(t,e){try{let n=ud(t,e);return n?(Gx(n,"SIGTERM",!1),fe({})):B("invalid_argument","Invalid or unmanaged batch handle")}catch(n){return B("provider",G(n))}}function ud(t,e){if(!e||typeof e!="object")return;let n=Wx.get(e);return n?.ctx===t?n:void 0}function Vx(t,e){let n=ud(t,e);return!n||!n.member?B("invalid_argument","Invalid or unmanaged batch handle"):fe({id:n.ref.id,teamfile:n.request.teamfile,alias:n.request.alias,batchfile:n.request.label,member:{...n.member},promptCount:n.request.promptCount,useBundle:!!n.bundleActive,rootId:n.rootId,rootFinish:{...n.rootFinish},closed:n.closed,env:{...n.env}})}async function zx(t,e){let n;try{let r=me(t);if(r)return r;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Batch request must be a map");let s={...e};if(typeof s.teamfile!="string"||typeof s.alias!="string"||typeof s.label!="string"||!Number.isFinite(s.promptCount)||s.promptCount<0)return B("invalid_argument","Batch requires teamfile, alias, label and nonnegative promptCount");if(s.permissionMode!==void 0&&s.permissionMode!=="yolo"&&s.permissionMode!=="plan")return B("invalid_argument","permissionMode must be yolo or plan");if(s.idleTimeoutMs!==void 0&&(!Number.isFinite(s.idleTimeoutMs)||s.idleTimeoutMs<0))return B("invalid_argument","idleTimeoutMs must be nonnegative");let i;try{i=xt(i2(t.cwd,s.teamfile),s.alias,t.dal)}catch(m){let p;try{p=m instanceof Ne?m.kind:void 0}catch{}return B(p??or(m),G(m))}let o=Object.freeze({id:`batch-${t.clock()}-${s2().slice(0,6)}`});n={ctx:t,controller:new AbortController,ref:o,request:s,rootId:null,completed:0,rootFinish:{status:"error",error:"batch exited without a terminal outcome"},closed:!1,inFlight:!1,env:{...t.env,LMCTL_DB:t.dbPath},untrack(){}};let a=n;Wx.set(o,a),a.untrack=_n(t,{close:()=>Da(a,"error","script execution interrupted or terminated without orderly close"),finalizeSync:m=>Gx(a,m)}),a.member=i;let l=sn(t),c=lt(t),u=a.member,d=!s.legacy&&s.promptCount>1&&await a2(t,u);if(t.closed)throw Error("Context is closed");try{a.rootId=l.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:u.teamfile,from_identity:`${u.teamfile}:batch`,target_teamfile:u.teamfile,target_alias:u.alias,root_teamfile:u.teamfile,cwd:u.sessiondir,command:`lmctl batch ${u.teamfile} ${u.alias} ${s.label}`,holder_pid:t.pid??null,launch_source:"exec",parent_invocation_id:a.env.LMCTL_INVOCATION_ID?Number(a.env.LMCTL_INVOCATION_ID):null,meta:JSON.stringify({batchfile:s.label,prompt_count:s.promptCount,provider:u.provider,sessionid:u.sessionid,...u.model!==void 0?{model:u.model}:{}})}).id}catch(m){c.stderr.write(`warning: failed to start batch root invocation: ${G(m)}
2371
+ `),Error(t.criticalFailure);t.untrack()}function Jx(t,e){try{let n=ud(t,e);return n?(Gx(n,"SIGTERM",!1),fe({})):B("invalid_argument","Invalid or unmanaged batch handle")}catch(n){return B("provider",G(n))}}function ud(t,e){if(!e||typeof e!="object")return;let n=Wx.get(e);return n?.ctx===t?n:void 0}function Vx(t,e){let n=ud(t,e);return!n||!n.member?B("invalid_argument","Invalid or unmanaged batch handle"):fe({id:n.ref.id,teamfile:n.request.teamfile,alias:n.request.alias,batchfile:n.request.label,member:{...n.member},promptCount:n.request.promptCount,useBundle:!!n.bundleActive,rootId:n.rootId,rootFinish:{...n.rootFinish},closed:n.closed,env:{...n.env}})}async function zx(t,e){let n;try{let r=me(t);if(r)return r;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Batch request must be a map");let s={...e};if(typeof s.teamfile!="string"||typeof s.alias!="string"||typeof s.label!="string"||!Number.isFinite(s.promptCount)||s.promptCount<0)return B("invalid_argument","Batch requires teamfile, alias, label and nonnegative promptCount");if(s.permissionMode!==void 0&&s.permissionMode!=="yolo"&&s.permissionMode!=="plan")return B("invalid_argument","permissionMode must be yolo or plan");if(s.idleTimeoutMs!==void 0&&(!Number.isFinite(s.idleTimeoutMs)||s.idleTimeoutMs<0))return B("invalid_argument","idleTimeoutMs must be nonnegative");let i;try{i=xt(a2(t.cwd,s.teamfile),s.alias,t.dal)}catch(m){let p;try{p=m instanceof Ne?m.kind:void 0}catch{}return B(p??or(m),G(m))}let o=Object.freeze({id:`batch-${t.clock()}-${o2().slice(0,6)}`});n={ctx:t,controller:new AbortController,ref:o,request:s,rootId:null,completed:0,rootFinish:{status:"error",error:"batch exited without a terminal outcome"},closed:!1,inFlight:!1,env:{...t.env,LMCTL_DB:t.dbPath},untrack(){}};let a=n;Wx.set(o,a),a.untrack=_n(t,{close:()=>Da(a,"error","script execution interrupted or terminated without orderly close"),finalizeSync:m=>Gx(a,m)}),a.member=i;let l=sn(t),c=lt(t),u=a.member,d=!s.legacy&&s.promptCount>1&&await c2(t,u);if(t.closed)throw Error("Context is closed");try{a.rootId=l.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:u.teamfile,from_identity:`${u.teamfile}:batch`,target_teamfile:u.teamfile,target_alias:u.alias,root_teamfile:u.teamfile,cwd:u.sessiondir,command:`lmctl batch ${u.teamfile} ${u.alias} ${s.label}`,holder_pid:t.pid??null,launch_source:"exec",parent_invocation_id:a.env.LMCTL_INVOCATION_ID?Number(a.env.LMCTL_INVOCATION_ID):null,meta:JSON.stringify({batchfile:s.label,prompt_count:s.promptCount,provider:u.provider,sessionid:u.sessionid,...u.model!==void 0?{model:u.model}:{}})}).id}catch(m){c.stderr.write(`warning: failed to start batch root invocation: ${G(m)}
2372
2372
  `)}if(a.rootId!==null&&(a.env.LMCTL_INVOCATION_ID=String(a.rootId)),c.stderr.write(`batch ${ld(t)}: starting ${s.promptCount} prompt${s.promptCount===1?"":"s"} -> ${u.alias} (teamfile=${s.teamfile} input=${s.label})
2373
- `),d){Zu(l,u.teamfile,u.alias);let m=di(l,u.teamfile,u.alias);if(m.busy){let b=m.reason==="in-flight"?`${u.alias} is servicing ${m.inFlight.sender_alias} (${m.inFlight.sender_teamfile}) since ${m.inFlight.started_at} \u2014 wait and retry`:m.source==="terminal-lock"?Ls(m.terminalLock):`${u.alias} is busy (interactive terminal); wait and retry`;return cd(a,{status:"busy",exit_code:1,error:b,result_summary:"0 prompts completed"}),await Da(a,"error"),{status:"busy",error:`cannot start bundle: ${b}`}}let p=l2(a.env,l),f=xr(l,{receiver_teamfile:u.teamfile,receiver_alias:u.alias,sender_teamfile:p?.teamfile??u.teamfile,sender_alias:p?.alias??"operator",ttlMs:Vr(a.env)});if(!f.acquired){let b=`${u.alias} is servicing ${f.current.sender_alias} (${f.current.sender_teamfile}) since ${f.current.started_at} \u2014 wait and retry`;return cd(a,{status:"busy",exit_code:1,error:b,result_summary:"0 prompts completed"}),await Da(a,"error"),{status:"busy",error:`cannot start bundle: ${b}`}}a.lease={row:f.lease,leaseId:f.leaseId};let g=a.lease,h=ui(b=>l.heartbeatAgentInflight(g.row,g.leaseId,b),{intervalMs:mc(a.env)});a.timer={stop:()=>clearInterval(h)};let y=qx(t,b=>`batch ${ld(t)}: opening provider session (${b}s elapsed)
2373
+ `),d){Zu(l,u.teamfile,u.alias);let m=di(l,u.teamfile,u.alias);if(m.busy){let b=m.reason==="in-flight"?`${u.alias} is servicing ${m.inFlight.sender_alias} (${m.inFlight.sender_teamfile}) since ${m.inFlight.started_at} \u2014 wait and retry`:m.source==="terminal-lock"?Ls(m.terminalLock):`${u.alias} is busy (interactive terminal); wait and retry`;return cd(a,{status:"busy",exit_code:1,error:b,result_summary:"0 prompts completed"}),await Da(a,"error"),{status:"busy",error:`cannot start bundle: ${b}`}}let p=u2(a.env,l),f=xr(l,{receiver_teamfile:u.teamfile,receiver_alias:u.alias,sender_teamfile:p?.teamfile??u.teamfile,sender_alias:p?.alias??"operator",ttlMs:Vr(a.env)});if(!f.acquired){let b=`${u.alias} is servicing ${f.current.sender_alias} (${f.current.sender_teamfile}) since ${f.current.started_at} \u2014 wait and retry`;return cd(a,{status:"busy",exit_code:1,error:b,result_summary:"0 prompts completed"}),await Da(a,"error"),{status:"busy",error:`cannot start bundle: ${b}`}}a.lease={row:f.lease,leaseId:f.leaseId};let g=a.lease,h=ui(b=>l.heartbeatAgentInflight(g.row,g.leaseId,b),{intervalMs:mc(a.env)});a.timer={stop:()=>clearInterval(h)};let y=qx(t,b=>`batch ${ld(t)}: opening provider session (${b}s elapsed)
2374
2374
  `);try{let b={...a.env},_=l.getRootTeam(u.teamfile)?.name;_&&(b.LMBEE_TEAM_NAME=_);let v=dh({provider:u.provider,sessionId:u.sessionid,cwd:u.sessiondir,env:b,model:u.model,effort:u.effort,alias:u.alias,isLead:u.isLead,permissionMode:s.permissionMode??"yolo",holdOpen:Jh(c,{teamfile:u.teamfile,alias:u.alias},b)});v.then(S=>{a.closed&&Yh(S).catch(()=>{})}).catch(()=>{});let E,R=new Promise((S,I)=>{E=()=>I(Error("Context is closed")),t.signal.addEventListener("abort",E,{once:!0}),t.signal.aborted&&E()});try{a.bundle=await Promise.race([v,R])}finally{t.signal.removeEventListener("abort",E)}}catch(b){if(t.closed)throw b;X({event:"persistent_session_open_failed",provider:u.provider,session_id:u.sessionid,error_message:G(b)}),Qh(a)}finally{y.stop()}}if(t.closed)throw Error("Context is closed");return a.bundleActive=a.bundle!==void 0,fe({batch:o})}catch(r){if(n){n.rootFinish={...n.rootFinish,result_summary:"0 prompts completed"};try{await Da(n,"error",G(r))}catch{}}return B(t?.closed?"cancelled":"provider",G(r))}}async function Kx(t,e,n,r,s){let i=(m,p="invalid_argument")=>({status:"error",error:m,code:p,reply:"",messageId:null,teamChatLogId:null}),o=me(t);if(o)return i(o.error,o.code);let a=ud(t,e);if(!a||a.closed||!a.member)return i("Invalid or closed batch handle");if(typeof n!="string"||!Number.isFinite(r)||!Number.isFinite(s))return i("prompt, index and total must be valid");if(a.inFlight)return{status:"busy",error:"Batch already has an active turn",reply:"",messageId:null,teamChatLogId:null};a.inFlight=!0,a.turnDone=new Promise(m=>{a.turnFinished=m});let l=t.dal,c,u=()=>{},d;try{c=l??ot({path:t.dbPath});let m={...lt(t),dal:c},p=AbortSignal.any([t.signal,a.controller.signal]);u=ad(c,p),m.stderr.write(`batch ${ld(t)}: prompt ${r}/${s} -> ${a.member.alias}
2375
2375
  `),d=qx(t,h=>`batch ${ld(t)}: prompt ${r}/${s} still running (${h}s elapsed)
2376
2376
  `);let f=await Wi({signal:p,onInflightAcquired:h=>{a.turnLease=h},onInflightReleased:h=>{a.turnLease?.leaseId===h&&(a.turnLease=void 0)},teamfile:a.member.teamfile,alias:a.member.alias,prompt:n,expectedSession:{provider:a.member.provider,sessionid:a.member.sessionid},permissionMode:a.request.permissionMode??"yolo",idleTimeoutMs:a.request.idleTimeoutMs,env:{...a.env},messageType:"batch",heldLease:a.lease,bundleSession:a.bundle,io:m,onEvent:h=>{d?.poke(),h.kind==="warning"&&m.stderr.write(h.message)}}),g="replyText"in f?f.replyText.replace(/\n+$/u,""):"";if(f.status!=="ok"){let h=f.status==="stalled"?"provider stalled":f.status==="empty"?"provider returned no content and no observed activity for this turn":f.message,y=`batch: stopped at prompt ${r}/${s} (${r-1} completed): ${h}; later prompts were not sent`;return a.failed=y,a.rootFinish={status:f.status==="busy"?"busy":"error",exit_code:1,error:y,result_summary:`${r-1}/${s} prompts completed`},m.stderr.write(`error: ${y}
2377
2377
  `),{status:f.status,error:y,reply:g,messageId:"messageId"in f?f.messageId:null,teamChatLogId:f.teamChatLogId}}return a.completed++,{status:"ok",error:null,reply:g,messageId:f.messageId,teamChatLogId:f.teamChatLogId}}catch(m){let p=`batch: stopped at prompt ${r}/${s} (${r-1} completed): ${G(m)}; later prompts were not sent`;a.failed=p,a.rootFinish={status:"error",exit_code:1,error:p,result_summary:`${r-1}/${s} prompts completed`};try{lt(t).stderr.write(`error: ${p}
2378
- `)}catch{}return i(p,"provider")}finally{d?.stop(),a.inFlight=!1,a.turnFinished?.(),a.turnDone=void 0,u(),l||c?.close()}}async function Yx(t,e,n){try{let r=ud(t,e);return r?!n||!["done","error","cancelled"].includes(n.status)?B("invalid_argument","Invalid batch close status"):(await Da(r,n.status,n.error),fe({})):B("invalid_argument","Invalid or unmanaged batch handle")}catch(r){return B("provider",G(r))}}var Bx,Wx,Qx=M(()=>{"use strict";Kh();Yt();Xn();ed();sr();ke();Ri();id();En();Vh();La();Qu();Xh();Gh();Qt();en();mt();Bx=new WeakMap;Wx=new WeakMap});import{readdirSync as c2}from"node:fs";import{join as Zx,resolve as u2}from"node:path";import{randomUUID as d2}from"node:crypto";function ey(t,e){let n=e&&typeof e=="object"?eA.get(e):void 0;return n?.ctx===t?n:void 0}function ty(t,e,n,r){let s=new Set(e.listRootTeams().map(a=>a.teamfile_path));for(let a of new Set([t.cwd,r]))try{for(let l of c2(a,{withFileTypes:!0}))l.isFile()&&/\.(?:lmctl|lmc)$/i.test(l.name)&&s.add(Zx(a,l.name))}catch(l){if(l.code!=="ENOENT")throw l}let i=new Map;for(let a of s){let l;try{l=bi(a,e)}catch(c){if(/missing on disk|teamfile not found/.test(G(c)))continue;throw c}if(l.parseErrors.length)throw Error("Cannot resolve native ownership: "+l.parseErrors.join("; "));for(let c of l.members){if(c.teamfile===void 0&&(c.provider!==n.provider||c.session!==n.sessionid))continue;let u=xt(a,c.alias,e);u.provider===n.provider&&u.sessionid===n.sessionid&&i.set(JSON.stringify([It(u.teamfile,e),u.alias]),u)}}if(i.size>1)throw Error("Native session owner is ambiguous");let o=i.values().next().value;return o?{member:{...o,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}},known:!0}:{member:{teamfile:"native:"+n.provider+":"+n.sessionid,alias:n.sessionid,provider:n.provider,sessionid:n.sessionid,sessiondir:r,isLead:!1,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}},known:!1}}function Zh(t,e){return t.alias+" is servicing "+e.sender_alias+" ("+e.sender_teamfile+") since "+e.started_at+" \u2014 wait and retry"}function tA(t,e=!1){if(t.released)return;let n=e?t.dal.db.pragma("busy_timeout",{simple:!0}):void 0;e&&t.dal.db.pragma("busy_timeout=0");try{if(!t.dal.releaseAgentInflight(t.lease.row,t.lease.leaseId))throw Error("Native session lease release refused: ownership changed");t.released=!0}finally{e&&t.dal.db.pragma("busy_timeout="+n)}}async function dd(t){return t.closing||(t.closed=!0,t.serviceHosted||t.controller.abort(),t.closing=(async()=>{if(t.serviceHosted&&t.opening)try{t.conversation??=await t.opening}catch{}t.serviceHosted&&await t.active,await t.conversation?.close(),await t.active,t.stopHeartbeat(),tA(t,!0),t.untrack()})()),t.closing}function nA(t){if(t.serviceHosted)return t.controller.abort(),dd(t);t.closed=!0,t.stopHeartbeat(),t.controller.abort(),t.conversation&&t.conversation.close().catch(()=>{}),tA(t,!0),t.untrack()}async function qi(t,e,n={},r,s=!1){let i;try{let o=me(t);if(o)return o;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Native session member must be a map");for(let N of["provider","sessionid"])if(typeof e[N]!="string"||!e[N].trim())return B("invalid_argument","Native session requires provider and sessionid");for(let N of["sessiondir","model","effort"])if(e[N]!==void 0&&(typeof e[N]!="string"||!e[N].trim()))return B("invalid_argument","Native session "+N+" must be a nonempty string");if(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).some(N=>!["permissionMode","idleTimeoutMs"].includes(N)))return B("invalid_argument","Native session options must contain permissionMode or idleTimeoutMs");if(n.permissionMode!==void 0&&!["yolo","plan"].includes(n.permissionMode))return B("invalid_argument","permissionMode must be yolo or plan");if(n.idleTimeoutMs!==void 0&&(!Number.isFinite(n.idleTimeoutMs)||n.idleTimeoutMs<0))return B("invalid_argument","idleTimeoutMs must be finite and nonnegative");let a=sn(t),l=u2(t.cwd,e.sessiondir??t.cwd),c;try{c=ty(t,a,e,l)}catch(N){return B("invalid_argument",G(N))}let u=dn(t);if(!await u.getSession(e.sessionid,e.provider))return B("not_found","Native session was not found");if(t.closed)return B("cancelled","Context is closed");let m=c.member,p=di(a,m.teamfile,m.alias);if(p.busy)return{status:"busy",error:p.reason==="in-flight"?Zh(m,p.inFlight):p.source==="terminal-lock"?Ls(p.terminalLock):m.alias+" is busy (interactive terminal); wait and retry"};let f={receiver_teamfile:m.teamfile,receiver_alias:m.alias,sender_teamfile:m.teamfile,sender_alias:"operator",started_at:new Date().toISOString()},g=a.getAgentInflight(m.teamfile,m.alias),h=g!==null&&(g.native_provider!==null&&g.native_provider!==void 0||g.native_session_id!==null&&g.native_session_id!==void 0);if(h&&!r)return{status:"busy",error:Zh(m,g)};let y=r&&h?a.tryAcquireNativeHolder(f,r):void 0,b=y?y.acquired?{acquired:!0,lease:y.current,leaseId:y.lease_id}:{acquired:!1,current:y.current}:xr(a,{...f,ttlMs:Ar(t.env),...r?{nativeHolder:r}:{}});if(!b.acquired)return{status:"busy",error:Zh(m,b.current)};let _=Object.freeze({id:"native-session-"+d2()});i={ctx:t,dal:a,ref:_,member:m,ownerKnown:c.known,options:{...n},lease:{row:b.lease,leaseId:b.leaseId},controller:new AbortController,serviceHosted:s,closed:!1,released:!1,stopHeartbeat(){},untrack(){}};let v=i;v.untrack=_n(t,{close:()=>dd(v),finalizeSync:()=>nA(v)});let E=ui(N=>a.heartbeatAgentInflight(v.lease.row,v.lease.leaseId,N),{intervalMs:mc(t.env)});v.stopHeartbeat=()=>clearInterval(E);let R=mh({provider:e.provider,sessionId:e.sessionid,cwd:m.sessiondir,env:{...t.env},model:m.model,effort:m.effort,permissionMode:n.permissionMode??"yolo",timeoutMs:s?0:n.idleTimeoutMs??0,serviceHosted:s,execution:s?"persistent":"auto",requireResume:!0,registry:u,userConfig:jr(t.env.HOME?Zx(t.env.HOME,".lmctl/config.toml"):void 0)});v.opening=R,R.then(N=>{v.closed&&N.close().catch(()=>{})}).catch(()=>{});let S,I=new Promise((N,O)=>{S=()=>O(Error("Context is closed")),t.signal.addEventListener("abort",S,{once:!0}),t.signal.aborted&&S()});try{v.conversation=await Promise.race([R,I])}finally{t.signal.removeEventListener("abort",S)}if(t.closed||v.closed)throw Error("Context is closed");return eA.set(_,v),fe({session:_})}catch(o){if(i)try{await dd(i)}catch(a){return B("provider",G(o)+"; "+G(a))}return B(t?.closed?"cancelled":"provider",G(o))}}async function Xi(t,e,n,r=void 0){let s=(l,c="invalid_argument")=>({status:"error",reply:"",error:l,code:c,messageId:null,teamChatLogId:null}),i=me(t);if(i)return s(i.error,i.code);let o=ey(t,e);if(!o||o.closed||!o.conversation)return s("Invalid or closed native session reference");if(typeof n!="string")return s("Native session prompt must be a string");if(o.active)return{status:"busy",reply:"",error:"Batch already has an active turn",messageId:null,teamChatLogId:null};let a;o.active=new Promise(l=>{a=l});try{if(o.ownerKnown){let c=xt(o.member.teamfile,o.member.alias,o.dal);if(c.provider!==o.member.provider||c.sessionid!==o.member.sessionid)throw Error("Session binding changed; native turn cancelled")}let l=await Wi({signal:AbortSignal.any([t.signal,o.controller.signal]),teamfile:o.member.teamfile,alias:o.member.alias,resolvedNativeTarget:o.member,prompt:n,expectedSession:{provider:o.member.provider,sessionid:o.member.sessionid},permissionMode:o.options.permissionMode??"yolo",idleTimeoutMs:o.serviceHosted?0:o.options.idleTimeoutMs,heldLease:o.lease,conversation:o.conversation,registry:dn(t),onAccepted:r?.onAccepted,env:{...t.env,...r?.attribution},io:{...lt(t),dal:o.dal}});return{status:l.status,reply:"replyText"in l?l.replyText:"",error:l.status==="ok"?null:"message"in l?l.message:"provider "+l.status,messageId:"messageId"in l?l.messageId:null,teamChatLogId:l.teamChatLogId}}catch(l){return s(G(l),"provider")}finally{a(),o.active=void 0}}async function Ps(t,e){try{let n=ey(t,e);return n?(await dd(n),fe({})):B("invalid_argument","Invalid native session reference")}catch(n){return B("provider",G(n))}}function rA(t,e){try{let n=ey(t,e);if(!n)return B("invalid_argument","Invalid native session reference");let r=nA(n);return r&&r.catch(s=>t.onWarning(G(s))),fe({})}catch(n){return B("provider",G(n))}}var eA,md=M(()=>{"use strict";sr();Ri();Aa();Qt();en();En();Ts();Xn();La();mt();id();eA=new WeakMap});import{randomUUID as m2}from"node:crypto";import{join as p2,resolve as sA}from"node:path";function fd(t){if(!t||!["turn","close"].includes(t.operation))throw Error("Expected a native turn or close operation");let{member:e,options:n={}}=t;if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(r=>!["provider","sessionid","sessiondir","model","effort"].includes(r)))throw Error("Native session member must be a map");for(let r of["provider","sessionid"])if(typeof e[r]!="string"||!e[r].trim())throw Error("Native session requires provider and sessionid");for(let r of["sessiondir","model","effort"])if(e[r]!==void 0&&(typeof e[r]!="string"||!e[r].trim()))throw Error("Invalid native session "+r);if(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).some(r=>!["permissionMode","idleTimeoutMs"].includes(r)))throw Error("Unknown native session option");if(n.permissionMode!==void 0&&!["yolo","plan"].includes(n.permissionMode))throw Error("permissionMode must be yolo or plan");if(n.idleTimeoutMs!==void 0&&(!Number.isFinite(n.idleTimeoutMs)||n.idleTimeoutMs<0||n.idleTimeoutMs>2147483647))throw Error("idleTimeoutMs must be a nonnegative retention interval");if(t.operation==="turn"&&typeof t.prompt!="string")throw Error("Native session prompt must be a string");if(t.attribution!==void 0&&(!t.attribution||typeof t.attribution!="object"||Array.isArray(t.attribution)||Object.entries(t.attribution).some(([r,s])=>!["LMCTL_SELF_SESSIONID","LMCTL_INVOCATION_ID"].includes(r)||s!==void 0&&typeof s!="string")))throw Error("Invalid native request attribution")}var f2,pd,ny=M(()=>{"use strict";Qt();md();Aa();Ri();$r();f2={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t)};pd=class{entries=new Map;service_epoch=m2();nextEpoch=0;stopping=!1;drained;clock;idleMs;context;ownsContext;constructor(e){this.context=e.context,this.clock=e.clock??f2,this.idleMs=e.idleMs??3e5,this.ownsContext=e.ownsContext??!1}fields(e,n=null){return{outcome:"not_sent",service_epoch:this.service_epoch,connection_epoch:e?.epoch??null,connection_state:n}}async request(e){let n=(i,o,a="error",l)=>({...this.fields(l),status:a,code:i,reply:"",error:o,messageId:null,teamChatLogId:null});try{fd(e)}catch(i){return n("invalid_argument",String(i))}if(this.stopping)return n("closed","Native conversation service is shutting down");let r=JSON.stringify([e.member.provider,e.member.sessionid]),s=this.entries.get(r);if(s?.active||s?.closing)return n("busy","Native conversation has active or closing work","busy",s);if(e.operation==="close"){if(!s)return{...n("",""),status:"ok",code:void 0,error:null,outcome:"completed"};let i=this.fields(s);try{await this.closeEntry(r,s)}catch(o){return n("provider",String(o),"error",s)}return{...i,status:"ok",reply:"",error:null,messageId:null,teamChatLogId:null,outcome:"completed"}}try{let i=dn(this.context).getAdapter(e.member.provider),o=jr(this.context.env.HOME?p2(this.context.env.HOME,".lmctl/config.toml"):void 0);if(!i||!Yc(i,o))return n("provider","Provider is not qualified for service-hosted native resume");if(s){let l=e.member,c=e.options??{};if(l.sessiondir!==void 0&&sA(this.context.cwd,l.sessiondir)!==s.member.sessiondir||["model","effort"].some(u=>l[u]!==void 0&&l[u]!==s.member[u])||c.permissionMode!==void 0&&c.permissionMode!==s.options.permissionMode||c.idleTimeoutMs!==void 0&&c.idleTimeoutMs!==s.options.idleTimeoutMs)return n("invalid_argument","Native conversation configuration conflicts with retained connection","error",s)}let a=s?s.session?"reused":"reinitialized":"new";if(!s){let l=ty(this.context,sn(this.context),e.member,sA(this.context.cwd,e.member.sessiondir??this.context.cwd));s={member:{...e.member,sessiondir:l.member.sessiondir,model:l.member.model,effort:l.member.effort},options:{permissionMode:e.options?.permissionMode??"yolo",idleTimeoutMs:e.options?.idleTimeoutMs??this.idleMs},epoch:0,active:!1,phase:"opening"},this.entries.set(r,s)}return s.active=!0,this.cancelIdle(s),s.work=this.perform(r,s,e,a),s.work}catch(i){return n("invalid_argument",String(i),"error",s)}}async perform(e,n,r,s){try{if(!n.session){n.phase="opening",n.epoch=++this.nextEpoch;let o=n.member,a=await qi(this.context,o,n.options,{provider:o.provider,sessionId:o.sessionid,endpoint:null,phase:"starting",processIdentity:null,configJson:null},!0);if(a.status!=="ok")return this.entries.get(e)===n&&this.entries.delete(e),{...this.fields(n,s),status:a.status,code:"code"in a?a.code:"busy",reply:"",error:a.error,messageId:null,teamChatLogId:null};n.session=a.session}n.phase="active";let i=await Xi(this.context,n.session,r.prompt,{attribution:{LMCTL_SELF_SESSIONID:r.attribution?.LMCTL_SELF_SESSIONID,LMCTL_INVOCATION_ID:r.attribution?.LMCTL_INVOCATION_ID}});if(i.status==="error"){let o=await Ps(this.context,n.session);return o.status!=="ok"?(n.phase="closing",n.closing=Promise.reject(Error(o.error)),n.closing.catch(()=>{}),{...i,...this.fields(n,s),code:i.messageId?"outcome_unknown":i.code??"provider",outcome:i.messageId?"unknown":"not_sent",error:(i.error??"Provider turn failed")+"; cleanup: "+o.error}):(n.session=void 0,n.phase="disconnected",{...i,...this.fields(n,s),code:i.messageId?"outcome_unknown":i.code??"provider",outcome:i.messageId?"unknown":"not_sent"})}return{...i,...this.fields(n,s),outcome:"completed",...i.status!=="ok"?{code:i.status==="busy"?"busy":i.code??"provider"}:{},...i.status==="busy"?{outcome:"not_sent"}:{}}}catch(i){return{...this.fields(n,s),status:"error",code:"provider",reply:"",error:String(i),messageId:null,teamChatLogId:null}}finally{n.active=!1,n.closing||(n.phase=n.session?"ready":"disconnected",this.stopping||this.armIdle(e,n))}}cancelIdle(e){e.idle!==void 0&&(this.clock.clearTimeout(e.idle),e.idle=void 0)}armIdle(e,n){if(this.cancelIdle(n),this.entries.get(e)!==n||n.active||n.closing)return;let r=n.options.idleTimeoutMs??this.idleMs;r>0&&(n.idle=this.clock.setTimeout(()=>{this.closeEntry(e,n).catch(s=>this.context.onWarning("Native conversation idle close failed: "+String(s)))},r))}closeEntry(e,n){return n.closing||(this.cancelIdle(n),n.phase="closing",n.closing=(async()=>{if(n.active&&await n.work,n.session){let r=await Ps(this.context,n.session);if(r.status!=="ok")throw Error(r.error)}this.entries.get(e)===n&&this.entries.delete(e)})()),n.closing}shutdown(){return this.drained?this.drained:(this.stopping=!0,this.drained=Promise.allSettled([...this.entries].map(([e,n])=>this.closeEntry(e,n))).then(async e=>{let n=e.flatMap(r=>r.status==="rejected"?[r.reason]:[]);if(n.length)throw new AggregateError(n,"Native cleanup failed: "+n.map(String).join("; "));if(this.ownsContext){let r=await this.context.close();if(r.errors.length)throw Error(r.errors.join("; "))}}),this.drained)}cancel(){this.stopping=!0;for(let e of this.entries.values())this.cancelIdle(e);this.context.finalizeSync("SIGTERM")}}});import{request as g2}from"node:http";import{request as h2}from"node:https";import{join as y2,resolve as _2}from"node:path";function iA(t,e){let n=dn(t).getAdapter(e.provider),r=jr(t.env.HOME?y2(t.env.HOME,".lmctl/config.toml"):void 0);return n?Yc(n,r)?"hosted":n.openSession!==void 0&&r.tools[e.provider]?.agent===void 0?"unsupported":"local":"unsupported"}function oA(t,e){let n=t.env.LMCTL_SERVICE_ENDPOINT;if(!n)return Promise.resolve(On("service_unavailable","LMCTL_SERVICE_ENDPOINT is required; start lmbee serve and configure its loopback endpoint"));let r;try{if(r=new URL(n),!["http:","https:"].includes(r.protocol))throw Error("Expected HTTP endpoint");r.pathname=r.pathname.replace(/\/+$/,"")+"/api/native-session/request"}catch{return Promise.resolve(On("service_unavailable","Invalid service endpoint "+n+"; start lmbee serve"))}let s={...e,member:{...e.member,...e.member.sessiondir!==void 0?{sessiondir:_2(t.cwd,e.member.sessiondir)}:{}},attribution:{LMCTL_SELF_SESSIONID:t.env.LMCTL_SELF_SESSIONID,LMCTL_INVOCATION_ID:t.env.LMCTL_INVOCATION_ID}},i=JSON.stringify(s);return new Promise(o=>{let a=!1,l=!1,c=!1,u=p=>{c||(c=!0,o(p))},d=p=>On(a||l?"outcome_unknown":"service_unavailable",a||l?p:"lmbee service unavailable at "+n+"; start lmbee serve ("+p+")",a||l?"unknown":"not_sent"),m=(r.protocol==="https:"?h2:g2)(r,{method:"POST",headers:{"content-type":"application/json","content-length":Buffer.byteLength(i)}},p=>{let f="";p.setTimeout(0),p.setEncoding("utf8"),p.on("data",g=>f+=g),p.on("end",()=>{try{let g=JSON.parse(f);if(!g||typeof g.status!="string")throw Error("Invalid native service result");u({...ry,...g})}catch{u(d("Native service returned invalid JSON or HTTP "+p.statusCode))}}),p.on("aborted",()=>u(d("Native service reply lost; prior accepted outcome is unknown"))),p.on("error",g=>u(d(g.message)))});m.setTimeout(0),m.on("socket",p=>{p.setTimeout(0),p.once("connect",()=>{l=!0})}),m.once("finish",()=>{a=!0}),m.on("error",p=>u(d(p.message))),m.on("close",()=>{c||u(d("Native service connection closed before reply"))}),m.end(i)})}async function aA(t,e,n,r={}){try{let s=me(t);if(s)return On(s.code,s.error);let i={operation:"turn",member:e,prompt:n,options:r};fd(i);let o=iA(t,e);if(o==="hosted")return await oA(t,i);if(o==="unsupported")return On("provider","Provider is not qualified for service-hosted native resume");let a=await qi(t,e,r);if(a.status!=="ok")return{...On("code"in a?a.code:"busy",a.error),status:a.status};try{let l=await Xi(t,a.session,n);return l.status==="ok"?l:{...l,code:l.status==="busy"?"busy":l.code??"provider"}}finally{await Ps(t,a.session)}}catch(s){return On("invalid_argument",String(s))}}async function lA(t,e){try{let n=me(t);if(n)return On(n.code,n.error);let r={operation:"close",member:e};fd(r);let s=iA(t,e);return s==="hosted"?await oA(t,r):s==="unsupported"?On("provider","Provider is not qualified for service-hosted native resume"):{...ry,status:"ok",error:null,reply:"",messageId:null,teamChatLogId:null,outcome:"completed"}}catch(n){return On("invalid_argument",String(n))}}var ry,On,cA=M(()=>{"use strict";en();Aa();Ri();$r();md();ny();ry={outcome:"not_sent",service_epoch:null,connection_epoch:null,connection_state:null},On=(t,e,n="not_sent")=>({...ry,status:"error",reply:"",error:e,code:t,messageId:null,teamChatLogId:null,outcome:n})});var uA=M(()=>{"use strict";zn()});var dA=M(()=>{"use strict"});import{constants as v2}from"node:os";import{spawn as b2}from"node:child_process";async function mA(t,e,n,r,s){let i=await w2(t,e,n,r,!1,s);return{code:s.signalObserved?null:i,signal:s.signalObserved??null}}async function w2(t,e,n,r,s,i){let o;try{o=xt(e,n,r)}catch(T){return T instanceof Ne?Vn(t,T.message):nT(t,T)}let a=xr(r,{receiver_teamfile:o.teamfile,receiver_alias:o.alias,sender_teamfile:o.teamfile,sender_alias:"terminal",ttlMs:Vr(i?.env??t.env)});if(!a.acquired){let T=a.current.holder_pid,k=T===null?null:ft(T)?"live":"dead",x=`${o.alias} is busy/held by ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} `+(T===null?"(holder_pid=unavailable)":`(holder_pid=${T}, ${k})`);return s?(nf(t,{status:"error",errorKind:"busy",message:x,holder_pid:T,holder_liveness:k}),1):Vn(t,x)}let l=Ix({teamfile:o.teamfile,alias:o.alias,pid:i?.pid}),c=null,u=null,d=null,m=[],p={...i?.env??t.env??process.env},f=!1,g=null,h=!1,y,b,_,v=T=>{c!==null&&(clearInterval(c),c=null);try{let k=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&k!==null&&T.push("terminal lock release was not acknowledged")}catch(k){T.push(`terminal lock release: ${k instanceof Error?k.message:String(k)}`)}try{let k=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&k!==null&&T.push("inflight release was not acknowledged")}catch(k){T.push(`inflight release: ${k instanceof Error?k.message:String(k)}`)}},E=(T,k)=>{let x=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{T(k)}finally{try{r.db.pragma(`busy_timeout=${x}`)}catch(C){k.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},R=(T,k)=>{if(!(u===null||h))try{if(r.finishTrackedInvocation(u,T)===null){let C=r.getTrackedInvocation(u);C==null||C.status==="running"?k.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(x){k.push(`tracked terminal finish: ${x instanceof Error?x.message:String(x)}`)}},S=T=>{if(f)return;f=!0;let k=[];try{E(x=>{v(x),R({status:"cancelled",signal:T,exit_code:T==="SIGINT"?130:143,error:`terminal interrupted by ${T}`},x)},k)}catch(x){k.push(x instanceof Error?x.message:String(x))}k.length>0&&(g=Error(k.join("; ")))},I=!i,N=I?new AbortController:void 0,O=()=>N?.abort("SIGINT"),A=()=>N?.abort("SIGTERM");I&&(process.once("SIGINT",O),process.once("SIGTERM",A));let w=i??{env:p,signal:N?.signal};w.env=p;try{if(w.cancel=S,w.cleanupError=()=>g,i&&i.onResource?.({close(){if(b)return b;let x,C;b=new Promise((P,j)=>{x=P,C=j});let L=performance.now();return(async()=>{if(S("SIGTERM"),i.stop?.("SIGTERM"),g)throw g;if(y){let P=5e3-(performance.now()-L),j;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([y.catch(()=>{}),new Promise((F,Z)=>{j=setTimeout(()=>Z(Error("terminal close deadline exceeded")),P)})])}catch(F){throw g=F instanceof Error?F:Error(String(F)),g}finally{clearTimeout(j)}}})().then(x,C),b},finalizeSync(x){if(S(x),i.stop?.(x),g)throw g}}),f||w.signal?.aborted){let x=w.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return S(x),x==="SIGINT"?130:143}r.setTerminalLock(l),u=E2(r,o,p,i?.pid),u!==null&&(p.LMCTL_INVOCATION_ID=String(u));let T=r.getRootTeam(o.teamfile)?.name??null;T!==null&&(p.LMBEE_TEAM_NAME=T),c=setInterval(()=>{try{let x=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,x);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,x),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},xx(p)),c.unref?.();try{$i(t,Ht(o.teamfile),o.teamfile)}catch{}let k=w;return y=T2(t,{provider:o.provider,sessionid:o.sessionid,sessiondir:o.sessiondir,...o.model!==void 0?{model:o.model}:{},isLead:o.isLead},x=>{m.push(`${x.provider} terminal ignored model=${x.model}: ${x.reason}`)},k),d=await y,d}catch(T){throw _=T,T}finally{if(I&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",A)),!f){f=!0;let T=[];try{E(k=>{v(k),R({status:d===0?"done":"error",exit_code:d,result_summary:d===0?"terminal session ended":null,error:d===0?null:`terminal exited with code ${d??"unknown"}`,...m.length>0?{config_warnings:JSON.stringify(m)}:{}},k)},T)}catch(k){T.push(k instanceof Error?k.message:String(k))}T.length>0&&(g=Error(T.join("; ")))}if(g){if(_===void 0)throw g;try{t.stderr.write("error: terminal cleanup: "+g.message+`
2379
- `)}catch{}}}}function E2(t,e,n=process.env,r=process.pid){try{return t.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:e.teamfile,from_identity:`${e.teamfile}:terminal`,target_teamfile:e.teamfile,target_alias:e.alias,root_teamfile:e.teamfile,cwd:e.sessiondir,command:`lmctl terminal ${e.teamfile} ${e.alias}`,holder_pid:r,launch_source:"terminal",parent_invocation_id:Dc(n.LMCTL_INVOCATION_ID),meta:JSON.stringify({provider:e.provider,sessionid:e.sessionid,...e.model!==void 0?{model:e.model}:{}})}).id}catch{return null}}async function T2(t,e,n,r){let{provider:s,sessionid:i,sessiondir:o,model:a}=e;if(!yh(s))return Vn(t,`no resume incantation for provider "${s}"`);if(!wR.test(i))return Vn(t,"refusing to resume: malformed sessionid");let l=ER(s,i,{isLead:e.isLead,model:a,onModelIgnored:f=>{let g=`warning: ${f.provider} terminal ignored model=${f.model}: ${f.reason}`;t.stderr.write(`${g}
2378
+ `)}catch{}return i(p,"provider")}finally{d?.stop(),a.inFlight=!1,a.turnFinished?.(),a.turnDone=void 0,u(),l||c?.close()}}async function Yx(t,e,n){try{let r=ud(t,e);return r?!n||!["done","error","cancelled"].includes(n.status)?B("invalid_argument","Invalid batch close status"):(await Da(r,n.status,n.error),fe({})):B("invalid_argument","Invalid or unmanaged batch handle")}catch(r){return B("provider",G(r))}}var Bx,Wx,Qx=M(()=>{"use strict";Kh();Yt();Xn();ed();sr();ke();Ri();id();En();Vh();La();Qu();Xh();Gh();Qt();en();mt();Bx=new WeakMap;Wx=new WeakMap});import{readdirSync as d2}from"node:fs";import{join as Zx,resolve as m2}from"node:path";import{randomUUID as p2}from"node:crypto";function ey(t,e){let n=e&&typeof e=="object"?eA.get(e):void 0;return n?.ctx===t?n:void 0}function ty(t,e,n,r){let s=new Set(e.listRootTeams().map(a=>a.teamfile_path));for(let a of new Set([t.cwd,r]))try{for(let l of d2(a,{withFileTypes:!0}))l.isFile()&&/\.(?:lmctl|lmc)$/i.test(l.name)&&s.add(Zx(a,l.name))}catch(l){if(l.code!=="ENOENT")throw l}let i=new Map;for(let a of s){let l;try{l=bi(a,e)}catch(c){if(/missing on disk|teamfile not found/.test(G(c)))continue;throw c}if(l.parseErrors.length)throw Error("Cannot resolve native ownership: "+l.parseErrors.join("; "));for(let c of l.members){if(c.teamfile===void 0&&(c.provider!==n.provider||c.session!==n.sessionid))continue;let u=xt(a,c.alias,e);u.provider===n.provider&&u.sessionid===n.sessionid&&i.set(JSON.stringify([It(u.teamfile,e),u.alias]),u)}}if(i.size>1)throw Error("Native session owner is ambiguous");let o=i.values().next().value;return o?{member:{...o,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}},known:!0}:{member:{teamfile:"native:"+n.provider+":"+n.sessionid,alias:n.sessionid,provider:n.provider,sessionid:n.sessionid,sessiondir:r,isLead:!1,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}},known:!1}}function Zh(t,e){return t.alias+" is servicing "+e.sender_alias+" ("+e.sender_teamfile+") since "+e.started_at+" \u2014 wait and retry"}function tA(t,e=!1){if(t.released)return;let n=e?t.dal.db.pragma("busy_timeout",{simple:!0}):void 0;e&&t.dal.db.pragma("busy_timeout=0");try{if(!t.dal.releaseAgentInflight(t.lease.row,t.lease.leaseId))throw Error("Native session lease release refused: ownership changed");t.released=!0}finally{e&&t.dal.db.pragma("busy_timeout="+n)}}async function dd(t){return t.closing||(t.closed=!0,t.serviceHosted||t.controller.abort(),t.closing=(async()=>{if(t.serviceHosted&&t.opening)try{t.conversation??=await t.opening}catch{}t.serviceHosted&&await t.active,await t.conversation?.close(),await t.active,t.stopHeartbeat(),tA(t,!0),t.untrack()})()),t.closing}function nA(t){if(t.serviceHosted)return t.controller.abort(),dd(t);t.closed=!0,t.stopHeartbeat(),t.controller.abort(),t.conversation&&t.conversation.close().catch(()=>{}),tA(t,!0),t.untrack()}async function qi(t,e,n={},r,s=!1){let i;try{let o=me(t);if(o)return o;if(!e||typeof e!="object"||Array.isArray(e))return B("invalid_argument","Native session member must be a map");for(let N of["provider","sessionid"])if(typeof e[N]!="string"||!e[N].trim())return B("invalid_argument","Native session requires provider and sessionid");for(let N of["sessiondir","model","effort"])if(e[N]!==void 0&&(typeof e[N]!="string"||!e[N].trim()))return B("invalid_argument","Native session "+N+" must be a nonempty string");if(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).some(N=>!["permissionMode","idleTimeoutMs"].includes(N)))return B("invalid_argument","Native session options must contain permissionMode or idleTimeoutMs");if(n.permissionMode!==void 0&&!["yolo","plan"].includes(n.permissionMode))return B("invalid_argument","permissionMode must be yolo or plan");if(n.idleTimeoutMs!==void 0&&(!Number.isFinite(n.idleTimeoutMs)||n.idleTimeoutMs<0))return B("invalid_argument","idleTimeoutMs must be finite and nonnegative");let a=sn(t),l=m2(t.cwd,e.sessiondir??t.cwd),c;try{c=ty(t,a,e,l)}catch(N){return B("invalid_argument",G(N))}let u=dn(t);if(!await u.getSession(e.sessionid,e.provider))return B("not_found","Native session was not found");if(t.closed)return B("cancelled","Context is closed");let m=c.member,p=di(a,m.teamfile,m.alias);if(p.busy)return{status:"busy",error:p.reason==="in-flight"?Zh(m,p.inFlight):p.source==="terminal-lock"?Ls(p.terminalLock):m.alias+" is busy (interactive terminal); wait and retry"};let f={receiver_teamfile:m.teamfile,receiver_alias:m.alias,sender_teamfile:m.teamfile,sender_alias:"operator",started_at:new Date().toISOString()},g=a.getAgentInflight(m.teamfile,m.alias),h=g!==null&&(g.native_provider!==null&&g.native_provider!==void 0||g.native_session_id!==null&&g.native_session_id!==void 0);if(h&&!r)return{status:"busy",error:Zh(m,g)};let y=r&&h?a.tryAcquireNativeHolder(f,r):void 0,b=y?y.acquired?{acquired:!0,lease:y.current,leaseId:y.lease_id}:{acquired:!1,current:y.current}:xr(a,{...f,ttlMs:Ar(t.env),...r?{nativeHolder:r}:{}});if(!b.acquired)return{status:"busy",error:Zh(m,b.current)};let _=Object.freeze({id:"native-session-"+p2()});i={ctx:t,dal:a,ref:_,member:m,ownerKnown:c.known,options:{...n},lease:{row:b.lease,leaseId:b.leaseId},controller:new AbortController,serviceHosted:s,closed:!1,released:!1,stopHeartbeat(){},untrack(){}};let v=i;v.untrack=_n(t,{close:()=>dd(v),finalizeSync:()=>nA(v)});let E=ui(N=>a.heartbeatAgentInflight(v.lease.row,v.lease.leaseId,N),{intervalMs:mc(t.env)});v.stopHeartbeat=()=>clearInterval(E);let R=mh({provider:e.provider,sessionId:e.sessionid,cwd:m.sessiondir,env:{...t.env},model:m.model,effort:m.effort,permissionMode:n.permissionMode??"yolo",timeoutMs:s?0:n.idleTimeoutMs??0,serviceHosted:s,execution:s?"persistent":"auto",requireResume:!0,registry:u,userConfig:jr(t.env.HOME?Zx(t.env.HOME,".lmctl/config.toml"):void 0)});v.opening=R,R.then(N=>{v.closed&&N.close().catch(()=>{})}).catch(()=>{});let S,I=new Promise((N,O)=>{S=()=>O(Error("Context is closed")),t.signal.addEventListener("abort",S,{once:!0}),t.signal.aborted&&S()});try{v.conversation=await Promise.race([R,I])}finally{t.signal.removeEventListener("abort",S)}if(t.closed||v.closed)throw Error("Context is closed");return eA.set(_,v),fe({session:_})}catch(o){if(i)try{await dd(i)}catch(a){return B("provider",G(o)+"; "+G(a))}return B(t?.closed?"cancelled":"provider",G(o))}}async function Xi(t,e,n,r=void 0){let s=(l,c="invalid_argument")=>({status:"error",reply:"",error:l,code:c,messageId:null,teamChatLogId:null}),i=me(t);if(i)return s(i.error,i.code);let o=ey(t,e);if(!o||o.closed||!o.conversation)return s("Invalid or closed native session reference");if(typeof n!="string")return s("Native session prompt must be a string");if(o.active)return{status:"busy",reply:"",error:"Batch already has an active turn",messageId:null,teamChatLogId:null};let a;o.active=new Promise(l=>{a=l});try{if(o.ownerKnown){let c=xt(o.member.teamfile,o.member.alias,o.dal);if(c.provider!==o.member.provider||c.sessionid!==o.member.sessionid)throw Error("Session binding changed; native turn cancelled")}let l=await Wi({signal:AbortSignal.any([t.signal,o.controller.signal]),teamfile:o.member.teamfile,alias:o.member.alias,resolvedNativeTarget:o.member,prompt:n,expectedSession:{provider:o.member.provider,sessionid:o.member.sessionid},permissionMode:o.options.permissionMode??"yolo",idleTimeoutMs:o.serviceHosted?0:o.options.idleTimeoutMs,heldLease:o.lease,conversation:o.conversation,registry:dn(t),onAccepted:r?.onAccepted,env:{...t.env,...r?.attribution},io:{...lt(t),dal:o.dal}});return{status:l.status,reply:"replyText"in l?l.replyText:"",error:l.status==="ok"?null:"message"in l?l.message:"provider "+l.status,messageId:"messageId"in l?l.messageId:null,teamChatLogId:l.teamChatLogId}}catch(l){return s(G(l),"provider")}finally{a(),o.active=void 0}}async function Ps(t,e){try{let n=ey(t,e);return n?(await dd(n),fe({})):B("invalid_argument","Invalid native session reference")}catch(n){return B("provider",G(n))}}function rA(t,e){try{let n=ey(t,e);if(!n)return B("invalid_argument","Invalid native session reference");let r=nA(n);return r&&r.catch(s=>t.onWarning(G(s))),fe({})}catch(n){return B("provider",G(n))}}var eA,md=M(()=>{"use strict";sr();Ri();Aa();Qt();en();En();Ts();Xn();La();mt();id();eA=new WeakMap});import{randomUUID as f2}from"node:crypto";import{join as g2,resolve as sA}from"node:path";function fd(t){if(!t||!["turn","close"].includes(t.operation))throw Error("Expected a native turn or close operation");let{member:e,options:n={}}=t;if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(r=>!["provider","sessionid","sessiondir","model","effort"].includes(r)))throw Error("Native session member must be a map");for(let r of["provider","sessionid"])if(typeof e[r]!="string"||!e[r].trim())throw Error("Native session requires provider and sessionid");for(let r of["sessiondir","model","effort"])if(e[r]!==void 0&&(typeof e[r]!="string"||!e[r].trim()))throw Error("Invalid native session "+r);if(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).some(r=>!["permissionMode","idleTimeoutMs"].includes(r)))throw Error("Unknown native session option");if(n.permissionMode!==void 0&&!["yolo","plan"].includes(n.permissionMode))throw Error("permissionMode must be yolo or plan");if(n.idleTimeoutMs!==void 0&&(!Number.isFinite(n.idleTimeoutMs)||n.idleTimeoutMs<0||n.idleTimeoutMs>2147483647))throw Error("idleTimeoutMs must be a nonnegative retention interval");if(t.operation==="turn"&&typeof t.prompt!="string")throw Error("Native session prompt must be a string");if(t.attribution!==void 0&&(!t.attribution||typeof t.attribution!="object"||Array.isArray(t.attribution)||Object.entries(t.attribution).some(([r,s])=>!["LMCTL_SELF_SESSIONID","LMCTL_INVOCATION_ID"].includes(r)||s!==void 0&&typeof s!="string")))throw Error("Invalid native request attribution")}var h2,pd,ny=M(()=>{"use strict";Qt();md();Aa();Ri();$r();h2={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t)};pd=class{entries=new Map;service_epoch=f2();nextEpoch=0;stopping=!1;drained;clock;idleMs;context;ownsContext;constructor(e){this.context=e.context,this.clock=e.clock??h2,this.idleMs=e.idleMs??3e5,this.ownsContext=e.ownsContext??!1}fields(e,n=null){return{outcome:"not_sent",service_epoch:this.service_epoch,connection_epoch:e?.epoch??null,connection_state:n}}async request(e){let n=(i,o,a="error",l)=>({...this.fields(l),status:a,code:i,reply:"",error:o,messageId:null,teamChatLogId:null});try{fd(e)}catch(i){return n("invalid_argument",String(i))}if(this.stopping)return n("closed","Native conversation service is shutting down");let r=JSON.stringify([e.member.provider,e.member.sessionid]),s=this.entries.get(r);if(s?.active||s?.closing)return n("busy","Native conversation has active or closing work","busy",s);if(e.operation==="close"){if(!s)return{...n("",""),status:"ok",code:void 0,error:null,outcome:"completed"};let i=this.fields(s);try{await this.closeEntry(r,s)}catch(o){return n("provider",String(o),"error",s)}return{...i,status:"ok",reply:"",error:null,messageId:null,teamChatLogId:null,outcome:"completed"}}try{let i=dn(this.context).getAdapter(e.member.provider),o=jr(this.context.env.HOME?g2(this.context.env.HOME,".lmctl/config.toml"):void 0);if(!i||!Yc(i,o))return n("provider","Provider is not qualified for service-hosted native resume");if(s){let l=e.member,c=e.options??{};if(l.sessiondir!==void 0&&sA(this.context.cwd,l.sessiondir)!==s.member.sessiondir||["model","effort"].some(u=>l[u]!==void 0&&l[u]!==s.member[u])||c.permissionMode!==void 0&&c.permissionMode!==s.options.permissionMode||c.idleTimeoutMs!==void 0&&c.idleTimeoutMs!==s.options.idleTimeoutMs)return n("invalid_argument","Native conversation configuration conflicts with retained connection","error",s)}let a=s?s.session?"reused":"reinitialized":"new";if(!s){let l=ty(this.context,sn(this.context),e.member,sA(this.context.cwd,e.member.sessiondir??this.context.cwd));s={member:{...e.member,sessiondir:l.member.sessiondir,model:l.member.model,effort:l.member.effort},options:{permissionMode:e.options?.permissionMode??"yolo",idleTimeoutMs:e.options?.idleTimeoutMs??this.idleMs},epoch:0,active:!1,phase:"opening"},this.entries.set(r,s)}return s.active=!0,this.cancelIdle(s),s.work=this.perform(r,s,e,a),s.work}catch(i){return n("invalid_argument",String(i),"error",s)}}async perform(e,n,r,s){try{if(!n.session){n.phase="opening",n.epoch=++this.nextEpoch;let o=n.member,a=await qi(this.context,o,n.options,{provider:o.provider,sessionId:o.sessionid,endpoint:null,phase:"starting",processIdentity:null,configJson:null},!0);if(a.status!=="ok")return this.entries.get(e)===n&&this.entries.delete(e),{...this.fields(n,s),status:a.status,code:"code"in a?a.code:"busy",reply:"",error:a.error,messageId:null,teamChatLogId:null};n.session=a.session}n.phase="active";let i=await Xi(this.context,n.session,r.prompt,{attribution:{LMCTL_SELF_SESSIONID:r.attribution?.LMCTL_SELF_SESSIONID,LMCTL_INVOCATION_ID:r.attribution?.LMCTL_INVOCATION_ID}});if(i.status==="error"){let o=await Ps(this.context,n.session);return o.status!=="ok"?(n.phase="closing",n.closing=Promise.reject(Error(o.error)),n.closing.catch(()=>{}),{...i,...this.fields(n,s),code:i.messageId?"outcome_unknown":i.code??"provider",outcome:i.messageId?"unknown":"not_sent",error:(i.error??"Provider turn failed")+"; cleanup: "+o.error}):(n.session=void 0,n.phase="disconnected",{...i,...this.fields(n,s),code:i.messageId?"outcome_unknown":i.code??"provider",outcome:i.messageId?"unknown":"not_sent"})}return{...i,...this.fields(n,s),outcome:"completed",...i.status!=="ok"?{code:i.status==="busy"?"busy":i.code??"provider"}:{},...i.status==="busy"?{outcome:"not_sent"}:{}}}catch(i){return{...this.fields(n,s),status:"error",code:"provider",reply:"",error:String(i),messageId:null,teamChatLogId:null}}finally{n.active=!1,n.closing||(n.phase=n.session?"ready":"disconnected",this.stopping||this.armIdle(e,n))}}cancelIdle(e){e.idle!==void 0&&(this.clock.clearTimeout(e.idle),e.idle=void 0)}armIdle(e,n){if(this.cancelIdle(n),this.entries.get(e)!==n||n.active||n.closing)return;let r=n.options.idleTimeoutMs??this.idleMs;r>0&&(n.idle=this.clock.setTimeout(()=>{this.closeEntry(e,n).catch(s=>this.context.onWarning("Native conversation idle close failed: "+String(s)))},r))}closeEntry(e,n){return n.closing||(this.cancelIdle(n),n.phase="closing",n.closing=(async()=>{if(n.active&&await n.work,n.session){let r=await Ps(this.context,n.session);if(r.status!=="ok")throw Error(r.error)}this.entries.get(e)===n&&this.entries.delete(e)})()),n.closing}shutdown(){return this.drained?this.drained:(this.stopping=!0,this.drained=Promise.allSettled([...this.entries].map(([e,n])=>this.closeEntry(e,n))).then(async e=>{let n=e.flatMap(r=>r.status==="rejected"?[r.reason]:[]);if(n.length)throw new AggregateError(n,"Native cleanup failed: "+n.map(String).join("; "));if(this.ownsContext){let r=await this.context.close();if(r.errors.length)throw Error(r.errors.join("; "))}}),this.drained)}cancel(){this.stopping=!0;for(let e of this.entries.values())this.cancelIdle(e);this.context.finalizeSync("SIGTERM")}}});import{request as y2}from"node:http";import{request as _2}from"node:https";import{join as v2,resolve as b2}from"node:path";function iA(t,e){let n=dn(t).getAdapter(e.provider),r=jr(t.env.HOME?v2(t.env.HOME,".lmctl/config.toml"):void 0);return n?Yc(n,r)?"hosted":n.openSession!==void 0&&r.tools[e.provider]?.agent===void 0?"unsupported":"local":"unsupported"}function oA(t,e){let n=t.env.LMCTL_SERVICE_ENDPOINT;if(!n)return Promise.resolve(On("service_unavailable","LMCTL_SERVICE_ENDPOINT is required; start lmbee serve and configure its loopback endpoint"));let r;try{if(r=new URL(n),!["http:","https:"].includes(r.protocol))throw Error("Expected HTTP endpoint");r.pathname=r.pathname.replace(/\/+$/,"")+"/api/native-session/request"}catch{return Promise.resolve(On("service_unavailable","Invalid service endpoint "+n+"; start lmbee serve"))}let s={...e,member:{...e.member,...e.member.sessiondir!==void 0?{sessiondir:b2(t.cwd,e.member.sessiondir)}:{}},attribution:{LMCTL_SELF_SESSIONID:t.env.LMCTL_SELF_SESSIONID,LMCTL_INVOCATION_ID:t.env.LMCTL_INVOCATION_ID}},i=JSON.stringify(s);return new Promise(o=>{let a=!1,l=!1,c=!1,u=p=>{c||(c=!0,o(p))},d=p=>On(a||l?"outcome_unknown":"service_unavailable",a||l?p:"lmbee service unavailable at "+n+"; start lmbee serve ("+p+")",a||l?"unknown":"not_sent"),m=(r.protocol==="https:"?_2:y2)(r,{method:"POST",headers:{"content-type":"application/json","content-length":Buffer.byteLength(i)}},p=>{let f="";p.setTimeout(0),p.setEncoding("utf8"),p.on("data",g=>f+=g),p.on("end",()=>{try{let g=JSON.parse(f);if(!g||typeof g.status!="string")throw Error("Invalid native service result");u({...ry,...g})}catch{u(d("Native service returned invalid JSON or HTTP "+p.statusCode))}}),p.on("aborted",()=>u(d("Native service reply lost; prior accepted outcome is unknown"))),p.on("error",g=>u(d(g.message)))});m.setTimeout(0),m.on("socket",p=>{p.setTimeout(0),p.once("connect",()=>{l=!0})}),m.once("finish",()=>{a=!0}),m.on("error",p=>u(d(p.message))),m.on("close",()=>{c||u(d("Native service connection closed before reply"))}),m.end(i)})}async function aA(t,e,n,r={}){try{let s=me(t);if(s)return On(s.code,s.error);let i={operation:"turn",member:e,prompt:n,options:r};fd(i);let o=iA(t,e);if(o==="hosted")return await oA(t,i);if(o==="unsupported")return On("provider","Provider is not qualified for service-hosted native resume");let a=await qi(t,e,r);if(a.status!=="ok")return{...On("code"in a?a.code:"busy",a.error),status:a.status};try{let l=await Xi(t,a.session,n);return l.status==="ok"?l:{...l,code:l.status==="busy"?"busy":l.code??"provider"}}finally{await Ps(t,a.session)}}catch(s){return On("invalid_argument",String(s))}}async function lA(t,e){try{let n=me(t);if(n)return On(n.code,n.error);let r={operation:"close",member:e};fd(r);let s=iA(t,e);return s==="hosted"?await oA(t,r):s==="unsupported"?On("provider","Provider is not qualified for service-hosted native resume"):{...ry,status:"ok",error:null,reply:"",messageId:null,teamChatLogId:null,outcome:"completed"}}catch(n){return On("invalid_argument",String(n))}}var ry,On,cA=M(()=>{"use strict";en();Aa();Ri();$r();md();ny();ry={outcome:"not_sent",service_epoch:null,connection_epoch:null,connection_state:null},On=(t,e,n="not_sent")=>({...ry,status:"error",reply:"",error:e,code:t,messageId:null,teamChatLogId:null,outcome:n})});var uA=M(()=>{"use strict";zn()});var dA=M(()=>{"use strict"});import{constants as w2}from"node:os";import{spawn as E2}from"node:child_process";async function mA(t,e,n,r,s){let i=await T2(t,e,n,r,!1,s);return{code:s.signalObserved?null:i,signal:s.signalObserved??null}}async function T2(t,e,n,r,s,i){let o;try{o=xt(e,n,r)}catch(T){return T instanceof Ne?Vn(t,T.message):nT(t,T)}let a=xr(r,{receiver_teamfile:o.teamfile,receiver_alias:o.alias,sender_teamfile:o.teamfile,sender_alias:"terminal",ttlMs:Vr(i?.env??t.env)});if(!a.acquired){let T=a.current.holder_pid,k=T===null?null:ft(T)?"live":"dead",x=`${o.alias} is busy/held by ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} `+(T===null?"(holder_pid=unavailable)":`(holder_pid=${T}, ${k})`);return s?(nf(t,{status:"error",errorKind:"busy",message:x,holder_pid:T,holder_liveness:k}),1):Vn(t,x)}let l=Ix({teamfile:o.teamfile,alias:o.alias,pid:i?.pid}),c=null,u=null,d=null,m=[],p={...i?.env??t.env??process.env},f=!1,g=null,h=!1,y,b,_,v=T=>{c!==null&&(clearInterval(c),c=null);try{let k=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&k!==null&&T.push("terminal lock release was not acknowledged")}catch(k){T.push(`terminal lock release: ${k instanceof Error?k.message:String(k)}`)}try{let k=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&k!==null&&T.push("inflight release was not acknowledged")}catch(k){T.push(`inflight release: ${k instanceof Error?k.message:String(k)}`)}},E=(T,k)=>{let x=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{T(k)}finally{try{r.db.pragma(`busy_timeout=${x}`)}catch(C){k.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},R=(T,k)=>{if(!(u===null||h))try{if(r.finishTrackedInvocation(u,T)===null){let C=r.getTrackedInvocation(u);C==null||C.status==="running"?k.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(x){k.push(`tracked terminal finish: ${x instanceof Error?x.message:String(x)}`)}},S=T=>{if(f)return;f=!0;let k=[];try{E(x=>{v(x),R({status:"cancelled",signal:T,exit_code:T==="SIGINT"?130:143,error:`terminal interrupted by ${T}`},x)},k)}catch(x){k.push(x instanceof Error?x.message:String(x))}k.length>0&&(g=Error(k.join("; ")))},I=!i,N=I?new AbortController:void 0,O=()=>N?.abort("SIGINT"),A=()=>N?.abort("SIGTERM");I&&(process.once("SIGINT",O),process.once("SIGTERM",A));let w=i??{env:p,signal:N?.signal};w.env=p;try{if(w.cancel=S,w.cleanupError=()=>g,i&&i.onResource?.({close(){if(b)return b;let x,C;b=new Promise((P,j)=>{x=P,C=j});let L=performance.now();return(async()=>{if(S("SIGTERM"),i.stop?.("SIGTERM"),g)throw g;if(y){let P=5e3-(performance.now()-L),j;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([y.catch(()=>{}),new Promise((F,Z)=>{j=setTimeout(()=>Z(Error("terminal close deadline exceeded")),P)})])}catch(F){throw g=F instanceof Error?F:Error(String(F)),g}finally{clearTimeout(j)}}})().then(x,C),b},finalizeSync(x){if(S(x),i.stop?.(x),g)throw g}}),f||w.signal?.aborted){let x=w.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return S(x),x==="SIGINT"?130:143}r.setTerminalLock(l),u=S2(r,o,p,i?.pid),u!==null&&(p.LMCTL_INVOCATION_ID=String(u));let T=r.getRootTeam(o.teamfile)?.name??null;T!==null&&(p.LMBEE_TEAM_NAME=T),c=setInterval(()=>{try{let x=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,x);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,x),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},xx(p)),c.unref?.();try{$i(t,Ht(o.teamfile),o.teamfile)}catch{}let k=w;return y=k2(t,{provider:o.provider,sessionid:o.sessionid,sessiondir:o.sessiondir,...o.model!==void 0?{model:o.model}:{},isLead:o.isLead},x=>{m.push(`${x.provider} terminal ignored model=${x.model}: ${x.reason}`)},k),d=await y,d}catch(T){throw _=T,T}finally{if(I&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",A)),!f){f=!0;let T=[];try{E(k=>{v(k),R({status:d===0?"done":"error",exit_code:d,result_summary:d===0?"terminal session ended":null,error:d===0?null:`terminal exited with code ${d??"unknown"}`,...m.length>0?{config_warnings:JSON.stringify(m)}:{}},k)},T)}catch(k){T.push(k instanceof Error?k.message:String(k))}T.length>0&&(g=Error(T.join("; ")))}if(g){if(_===void 0)throw g;try{t.stderr.write("error: terminal cleanup: "+g.message+`
2379
+ `)}catch{}}}}function S2(t,e,n=process.env,r=process.pid){try{return t.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:e.teamfile,from_identity:`${e.teamfile}:terminal`,target_teamfile:e.teamfile,target_alias:e.alias,root_teamfile:e.teamfile,cwd:e.sessiondir,command:`lmctl terminal ${e.teamfile} ${e.alias}`,holder_pid:r,launch_source:"terminal",parent_invocation_id:Dc(n.LMCTL_INVOCATION_ID),meta:JSON.stringify({provider:e.provider,sessionid:e.sessionid,...e.model!==void 0?{model:e.model}:{}})}).id}catch{return null}}async function k2(t,e,n,r){let{provider:s,sessionid:i,sessiondir:o,model:a}=e;if(!yh(s))return Vn(t,`no resume incantation for provider "${s}"`);if(!wR.test(i))return Vn(t,"refusing to resume: malformed sessionid");let l=ER(s,i,{isLead:e.isLead,model:a,onModelIgnored:f=>{let g=`warning: ${f.provider} terminal ignored model=${f.model}: ${f.reason}`;t.stderr.write(`${g}
2380
2380
  `),ht({event:"model_ignored",provider:f.provider,model:f.model,reason:f.reason}),n?.(f)}});if(l===null||l.length===0)return Vn(t,`no resume incantation for provider "${s}"`);let c=Ue(r?.env??t.env??process.env,o,i,"terminal"),u=await TR(s,{binary:l[0],cwd:o,env:c,signal:r?.signal});if(r?.signal?.aborted){let f=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(f),f==="SIGINT"?130:143}let[d,...m]=l,p=u.kind==="use-binary"?u.binary:d;return u.message&&t.stderr.write(u.message+`
2381
- `),await new Promise(f=>{if(r?.signal?.aborted){let I=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(I),f(I==="SIGINT"?130:143)}let g=r?.streams,h=g?[g.stdin,g.stdout,g.stderr].map(I=>I.fd):void 0,y=h?.every(I=>typeof I=="number"),b=b2(p,m,{stdio:g?y?h:["pipe","pipe","pipe"]:"inherit",cwd:o,env:c}),_=g?.stdin?.readableFlowing;g&&!y&&(g.stdin.pipe(b.stdin),b.stdout?.pipe(g.stdout,{end:!1}),b.stderr?.pipe(g.stderr,{end:!1}));let v=!1,E=I=>{if(!v){v=!0;try{r?.cancel?.(I)}catch{}{try{b.kill(I)}catch{}ve(b,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},R=()=>E(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=E);let S=()=>{r?.signal?.removeEventListener("abort",R),g&&!y&&(g.stdin.unpipe(b.stdin),_||g.stdin.pause(),b.stdout?.unpipe(g.stdout),b.stderr?.unpipe(g.stderr))};r?.signal?.addEventListener("abort",R,{once:!0}),r?.signal?.aborted&&R(),b.stdin?.on("error",()=>{}),b.on("error",I=>{S(),f(Vn(t,`failed to launch ${p}: ${I.message}`))}),b.on("exit",(I,N)=>{S(),r&&(r.signalObserved=N);let O=I??(N?128+(v2.signals[N]??1):1),A=SR(s);A&&O!==0&&O!==130&&O!==143&&!v&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+A+`
2382
- `),f(O)})})}var pA=M(()=>{"use strict";ks();Yt();Di();zn();uA();En();wn();ln();qu();Xn();Qu();La();dA();ke();ws()});import{resolve as S2}from"node:path";async function fA(t,e,n){let r=(l,c)=>({status:"error",error:l,errorCode:c,code:null,signal:null}),s,i=!1,o,a;try{let l=me(t);if(l)return r(l.error,l.code);if(!t.interactive||t.env.LMCTL_NON_INTERACTIVE==="1")return r("terminal opens an interactive TUI; non-interactive mode is enabled","noninteractive");if(!e||typeof e.teamfile!="string"||typeof e.alias!="string"||!n||typeof n.stdin?.pipe!="function"||typeof n.stdout?.write!="function"||typeof n.stderr?.write!="function")return r("Terminal requires teamfile, alias and caller streams","invalid_argument");let c={...e};o={env:{...t.env,LMCTL_DB:t.dbPath},pid:t.pid,signal:t.signal,streams:n,onResource(f){a=f,t.closed&&f.finalizeSync("SIGTERM")}},s=_n(t,{async close(){try{await a?.close()}catch(f){throw i=!0,f}},finalizeSync(f){try{a?.finalizeSync(f)}catch(g){throw i=!0,g}}});let u=[],d=lt(t,(f,g)=>{g==="stderr"&&f.startsWith("error:")&&u.push(f.replace(/^error:\s*/,"").trim())}),m=await mA({...d,stdin:n.stdin},S2(t.cwd,c.teamfile),c.alias,sn(t),o);return o.cleanupError?.()&&(i=!0),{status:m.code===0&&!m.signal?"ok":"error",error:m.signal?`terminal terminated by ${m.signal}`:m.code===0?null:u.join(`
2383
- `)||`terminal exited with code ${m.code}`,code:m.code,signal:m.signal}}catch(l){return o?.cleanupError?.()&&(i=!0),r(G(l),"provider")}finally{i||s?.()}}var gA=M(()=>{"use strict";pA();Qt();en();mt()});import{isAbsolute as k2,resolve as R2}from"node:path";function hd(t){return Number.isFinite(t)&&Math.abs(t)<=I2}function x2(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(_o.includes(e))return e;if(e==="SQLITE_BUSY"||e==="SQLITE_LOCKED")return"busy";if(e==="SQLITE_READONLY"||e.startsWith("SQLITE_READONLY")||e==="EACCES"||e==="EPERM"||e==="EISDIR")return"read";if(e==="ENOENT"||e==="SQLITE_CANTOPEN")return"missing";if(e==="ETIMEDOUT"||e==="ECANCELED"||e==="ABORT_ERR")return"cancelled"}let n=t.message;if(typeof n=="string"){if(n.includes("readonly database")||n.includes("SQLITE_READONLY"))return"read";if(n.includes("database is locked")||n.includes("SQLITE_BUSY"))return"busy"}}return"internal"}function oy(t,e=Date.now()){if(t===void 0)return{windowMs:yd};let n=/^(\d+)([smhd])$/.exec(t);if(n!==null){let i=Number(n[1]),o=n[2],l=(o==="s"?i:o==="m"?i*60:o==="h"?i*3600:i*86400)*1e3;return!Number.isFinite(l)||l<0||!hd(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!hd(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return hd(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function gd(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function iy(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return sy;let s=e.get(n);if(s===void 0){try{s=Ht(n)}catch{s=null}e.set(n,s)}return s===null?sy:Oc(s,r)?.model??sy}async function hA(t,e={}){let n=me(t);if(n)return{status:"error",error:n.error,code:n.code,running:[],dead:[],idle:[]};if(e!=null){if(typeof e!="object"||Array.isArray(e))return{status:"error",error:"Options must be a map",code:"invalid_argument",running:[],dead:[],idle:[]};let i=ar("listRunning");if(i.length>0){for(let o of Object.keys(e))if(!i.includes(o))return{status:"error",error:`Unknown option: ${o}`,code:"invalid_argument",running:[],dead:[],idle:[]}}if(e.teamfile!==void 0&&(typeof e.teamfile!="string"||!e.teamfile.trim()))return{status:"error",error:"teamfile must be a nonempty string",code:"invalid_argument",running:[],dead:[],idle:[]};if(e.member!==void 0&&typeof e.member!="string")return{status:"error",error:"member must be a string",code:"invalid_argument",running:[],dead:[],idle:[]};if(e.tree!==void 0&&typeof e.tree!="boolean")return{status:"error",error:"tree must be a boolean",code:"invalid_argument",running:[],dead:[],idle:[]}}let r=t.clock(),s=yd;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!hd(r-e.since))return{status:"error",error:"since must be a non-negative number of milliseconds within representable date range",code:"invalid_argument",running:[],dead:[],idle:[]};s=e.since}else if(typeof e.since=="string"){let i=oy(e.since,r);if("error"in i)return{status:"error",error:i.error,code:"invalid_argument",running:[],dead:[],idle:[]};s=i.windowMs}else return{status:"error",error:"since must be a duration string or number",code:"invalid_argument",running:[],dead:[],idle:[]};try{let i=sn(t),o=e?.teamfile!==void 0?k2(e.teamfile)?e.teamfile:R2(t.cwd,e.teamfile):void 0,a=o!==void 0?It(o,i):void 0,l=e?.member!==void 0?e.member.toLowerCase():void 0,c=_=>!(a!==void 0&&_.target_teamfile!==a||l!==void 0&&(_.target_alias??"").toLowerCase()!==l),u=i.listAllRunningTrackedInvocations().filter(c),d=new Map,m=[],p=[];for(let _ of u){let v=pc(_),E=r-new Date(_.started_at).getTime(),R={id:_.id,kind:_.kind,origin:_.origin,from_identity:_.from_identity,target:gd(_),model:iy(_,d),started_at:_.started_at,parent_invocation_id:_.parent_invocation_id};if(v==="dead"){if(Hh(i,_)!==null)continue;p.push({...R,stale_for_ms:E})}else m.push({...R,running_for_ms:E,holder_liveness:v??"unknown"})}let f=new Set(u.map(gd).filter(_=>_!==null)),g=new Date(r-s).toISOString(),h=i.listRecentlyFinishedTrackedInvocations(g).filter(c),y=new Set,b=[];for(let _ of h){let v=gd(_);v===null||f.has(v)||y.has(v)||(y.add(v),b.push({id:_.id,kind:_.kind,origin:_.origin,from_identity:_.from_identity,target:v,model:iy(_,d),status:_.status,started_at:_.started_at,ended_at:_.ended_at,idle_ms:r-new Date(_.ended_at).getTime(),ran_ms:new Date(_.ended_at).getTime()-new Date(_.started_at).getTime(),error:_.error,parent_invocation_id:_.parent_invocation_id}))}if(e?.tree===!0){let _=new Set([...m.map(E=>E.id),...p.map(E=>E.id),...b.map(E=>E.id)]),v=[..._];for(;v.length>0;){let E=i.listFinishedTrackedInvocationChildren(v,g).filter(R=>!_.has(R.id)&&c(R));if(E.length===0)break;v=[];for(let R of E){_.add(R.id),v.push(R.id);let S=gd(R);b.push({id:R.id,kind:R.kind,origin:R.origin,from_identity:R.from_identity,target:S,model:iy(R,d),status:R.status,started_at:R.started_at,ended_at:R.ended_at,idle_ms:r-new Date(R.ended_at).getTime(),ran_ms:new Date(R.ended_at).getTime()-new Date(R.started_at).getTime(),error:R.error,parent_invocation_id:R.parent_invocation_id})}}}return{status:"ok",error:null,running:m,dead:p,idle:b}}catch(i){return{status:"error",error:i instanceof Error?i.message:String(i),code:x2(i),running:[],dead:[],idle:[]}}}var yd,I2,sy,yA=M(()=>{"use strict";Qt();en();Un();Xn();ed();wn();Ts();yd=24*60*60*1e3,I2=864e13;sy="default"});var _A={};Mn(_A,{DAY_MS:()=>yd,LMCTL_API_VERSION:()=>VG,LMCTL_ERROR_CODES:()=>_o,LMCTL_OPERATIONS:()=>dt,LMCTL_PROFILE_VALUE_NAMES:()=>vO,LMCTL_PROPERTY_KEYS:()=>km,LMCTL_PROPERTY_TABLES:()=>bO,LMCTL_REMOVED_GLOBALS:()=>Rm,LMCTL_RESULT_FIELDS:()=>_O,NativeSessionManager:()=>pd,agentMessage:()=>px,batchTurn:()=>Kx,closeBatch:()=>Yx,closeNativeSession:()=>Ps,createLmctlContext:()=>Ip,deleteSession:()=>mI,fail:()=>B,finalizeBatchSync:()=>Jx,finalizeNativeSessionSync:()=>rA,getSession:()=>dI,inspectBatch:()=>Vx,isLmctlContext:()=>gi,lintTeam:()=>jB,listMembers:()=>FB,listRunning:()=>hA,listSessions:()=>uI,loadProfile:()=>Q0,loadProperties:()=>Z0,nativeSessionClose:()=>lA,nativeSessionRequest:()=>aA,nativeSessionTurn:()=>Xi,ok:()=>fe,openNativeSession:()=>qi,openTeamBatch:()=>zx,openTerminal:()=>fA,parseRunningSince:()=>oy,profileValues:()=>Y0,promptAgent:()=>sI,promptMember:()=>jx,promptReservedAgent:()=>aI,readPrompts:()=>WB,readRatelimits:()=>cq,releaseSession:()=>cI,reserveSession:()=>lI,resolveMember:()=>$B,resolveProfilePath:()=>$p,seedErrorCollector:()=>QR,seedTeam:()=>UB,sessionAdmission:()=>oI});var vA=M(()=>{"use strict";mt();Qt();xE();Un();ZR();eI();pI();ux();kh();fx();Ux();Qx();md();cA();gA();yA();ny()});var TA={};Mn(TA,{createLmctlHostModule:()=>EA,default:()=>B2});import{AsyncLocalStorage as A2}from"node:async_hooks";import{randomUUID as C2}from"node:crypto";import{types as N2}from"node:util";import{createInterface as O2}from"node:readline";import{Writable as L2}from"node:stream";import{readFileSync as M2}from"node:fs";import{resolve as P2}from"node:path";import{homedir as D2}from"node:os";function bA(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(_o.includes(e))return e;if(e==="EACCES"||e==="EPERM"||e==="EISDIR")return"read";if(e==="ENOENT")return"missing";if(e==="ETIMEDOUT"||e==="ECANCELED"||e==="ABORT_ERR")return"cancelled"}}return"internal"}function U2(t){if(t.name==="lm_log"||t.name==="lm_error")return{...t,arity:{min:2},params:[ay,...t.params??[{name:"value",type:"any"},{name:"values",type:"any",rest:!0}]],readonly:t.name==="lm_error",dryControl:t.name==="lm_error"?"error":"output"};if(t.name==="lm_exit")return{...t,arity:{min:0,max:2},params:[{name:"code",type:"number",optional:!0},ay],readonly:!0};if(_d.has(t.name)||t.name==="lm_prompt"||t.name==="lm_agent"||t.name==="lm_agent_message"){let e=t.params??[{name:"file",type:"string"}],n=typeof t.arity=="number"?t.arity:t.arity.min;return{...t,arity:{min:n,max:e.length+1},params:[...e,ay],readonly:_d.has(t.name)}}return t}function EA(t={}){let e={stdout:t.stdout??(r=>process.stdout.write(r)),stderr:t.stderr??(r=>process.stderr.write(r))},n={name:"lmctl",declarations:H2,async activate(r){let s=t.api??await Promise.resolve().then(()=>(vA(),_A)),i,o=new A2,a=()=>o.getStore()??e,l=new WeakMap,c=new WeakMap,u=new WeakMap,d=new Map,m=new Map,p=!1,f=()=>{if(i)return i;let w={...r.env};!w.HOME&&!w.LMCTL_HOME&&!w.LMCTL_DB&&(w.HOME=D2());let T=s.createLmctlContext({env:w,cwd:r.cwd,pid:process.pid,onProgress:(k,x)=>a()[x??"stderr"](k),onWarning:k=>a().stderr(k)});if(T.status!=="ok")throw Error(T.error);return i=T,t.onContext?.(i),i},g={},h=()=>{let w=s.loadProperties(f());if(w.status!=="ok")throw Error(w.error);return{path:w.path,properties:w.properties,hint:"Define it in "+w.path+" or run lmctl init"}},y=()=>i&&!i.closed&&i.finalizeSync(r.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r.signal?.addEventListener("abort",y,{once:!0}),r.signal?.aborted&&y();let b=async(w,T,k={},x)=>{let C=k&&typeof k=="object"&&!Array.isArray(k)?{permissionMode:k.permissionMode??"yolo",idleTimeoutMs:k.idleTimeoutMs??void 0}:k,L=x?await s.promptReservedAgent(f(),x,w,T,C):await s.promptAgent(f(),w,T,C);if(w&&typeof w=="object"&&L.sessionid&&L.status!=="busy"&&(w.sessionid=L.sessionid),w?.sessionid&&L.status!=="busy"){let P=JSON.stringify([w.provider,w.sessionid]),j=m.get(P)??{lines:[],options:{}};j.lines.push(`You: ${T}`),L.reply&&j.lines.push(`Agent: ${L.reply}`),L.error&&j.lines.push(`${L.status}: ${L.error}`),j.options={...k},m.set(P,j)}return{status:L.status,reply:L.reply,error:L.error?`lm_agent: ${L.error}`:null,message_id:null,team_chat_log_id:null}},_=(w,T)=>new Error(`${w}: ${T.error??"operation failed"}`),v=(w,T)=>{if(T.status!=="ok")throw _(w,T);return T},E=(w,T="lm_batch_turn",k=!1)=>{if(w!==null&&typeof w=="object"&&N2.isProxy(w))throw Error("Resource batch id cannot be read from a proxy");let x=w!==null&&typeof w=="object"?Object.getOwnPropertyDescriptor(w,"id"):void 0;if(x&&!("value"in x))throw Error("Resource batch id must be an own data property, not an accessor");let C=typeof w=="string"?w:x?.value,L=typeof C=="string"?d.get(C):void 0,P=po();if(!L){if(typeof C=="string"&&/^run-[0-9]+-[0-9]+\//.test(C)&&P&&!C.startsWith(P.runtime.token+"/"))throw Error("Resource batch "+C+" belongs to another run: "+T);return}if(!P)throw Error("Resource batch "+C+" requires an authorized script invocation");return P.runtime.authorizeRaw(L,P.scope,T,k),L},R=w=>{let T=po();if(!T)throw Error("lm_batch_open requires an authorized script invocation");w.id=T.runtime.token+"/"+C2(),w.kind="lmctl batch",w.closeDeadlineMs=5e3;let k;return w.close=(x={})=>{if(k)return k;let C,L;return k=new Promise((P,j)=>{C=P,L=j}),(async()=>{let P=l.get(w);if(P){v("lm_batch_close",await s.closeNativeSession(f(),P));return}let j=c.get(w);if(j){j.closed=!0;return}let F=x.explicit??[],Z=x.reason==="cancelled"?"cancelled":F[0]??(w.observedError?"error":x.reason??"done");v("lm_batch_close",await s.closeBatch(f(),u.get(w),{status:Z==="done"?"done":Z==="cancelled"?"cancelled":"error",error:F[1]??x.error}))})().then(C,L),k},w.finalizeSync=()=>{let x=f();if(x.closed){let C=x.finalizeSync("SIGTERM");if(C.errors.length)throw Error(C.errors.join(`
2381
+ `),await new Promise(f=>{if(r?.signal?.aborted){let I=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(I),f(I==="SIGINT"?130:143)}let g=r?.streams,h=g?[g.stdin,g.stdout,g.stderr].map(I=>I.fd):void 0,y=h?.every(I=>typeof I=="number"),b=E2(p,m,{stdio:g?y?h:["pipe","pipe","pipe"]:"inherit",cwd:o,env:c}),_=g?.stdin?.readableFlowing;g&&!y&&(g.stdin.pipe(b.stdin),b.stdout?.pipe(g.stdout,{end:!1}),b.stderr?.pipe(g.stderr,{end:!1}));let v=!1,E=I=>{if(!v){v=!0;try{r?.cancel?.(I)}catch{}{try{b.kill(I)}catch{}ve(b,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},R=()=>E(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=E);let S=()=>{r?.signal?.removeEventListener("abort",R),g&&!y&&(g.stdin.unpipe(b.stdin),_||g.stdin.pause(),b.stdout?.unpipe(g.stdout),b.stderr?.unpipe(g.stderr))};r?.signal?.addEventListener("abort",R,{once:!0}),r?.signal?.aborted&&R(),b.stdin?.on("error",()=>{}),b.on("error",I=>{S(),f(Vn(t,`failed to launch ${p}: ${I.message}`))}),b.on("exit",(I,N)=>{S(),r&&(r.signalObserved=N);let O=I??(N?128+(w2.signals[N]??1):1),A=SR(s);A&&O!==0&&O!==130&&O!==143&&!v&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+A+`
2382
+ `),f(O)})})}var pA=M(()=>{"use strict";ks();Yt();Di();zn();uA();En();wn();ln();qu();Xn();Qu();La();dA();ke();ws()});import{resolve as R2}from"node:path";async function fA(t,e,n){let r=(l,c)=>({status:"error",error:l,errorCode:c,code:null,signal:null}),s,i=!1,o,a;try{let l=me(t);if(l)return r(l.error,l.code);if(!t.interactive||t.env.LMCTL_NON_INTERACTIVE==="1")return r("terminal opens an interactive TUI; non-interactive mode is enabled","noninteractive");if(!e||typeof e.teamfile!="string"||typeof e.alias!="string"||!n||typeof n.stdin?.pipe!="function"||typeof n.stdout?.write!="function"||typeof n.stderr?.write!="function")return r("Terminal requires teamfile, alias and caller streams","invalid_argument");let c={...e};o={env:{...t.env,LMCTL_DB:t.dbPath},pid:t.pid,signal:t.signal,streams:n,onResource(f){a=f,t.closed&&f.finalizeSync("SIGTERM")}},s=_n(t,{async close(){try{await a?.close()}catch(f){throw i=!0,f}},finalizeSync(f){try{a?.finalizeSync(f)}catch(g){throw i=!0,g}}});let u=[],d=lt(t,(f,g)=>{g==="stderr"&&f.startsWith("error:")&&u.push(f.replace(/^error:\s*/,"").trim())}),m=await mA({...d,stdin:n.stdin},R2(t.cwd,c.teamfile),c.alias,sn(t),o);return o.cleanupError?.()&&(i=!0),{status:m.code===0&&!m.signal?"ok":"error",error:m.signal?`terminal terminated by ${m.signal}`:m.code===0?null:u.join(`
2383
+ `)||`terminal exited with code ${m.code}`,code:m.code,signal:m.signal}}catch(l){return o?.cleanupError?.()&&(i=!0),r(G(l),"provider")}finally{i||s?.()}}var gA=M(()=>{"use strict";pA();Qt();en();mt()});import{isAbsolute as I2,resolve as x2}from"node:path";function hd(t){return Number.isFinite(t)&&Math.abs(t)<=A2}function C2(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(_o.includes(e))return e;if(e==="SQLITE_BUSY"||e==="SQLITE_LOCKED")return"busy";if(e==="SQLITE_READONLY"||e.startsWith("SQLITE_READONLY")||e==="EACCES"||e==="EPERM"||e==="EISDIR")return"read";if(e==="ENOENT"||e==="SQLITE_CANTOPEN")return"missing";if(e==="ETIMEDOUT"||e==="ECANCELED"||e==="ABORT_ERR")return"cancelled"}let n=t.message;if(typeof n=="string"){if(n.includes("readonly database")||n.includes("SQLITE_READONLY"))return"read";if(n.includes("database is locked")||n.includes("SQLITE_BUSY"))return"busy"}}return"internal"}function oy(t,e=Date.now()){if(t===void 0)return{windowMs:yd};let n=/^(\d+)([smhd])$/.exec(t);if(n!==null){let i=Number(n[1]),o=n[2],l=(o==="s"?i:o==="m"?i*60:o==="h"?i*3600:i*86400)*1e3;return!Number.isFinite(l)||l<0||!hd(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!hd(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return hd(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function gd(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function iy(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return sy;let s=e.get(n);if(s===void 0){try{s=Ht(n)}catch{s=null}e.set(n,s)}return s===null?sy:Oc(s,r)?.model??sy}async function hA(t,e={}){let n=me(t);if(n)return{status:"error",error:n.error,code:n.code,running:[],dead:[],idle:[]};if(e!=null){if(typeof e!="object"||Array.isArray(e))return{status:"error",error:"Options must be a map",code:"invalid_argument",running:[],dead:[],idle:[]};let i=ar("listRunning");if(i.length>0){for(let o of Object.keys(e))if(!i.includes(o))return{status:"error",error:`Unknown option: ${o}`,code:"invalid_argument",running:[],dead:[],idle:[]}}if(e.teamfile!==void 0&&(typeof e.teamfile!="string"||!e.teamfile.trim()))return{status:"error",error:"teamfile must be a nonempty string",code:"invalid_argument",running:[],dead:[],idle:[]};if(e.member!==void 0&&typeof e.member!="string")return{status:"error",error:"member must be a string",code:"invalid_argument",running:[],dead:[],idle:[]};if(e.tree!==void 0&&typeof e.tree!="boolean")return{status:"error",error:"tree must be a boolean",code:"invalid_argument",running:[],dead:[],idle:[]}}let r=t.clock(),s=yd;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!hd(r-e.since))return{status:"error",error:"since must be a non-negative number of milliseconds within representable date range",code:"invalid_argument",running:[],dead:[],idle:[]};s=e.since}else if(typeof e.since=="string"){let i=oy(e.since,r);if("error"in i)return{status:"error",error:i.error,code:"invalid_argument",running:[],dead:[],idle:[]};s=i.windowMs}else return{status:"error",error:"since must be a duration string or number",code:"invalid_argument",running:[],dead:[],idle:[]};try{let i=sn(t),o=e?.teamfile!==void 0?I2(e.teamfile)?e.teamfile:x2(t.cwd,e.teamfile):void 0,a=o!==void 0?It(o,i):void 0,l=e?.member!==void 0?e.member.toLowerCase():void 0,c=_=>!(a!==void 0&&_.target_teamfile!==a||l!==void 0&&(_.target_alias??"").toLowerCase()!==l),u=i.listAllRunningTrackedInvocations().filter(c),d=new Map,m=[],p=[];for(let _ of u){let v=pc(_),E=r-new Date(_.started_at).getTime(),R={id:_.id,kind:_.kind,origin:_.origin,from_identity:_.from_identity,target:gd(_),model:iy(_,d),started_at:_.started_at,parent_invocation_id:_.parent_invocation_id};if(v==="dead"){if(Hh(i,_)!==null)continue;p.push({...R,stale_for_ms:E})}else m.push({...R,running_for_ms:E,holder_liveness:v??"unknown"})}let f=new Set(u.map(gd).filter(_=>_!==null)),g=new Date(r-s).toISOString(),h=i.listRecentlyFinishedTrackedInvocations(g).filter(c),y=new Set,b=[];for(let _ of h){let v=gd(_);v===null||f.has(v)||y.has(v)||(y.add(v),b.push({id:_.id,kind:_.kind,origin:_.origin,from_identity:_.from_identity,target:v,model:iy(_,d),status:_.status,started_at:_.started_at,ended_at:_.ended_at,idle_ms:r-new Date(_.ended_at).getTime(),ran_ms:new Date(_.ended_at).getTime()-new Date(_.started_at).getTime(),error:_.error,parent_invocation_id:_.parent_invocation_id}))}if(e?.tree===!0){let _=new Set([...m.map(E=>E.id),...p.map(E=>E.id),...b.map(E=>E.id)]),v=[..._];for(;v.length>0;){let E=i.listFinishedTrackedInvocationChildren(v,g).filter(R=>!_.has(R.id)&&c(R));if(E.length===0)break;v=[];for(let R of E){_.add(R.id),v.push(R.id);let S=gd(R);b.push({id:R.id,kind:R.kind,origin:R.origin,from_identity:R.from_identity,target:S,model:iy(R,d),status:R.status,started_at:R.started_at,ended_at:R.ended_at,idle_ms:r-new Date(R.ended_at).getTime(),ran_ms:new Date(R.ended_at).getTime()-new Date(R.started_at).getTime(),error:R.error,parent_invocation_id:R.parent_invocation_id})}}}return{status:"ok",error:null,running:m,dead:p,idle:b}}catch(i){return{status:"error",error:i instanceof Error?i.message:String(i),code:C2(i),running:[],dead:[],idle:[]}}}var yd,A2,sy,yA=M(()=>{"use strict";Qt();en();Un();Xn();ed();wn();Ts();yd=24*60*60*1e3,A2=864e13;sy="default"});var _A={};Mn(_A,{DAY_MS:()=>yd,LMCTL_API_VERSION:()=>KG,LMCTL_ERROR_CODES:()=>_o,LMCTL_OPERATIONS:()=>dt,LMCTL_PROFILE_VALUE_NAMES:()=>vO,LMCTL_PROPERTY_KEYS:()=>km,LMCTL_PROPERTY_TABLES:()=>bO,LMCTL_REMOVED_GLOBALS:()=>Rm,LMCTL_RESULT_FIELDS:()=>_O,NativeSessionManager:()=>pd,agentMessage:()=>px,batchTurn:()=>Kx,closeBatch:()=>Yx,closeNativeSession:()=>Ps,createLmctlContext:()=>Ip,deleteSession:()=>mI,fail:()=>B,finalizeBatchSync:()=>Jx,finalizeNativeSessionSync:()=>rA,getSession:()=>dI,inspectBatch:()=>Vx,isLmctlContext:()=>gi,lintTeam:()=>HB,listMembers:()=>jB,listRunning:()=>hA,listSessions:()=>uI,loadProfile:()=>eF,loadProperties:()=>tF,nativeSessionClose:()=>lA,nativeSessionRequest:()=>aA,nativeSessionTurn:()=>Xi,ok:()=>fe,openNativeSession:()=>qi,openTeamBatch:()=>zx,openTerminal:()=>fA,parseRunningSince:()=>oy,profileValues:()=>Z0,promptAgent:()=>sI,promptMember:()=>jx,promptReservedAgent:()=>aI,readPrompts:()=>XB,readRatelimits:()=>dq,releaseSession:()=>cI,reserveSession:()=>lI,resolveMember:()=>UB,resolveProfilePath:()=>$p,seedErrorCollector:()=>QR,seedTeam:()=>BB,sessionAdmission:()=>oI});var vA=M(()=>{"use strict";mt();Qt();xE();Un();ZR();eI();pI();ux();kh();fx();Ux();Qx();md();cA();gA();yA();ny()});var TA={};Mn(TA,{createLmctlHostModule:()=>EA,default:()=>q2});import{AsyncLocalStorage as N2}from"node:async_hooks";import{randomUUID as O2}from"node:crypto";import{types as L2}from"node:util";import{createInterface as M2}from"node:readline";import{Writable as P2}from"node:stream";import{readFileSync as D2}from"node:fs";import{resolve as F2}from"node:path";import{homedir as $2}from"node:os";function bA(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(_o.includes(e))return e;if(e==="EACCES"||e==="EPERM"||e==="EISDIR")return"read";if(e==="ENOENT")return"missing";if(e==="ETIMEDOUT"||e==="ECANCELED"||e==="ABORT_ERR")return"cancelled"}}return"internal"}function B2(t){if(t.name==="lm_log"||t.name==="lm_error")return{...t,arity:{min:2},params:[ay,...t.params??[{name:"value",type:"any"},{name:"values",type:"any",rest:!0}]],readonly:t.name==="lm_error",dryControl:t.name==="lm_error"?"error":"output"};if(t.name==="lm_exit")return{...t,arity:{min:0,max:2},params:[{name:"code",type:"number",optional:!0},ay],readonly:!0};if(_d.has(t.name)||t.name==="lm_prompt"||t.name==="lm_agent"||t.name==="lm_agent_message"){let e=t.params??[{name:"file",type:"string"}],n=typeof t.arity=="number"?t.arity:t.arity.min;return{...t,arity:{min:n,max:e.length+1},params:[...e,ay],readonly:_d.has(t.name)}}return t}function EA(t={}){let e={stdout:t.stdout??(r=>process.stdout.write(r)),stderr:t.stderr??(r=>process.stderr.write(r))},n={name:"lmctl",declarations:W2,async activate(r){let s=t.api??await Promise.resolve().then(()=>(vA(),_A)),i,o=new N2,a=()=>o.getStore()??e,l=new WeakMap,c=new WeakMap,u=new WeakMap,d=new Map,m=new Map,p=!1,f=()=>{if(i)return i;let w={...r.env};!w.HOME&&!w.LMCTL_HOME&&!w.LMCTL_DB&&(w.HOME=$2());let T=s.createLmctlContext({env:w,cwd:r.cwd,pid:process.pid,onProgress:(k,x)=>a()[x??"stderr"](k),onWarning:k=>a().stderr(k)});if(T.status!=="ok")throw Error(T.error);return i=T,t.onContext?.(i),i},g={},h=()=>{let w=s.loadProperties(f());if(w.status!=="ok")throw Error(w.error);return{path:w.path,properties:w.properties,hint:"Define it in "+w.path+" or run lmctl init"}},y=()=>i&&!i.closed&&i.finalizeSync(r.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r.signal?.addEventListener("abort",y,{once:!0}),r.signal?.aborted&&y();let b=async(w,T,k={},x)=>{let C=k&&typeof k=="object"&&!Array.isArray(k)?{permissionMode:k.permissionMode??"yolo",idleTimeoutMs:k.idleTimeoutMs??void 0}:k,L=x?await s.promptReservedAgent(f(),x,w,T,C):await s.promptAgent(f(),w,T,C);if(w&&typeof w=="object"&&L.sessionid&&L.status!=="busy"&&(w.sessionid=L.sessionid),w?.sessionid&&L.status!=="busy"){let P=JSON.stringify([w.provider,w.sessionid]),j=m.get(P)??{lines:[],options:{}};j.lines.push(`You: ${T}`),L.reply&&j.lines.push(`Agent: ${L.reply}`),L.error&&j.lines.push(`${L.status}: ${L.error}`),j.options={...k},m.set(P,j)}return{status:L.status,reply:L.reply,error:L.error?`lm_agent: ${L.error}`:null,message_id:null,team_chat_log_id:null}},_=(w,T)=>new Error(`${w}: ${T.error??"operation failed"}`),v=(w,T)=>{if(T.status!=="ok")throw _(w,T);return T},E=(w,T="lm_batch_turn",k=!1)=>{if(w!==null&&typeof w=="object"&&L2.isProxy(w))throw Error("Resource batch id cannot be read from a proxy");let x=w!==null&&typeof w=="object"?Object.getOwnPropertyDescriptor(w,"id"):void 0;if(x&&!("value"in x))throw Error("Resource batch id must be an own data property, not an accessor");let C=typeof w=="string"?w:x?.value,L=typeof C=="string"?d.get(C):void 0,P=po();if(!L){if(typeof C=="string"&&/^run-[0-9]+-[0-9]+\//.test(C)&&P&&!C.startsWith(P.runtime.token+"/"))throw Error("Resource batch "+C+" belongs to another run: "+T);return}if(!P)throw Error("Resource batch "+C+" requires an authorized script invocation");return P.runtime.authorizeRaw(L,P.scope,T,k),L},R=w=>{let T=po();if(!T)throw Error("lm_batch_open requires an authorized script invocation");w.id=T.runtime.token+"/"+O2(),w.kind="lmctl batch",w.closeDeadlineMs=5e3;let k;return w.close=(x={})=>{if(k)return k;let C,L;return k=new Promise((P,j)=>{C=P,L=j}),(async()=>{let P=l.get(w);if(P){v("lm_batch_close",await s.closeNativeSession(f(),P));return}let j=c.get(w);if(j){j.closed=!0;return}let F=x.explicit??[],Z=x.reason==="cancelled"?"cancelled":F[0]??(w.observedError?"error":x.reason??"done");v("lm_batch_close",await s.closeBatch(f(),u.get(w),{status:Z==="done"?"done":Z==="cancelled"?"cancelled":"error",error:F[1]??x.error}))})().then(C,L),k},w.finalizeSync=()=>{let x=f();if(x.closed){let C=x.finalizeSync("SIGTERM");if(C.errors.length)throw Error(C.errors.join(`
2384
2384
  `));return}if(l.has(w))v("lm_batch_close",s.finalizeNativeSessionSync(x,l.get(w)));else if(u.has(w))v("lm_batch_close",s.finalizeBatchSync(x,u.get(w)));else{let C=c.get(w);C&&(C.closed=!0)}},d.set(w.id,w),w},S=w=>w&&typeof w=="object"?u.get(w):void 0,I=w=>{let T=S(w);if(T){let k=v("lm_batch_open",s.inspectBatch(f(),T)),{status:x,error:C,...L}=k;Object.assign(w,{...L,id:w.close?w.id:L.id})}},O={lm_exit:(w=0)=>{let T=Number(w);throw new Mt(Number.isFinite(T)&&T>=0&&T<=255?Math.floor(T):1)},lm_log:(w,...T)=>{let k=wA(T);return a().stderr(k.endsWith(`
2385
2385
  `)?k:k+`
2386
2386
  `),k},lm_error:(w,...T)=>{let k=wA(T);return o.getStore()?.errors?.push(k),r.reportRecordedError(k),a().stderr("error: "+k+`
2387
2387
  `),k},lm_read_prompts:async(w,T=!1)=>{let k=await s.readPrompts(f(),w,{single:T});return{status:k.status,error:k.error?`lm_read_prompts: ${k.error}`:null,prompts:"prompts"in k?k.prompts:[]}},lm_read_paragraphs:async w=>{let T=await s.readPrompts(f(),w,{single:!1});return{status:T.status,error:T.error?`lm_read_paragraphs: ${T.error}`:null,prompts:"prompts"in T?T.prompts:[]}},lm_members:async w=>{let T=await s.listMembers(f(),w);return{status:T.status,error:T.error?`lm_members: ${T.error}`:null,members:"members"in T?T.members:[]}},lm_member:async(w,T)=>{try{let k=await s.resolveMember(f(),w,T);if(k.status==="ok")return{status:"ok",error:null,member:k.member,isLead:k.isLead,teamfile:k.teamfile};let x="code"in k?k.code:k.errorCode;return{status:k.status,error:k.error?`lm_member: ${k.error}`:null,...x?{code:x}:{}}}catch(k){return{status:"error",error:`lm_member: ${k instanceof Error?k.message:String(k)}`}}},lm_lint:async w=>{if(typeof w!="string"||!w)throw Error("lm_lint: teamfile must be nonempty");let T=await s.lintTeam(f(),w);return{status:T.status==="ok"?"ok":"error",error:T.error,errors:"errors"in T?T.errors:[{alias:"",message:`lm_lint: ${T.error}`}],warnings:"warnings"in T?T.warnings:[],counts:"counts"in T?T.counts:{errors:1,warnings:0}}},lm_seed:async(w,T={})=>{if(typeof w!="string"||!w)throw Error("lm_seed: teamfile must be nonempty");if(!zr(T))throw Error("lm_seed: options must be a map");let k=a(),x=await o.run({...k,stderr:L=>{L.startsWith("error:")||k.stderr(L)}},()=>s.seedTeam(f(),w,zr(T)?{preamble:T.preamble}:T)),C="code"in x?x.code:void 0;return C==="provider"&&k.stderr(`error: lm_seed: ${x.error}
2388
2388
  `),{status:x.status,error:x.error?`lm_seed: ${x.error}`:null,...C?{code:C}:{},seeded:"seeded"in x&&Array.isArray(x.seeded)?x.seeded:[]}},lm_agent:(w,T,k={},x=!1)=>x?ly():b(w,T,k),lm_agent_message:async(w,T,k={},x=!1)=>{if(x)return{...ly(),message:null};let C=await b(w,T,k),L=C.status==="ok"&&w?.sessionid?await s.agentMessage(f(),w.provider,w.sessionid,C.reply):null;return{...C,message:L}},lm_prompt:async(w,T,k,x={},C=!1)=>{if(C)return ly();try{let L=await s.promptMember(f(),{teamfile:w,alias:T,prompt:k,permissionMode:x?.permissionMode??"yolo",idleTimeoutMs:x?.idleTimeoutMs,messageType:x?.messageType});return{status:L.status,reply:L.reply,error:L.error?`lm_prompt: ${L.error}`:null,message_id:L.messageId,team_chat_log_id:L.teamChatLogId}}catch(L){return{status:"error",reply:"",error:`lm_prompt: ${L instanceof Error?L.message:String(L)}`,message_id:null,team_chat_log_id:null}}},lm_session_list:async(w={})=>{if(w!==void 0&&!zr(w))throw Error("lm_session_list: options must be a map");let T=await s.listSessions(f(),zr(w)?{provider:w.provider,workspace:w.sessiondir,all:w.all}:w),k="code"in T?T.code:void 0;return{status:T.status,error:T.error?`lm_session_list: ${T.error}`:null,...k?{code:k}:{},sessions:"sessions"in T?T.sessions:[]}},lm_session_get:async w=>{try{let T=await s.getSession(f(),w);if(T.status==="ok")return{status:"ok",error:null,messages:T.messages};if(T.status==="not_found")return{status:"not_found",error:null};let k="code"in T&&T.code?T.code:void 0;return{status:T.status,error:T.error?`lm_session_get: ${T.error}`:null,...k?{code:k}:{}}}catch(T){let k=bA(T);return{status:"error",error:`lm_session_get: ${T instanceof Error?T.message:String(T)}`,code:k}}},lm_session_delete:async(w,T={})=>{let k=await s.deleteSession(f(),w,{force:T?.force});return k.status==="deleted"&&(m.delete(JSON.stringify([w.provider,w.sessionid])),w.sessionid=null),{status:k.status,error:k.error?`lm_session_delete: ${k.error}`:null}},lm_session_turn:async(w,T,k={})=>{try{let x=await s.nativeSessionRequest(f(),w,T,k);return{status:x.status,reply:x.reply??"",error:x.error?`lm_session_turn: ${x.error}`:null,message_id:x.messageId??null,team_chat_log_id:x.teamChatLogId??null,..."code"in x&&x.code?{code:x.code}:{},..."outcome"in x?{outcome:x.outcome,service_epoch:x.service_epoch,connection_epoch:x.connection_epoch,connection_state:x.connection_state}:{}}}catch(x){return{status:"error",reply:"",error:`lm_session_turn: ${x instanceof Error?x.message:String(x)}`,code:"internal",message_id:null,team_chat_log_id:null}}},lm_session_close:async w=>{try{let T=await s.nativeSessionClose(f(),w);return{status:T.status,error:T.error?`lm_session_close: ${T.error}`:null,..."code"in T&&T.code?{code:T.code}:{},..."outcome"in T?{outcome:T.outcome,service_epoch:T.service_epoch,connection_epoch:T.connection_epoch,connection_state:T.connection_state}:{}}}catch(T){return{status:"error",error:`lm_session_close: ${T instanceof Error?T.message:String(T)}`,code:"internal"}}},lm_ratelimit_readings:async(w={})=>{let T=await s.readRatelimits(f(),w);return T.status==="ok"?{status:"ok",error:null,readings:T.readings}:{status:"error",error:`lm_ratelimit_readings: ${T.error}`,readings:[]}},lm_terminal:async(w,T)=>{let k=await s.openTerminal(f(),{teamfile:w,alias:T},{stdin:t.stdin??process.stdin,stdout:process.stdout,stderr:process.stderr});return{status:k.status,error:k.error?`lm_terminal: ${k.error}`:null,exit_code:k.code??1,signal:k.signal??null,...k.errorCode?{code:k.errorCode}:{}}},lm_running:async(w={})=>{if(w!==void 0&&!zr(w))throw Error("lm_running: options must be a map");try{let T=await s.listRunning(f(),zr(w)?w:{}),k="code"in T&&T.code?T.code:void 0;return{status:T.status,error:T.error?`lm_running: ${T.error}`:null,...k?{code:k}:{},running:"running"in T&&Array.isArray(T.running)?T.running:[],dead:"dead"in T&&Array.isArray(T.dead)?T.dead:[],idle:"idle"in T&&Array.isArray(T.idle)?T.idle:[]}}catch(T){let k=bA(T);return{status:"error",error:`lm_running: ${T instanceof Error?T.message:String(T)}`,code:k,running:[],dead:[],idle:[]}}},lm_fanout:(w,T,k={})=>{if(!Array.isArray(w))throw Error("lm_fanout: participants must be an array");if(w.length===0)return[];if(!zr(k))throw Error("lm_fanout: options must be a map");let x=typeof T=="string"?w.map(()=>T):T;if(!Array.isArray(x)||x.length!==w.length||x.some(C=>typeof C!="string"))throw Error("lm_fanout: prompts must match participants");return Promise.all(w.map((C,L)=>b(C,x[L],k)))},lm_batch_open:async(w,T,k,x={})=>{if(!po())throw Error("lm_batch_open requires an authorized script invocation");if(typeof w!="string"){if(!w||typeof w!="object"||Array.isArray(w)||typeof w.provider!="string"||!w.provider.trim())throw Error("lm_batch_open: member map requires provider");if(k!==void 0||T!=null&&!zr(T))throw Error("lm_batch_open: options must be a map");if(w.sessionid){let F=await s.openNativeSession(f(),w,T??{});if(F.status==="busy")return a().stderr(F.error+`
2389
2389
  `),null;let Z=v("lm_batch_open",F),q={};return l.set(q,Z.session),R(q)}let P={id:`member-batch-${Date.now()}-${Math.random()}`,kind:"agent"},j={member:{...w},source:w,options:{...T??{}},closed:!1,failed:!1,busy:!1};return c.set(P,j),Object.defineProperties(P,{member:{enumerable:!0,get:()=>j.member},sourceMember:{enumerable:!0,get:()=>j.source},options:{enumerable:!0,get:()=>j.options},closed:{enumerable:!0,get:()=>j.closed},failed:{enumerable:!0,get:()=>j.failed},inFlight:{enumerable:!0,get:()=>j.busy}}),R(P)}if(typeof T!="string"||typeof k!="string")throw Error("lm_batch_open(teamfile, alias, batchfile, options): alias and batchfile are required");let C=await s.openTeamBatch(f(),{teamfile:w,alias:T,label:k,promptCount:Number(x?.promptCount??1),legacy:!!x?.legacy});if(C.status!=="ok"){if("code"in C&&(C.code==="provider"||C.code==="cancelled"))throw _("lm_batch_open",C);return a().stderr(`error: lm_batch_open: ${C.error}
2390
- `),null}let L={};return u.set(L,C.batch),I(L),R(L)},lm_batch_turn:async(w,T,k,x)=>{w=E(w);let C=w&&l.get(w);if(C){let P=await s.nativeSessionTurn(f(),C,T);return{status:P.status,reply:P.reply,error:P.error,message_id:P.messageId,team_chat_log_id:P.teamChatLogId}}if(k===void 0||x===void 0)throw Error("lm_batch_turn: index and total are required for non-native batches");let L=w&&typeof w=="object"?c.get(w):void 0;if(!L){let P=S(w);if(!P)throw Error("lm_batch_turn: invalid or unmanaged handle");let j=await s.batchTurn(f(),P,T,k,x);return j.status!=="ok"&&j.status!=="busy"&&(w.observedError=j.error??j.status),I(w),{status:j.status,reply:j.reply,error:j.error?`lm_batch_turn: ${j.error}`:null}}if(L.closed||L.failed)return{status:"error",error:"Batch is closed or stopped after a failed turn",reply:""};if(L.busy)return{status:"busy",error:"Batch already has an active turn",reply:""};L.busy=!0;try{let P=L.member.sessionid,j=await b(L.member,T,L.options);return L.member.sessionid&&L.source.provider===L.member.provider&&L.source.sessionid===P&&(L.source.sessionid=L.member.sessionid),j.status!=="ok"&&(L.failed=!0),{status:j.status,reply:j.reply.replace(/\n+$/u,""),error:j.error}}finally{L.busy=!1}},lm_batch_close:async(w,T="done",k)=>{let x=E(w,"lm_batch_close",!0);if(!x)return!1;let C=po(),L=C.runtime.authorizeRaw(x,C.scope,"lm_batch_close",!0);if(!await C.runtime.close(L,[T,k]))throw Error("lm_batch_close: resource "+x.id+" close failed");return!0}};return O.prompt_human=async w=>{if(r.env.LMCTL_NON_INTERACTIVE==="1")throw Error("prompt_human is disabled in non-interactive mode");if(p)throw Error("prompt_human: another operator prompt is active");p=!0;let T=w!==null&&typeof w=="object",k=a().stdout,x=t.stdin??process.stdin,C,L,P,j,F,Z=!1,q=()=>{Z=!0,P?.close()};try{let Y=new L2({write(H,W,V){k(String(H)),V()}});if(!T)return await bl(w,x,Y,r.signal);if(L={...w},Array.isArray(w)||typeof L.provider!="string"||!L.provider.trim()||typeof L.sessionid!="string"||!L.sessionid.trim())return{command:"error",args:["prompt_human: session map requires provider and sessionid; call lm_agent first"]};let ne=JSON.stringify([L.provider,L.sessionid]),de=s.sessionAdmission(f(),L);if(de.status==="busy"&&de.busyReason==="turn")return{command:"busy",args:["Agent turn is still running"]};let ee=s.reserveSession(f(),L);if(ee.status!=="ok")return{command:ee.status,args:[ee.error??"Session admission failed"]};if(C=ee.reservation,j={provider:L.provider,sessionid:L.sessionid},F=f().signal,x.destroyed||x.readableEnded)return{command:"eof",args:[]};P=O2({input:x,output:x.isTTY?Y:void 0,terminal:!!x.isTTY,crlfDelay:1/0});let tt=P[Symbol.asyncIterator]();P.on("SIGINT",q),F.addEventListener("abort",q,{once:!0}),F.aborted&&q(),k(`Session ${L.alias??L.provider} (${L.sessionid})
2390
+ `),null}let L={};return u.set(L,C.batch),I(L),R(L)},lm_batch_turn:async(w,T,k,x)=>{w=E(w);let C=w&&l.get(w);if(C){let P=await s.nativeSessionTurn(f(),C,T);return{status:P.status,reply:P.reply,error:P.error,message_id:P.messageId,team_chat_log_id:P.teamChatLogId}}if(k===void 0||x===void 0)throw Error("lm_batch_turn: index and total are required for non-native batches");let L=w&&typeof w=="object"?c.get(w):void 0;if(!L){let P=S(w);if(!P)throw Error("lm_batch_turn: invalid or unmanaged handle");let j=await s.batchTurn(f(),P,T,k,x);return j.status!=="ok"&&j.status!=="busy"&&(w.observedError=j.error??j.status),I(w),{status:j.status,reply:j.reply,error:j.error?`lm_batch_turn: ${j.error}`:null}}if(L.closed||L.failed)return{status:"error",error:"Batch is closed or stopped after a failed turn",reply:""};if(L.busy)return{status:"busy",error:"Batch already has an active turn",reply:""};L.busy=!0;try{let P=L.member.sessionid,j=await b(L.member,T,L.options);return L.member.sessionid&&L.source.provider===L.member.provider&&L.source.sessionid===P&&(L.source.sessionid=L.member.sessionid),j.status!=="ok"&&(L.failed=!0),{status:j.status,reply:j.reply.replace(/\n+$/u,""),error:j.error}}finally{L.busy=!1}},lm_batch_close:async(w,T="done",k)=>{let x=E(w,"lm_batch_close",!0);if(!x)return!1;let C=po(),L=C.runtime.authorizeRaw(x,C.scope,"lm_batch_close",!0);if(!await C.runtime.close(L,[T,k]))throw Error("lm_batch_close: resource "+x.id+" close failed");return!0}};return O.prompt_human=async w=>{if(r.env.LMCTL_NON_INTERACTIVE==="1")throw Error("prompt_human is disabled in non-interactive mode");if(p)throw Error("prompt_human: another operator prompt is active");p=!0;let T=w!==null&&typeof w=="object",k=a().stdout,x=t.stdin??process.stdin,C,L,P,j,F,Z=!1,q=()=>{Z=!0,P?.close()};try{let Y=new P2({write(H,W,V){k(String(H)),V()}});if(!T)return await bl(w,x,Y,r.signal);if(L={...w},Array.isArray(w)||typeof L.provider!="string"||!L.provider.trim()||typeof L.sessionid!="string"||!L.sessionid.trim())return{command:"error",args:["prompt_human: session map requires provider and sessionid; call lm_agent first"]};let ne=JSON.stringify([L.provider,L.sessionid]),de=s.sessionAdmission(f(),L);if(de.status==="busy"&&de.busyReason==="turn")return{command:"busy",args:["Agent turn is still running"]};let ee=s.reserveSession(f(),L);if(ee.status!=="ok")return{command:ee.status,args:[ee.error??"Session admission failed"]};if(C=ee.reservation,j={provider:L.provider,sessionid:L.sessionid},F=f().signal,x.destroyed||x.readableEnded)return{command:"eof",args:[]};P=M2({input:x,output:x.isTTY?Y:void 0,terminal:!!x.isTTY,crlfDelay:1/0});let tt=P[Symbol.asyncIterator]();P.on("SIGINT",q),F.addEventListener("abort",q,{once:!0}),F.aborted&&q(),k(`Session ${L.alias??L.provider} (${L.sessionid})
2391
2391
  `);let Xe=m.get(ne);if(Xe)for(let H of Xe.lines)k(H+`
2392
2392
  `);else{let H=await s.getSession(f(),L);if(H.status!=="ok")return{command:"error",args:["Could not load session history"]};for(let W of H.messages)(W.role==="user"||W.role==="assistant")&&k(`${W.role==="user"?"You":"Agent"}: ${W.content}
2393
2393
  `)}for(k(`Talk to the agent. Return to the script with /exit [command] [args...].
2394
2394
  `);;){k("You> ");let H=await tt.next();if(Z)return{command:"cancelled",args:[]};if(H.done)return{command:"eof",args:[]};let W=H.value.trim();if(!W)continue;if(/^\/exit(?:\s|$)/u.test(W)){let pe=W.split(/\s+/u).slice(1);return{command:pe.shift()??"exit",args:pe}}let V=await b(L,H.value,Xe?.options??{},C);if(V.reply&&k(`Agent: ${V.reply}
2395
2395
  `),V.status!=="ok")return k(`${V.status}: ${V.error}
2396
- `),{command:V.status,args:[V.error??"Agent turn failed"]}}}catch(Y){if(!T)throw Y;return{command:"error",args:[Y instanceof Error?Y.message:String(Y)]}}finally{try{P?.close()}finally{F?.removeEventListener("abort",q);try{C&&j&&s.releaseSession(f(),j,C).status!=="ok"&&r.reportRecordedError("prompt_human: reservation release failed")}catch{r.reportRecordedError("prompt_human: reservation release failed")}finally{p=!1}}}},O.run_script=async(w,T=[],k={})=>{let x=P2(r.cwd,String(w)),C=M2(x,"utf8"),L=Array.isArray(T)?T.map(String):[],P=k?.output??"capture";if(P!=="capture"&&P!=="stream")throw Error("run_script output must be capture or stream");let j="",F=a(),Z=o.getStore()?.errors,q=[],Y=ur({source_kind:"file",script_file:x,source_name:x,parent_run_id:(o.getStore()?.executionOrigin??r.executionOrigin).run_id}),ne={executionOrigin:Y,errors:q,stdout:ee=>{j+=ee,P==="stream"&&F.stdout(ee)},stderr:ee=>F.stderr(ee)},de=r.createChildEngine?r.createChildEngine({args:L,excludeBuiltins:["lmctl"]}):new mr({resolveHostModule:r.resolveHostModule??t.resolveHostModule});if(!r.createChildEngine){for(let ee of r.nativeModules??t.nativeModules??[])de.registerNativeModule(ee);for(let ee of r.builtinProviders??t.builtinProviders??[])ee.name!=="lmctl"&&de.registerBuiltinProvider(ee);de.setGlobal("args",L),de.setGlobal("ARGV",[...L])}return de.registerBuiltinProvider({...n,activate:ee=>({functions:O,globals:{},loadProperties:h,getRecordedErrors:()=>[...q],dispose(){}})}),o.run(ne,async()=>{let ee=await de.runAsync(C,{noPreflight:r.noPreflight,file:x,entryLocation:x,executionOrigin:Y,propertyStore:r.propertyStore,reservedFunctionPrefixes:r.reservedFunctionPrefixes??["lm_","lmbee_"],builtinProviderNames:r.builtinProviderNames??["lmctl","lmbee"],resolveHostModule:r.resolveHostModule??t.resolveHostModule,hostContext:{cwd:r.cwd,env:r.env,platform:r.platform},signal:r.signal,stdout:V=>ne.stdout(V+`
2396
+ `),{command:V.status,args:[V.error??"Agent turn failed"]}}}catch(Y){if(!T)throw Y;return{command:"error",args:[Y instanceof Error?Y.message:String(Y)]}}finally{try{P?.close()}finally{F?.removeEventListener("abort",q);try{C&&j&&s.releaseSession(f(),j,C).status!=="ok"&&r.reportRecordedError("prompt_human: reservation release failed")}catch{r.reportRecordedError("prompt_human: reservation release failed")}finally{p=!1}}}},O.run_script=async(w,T=[],k={})=>{let x=F2(r.cwd,String(w)),C=D2(x,"utf8"),L=Array.isArray(T)?T.map(String):[],P=k?.output??"capture";if(P!=="capture"&&P!=="stream")throw Error("run_script output must be capture or stream");let j="",F=a(),Z=o.getStore()?.errors,q=[],Y=ur({source_kind:"file",script_file:x,source_name:x,parent_run_id:(o.getStore()?.executionOrigin??r.executionOrigin).run_id}),ne={executionOrigin:Y,errors:q,stdout:ee=>{j+=ee,P==="stream"&&F.stdout(ee)},stderr:ee=>F.stderr(ee)},de=r.createChildEngine?r.createChildEngine({args:L,excludeBuiltins:["lmctl"]}):new mr({resolveHostModule:r.resolveHostModule??t.resolveHostModule});if(!r.createChildEngine){for(let ee of r.nativeModules??t.nativeModules??[])de.registerNativeModule(ee);for(let ee of r.builtinProviders??t.builtinProviders??[])ee.name!=="lmctl"&&de.registerBuiltinProvider(ee);de.setGlobal("args",L),de.setGlobal("ARGV",[...L])}return de.registerBuiltinProvider({...n,activate:ee=>({functions:O,globals:{},loadProperties:h,getRecordedErrors:()=>[...q],dispose(){}})}),o.run(ne,async()=>{let ee=await de.runAsync(C,{noPreflight:r.noPreflight,file:x,entryLocation:x,executionOrigin:Y,propertyStore:r.propertyStore,reservedFunctionPrefixes:r.reservedFunctionPrefixes??["lm_","lmbee_"],builtinProviderNames:r.builtinProviderNames??["lmctl","lmbee"],resolveHostModule:r.resolveHostModule??t.resolveHostModule,hostContext:{cwd:r.cwd,env:r.env,platform:r.platform},signal:r.signal,stdout:V=>ne.stdout(V+`
2397
2397
  `),stderr:V=>ne.stderr(V.endsWith(`
2398
2398
  `)?V:V+`
2399
2399
  `)}),tt=ee.exitCode??(ee.success&&(ee.errors?.length??0)===0?0:1),Xe=(ee.diagnostics??[]).filter(V=>V.severity==="error"&&!(ee.errors??[]).includes(V.message)),H=[...ee.errors??[],...Xe.map(V=>V.message)],W=[...q];for(let V of H){let pe=W.indexOf(V);pe>=0?W.splice(pe,1):r.reportRecordedError(V)}Z?.push(...H);for(let V of Xe)ne.stderr(`error:${V.file&&V.file!=="<main>"?V.file:x}:${V.line}:${V.column}: ${V.message}
2400
2400
  `);return{success:tt===0,stdout:j,output:ee.output,exit_code:tt,code:tt,value:ee.value,errors:[...ee.errors??[],...Xe.map(V=>V.message)]}})},{functions:O,globals:g,loadProperties:h,async dispose(){r.signal?.removeEventListener("abort",y);for(let w of d.values()){let T=c.get(w);T&&(T.closed=!0)}if(i){let w=await i.close();for(let T of d.values())if(S(T))try{I(T),T.closed=!0}catch(k){w.errors.push(k instanceof Error?k.message:String(k))}if(w.errors.length)throw Error(w.errors.join(`
2401
- `))}}}}};return n}var F2,$2,j2,ay,_d,ly,H2,zr,wA,B2,SA=M(()=>{"use strict";Un();Xs();iv();F2=[{name:"lm_exit",arity:{min:0,max:1}},{name:"lm_log",arity:{min:1},params:[{name:"value",type:"any"},{name:"values",type:"any",rest:!0}]},{name:"lm_error",arity:{min:1}},{name:"lm_read_paragraphs",arity:1},{name:"lm_fanout",arity:{min:2,max:3}},{name:"lm_agent_message",arity:{min:2,max:3},params:[{name:"member",type:"map"},{name:"prompt",type:"string"},{name:"options",type:"map",optional:!0}]},{name:"lm_batch_open",arity:{min:1,max:4},returnsResource:dt.find(t=>t.name==="openTeamBatch")?.returnsResource===!0},{name:"lm_batch_turn",arity:{min:2,max:4},params:[{name:"batch",type:"any"},{name:"prompt",type:"string"},{name:"index",type:"number",optional:!0},{name:"total",type:"number",optional:!0}],usesResource:!0},{name:"lm_batch_close",arity:{min:1,max:3},closesResource:!0},{name:"prompt_human",arity:{min:0,max:1},override:!0},{name:"run_script",arity:{min:1,max:3},override:!0}],$2=dt.filter(t=>"scriptBinding"in t).map(t=>{let e=t.scriptBinding;return{name:e.name,arity:{min:e.params.filter(n=>!n.optional).length,max:e.params.length},params:e.params,doc:{name:e.name,description:t.summary,module:"lmctl",category:"lmctl Automation",signature:e.name+"("+e.params.map(n=>n.name).join(", ")+")"}}}),j2={lm_members:"map",lm_member:"map",lm_read_prompts:"map",lm_read_paragraphs:"map",lm_prompt:"map",lm_agent:"map",lm_agent_message:"map",lm_fanout:"array",lm_lint:"map",lm_seed:"map",lm_session_list:"map",lm_session_get:"map",lm_session_delete:"map",lm_ratelimit_readings:"map",lm_terminal:"map",lm_session_turn:"map",lm_session_close:"map",lm_running:"map",lm_batch_open:"ResourceHandle|null",lm_batch_turn:"map",lm_batch_close:"boolean",lm_log:"string",lm_error:"string",lm_exit:"never",prompt_human:"string|map|null",run_script:"map"},ay={name:"dryrun",type:"boolean",optional:!0},_d=new Set(dt.filter(t=>["readPrompts","listMembers"].includes(t.name)&&t.effects.length>0&&t.effects.every(e=>e==="file-read")).map(t=>t.scriptBinding.name));_d.has("lm_read_prompts")&&_d.add("lm_read_paragraphs");ly=()=>({status:"ok",reply:"",error:null,message_id:null,team_chat_log_id:null,dry:!0}),H2={functions:[...$2,...F2].map(U2).map(t=>({...t,returnType:j2[t.name],doc:(()=>{let e=sv.find(n=>n.name===t.name)??("doc"in t?t.doc:void 0);return e?{...e,module:"lmctl"}:void 0})()})),globals:[],properties:{known:km,removedGlobals:Rm}},zr=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),wA=t=>t.map(e=>e!==null&&typeof e=="object"?JSON.stringify(e):String(e)).join(" ");B2=EA()});var cy,Fa,uy,dy=M(()=>{"use strict";cy=[{name:"db",type:"string",required:!0},{name:"local_scope",type:"string",required:!0},{name:"conversationid",type:"string",required:!0},{name:"escalationid",type:"string"}],Fa=[{name:"lmbee_job_read",description:"Read live parent or child rows, including claimed rows.",keys:[...cy,{name:"row",type:"string",required:!0,values:["job","escalation"]}]},{name:"lmbee_job_write",description:"Insert or conditionally update one exact parent or child; commit before returning.",keys:[...cy,{name:"row",type:"string",required:!0,values:["job","escalation"]},{name:"operation",type:"string",required:!0,values:["insert","update"]},{name:"values",type:"map",required:!0},{name:"where",type:"map"}]},{name:"lmbee_job_claim",description:"Reserve one eligible unclaimed child in an immediate transaction; eligibility is script-defined.",keys:[...cy,{name:"where",type:"map",required:!0},{name:"state",type:"string",required:!0}]}],uy="Returns {status, code, rows, applied, error}. status: ok, no_rows, not_applied, error, cancelled. Error codes: invalid_argument, selection_failed, database_unavailable, write_rejected. Failures have no partial rows or applied writes. Inspect status: interpreter success alone is not storage success. Cancellation is separate; programmer faults throw."});import{existsSync as kA}from"node:fs";import{createRequire as W2}from"node:module";import{dirname as q2}from"node:path";function X2(){return my===null&&(my=W2(import.meta.url)("node:sqlite").DatabaseSync),my}function V2(t){return J2[t]??G2[t&255]??`SQLITE_UNKNOWN_${t}`}function Ln(t){if(t!==null&&typeof t=="object"){let e=t;if(typeof e.errcode=="number")throw e.code=V2(e.errcode),t;if(e.code==="ERR_INVALID_ARG_TYPE"&&/cannot be bound/.test(String(e.message)))throw new TypeError(z2);if(e.code==="ERR_INVALID_STATE"&&/database is not open/.test(String(e.message)))throw new TypeError("The database connection is not open")}throw t}function K2(){let t="unable to open database file";return Object.assign(new Error(t),{code:"SQLITE_CANTOPEN",errcode:14,errstr:t})}function RA(t){return t instanceof Uint8Array&&!Buffer.isBuffer(t)?Buffer.from(t.buffer,t.byteOffset,t.byteLength):t}function Y2(t){if(t==null)return t;if(Array.isArray(t))return t.map(RA);if(typeof t=="object"){let e={};for(let[n,r]of Object.entries(t))e[n]=RA(r);return e}return t}function Q2(t){if(t===null||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array)return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function vd(t){return t.map((e,n)=>{if(e===void 0)return null;if(n===0&&Q2(e)){let r={};for(let[s,i]of Object.entries(e))r[s]=i===void 0?null:i;return r}return e})}function Z2(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function eX(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}var my,G2,J2,z2,py,fy,gy,hy=M(()=>{"use strict";my=null;G2={1:"SQLITE_ERROR",2:"SQLITE_INTERNAL",3:"SQLITE_PERM",4:"SQLITE_ABORT",5:"SQLITE_BUSY",6:"SQLITE_LOCKED",7:"SQLITE_NOMEM",8:"SQLITE_READONLY",9:"SQLITE_INTERRUPT",10:"SQLITE_IOERR",11:"SQLITE_CORRUPT",12:"SQLITE_NOTFOUND",13:"SQLITE_FULL",14:"SQLITE_CANTOPEN",15:"SQLITE_PROTOCOL",16:"SQLITE_EMPTY",17:"SQLITE_SCHEMA",18:"SQLITE_TOOBIG",19:"SQLITE_CONSTRAINT",20:"SQLITE_MISMATCH",21:"SQLITE_MISUSE",22:"SQLITE_NOLFS",23:"SQLITE_AUTH",24:"SQLITE_FORMAT",25:"SQLITE_RANGE",26:"SQLITE_NOTADB",27:"SQLITE_NOTICE",28:"SQLITE_WARNING"},J2={261:"SQLITE_BUSY_RECOVERY",517:"SQLITE_BUSY_SNAPSHOT",773:"SQLITE_BUSY_TIMEOUT",262:"SQLITE_LOCKED_SHAREDCACHE",518:"SQLITE_LOCKED_VTAB",264:"SQLITE_READONLY_RECOVERY",520:"SQLITE_READONLY_CANTLOCK",776:"SQLITE_READONLY_ROLLBACK",1032:"SQLITE_READONLY_DBMOVED",1288:"SQLITE_READONLY_CANTINIT",1544:"SQLITE_READONLY_DIRECTORY",270:"SQLITE_CANTOPEN_NOTEMPDIR",526:"SQLITE_CANTOPEN_ISDIR",782:"SQLITE_CANTOPEN_FULLPATH",1038:"SQLITE_CANTOPEN_CONVPATH",1294:"SQLITE_CANTOPEN_DIRTYWAL",1550:"SQLITE_CANTOPEN_SYMLINK",275:"SQLITE_CONSTRAINT_CHECK",531:"SQLITE_CONSTRAINT_COMMITHOOK",787:"SQLITE_CONSTRAINT_FOREIGNKEY",1043:"SQLITE_CONSTRAINT_FUNCTION",1299:"SQLITE_CONSTRAINT_NOTNULL",1555:"SQLITE_CONSTRAINT_PRIMARYKEY",1811:"SQLITE_CONSTRAINT_TRIGGER",2067:"SQLITE_CONSTRAINT_UNIQUE",2323:"SQLITE_CONSTRAINT_VTAB",2579:"SQLITE_CONSTRAINT_ROWID",2835:"SQLITE_CONSTRAINT_PINNED",3091:"SQLITE_CONSTRAINT_DATATYPE"};z2="SQLite3 can only bind numbers, strings, bigints, buffers, and null";py=class{handle;pluckMode=!1;arrayMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0),this.handle.setAllowUnknownNamedParameters(!0)}get source(){return this.handle.sourceSQL}run(...e){try{let n=this.handle.run(...vd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Ln(n)}}get(...e){try{return this.project(this.handle.get(...vd(e)))}catch(n){Ln(n)}}all(...e){try{return this.handle.all(...vd(e)).map(n=>this.project(n))}catch(n){Ln(n)}}*iterate(...e){let n;try{n=this.handle.iterate(...vd(e))}catch(r){Ln(r)}for(;;){let r;try{r=n.next()}catch(s){Ln(s)}if(r.done)return;yield this.project(r.value)}}raw(e=!0){return this.arrayMode=e,this.handle.setReturnArrays(e||this.pluckMode),this}pluck(e=!0){return this.pluckMode=e,this.handle.setReturnArrays(e||this.arrayMode),this}project(e){let n=Y2(e);return this.pluckMode&&Array.isArray(n)?n[0]:n}},fy=class{name;memory;readonly;handle;savepointId=0;constructor(e,n={}){let r=e===":memory:"||e==="";if(n.readonly===!0&&r)throw new TypeError("In-memory/temporary databases cannot be readonly");if(!r&&!kA(q2(e)))throw new TypeError("Cannot open database because the directory does not exist");if(n.fileMustExist===!0&&!r&&!kA(e))throw K2();this.name=e,this.memory=r,this.readonly=n.readonly===!0;try{this.handle=new(X2())(e,{readOnly:this.readonly,timeout:n.timeout??5e3,enableForeignKeyConstraints:n.foreignKeys??!0})}catch(s){Ln(s)}}get open(){return this.handle.isOpen}get inTransaction(){return this.handle.isTransaction}prepare(e){try{return new py(this.handle.prepare(e))}catch(n){Ln(n)}}exec(e){try{return this.handle.exec(e),this}catch(n){Ln(n)}}pragma(e,n){let r=this.prepare(`PRAGMA ${e}`);return n?.simple===!0?r.pluck().get():r.all()}transaction(e){let n=s=>(...i)=>this.runTransaction(s,e,i),r=n("BEGIN");return r.default=n("BEGIN"),r.deferred=n("BEGIN DEFERRED"),r.immediate=n("BEGIN IMMEDIATE"),r.exclusive=n("BEGIN EXCLUSIVE"),r}serialize(){try{let e=this.handle.serialize();return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}catch(e){Ln(e)}}close(){if(!this.handle.isOpen)return this;try{return this.handle.close(),this}catch(e){Ln(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let i=n(...r);return this.exec("COMMIT"),i}catch(i){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(o){if(!Z2(o))throw o}throw i}}let s=`lmbee_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${s}`);try{let i=n(...r);return this.exec(`RELEASE ${s}`),i}catch(i){if(this.inTransaction)try{this.exec(`ROLLBACK TO ${s}`),this.exec(`RELEASE ${s}`)}catch(o){if(!eX(o))throw o}throw i}}};gy=fy});import{existsSync as Sse,lstatSync as tX,mkdirSync as kse,readFileSync as Rse,realpathSync as IA}from"node:fs";import{basename as nX,dirname as AA,isAbsolute as rX,join as sX,relative as iX,resolve as xA}from"node:path";import{fileURLToPath as oX}from"node:url";function CA(t){let e=process.env.LMBEE_TEST_DB_ROOT;if(!e||t===":memory:")return;let n=[],r=xA(t);for(;tX(r,{throwIfNoEntry:!1})===void 0;){n.unshift(nX(r));let o=AA(r);if(o===r)throw new Error("Cannot resolve test database path");r=o}let s=xA(IA(r),...n),i=iX(IA(e),s);if(i===".."||i.startsWith("../")||i.startsWith("..\\")||rX(i))throw new Error(`Database path is outside the test database root: ${t}`)}function NA(t){let e=s=>t.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(s)!==void 0,n=s=>t.prepare(`PRAGMA table_info(${s})`).all(),r;for(let s of["queue_responses","chat_tasks","chat_messages","chat_message_task_reassignments"])if(e(s)){r=`legacy table '${s}'`;break}if(r===void 0&&e("answers")){let s=new Set(n("answers").map(i=>i.name));s.has("request_queue_id")?r="legacy column 'answers.request_queue_id'":s.has("superseded_at")||(r="legacy 'answers' shape: missing column 'superseded_at'")}if(r===void 0&&e("queue")){let s=n("queue"),i=new Set(s.map(o=>o.name));i.has("team")?r="legacy column 'queue.team'":i.has("to_id")?s.some(o=>o.name==="from_id"&&o.notnull!==1)?r="legacy 'queue' shape: from_id is still nullable":i.has("restart_nudge_sent_ts")&&(r="legacy column 'queue.restart_nudge_sent_ts'"):r="legacy 'queue' shape: missing column 'to_id'"}if(r===void 0&&e("cron_jobs")){let s=t.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'cron_jobs'").get();(s===void 0||!s.sql.includes("'miniplayer'"))&&(r="legacy 'cron_jobs' CHECK constraint predates 'miniplayer'")}if(r===void 0&&e("cron_jobs")){let s=t.prepare("SELECT id, action_payload FROM cron_jobs WHERE action_kind = 'enqueue'").all();for(let i of s){let o;try{o=JSON.parse(i.action_payload)}catch{o=void 0}let a=typeof o=="object"&&o!==null?o.prompt:void 0;if(typeof a!="string"||a.trim().length===0){r=`legacy 'cron_jobs' enqueue payload (id ${i.id}) predates the 'prompt' vocabulary`;break}}}if(r===void 0&&e("team_progress")&&new Set(n("team_progress").map(i=>i.name)).has("last_scan_head")&&(r="legacy column 'team_progress.last_scan_head'"),r===void 0&&e("cron_runs")&&(new Set(n("cron_runs").map(i=>i.name)).has("execution_state")||(r="legacy 'cron_runs' shape: missing column 'execution_state'")),r===void 0&&e("rate_limit_policy_log")){let s=t.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'rate_limit_policy_log'").get();(s===void 0||!s.sql.includes("'confirmed_would_fire_policy_disabled'"))&&(r="legacy 'rate_limit_policy_log' CHECK constraint predates 'confirmed_would_fire_policy_disabled'")}if(r===void 0&&e("rate_limit_policy_arm")&&(new Set(n("rate_limit_policy_arm").map(i=>i.name)).has("armed_used_fraction")||(r="legacy 'rate_limit_policy_arm' shape: missing column 'armed_used_fraction'")),r!==void 0)throw new Error(`Refusing to open this lmbee state.db: abandoned pre-v14 lmbee schema shape (${r}). Per the operator's 2026-10-01 shared-database decision, lmbee now shares lmctl's state.db and every pre-existing lmbee-only database is abandoned -- there is no data migration, ever. Do not remove a shared lmctl database. Check LMBEE_DB and the database ownership; point lmbee at the intended compatible database. Preserve this file for operator review.`)}function OA(t){let e=t.pragma("user_version",{simple:!0});if(e<=bd)return;let n;if(t.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'schema_meta'").get()!==void 0){let s=new Set(t.prepare("PRAGMA table_info(schema_meta)").all().map(i=>i.name));if(s.has("key")&&s.has("value")){let i=t.prepare("SELECT value FROM schema_meta WHERE key = 'min_reader_version'").get();typeof i?.value=="string"&&(n=i.value)}}let r;if(n===void 0)r="schema_meta.min_reader_version is absent";else if(!/^[1-9]\d*$/.test(n))r=`schema_meta.min_reader_version=${JSON.stringify(n)} is malformed (not a canonical decimal integer)`;else if(Number(n)>bd)r=`schema_meta.min_reader_version=${n} declares a breaking floor above ${bd}`;else return;throw new Error(`Refusing to open the shared state.db: it was migrated by a newer lmctl with breaking changes (user_version=${e} exceeds the newest lmctl schema version this lmbee build understands, ${bd}, and ${r}). Upgrade lmbee to a build that understands the newer lmctl schema before opening this database again. lmbee never writes user_version or schema_meta, so the file is untouched.`)}var Ase,bd,LA=M(()=>{"use strict";hy();Ase=sX(AA(oX(import.meta.url)),"schema.sql");bd=62});import{resolve as aX,isAbsolute as lX}from"node:path";function _y(t){t.exec(`CREATE TABLE IF NOT EXISTS workflow_jobs (
2401
+ `))}}}}};return n}var j2,U2,H2,ay,_d,ly,W2,zr,wA,q2,SA=M(()=>{"use strict";Un();Xs();iv();j2=[{name:"lm_exit",arity:{min:0,max:1}},{name:"lm_log",arity:{min:1},params:[{name:"value",type:"any"},{name:"values",type:"any",rest:!0}]},{name:"lm_error",arity:{min:1}},{name:"lm_read_paragraphs",arity:1},{name:"lm_fanout",arity:{min:2,max:3}},{name:"lm_agent_message",arity:{min:2,max:3},params:[{name:"member",type:"map"},{name:"prompt",type:"string"},{name:"options",type:"map",optional:!0}]},{name:"lm_batch_open",arity:{min:1,max:4},returnsResource:dt.find(t=>t.name==="openTeamBatch")?.returnsResource===!0},{name:"lm_batch_turn",arity:{min:2,max:4},params:[{name:"batch",type:"any"},{name:"prompt",type:"string"},{name:"index",type:"number",optional:!0},{name:"total",type:"number",optional:!0}],usesResource:!0},{name:"lm_batch_close",arity:{min:1,max:3},closesResource:!0},{name:"prompt_human",arity:{min:0,max:1},override:!0},{name:"run_script",arity:{min:1,max:3},override:!0}],U2=dt.filter(t=>"scriptBinding"in t).map(t=>{let e=t.scriptBinding;return{name:e.name,arity:{min:e.params.filter(n=>!n.optional).length,max:e.params.length},params:e.params,doc:{name:e.name,description:t.summary,module:"lmctl",category:"lmctl Automation",signature:e.name+"("+e.params.map(n=>n.name).join(", ")+")"}}}),H2={lm_members:"map",lm_member:"map",lm_read_prompts:"map",lm_read_paragraphs:"map",lm_prompt:"map",lm_agent:"map",lm_agent_message:"map",lm_fanout:"array",lm_lint:"map",lm_seed:"map",lm_session_list:"map",lm_session_get:"map",lm_session_delete:"map",lm_ratelimit_readings:"map",lm_terminal:"map",lm_session_turn:"map",lm_session_close:"map",lm_running:"map",lm_batch_open:"ResourceHandle|null",lm_batch_turn:"map",lm_batch_close:"boolean",lm_log:"string",lm_error:"string",lm_exit:"never",prompt_human:"string|map|null",run_script:"map"},ay={name:"dryrun",type:"boolean",optional:!0},_d=new Set(dt.filter(t=>["readPrompts","listMembers"].includes(t.name)&&t.effects.length>0&&t.effects.every(e=>e==="file-read")).map(t=>t.scriptBinding.name));_d.has("lm_read_prompts")&&_d.add("lm_read_paragraphs");ly=()=>({status:"ok",reply:"",error:null,message_id:null,team_chat_log_id:null,dry:!0}),W2={functions:[...U2,...j2].map(B2).map(t=>({...t,returnType:H2[t.name],doc:(()=>{let e=sv.find(n=>n.name===t.name)??("doc"in t?t.doc:void 0);return e?{...e,module:"lmctl"}:void 0})()})),globals:[],properties:{known:km,removedGlobals:Rm}},zr=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),wA=t=>t.map(e=>e!==null&&typeof e=="object"?JSON.stringify(e):String(e)).join(" ");q2=EA()});var cy,Fa,uy,dy=M(()=>{"use strict";cy=[{name:"db",type:"string",required:!0},{name:"local_scope",type:"string",required:!0},{name:"conversationid",type:"string",required:!0},{name:"escalationid",type:"string"}],Fa=[{name:"lmbee_job_read",description:"Read live parent or child rows, including claimed rows.",keys:[...cy,{name:"row",type:"string",required:!0,values:["job","escalation"]}]},{name:"lmbee_job_write",description:"Insert or conditionally update one exact parent or child; commit before returning.",keys:[...cy,{name:"row",type:"string",required:!0,values:["job","escalation"]},{name:"operation",type:"string",required:!0,values:["insert","update"]},{name:"values",type:"map",required:!0},{name:"where",type:"map"}]},{name:"lmbee_job_claim",description:"Reserve one eligible unclaimed child in an immediate transaction; eligibility is script-defined.",keys:[...cy,{name:"where",type:"map",required:!0},{name:"state",type:"string",required:!0}]}],uy="Returns {status, code, rows, applied, error}. status: ok, no_rows, not_applied, error, cancelled. Error codes: invalid_argument, selection_failed, database_unavailable, write_rejected. Failures have no partial rows or applied writes. Inspect status: interpreter success alone is not storage success. Cancellation is separate; programmer faults throw."});import{existsSync as kA}from"node:fs";import{createRequire as X2}from"node:module";import{dirname as G2}from"node:path";function J2(){return my===null&&(my=X2(import.meta.url)("node:sqlite").DatabaseSync),my}function K2(t){return z2[t]??V2[t&255]??`SQLITE_UNKNOWN_${t}`}function Ln(t){if(t!==null&&typeof t=="object"){let e=t;if(typeof e.errcode=="number")throw e.code=K2(e.errcode),t;if(e.code==="ERR_INVALID_ARG_TYPE"&&/cannot be bound/.test(String(e.message)))throw new TypeError(Y2);if(e.code==="ERR_INVALID_STATE"&&/database is not open/.test(String(e.message)))throw new TypeError("The database connection is not open")}throw t}function Q2(){let t="unable to open database file";return Object.assign(new Error(t),{code:"SQLITE_CANTOPEN",errcode:14,errstr:t})}function RA(t){return t instanceof Uint8Array&&!Buffer.isBuffer(t)?Buffer.from(t.buffer,t.byteOffset,t.byteLength):t}function Z2(t){if(t==null)return t;if(Array.isArray(t))return t.map(RA);if(typeof t=="object"){let e={};for(let[n,r]of Object.entries(t))e[n]=RA(r);return e}return t}function eX(t){if(t===null||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array)return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function vd(t){return t.map((e,n)=>{if(e===void 0)return null;if(n===0&&eX(e)){let r={};for(let[s,i]of Object.entries(e))r[s]=i===void 0?null:i;return r}return e})}function tX(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function nX(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}var my,V2,z2,Y2,py,fy,gy,hy=M(()=>{"use strict";my=null;V2={1:"SQLITE_ERROR",2:"SQLITE_INTERNAL",3:"SQLITE_PERM",4:"SQLITE_ABORT",5:"SQLITE_BUSY",6:"SQLITE_LOCKED",7:"SQLITE_NOMEM",8:"SQLITE_READONLY",9:"SQLITE_INTERRUPT",10:"SQLITE_IOERR",11:"SQLITE_CORRUPT",12:"SQLITE_NOTFOUND",13:"SQLITE_FULL",14:"SQLITE_CANTOPEN",15:"SQLITE_PROTOCOL",16:"SQLITE_EMPTY",17:"SQLITE_SCHEMA",18:"SQLITE_TOOBIG",19:"SQLITE_CONSTRAINT",20:"SQLITE_MISMATCH",21:"SQLITE_MISUSE",22:"SQLITE_NOLFS",23:"SQLITE_AUTH",24:"SQLITE_FORMAT",25:"SQLITE_RANGE",26:"SQLITE_NOTADB",27:"SQLITE_NOTICE",28:"SQLITE_WARNING"},z2={261:"SQLITE_BUSY_RECOVERY",517:"SQLITE_BUSY_SNAPSHOT",773:"SQLITE_BUSY_TIMEOUT",262:"SQLITE_LOCKED_SHAREDCACHE",518:"SQLITE_LOCKED_VTAB",264:"SQLITE_READONLY_RECOVERY",520:"SQLITE_READONLY_CANTLOCK",776:"SQLITE_READONLY_ROLLBACK",1032:"SQLITE_READONLY_DBMOVED",1288:"SQLITE_READONLY_CANTINIT",1544:"SQLITE_READONLY_DIRECTORY",270:"SQLITE_CANTOPEN_NOTEMPDIR",526:"SQLITE_CANTOPEN_ISDIR",782:"SQLITE_CANTOPEN_FULLPATH",1038:"SQLITE_CANTOPEN_CONVPATH",1294:"SQLITE_CANTOPEN_DIRTYWAL",1550:"SQLITE_CANTOPEN_SYMLINK",275:"SQLITE_CONSTRAINT_CHECK",531:"SQLITE_CONSTRAINT_COMMITHOOK",787:"SQLITE_CONSTRAINT_FOREIGNKEY",1043:"SQLITE_CONSTRAINT_FUNCTION",1299:"SQLITE_CONSTRAINT_NOTNULL",1555:"SQLITE_CONSTRAINT_PRIMARYKEY",1811:"SQLITE_CONSTRAINT_TRIGGER",2067:"SQLITE_CONSTRAINT_UNIQUE",2323:"SQLITE_CONSTRAINT_VTAB",2579:"SQLITE_CONSTRAINT_ROWID",2835:"SQLITE_CONSTRAINT_PINNED",3091:"SQLITE_CONSTRAINT_DATATYPE"};Y2="SQLite3 can only bind numbers, strings, bigints, buffers, and null";py=class{handle;pluckMode=!1;arrayMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0),this.handle.setAllowUnknownNamedParameters(!0)}get source(){return this.handle.sourceSQL}run(...e){try{let n=this.handle.run(...vd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Ln(n)}}get(...e){try{return this.project(this.handle.get(...vd(e)))}catch(n){Ln(n)}}all(...e){try{return this.handle.all(...vd(e)).map(n=>this.project(n))}catch(n){Ln(n)}}*iterate(...e){let n;try{n=this.handle.iterate(...vd(e))}catch(r){Ln(r)}for(;;){let r;try{r=n.next()}catch(s){Ln(s)}if(r.done)return;yield this.project(r.value)}}raw(e=!0){return this.arrayMode=e,this.handle.setReturnArrays(e||this.pluckMode),this}pluck(e=!0){return this.pluckMode=e,this.handle.setReturnArrays(e||this.arrayMode),this}project(e){let n=Z2(e);return this.pluckMode&&Array.isArray(n)?n[0]:n}},fy=class{name;memory;readonly;handle;savepointId=0;constructor(e,n={}){let r=e===":memory:"||e==="";if(n.readonly===!0&&r)throw new TypeError("In-memory/temporary databases cannot be readonly");if(!r&&!kA(G2(e)))throw new TypeError("Cannot open database because the directory does not exist");if(n.fileMustExist===!0&&!r&&!kA(e))throw Q2();this.name=e,this.memory=r,this.readonly=n.readonly===!0;try{this.handle=new(J2())(e,{readOnly:this.readonly,timeout:n.timeout??5e3,enableForeignKeyConstraints:n.foreignKeys??!0})}catch(s){Ln(s)}}get open(){return this.handle.isOpen}get inTransaction(){return this.handle.isTransaction}prepare(e){try{return new py(this.handle.prepare(e))}catch(n){Ln(n)}}exec(e){try{return this.handle.exec(e),this}catch(n){Ln(n)}}pragma(e,n){let r=this.prepare(`PRAGMA ${e}`);return n?.simple===!0?r.pluck().get():r.all()}transaction(e){let n=s=>(...i)=>this.runTransaction(s,e,i),r=n("BEGIN");return r.default=n("BEGIN"),r.deferred=n("BEGIN DEFERRED"),r.immediate=n("BEGIN IMMEDIATE"),r.exclusive=n("BEGIN EXCLUSIVE"),r}serialize(){try{let e=this.handle.serialize();return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}catch(e){Ln(e)}}close(){if(!this.handle.isOpen)return this;try{return this.handle.close(),this}catch(e){Ln(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let i=n(...r);return this.exec("COMMIT"),i}catch(i){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(o){if(!tX(o))throw o}throw i}}let s=`lmbee_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${s}`);try{let i=n(...r);return this.exec(`RELEASE ${s}`),i}catch(i){if(this.inTransaction)try{this.exec(`ROLLBACK TO ${s}`),this.exec(`RELEASE ${s}`)}catch(o){if(!nX(o))throw o}throw i}}};gy=fy});import{existsSync as Rse,lstatSync as rX,mkdirSync as Ise,readFileSync as xse,realpathSync as IA}from"node:fs";import{basename as sX,dirname as AA,isAbsolute as iX,join as oX,relative as aX,resolve as xA}from"node:path";import{fileURLToPath as lX}from"node:url";function CA(t){let e=process.env.LMBEE_TEST_DB_ROOT;if(!e||t===":memory:")return;let n=[],r=xA(t);for(;rX(r,{throwIfNoEntry:!1})===void 0;){n.unshift(sX(r));let o=AA(r);if(o===r)throw new Error("Cannot resolve test database path");r=o}let s=xA(IA(r),...n),i=aX(IA(e),s);if(i===".."||i.startsWith("../")||i.startsWith("..\\")||iX(i))throw new Error(`Database path is outside the test database root: ${t}`)}function NA(t){let e=s=>t.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(s)!==void 0,n=s=>t.prepare(`PRAGMA table_info(${s})`).all(),r;for(let s of["queue_responses","chat_tasks","chat_messages","chat_message_task_reassignments"])if(e(s)){r=`legacy table '${s}'`;break}if(r===void 0&&e("answers")){let s=new Set(n("answers").map(i=>i.name));s.has("request_queue_id")?r="legacy column 'answers.request_queue_id'":s.has("superseded_at")||(r="legacy 'answers' shape: missing column 'superseded_at'")}if(r===void 0&&e("queue")){let s=n("queue"),i=new Set(s.map(o=>o.name));i.has("team")?r="legacy column 'queue.team'":i.has("to_id")?s.some(o=>o.name==="from_id"&&o.notnull!==1)?r="legacy 'queue' shape: from_id is still nullable":i.has("restart_nudge_sent_ts")&&(r="legacy column 'queue.restart_nudge_sent_ts'"):r="legacy 'queue' shape: missing column 'to_id'"}if(r===void 0&&e("cron_jobs")){let s=t.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'cron_jobs'").get();(s===void 0||!s.sql.includes("'miniplayer'"))&&(r="legacy 'cron_jobs' CHECK constraint predates 'miniplayer'")}if(r===void 0&&e("cron_jobs")){let s=t.prepare("SELECT id, action_payload FROM cron_jobs WHERE action_kind = 'enqueue'").all();for(let i of s){let o;try{o=JSON.parse(i.action_payload)}catch{o=void 0}let a=typeof o=="object"&&o!==null?o.prompt:void 0;if(typeof a!="string"||a.trim().length===0){r=`legacy 'cron_jobs' enqueue payload (id ${i.id}) predates the 'prompt' vocabulary`;break}}}if(r===void 0&&e("team_progress")&&new Set(n("team_progress").map(i=>i.name)).has("last_scan_head")&&(r="legacy column 'team_progress.last_scan_head'"),r===void 0&&e("cron_runs")&&(new Set(n("cron_runs").map(i=>i.name)).has("execution_state")||(r="legacy 'cron_runs' shape: missing column 'execution_state'")),r===void 0&&e("rate_limit_policy_log")){let s=t.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'rate_limit_policy_log'").get();(s===void 0||!s.sql.includes("'confirmed_would_fire_policy_disabled'"))&&(r="legacy 'rate_limit_policy_log' CHECK constraint predates 'confirmed_would_fire_policy_disabled'")}if(r===void 0&&e("rate_limit_policy_arm")&&(new Set(n("rate_limit_policy_arm").map(i=>i.name)).has("armed_used_fraction")||(r="legacy 'rate_limit_policy_arm' shape: missing column 'armed_used_fraction'")),r!==void 0)throw new Error(`Refusing to open this lmbee state.db: abandoned pre-v14 lmbee schema shape (${r}). Per the operator's 2026-10-01 shared-database decision, lmbee now shares lmctl's state.db and every pre-existing lmbee-only database is abandoned -- there is no data migration, ever. Do not remove a shared lmctl database. Check LMBEE_DB and the database ownership; point lmbee at the intended compatible database. Preserve this file for operator review.`)}function OA(t){let e=t.pragma("user_version",{simple:!0});if(e<=bd)return;let n;if(t.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'schema_meta'").get()!==void 0){let s=new Set(t.prepare("PRAGMA table_info(schema_meta)").all().map(i=>i.name));if(s.has("key")&&s.has("value")){let i=t.prepare("SELECT value FROM schema_meta WHERE key = 'min_reader_version'").get();typeof i?.value=="string"&&(n=i.value)}}let r;if(n===void 0)r="schema_meta.min_reader_version is absent";else if(!/^[1-9]\d*$/.test(n))r=`schema_meta.min_reader_version=${JSON.stringify(n)} is malformed (not a canonical decimal integer)`;else if(Number(n)>bd)r=`schema_meta.min_reader_version=${n} declares a breaking floor above ${bd}`;else return;throw new Error(`Refusing to open the shared state.db: it was migrated by a newer lmctl with breaking changes (user_version=${e} exceeds the newest lmctl schema version this lmbee build understands, ${bd}, and ${r}). Upgrade lmbee to a build that understands the newer lmctl schema before opening this database again. lmbee never writes user_version or schema_meta, so the file is untouched.`)}var Nse,bd,LA=M(()=>{"use strict";hy();Nse=oX(AA(lX(import.meta.url)),"schema.sql");bd=62});import{resolve as cX,isAbsolute as uX}from"node:path";function _y(t){t.exec(`CREATE TABLE IF NOT EXISTS workflow_jobs (
2402
2402
  local_scope TEXT NOT NULL, conversationid TEXT NOT NULL, status TEXT NOT NULL,
2403
2403
  PRIMARY KEY (local_scope, conversationid)
2404
2404
  );
@@ -2415,14 +2415,14 @@ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}
2415
2415
  UPDATE workflow_escalations
2416
2416
  SET created_at_ms = CAST((julianday('now') - 2440587.5) * 86400000 AS INTEGER)
2417
2417
  WHERE local_scope = NEW.local_scope AND conversationid = NEW.conversationid AND escalationid = NEW.escalationid;
2418
- END`)}function MA(t,e,n){if(!yy(t)||n&&!Object.keys(t).length)throw new Ke("Expected a nonempty column map");let r={};for(let[s,i]of Object.entries(t)){if(!cX[e].includes(s))throw new Ke(`Unknown ${e} column: ${s}`);if(s==="payload"){let o;try{o=JSON.stringify(i)}catch{throw new Ke("payload must be JSON")}if(o===void 0)throw new Ke("payload must be JSON");r[s]=o}else if(["pid","claimed_ms","attempts"].includes(s)){if(!(i===null&&s!=="attempts")&&!(typeof i=="number"&&Number.isSafeInteger(i)&&i>=0))throw new Ke(`${s} must be a nonnegative safe integer${s==="attempts"?"":" or null"}`);r[s]=i}else{if(!(typeof i=="string"||s==="answer_text"&&i===null))throw new Ke(`${s} must be a string${s==="answer_text"?" or null":""}`);r[s]=i}}return r}function PA(t){if(!Object.hasOwn(t,"escalationid"))return t;let{created_at_ms:e,...n}=t;return{...n,payload:JSON.parse(n.payload),answer_present:n.answer_text!==null}}function DA(t,e,n){let r,s=!1;try{if(t.signal?.aborted)return Nt("cancelled","cancelled");let i=Fa.find(v=>v.name===e);if(!i)throw new Error(`Unknown storage operation: ${e}`);if(!yy(n))throw new Ke("options must be a map");for(let v of Object.keys(n))if(!i.keys.some(E=>E.name===v))throw new Ke(`Unknown option: ${v}`);for(let v of i.keys){let E=n[v.name];if(!(E===void 0&&!v.required)){if(v.type==="string"?typeof E!="string"||v.name!=="state"&&!E.length:!yy(E))throw new Ke(`Invalid ${v.name}`);if("values"in v&&v.values&&!v.values.includes(E))throw new Ke(`Invalid ${v.name}`)}}let o=n,a=e==="lmbee_job_claim"?"escalation":o.row;if(a==="job"&&o.escalationid!==void 0)throw new Ke("job selection cannot include escalationid");if(s=e!=="lmbee_job_read",e==="lmbee_job_write"&&a==="escalation"&&!o.escalationid)throw new Ke("child write requires escalationid");let l=e==="lmbee_job_write"?MA(o.values,a,!0):{},c=o.where===void 0?{}:MA(o.where,a,e==="lmbee_job_claim");if(e==="lmbee_job_write"&&o.operation==="insert"){if(o.where!==void 0)throw new Ke("insert does not accept where");for(let v of a==="job"?["status"]:["payload","state"])if(!Object.hasOwn(l,v))throw new Ke(`insert requires ${v}`)}if(o.db.startsWith("~")||o.db===":memory:")throw new Ke("db must select an explicit durable database path");let u=lX(o.db)?o.db:aX(t.cwd,o.db);if(CA(u),r=new gy(u,{readonly:!s,fileMustExist:!0}),NA(r),OA(r),s)_y(r);else if(!r.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workflow_jobs'").get())return Nt("no_rows");let d=r,m=[o.local_scope,o.conversationid],p=a==="job"?"workflow_jobs":"workflow_escalations",f="local_scope = ? AND conversationid = ?"+(o.escalationid?" AND escalationid = ?":""),g=[...m,...o.escalationid?[o.escalationid]:[]],h=()=>d.prepare(`SELECT * FROM ${p} WHERE ${f} ORDER BY ${a==="job"?"conversationid":"escalationid"}`).all(...g).map(PA),y=()=>d.prepare("SELECT 1 FROM workflow_jobs WHERE local_scope = ? AND conversationid = ?").get(...m),b=Object.keys(c).map(v=>`${v} IS ?`).join(" AND "),_=b?` AND ${b}`:"";if(!s){let v=h();return o.escalationid&&!v.length&&y()?Nt("error","selection_failed",[],!1,"No child matches this parent/child pair"):Nt(v.length?"ok":"no_rows",void 0,v)}return d.transaction(()=>{if(t.signal?.aborted)return Nt("cancelled","cancelled");if(a==="escalation"&&!y())return Nt("no_rows");if(e==="lmbee_job_write"&&o.operation==="insert"){let R={local_scope:o.local_scope,conversationid:o.conversationid,...a==="escalation"?{escalationid:o.escalationid}:{},...l};return d.prepare(`INSERT INTO ${p} (${Object.keys(R).join(", ")}) VALUES (${Object.keys(R).map(()=>"?").join(", ")})`).run(...Object.values(R)),Nt("ok","ok",h(),!0)}if(o.escalationid&&!h().length)return Nt("error","selection_failed",[],!1,"No child matches this parent/child pair");if(e==="lmbee_job_write")return d.prepare(`UPDATE ${p} SET ${Object.keys(l).map(S=>`${S} = ?`).join(", ")} WHERE ${f}${_}`).run(...Object.values(l),...g,...Object.values(c)).changes?Nt("ok","ok",h(),!0):Nt(h().length?"not_applied":"no_rows");let v=d.prepare(`SELECT escalationid FROM workflow_escalations WHERE ${f} AND pid IS NULL${_} ORDER BY escalationid LIMIT 1`).get(...g,...Object.values(c));if(!v)return Nt("no_rows");d.prepare("UPDATE workflow_escalations SET pid = ?, claimed_ms = ?, state = ?, attempts = attempts + 1 WHERE local_scope = ? AND conversationid = ? AND escalationid = ?").run(t.pid,t.now(),o.state,...m,v.escalationid);let E=d.prepare("SELECT * FROM workflow_escalations WHERE local_scope = ? AND conversationid = ? AND escalationid = ?").get(...m,v.escalationid);return Nt("ok","ok",[PA(E)],!0)}).immediate()}catch(i){if(i instanceof Ke)return Nt("error","invalid_argument",[],!1,i.message);if(!i.code?.startsWith("SQLITE_")&&!(i instanceof Error&&/Refusing|refus|database/i.test(i.message)))throw i;return Nt("error",s&&r?"write_rejected":"database_unavailable",[],!1,i instanceof Error?i.message:String(i))}finally{r?.close()}}var Ke,Nt,yy,cX,FA=M(()=>{"use strict";hy();LA();dy();Ke=class extends Error{},Nt=(t,e=t,n=[],r=!1,s=null)=>({status:t,code:e,rows:n,applied:r,error:s}),yy=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),cX={job:["status"],escalation:["payload","answer_text","pid","claimed_ms","state","attempts"]}});var $A={};Mn($A,{ensureJobSchema:()=>_y,jobOperation:()=>DA});var jA=M(()=>{"use strict";FA()});var UA={};Mn(UA,{createLmbeeHostModule:()=>uX});function uX(){return{name:"lmbee",declarations:{globals:[],functions:Fa.map(t=>({name:t.name,arity:1,params:[{name:"options",type:"map",keys:t.keys}],doc:{name:t.name,module:"lmbee",category:"Storage",signature:`${t.name}(options)`,description:`${t.description} ${uy}`,returns:{type:"map",description:uy}}}))},async activate(t){let{jobOperation:e}=await Promise.resolve().then(()=>(jA(),$A)),n={cwd:t.cwd,env:t.env,signal:t.signal,pid:process.pid,now:Date.now};return{globals:{},functions:Object.fromEntries(Fa.map(r=>[r.name,s=>e(n,r.name,s)])),dispose(){}}}}}var HA=M(()=>{"use strict";dy()});function Ot(t){return BA.has(t)}var BA,$a=M(()=>{BA=new Set(["__proto__","constructor","prototype"])});function Ds(t){return t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function vy(t){return t.replace(/-([a-z0-9])/g,(e,n)=>n.toUpperCase())}function wd(t){return t.occurs==="1"||t.occurs==="+"||t.occurs===void 0}function by(t){let e=`--${Ds(t.name)}`,n=t.type==="array"?t.items??"string":t.type,r=t.type==="boolean"?"":` <${n}${t.items?` of ${t.items}`:""}>`,s=t.enum&&t.enum.length>0?` one of: ${t.enum.join(", ")}`:"";return`${e}${r}${s}`}function ja(t,e){let n=[];e&&n.push(e),n.push(t.name);for(let r of t.params)r.positional===!0&&n.push(`[<${r.name}>]`);return n.push("[flags]"),n.join(" ")}var Fs=M(()=>{});function qA(t,e){let n=Array.from({length:e.length+1},(r,s)=>s);for(let r=1;r<=t.length;r++){let s=n[0];n[0]=r;for(let i=1;i<=e.length;i++){let o=n[i];n[i]=Math.min(n[i]+1,n[i-1]+1,s+(t[r-1]===e[i-1]?0:1)),s=o}}return n[e.length]}function dX(t,e){let n=vy(t.replace(/^--/,"")),r,s=3;for(let i of e){let o=qA(n,i.name),a=qA(Ds(n),Ds(i.name)),l=Math.min(o,a);l<s&&(s=l,r=i.name)}return r}function GA(t){if(Array.isArray(t))return t;if(typeof t=="string"){let e=t.trim();if(e.startsWith("[")&&e.endsWith("]"))try{let n=JSON.parse(e);if(Array.isArray(n))return n}catch{}return[t]}if(typeof t=="number"||typeof t=="boolean")return[t]}function XA(t,e){switch(t){case"boolean":return typeof e=="boolean"?{ok:!0,value:e}:e==="true"?{ok:!0,value:!0}:e==="false"?{ok:!0,value:!1}:{ok:!1,received:e};case"number":{if(typeof e=="number")return Number.isFinite(e)?{ok:!0,value:e}:{ok:!1,received:e};if(typeof e=="string"){if(e.trim()==="")return{ok:!1,received:e};if(/^-?\d+$/.test(e))return{ok:!0,value:Number.parseInt(e,10)};if(/^-?(?:\d+\.?\d*|\d*\.\d+)(?:[eE][+-]?\d+)?$/.test(e)){let n=Number(e);if(Number.isFinite(n))return{ok:!0,value:n}}}return{ok:!1,received:e}}case"string":return typeof e=="string"?{ok:!0,value:e}:typeof e=="number"||typeof e=="boolean"?{ok:!0,value:String(e)}:{ok:!1,received:e};case"object":{if(e!==null&&typeof e=="object"&&!Array.isArray(e))return{ok:!0,value:e};if(typeof e=="string")try{let n=JSON.parse(e);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return{ok:!0,value:n}}catch{}return{ok:!1,received:e}}case"json":return{ok:!0,value:e};default:return{ok:!0,value:e}}}function wy(t,e,n){let r=[],s=Object.create(null),i=ja(t);Ot(t.name)&&r.push({code:"RESERVED_NAME",message:`operation name "${t.name}" is a reserved name. Expected: ${i}`,op:t.name,synopsis:i,usage:i});for(let a of t.params)if(Ot(a.name)&&r.push({code:"RESERVED_NAME",message:`param "${a.name}" is a reserved name. Expected: ${i}`,op:t.name,param:a.name,synopsis:i,usage:i}),a.aliases)for(let l of a.aliases)Ot(l)&&r.push({code:"RESERVED_NAME",message:`param "${a.name}" alias "${l}" is a reserved name. Expected: ${i}`,op:t.name,param:l,synopsis:i,usage:i});let o=new Map;for(let a of t.params){Ot(a.name)||o.set(a.name,a);for(let l of a.aliases??[])Ot(l)||o.set(l,a)}for(let a of Object.keys(e))if(a.startsWith("--")||!o.has(a))if(!a.startsWith("--")&&t.additionalParams===!0&&!Ot(a))s[a]=e[a];else{let l=dX(a,t.params);r.push({code:"UNKNOWN_PARAM",message:`unknown param: ${a}. Expected: ${i}`,param:a,synopsis:i,usage:i,received:e[a],...l!==void 0?{suggestion:l}:{}})}for(let a of t.params){if(Ot(a.name))continue;let l=by(a),c,u=WA(e,a.name);if(u&&(c=e[a.name]),(!u||c===void 0)&&a.aliases){for(let f of a.aliases)if(WA(e,f)&&e[f]!==void 0){c=e[f],u=!0;break}}let d=wd(a);if(n?.form&&c!==void 0){if(a.cliOnly===!0&&(n.form==="json"||n.form==="graphql")){r.push({code:"FORM_NOT_ALLOWED",message:`param "${a.name}" is CLI-only and not allowed in ${n.form} form. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(a.docOnly===!0&&n.form==="flags"){r.push({code:"FORM_NOT_ALLOWED",message:`param "${a.name}" is doc-only and not allowed in flags form. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}}if(c===null)if(d){r.push({code:"TYPE_MISMATCH",message:`expected ${a.type} for param "${a.name}", received null. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:null});continue}else c=void 0;if(c===void 0){if(a.default!==void 0){s[a.name]=a.default;continue}d&&r.push({code:"MISSING_REQUIRED",message:`missing required param: ${a.name}. Expected: ${l}`,param:a.name,synopsis:l,usage:i});continue}if(a.occurs==="+"||a.occurs==="*"||a.type==="array"){let f=GA(c);if(f===void 0){r.push({code:"TYPE_MISMATCH",message:`expected array for param "${a.name}". Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(a.occurs==="+"&&f.length===0){r.push({code:"MISSING_REQUIRED",message:`param "${a.name}" requires at least one item. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(f.length===0){s[a.name]=[];continue}let g=a.type==="array"?a.items??"string":a.type,h=[],y=!1;for(let b of f){let _=XA(g,b);if(!_.ok){r.push({code:"TYPE_MISMATCH",message:`expected ${g} item for param "${a.name}". Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:b}),y=!0;break}if(a.enum&&a.enum.length>0&&!a.enum.includes(_.value)){r.push({code:"ENUM_VIOLATION",message:`invalid value for param "${a.name}": ${JSON.stringify(_.value)}; allowed: ${a.enum.join(", ")}. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:_.value,allowed:a.enum}),y=!0;break}h.push(_.value)}y||(s[a.name]=h);continue}let p=XA(a.type,c);if(!p.ok){r.push({code:"TYPE_MISMATCH",message:`expected ${a.type} for param "${a.name}". Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(a.enum&&a.enum.length>0&&!a.enum.includes(p.value)){r.push({code:"ENUM_VIOLATION",message:`invalid value for param "${a.name}": ${JSON.stringify(p.value)}; allowed: ${a.enum.join(", ")}. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:p.value,allowed:a.enum});continue}s[a.name]=p.value}return r.length>0?{ok:!1,issues:r}:{ok:!0,value:s}}var WA,Ua=M(()=>{$a();Fs();WA=(t,e)=>Object.prototype.hasOwnProperty.call(t,e)});var VA=M(()=>{Ua();Fs();$a()});var zA=M(()=>{Ua();Fs()});function KA(t){if(typeof t!="string")return!1;let e=t.trim().split(/\s+/).filter(Boolean);if(e.length===0||e.length>4)return!1;for(let n of e)if(!fX.test(n))return!1;return!0}function ZA(t){if(typeof t!="string"||t.length>200)return-1;try{let n=new RegExp(t+"|()").exec("");return n?n.length-2:-1}catch{return-1}}var fX,YA,QA,Ey=M(()=>{fX=/^(>=|>|<=|<|=)(\d+\.\d+\.\d+)$/;YA=/^[a-z][a-z0-9_.-]{0,63}$/,QA=/^[a-z][a-z0-9_.-]*$/});function yX(t,e,n,r,s){if(t===void 0)return!0;let i=o=>!s||s.length===0||s.includes(o);if(r==="+"||r==="*"||e==="array"){if(!Array.isArray(t))return!1;let o=n??(e==="array"?"string":e);return t.every(a=>i(a)&&oC(a,o))}return i(t)&&oC(t,e)}function oC(t,e){switch(e){case"string":return typeof t=="string";case"number":return typeof t=="number"&&!Number.isNaN(t);case"boolean":return typeof t=="boolean";case"object":return typeof t=="object"&&t!==null&&!Array.isArray(t);case"array":return Array.isArray(t);case"json":return t!==void 0;default:return!1}}function Ha(t){let e=[],n=(o,a,l={})=>{let c=l.usage??(l.op?`${l.op} [flags]`:"<unknown> [flags]"),u=l.synopsis??c;e.push({code:o,message:`${a}. Expected: ${u}`,...l.op?{op:l.op}:{},...l.param?{param:l.param}:{},synopsis:u,usage:c,...l.received!==void 0?{received:l.received}:{},...l.allowed!==void 0?{allowed:l.allowed}:{}})};if(t===null||typeof t!="object"||Array.isArray(t))return n("DOCUMENT_PARSE","cli.schema.v1: document must be an object",{received:t}),{ok:!1,issues:e};let r=t;r.schema!=="cli.schema.v1"&&n("DOCUMENT_PARSE",`cli.schema.v1: unsupported schema tag: ${JSON.stringify(r.schema)}`,{received:r.schema,allowed:["cli.schema.v1"]});let s=r.tool;if(typeof s!="string"||!sC.test(s)?n("DOCUMENT_PARSE",`cli.schema.v1: tool must be a string matching ^[a-z][a-z0-9_]*$, received ${JSON.stringify(s)}`,{received:s}):Ot(s)&&n("RESERVED_NAME",`cli.schema.v1: tool cannot be named "${s}" (reserved name)`,{received:s}),r.version!==void 0&&typeof r.version!="string"&&n("TYPE_MISMATCH",`cli.schema.v1: version must be a string, received ${typeof r.version}`,{received:r.version}),r.policy!==void 0)if(r.policy===null||typeof r.policy!="object"||Array.isArray(r.policy))n("TYPE_MISMATCH","cli.schema.v1: policy must be an object",{received:r.policy});else{let o=r.policy;(typeof o.dryrun!="boolean"||typeof o.readonly!="boolean")&&n("TYPE_MISMATCH","cli.schema.v1: policy must contain boolean dryrun and readonly properties",{received:r.policy})}if(r.inputs!==void 0)if(!Array.isArray(r.inputs))n("TYPE_MISMATCH","cli.schema.v1: inputs must be an array",{received:r.inputs});else for(let o of r.inputs)["flags","json","graphql"].includes(o)||n("ENUM_VIOLATION",`cli.schema.v1: inputs contains unsupported form "${String(o)}"`,{received:o,allowed:["flags","json","graphql"]});let i=(o,a,l=!1)=>{if(o===null||typeof o!="object"||Array.isArray(o)){n("TYPE_MISMATCH",`cli.schema.v1: param${a?` in "${a}"`:""} must be an object`,{op:a,received:o});return}let c=o,u=c.name;if(typeof u!="string"){n("TYPE_MISMATCH",`cli.schema.v1: param${a?` in "${a}"`:""} needs a string name`,{op:a,received:u});return}for(let y of Object.keys(c))iC.has(y)||n("UNKNOWN_PARAM",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has unknown property "${y}"`,{op:a,param:u,received:y,allowed:Array.from(iC)});(l?hX:gX).test(u)?Ot(u)&&n("RESERVED_NAME",`cli.schema.v1: ${l?"global ":""}param "${u}"${a?` in "${a}"`:""} is a reserved name`,{op:a,param:u,received:u}):n("DOCUMENT_PARSE",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} name must match ${l?"^[A-Za-z_][A-Za-z0-9_-]*$":"^[A-Za-z_]\\w*$"}`,{op:a,param:u,received:u}),!l&&u==="dryrun"&&n("DOCUMENT_PARSE",'cli.schema.v1: param cannot be named "dryrun" (reserved global policy flag)',{op:a,param:u,received:u});let m=c.aliases;if(m!==void 0&&Array.isArray(m))for(let y of m)typeof y=="string"&&Ot(y)&&n("RESERVED_NAME",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} alias "${y}" is a reserved name`,{op:a,param:u,received:y});let p=c.type;(typeof p!="string"||!Ty.has(p))&&n("ENUM_VIOLATION",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has invalid type: ${JSON.stringify(p)}`,{op:a,param:u,received:p,allowed:Array.from(Ty)});let f=c.occurs;f!==void 0&&!eC.has(f)&&n("ENUM_VIOLATION",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has invalid occurs: ${JSON.stringify(f)}`,{op:a,param:u,received:f,allowed:Array.from(eC)});let g=c.enum;g!==void 0&&(!Array.isArray(g)||!g.every(y=>typeof y=="string"||typeof y=="number"))&&n("TYPE_MISMATCH",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} enum must be an array of strings or numbers`,{op:a,param:u,received:g});let h=c.items;if(h!==void 0&&!tC.has(h)&&n("ENUM_VIOLATION",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has invalid items type: ${JSON.stringify(h)}`,{op:a,param:u,received:h,allowed:Array.from(tC)}),c.default!==void 0&&Ty.has(p)){let y=Array.isArray(g)?g:void 0;yX(c.default,p,h,f,y)||n("TYPE_MISMATCH",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} default value does not match declared type "${p}"`,{op:a,param:u,received:c.default})}};if(r.globals!==void 0)if(!Array.isArray(r.globals))n("TYPE_MISMATCH","cli.schema.v1: globals must be an array",{received:r.globals});else for(let o of r.globals)i(o,void 0,!0);if(!Array.isArray(r.operations))n("DOCUMENT_PARSE","cli.schema.v1: operations must be an array",{received:r.operations});else{let o=new Set;for(let a of r.operations){if(a===null||typeof a!="object"||Array.isArray(a)){n("DOCUMENT_PARSE","cli.schema.v1: every operation must be an object",{received:a});continue}let l=a,c=l.name;if(typeof c!="string"){n("DOCUMENT_PARSE","cli.schema.v1: every operation needs a string name",{received:c});continue}if(sC.test(c)?Ot(c)&&n("RESERVED_NAME",`cli.schema.v1: operation cannot be named "${c}" (reserved name)`,{op:c,received:c}):n("DOCUMENT_PARSE",`cli.schema.v1: operation name "${c}" must match ^[a-z][a-z0-9_]*$`,{op:c,received:c}),o.has(c)&&n("DOCUMENT_PARSE",`cli.schema.v1: duplicate operation name "${c}"`,{op:c}),o.add(c),l.access!==void 0&&(nC.has(l.access)||n("ENUM_VIOLATION",`cli.schema.v1: operation "${c}" has invalid access: ${JSON.stringify(l.access)}`,{op:c,received:l.access,allowed:Array.from(nC)})),l.returns!==void 0&&(rC.has(l.returns)||n("ENUM_VIOLATION",`cli.schema.v1: operation "${c}" has invalid returns: ${JSON.stringify(l.returns)}`,{op:c,received:l.returns,allowed:Array.from(rC)})),!Array.isArray(l.params))n("DOCUMENT_PARSE",`cli.schema.v1: operation "${c}" needs a params array`,{op:c,received:l.params});else for(let u of l.params)i(u,c,!1)}}if(r.product!==void 0){let o=r.product;if(o===null||typeof o!="object"||Array.isArray(o))n("TYPE_MISMATCH","cli.schema.v1: product must be an object",{received:o});else{let a=o,l=new Set(["name","supported","detect"]);for(let d of Object.keys(a))l.has(d)||n("UNKNOWN_PARAM",`cli.schema.v1: unknown product property "${d}"`,{received:d,allowed:Array.from(l)});let c=a.name;typeof c!="string"?n("TYPE_MISMATCH","cli.schema.v1: product.name must be a string",{received:c}):YA.test(c)||n("DOCUMENT_PARSE",`cli.schema.v1: product.name must match ^[a-z][a-z0-9_.-]{0,63}$, received ${JSON.stringify(c)}`,{received:c});let u=a.supported;if(typeof u!="string"?n("TYPE_MISMATCH","cli.schema.v1: product.supported must be a string",{received:u}):KA(u)||n("DOCUMENT_PARSE",`cli.schema.v1: product.supported must be a conjunction of 1 to 4 comparators (>=, >, <=, <, = followed by numeric x.y.z), received ${JSON.stringify(u)}`,{received:u}),a.detect!==void 0){let d=a.detect;if(d===null||typeof d!="object"||Array.isArray(d))n("TYPE_MISMATCH","cli.schema.v1: product.detect must be an object",{received:d});else{let m=d,p=new Set(["argv","pattern"]);for(let h of Object.keys(m))p.has(h)||n("UNKNOWN_PARAM",`cli.schema.v1: unknown product.detect property "${h}"`,{received:h,allowed:Array.from(p)});let f=m.argv;if(!Array.isArray(f)||f.length<1||f.length>8||!f.every(h=>typeof h=="string"&&h.length>0))n("DOCUMENT_PARSE","cli.schema.v1: product.detect.argv must be an array of 1 to 8 non-empty strings",{received:f});else{let h=f[0];QA.test(h)||n("DOCUMENT_PARSE",`cli.schema.v1: product.detect.argv[0] must match ^[a-z][a-z0-9_.-]*$ (no slashes), received ${JSON.stringify(h)}`,{received:h})}let g=m.pattern;if(typeof g!="string")n("TYPE_MISMATCH","cli.schema.v1: product.detect.pattern must be a string",{received:g});else if(g.length>200)n("DOCUMENT_PARSE",`cli.schema.v1: product.detect.pattern exceeds maximum length of 200 characters (${g.length})`,{received:g});else{let h=ZA(g);h!==1&&n("DOCUMENT_PARSE",`cli.schema.v1: product.detect.pattern must be a valid RegExp with exactly one capture group, found ${h}`,{received:g})}}}}}return e.length>0?{ok:!1,issues:e}:{ok:!0,value:t}}var Ty,eC,tC,nC,rC,sC,gX,hX,iC,Sy=M(()=>{$a();Ua();Ey();Ty=new Set(["string","number","boolean","object","array","json"]),eC=new Set(["1","?","+","*"]),tC=new Set(["string","number","boolean","object"]),nC=new Set(["read","write","dynamic"]),rC=new Set(["object","array","string","number","boolean","null"]),sC=/^[a-z][a-z0-9_]*$/,gX=/^[A-Za-z_]\w*$/,hX=/^[A-Za-z_][A-Za-z0-9_-]*$/,iC=new Set(["name","type","occurs","default","enum","positional","items","description","aliases","cliOnly","docOnly","derived"])});var aC=M(()=>{Fs();Fs()});function lC(t,e){let n=Object.create(null);for(let[r,s]of Object.entries(e))s!==void 0&&(n[r]=s);return JSON.stringify({op:t.name,params:n})}var cC=M(()=>{});var uC=M(()=>{$a();Fs();Ua();VA();zA();Sy();aC();cC();Ey()});var yC={};Mn(yC,{INLINE_DOCUMENT_LIMIT:()=>pC,createSchemaModule:()=>hC,createSchemaModuleFactory:()=>xX,parseSchemaDocument:()=>ky,schemaToDeclarations:()=>gC});import{mkdtempSync as _X,writeFileSync as vX,rmSync as bX}from"node:fs";import{tmpdir as wX}from"node:os";import{join as dC}from"node:path";function ky(t){let e;try{e=JSON.parse(t)}catch(s){throw Error("not valid JSON: "+(s instanceof Error?s.message:String(s)))}let n=Ha(e);if(!n.ok){let s=n.issues[0];throw Error(s.message+(n.issues.length>1?` (and ${n.issues.length-1} more issue${n.issues.length>2?"s":""})`:""))}let r=n.value;for(let s of r.operations)for(let i of s.params)if(Ry.includes(i.name))throw Error(`${r.tool} ${s.name}: param '${i.name}' collides with a runner global`);return r}function Ed(t){return SX(t)?"list":{string:"string",number:"number",boolean:"boolean",object:"map",array:"list",json:"any"}[t.type]??"any"}function fC(t,e){let n=e.params.filter(a=>!a.cliOnly),r=n.filter(a=>a.positional===!0),s=n.filter(a=>a.positional!==!0),i=s.some(Yr),o=r.findIndex(a=>!Yr(a));if(o>=0&&(r.slice(o).some(Yr)||i))throw Error(`${t} ${e.name}: a required argument follows an optional positional`);return{positionals:r,options:s,optsRequired:i}}function RX(t){let e=[t.default!==void 0?"default: "+JSON.stringify(t.default):"",t.enum?.length?"one of: "+t.enum.join(", "):"",t.derived?"loosely typed":""].filter(Boolean),n=t.occurs==="+"?"+":t.occurs==="*"?"*":Yr(t)?"":"?";return Ed(t)+n+(t.description?" \u2014 "+t.description:"")+(e.length?" ("+e.join("; ")+")":"")}function gC(t,e=t.tool){return{functions:t.operations.map(r=>{let s=e+"."+r.name,{positionals:i,options:o,optsRequired:a}=fC(t.tool,r),l=[...o.map(m=>({name:m.name,type:Ed(m),...Yr(m)?{required:!0}:{},...m.enum?.length?{values:[...m.enum]}:{}})),...Ry.map(m=>({name:m,type:"boolean"}))],c=[...i.map(m=>({name:m.name,type:Ed(m),checkLiteral:!0,...m.enum?.length?{values:[...m.enum]}:{},...Yr(m)?{}:{optional:!0}})),{name:"opts",type:"map",keys:l,...r.additionalParams?{open:!0}:{},...a?{}:{optional:!0}},{name:"dryrun",type:"boolean",optional:!0}],u=i.filter(Yr).length+(a?1:0),d={name:s,module:e,category:kX[r.access??"write"]??"Write operations",signature:s+"(...)",description:(r.description??`${t.tool} ${r.name}`)+(r.params.some(m=>m.derived)?" (derived schema: params loosely typed)":""),parameters:[...i,...o].map(m=>({name:m.name,type:Ed(m)+(Yr(m)?"":"?"),description:RX(m)})).concat([{name:"readonly",type:"boolean?",description:`boolean? \u2014 pass --readonly to ${t.tool}`},{name:"confirm",type:"boolean?",description:`boolean? \u2014 pass --confirm to ${t.tool} (attests a dangerous write)`}]),returns:{type:"map",description:`{status:"ok", result} with the parsed JSON of ${t.tool} ${r.name}; {status:"error", error:{code, message}}; {status:"simulated"} in the dry pass`}};return{name:s,arity:{min:u,max:i.length+2},params:c,returnType:"map",readonly:!1,doc:d}}),globals:[]}}function mC(t){return t.trimEnd().split(`
2419
- `).slice(-TX).join(`
2420
- `)}function IX(t){return t.map(e=>`${e.code}${e.param?` '${e.param}'`:""}${e.suggestion?` (did you mean '${e.suggestion}'?)`:""}: ${e.message}`).join("; ")}function hC(t,e={}){let n=ky(t.text),r=t.alias??n.tool;if(!EX.test(r))throw Error(`namespace ${JSON.stringify(r)} is not an identifier`);let s=e.timeoutMs??0,i=gC(n,r);return{name:"schema:"+r,nativeNamespace:r,declarations:i,async activate(o){let a=ky(t.text),l={};for(let c of a.operations){let u=r+"."+c.name,{positionals:d}=fC(a.tool,c);l[u]=async(...m)=>{let p=m[d.length+1]===!0,f=m[d.length]??{};if(!Ba(f))throw Error(`${u}: options must be a map`);if(Object.hasOwn(f,"dryrun"))throw Error(`${u}: dryrun is supplied by the language; omit it`);let g=[],h=Object.create(null);for(let[O,A]of d.entries())m[O]!==void 0&&(h[A.name]=m[O]);for(let[O,A]of Object.entries(f)){if(Ry.includes(O)){if(typeof A!="boolean")throw Error(`${u}: option '${O}' must be boolean`);A&&g.push("--"+O);continue}if(Object.hasOwn(h,O))throw Error(`${u}: '${O}' given both positionally and as an option`);h[O]=A}if(p)return{status:"simulated",simulated:u};let y=wy(c,h,{form:"json"});if(!y.ok)return Kr({code:"validation",message:`${u}: ${IX(y.issues)}`,issues:[...y.issues]});let b=o.platform??process.platform,_=a.tool,v=lC(c,h),E=()=>{},R,S;try{let O=[_,c.name,"--input-json",v,...g];if(Buffer.byteLength(v)>pC){let A=_X(dC(wX(),"lmscript-"+a.tool+"-")),w=dC(A,"input.json");E=()=>bX(A,{recursive:!0,force:!0}),vX(w,v,{mode:384}),O=[_,c.name,"--input-file",w,...g]}S=await vl(O,s,b,o.signal,{cwd:o.cwd,env:{...o.env,LMSCRIPT_RUN_ORIGIN:JSON.stringify(o.executionOrigin)}},{maxOutputBytes:e.maxOutputBytes??0})}catch(O){let A=O;if(A?.code==="ERR_OUTPUT_LIMIT")return Kr({code:"output_limit",message:`${u}: ${a.tool} ${A.message}`});if(A?.message==="Aborted")throw O;return Kr({code:"launch",message:`${u}: cannot run ${a.tool}: ${A?.message??String(O)}`})}finally{try{E()}catch(O){R=O}}if(S.timed_out)return Kr({code:"timeout",message:`${u}: ${a.tool} timed out after ${s} ms`,...S.stderr.trim()?{stderr_tail:mC(S.stderr)}:{}});let I,N=!1;try{I=JSON.parse(S.stdout),N=!0}catch{}if(N&&Ba(I)&&I.success===!1&&Ba(I.error)){let O=I.error,A=Ba(O.data)?O.data:{},w=Ba(A.details)?A.details:A,T=Array.isArray(w.issues)?[...w.issues]:[],k=O.code==="VALIDATION_ERROR"?` (the input passed client validation; schema ${a.version??"unversioned"} may be stale)`:"";return Kr({code:"envelope",message:`${u}: ${String(O.code??"ERROR")}: ${String(O.message??"")}${k}`,tool_code:String(O.code??"ERROR"),...T.length?{issues:T}:{},exit:S.code})}return S.code!==0||S.signal!==null?Kr({code:"exit",message:`${u}: ${a.tool} exit ${S.code??"none"}${S.signal?` (signal ${S.signal})`:""}`,exit:S.code,signal:S.signal,...S.stderr.trim()?{stderr_tail:mC(S.stderr)}:{}}):N?R!==void 0?Kr({code:"launch",message:`${u}: cannot remove temporary input: ${R instanceof Error?R.message:String(R)}`}):{status:"ok",result:I}:Kr({code:"parse",message:`${u}: ${a.tool} ${c.name} printed invalid JSON${S.stdout.trim()?": "+S.stdout.trim().slice(0,200):" (empty stdout)"}`})}}return{functions:l,globals:{},dispose(){}}}}}function xX(t={}){return e=>hC(e,t)}var Ry,EX,TX,pC,Yr,SX,kX,Ba,Kr,_C=M(()=>{"use strict";uC();Xs();Ry=["readonly","confirm"],EX=/^[A-Za-z_]\w*$/,TX=12,pC=100*1024;Yr=t=>t.default===void 0&&(t.occurs===void 0||t.occurs==="1"||t.occurs==="+"),SX=t=>t.type==="array"||t.occurs==="+"||t.occurs==="*";kX={read:"Read operations",write:"Write operations",dynamic:"Dynamic operations"};Ba=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Kr=t=>({status:"error",error:t})});function Re(t){return{ok:!0,value:t}}function ue(t,e,n={}){return{ok:!1,error:{code:t,message:e,...n},code:t,message:e,...n.file?{file:n.file}:{},...n.issues?{issues:n.issues}:{},...n.details?{details:n.details}:{}}}var Td=M(()=>{});function Wa(t){if(typeof t!="string"||t.trim()==="")return ue("SPEC_SYNTAX","Module spec must be a non-empty string");let e=t.indexOf("#");if(e!==-1){let a=t.slice(0,e),l=t.slice(e+1),c=vC.exec(a);if(!c)return ue("SPEC_SYNTAX",`Invalid module spec syntax: "${t}" (expected @owner/repo[#(latest|dev)])`);let u=c[1],d=c[2];if(u==="."||u===".."||d==="."||d==="..")return ue("SPEC_SYNTAX",`Invalid owner or repo name: "${t}"`);if(l!=="latest"&&l!=="dev")return ue("SPEC_CHANNEL","only the latest and dev channels are supported");let m=l,p=`@${u}/${d}#${m}`;return Re({owner:u,repo:d,channel:m,key:p,requested:t})}let n=vC.exec(t);if(!n)return ue("SPEC_SYNTAX",`Invalid module spec syntax: "${t}" (expected @owner/repo[#(latest|dev)])`);let r=n[1],s=n[2];if(r==="."||r===".."||s==="."||s==="..")return ue("SPEC_SYNTAX",`Invalid owner or repo name: "${t}"`);let i="latest",o=`@${r}/${s}#${i}`;return Re({owner:r,repo:s,channel:i,key:o,requested:t})}var vC,Iy=M(()=>{Td();vC=/^@([A-Za-z0-9][A-Za-z0-9._-]*)\/([A-Za-z0-9][A-Za-z0-9._-]*)$/});import{homedir as AX}from"node:os";import{isAbsolute as bC,join as wC,relative as EC,resolve as xy}from"node:path";function Gi(t=process.env){let e=t.LMCTL_HOME&&t.LMCTL_HOME.trim()!==""?t.LMCTL_HOME:wC(t.HOME??AX(),".lmctl");return wC(e,"modules")}function Ay(t,e){let n=xy(t),r=xy(n,"github.com"),s=xy(r,e.owner,e.repo,e.channel),i=EC(n,s),o=EC(r,s);if(i.startsWith("..")||bC(i)||o.startsWith("..")||bC(o))throw new Error(`Path traversal detected: entry directory "${s}" escapes cache root "${n}"`);return s}function Sd(t){return`cli.schema.${t}.json`}var Cy=M(()=>{});import{createHash as SC,randomUUID as kd}from"node:crypto";import{existsSync as Rd,promises as Gt}from"node:fs";import{dirname as Cie,isAbsolute as Nie,join as pn,relative as Oie,resolve as Lie}from"node:path";async function OX(t){let e=pn(t,RC);if(!Rd(e))return Re(t);try{let n=(await Gt.readFile(e,"utf8")).trim();if(!CX.test(n)||n==="."||n==="..")return ue("CACHE_CORRUPT",`Invalid ${e}`);let r=pn(t,"generations",n);return Rd(r)?Re(r):ue("CACHE_CORRUPT",`Missing cache generation ${n}`)}catch(n){return ue("CACHE_CORRUPT",`Failed to read ${e}: ${n?.message??String(n)}`)}}function Ly(t){return typeof t=="string"?Wa(t):Re(t)}async function $s(t,e){let n=Ly(t);if(!n.ok)return ue(n.code,n.message);let r=n.value,s=e?.root??Gi(),i;try{i=Ay(s,r)}catch(h){return ue("PATH_TRAVERSAL",h?.message??String(h))}let o=Sd(r.channel),a=await OX(i);if(!a.ok)return a;let l=a.value,c=pn(l,o),u=pn(l,"meta.json");if(!Rd(c)||!Rd(u))return ue(l===i?"NOT_INSTALLED":"CACHE_CORRUPT",`Module ${r.key} is missing cache files`);let d,m;try{d=await Gt.readFile(c)}catch(h){return ue("CACHE_CORRUPT",`Failed to read ${c}: ${h?.message??String(h)}; run: lmbee module install ${r.key} --force`,{file:c})}try{let h=await Gt.readFile(u,"utf-8");m=JSON.parse(h)}catch(h){return ue("CACHE_CORRUPT",`Failed to read or parse ${u}: ${h?.message??String(h)}; run: lmbee module install ${r.key} --force`,{file:u})}let p=SC("sha256").update(d).digest("hex");if(p!==m.sha256)return ue("CACHE_CORRUPT",`Cached schema hash mismatch in ${c}: expected ${m.sha256}, got ${p}; run: lmbee module install ${r.key} --force`,{file:c});let f;try{f=JSON.parse(d.toString("utf-8"))}catch(h){return ue("BAD_JSON",`Failed to parse ${c} as JSON: ${h?.message??String(h)}`,{file:c})}let g=Ha(f);return g.ok?Re({spec:r,dir:i,path:c,sha256:p,fetchedAt:m.fetched_at,lastChecked:m.last_checked??m.fetched_at,etag:m.etag,channel:r.channel,tool:g.value.tool,version:g.value.version,document:g.value}):ue("INVALID_SCHEMA",`Cached schema in ${c} is invalid: ${g.issues[0]?.message}`,{file:c,issues:g.issues})}async function IC(t,e){let{timeoutMs:n,fetchImpl:r,etag:s}=e,i;try{let o=AbortSignal.timeout(n),a={};if(s&&(a["If-None-Match"]=s),i=await r(t,{signal:o,headers:a,redirect:"manual"}),i.status>=300&&i.status<400&&i.status!==304){let l=i.headers.get("location");if(!l)return ue("FETCH_FAILED",`Redirect response from ${t} missing Location header`);let c=new URL(l,t);if(c.protocol!=="https:"||c.hostname!=="raw.githubusercontent.com")return ue("FETCH_FAILED",`Cross-host or non-HTTPS redirect to "${l}" refused (must stay on raw.githubusercontent.com)`);i=await r(c.href,{signal:o,headers:a,redirect:"manual"})}}catch(o){return o?.name==="TimeoutError"||o?.name==="AbortError"?ue("FETCH_FAILED",`Fetch timed out after ${n}ms for ${t}`):ue("FETCH_FAILED",`Network error fetching ${t}: ${o?.message??String(o)}`)}return Re(i)}async function xC(t,e,n,r,s,i){let o;try{if(t.body&&typeof t.body.getReader=="function"){let u=t.body.getReader(),d=[],m=0;for(;;){let{done:p,value:f}=await u.read();if(p)break;if(m+=f.length,m>e)return await u.cancel(),ue("OUTPUT_LIMIT",`Schema exceeds maximum size limit of ${e} bytes`);d.push(f)}o=Buffer.concat(d)}else{let u=await t.arrayBuffer();if(u.byteLength>e)return ue("OUTPUT_LIMIT",`Schema exceeds maximum size limit of ${e} bytes`);o=Buffer.from(u)}}catch(u){return u?.name==="TimeoutError"||u?.name==="AbortError"?ue("FETCH_FAILED",`Fetch stream timed out after ${n}ms`):ue("FETCH_FAILED",`Error reading response stream: ${u?.message??String(u)}`)}let a;try{a=JSON.parse(o.toString("utf-8"))}catch(u){return ue("BAD_JSON",`Failed to parse ${s} from ${i} as JSON: ${u?.message??String(u)}`)}let l=Ha(a);if(!l.ok){let u=l.issues[0]?.message??"Schema validation failed";return ue("INVALID_SCHEMA",`Invalid schema for ${r}: ${u}`,{issues:l.issues})}let c=SC("sha256").update(o).digest("hex");return Re({buffer:o,sha256:c,schema:l.value})}async function Oy(t,e,n,r){let s=`gen-${Date.now()}-${kd()}`,i=pn(t,"generations",s),o=pn(i,`.tmp.schema.${kd()}`),a=pn(i,`.tmp.meta.${kd()}`),l=pn(i,e),c=pn(i,"meta.json"),u=pn(t,`.tmp.current.${kd()}`);try{await Gt.mkdir(i,{recursive:!0,mode:448}),await Gt.writeFile(o,n,{mode:384}),await Gt.rename(o,l),await TC(l,384),await Gt.writeFile(a,JSON.stringify(r,null,2)+`
2418
+ END`)}function MA(t,e,n){if(!yy(t)||n&&!Object.keys(t).length)throw new Ke("Expected a nonempty column map");let r={};for(let[s,i]of Object.entries(t)){if(!dX[e].includes(s))throw new Ke(`Unknown ${e} column: ${s}`);if(s==="payload"){let o;try{o=JSON.stringify(i)}catch{throw new Ke("payload must be JSON")}if(o===void 0)throw new Ke("payload must be JSON");r[s]=o}else if(["pid","claimed_ms","attempts"].includes(s)){if(!(i===null&&s!=="attempts")&&!(typeof i=="number"&&Number.isSafeInteger(i)&&i>=0))throw new Ke(`${s} must be a nonnegative safe integer${s==="attempts"?"":" or null"}`);r[s]=i}else{if(!(typeof i=="string"||s==="answer_text"&&i===null))throw new Ke(`${s} must be a string${s==="answer_text"?" or null":""}`);r[s]=i}}return r}function PA(t){if(!Object.hasOwn(t,"escalationid"))return t;let{created_at_ms:e,...n}=t;return{...n,payload:JSON.parse(n.payload),answer_present:n.answer_text!==null}}function DA(t,e,n){let r,s=!1;try{if(t.signal?.aborted)return Nt("cancelled","cancelled");let i=Fa.find(v=>v.name===e);if(!i)throw new Error(`Unknown storage operation: ${e}`);if(!yy(n))throw new Ke("options must be a map");for(let v of Object.keys(n))if(!i.keys.some(E=>E.name===v))throw new Ke(`Unknown option: ${v}`);for(let v of i.keys){let E=n[v.name];if(!(E===void 0&&!v.required)){if(v.type==="string"?typeof E!="string"||v.name!=="state"&&!E.length:!yy(E))throw new Ke(`Invalid ${v.name}`);if("values"in v&&v.values&&!v.values.includes(E))throw new Ke(`Invalid ${v.name}`)}}let o=n,a=e==="lmbee_job_claim"?"escalation":o.row;if(a==="job"&&o.escalationid!==void 0)throw new Ke("job selection cannot include escalationid");if(s=e!=="lmbee_job_read",e==="lmbee_job_write"&&a==="escalation"&&!o.escalationid)throw new Ke("child write requires escalationid");let l=e==="lmbee_job_write"?MA(o.values,a,!0):{},c=o.where===void 0?{}:MA(o.where,a,e==="lmbee_job_claim");if(e==="lmbee_job_write"&&o.operation==="insert"){if(o.where!==void 0)throw new Ke("insert does not accept where");for(let v of a==="job"?["status"]:["payload","state"])if(!Object.hasOwn(l,v))throw new Ke(`insert requires ${v}`)}if(o.db.startsWith("~")||o.db===":memory:")throw new Ke("db must select an explicit durable database path");let u=uX(o.db)?o.db:cX(t.cwd,o.db);if(CA(u),r=new gy(u,{readonly:!s,fileMustExist:!0}),NA(r),OA(r),s)_y(r);else if(!r.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workflow_jobs'").get())return Nt("no_rows");let d=r,m=[o.local_scope,o.conversationid],p=a==="job"?"workflow_jobs":"workflow_escalations",f="local_scope = ? AND conversationid = ?"+(o.escalationid?" AND escalationid = ?":""),g=[...m,...o.escalationid?[o.escalationid]:[]],h=()=>d.prepare(`SELECT * FROM ${p} WHERE ${f} ORDER BY ${a==="job"?"conversationid":"escalationid"}`).all(...g).map(PA),y=()=>d.prepare("SELECT 1 FROM workflow_jobs WHERE local_scope = ? AND conversationid = ?").get(...m),b=Object.keys(c).map(v=>`${v} IS ?`).join(" AND "),_=b?` AND ${b}`:"";if(!s){let v=h();return o.escalationid&&!v.length&&y()?Nt("error","selection_failed",[],!1,"No child matches this parent/child pair"):Nt(v.length?"ok":"no_rows",void 0,v)}return d.transaction(()=>{if(t.signal?.aborted)return Nt("cancelled","cancelled");if(a==="escalation"&&!y())return Nt("no_rows");if(e==="lmbee_job_write"&&o.operation==="insert"){let R={local_scope:o.local_scope,conversationid:o.conversationid,...a==="escalation"?{escalationid:o.escalationid}:{},...l};return d.prepare(`INSERT INTO ${p} (${Object.keys(R).join(", ")}) VALUES (${Object.keys(R).map(()=>"?").join(", ")})`).run(...Object.values(R)),Nt("ok","ok",h(),!0)}if(o.escalationid&&!h().length)return Nt("error","selection_failed",[],!1,"No child matches this parent/child pair");if(e==="lmbee_job_write")return d.prepare(`UPDATE ${p} SET ${Object.keys(l).map(S=>`${S} = ?`).join(", ")} WHERE ${f}${_}`).run(...Object.values(l),...g,...Object.values(c)).changes?Nt("ok","ok",h(),!0):Nt(h().length?"not_applied":"no_rows");let v=d.prepare(`SELECT escalationid FROM workflow_escalations WHERE ${f} AND pid IS NULL${_} ORDER BY escalationid LIMIT 1`).get(...g,...Object.values(c));if(!v)return Nt("no_rows");d.prepare("UPDATE workflow_escalations SET pid = ?, claimed_ms = ?, state = ?, attempts = attempts + 1 WHERE local_scope = ? AND conversationid = ? AND escalationid = ?").run(t.pid,t.now(),o.state,...m,v.escalationid);let E=d.prepare("SELECT * FROM workflow_escalations WHERE local_scope = ? AND conversationid = ? AND escalationid = ?").get(...m,v.escalationid);return Nt("ok","ok",[PA(E)],!0)}).immediate()}catch(i){if(i instanceof Ke)return Nt("error","invalid_argument",[],!1,i.message);if(!i.code?.startsWith("SQLITE_")&&!(i instanceof Error&&/Refusing|refus|database/i.test(i.message)))throw i;return Nt("error",s&&r?"write_rejected":"database_unavailable",[],!1,i instanceof Error?i.message:String(i))}finally{r?.close()}}var Ke,Nt,yy,dX,FA=M(()=>{"use strict";hy();LA();dy();Ke=class extends Error{},Nt=(t,e=t,n=[],r=!1,s=null)=>({status:t,code:e,rows:n,applied:r,error:s}),yy=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),dX={job:["status"],escalation:["payload","answer_text","pid","claimed_ms","state","attempts"]}});var $A={};Mn($A,{ensureJobSchema:()=>_y,jobOperation:()=>DA});var jA=M(()=>{"use strict";FA()});var UA={};Mn(UA,{createLmbeeHostModule:()=>mX});function mX(){return{name:"lmbee",declarations:{globals:[],functions:Fa.map(t=>({name:t.name,arity:1,params:[{name:"options",type:"map",keys:t.keys}],doc:{name:t.name,module:"lmbee",category:"Storage",signature:`${t.name}(options)`,description:`${t.description} ${uy}`,returns:{type:"map",description:uy}}}))},async activate(t){let{jobOperation:e}=await Promise.resolve().then(()=>(jA(),$A)),n={cwd:t.cwd,env:t.env,signal:t.signal,pid:process.pid,now:Date.now};return{globals:{},functions:Object.fromEntries(Fa.map(r=>[r.name,s=>e(n,r.name,s)])),dispose(){}}}}}var HA=M(()=>{"use strict";dy()});function Ot(t){return BA.has(t)}var BA,$a=M(()=>{BA=new Set(["__proto__","constructor","prototype"])});function Ds(t){return t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function vy(t){return t.replace(/-([a-z0-9])/g,(e,n)=>n.toUpperCase())}function wd(t){return t.occurs==="1"||t.occurs==="+"||t.occurs===void 0}function by(t){let e=`--${Ds(t.name)}`,n=t.type==="array"?t.items??"string":t.type,r=t.type==="boolean"?"":` <${n}${t.items?` of ${t.items}`:""}>`,s=t.enum&&t.enum.length>0?` one of: ${t.enum.join(", ")}`:"";return`${e}${r}${s}`}function ja(t,e){let n=[];e&&n.push(e),n.push(t.name);for(let r of t.params)r.positional===!0&&n.push(`[<${r.name}>]`);return n.push("[flags]"),n.join(" ")}var Fs=M(()=>{});function qA(t,e){let n=Array.from({length:e.length+1},(r,s)=>s);for(let r=1;r<=t.length;r++){let s=n[0];n[0]=r;for(let i=1;i<=e.length;i++){let o=n[i];n[i]=Math.min(n[i]+1,n[i-1]+1,s+(t[r-1]===e[i-1]?0:1)),s=o}}return n[e.length]}function pX(t,e){let n=vy(t.replace(/^--/,"")),r,s=3;for(let i of e){let o=qA(n,i.name),a=qA(Ds(n),Ds(i.name)),l=Math.min(o,a);l<s&&(s=l,r=i.name)}return r}function GA(t){if(Array.isArray(t))return t;if(typeof t=="string"){let e=t.trim();if(e.startsWith("[")&&e.endsWith("]"))try{let n=JSON.parse(e);if(Array.isArray(n))return n}catch{}return[t]}if(typeof t=="number"||typeof t=="boolean")return[t]}function XA(t,e){switch(t){case"boolean":return typeof e=="boolean"?{ok:!0,value:e}:e==="true"?{ok:!0,value:!0}:e==="false"?{ok:!0,value:!1}:{ok:!1,received:e};case"number":{if(typeof e=="number")return Number.isFinite(e)?{ok:!0,value:e}:{ok:!1,received:e};if(typeof e=="string"){if(e.trim()==="")return{ok:!1,received:e};if(/^-?\d+$/.test(e))return{ok:!0,value:Number.parseInt(e,10)};if(/^-?(?:\d+\.?\d*|\d*\.\d+)(?:[eE][+-]?\d+)?$/.test(e)){let n=Number(e);if(Number.isFinite(n))return{ok:!0,value:n}}}return{ok:!1,received:e}}case"string":return typeof e=="string"?{ok:!0,value:e}:typeof e=="number"||typeof e=="boolean"?{ok:!0,value:String(e)}:{ok:!1,received:e};case"object":{if(e!==null&&typeof e=="object"&&!Array.isArray(e))return{ok:!0,value:e};if(typeof e=="string")try{let n=JSON.parse(e);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return{ok:!0,value:n}}catch{}return{ok:!1,received:e}}case"json":return{ok:!0,value:e};default:return{ok:!0,value:e}}}function wy(t,e,n){let r=[],s=Object.create(null),i=ja(t);Ot(t.name)&&r.push({code:"RESERVED_NAME",message:`operation name "${t.name}" is a reserved name. Expected: ${i}`,op:t.name,synopsis:i,usage:i});for(let a of t.params)if(Ot(a.name)&&r.push({code:"RESERVED_NAME",message:`param "${a.name}" is a reserved name. Expected: ${i}`,op:t.name,param:a.name,synopsis:i,usage:i}),a.aliases)for(let l of a.aliases)Ot(l)&&r.push({code:"RESERVED_NAME",message:`param "${a.name}" alias "${l}" is a reserved name. Expected: ${i}`,op:t.name,param:l,synopsis:i,usage:i});let o=new Map;for(let a of t.params){Ot(a.name)||o.set(a.name,a);for(let l of a.aliases??[])Ot(l)||o.set(l,a)}for(let a of Object.keys(e))if(a.startsWith("--")||!o.has(a))if(!a.startsWith("--")&&t.additionalParams===!0&&!Ot(a))s[a]=e[a];else{let l=pX(a,t.params);r.push({code:"UNKNOWN_PARAM",message:`unknown param: ${a}. Expected: ${i}`,param:a,synopsis:i,usage:i,received:e[a],...l!==void 0?{suggestion:l}:{}})}for(let a of t.params){if(Ot(a.name))continue;let l=by(a),c,u=WA(e,a.name);if(u&&(c=e[a.name]),(!u||c===void 0)&&a.aliases){for(let f of a.aliases)if(WA(e,f)&&e[f]!==void 0){c=e[f],u=!0;break}}let d=wd(a);if(n?.form&&c!==void 0){if(a.cliOnly===!0&&(n.form==="json"||n.form==="graphql")){r.push({code:"FORM_NOT_ALLOWED",message:`param "${a.name}" is CLI-only and not allowed in ${n.form} form. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(a.docOnly===!0&&n.form==="flags"){r.push({code:"FORM_NOT_ALLOWED",message:`param "${a.name}" is doc-only and not allowed in flags form. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}}if(c===null)if(d){r.push({code:"TYPE_MISMATCH",message:`expected ${a.type} for param "${a.name}", received null. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:null});continue}else c=void 0;if(c===void 0){if(a.default!==void 0){s[a.name]=a.default;continue}d&&r.push({code:"MISSING_REQUIRED",message:`missing required param: ${a.name}. Expected: ${l}`,param:a.name,synopsis:l,usage:i});continue}if(a.occurs==="+"||a.occurs==="*"||a.type==="array"){let f=GA(c);if(f===void 0){r.push({code:"TYPE_MISMATCH",message:`expected array for param "${a.name}". Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(a.occurs==="+"&&f.length===0){r.push({code:"MISSING_REQUIRED",message:`param "${a.name}" requires at least one item. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(f.length===0){s[a.name]=[];continue}let g=a.type==="array"?a.items??"string":a.type,h=[],y=!1;for(let b of f){let _=XA(g,b);if(!_.ok){r.push({code:"TYPE_MISMATCH",message:`expected ${g} item for param "${a.name}". Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:b}),y=!0;break}if(a.enum&&a.enum.length>0&&!a.enum.includes(_.value)){r.push({code:"ENUM_VIOLATION",message:`invalid value for param "${a.name}": ${JSON.stringify(_.value)}; allowed: ${a.enum.join(", ")}. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:_.value,allowed:a.enum}),y=!0;break}h.push(_.value)}y||(s[a.name]=h);continue}let p=XA(a.type,c);if(!p.ok){r.push({code:"TYPE_MISMATCH",message:`expected ${a.type} for param "${a.name}". Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:c});continue}if(a.enum&&a.enum.length>0&&!a.enum.includes(p.value)){r.push({code:"ENUM_VIOLATION",message:`invalid value for param "${a.name}": ${JSON.stringify(p.value)}; allowed: ${a.enum.join(", ")}. Expected: ${l}`,param:a.name,synopsis:l,usage:i,received:p.value,allowed:a.enum});continue}s[a.name]=p.value}return r.length>0?{ok:!1,issues:r}:{ok:!0,value:s}}var WA,Ua=M(()=>{$a();Fs();WA=(t,e)=>Object.prototype.hasOwnProperty.call(t,e)});var VA=M(()=>{Ua();Fs();$a()});var zA=M(()=>{Ua();Fs()});function KA(t){if(typeof t!="string")return!1;let e=t.trim().split(/\s+/).filter(Boolean);if(e.length===0||e.length>4)return!1;for(let n of e)if(!hX.test(n))return!1;return!0}function ZA(t){if(typeof t!="string"||t.length>200)return-1;try{let n=new RegExp(t+"|()").exec("");return n?n.length-2:-1}catch{return-1}}var hX,YA,QA,Ey=M(()=>{hX=/^(>=|>|<=|<|=)(\d+\.\d+\.\d+)$/;YA=/^[a-z][a-z0-9_.-]{0,63}$/,QA=/^[a-z][a-z0-9_.-]*$/});function vX(t,e,n,r,s){if(t===void 0)return!0;let i=o=>!s||s.length===0||s.includes(o);if(r==="+"||r==="*"||e==="array"){if(!Array.isArray(t))return!1;let o=n??(e==="array"?"string":e);return t.every(a=>i(a)&&oC(a,o))}return i(t)&&oC(t,e)}function oC(t,e){switch(e){case"string":return typeof t=="string";case"number":return typeof t=="number"&&!Number.isNaN(t);case"boolean":return typeof t=="boolean";case"object":return typeof t=="object"&&t!==null&&!Array.isArray(t);case"array":return Array.isArray(t);case"json":return t!==void 0;default:return!1}}function Ha(t){let e=[],n=(o,a,l={})=>{let c=l.usage??(l.op?`${l.op} [flags]`:"<unknown> [flags]"),u=l.synopsis??c;e.push({code:o,message:`${a}. Expected: ${u}`,...l.op?{op:l.op}:{},...l.param?{param:l.param}:{},synopsis:u,usage:c,...l.received!==void 0?{received:l.received}:{},...l.allowed!==void 0?{allowed:l.allowed}:{}})};if(t===null||typeof t!="object"||Array.isArray(t))return n("DOCUMENT_PARSE","cli.schema.v1: document must be an object",{received:t}),{ok:!1,issues:e};let r=t;r.schema!=="cli.schema.v1"&&n("DOCUMENT_PARSE",`cli.schema.v1: unsupported schema tag: ${JSON.stringify(r.schema)}`,{received:r.schema,allowed:["cli.schema.v1"]});let s=r.tool;if(typeof s!="string"||!sC.test(s)?n("DOCUMENT_PARSE",`cli.schema.v1: tool must be a string matching ^[a-z][a-z0-9_]*$, received ${JSON.stringify(s)}`,{received:s}):Ot(s)&&n("RESERVED_NAME",`cli.schema.v1: tool cannot be named "${s}" (reserved name)`,{received:s}),r.version!==void 0&&typeof r.version!="string"&&n("TYPE_MISMATCH",`cli.schema.v1: version must be a string, received ${typeof r.version}`,{received:r.version}),r.policy!==void 0)if(r.policy===null||typeof r.policy!="object"||Array.isArray(r.policy))n("TYPE_MISMATCH","cli.schema.v1: policy must be an object",{received:r.policy});else{let o=r.policy;(typeof o.dryrun!="boolean"||typeof o.readonly!="boolean")&&n("TYPE_MISMATCH","cli.schema.v1: policy must contain boolean dryrun and readonly properties",{received:r.policy})}if(r.inputs!==void 0)if(!Array.isArray(r.inputs))n("TYPE_MISMATCH","cli.schema.v1: inputs must be an array",{received:r.inputs});else for(let o of r.inputs)["flags","json","graphql"].includes(o)||n("ENUM_VIOLATION",`cli.schema.v1: inputs contains unsupported form "${String(o)}"`,{received:o,allowed:["flags","json","graphql"]});let i=(o,a,l=!1)=>{if(o===null||typeof o!="object"||Array.isArray(o)){n("TYPE_MISMATCH",`cli.schema.v1: param${a?` in "${a}"`:""} must be an object`,{op:a,received:o});return}let c=o,u=c.name;if(typeof u!="string"){n("TYPE_MISMATCH",`cli.schema.v1: param${a?` in "${a}"`:""} needs a string name`,{op:a,received:u});return}for(let y of Object.keys(c))iC.has(y)||n("UNKNOWN_PARAM",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has unknown property "${y}"`,{op:a,param:u,received:y,allowed:Array.from(iC)});(l?_X:yX).test(u)?Ot(u)&&n("RESERVED_NAME",`cli.schema.v1: ${l?"global ":""}param "${u}"${a?` in "${a}"`:""} is a reserved name`,{op:a,param:u,received:u}):n("DOCUMENT_PARSE",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} name must match ${l?"^[A-Za-z_][A-Za-z0-9_-]*$":"^[A-Za-z_]\\w*$"}`,{op:a,param:u,received:u}),!l&&u==="dryrun"&&n("DOCUMENT_PARSE",'cli.schema.v1: param cannot be named "dryrun" (reserved global policy flag)',{op:a,param:u,received:u});let m=c.aliases;if(m!==void 0&&Array.isArray(m))for(let y of m)typeof y=="string"&&Ot(y)&&n("RESERVED_NAME",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} alias "${y}" is a reserved name`,{op:a,param:u,received:y});let p=c.type;(typeof p!="string"||!Ty.has(p))&&n("ENUM_VIOLATION",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has invalid type: ${JSON.stringify(p)}`,{op:a,param:u,received:p,allowed:Array.from(Ty)});let f=c.occurs;f!==void 0&&!eC.has(f)&&n("ENUM_VIOLATION",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has invalid occurs: ${JSON.stringify(f)}`,{op:a,param:u,received:f,allowed:Array.from(eC)});let g=c.enum;g!==void 0&&(!Array.isArray(g)||!g.every(y=>typeof y=="string"||typeof y=="number"))&&n("TYPE_MISMATCH",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} enum must be an array of strings or numbers`,{op:a,param:u,received:g});let h=c.items;if(h!==void 0&&!tC.has(h)&&n("ENUM_VIOLATION",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} has invalid items type: ${JSON.stringify(h)}`,{op:a,param:u,received:h,allowed:Array.from(tC)}),c.default!==void 0&&Ty.has(p)){let y=Array.isArray(g)?g:void 0;vX(c.default,p,h,f,y)||n("TYPE_MISMATCH",`cli.schema.v1: param "${u}"${a?` in "${a}"`:""} default value does not match declared type "${p}"`,{op:a,param:u,received:c.default})}};if(r.globals!==void 0)if(!Array.isArray(r.globals))n("TYPE_MISMATCH","cli.schema.v1: globals must be an array",{received:r.globals});else for(let o of r.globals)i(o,void 0,!0);if(!Array.isArray(r.operations))n("DOCUMENT_PARSE","cli.schema.v1: operations must be an array",{received:r.operations});else{let o=new Set;for(let a of r.operations){if(a===null||typeof a!="object"||Array.isArray(a)){n("DOCUMENT_PARSE","cli.schema.v1: every operation must be an object",{received:a});continue}let l=a,c=l.name;if(typeof c!="string"){n("DOCUMENT_PARSE","cli.schema.v1: every operation needs a string name",{received:c});continue}if(sC.test(c)?Ot(c)&&n("RESERVED_NAME",`cli.schema.v1: operation cannot be named "${c}" (reserved name)`,{op:c,received:c}):n("DOCUMENT_PARSE",`cli.schema.v1: operation name "${c}" must match ^[a-z][a-z0-9_]*$`,{op:c,received:c}),o.has(c)&&n("DOCUMENT_PARSE",`cli.schema.v1: duplicate operation name "${c}"`,{op:c}),o.add(c),l.access!==void 0&&(nC.has(l.access)||n("ENUM_VIOLATION",`cli.schema.v1: operation "${c}" has invalid access: ${JSON.stringify(l.access)}`,{op:c,received:l.access,allowed:Array.from(nC)})),l.returns!==void 0&&(rC.has(l.returns)||n("ENUM_VIOLATION",`cli.schema.v1: operation "${c}" has invalid returns: ${JSON.stringify(l.returns)}`,{op:c,received:l.returns,allowed:Array.from(rC)})),!Array.isArray(l.params))n("DOCUMENT_PARSE",`cli.schema.v1: operation "${c}" needs a params array`,{op:c,received:l.params});else for(let u of l.params)i(u,c,!1)}}if(r.product!==void 0){let o=r.product;if(o===null||typeof o!="object"||Array.isArray(o))n("TYPE_MISMATCH","cli.schema.v1: product must be an object",{received:o});else{let a=o,l=new Set(["name","supported","detect"]);for(let d of Object.keys(a))l.has(d)||n("UNKNOWN_PARAM",`cli.schema.v1: unknown product property "${d}"`,{received:d,allowed:Array.from(l)});let c=a.name;typeof c!="string"?n("TYPE_MISMATCH","cli.schema.v1: product.name must be a string",{received:c}):YA.test(c)||n("DOCUMENT_PARSE",`cli.schema.v1: product.name must match ^[a-z][a-z0-9_.-]{0,63}$, received ${JSON.stringify(c)}`,{received:c});let u=a.supported;if(typeof u!="string"?n("TYPE_MISMATCH","cli.schema.v1: product.supported must be a string",{received:u}):KA(u)||n("DOCUMENT_PARSE",`cli.schema.v1: product.supported must be a conjunction of 1 to 4 comparators (>=, >, <=, <, = followed by numeric x.y.z), received ${JSON.stringify(u)}`,{received:u}),a.detect!==void 0){let d=a.detect;if(d===null||typeof d!="object"||Array.isArray(d))n("TYPE_MISMATCH","cli.schema.v1: product.detect must be an object",{received:d});else{let m=d,p=new Set(["argv","pattern"]);for(let h of Object.keys(m))p.has(h)||n("UNKNOWN_PARAM",`cli.schema.v1: unknown product.detect property "${h}"`,{received:h,allowed:Array.from(p)});let f=m.argv;if(!Array.isArray(f)||f.length<1||f.length>8||!f.every(h=>typeof h=="string"&&h.length>0))n("DOCUMENT_PARSE","cli.schema.v1: product.detect.argv must be an array of 1 to 8 non-empty strings",{received:f});else{let h=f[0];QA.test(h)||n("DOCUMENT_PARSE",`cli.schema.v1: product.detect.argv[0] must match ^[a-z][a-z0-9_.-]*$ (no slashes), received ${JSON.stringify(h)}`,{received:h})}let g=m.pattern;if(typeof g!="string")n("TYPE_MISMATCH","cli.schema.v1: product.detect.pattern must be a string",{received:g});else if(g.length>200)n("DOCUMENT_PARSE",`cli.schema.v1: product.detect.pattern exceeds maximum length of 200 characters (${g.length})`,{received:g});else{let h=ZA(g);h!==1&&n("DOCUMENT_PARSE",`cli.schema.v1: product.detect.pattern must be a valid RegExp with exactly one capture group, found ${h}`,{received:g})}}}}}return e.length>0?{ok:!1,issues:e}:{ok:!0,value:t}}var Ty,eC,tC,nC,rC,sC,yX,_X,iC,Sy=M(()=>{$a();Ua();Ey();Ty=new Set(["string","number","boolean","object","array","json"]),eC=new Set(["1","?","+","*"]),tC=new Set(["string","number","boolean","object"]),nC=new Set(["read","write","dynamic"]),rC=new Set(["object","array","string","number","boolean","null"]),sC=/^[a-z][a-z0-9_]*$/,yX=/^[A-Za-z_]\w*$/,_X=/^[A-Za-z_][A-Za-z0-9_-]*$/,iC=new Set(["name","type","occurs","default","enum","positional","items","description","aliases","cliOnly","docOnly","derived"])});var aC=M(()=>{Fs();Fs()});function lC(t,e){let n=Object.create(null);for(let[r,s]of Object.entries(e))s!==void 0&&(n[r]=s);return JSON.stringify({op:t.name,params:n})}var cC=M(()=>{});var uC=M(()=>{$a();Fs();Ua();VA();zA();Sy();aC();cC();Ey()});var yC={};Mn(yC,{INLINE_DOCUMENT_LIMIT:()=>pC,createSchemaModule:()=>hC,createSchemaModuleFactory:()=>CX,parseSchemaDocument:()=>ky,schemaToDeclarations:()=>gC});import{mkdtempSync as bX,writeFileSync as wX,rmSync as EX}from"node:fs";import{tmpdir as TX}from"node:os";import{join as dC}from"node:path";function ky(t){let e;try{e=JSON.parse(t)}catch(s){throw Error("not valid JSON: "+(s instanceof Error?s.message:String(s)))}let n=Ha(e);if(!n.ok){let s=n.issues[0];throw Error(s.message+(n.issues.length>1?` (and ${n.issues.length-1} more issue${n.issues.length>2?"s":""})`:""))}let r=n.value;for(let s of r.operations)for(let i of s.params)if(Ry.includes(i.name))throw Error(`${r.tool} ${s.name}: param '${i.name}' collides with a runner global`);return r}function Ed(t){return RX(t)?"list":{string:"string",number:"number",boolean:"boolean",object:"map",array:"list",json:"any"}[t.type]??"any"}function fC(t,e){let n=e.params.filter(a=>!a.cliOnly),r=n.filter(a=>a.positional===!0),s=n.filter(a=>a.positional!==!0),i=s.some(Yr),o=r.findIndex(a=>!Yr(a));if(o>=0&&(r.slice(o).some(Yr)||i))throw Error(`${t} ${e.name}: a required argument follows an optional positional`);return{positionals:r,options:s,optsRequired:i}}function xX(t){let e=[t.default!==void 0?"default: "+JSON.stringify(t.default):"",t.enum?.length?"one of: "+t.enum.join(", "):"",t.derived?"loosely typed":""].filter(Boolean),n=t.occurs==="+"?"+":t.occurs==="*"?"*":Yr(t)?"":"?";return Ed(t)+n+(t.description?" \u2014 "+t.description:"")+(e.length?" ("+e.join("; ")+")":"")}function gC(t,e=t.tool){return{functions:t.operations.map(r=>{let s=e+"."+r.name,{positionals:i,options:o,optsRequired:a}=fC(t.tool,r),l=[...o.map(m=>({name:m.name,type:Ed(m),...Yr(m)?{required:!0}:{},...m.enum?.length?{values:[...m.enum]}:{}})),...Ry.map(m=>({name:m,type:"boolean"}))],c=[...i.map(m=>({name:m.name,type:Ed(m),checkLiteral:!0,...m.enum?.length?{values:[...m.enum]}:{},...Yr(m)?{}:{optional:!0}})),{name:"opts",type:"map",keys:l,...r.additionalParams?{open:!0}:{},...a?{}:{optional:!0}},{name:"dryrun",type:"boolean",optional:!0}],u=i.filter(Yr).length+(a?1:0),d={name:s,module:e,category:IX[r.access??"write"]??"Write operations",signature:s+"(...)",description:(r.description??`${t.tool} ${r.name}`)+(r.params.some(m=>m.derived)?" (derived schema: params loosely typed)":""),parameters:[...i,...o].map(m=>({name:m.name,type:Ed(m)+(Yr(m)?"":"?"),description:xX(m)})).concat([{name:"readonly",type:"boolean?",description:`boolean? \u2014 pass --readonly to ${t.tool}`},{name:"confirm",type:"boolean?",description:`boolean? \u2014 pass --confirm to ${t.tool} (attests a dangerous write)`}]),returns:{type:"map",description:`{status:"ok", result} with the parsed JSON of ${t.tool} ${r.name}; {status:"error", error:{code, message}}; {status:"simulated"} in the dry pass`}};return{name:s,arity:{min:u,max:i.length+2},params:c,returnType:"map",readonly:!1,doc:d}}),globals:[]}}function mC(t){return t.trimEnd().split(`
2419
+ `).slice(-kX).join(`
2420
+ `)}function AX(t){return t.map(e=>`${e.code}${e.param?` '${e.param}'`:""}${e.suggestion?` (did you mean '${e.suggestion}'?)`:""}: ${e.message}`).join("; ")}function hC(t,e={}){let n=ky(t.text),r=t.alias??n.tool;if(!SX.test(r))throw Error(`namespace ${JSON.stringify(r)} is not an identifier`);let s=e.timeoutMs??0,i=gC(n,r);return{name:"schema:"+r,nativeNamespace:r,declarations:i,async activate(o){let a=ky(t.text),l={};for(let c of a.operations){let u=r+"."+c.name,{positionals:d}=fC(a.tool,c);l[u]=async(...m)=>{let p=m[d.length+1]===!0,f=m[d.length]??{};if(!Ba(f))throw Error(`${u}: options must be a map`);if(Object.hasOwn(f,"dryrun"))throw Error(`${u}: dryrun is supplied by the language; omit it`);let g=[],h=Object.create(null);for(let[O,A]of d.entries())m[O]!==void 0&&(h[A.name]=m[O]);for(let[O,A]of Object.entries(f)){if(Ry.includes(O)){if(typeof A!="boolean")throw Error(`${u}: option '${O}' must be boolean`);A&&g.push("--"+O);continue}if(Object.hasOwn(h,O))throw Error(`${u}: '${O}' given both positionally and as an option`);h[O]=A}if(p)return{status:"simulated",simulated:u};let y=wy(c,h,{form:"json"});if(!y.ok)return Kr({code:"validation",message:`${u}: ${AX(y.issues)}`,issues:[...y.issues]});let b=o.platform??process.platform,_=a.tool,v=lC(c,h),E=()=>{},R,S;try{let O=[_,c.name,"--input-json",v,...g];if(Buffer.byteLength(v)>pC){let A=bX(dC(TX(),"lmscript-"+a.tool+"-")),w=dC(A,"input.json");E=()=>EX(A,{recursive:!0,force:!0}),wX(w,v,{mode:384}),O=[_,c.name,"--input-file",w,...g]}S=await vl(O,s,b,o.signal,{cwd:o.cwd,env:{...o.env,LMSCRIPT_RUN_ORIGIN:JSON.stringify(o.executionOrigin)}},{maxOutputBytes:e.maxOutputBytes??0})}catch(O){let A=O;if(A?.code==="ERR_OUTPUT_LIMIT")return Kr({code:"output_limit",message:`${u}: ${a.tool} ${A.message}`});if(A?.message==="Aborted")throw O;return Kr({code:"launch",message:`${u}: cannot run ${a.tool}: ${A?.message??String(O)}`})}finally{try{E()}catch(O){R=O}}if(S.timed_out)return Kr({code:"timeout",message:`${u}: ${a.tool} timed out after ${s} ms`,...S.stderr.trim()?{stderr_tail:mC(S.stderr)}:{}});let I,N=!1;try{I=JSON.parse(S.stdout),N=!0}catch{}if(N&&Ba(I)&&I.success===!1&&Ba(I.error)){let O=I.error,A=Ba(O.data)?O.data:{},w=Ba(A.details)?A.details:A,T=Array.isArray(w.issues)?[...w.issues]:[],k=O.code==="VALIDATION_ERROR"?` (the input passed client validation; schema ${a.version??"unversioned"} may be stale)`:"";return Kr({code:"envelope",message:`${u}: ${String(O.code??"ERROR")}: ${String(O.message??"")}${k}`,tool_code:String(O.code??"ERROR"),...T.length?{issues:T}:{},exit:S.code})}return S.code!==0||S.signal!==null?Kr({code:"exit",message:`${u}: ${a.tool} exit ${S.code??"none"}${S.signal?` (signal ${S.signal})`:""}`,exit:S.code,signal:S.signal,...S.stderr.trim()?{stderr_tail:mC(S.stderr)}:{}}):N?R!==void 0?Kr({code:"launch",message:`${u}: cannot remove temporary input: ${R instanceof Error?R.message:String(R)}`}):{status:"ok",result:I}:Kr({code:"parse",message:`${u}: ${a.tool} ${c.name} printed invalid JSON${S.stdout.trim()?": "+S.stdout.trim().slice(0,200):" (empty stdout)"}`})}}return{functions:l,globals:{},dispose(){}}}}}function CX(t={}){return e=>hC(e,t)}var Ry,SX,kX,pC,Yr,RX,IX,Ba,Kr,_C=M(()=>{"use strict";uC();Xs();Ry=["readonly","confirm"],SX=/^[A-Za-z_]\w*$/,kX=12,pC=100*1024;Yr=t=>t.default===void 0&&(t.occurs===void 0||t.occurs==="1"||t.occurs==="+"),RX=t=>t.type==="array"||t.occurs==="+"||t.occurs==="*";IX={read:"Read operations",write:"Write operations",dynamic:"Dynamic operations"};Ba=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Kr=t=>({status:"error",error:t})});function Re(t){return{ok:!0,value:t}}function ue(t,e,n={}){return{ok:!1,error:{code:t,message:e,...n},code:t,message:e,...n.file?{file:n.file}:{},...n.issues?{issues:n.issues}:{},...n.details?{details:n.details}:{}}}var Td=M(()=>{});function Wa(t){if(typeof t!="string"||t.trim()==="")return ue("SPEC_SYNTAX","Module spec must be a non-empty string");let e=t.indexOf("#");if(e!==-1){let a=t.slice(0,e),l=t.slice(e+1),c=vC.exec(a);if(!c)return ue("SPEC_SYNTAX",`Invalid module spec syntax: "${t}" (expected @owner/repo[#(latest|dev)])`);let u=c[1],d=c[2];if(u==="."||u===".."||d==="."||d==="..")return ue("SPEC_SYNTAX",`Invalid owner or repo name: "${t}"`);if(l!=="latest"&&l!=="dev")return ue("SPEC_CHANNEL","only the latest and dev channels are supported");let m=l,p=`@${u}/${d}#${m}`;return Re({owner:u,repo:d,channel:m,key:p,requested:t})}let n=vC.exec(t);if(!n)return ue("SPEC_SYNTAX",`Invalid module spec syntax: "${t}" (expected @owner/repo[#(latest|dev)])`);let r=n[1],s=n[2];if(r==="."||r===".."||s==="."||s==="..")return ue("SPEC_SYNTAX",`Invalid owner or repo name: "${t}"`);let i="latest",o=`@${r}/${s}#${i}`;return Re({owner:r,repo:s,channel:i,key:o,requested:t})}var vC,Iy=M(()=>{Td();vC=/^@([A-Za-z0-9][A-Za-z0-9._-]*)\/([A-Za-z0-9][A-Za-z0-9._-]*)$/});import{homedir as NX}from"node:os";import{isAbsolute as bC,join as wC,relative as EC,resolve as xy}from"node:path";function Gi(t=process.env){let e=t.LMCTL_HOME&&t.LMCTL_HOME.trim()!==""?t.LMCTL_HOME:wC(t.HOME??NX(),".lmctl");return wC(e,"modules")}function Ay(t,e){let n=xy(t),r=xy(n,"github.com"),s=xy(r,e.owner,e.repo,e.channel),i=EC(n,s),o=EC(r,s);if(i.startsWith("..")||bC(i)||o.startsWith("..")||bC(o))throw new Error(`Path traversal detected: entry directory "${s}" escapes cache root "${n}"`);return s}function Sd(t){return`cli.schema.${t}.json`}var Cy=M(()=>{});import{createHash as SC,randomUUID as kd}from"node:crypto";import{existsSync as Rd,promises as Gt}from"node:fs";import{dirname as Oie,isAbsolute as Lie,join as pn,relative as Mie,resolve as Pie}from"node:path";async function MX(t){let e=pn(t,RC);if(!Rd(e))return Re(t);try{let n=(await Gt.readFile(e,"utf8")).trim();if(!OX.test(n)||n==="."||n==="..")return ue("CACHE_CORRUPT",`Invalid ${e}`);let r=pn(t,"generations",n);return Rd(r)?Re(r):ue("CACHE_CORRUPT",`Missing cache generation ${n}`)}catch(n){return ue("CACHE_CORRUPT",`Failed to read ${e}: ${n?.message??String(n)}`)}}function Ly(t){return typeof t=="string"?Wa(t):Re(t)}async function $s(t,e){let n=Ly(t);if(!n.ok)return ue(n.code,n.message);let r=n.value,s=e?.root??Gi(),i;try{i=Ay(s,r)}catch(h){return ue("PATH_TRAVERSAL",h?.message??String(h))}let o=Sd(r.channel),a=await MX(i);if(!a.ok)return a;let l=a.value,c=pn(l,o),u=pn(l,"meta.json");if(!Rd(c)||!Rd(u))return ue(l===i?"NOT_INSTALLED":"CACHE_CORRUPT",`Module ${r.key} is missing cache files`);let d,m;try{d=await Gt.readFile(c)}catch(h){return ue("CACHE_CORRUPT",`Failed to read ${c}: ${h?.message??String(h)}; run: lmbee module install ${r.key} --force`,{file:c})}try{let h=await Gt.readFile(u,"utf-8");m=JSON.parse(h)}catch(h){return ue("CACHE_CORRUPT",`Failed to read or parse ${u}: ${h?.message??String(h)}; run: lmbee module install ${r.key} --force`,{file:u})}let p=SC("sha256").update(d).digest("hex");if(p!==m.sha256)return ue("CACHE_CORRUPT",`Cached schema hash mismatch in ${c}: expected ${m.sha256}, got ${p}; run: lmbee module install ${r.key} --force`,{file:c});let f;try{f=JSON.parse(d.toString("utf-8"))}catch(h){return ue("BAD_JSON",`Failed to parse ${c} as JSON: ${h?.message??String(h)}`,{file:c})}let g=Ha(f);return g.ok?Re({spec:r,dir:i,path:c,sha256:p,fetchedAt:m.fetched_at,lastChecked:m.last_checked??m.fetched_at,etag:m.etag,channel:r.channel,tool:g.value.tool,version:g.value.version,document:g.value}):ue("INVALID_SCHEMA",`Cached schema in ${c} is invalid: ${g.issues[0]?.message}`,{file:c,issues:g.issues})}async function IC(t,e){let{timeoutMs:n,fetchImpl:r,etag:s}=e,i;try{let o=AbortSignal.timeout(n),a={};if(s&&(a["If-None-Match"]=s),i=await r(t,{signal:o,headers:a,redirect:"manual"}),i.status>=300&&i.status<400&&i.status!==304){let l=i.headers.get("location");if(!l)return ue("FETCH_FAILED",`Redirect response from ${t} missing Location header`);let c=new URL(l,t);if(c.protocol!=="https:"||c.hostname!=="raw.githubusercontent.com")return ue("FETCH_FAILED",`Cross-host or non-HTTPS redirect to "${l}" refused (must stay on raw.githubusercontent.com)`);i=await r(c.href,{signal:o,headers:a,redirect:"manual"})}}catch(o){return o?.name==="TimeoutError"||o?.name==="AbortError"?ue("FETCH_FAILED",`Fetch timed out after ${n}ms for ${t}`):ue("FETCH_FAILED",`Network error fetching ${t}: ${o?.message??String(o)}`)}return Re(i)}async function xC(t,e,n,r,s,i){let o;try{if(t.body&&typeof t.body.getReader=="function"){let u=t.body.getReader(),d=[],m=0;for(;;){let{done:p,value:f}=await u.read();if(p)break;if(m+=f.length,m>e)return await u.cancel(),ue("OUTPUT_LIMIT",`Schema exceeds maximum size limit of ${e} bytes`);d.push(f)}o=Buffer.concat(d)}else{let u=await t.arrayBuffer();if(u.byteLength>e)return ue("OUTPUT_LIMIT",`Schema exceeds maximum size limit of ${e} bytes`);o=Buffer.from(u)}}catch(u){return u?.name==="TimeoutError"||u?.name==="AbortError"?ue("FETCH_FAILED",`Fetch stream timed out after ${n}ms`):ue("FETCH_FAILED",`Error reading response stream: ${u?.message??String(u)}`)}let a;try{a=JSON.parse(o.toString("utf-8"))}catch(u){return ue("BAD_JSON",`Failed to parse ${s} from ${i} as JSON: ${u?.message??String(u)}`)}let l=Ha(a);if(!l.ok){let u=l.issues[0]?.message??"Schema validation failed";return ue("INVALID_SCHEMA",`Invalid schema for ${r}: ${u}`,{issues:l.issues})}let c=SC("sha256").update(o).digest("hex");return Re({buffer:o,sha256:c,schema:l.value})}async function Oy(t,e,n,r){let s=`gen-${Date.now()}-${kd()}`,i=pn(t,"generations",s),o=pn(i,`.tmp.schema.${kd()}`),a=pn(i,`.tmp.meta.${kd()}`),l=pn(i,e),c=pn(i,"meta.json"),u=pn(t,`.tmp.current.${kd()}`);try{await Gt.mkdir(i,{recursive:!0,mode:448}),await Gt.writeFile(o,n,{mode:384}),await Gt.rename(o,l),await TC(l,384),await Gt.writeFile(a,JSON.stringify(r,null,2)+`
2421
2421
  `,{mode:384}),await Gt.rename(a,c),await TC(c,384),await Gt.writeFile(u,s+`
2422
- `,{mode:384}),await Gt.rename(u,pn(t,RC))}catch(d){return await Ny(o),await Ny(a),await Ny(u),ue("ATOMIC_WRITE_FAILED",`Failed to write cached module files: ${d?.message??String(d)}`)}return Re(void 0)}async function AC(t,e){let n=Ly(t);if(!n.ok)return ue(n.code,n.message);let r=n.value,s=e?.root??Gi(),i=e?.ttlMs??6*60*60*1e3,o=e?.now??(()=>new Date),a=e?.fetchImpl??globalThis.fetch,l=e?.install??!0,c=e?.update??!0,u=e?.timeoutMs??3e3,d=e?.maxBytes??1048576,m=await $s(r,{root:s});if(!m.ok){if(m.code==="CACHE_CORRUPT")return m;if(m.code==="NOT_INSTALLED"){if(!l)return ue("NOT_INSTALLED",`Module ${r.key} is not installed; run: lmbee module install ${r.key}`);let P=await LX(r,{root:s,fetchImpl:a,now:o,timeoutMs:u,maxBytes:d});return P.ok?Re({module:P.value.entry,source:"installed"}):ue(P.code,P.message,{file:P.file,issues:P.issues,details:P.details})}return m}let p=m.value,f=o().getTime(),g=p.lastChecked?new Date(p.lastChecked).getTime():NaN,h=!isNaN(g)&&g>f,y=isNaN(g),b=f-g;if(!y&&!h&&b>=0&&b<i||!c)return Re({module:p,source:"cache"});let v=Sd(r.channel),E=`${kC}/${r.owner}/${r.repo}/HEAD/${v}`,R=await IC(E,{timeoutMs:u,fetchImpl:a,etag:p.etag});if(!R.ok)return Re({module:p,source:"stale-cache",warning:R.message});let S=R.value;if(S.status===304){let P=o().toISOString(),j=S.headers.get("etag")??S.headers.get("ETag")??p.etag,F;try{F=await Gt.readFile(p.path)}catch(ne){return Re({module:p,source:"stale-cache",warning:`Failed to read cached schema: ${ne?.message??String(ne)}`})}let Z={spec:r.key,url:E,sha256:p.sha256,fetched_at:p.fetchedAt,last_checked:P,etag:j,channel:r.channel,tool:p.tool,version:p.version,bytes:F.length},q=await Oy(p.dir,v,F,Z);if(!q.ok)return Re({module:p,source:"stale-cache",warning:q.message});let Y=await $s(r,{root:s});return Y.ok?Re({module:Y.value,source:"network"}):Re({module:p,source:"stale-cache",warning:Y.message})}if(S.status!==200)return Re({module:p,source:"stale-cache",warning:`Failed to refresh ${r.key}: HTTP ${S.status} ${S.statusText}`});let I=await xC(S,d,u,r.key,v,E);if(!I.ok)return Re({module:p,source:"stale-cache",warning:I.message});let{buffer:N,sha256:O,schema:A}=I.value,w=S.headers.get("etag")??S.headers.get("ETag")??void 0,T=o().toISOString(),k=T,x={spec:r.key,url:E,sha256:O,fetched_at:T,last_checked:k,etag:w,channel:r.channel,tool:A.tool,version:A.version??"unknown",bytes:N.length},C=await Oy(p.dir,v,N,x);if(!C.ok)return Re({module:p,source:"stale-cache",warning:C.message});let L=await $s(r,{root:s});return L.ok?Re({module:L.value,source:"network"}):Re({module:p,source:"stale-cache",warning:L.message})}async function LX(t,e){let n=Ly(t);if(!n.ok)return ue(n.code,n.message);let r=n.value,s=e?.root??Gi(),i=e?.fetchImpl??globalThis.fetch,o=e?.now??(()=>new Date),a=e?.timeoutMs??1e4,l=e?.maxBytes??NX,c=e?.force??!1,u;try{u=Ay(s,r)}catch(O){return ue("PATH_TRAVERSAL",O?.message??String(O))}let d=Sd(r.channel),m=`${kC}/${r.owner}/${r.repo}/HEAD/${d}`,p=await $s(r,{root:s});if(!c&&p.ok)return Re({action:"unchanged",entry:p.value});let f=await IC(m,{timeoutMs:a,fetchImpl:i});if(!f.ok)return f;let g=f.value;if(g.status===404)return ue("FETCH_FAILED",`Module ${r.key} not found: expected ${d} at the root of the default branch for ${r.owner}/${r.repo}`,{details:{status:404,url:m,file:d}});if(!g.ok)return ue("FETCH_FAILED",`Failed to fetch ${m}: HTTP ${g.status} ${g.statusText}`,{details:{status:g.status,url:m}});let h=await xC(g,l,a,r.key,d,m);if(!h.ok)return h;let{buffer:y,sha256:b,schema:_}=h.value;if(!c&&p.ok&&p.value.sha256===b)return Re({action:"unchanged",entry:p.value});let v=g.headers.get("etag")??g.headers.get("ETag")??void 0,E=o().toISOString(),R=E,S={spec:r.key,url:m,sha256:b,fetched_at:E,last_checked:R,etag:v,channel:r.channel,tool:_.tool,version:_.version??"unknown",bytes:y.length},I=await Oy(u,d,y,S);if(!I.ok)return I;let N=await $s(r,{root:s});return N.ok?Re({action:p.ok?"replaced":"installed",entry:N.value}):N}async function TC(t,e){try{await Gt.chmod(t,e)}catch{}}async function Ny(t){try{await Gt.unlink(t)}catch{}}var kC,CX,NX,RC,CC=M(()=>{Sy();Cy();Iy();Td();kC="https://raw.githubusercontent.com",CX=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,NX=2*1024*1024,RC="CURRENT"});var NC=M(()=>{Td();Iy();Cy();CC()});var PC={};Mn(PC,{createModuleResolver:()=>FX,isModuleSpecifier:()=>DX,normalizeModuleSpec:()=>LC,parseModuleOverrides:()=>MC});import{readFileSync as MX}from"node:fs";import{resolve as PX}from"node:path";function DX(t){return t.startsWith("@")}function LC(t){let e=Wa(t);if(!e.ok)throw Error(`${t}: ${e.message}`);return e.value.key}function MC(t,e){let n=new Map;for(let r of t){let s=r.indexOf("=");if(s<1||s===r.length-1)throw Error(`--module expects @owner/repo=<file> (a schema module override), got ${JSON.stringify(r)}; the retired --module NAME host-module loader no longer exists`);n.set(LC(r.slice(0,s)),PX(e,r.slice(s+1)))}return n}function OC(t,e,n){return{key:t.spec.key,channel:t.channel,origin:e,file:t.path,...t.version!==void 0?{version:t.version}:{},sha256:t.sha256,fetchedAt:t.fetchedAt,lastChecked:t.lastChecked,...n?{warning:n}:{}}}function FX(t){let e=MC(t.overrides??[],t.cwd??process.cwd()),n=t.root??Gi({...t.env}),r=new Map;return{resolve:async i=>{let o=Wa(i);if(!o.ok)throw Error(`${i}: ${o.message}`);let a=o.value.key,l=e.get(a);if(l!==void 0){let u;try{u=MX(l,"utf8")}catch(d){throw Error(`--module ${a}=${l}: ${d instanceof Error?d.message:String(d)}`)}return r.set(a,{key:a,channel:o.value.channel,origin:"override",file:l}),{key:a,source:u}}if(t.mode==="cache"){let u=await $s(o.value,{root:n});if(!u.ok)throw u.code==="NOT_INSTALLED"?Error(`module ${a} is not installed; run the script once to install it, or: lmbee module install @${o.value.owner}/${o.value.repo}${o.value.channel==="latest"?"":"#"+o.value.channel}`):Error(`module ${a}: ${u.message}`);return r.set(a,OC(u.value,"cache")),{key:a,source:JSON.stringify(u.value.document)}}let c=await AC(o.value,{root:n,install:!0,update:!0,...t.fetchImpl?{fetchImpl:t.fetchImpl}:{},...t.now?{now:t.now}:{}});if(!c.ok)throw Error(`module ${a}: ${c.message}`);return r.set(a,OC(c.value.module,c.value.source,c.value.warning)),{key:a,source:JSON.stringify(c.value.module.document)}},provenance:r}}var DC=M(()=>{"use strict";NC()});var P_={};Mn(P_,{runCli:()=>Py,stableDiagnostic:()=>qa});import{readFileSync as FC,fstatSync as $C,statSync as jC,writeSync as BC,openSync as $X,closeSync as UC}from"node:fs";import{Socket as jX}from"node:net";import{resolve as Ji,dirname as UX}from"node:path";function qa(t,e="<inline>"){return`${t.severity}:${t.file&&t.file!=="<main>"?t.file:e}:${t.line}:${t.column}: ${t.message}
2423
- `}function HX(t,e){let n;try{n=jC(t)}catch{return}for(let r of e)try{let s=jC(r);if(s.dev===n.dev&&s.ino===n.ino)return r}catch{}}function BX(t,e){let n=Buffer.from(e+`
2424
- `),r=0;for(;r<n.length;)try{let s=BC(t,n,r,n.length-r);if(s<=0)throw new Error("trace write made no progress");r+=s}catch(s){if(s.code==="EINTR")continue;throw s}}function WX(t){let e=Buffer.from(t),n=0,r;for(;n<e.length;)try{let s=BC(2,e,n,e.length-n);if(s===0)return;n+=s}catch(s){let i=s.code;if(i==="EPIPE"||i==="EBADF")return;if(i==="EINTR")continue;if(i==="EAGAIN"||i==="EWOULDBLOCK"){r??=new Int32Array(new SharedArrayBuffer(4)),Atomics.wait(r,0,0,1);continue}throw s}}async function Py(t,e={}){if(t.length===1&&["--version","-v"].includes(t[0]))return(e.stdout??($=>process.stdout.write($)))("lmscript "+fm()+`
2425
- `),0;let n=[...t],r=e.cwd??process.cwd(),s={...e.env??process.env},i=e.stdout??($=>process.stdout.write($)),o=e.stderr??WX,a=new Set,l=[],c=$=>{$.startsWith("error: ")&&l.push($);let z=$.match(/^error:.*:[0-9]+:[0-9]+: ([^\n]+)/);z&&a.add(z[1]),o($)},u,d=!1,m=!1,p,f,g,h=!1,y=!1,b,_,v="text",E,R=new Set,S=new Set(["--base-dir","--source-name","--resumepoint","--pref","--dry-loop-limit","--dryrun-timeout","--plan-format","--module","--trace"]),I=[],N=new Set(["--check","--dry-run","--lint","--check-files","--no-preflight",...S]);for(;n.length&&N.has(n[0]);){let $=n.shift();if(R.has($)&&$!=="--module")return c("error: "+$+` may be specified only once
2422
+ `,{mode:384}),await Gt.rename(u,pn(t,RC))}catch(d){return await Ny(o),await Ny(a),await Ny(u),ue("ATOMIC_WRITE_FAILED",`Failed to write cached module files: ${d?.message??String(d)}`)}return Re(void 0)}async function AC(t,e){let n=Ly(t);if(!n.ok)return ue(n.code,n.message);let r=n.value,s=e?.root??Gi(),i=e?.ttlMs??6*60*60*1e3,o=e?.now??(()=>new Date),a=e?.fetchImpl??globalThis.fetch,l=e?.install??!0,c=e?.update??!0,u=e?.timeoutMs??3e3,d=e?.maxBytes??1048576,m=await $s(r,{root:s});if(!m.ok){if(m.code==="CACHE_CORRUPT")return m;if(m.code==="NOT_INSTALLED"){if(!l)return ue("NOT_INSTALLED",`Module ${r.key} is not installed; run: lmbee module install ${r.key}`);let P=await PX(r,{root:s,fetchImpl:a,now:o,timeoutMs:u,maxBytes:d});return P.ok?Re({module:P.value.entry,source:"installed"}):ue(P.code,P.message,{file:P.file,issues:P.issues,details:P.details})}return m}let p=m.value,f=o().getTime(),g=p.lastChecked?new Date(p.lastChecked).getTime():NaN,h=!isNaN(g)&&g>f,y=isNaN(g),b=f-g;if(!y&&!h&&b>=0&&b<i||!c)return Re({module:p,source:"cache"});let v=Sd(r.channel),E=`${kC}/${r.owner}/${r.repo}/HEAD/${v}`,R=await IC(E,{timeoutMs:u,fetchImpl:a,etag:p.etag});if(!R.ok)return Re({module:p,source:"stale-cache",warning:R.message});let S=R.value;if(S.status===304){let P=o().toISOString(),j=S.headers.get("etag")??S.headers.get("ETag")??p.etag,F;try{F=await Gt.readFile(p.path)}catch(ne){return Re({module:p,source:"stale-cache",warning:`Failed to read cached schema: ${ne?.message??String(ne)}`})}let Z={spec:r.key,url:E,sha256:p.sha256,fetched_at:p.fetchedAt,last_checked:P,etag:j,channel:r.channel,tool:p.tool,version:p.version,bytes:F.length},q=await Oy(p.dir,v,F,Z);if(!q.ok)return Re({module:p,source:"stale-cache",warning:q.message});let Y=await $s(r,{root:s});return Y.ok?Re({module:Y.value,source:"network"}):Re({module:p,source:"stale-cache",warning:Y.message})}if(S.status!==200)return Re({module:p,source:"stale-cache",warning:`Failed to refresh ${r.key}: HTTP ${S.status} ${S.statusText}`});let I=await xC(S,d,u,r.key,v,E);if(!I.ok)return Re({module:p,source:"stale-cache",warning:I.message});let{buffer:N,sha256:O,schema:A}=I.value,w=S.headers.get("etag")??S.headers.get("ETag")??void 0,T=o().toISOString(),k=T,x={spec:r.key,url:E,sha256:O,fetched_at:T,last_checked:k,etag:w,channel:r.channel,tool:A.tool,version:A.version??"unknown",bytes:N.length},C=await Oy(p.dir,v,N,x);if(!C.ok)return Re({module:p,source:"stale-cache",warning:C.message});let L=await $s(r,{root:s});return L.ok?Re({module:L.value,source:"network"}):Re({module:p,source:"stale-cache",warning:L.message})}async function PX(t,e){let n=Ly(t);if(!n.ok)return ue(n.code,n.message);let r=n.value,s=e?.root??Gi(),i=e?.fetchImpl??globalThis.fetch,o=e?.now??(()=>new Date),a=e?.timeoutMs??1e4,l=e?.maxBytes??LX,c=e?.force??!1,u;try{u=Ay(s,r)}catch(O){return ue("PATH_TRAVERSAL",O?.message??String(O))}let d=Sd(r.channel),m=`${kC}/${r.owner}/${r.repo}/HEAD/${d}`,p=await $s(r,{root:s});if(!c&&p.ok)return Re({action:"unchanged",entry:p.value});let f=await IC(m,{timeoutMs:a,fetchImpl:i});if(!f.ok)return f;let g=f.value;if(g.status===404)return ue("FETCH_FAILED",`Module ${r.key} not found: expected ${d} at the root of the default branch for ${r.owner}/${r.repo}`,{details:{status:404,url:m,file:d}});if(!g.ok)return ue("FETCH_FAILED",`Failed to fetch ${m}: HTTP ${g.status} ${g.statusText}`,{details:{status:g.status,url:m}});let h=await xC(g,l,a,r.key,d,m);if(!h.ok)return h;let{buffer:y,sha256:b,schema:_}=h.value;if(!c&&p.ok&&p.value.sha256===b)return Re({action:"unchanged",entry:p.value});let v=g.headers.get("etag")??g.headers.get("ETag")??void 0,E=o().toISOString(),R=E,S={spec:r.key,url:m,sha256:b,fetched_at:E,last_checked:R,etag:v,channel:r.channel,tool:_.tool,version:_.version??"unknown",bytes:y.length},I=await Oy(u,d,y,S);if(!I.ok)return I;let N=await $s(r,{root:s});return N.ok?Re({action:p.ok?"replaced":"installed",entry:N.value}):N}async function TC(t,e){try{await Gt.chmod(t,e)}catch{}}async function Ny(t){try{await Gt.unlink(t)}catch{}}var kC,OX,LX,RC,CC=M(()=>{Sy();Cy();Iy();Td();kC="https://raw.githubusercontent.com",OX=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,LX=2*1024*1024,RC="CURRENT"});var NC=M(()=>{Td();Iy();Cy();CC()});var PC={};Mn(PC,{createModuleResolver:()=>jX,isModuleSpecifier:()=>$X,normalizeModuleSpec:()=>LC,parseModuleOverrides:()=>MC});import{readFileSync as DX}from"node:fs";import{resolve as FX}from"node:path";function $X(t){return t.startsWith("@")}function LC(t){let e=Wa(t);if(!e.ok)throw Error(`${t}: ${e.message}`);return e.value.key}function MC(t,e){let n=new Map;for(let r of t){let s=r.indexOf("=");if(s<1||s===r.length-1)throw Error(`--module expects @owner/repo=<file> (a schema module override), got ${JSON.stringify(r)}; the retired --module NAME host-module loader no longer exists`);n.set(LC(r.slice(0,s)),FX(e,r.slice(s+1)))}return n}function OC(t,e,n){return{key:t.spec.key,channel:t.channel,origin:e,file:t.path,...t.version!==void 0?{version:t.version}:{},sha256:t.sha256,fetchedAt:t.fetchedAt,lastChecked:t.lastChecked,...n?{warning:n}:{}}}function jX(t){let e=MC(t.overrides??[],t.cwd??process.cwd()),n=t.root??Gi({...t.env}),r=new Map;return{resolve:async i=>{let o=Wa(i);if(!o.ok)throw Error(`${i}: ${o.message}`);let a=o.value.key,l=e.get(a);if(l!==void 0){let u;try{u=DX(l,"utf8")}catch(d){throw Error(`--module ${a}=${l}: ${d instanceof Error?d.message:String(d)}`)}return r.set(a,{key:a,channel:o.value.channel,origin:"override",file:l}),{key:a,source:u}}if(t.mode==="cache"){let u=await $s(o.value,{root:n});if(!u.ok)throw u.code==="NOT_INSTALLED"?Error(`module ${a} is not installed; run the script once to install it, or: lmbee module install @${o.value.owner}/${o.value.repo}${o.value.channel==="latest"?"":"#"+o.value.channel}`):Error(`module ${a}: ${u.message}`);return r.set(a,OC(u.value,"cache")),{key:a,source:JSON.stringify(u.value.document)}}let c=await AC(o.value,{root:n,install:!0,update:!0,...t.fetchImpl?{fetchImpl:t.fetchImpl}:{},...t.now?{now:t.now}:{}});if(!c.ok)throw Error(`module ${a}: ${c.message}`);return r.set(a,OC(c.value.module,c.value.source,c.value.warning)),{key:a,source:JSON.stringify(c.value.module.document)}},provenance:r}}var DC=M(()=>{"use strict";NC()});var P_={};Mn(P_,{runCli:()=>Py,stableDiagnostic:()=>qa});import{readFileSync as FC,fstatSync as $C,statSync as jC,writeSync as BC,openSync as UX,closeSync as UC}from"node:fs";import{Socket as HX}from"node:net";import{resolve as Ji,dirname as BX}from"node:path";function qa(t,e="<inline>"){return`${t.severity}:${t.file&&t.file!=="<main>"?t.file:e}:${t.line}:${t.column}: ${t.message}
2423
+ `}function WX(t,e){let n;try{n=jC(t)}catch{return}for(let r of e)try{let s=jC(r);if(s.dev===n.dev&&s.ino===n.ino)return r}catch{}}function qX(t,e){let n=Buffer.from(e+`
2424
+ `),r=0;for(;r<n.length;)try{let s=BC(t,n,r,n.length-r);if(s<=0)throw new Error("trace write made no progress");r+=s}catch(s){if(s.code==="EINTR")continue;throw s}}function XX(t){let e=Buffer.from(t),n=0,r;for(;n<e.length;)try{let s=BC(2,e,n,e.length-n);if(s===0)return;n+=s}catch(s){let i=s.code;if(i==="EPIPE"||i==="EBADF")return;if(i==="EINTR")continue;if(i==="EAGAIN"||i==="EWOULDBLOCK"){r??=new Int32Array(new SharedArrayBuffer(4)),Atomics.wait(r,0,0,1);continue}throw s}}async function Py(t,e={}){if(t.length===1&&["--version","-v"].includes(t[0]))return(e.stdout??($=>process.stdout.write($)))("lmscript "+fm()+`
2425
+ `),0;let n=[...t],r=e.cwd??process.cwd(),s={...e.env??process.env},i=e.stdout??($=>process.stdout.write($)),o=e.stderr??XX,a=new Set,l=[],c=$=>{$.startsWith("error: ")&&l.push($);let z=$.match(/^error:.*:[0-9]+:[0-9]+: ([^\n]+)/);z&&a.add(z[1]),o($)},u,d=!1,m=!1,p,f,g,h=!1,y=!1,b,_,v="text",E,R=new Set,S=new Set(["--base-dir","--source-name","--resumepoint","--pref","--dry-loop-limit","--dryrun-timeout","--plan-format","--module","--trace"]),I=[],N=new Set(["--check","--dry-run","--lint","--check-files","--no-preflight",...S]);for(;n.length&&N.has(n[0]);){let $=n.shift();if(R.has($)&&$!=="--module")return c("error: "+$+` may be specified only once
2426
2426
  `),$==="--resumepoint"?2:1;R.add($);let z;if(S.has($)){if(z=n[0],z===void 0||$==="--pref"&&z===""||z.startsWith("-"))return c("error: "+$+($==="--resumepoint"||$==="--pref"?` requires a path
2427
2427
  `:` requires a value
2428
2428
  `)),1;n.shift()}if($==="--resumepoint"){if(!/^[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(z))return c("error: Invalid --resumepoint path: "+z+`; expected NAME(.NAME)*
@@ -2441,7 +2441,7 @@ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}
2441
2441
  `),1}let x;if(E!==void 0)try{x=G_(E)}catch($){let z=$,Ie=d?2:1;return c(`error:${z.path}:${z.line}:${z.column}: ${z.message}
2442
2442
  `),Ie}let C=f??k??(A==="-"?"<stdin>":"<inline>"),L=new mr;L.setGlobal("args",[...n]),L.setGlobal("ARGV",[...n]);let P=new AbortController,j=new Set,F=new Map,Z=new Map,q={name:"native:git",nativeNamespace:"git",declarations:$y,activate:async $=>{let{createGit:z}=await Promise.resolve().then(()=>(Q_(),Y_));return z($)}};L.registerNativeModule(q),F.set("native:git",q);try{let{createLmctlHostModule:$}=await Promise.resolve().then(()=>(SA(),TA)),z=$({stdout:i,stderr:c,stdin:e.stdin,onContext:Ie=>j.add(Ie),nativeModules:[q]});L.registerBuiltinProvider(z),F.set("lmctl",z)}catch($){if(!["ERR_MODULE_NOT_FOUND","ERR_PACKAGE_PATH_NOT_EXPORTED"].includes($?.code??""))throw $;Z.set("lmctl",$)}try{let{createLmbeeHostModule:$}=await Promise.resolve().then(()=>(HA(),UA)),z=$();L.registerBuiltinProvider(z),F.set("lmbee",z)}catch($){if(!["ERR_MODULE_NOT_FOUND","ERR_PACKAGE_PATH_NOT_EXPORTED"].includes($?.code??""))throw $;Z.set("lmbee",$)}try{let{createSchemaModuleFactory:$}=await Promise.resolve().then(()=>(_C(),yC));L.registerSchemaModuleFactory($())}catch($){if(!["ERR_MODULE_NOT_FOUND","ERR_PACKAGE_PATH_NOT_EXPORTED"].includes($?.code??""))throw $;Z.set("schema-modules",$)}let Y;try{let{createModuleResolver:$}=await Promise.resolve().then(()=>(DC(),PC));Y=$({mode:w||d||h?"cache":"run",env:s,cwd:r,overrides:I,...e.moduleRoot!==void 0?{root:e.moduleRoot}:{},...e.moduleFetch?{fetchImpl:e.moduleFetch}:{},...e.moduleNow?{now:e.moduleNow}:{}}),L.registerModuleSpecResolver(Y.resolve)}catch($){let z=$?.code??"";if(["ERR_MODULE_NOT_FOUND","ERR_PACKAGE_PATH_NOT_EXPORTED"].includes(z))Z.set("module-store",$);else return c("error: "+($ instanceof Error?$.message:String($))+`
2443
2443
  `),1}for(let[$,z]of Z)c(`warning: ${$} host module unavailable: ${z.code}: ${z instanceof Error?z.message:String(z)}
2444
- `);for(let $ of e.builtinProviders??[])L.registerBuiltinProvider($);let ne={executionOrigin:ur({source_kind:k?"file":A==="-"?"stdin":A==="-e"?"inline":"unknown",script_file:k??null,source_name:C}),noPreflight:y,dryLoopLimit:b,dryrunTimeoutMs:_,resumepoint:u,file:f??k,entryLocation:k,baseDir:p??(k?UX(k):r),builtinProviderNames:["lmctl","lmbee",...(e.builtinProviders??[]).map($=>$.name)],reservedFunctionPrefixes:["lm_","lmbee_"],checkFiles:m,hostContext:{cwd:r,env:s,platform:e.platform??process.platform},stdout:$=>i($+`
2444
+ `);for(let $ of e.builtinProviders??[])L.registerBuiltinProvider($);let ne={executionOrigin:ur({source_kind:k?"file":A==="-"?"stdin":A==="-e"?"inline":"unknown",script_file:k??null,source_name:C}),noPreflight:y,dryLoopLimit:b,dryrunTimeoutMs:_,resumepoint:u,file:f??k,entryLocation:k,baseDir:p??(k?BX(k):r),builtinProviderNames:["lmctl","lmbee",...(e.builtinProviders??[]).map($=>$.name)],reservedFunctionPrefixes:["lm_","lmbee_"],checkFiles:m,hostContext:{cwd:r,env:s,platform:e.platform??process.platform},stdout:$=>i($+`
2445
2445
  `),stderr:$=>c($.endsWith(`
2446
2446
  `)?$:$+`
2447
2447
  `),...x?{propertyOverlay:x}:{}},de,ee=await L.scanAndCheckAsync(T,ne);if(ne.preparedCheck=ee,w&&!ee.diagnostics.some($=>$.severity==="error")){let $=n[0]!==void 0&&(mo(n[0])||rs(n[0]))?ee.hostModules?.find(Ie=>Ie.name.startsWith("schema:")):void 0;if($){let Ie=rs(n[0])?[...Y?.provenance.values()??[]][0]:void 0;return i(F_($,Ie?Ie.key:Ji(r,n[0]),Ie)),0}let z=D_(L,[...new Map([...F.values(),...ee.hostModules??[]].map(Ie=>[Ie.name,Ie])).values()],n[0]);return z===void 0?(c("error: unknown help target "+n[0]+`
@@ -2449,9 +2449,9 @@ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}
2449
2449
  `+z),0)}for(let $ of ee.diagnostics)c(qa($,C));if(ee.diagnostics.some($=>$.severity==="error"))return 2;if(d)return 0;let tt={currentPath:null};ne.recoveryProbe=tt;let Xe=!1,H=()=>{let $=tt.firstFailure?.path;Xe||$==null||(Xe=!0,pe("resumepoint: "+$+" (rerun with --resumepoint "+$+`)
2450
2450
  `))},W,V,pe=$=>{try{c($)}catch{}},bt=$=>{for(let z of j)try{let Ie=z.finalizeSync($);for(let Ga of Ie.errors)pe("error: resource critical finalization: "+Ga+`
2451
2451
  `)}catch(Ie){pe("error: resource critical finalization: "+String(Ie)+`
2452
- `)}L.terminateResourceRuns()},js=($,z=$==="SIGINT"?130:143)=>{W===void 0&&(W=z,tt.firstFailure??={path:tt.currentPath},bt($),P.abort($),V=setTimeout(()=>{H(),process.exit(W)},250))},Us=()=>js("SIGINT"),Hs=()=>js("SIGTERM"),Xa=()=>js("SIGTERM",129);if(e.installSignals!==!1&&!e.stdout&&!HC&&(HC=!0,process.stdout.on("error",$=>{if($.code!=="EPIPE")throw $;bt("SIGTERM"),process.exit(0)})),e.installSignals!==!1){process.on("SIGINT",Us),process.on("SIGTERM",Hs),process.on("SIGHUP",Xa);let $=Number(s.LMSCRIPT_LIFELINE_FD);if(delete s.LMSCRIPT_LIFELINE_FD,e.env||delete process.env.LMSCRIPT_LIFELINE_FD,Number.isInteger($)&&$>2)try{if($C($).isFIFO()||$C($).isSocket()){let z=new jX({fd:$,readable:!0,writable:!1});z.on("error",()=>{}),z.on("end",Hs),z.on("close",Hs),z.resume(),z.unref()}}catch{}}ne.signal=P.signal;try{if(g){let xe=HX(g,[...k?[k]:[],...ee.compiledSource?.loadedFiles.slice(1)??[],...Array.from(Y?.provenance.values()??[],Ge=>Ge.file)]);if(xe)return c("error: --trace output aliases source file "+xe+`
2453
- `),1;try{de=$X(g,"w")}catch(Ge){return c("error: cannot open trace file "+g+": "+(Ge instanceof Error?Ge.message:String(Ge))+`
2454
- `),1}ne.trace={write:Ge=>BX(de,Ge),engine:"lmscript "+fm()}}let $=new Set(ee.diagnostics.map(xe=>JSON.stringify(xe))),z=xe=>{if(!(W!==void 0||!h))for(let Ge of xe.diagnostics)$.has(JSON.stringify(Ge))||(c(qa(Ge,C)),$.add(JSON.stringify(Ge)))};if(h){let xe=await L.dryRunAsync(T,ne);return W!==void 0?(c(qa({severity:"error",message:"Execution aborted",line:1,column:1},C)),W):(z(xe),i(C_(xe,v)+`
2452
+ `)}L.terminateResourceRuns()},js=($,z=$==="SIGINT"?130:143)=>{W===void 0&&(W=z,tt.firstFailure??={path:tt.currentPath},bt($),P.abort($),V=setTimeout(()=>{H(),process.exit(W)},250))},Us=()=>js("SIGINT"),Hs=()=>js("SIGTERM"),Xa=()=>js("SIGTERM",129);if(e.installSignals!==!1&&!e.stdout&&!HC&&(HC=!0,process.stdout.on("error",$=>{if($.code!=="EPIPE")throw $;bt("SIGTERM"),process.exit(0)})),e.installSignals!==!1){process.on("SIGINT",Us),process.on("SIGTERM",Hs),process.on("SIGHUP",Xa);let $=Number(s.LMSCRIPT_LIFELINE_FD);if(delete s.LMSCRIPT_LIFELINE_FD,e.env||delete process.env.LMSCRIPT_LIFELINE_FD,Number.isInteger($)&&$>2)try{if($C($).isFIFO()||$C($).isSocket()){let z=new HX({fd:$,readable:!0,writable:!1});z.on("error",()=>{}),z.on("end",Hs),z.on("close",Hs),z.resume(),z.unref()}}catch{}}ne.signal=P.signal;try{if(g){let xe=WX(g,[...k?[k]:[],...ee.compiledSource?.loadedFiles.slice(1)??[],...Array.from(Y?.provenance.values()??[],Ge=>Ge.file)]);if(xe)return c("error: --trace output aliases source file "+xe+`
2453
+ `),1;try{de=UX(g,"w")}catch(Ge){return c("error: cannot open trace file "+g+": "+(Ge instanceof Error?Ge.message:String(Ge))+`
2454
+ `),1}ne.trace={write:Ge=>qX(de,Ge),engine:"lmscript "+fm()}}let $=new Set(ee.diagnostics.map(xe=>JSON.stringify(xe))),z=xe=>{if(!(W!==void 0||!h))for(let Ge of xe.diagnostics)$.has(JSON.stringify(Ge))||(c(qa(Ge,C)),$.add(JSON.stringify(Ge)))};if(h){let xe=await L.dryRunAsync(T,ne);return W!==void 0?(c(qa({severity:"error",message:"Execution aborted",line:1,column:1},C)),W):(z(xe),i(C_(xe,v)+`
2455
2455
  `),W??xe.exitCode)}ne.onPreflight=z;let Ie;try{Ie=await L.runAsync(T,ne)}finally{if(de!==void 0){let xe=de;de=void 0,UC(xe)}}for(let xe of Ie.diagnostics)$.has(JSON.stringify(xe))||c(qa(xe,C));let Ga=xe=>{let Ge=l.findIndex(Fy=>Fy==="error: "+xe||Fy==="error: "+xe+`
2456
2456
  `);return Ge<0?Number.MAX_SAFE_INTEGER:Ge},Ja=[...new Set(Ie.errors??[])].filter(xe=>!a.has(xe)).sort((xe,Ge)=>Ga(xe)-Ga(Ge));if(Ja.length){c(`
2457
2457
  === LMScript Error Summary (${Ja.length} error${Ja.length===1?"":"s"}) ===
@@ -2459,4 +2459,4 @@ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}
2459
2459
  `);c(`==========================================
2460
2460
  `)}let Dy=W??(Ie.exitCode!==void 0?Ie.exitCode:Ie.success&&!Ie.errors?.length?0:1);return Dy!==0&&H(),Dy}catch($){return $?.code==="EPIPE"?W??0:(c(`error:${C}:1:1: ${$ instanceof Error?$.message:String($)}
2461
2461
  `),H(),W??1)}finally{if(de!==void 0){let $=de;de=void 0;try{UC($)}catch(z){pe("error: closing trace: "+String(z)+`
2462
- `)}}W===void 0&&(clearTimeout(V),process.removeListener("SIGINT",Us),process.removeListener("SIGTERM",Hs),process.removeListener("SIGHUP",Xa));for(let $ of j)await $.close()}}var HC,My,gm=M(()=>{"use strict";jy();$_();J_();Xs();HC=!1,My="Usage: lmscript [--check|--dry-run|--lint] [--no-preflight] [--trace FILE] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] [--pref FILE] [--module SPEC=FILE]... [--check-files] [--base-dir dir] [--source-name label] <file>|-| -e <code> [args...]"});gm();async function roe(){process.exitCode=await Py(process.argv.slice(2))}export{roe as main};
2462
+ `)}}W===void 0&&(clearTimeout(V),process.removeListener("SIGINT",Us),process.removeListener("SIGTERM",Hs),process.removeListener("SIGHUP",Xa));for(let $ of j)await $.close()}}var HC,My,gm=M(()=>{"use strict";jy();$_();J_();Xs();HC=!1,My="Usage: lmscript [--check|--dry-run|--lint] [--no-preflight] [--trace FILE] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] [--pref FILE] [--module SPEC=FILE]... [--check-files] [--base-dir dir] [--source-name label] <file>|-| -e <code> [args...]"});gm();async function ioe(){process.exitCode=await Py(process.argv.slice(2))}export{ioe as main};