@lmctl-ai/lmctl 0.2.282 → 0.2.283

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -1,19 +1,19 @@
1
- var GR=Object.create;var Fd=Object.defineProperty;var VR=Object.getOwnPropertyDescriptor;var JR=Object.getOwnPropertyNames;var KR=Object.getPrototypeOf,YR=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var zR=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),me=(t,e)=>{for(var n in e)Fd(t,n,{get:e[n],enumerable:!0})},QR=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of JR(e))!YR.call(t,s)&&s!==n&&Fd(t,s,{get:()=>e[s],enumerable:!(r=VR(e,s))||r.enumerable});return t};var Ft=(t,e,n)=>(n=t!=null?GR(KR(t)):{},QR(e||!t||!t.__esModule?Fd(n,"default",{value:t,enumerable:!0}):n,t));function H_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?No:W_}var W_,No,jd=x(()=>{"use strict";W_="root_teamfile <> '(direct)'",No=W_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as ZR}from"node:fs";import{createRequire as e0}from"node:module";function t0(){return Wd===null&&(Wd=e0(import.meta.url)("node:sqlite").DatabaseSync),Wd}function s0(t){let e=r0[t];if(e!==void 0)return e;let n=n0[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function Lr(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=s0(t.errcode)),t}function o0(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function i0(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Hd(t){return t.length===1&&a0(t[0])?[t[0]]:t}function a0(t){if(!qd(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function qd(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Wd,n0,r0,Bd,xr,Xd,Ro=x(()=>{"use strict";Wd=null;n0={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"},r0={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"};Bd=class{name;handle;savepointId=0;constructor(e,n={}){if(n.fileMustExist===!0&&e!==":memory:"&&!ZR(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(t0())(e,{readOnly:n.readonly===!0})}catch(r){Lr(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Xd(this.handle.prepare(e))}catch(n){Lr(n)}}exec(e){try{this.handle.exec(e)}catch(n){Lr(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){Lr(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let o=n(...r);return this.exec("COMMIT"),o}catch(o){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(i){if(!o0(i))throw i}throw o}}let s=`lmctl_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${s}`);try{let o=n(...r);return this.exec(`RELEASE ${s}`),o}catch(o){if(this.inTransaction)try{this.exec(`ROLLBACK TO ${s}`),this.exec(`RELEASE ${s}`)}catch(i){if(!i0(i))throw i}throw o}}};xr=Bd,Xd=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){try{let n=this.handle.get(...Hd(e));return this.normalizeRow(n)}catch(n){Lr(n)}}all(...e){try{return this.handle.all(...Hd(e)).map(n=>this.normalizeRow(n))}catch(n){Lr(n)}}run(...e){try{let n=this.handle.run(...Hd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Lr(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&qd(e)?Object.values(e):qd(e)?{...e}:e}}});function Cr(t){return new xr(t,{readonly:!0,fileMustExist:!0})}var ga=x(()=>{"use strict";Ro()});import{createHash as l0}from"node:crypto";import{lstat as c0,readFile as d0,realpath as B_,stat as X_}from"node:fs/promises";import{isAbsolute as q_,relative as u0,resolve as f0,sep as m0}from"node:path";function B(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function K(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function Lo(t){return K(t)}function yt(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function oe(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 pe(t,e){return t<e?-1:t>e?1:0}function Ze(t,e,n){if(t===null||e===null)return null;let r=n==="written"?"write":"read",s=0;for(let o of t){if(o.bytes===null)return null;s+=o.bytes}for(let o of e)if(o.direction===r){if(o.bytes===null)return null;s+=o.bytes}return s}function Jt(t,e,n){let r={},s=Lo(t.cacheWrite5m),o=Lo(t.cacheWrite1h),i=Lo(t.reasoning),a=Lo(t.webSearch),l=Lo(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function Bn(t){return typeof t=="string"&&h0.has(t.toLowerCase())}function Ie(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 gs(t){let e=B(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Me(t,e){if(!q_(t))return null;let n=await c0(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await B_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await B_(s).catch(()=>f0(s)),i=u0(o,r);if(i===""||!i.startsWith(`..${m0}`)&&i!==".."&&!q_(i))return r}return null}async function ct(t,e){oe(e);let n=await X_(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await d0(t,{signal:e.signal});e.signal.throwIfAborted();let s=await X_(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${xo}:sha256:${l0("sha256").update(r).digest("hex")}`,data:r}}function ya(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(`
1
+ var GR=Object.create;var Fd=Object.defineProperty;var VR=Object.getOwnPropertyDescriptor;var JR=Object.getOwnPropertyNames;var KR=Object.getPrototypeOf,YR=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var zR=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),me=(t,e)=>{for(var n in e)Fd(t,n,{get:e[n],enumerable:!0})},QR=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of JR(e))!YR.call(t,s)&&s!==n&&Fd(t,s,{get:()=>e[s],enumerable:!(r=VR(e,s))||r.enumerable});return t};var Ft=(t,e,n)=>(n=t!=null?GR(KR(t)):{},QR(e||!t||!t.__esModule?Fd(n,"default",{value:t,enumerable:!0}):n,t));function H_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?No:W_}var W_,No,jd=x(()=>{"use strict";W_="root_teamfile <> '(direct)'",No=W_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as ZR}from"node:fs";import{createRequire as e0}from"node:module";function t0(){return Wd===null&&(Wd=e0(import.meta.url)("node:sqlite").DatabaseSync),Wd}function s0(t){let e=r0[t];if(e!==void 0)return e;let n=n0[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function Lr(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=s0(t.errcode)),t}function o0(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function i0(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Hd(t){return t.length===1&&a0(t[0])?[t[0]]:t}function a0(t){if(!qd(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function qd(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Wd,n0,r0,Bd,xr,Xd,Ro=x(()=>{"use strict";Wd=null;n0={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"},r0={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"};Bd=class{name;handle;savepointId=0;constructor(e,n={}){if(n.fileMustExist===!0&&e!==":memory:"&&!ZR(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(t0())(e,{readOnly:n.readonly===!0})}catch(r){Lr(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Xd(this.handle.prepare(e))}catch(n){Lr(n)}}exec(e){try{this.handle.exec(e)}catch(n){Lr(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){Lr(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let o=n(...r);return this.exec("COMMIT"),o}catch(o){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(i){if(!o0(i))throw i}throw o}}let s=`lmctl_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${s}`);try{let o=n(...r);return this.exec(`RELEASE ${s}`),o}catch(o){if(this.inTransaction)try{this.exec(`ROLLBACK TO ${s}`),this.exec(`RELEASE ${s}`)}catch(i){if(!i0(i))throw i}throw o}}};xr=Bd,Xd=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){try{let n=this.handle.get(...Hd(e));return this.normalizeRow(n)}catch(n){Lr(n)}}all(...e){try{return this.handle.all(...Hd(e)).map(n=>this.normalizeRow(n))}catch(n){Lr(n)}}run(...e){try{let n=this.handle.run(...Hd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Lr(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&qd(e)?Object.values(e):qd(e)?{...e}:e}}});function Cr(t){return new xr(t,{readonly:!0,fileMustExist:!0})}var ga=x(()=>{"use strict";Ro()});import{createHash as l0}from"node:crypto";import{lstat as c0,readFile as d0,realpath as B_,stat as X_}from"node:fs/promises";import{isAbsolute as q_,relative as u0,resolve as f0,sep as m0}from"node:path";function B(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function K(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function Lo(t){return K(t)}function yt(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function oe(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 pe(t,e){return t<e?-1:t>e?1:0}function Ze(t,e,n){if(t===null||e===null)return null;let r=n==="written"?"write":"read",s=0;for(let o of t){if(o.bytes===null)return null;s+=o.bytes}for(let o of e)if(o.direction===r){if(o.bytes===null)return null;s+=o.bytes}return s}function Jt(t,e,n){let r={},s=Lo(t.cacheWrite5m),o=Lo(t.cacheWrite1h),i=Lo(t.reasoning),a=Lo(t.webSearch),l=Lo(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function Bn(t){return typeof t=="string"&&h0.has(t.toLowerCase())}function be(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 gs(t){let e=B(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Me(t,e){if(!q_(t))return null;let n=await c0(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await B_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await B_(s).catch(()=>f0(s)),i=u0(o,r);if(i===""||!i.startsWith(`..${m0}`)&&i!==".."&&!q_(i))return r}return null}async function ct(t,e){oe(e);let n=await X_(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await d0(t,{signal:e.signal});e.signal.throwIfAborted();let s=await X_(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${xo}:sha256:${l0("sha256").update(r).digest("hex")}`,data:r}}function ya(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(`
2
2
  `),s=[];for(let o of r)if(e.signal.throwIfAborted(),!!o.trim())try{let i=B(JSON.parse(o));if(!i)return null;s.push(i)}catch{return null}return s}var xo,lt,_t,p0,gt,h0,wn=x(()=>{"use strict";xo="bx3",lt={input_uncached:null,input_cached:null,input_cache_write:null,output:null};_t=class{map=new Map;record(e,n,r,s){if(typeof r!="string"||r.length===0||r.includes("\0"))return;let o=`${e}\0${n}\0${r}`;this.map.has(o)||this.map.set(o,{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}},p0=0,gt=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${p0++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};h0=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as _0}from"node:fs/promises";import{join as G_,sep as V_}from"node:path";var ys,Gd=x(()=>{"use strict";wn();ys=class{format;constructor(e){this.format=e}async discover(e,n,r){oe(e);let s=[],o=0,i=!1,a=async(l,c)=>{if(e.signal.throwIfAborted(),c>8||o>e.maxRows){i=!0;return}let d=await _0(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>G_(l,f.name)+(f.isDirectory()?V_:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=G_(l,f.name),p=f.isDirectory()&&r?.startsWith(m+V_);if(!(r&&!p&&pe(u(f),r)<=0)){if(!p&&++o>e.maxRows){i=!0;break}if(f.isDirectory())await a(m,c+1);else if(f.isFile()){let _=this.format.sessionId(m);_&&s.push({provider:this.format.provider,sessionid:_,source_id:m})}if(s.length>=n){i=!0;break}}}};return await a(this.format.root,0),s.sort((l,c)=>pe(l.source_id,c.source_id)),{sources:s.slice(0,n),truncated:i||s.length>n}}async bytes(e,n){if(oe(n),e.provider!==this.format.provider||this.format.sessionId(e.source_id)!==e.sessionid)return null;let r=await Me(e.source_id,[this.format.root]);if(!r)return null;let s=await ct(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 o=this.format.decode(s.data,e.sessionid,e.source_id,r);return!o||!o.responses?{status:"partial"}:{status:"complete",source:e,revision:n,checkpoint:null,responses:o.responses,...o.captureStatus?{capture_status:o.captureStatus}:{}}}}});function Xn(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(i=>i.tokens[r]);if(s.some(i=>i===null||!Number.isSafeInteger(i)||i<0))continue;let o=s.reduce((i,a)=>i+a,0);Number.isSafeInteger(o)&&(n[r]=o)}return n}var Co=x(()=>{"use strict"});import{createReadStream as J_}from"node:fs";import{createInterface as K_}from"node:readline";import{stat as g0}from"node:fs/promises";import{homedir as y0}from"node:os";function Y_(t){try{let e=JSON.parse(t);return e===null||typeof e!="object"||Array.isArray(e)?void 0:e}catch{return}}async function*Ee(t,e){let n=J_(t,{encoding:"utf-8"}),r=K_({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=Y_(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function Et(t,e){let n=[],r=J_(t,{encoding:"utf-8"}),s=K_({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=Y_(i);if(a!==void 0&&n.push(a),n.length>=e)break}}finally{s.close(),r.destroy()}return n}async function Ae(t){let e=await g0(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function _e(t){return t.replace(/\\n/g,`
3
- `).replace(/\\t/g," ").replace(/\\r/g,"\r")}function G(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function Rt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var Q,Re=x(()=>{"use strict";Q=y0()});import{readdir as E0}from"node:fs/promises";import{join as Es,resolve as T0}from"node:path";function Ta(t){return T0(t||process.env.XDG_DATA_HOME||Es(Q,".local","share"))}function w0(t){return Es(Ta(t),"muse","sessions")}function v0(t,e,n,r){let s=r?.input_tokens,o=r?.cache_read_tokens??r?.input_cache_read_tokens,i=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 o=="number"&&o>s||typeof a=="number"&&typeof o=="number"&&o>a||typeof a=="number"&&typeof i=="number"&&i>a||typeof a=="number"&&typeof o=="number"&&typeof i=="number"&&o+i>a,c=l?null:typeof o=="number"?o:null,d=l?null:typeof i=="number"?i:null,u=null;return l||(typeof r?.input_uncached_tokens=="number"?u=r.input_uncached_tokens:typeof a=="number"&&typeof o=="number"&&typeof i=="number"&&a>=o+i&&(u=a-o-i)),{response_id:t,timestamp:e.toISOString(),model:typeof n=="string"&&n.length>0?n:null,tokens:{input_uncached:typeof u=="number"?u:null,input_cached:typeof c=="number"?c:null,input_cache_write:typeof d=="number"?d:null,output:typeof r?.output_tokens=="number"?r.output_tokens:null},files_read:null,files_written:null}}function Z_(t,e){let n,r,s,o,i,a=[],l=new Map,c=new Map,d=new Set,u,f,m=()=>{f="partial"},p=g=>{if(typeof g!="string"||g.length===0){m();return}let E=l.get(g);return E||(E={id:g,turn:{id:g,status:"unknown"},responseIds:[]},l.set(g,E)),E},_=g=>{if(g.retained_frame&&Array.isArray(g.children)){for(let I of g.children)try{if(typeof I?.record_json!="string")throw new Error("missing record_json");_(JSON.parse(I.record_json))}catch{m()}return}if(g.stream?.kind!=="session"||g.stream?.id!==t)return;if(g.schema_version!==1){m();return}if(g.payload_type?.startsWith("runtime.session")&&g.payload_schema_version!==1){m();return}let E=g.payload?.source_run_record_id;for(let I of[g.id,E])if(!(typeof I!="string"||I.length===0)&&d.has(I))return;for(let I of[g.id,E])typeof I=="string"&&I.length>0&&d.add(I);let y=typeof g.recorded_at=="number"&&Number.isFinite(g.recorded_at)?new Date(g.recorded_at/1e3):void 0;if(g.recorded_at!==void 0&&(!y||!Number.isFinite(y.getTime()))){m();return}y&&Number.isFinite(y.getTime())&&((!s||y<s)&&(s=y),(!o||y>o)&&(o=y));let T=g.payload;if(g.payload_type==="runtime.session.metadata"&&(typeof T?.record?.workspace_root=="string"&&(n=T.record.workspace_root),typeof T?.record?.model_id=="string"&&(r=T.record.model_id)),g.payload_type!=="runtime.session"||T?.kind!=="run")return;let w=T.event,S=p(T.run_id);if(!w||!y||!S){w||m();return}if(w.kind==="started"&&typeof w.prompt=="string")a.push({role:"user",content:w.prompt,timestamp:y}),S.turn.startedAt=y,S.turn.prompt=w.prompt,S.turn.status="in_progress",i="in_progress";else if(w.kind==="assistant_message_committed"&&typeof w.text=="string")a.push({role:"assistant",content:w.text,timestamp:y});else if(w.kind==="terminal")S.turn.completedAt=y,S.turn.status=w.terminal==="completed"?"complete":"aborted",i=S.turn.status;else if(w.kind==="model_completed"){typeof w.model=="string"&&w.model.length>0&&(r=w.model,S.turn.model=w.model);let I=typeof E=="string"&&E.length>0?E:typeof g.id=="string"&&g.id.length>0?g.id:void 0;if(!I)m();else{S.responseIds.push(I);let q={};if(w.usage&&typeof w.usage=="object")for(let M 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 ue=w.usage[M];typeof ue=="number"&&Number.isSafeInteger(ue)&&ue>=0&&(q[M]=ue)}Object.keys(q).length>0&&(S.turn.rawUsage=[...S.turn.rawUsage??[],{responseId:I,values:q}]),c.set(I,v0(I,y,w.model,q))}if(!w.usage)return;let b={},L=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,k=w.usage.cache_write_tokens??w.usage.input_cache_write_tokens,v=typeof w.usage.promptTokens=="number"?w.usage.promptTokens:typeof w.usage.prompt_tokens=="number"?w.usage.prompt_tokens:void 0,A=typeof L=="number"&&typeof O=="number"&&O>L||typeof v=="number"&&typeof O=="number"&&O>v||typeof v=="number"&&typeof k=="number"&&k>v||typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&O+k>v,N=A?void 0:typeof O=="number"?O:void 0,R=A?void 0:typeof k=="number"?k:void 0,C;A||(typeof w.usage.input_uncached_tokens=="number"?C=w.usage.input_uncached_tokens:typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&v>=O+k&&(C=v-O-k)),C!==void 0&&C<0&&(C=void 0);let $=w.usage.output_tokens,P=w.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(b.inputTokens=C),typeof N=="number"&&Number.isSafeInteger(N)&&N>=0&&(b.cachedInputTokens=N),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(b.cacheWriteInputTokens=R),typeof $=="number"&&Number.isSafeInteger($)&&$>=0&&(b.outputTokens=$),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(b.reasoningOutputTokens=P),u=b}};return{visit:_,finish:()=>{if(!n||!s||!o)return null;let g=a.filter(w=>w.role==="user").map(w=>w.content),E=[...l.values()].map(w=>({...w.turn,...w.responseIds.length>0?{responseIds:[...w.responseIds]}:{}})),y=[...c.values()],T=Xn(y,f!=="partial");return{provider:"muse",sessionId:t,filePath:e,cwd:n,createdAt:s,modifiedAt:o,model:r,messages:a,messageCount:a.length,firstUserMessage:g[0],lastUserMessage:g.at(-1),userPrompts:g,turnStatus:i,totalInputTokens:T.input_uncached??void 0,totalCachedInputTokens:T.input_cached??void 0,totalCacheWriteInputTokens:T.input_cache_write??void 0,totalOutputTokens:T.output??void 0,lastTokenUsage:u,turns:E,responses:y,...f?{captureStatus:f}:{}}},markPartial:m}}function S0(t,e,n){let r=Z_(e,n);for(let s of t)r.visit(s);return r.finish()}function I0(t,e,n,r){r.signal.throwIfAborted();let s=Math.max(0,r.maxBytes),o=t.length<=s?t:t.subarray(0,Math.max(0,t.subarray(0,s).lastIndexOf(10))),i=o.length!==t.length,a=[],l=i,c=0,d=f=>{if(!f||typeof f!="object"||Array.isArray(f)){l=!0;return}let m=f;if(m.retained_frame&&Array.isArray(m.children)){for(let p of m.children){if(c>=r.maxRows){l=!0;return}let _;try{if(typeof p?.record_json!="string")throw new Error("missing record_json");_=JSON.parse(p.record_json)}catch{l=!0;continue}d(_)}return}if(c>=r.maxRows){l=!0;return}a.push(m),c++};for(let f of o.toString("utf8").split(/\r?\n/u)){if(r.signal.throwIfAborted(),f.trim()==="")continue;let m;try{m=JSON.parse(f)}catch{l=!0;continue}d(m)}let u=S0(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function eg(t){return{provider:"muse",root:w0(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:I0}}async function Q_(t,e){let n=Z_(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var z_,Ea,Vd=x(()=>{"use strict";Co();Re();z_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Ea=class{name="muse";dataHome;constructor(e={}){this.dataHome=Ta(e.museDataHome)}get root(){return Es(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await E0(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(Es(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(Es(e,o.name),n+1));return s}async resolveSessionPath(e){return z_.test(e)?(await this.files()).find(n=>n.endsWith(Es(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?Q_(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!z_.test(r))continue;let s=await Q_(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as tg,readdir as b0,rm as k0,stat as ng}from"node:fs/promises";import{basename as A0,join as Ts,resolve as N0}from"node:path";function Sa(t){return N0(t||process.env.MINIPLAYER_HOME||Ts(process.env.XDG_DATA_HOME||Ts(Q,".local","share"),"miniplayer"))}function wa(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function Jd(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function rg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function sg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function og(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 ig(t){let e=t.usage&&typeof t.usage=="object"&&!Array.isArray(t.usage)?t.usage:{},n={};for(let[l,c]of Object.entries(e))K(c)!==null&&(n[l]=c);let r=K(e.inputTokens),s=K(e.cachedInputTokens),o=K(t.cacheWriteInputTokens??e.cacheWriteInputTokens),i=K(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&&o!==null&&(a=r+o),t.usageConvention==="synthetic"&&r===0&&s===0&&(o===0||o===null)&&i===0&&(a=0),{tokens:{input_uncached:a,input_cached:s,input_cache_write:o,output:i},rawUsage:n,pricingFacts:K(e.reasoningTokens)===null?null:{reasoning_output_tokens:K(e.reasoningTokens)}}}function lg(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=p=>{if(typeof p!="string")return;let _=new Date(p);return Number.isFinite(_.getTime())?_:void 0},o=s(r.createdAt),i=s(r.updatedAt);if(!o||!i)return null;let a=[],l=[],c=[],d=r.version===1,u="complete";if(r.version===1){if(!Array.isArray(r.messages))return null;for(let p of r.messages){if(!p||!["user","assistant"].includes(p.role)||typeof p.content!="string")return null;a.push({role:p.role,content:p.content,timestamp:s(p.timestamp)??i})}}else{if(!Array.isArray(r.turns))return null;let p=new Set,_=new Set;for(let h of r.turns){if(!h||typeof h.responseId!="string"||!h.responseId||typeof h.input?.text!="string")return null;if(p.has(h.responseId)){d=!0;continue}p.add(h.responseId);let g=s(h.startedAt),E=s(h.completedAt??h.endedAt);if(!g)return null;let y=typeof h.model=="string"?h.model:void 0;["complete","running","failed","aborted"].includes(h.status)||(d=!0);let T=h.status==="complete"?"complete":h.status==="running"?"in_progress":h.status==="failed"?"failed":h.status==="aborted"?"aborted":"unknown";u=T==="failed"||T==="unknown"?"aborted":T,(T!=="complete"||h.partial===!0)&&(d=!0);let w=Array.isArray(h.modelResponses),S=w?h.modelResponses:[],I=[];l.push({id:h.responseId,startedAt:g,completedAt:E,model:y,prompt:h.input.text,status:T,responseIds:I}),a.push({role:"user",timestamp:g,content:h.input.text});let b=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!w&&!b){let A=h.usage??{},N=ig({...h,usage:A});Object.keys(N.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:N.rawUsage}]),I.push(h.responseId),c.push({response_id:h.responseId,timestamp:(E??g).toISOString(),model:y??null,model_provider:typeof h.provider=="string"?h.provider:null,tokens:N.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:N.pricingFacts}),T!=="complete"&&!h.usage&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??g,content:h.output.text,model:y});continue}let L=new Map,O=new Map,k=new Set,v=[];for(let A of S){if(!A||typeof A!="object"||typeof A.responseId!="string"||!A.responseId){d=!0;continue}if(I.includes(A.responseId)){d=!0;continue}let N=A,R=v.length;v.push({response:N,index:R,filesRead:[],filesWritten:[],io:[]}),I.push(A.responseId),_.has(A.responseId)&&(d=!0),_.add(A.responseId),N.toolCalls!==void 0&&!Array.isArray(N.toolCalls)&&(d=!0,v[R].io.push({direction:"read",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"}));for(let C of Array.isArray(N.toolCalls)?N.toolCalls:[]){let $=rg(C),P=Jd(C);if($)L.set($,R),O.set($,P);else{d=!0;let q=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",M=P==="write_file"||P==="shell"||P==="tool";q&&v[R].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),M&&v[R].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}I.length===0&&S.length>0&&(d=!0);for(let A of Array.isArray(h.toolEvents)?h.toolEvents:[]){let N=A&&typeof A=="object"?A:{},R=rg(N),C=R?L.get(R):void 0,$=Jd(N),P=sg(N.result),q=N.status==="failed"||N.error!==void 0;if(N.type==="tool_call"?a.push({role:"tool_use",timestamp:s(N?.timestamp)??g,content:wa(N?.input??N?.args),toolName:$,toolInput:wa(N?.input??N?.args),toolInputData:sg(N?.input??N?.args)??void 0,...R?{toolCallId:R}:{}}):a.push({role:"tool_result",timestamp:s(N?.timestamp)??E??g,content:wa(q?N?.error:N?.result),toolName:$,...R?{toolCallId:R}:{}}),C===void 0){d=!0;continue}let M=v[C];(N.type==="tool_result"||q||N.result!==void 0)&&k.add(R);let ue=P?.path,H=K(P?.bytesRead??P?.bytesWritten);N.type!=="tool_call"&&($==="read_file"&&!q&&typeof ue=="string"&&H!==null?M.filesRead.push({path:ue,bytes:H}):$==="write_file"&&!q&&typeof ue=="string"&&H!==null?M.filesWritten.push({path:ue,bytes:H}):$==="webget"&&!q&&H!==null?M.io.push({direction:"read",kind:"web",id:R,ref:og(P?.finalUrl??P?.url),bytes:H,basis:"certified_counter"}):$==="shell"||q?($!=="write_file"&&M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}),($==="shell"||$==="write_file")&&M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"})):$==="list_directory"||$==="read_file"||$==="webget"?M.io.push({direction:"read",kind:$==="webget"?"web":"unattributed",id:R,ref:$==="webget"?og(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):$==="write_file"?M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}):M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}))}for(let[A,N]of O)if(!k.has(A)){let R=v[L.get(A)],C=N==="list_directory"||N==="read_file"||N==="webget"||N==="shell",$=N==="write_file"||N==="shell";C&&R.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),$&&R.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of v){let N=A.response,R=ig(N),C=s(N.completedAt??N.startedAt)??E??g;new Set((Array.isArray(N.toolCalls)?N.toolCalls:[]).map(M=>Jd(M))).has("shell")&&!A.io.some(M=>M.kind==="unattributed"&&M.direction==="read")&&A.io.push({direction:"read",kind:"unattributed",id:N.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:N.responseId,ref:null,bytes:null,basis:"unknown"}),A.index===0&&A.io.unshift({direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"});let P=A.io.some(M=>M.direction==="read"&&M.bytes===null),q=A.io.some(M=>M.direction==="write"&&M.bytes===null);if(c.push({response_id:N.responseId,timestamp:C.toISOString(),model:typeof N.model=="string"?N.model:null,model_provider:typeof N.provider=="string"?N.provider:typeof h.provider=="string"?h.provider:null,tokens:R.tokens,files_read:P?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:P?null:A.filesRead.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="read").reduce((M,ue)=>M+(ue.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="write").reduce((M,ue)=>M+(ue.bytes??0),0),external_io:A.io,pricing_facts:R.pricingFacts}),Object.keys(R.rawUsage).length){let M=l.at(-1);M.rawUsage=[...M.rawUsage??[],{responseId:N.responseId,values:R.rawUsage}]}}l.at(-1).responseIds=I,I.length!==S.length&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??g,content:h.output.text,model:y})}}let f=a.filter(p=>p.role==="user").map(p=>p.content),m=Xn(c,!d);return{provider:"miniplayer",sessionId:e,cwd:r.cwd,filePath:n,createdAt:o,modifiedAt:i,model:typeof r.model=="string"?r.model:void 0,messages:a,messageCount:a.length,userPrompts:f,firstUserMessage:f[0],lastUserMessage:f.at(-1),turns:l,responses:c,turnStatus:u,...d?{captureStatus:"partial"}:{},totalInputTokens:m.input_uncached??void 0,totalCachedInputTokens:m.input_cached??void 0,totalCacheWriteInputTokens:m.input_cache_write??void 0,totalOutputTokens:m.output??void 0}}function Ia(t){return{provider:"miniplayer",root:Ts(Sa(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=A0(e,".json");return e.endsWith(".json")&&ag.test(n)?n:null},decode(e,n,r,s){s.signal.throwIfAborted();try{let o=JSON.parse(e.toString("utf8"));return(Array.isArray(o.turns)?o.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(o.messages)?o.messages.length:0)>s.maxRows?null:lg(o,n,r)}catch{return null}}}}var ag,va,ba=x(()=>{"use strict";Co();Re();wn();ag=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;va=class{name="miniplayer";home;constructor(e={}){this.home=Sa(e.miniplayerHome)}getWatchPaths(){return[{directory:Ts(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await b0(Ts(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(!ag.test(e))return null;let n=Ts(this.home,"sessions",`${e}.json`);try{return(await ng(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=lg(JSON.parse(await tg(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await tg(`${n}.lock`,"utf8"));if(Number.isInteger(o.pid)&&o.pid>0)try{process.kill(o.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 ng(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await k0(n),!0}}});import{createHash as R0}from"node:crypto";import{createRequire as L0}from"node:module";import{readdir as x0,realpath as C0}from"node:fs/promises";import{basename as cg,dirname as O0,join as dg,resolve as ug}from"node:path";function M0(){return D0("node:sqlite").DatabaseSync}function $0(){return process.env.HOME||process.env.USERPROFILE||""}function Or(t){let e=[],n=0,r=()=>{let s=0n,o=0n;for(;;){if(n>=t.length||o>63n)return null;let i=t[n++];if(s|=BigInt(i&127)<<o,o+=7n,!(i&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 o=s>>>3,i=s&7;if(o===0)return e;if(i===0){let a=r();if(a===null)return e;e.push({field:o,wire:i,varint:a})}else if(i===1){if(n+8>t.length)return e;n+=8,e.push({field:o,wire:i})}else if(i===5){if(n+4>t.length)return e;n+=4,e.push({field:o,wire:i})}else if(i===2){let a=r();if(a===null||n+a>t.length)return e;e.push({field:o,wire:i,bytes:t.subarray(n,n+a)}),n+=a}else return e}return e}function Kt(t,e){return t.find(n=>n.field===e)}function P0(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=Or(n.bytes),s=Kt(r,1)?.bytes,o=Kt(r,2)?.bytes;if(s===void 0||o===void 0)continue;let i=s.toString("utf8");e.has(i)||e.set(i,o.toString("utf8"))}return e}function U0(t){let e=Kt(Or(t),5)?.bytes;if(e===void 0)return null;let n=Kt(Or(e),1)?.bytes;if(n===void 0)return null;let r=Or(n),s=Kt(r,1)?.varint;if(s===void 0)return null;let o=Kt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function F0(t){let e=Kt(t,4)?.bytes,n=e!==void 0?Or(e):[],r=s=>{let o=Kt(n,s)?.varint;return o===void 0?null:K(o)};return{tokens:{input_uncached:r(2),input_cached:r(5),input_cache_write:r(4),output:r(3)},thinkingOutputTokens:r(9)}}function j0(t){let e=Kt(Or(t),1)?.bytes;if(e===void 0)return null;let n=Or(e),r=P0(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=Kt(n,19)?.bytes,i=o!==void 0&&o.length>0?o.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:d,thinkingOutputTokens:u}=F0(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function fg(t,e){oe(e);let n=t.prepare("SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) AS total FROM gen_metadata").get(),r=K(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 o=R0("sha256");o.update("rev:").update(ka).update(`
3
+ `).replace(/\\t/g," ").replace(/\\r/g,"\r")}function G(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function Rt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var Q,Re=x(()=>{"use strict";Q=y0()});import{readdir as E0}from"node:fs/promises";import{join as Es,resolve as T0}from"node:path";function Ta(t){return T0(t||process.env.XDG_DATA_HOME||Es(Q,".local","share"))}function w0(t){return Es(Ta(t),"muse","sessions")}function v0(t,e,n,r){let s=r?.input_tokens,o=r?.cache_read_tokens??r?.input_cache_read_tokens,i=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 o=="number"&&o>s||typeof a=="number"&&typeof o=="number"&&o>a||typeof a=="number"&&typeof i=="number"&&i>a||typeof a=="number"&&typeof o=="number"&&typeof i=="number"&&o+i>a,c=l?null:typeof o=="number"?o:null,d=l?null:typeof i=="number"?i:null,u=null;return l||(typeof r?.input_uncached_tokens=="number"?u=r.input_uncached_tokens:typeof a=="number"&&typeof o=="number"&&typeof i=="number"&&a>=o+i&&(u=a-o-i)),{response_id:t,timestamp:e.toISOString(),model:typeof n=="string"&&n.length>0?n:null,tokens:{input_uncached:typeof u=="number"?u:null,input_cached:typeof c=="number"?c:null,input_cache_write:typeof d=="number"?d:null,output:typeof r?.output_tokens=="number"?r.output_tokens:null},files_read:null,files_written:null}}function Z_(t,e){let n,r,s,o,i,a=[],l=new Map,c=new Map,d=new Set,u,f,m=()=>{f="partial"},p=g=>{if(typeof g!="string"||g.length===0){m();return}let E=l.get(g);return E||(E={id:g,turn:{id:g,status:"unknown"},responseIds:[]},l.set(g,E)),E},_=g=>{if(g.retained_frame&&Array.isArray(g.children)){for(let b of g.children)try{if(typeof b?.record_json!="string")throw new Error("missing record_json");_(JSON.parse(b.record_json))}catch{m()}return}if(g.stream?.kind!=="session"||g.stream?.id!==t)return;if(g.schema_version!==1){m();return}if(g.payload_type?.startsWith("runtime.session")&&g.payload_schema_version!==1){m();return}let E=g.payload?.source_run_record_id;for(let b of[g.id,E])if(!(typeof b!="string"||b.length===0)&&d.has(b))return;for(let b of[g.id,E])typeof b=="string"&&b.length>0&&d.add(b);let y=typeof g.recorded_at=="number"&&Number.isFinite(g.recorded_at)?new Date(g.recorded_at/1e3):void 0;if(g.recorded_at!==void 0&&(!y||!Number.isFinite(y.getTime()))){m();return}y&&Number.isFinite(y.getTime())&&((!s||y<s)&&(s=y),(!o||y>o)&&(o=y));let T=g.payload;if(g.payload_type==="runtime.session.metadata"&&(typeof T?.record?.workspace_root=="string"&&(n=T.record.workspace_root),typeof T?.record?.model_id=="string"&&(r=T.record.model_id)),g.payload_type!=="runtime.session"||T?.kind!=="run")return;let w=T.event,S=p(T.run_id);if(!w||!y||!S){w||m();return}if(w.kind==="started"&&typeof w.prompt=="string")a.push({role:"user",content:w.prompt,timestamp:y}),S.turn.startedAt=y,S.turn.prompt=w.prompt,S.turn.status="in_progress",i="in_progress";else if(w.kind==="assistant_message_committed"&&typeof w.text=="string")a.push({role:"assistant",content:w.text,timestamp:y});else if(w.kind==="terminal")S.turn.completedAt=y,S.turn.status=w.terminal==="completed"?"complete":"aborted",i=S.turn.status;else if(w.kind==="model_completed"){typeof w.model=="string"&&w.model.length>0&&(r=w.model,S.turn.model=w.model);let b=typeof E=="string"&&E.length>0?E:typeof g.id=="string"&&g.id.length>0?g.id:void 0;if(!b)m();else{S.responseIds.push(b);let q={};if(w.usage&&typeof w.usage=="object")for(let M 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 ue=w.usage[M];typeof ue=="number"&&Number.isSafeInteger(ue)&&ue>=0&&(q[M]=ue)}Object.keys(q).length>0&&(S.turn.rawUsage=[...S.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,v0(b,y,w.model,q))}if(!w.usage)return;let I={},L=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,k=w.usage.cache_write_tokens??w.usage.input_cache_write_tokens,v=typeof w.usage.promptTokens=="number"?w.usage.promptTokens:typeof w.usage.prompt_tokens=="number"?w.usage.prompt_tokens:void 0,A=typeof L=="number"&&typeof O=="number"&&O>L||typeof v=="number"&&typeof O=="number"&&O>v||typeof v=="number"&&typeof k=="number"&&k>v||typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&O+k>v,N=A?void 0:typeof O=="number"?O:void 0,R=A?void 0:typeof k=="number"?k:void 0,C;A||(typeof w.usage.input_uncached_tokens=="number"?C=w.usage.input_uncached_tokens:typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&v>=O+k&&(C=v-O-k)),C!==void 0&&C<0&&(C=void 0);let $=w.usage.output_tokens,P=w.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(I.inputTokens=C),typeof N=="number"&&Number.isSafeInteger(N)&&N>=0&&(I.cachedInputTokens=N),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(I.cacheWriteInputTokens=R),typeof $=="number"&&Number.isSafeInteger($)&&$>=0&&(I.outputTokens=$),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(I.reasoningOutputTokens=P),u=I}};return{visit:_,finish:()=>{if(!n||!s||!o)return null;let g=a.filter(w=>w.role==="user").map(w=>w.content),E=[...l.values()].map(w=>({...w.turn,...w.responseIds.length>0?{responseIds:[...w.responseIds]}:{}})),y=[...c.values()],T=Xn(y,f!=="partial");return{provider:"muse",sessionId:t,filePath:e,cwd:n,createdAt:s,modifiedAt:o,model:r,messages:a,messageCount:a.length,firstUserMessage:g[0],lastUserMessage:g.at(-1),userPrompts:g,turnStatus:i,totalInputTokens:T.input_uncached??void 0,totalCachedInputTokens:T.input_cached??void 0,totalCacheWriteInputTokens:T.input_cache_write??void 0,totalOutputTokens:T.output??void 0,lastTokenUsage:u,turns:E,responses:y,...f?{captureStatus:f}:{}}},markPartial:m}}function S0(t,e,n){let r=Z_(e,n);for(let s of t)r.visit(s);return r.finish()}function b0(t,e,n,r){r.signal.throwIfAborted();let s=Math.max(0,r.maxBytes),o=t.length<=s?t:t.subarray(0,Math.max(0,t.subarray(0,s).lastIndexOf(10))),i=o.length!==t.length,a=[],l=i,c=0,d=f=>{if(!f||typeof f!="object"||Array.isArray(f)){l=!0;return}let m=f;if(m.retained_frame&&Array.isArray(m.children)){for(let p of m.children){if(c>=r.maxRows){l=!0;return}let _;try{if(typeof p?.record_json!="string")throw new Error("missing record_json");_=JSON.parse(p.record_json)}catch{l=!0;continue}d(_)}return}if(c>=r.maxRows){l=!0;return}a.push(m),c++};for(let f of o.toString("utf8").split(/\r?\n/u)){if(r.signal.throwIfAborted(),f.trim()==="")continue;let m;try{m=JSON.parse(f)}catch{l=!0;continue}d(m)}let u=S0(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function eg(t){return{provider:"muse",root:w0(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:b0}}async function Q_(t,e){let n=Z_(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var z_,Ea,Vd=x(()=>{"use strict";Co();Re();z_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Ea=class{name="muse";dataHome;constructor(e={}){this.dataHome=Ta(e.museDataHome)}get root(){return Es(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await E0(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(Es(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(Es(e,o.name),n+1));return s}async resolveSessionPath(e){return z_.test(e)?(await this.files()).find(n=>n.endsWith(Es(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?Q_(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!z_.test(r))continue;let s=await Q_(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as tg,readdir as I0,rm as k0,stat as ng}from"node:fs/promises";import{basename as A0,join as Ts,resolve as N0}from"node:path";function Sa(t){return N0(t||process.env.MINIPLAYER_HOME||Ts(process.env.XDG_DATA_HOME||Ts(Q,".local","share"),"miniplayer"))}function wa(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function Jd(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function rg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function sg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function og(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 ig(t){let e=t.usage&&typeof t.usage=="object"&&!Array.isArray(t.usage)?t.usage:{},n={};for(let[l,c]of Object.entries(e))K(c)!==null&&(n[l]=c);let r=K(e.inputTokens),s=K(e.cachedInputTokens),o=K(t.cacheWriteInputTokens??e.cacheWriteInputTokens),i=K(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&&o!==null&&(a=r+o),t.usageConvention==="synthetic"&&r===0&&s===0&&(o===0||o===null)&&i===0&&(a=0),{tokens:{input_uncached:a,input_cached:s,input_cache_write:o,output:i},rawUsage:n,pricingFacts:K(e.reasoningTokens)===null?null:{reasoning_output_tokens:K(e.reasoningTokens)}}}function lg(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=p=>{if(typeof p!="string")return;let _=new Date(p);return Number.isFinite(_.getTime())?_:void 0},o=s(r.createdAt),i=s(r.updatedAt);if(!o||!i)return null;let a=[],l=[],c=[],d=r.version===1,u="complete";if(r.version===1){if(!Array.isArray(r.messages))return null;for(let p of r.messages){if(!p||!["user","assistant"].includes(p.role)||typeof p.content!="string")return null;a.push({role:p.role,content:p.content,timestamp:s(p.timestamp)??i})}}else{if(!Array.isArray(r.turns))return null;let p=new Set,_=new Set;for(let h of r.turns){if(!h||typeof h.responseId!="string"||!h.responseId||typeof h.input?.text!="string")return null;if(p.has(h.responseId)){d=!0;continue}p.add(h.responseId);let g=s(h.startedAt),E=s(h.completedAt??h.endedAt);if(!g)return null;let y=typeof h.model=="string"?h.model:void 0;["complete","running","failed","aborted"].includes(h.status)||(d=!0);let T=h.status==="complete"?"complete":h.status==="running"?"in_progress":h.status==="failed"?"failed":h.status==="aborted"?"aborted":"unknown";u=T==="failed"||T==="unknown"?"aborted":T,(T!=="complete"||h.partial===!0)&&(d=!0);let w=Array.isArray(h.modelResponses),S=w?h.modelResponses:[],b=[];l.push({id:h.responseId,startedAt:g,completedAt:E,model:y,prompt:h.input.text,status:T,responseIds:b}),a.push({role:"user",timestamp:g,content:h.input.text});let I=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!w&&!I){let A=h.usage??{},N=ig({...h,usage:A});Object.keys(N.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:N.rawUsage}]),b.push(h.responseId),c.push({response_id:h.responseId,timestamp:(E??g).toISOString(),model:y??null,model_provider:typeof h.provider=="string"?h.provider:null,tokens:N.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:N.pricingFacts}),T!=="complete"&&!h.usage&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??g,content:h.output.text,model:y});continue}let L=new Map,O=new Map,k=new Set,v=[];for(let A of S){if(!A||typeof A!="object"||typeof A.responseId!="string"||!A.responseId){d=!0;continue}if(b.includes(A.responseId)){d=!0;continue}let N=A,R=v.length;v.push({response:N,index:R,filesRead:[],filesWritten:[],io:[]}),b.push(A.responseId),_.has(A.responseId)&&(d=!0),_.add(A.responseId),N.toolCalls!==void 0&&!Array.isArray(N.toolCalls)&&(d=!0,v[R].io.push({direction:"read",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"}));for(let C of Array.isArray(N.toolCalls)?N.toolCalls:[]){let $=rg(C),P=Jd(C);if($)L.set($,R),O.set($,P);else{d=!0;let q=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",M=P==="write_file"||P==="shell"||P==="tool";q&&v[R].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),M&&v[R].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}b.length===0&&S.length>0&&(d=!0);for(let A of Array.isArray(h.toolEvents)?h.toolEvents:[]){let N=A&&typeof A=="object"?A:{},R=rg(N),C=R?L.get(R):void 0,$=Jd(N),P=sg(N.result),q=N.status==="failed"||N.error!==void 0;if(N.type==="tool_call"?a.push({role:"tool_use",timestamp:s(N?.timestamp)??g,content:wa(N?.input??N?.args),toolName:$,toolInput:wa(N?.input??N?.args),toolInputData:sg(N?.input??N?.args)??void 0,...R?{toolCallId:R}:{}}):a.push({role:"tool_result",timestamp:s(N?.timestamp)??E??g,content:wa(q?N?.error:N?.result),toolName:$,...R?{toolCallId:R}:{}}),C===void 0){d=!0;continue}let M=v[C];(N.type==="tool_result"||q||N.result!==void 0)&&k.add(R);let ue=P?.path,H=K(P?.bytesRead??P?.bytesWritten);N.type!=="tool_call"&&($==="read_file"&&!q&&typeof ue=="string"&&H!==null?M.filesRead.push({path:ue,bytes:H}):$==="write_file"&&!q&&typeof ue=="string"&&H!==null?M.filesWritten.push({path:ue,bytes:H}):$==="webget"&&!q&&H!==null?M.io.push({direction:"read",kind:"web",id:R,ref:og(P?.finalUrl??P?.url),bytes:H,basis:"certified_counter"}):$==="shell"||q?($!=="write_file"&&M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}),($==="shell"||$==="write_file")&&M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"})):$==="list_directory"||$==="read_file"||$==="webget"?M.io.push({direction:"read",kind:$==="webget"?"web":"unattributed",id:R,ref:$==="webget"?og(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):$==="write_file"?M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}):M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}))}for(let[A,N]of O)if(!k.has(A)){let R=v[L.get(A)],C=N==="list_directory"||N==="read_file"||N==="webget"||N==="shell",$=N==="write_file"||N==="shell";C&&R.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),$&&R.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of v){let N=A.response,R=ig(N),C=s(N.completedAt??N.startedAt)??E??g;new Set((Array.isArray(N.toolCalls)?N.toolCalls:[]).map(M=>Jd(M))).has("shell")&&!A.io.some(M=>M.kind==="unattributed"&&M.direction==="read")&&A.io.push({direction:"read",kind:"unattributed",id:N.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:N.responseId,ref:null,bytes:null,basis:"unknown"}),A.index===0&&A.io.unshift({direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"});let P=A.io.some(M=>M.direction==="read"&&M.bytes===null),q=A.io.some(M=>M.direction==="write"&&M.bytes===null);if(c.push({response_id:N.responseId,timestamp:C.toISOString(),model:typeof N.model=="string"?N.model:null,model_provider:typeof N.provider=="string"?N.provider:typeof h.provider=="string"?h.provider:null,tokens:R.tokens,files_read:P?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:P?null:A.filesRead.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="read").reduce((M,ue)=>M+(ue.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="write").reduce((M,ue)=>M+(ue.bytes??0),0),external_io:A.io,pricing_facts:R.pricingFacts}),Object.keys(R.rawUsage).length){let M=l.at(-1);M.rawUsage=[...M.rawUsage??[],{responseId:N.responseId,values:R.rawUsage}]}}l.at(-1).responseIds=b,b.length!==S.length&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??g,content:h.output.text,model:y})}}let f=a.filter(p=>p.role==="user").map(p=>p.content),m=Xn(c,!d);return{provider:"miniplayer",sessionId:e,cwd:r.cwd,filePath:n,createdAt:o,modifiedAt:i,model:typeof r.model=="string"?r.model:void 0,messages:a,messageCount:a.length,userPrompts:f,firstUserMessage:f[0],lastUserMessage:f.at(-1),turns:l,responses:c,turnStatus:u,...d?{captureStatus:"partial"}:{},totalInputTokens:m.input_uncached??void 0,totalCachedInputTokens:m.input_cached??void 0,totalCacheWriteInputTokens:m.input_cache_write??void 0,totalOutputTokens:m.output??void 0}}function ba(t){return{provider:"miniplayer",root:Ts(Sa(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=A0(e,".json");return e.endsWith(".json")&&ag.test(n)?n:null},decode(e,n,r,s){s.signal.throwIfAborted();try{let o=JSON.parse(e.toString("utf8"));return(Array.isArray(o.turns)?o.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(o.messages)?o.messages.length:0)>s.maxRows?null:lg(o,n,r)}catch{return null}}}}var ag,va,Ia=x(()=>{"use strict";Co();Re();wn();ag=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;va=class{name="miniplayer";home;constructor(e={}){this.home=Sa(e.miniplayerHome)}getWatchPaths(){return[{directory:Ts(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await I0(Ts(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(!ag.test(e))return null;let n=Ts(this.home,"sessions",`${e}.json`);try{return(await ng(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=lg(JSON.parse(await tg(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await tg(`${n}.lock`,"utf8"));if(Number.isInteger(o.pid)&&o.pid>0)try{process.kill(o.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 ng(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await k0(n),!0}}});import{createHash as R0}from"node:crypto";import{createRequire as L0}from"node:module";import{readdir as x0,realpath as C0}from"node:fs/promises";import{basename as cg,dirname as O0,join as dg,resolve as ug}from"node:path";function M0(){return D0("node:sqlite").DatabaseSync}function $0(){return process.env.HOME||process.env.USERPROFILE||""}function Or(t){let e=[],n=0,r=()=>{let s=0n,o=0n;for(;;){if(n>=t.length||o>63n)return null;let i=t[n++];if(s|=BigInt(i&127)<<o,o+=7n,!(i&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 o=s>>>3,i=s&7;if(o===0)return e;if(i===0){let a=r();if(a===null)return e;e.push({field:o,wire:i,varint:a})}else if(i===1){if(n+8>t.length)return e;n+=8,e.push({field:o,wire:i})}else if(i===5){if(n+4>t.length)return e;n+=4,e.push({field:o,wire:i})}else if(i===2){let a=r();if(a===null||n+a>t.length)return e;e.push({field:o,wire:i,bytes:t.subarray(n,n+a)}),n+=a}else return e}return e}function Kt(t,e){return t.find(n=>n.field===e)}function P0(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=Or(n.bytes),s=Kt(r,1)?.bytes,o=Kt(r,2)?.bytes;if(s===void 0||o===void 0)continue;let i=s.toString("utf8");e.has(i)||e.set(i,o.toString("utf8"))}return e}function U0(t){let e=Kt(Or(t),5)?.bytes;if(e===void 0)return null;let n=Kt(Or(e),1)?.bytes;if(n===void 0)return null;let r=Or(n),s=Kt(r,1)?.varint;if(s===void 0)return null;let o=Kt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function F0(t){let e=Kt(t,4)?.bytes,n=e!==void 0?Or(e):[],r=s=>{let o=Kt(n,s)?.varint;return o===void 0?null:K(o)};return{tokens:{input_uncached:r(2),input_cached:r(5),input_cache_write:r(4),output:r(3)},thinkingOutputTokens:r(9)}}function j0(t){let e=Kt(Or(t),1)?.bytes;if(e===void 0)return null;let n=Or(e),r=P0(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=Kt(n,19)?.bytes,i=o!==void 0&&o.length>0?o.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:d,thinkingOutputTokens:u}=F0(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function fg(t,e){oe(e);let n=t.prepare("SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) AS total FROM gen_metadata").get(),r=K(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 o=R0("sha256");o.update("rev:").update(ka).update(`
4
4
  `);let i=[],a=[],l=0;for(let u of s){if(e.signal.throwIfAborted(),!(u.data instanceof Uint8Array))return null;let f=Buffer.from(u.data);if(l+=f.length,l>e.maxBytes)return null;o.update("g").update(String(u.idx)).update("\0").update(f).update(`
5
5
  `);let m=j0(f);m!==null&&(i.push(m),m.lastStepIndex!==null&&a.push(m.lastStepIndex))}let c=new Map,d=[...new Set(a)].sort((u,f)=>u-f);for(let u of d){e.signal.throwIfAborted();let m=t.prepare("SELECT idx, step_payload FROM steps WHERE idx = ?").get(u)?.step_payload;if(!(m instanceof Uint8Array))continue;let p=Buffer.from(m);if(l+=p.length,l>e.maxBytes)return null;o.update("s").update(String(u)).update("\0").update(p).update(`
6
6
  `);let _=U0(p);_!==null&&c.set(u,_)}return{revision:`${xo}+${ka}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function W0(t){return t.generations.map(e=>({response_id:e.requestId,timestamp:e.lastStepIndex===null?null:t.timestamps.get(e.lastStepIndex)??null,model:e.model,tokens:e.tokens,files_read:null,files_written:null,external_io:null,read_bytes:null,write_bytes:null,model_provider:null,pricing_facts:Jt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function mg(t={}){return new Oo(t)}var qn,ka,D0,Oo,Kd=x(()=>{"use strict";wn();qn="agy",ka="agy-tokens-v1",D0=L0(import.meta.url);Oo=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=ug(e.agyConversationsDir??dg($0(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){oe(e);let s=await x0(this.conversationsDir,{withFileTypes:!0}).catch(()=>[]),o=[];for(let i of s){if(e.signal.throwIfAborted(),!i.isFile()||i.isSymbolicLink()||!i.name.endsWith(".db"))continue;let a=await C0(dg(this.conversationsDir,i.name)).catch(()=>null);a!==null&&(r!==null&&pe(a,r)<=0||o.push(a))}return o.sort(pe),{sources:o.slice(0,n).map(i=>({provider:qn,sessionid:cg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await Me(e.source_id,[this.conversationsDir]);if(n===null||cg(n,".db")!==e.sessionid||ug(O0(n))!==this.conversationsDir)return null;try{let r=new(M0())(n,{open:!0,readOnly:!0});return r.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),r}catch{return null}}async inspect(e,n){if(oe(n),e.provider!==qn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=fg(r,n);return s?{status:"ready",revision:s.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}async read(e,n,r){if(oe(r),e.provider!==qn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=fg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=W0(o);return s.exec("COMMIT"),{status:"complete",source:e,revision:n,checkpoint:n,responses:i}}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import H0 from"node:zlib";function z0(t,e){return t[e]===X0&&t[e+1]===q0&&t[e+2]===G0&&t[e+3]===V0}function pg(t,e){return(t[e]&240)===80&&t[e+1]===J0&&t[e+2]===K0&&t[e+3]===Y0}function Q0(t,e){if(pg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!z0(t,e))return;let n=e+4;if(n+1>t.length)return;let r=t[n];n+=1;let s=r>>6,o=(r&32)!==0,i=(r&4)!==0,a=r&3;o||(n+=1),n+=[0,1,2,4][a];let l=s===0?o?1:0:[2,4,8][s-1];if(n+=l,!(n>t.length)){for(;;){if(n+3>t.length)return;let c=t[n]|t[n+1]<<8|t[n+2]<<16,d=(c&1)!==0,u=c>>1&3,f=c>>3;if(n+=3,u===3||(n+=u===1?1:f,n>t.length))return;if(d)break}if(i&&(n+=4),!(n>t.length))return n-e}}function Do(t){let e=[],n=0;for(;n+4<=t.length;){let r=Q0(t,n);if(r===void 0||r<=0)break;e.push(t.subarray(n,n+r)),n+=r}return e}function Aa(t){let e=[];for(let n of Do(t))pg(n,0)||e.push(B0(n).toString("utf8"));return e.join("")}var B0,X0,q0,G0,V0,J0,K0,Y0,Na=x(()=>{"use strict";B0=H0.zstdDecompressSync,X0=40,q0=181,G0=47,V0=253,J0=42,K0=77,Y0=24});import{readdir as Z0,realpath as eL}from"node:fs/promises";import{basename as Yd,dirname as hg,join as yg,resolve as Eg}from"node:path";import tL from"node:zlib";function Tg(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function aL(t){return iL.has(t)||Bn(t)}function lL(){return process.env.HOME||process.env.USERPROFILE||""}function cL(t){if(typeof t=="string")return Buffer.byteLength(t,"utf8");if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function _g(t){if(!t)return null;let e=K(t.inputTokens),n=K(t.outputTokens);if(e===null||n===null)return null;let r=t.cacheReadTokens===void 0?null:K(t.cacheReadTokens);return{input_uncached:e,input_cached:r,input_cache_write:null,output:n}}function dL(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function uL(t,e){let n=Do(t),r=0;for(let i of n)r+=i.length;if(r!==t.length)return{text:"",truncated:!0};let s=[],o=0;for(let i of n){if(e.signal.throwIfAborted(),dL(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=nL(i)}catch{return{text:s.join(""),truncated:!0}}if(o+=a.length,o>e.maxBytes)return{text:s.join(""),truncated:!0};s.push(a.toString("utf8"))}return{text:s.join(""),truncated:!1}}function fL(t){let e=[];for(let n of t.split(`
7
- `)){if(!n.trim())continue;let r;try{r=JSON.parse(n)}catch{continue}let s=typeof r.type=="string"?r.type:"";s.endsWith("-chunks")||s==="assistant/chunk"&&B(B(r.data)?.chunk)?.type!=="usage"||e.push(r)}return e}function mL(t){if(typeof t=="string")try{return B(JSON.parse(t))}catch{return null}return B(t)}function gg(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function pL(t,e,n,r){let s=new Map,o=[],i=new Set,a=new Map,l=null,c=null,d=null;for(let f of t){r.signal.throwIfAborted();let m=B(f.data);if(f.type==="assistant/chunk"){let p=B(m?.chunk),_=B(p?.usage),h=gg(m?.turn,m?.step);_&&h!==null&&typeof m?.turn=="number"&&typeof m?.step=="number"&&a.set(h,{turn:m.turn,step:m.step,usage:_,time:f.time});continue}if(f.type==="request/header"){let p=B(B(m?.header)?.config);typeof p?.provider=="string"&&p.provider&&(l=p.provider),typeof p?.model=="string"&&p.model&&(c=p.model);continue}if(f.type==="user/message"){if(B(m?.source)?.kind!=="user")continue;let _=typeof m?.id=="string"&&m.id?m.id:null;o.push({id:_,bytes:cL(m?.content)});continue}if(f.type==="assistant/message"){let p=B(m?.message),_=B(p?.source),h=typeof p?.id=="string"&&p.id?p.id:null,g=gg(m?.turn,m?.step),E;if(g!==null)i.add(g),E=`dsh:turn-step:${m.turn}/${m.step}`;else{if(B(m?.usage))return{status:"partial"};E=h}if(E===null)return{status:"partial"};let y=_g(B(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,reasoning:null,provider:typeof _?.provider=="string"&&_.provider?_.provider:null},s.set(E,T),s.size>r.maxRows)return{status:"partial"};for(let w of o)T.io.record({direction:"read",kind:"prompt",id:w.id,ref:null,bytes:w.bytes,basis:w.bytes===null?"unknown":"input_text"});o.length=0}if(y){T.meta.tokens=y;let w=K(B(m?.usage)?.reasoningTokens);w!==null&&(T.reasoning=w)}d=E;continue}if(f.type==="tool/call"){let p=d!==null?s.get(d):void 0;if(!p)continue;let _=typeof m?.callId=="string"&&m.callId?m.callId:null,h=typeof m?.name=="string"?m.name.toLowerCase():"",g=mL(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);sL.has(h)?E!==null?p.obs.record(_??"","read",E,null):Ie(p.io,_):oL.has(h)?E!==null?p.obs.record(_??"","written",E,gs(g)):Ie(p.io,_):aL(h)||Ie(p.io,_);continue}}for(let[f,{turn:m,step:p,usage:_,time:h}]of a){if(i.has(f))continue;r.signal.throwIfAborted();let g=_g(_),E=new gt;Ie(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:yt(typeof h=="number"?h:null),model:c,tokens:g??{...lt},files_read:[],files_written:[]},obs:new _t,io:E,reasoning:K(_.reasoningTokens),provider:l};if(s.set(y.meta.response_id,y),s.size>r.maxRows)return{status:"partial"}}let u=[];for(let{meta:f,obs:m,io:p,reasoning:_,provider:h}of s.values()){let g=m.files("read"),E=m.files("written"),y=p.entries();u.push({...f,files_read:g,files_written:E,external_io:y,read_bytes:Ze(g,y,"read"),write_bytes:Ze(E,y,"written"),model_provider:l??h,pricing_facts:Jt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function hL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await Z0(c,{withFileTypes:!0}).catch(()=>[]);u.sort((f,m)=>pe(f.name,m.name));for(let f of u){if(r.signal.throwIfAborted(),o.length>=e)return;if(i+=1,i>n){a=!0;return}let m=yg(c,f.name);if(f.isDirectory()&&!f.isSymbolicLink()&&d<2){if(await l(m,d+1),a||o.length>=e)return}else if(f.isFile()&&Tg(f.name)){let p=await eL(m).catch(()=>Eg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function wg(t={}){return new zd(t)}var Gn,nL,rL,sL,oL,iL,zd,vg=x(()=>{"use strict";wn();Na();Gn="dsh",nL=tL.zstdDecompressSync;rL=5e5,sL=new Set(["read","read_image"]),oL=new Set(["write","edit"]),iL=new Set(["create_goal","get_goal","update_goal","todo_write","ask_user_question","exit_plan_mode","list_agents","interrupt_agent","job_list","job_kill","job_output"]);zd=class{sessionsDir;maxDiscoveryTraversalVisits;constructor(e={}){let n=e.dshHome??process.env.DSH_HOME??yg(lL(),".dsh");this.sessionsDir=Eg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):rL}async discover(e,n,r=null){oe(e);let{paths:s,truncated:o}=await hL(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:Gn,sessionid:Yd(hg(i)),source_id:i})),truncated:o}}matches(e,n){return Tg(Yd(n))&&Yd(hg(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Gn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Gn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=uL(o.data,r);return a?{status:"partial"}:pL(fL(i),e,n,r)}}});import{readdir as _L,realpath as gL}from"node:fs/promises";import{basename as Ra,dirname as yL,join as Qd,resolve as Sg}from"node:path";function IL(){return process.env.HOME||process.env.USERPROFILE||""}function bL(){let t=IL();return[Qd(t,".qwen","projects"),Qd(t,".qwen.bk1","projects")]}function kL(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:B(B(t.systemPayload)?.uiEvent)}function AL(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function NL(t){let e=K(t.input_token_count),n=K(t.output_token_count),r=K(t.cached_content_token_count),s=K(t.total_token_count);if(e===null||n===null||r===null||s===null||r>e||e+n!==s)return null;let o=t.thoughts_token_count===void 0?null:K(t.thoughts_token_count);return t.thoughts_token_count!==void 0&&(o===null||o>n)?null:{input_uncached:e-r,input_cached:r,input_cache_write:null,output:n}}function RL(t){let e=B(t)?.parts;if(!Array.isArray(e))return null;let n=0,r=!1;for(let s of e){let o=B(s);!o||o.thought===!0||typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}return r?n:null}function LL(t){let e=new Map,n=new Set,r=new Map;for(let i of t){let a=typeof i.uuid=="string"&&i.uuid?i.uuid:null;if(a!==null&&(e.set(a,typeof i.parentUuid=="string"&&i.parentUuid?i.parentUuid:null),i.type==="user")){n.add(a);let l=RL(i.message);l!==null&&r.set(a,l)}}let s=new Map;return{promptBytes:r,resolve:i=>{let a=[],l=new Set,c=i,d;for(;;){let u=s.get(c);if(u){d=u;break}if(n.has(c)){d={kind:"found",uuid:c};break}if(!e.has(c)){d={kind:"broken"};break}if(l.has(c)){d={kind:"broken"};break}l.add(c),a.push(c);let f=e.get(c)??null;if(f===null){d={kind:"clean"};break}c=f}for(let u of a)s.set(u,d);return d}}}function xL(t,e,n,r){let{promptBytes:s,resolve:o}=LL(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=kL(d);if(u===null)continue;let f=AL(u);if(f===EL){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=NL(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,thoughts:null},a.set(E,T),a.size>r.maxRows)return{status:"partial"};let S=typeof d.uuid=="string"&&d.uuid?d.uuid:null,I=S===null?{kind:"broken"}:o(S);if(I.kind==="broken")T.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"});else if(I.kind==="found"&&!i.has(I.uuid)){i.add(I.uuid);let b=s.get(I.uuid)??null;T.io.record({direction:"read",kind:"prompt",id:I.uuid,ref:null,bytes:b,basis:b===null?"unknown":"input_text"})}}T.meta.tokens=y,typeof u.model=="string"&&u.model&&(T.meta.model=u.model);let w=K(u.thoughts_token_count);w!==null&&(T.thoughts=w);continue}if(f!==TL)continue;let m=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(m===null)continue;let p=a.get(m);if(p===void 0)return{status:"partial"};let _=typeof u.function_name=="string"?u.function_name.toLowerCase():"",h=B(u.function_args),g=`tool-${l++}`;if(wL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"read",E,null):Ie(p.io,g)}else if(vL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,gs(h)):Ie(p.io,g)}else Bn(_)||Ie(p.io,g)}let c=[];for(let{meta:d,obs:u,io:f,thoughts:m}of a.values()){let p=u.files("read"),_=u.files("written"),h=f.entries();c.push({...d,files_read:p,files_written:_,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(_,h,"written"),model_provider:null,pricing_facts:Jt({reasoning:m??void 0},d.tokens.output,d.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:c}}async function CL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await _L(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>pe(u.name,f.name));for(let u of d){if(r.signal.throwIfAborted(),o.length>=e)return;if(i+=1,i>n){a=!0;return}let f=Qd(c,u.name);if(u.isDirectory()&&!u.isSymbolicLink()){if(await l(f),a||o.length>=e)return}else if(u.isFile()&&u.name.endsWith(".jsonl")&&Ra(c)===Ig){let m=await gL(f).catch(()=>Sg(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function OL(t,e){for(let n of t){let r=n.sessionId;if(typeof r=="string"&&r.length>0&&r!==e)return!1}return!0}function bg(t={}){return new Zd(t)}var Vn,EL,TL,Ig,wL,vL,SL,Zd,kg=x(()=>{"use strict";wn();Vn="qwen",EL="qwen-code.api_response",TL="qwen-code.tool_call",Ig="chats",wL=new Set(["read_file"]),vL=new Set(["write_file"]),SL=5e5;Zd=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??bL()).map(n=>Sg(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):SL}async discover(e,n,r=null){oe(e);let s=new Map,o=!1;for(let a of this.roots){e.signal.throwIfAborted();let l=await CL(a,n,this.maxDiscoveryTraversalVisits,e,r);l.truncated&&(o=!0);for(let c of l.paths)s.set(c,c)}return{sources:[...s.keys()].sort(pe).slice(0,n).map(a=>({provider:Vn,sessionid:Ra(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Ra(n,".jsonl")===e.sessionid&&Ra(yL(n))===Ig}async inspect(e,n){if(oe(n),e.provider!==Vn)return{status:"unsupported"};let r=await Me(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Vn)return{status:"unsupported"};let s=await Me(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ya(o.data,r);return i?OL(i,e.sessionid)?xL(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as DL}from"node:crypto";import{createRequire as ML}from"node:module";import{join as Mo,resolve as eu}from"node:path";function PL(){return $L("node:sqlite").DatabaseSync}function Ag(){return process.env.HOME||process.env.USERPROFILE||""}function UL(){let t=process.env.XDG_DATA_HOME||Mo(Ag(),".local","share"),e=process.env.XDG_CONFIG_HOME||Mo(Ag(),".config");return[Mo(t,"opencode","opencode.db"),Mo(t,"opencode","opencode-local.db"),Mo(e,"opencode","opencode.db")]}function BL(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":FL.includes(e)?"read":jL.includes(e)?"written":null}function Ng(t,e=WL){let n=B(t);if(!n)return null;for(let r of e){let s=n[r];if(typeof s=="string"&&s.length>0)return s;if(Array.isArray(s)){for(let o of s)if(typeof o=="string"&&o.length>0)return o}}return null}function XL(t){let e=B(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=B(r),o=s?.newString??s?.new_string;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function qL(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
7
+ `)){if(!n.trim())continue;let r;try{r=JSON.parse(n)}catch{continue}let s=typeof r.type=="string"?r.type:"";s.endsWith("-chunks")||s==="assistant/chunk"&&B(B(r.data)?.chunk)?.type!=="usage"||e.push(r)}return e}function mL(t){if(typeof t=="string")try{return B(JSON.parse(t))}catch{return null}return B(t)}function gg(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function pL(t,e,n,r){let s=new Map,o=[],i=new Set,a=new Map,l=null,c=null,d=null;for(let f of t){r.signal.throwIfAborted();let m=B(f.data);if(f.type==="assistant/chunk"){let p=B(m?.chunk),_=B(p?.usage),h=gg(m?.turn,m?.step);_&&h!==null&&typeof m?.turn=="number"&&typeof m?.step=="number"&&a.set(h,{turn:m.turn,step:m.step,usage:_,time:f.time});continue}if(f.type==="request/header"){let p=B(B(m?.header)?.config);typeof p?.provider=="string"&&p.provider&&(l=p.provider),typeof p?.model=="string"&&p.model&&(c=p.model);continue}if(f.type==="user/message"){if(B(m?.source)?.kind!=="user")continue;let _=typeof m?.id=="string"&&m.id?m.id:null;o.push({id:_,bytes:cL(m?.content)});continue}if(f.type==="assistant/message"){let p=B(m?.message),_=B(p?.source),h=typeof p?.id=="string"&&p.id?p.id:null,g=gg(m?.turn,m?.step),E;if(g!==null)i.add(g),E=`dsh:turn-step:${m.turn}/${m.step}`;else{if(B(m?.usage))return{status:"partial"};E=h}if(E===null)return{status:"partial"};let y=_g(B(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,reasoning:null,provider:typeof _?.provider=="string"&&_.provider?_.provider:null},s.set(E,T),s.size>r.maxRows)return{status:"partial"};for(let w of o)T.io.record({direction:"read",kind:"prompt",id:w.id,ref:null,bytes:w.bytes,basis:w.bytes===null?"unknown":"input_text"});o.length=0}if(y){T.meta.tokens=y;let w=K(B(m?.usage)?.reasoningTokens);w!==null&&(T.reasoning=w)}d=E;continue}if(f.type==="tool/call"){let p=d!==null?s.get(d):void 0;if(!p)continue;let _=typeof m?.callId=="string"&&m.callId?m.callId:null,h=typeof m?.name=="string"?m.name.toLowerCase():"",g=mL(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);sL.has(h)?E!==null?p.obs.record(_??"","read",E,null):be(p.io,_):oL.has(h)?E!==null?p.obs.record(_??"","written",E,gs(g)):be(p.io,_):aL(h)||be(p.io,_);continue}}for(let[f,{turn:m,step:p,usage:_,time:h}]of a){if(i.has(f))continue;r.signal.throwIfAborted();let g=_g(_),E=new gt;be(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:yt(typeof h=="number"?h:null),model:c,tokens:g??{...lt},files_read:[],files_written:[]},obs:new _t,io:E,reasoning:K(_.reasoningTokens),provider:l};if(s.set(y.meta.response_id,y),s.size>r.maxRows)return{status:"partial"}}let u=[];for(let{meta:f,obs:m,io:p,reasoning:_,provider:h}of s.values()){let g=m.files("read"),E=m.files("written"),y=p.entries();u.push({...f,files_read:g,files_written:E,external_io:y,read_bytes:Ze(g,y,"read"),write_bytes:Ze(E,y,"written"),model_provider:l??h,pricing_facts:Jt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function hL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await Z0(c,{withFileTypes:!0}).catch(()=>[]);u.sort((f,m)=>pe(f.name,m.name));for(let f of u){if(r.signal.throwIfAborted(),o.length>=e)return;if(i+=1,i>n){a=!0;return}let m=yg(c,f.name);if(f.isDirectory()&&!f.isSymbolicLink()&&d<2){if(await l(m,d+1),a||o.length>=e)return}else if(f.isFile()&&Tg(f.name)){let p=await eL(m).catch(()=>Eg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function wg(t={}){return new zd(t)}var Gn,nL,rL,sL,oL,iL,zd,vg=x(()=>{"use strict";wn();Na();Gn="dsh",nL=tL.zstdDecompressSync;rL=5e5,sL=new Set(["read","read_image"]),oL=new Set(["write","edit"]),iL=new Set(["create_goal","get_goal","update_goal","todo_write","ask_user_question","exit_plan_mode","list_agents","interrupt_agent","job_list","job_kill","job_output"]);zd=class{sessionsDir;maxDiscoveryTraversalVisits;constructor(e={}){let n=e.dshHome??process.env.DSH_HOME??yg(lL(),".dsh");this.sessionsDir=Eg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):rL}async discover(e,n,r=null){oe(e);let{paths:s,truncated:o}=await hL(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:Gn,sessionid:Yd(hg(i)),source_id:i})),truncated:o}}matches(e,n){return Tg(Yd(n))&&Yd(hg(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Gn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Gn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=uL(o.data,r);return a?{status:"partial"}:pL(fL(i),e,n,r)}}});import{readdir as _L,realpath as gL}from"node:fs/promises";import{basename as Ra,dirname as yL,join as Qd,resolve as Sg}from"node:path";function bL(){return process.env.HOME||process.env.USERPROFILE||""}function IL(){let t=bL();return[Qd(t,".qwen","projects"),Qd(t,".qwen.bk1","projects")]}function kL(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:B(B(t.systemPayload)?.uiEvent)}function AL(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function NL(t){let e=K(t.input_token_count),n=K(t.output_token_count),r=K(t.cached_content_token_count),s=K(t.total_token_count);if(e===null||n===null||r===null||s===null||r>e||e+n!==s)return null;let o=t.thoughts_token_count===void 0?null:K(t.thoughts_token_count);return t.thoughts_token_count!==void 0&&(o===null||o>n)?null:{input_uncached:e-r,input_cached:r,input_cache_write:null,output:n}}function RL(t){let e=B(t)?.parts;if(!Array.isArray(e))return null;let n=0,r=!1;for(let s of e){let o=B(s);!o||o.thought===!0||typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}return r?n:null}function LL(t){let e=new Map,n=new Set,r=new Map;for(let i of t){let a=typeof i.uuid=="string"&&i.uuid?i.uuid:null;if(a!==null&&(e.set(a,typeof i.parentUuid=="string"&&i.parentUuid?i.parentUuid:null),i.type==="user")){n.add(a);let l=RL(i.message);l!==null&&r.set(a,l)}}let s=new Map;return{promptBytes:r,resolve:i=>{let a=[],l=new Set,c=i,d;for(;;){let u=s.get(c);if(u){d=u;break}if(n.has(c)){d={kind:"found",uuid:c};break}if(!e.has(c)){d={kind:"broken"};break}if(l.has(c)){d={kind:"broken"};break}l.add(c),a.push(c);let f=e.get(c)??null;if(f===null){d={kind:"clean"};break}c=f}for(let u of a)s.set(u,d);return d}}}function xL(t,e,n,r){let{promptBytes:s,resolve:o}=LL(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=kL(d);if(u===null)continue;let f=AL(u);if(f===EL){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=NL(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,thoughts:null},a.set(E,T),a.size>r.maxRows)return{status:"partial"};let S=typeof d.uuid=="string"&&d.uuid?d.uuid:null,b=S===null?{kind:"broken"}:o(S);if(b.kind==="broken")T.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"});else if(b.kind==="found"&&!i.has(b.uuid)){i.add(b.uuid);let I=s.get(b.uuid)??null;T.io.record({direction:"read",kind:"prompt",id:b.uuid,ref:null,bytes:I,basis:I===null?"unknown":"input_text"})}}T.meta.tokens=y,typeof u.model=="string"&&u.model&&(T.meta.model=u.model);let w=K(u.thoughts_token_count);w!==null&&(T.thoughts=w);continue}if(f!==TL)continue;let m=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(m===null)continue;let p=a.get(m);if(p===void 0)return{status:"partial"};let _=typeof u.function_name=="string"?u.function_name.toLowerCase():"",h=B(u.function_args),g=`tool-${l++}`;if(wL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"read",E,null):be(p.io,g)}else if(vL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,gs(h)):be(p.io,g)}else Bn(_)||be(p.io,g)}let c=[];for(let{meta:d,obs:u,io:f,thoughts:m}of a.values()){let p=u.files("read"),_=u.files("written"),h=f.entries();c.push({...d,files_read:p,files_written:_,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(_,h,"written"),model_provider:null,pricing_facts:Jt({reasoning:m??void 0},d.tokens.output,d.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:c}}async function CL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await _L(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>pe(u.name,f.name));for(let u of d){if(r.signal.throwIfAborted(),o.length>=e)return;if(i+=1,i>n){a=!0;return}let f=Qd(c,u.name);if(u.isDirectory()&&!u.isSymbolicLink()){if(await l(f),a||o.length>=e)return}else if(u.isFile()&&u.name.endsWith(".jsonl")&&Ra(c)===bg){let m=await gL(f).catch(()=>Sg(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function OL(t,e){for(let n of t){let r=n.sessionId;if(typeof r=="string"&&r.length>0&&r!==e)return!1}return!0}function Ig(t={}){return new Zd(t)}var Vn,EL,TL,bg,wL,vL,SL,Zd,kg=x(()=>{"use strict";wn();Vn="qwen",EL="qwen-code.api_response",TL="qwen-code.tool_call",bg="chats",wL=new Set(["read_file"]),vL=new Set(["write_file"]),SL=5e5;Zd=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??IL()).map(n=>Sg(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):SL}async discover(e,n,r=null){oe(e);let s=new Map,o=!1;for(let a of this.roots){e.signal.throwIfAborted();let l=await CL(a,n,this.maxDiscoveryTraversalVisits,e,r);l.truncated&&(o=!0);for(let c of l.paths)s.set(c,c)}return{sources:[...s.keys()].sort(pe).slice(0,n).map(a=>({provider:Vn,sessionid:Ra(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Ra(n,".jsonl")===e.sessionid&&Ra(yL(n))===bg}async inspect(e,n){if(oe(n),e.provider!==Vn)return{status:"unsupported"};let r=await Me(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Vn)return{status:"unsupported"};let s=await Me(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ya(o.data,r);return i?OL(i,e.sessionid)?xL(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as DL}from"node:crypto";import{createRequire as ML}from"node:module";import{join as Mo,resolve as eu}from"node:path";function PL(){return $L("node:sqlite").DatabaseSync}function Ag(){return process.env.HOME||process.env.USERPROFILE||""}function UL(){let t=process.env.XDG_DATA_HOME||Mo(Ag(),".local","share"),e=process.env.XDG_CONFIG_HOME||Mo(Ag(),".config");return[Mo(t,"opencode","opencode.db"),Mo(t,"opencode","opencode-local.db"),Mo(e,"opencode","opencode.db")]}function BL(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":FL.includes(e)?"read":jL.includes(e)?"written":null}function Ng(t,e=WL){let n=B(t);if(!n)return null;for(let r of e){let s=n[r];if(typeof s=="string"&&s.length>0)return s;if(Array.isArray(s)){for(let o of s)if(typeof o=="string"&&o.length>0)return o}}return null}function XL(t){let e=B(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=B(r),o=s?.newString??s?.new_string;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function qL(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
8
8
  `)){let o=s.replace(/\r$/,""),i=/^\*\*\* (?:Add|Update|Delete) File: (.+)$/.exec(o);if(i){r(),n={path:i[1].trim(),bytes:0};continue}let a=/^\*\*\* Move to: (.+)$/.exec(o);if(a){n&&(n.path=a[1].trim());continue}if(o.startsWith("*** ")){r();continue}n&&o.startsWith("+")&&(n.bytes+=Buffer.byteLength(o.slice(1),"utf8")+1)}return r(),[...e].map(([s,o])=>({path:s,bytes:o}))}function GL(t){if(typeof t!="string"||t.length===0)return null;try{let e=new URL(t);return e.protocol!=="http:"&&e.protocol!=="https:"?null:`${e.origin}${e.pathname}`}catch{return null}}function VL(t,e=!1){let n=B(t);if(!n)return{...lt};let r=n.input===void 0?e?null:0:K(n.input),s=n.output===void 0?e?null:0:K(n.output),o=n.reasoning===void 0?e?null:0:K(n.reasoning),i=B(n.cache),a=i?.read===void 0?e?null:0:K(i.read),l=i?.write===void 0?e?null:0:K(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...lt}:e?{input_uncached:r!==null&&l!==null&&Number.isSafeInteger(r+l)?r+l:null,input_cached:a,input_cache_write:l,output:s!==null&&o!==null&&Number.isSafeInteger(s+o)?s+o:null}:r===null||s===null||o===null||a===null||l===null?{...lt}:r+s+o+a+l===0?{...lt}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function Rg(t,e,n){oe(n);let r=n.maxRows*20,s=t.prepare("SELECT (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS total").get(e,e),o=K(s?.total);if(o===null||o>n.maxBytes)return null;let i=t.prepare("SELECT id,time_created,time_updated,data FROM message WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1),a=t.prepare("SELECT id,message_id,time_created,time_updated,data FROM part WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1);if(i.length+a.length>r)return null;let l=0,c=DL("sha256");for(let d of[...i,...a]){n.signal.throwIfAborted();let u=JSON.stringify(d);if(l+=Buffer.byteLength(u),l>n.maxBytes)return null;c.update(u).update(`
9
- `)}return{revision:`${xo}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function JL(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=B(JSON.parse(s.data))}catch{continue}let i=typeof o?.type=="string"?o.type:"";o?.synthetic===!0||o?.ignored===!0||(i==="text"&&typeof o.text=="string"?(e+=Buffer.byteLength(o.text,"utf8"),n=!0):i&&!HL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function KL(t,e,n,r){let s=new Map;for(let c of n.parts){let d=s.get(c.message_id)??[];d.push(c),s.set(c.message_id,d)}let o=new Map;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=JL(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="assistant")continue;let u=typeof d.parentID=="string"?d.parentID:null;u!==null&&o.has(u)&&!a.has(u)&&(a.add(u),i.set(c.id,{id:u,bytes:o.get(u)}))}let l=[];for(let c of n.messages){r.signal.throwIfAborted();let d;try{d=B(JSON.parse(c.data))}catch{return{status:"partial"}}if(r.requireBillingCounters&&d&&Object.hasOwn(d,"tokens")&&d.role!=="assistant")return{status:"partial"};if(!d||d.role!=="assistant")continue;let u=new _t,f=new gt,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let I of s.get(c.id)??[]){let b;try{b=B(JSON.parse(I.data))}catch{return{status:"partial"}}if(b?.type!=="tool")continue;let L=typeof b.tool=="string"?b.tool.toLowerCase():"",O=BL(b.tool),k=B(b.state),v=B(k?.input),A=typeof b.callID=="string"&&b.callID?b.callID:typeof k?.callID=="string"&&k.callID?k.callID:I.id;if(O==="written")u.record(A,"written",Ng(v),XL(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of qL(N))u.record(A,"written",R.path,R.bytes);else Ie(f,A)}else if(O==="read"){let N=Ng(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=B(B(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:GL(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else Bn(b.tool)||Ie(f,A)}let _=B(d.time),h=B(d.model)?.modelID??d.modelID,g=VL(d.tokens,r.requireBillingCounters),E=B(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=Jt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:yt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Ze(y,w,"read"),write_bytes:Ze(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}function Lg(t={}){return new $o(t)}var Dr,$L,FL,jL,WL,HL,$o,tu=x(()=>{"use strict";wn();Dr="opencode",$L=ML(import.meta.url);FL=["read","read_file","view","view_file","view_image"],jL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],WL=["filePath","path","file","file_path","filepath","notebook_path","paths"],HL=new Set(["session-job-notification"]);$o=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??UL()).map(n=>eu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(eu(e)))return null;try{let n=new(PL())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discover(e,n,r=null){oe(e);let s=new Map;for(let i of this.dbPaths){e.signal.throwIfAborted();let a=await Me(i,[eu(i,"..")]);if(!a||r&&pe(a,r.source_id)<0)continue;let l=this.openDb(a);if(l)try{let c=r?.source_id===a?r.sessionid:"",d=l.prepare("SELECT id FROM session WHERE id > ? ORDER BY id LIMIT ?").all(c,n);for(let u of d)typeof u.id=="string"&&u.id&&!s.has(u.id)&&s.set(u.id,{provider:Dr,sessionid:u.id,source_id:a})}catch{}finally{l.close()}}return{sources:[...s.values()].sort((i,a)=>pe(`${i.source_id}\0${i.sessionid}`,`${a.source_id}\0${a.sessionid}`)).slice(0,n),truncated:!1}}inspect(e,n){if(oe(n),e.provider!==Dr)return{status:"unsupported"};let r=this.openDb(e.source_id);if(!r)return{status:"unavailable"};try{if(r.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return{status:"unavailable"};let o=Rg(r,e.sessionid,n);return o?{status:"ready",revision:o.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}read(e,n,r){if(oe(r),e.provider!==Dr)return{status:"unsupported"};let s=this.openDb(e.source_id);if(!s)return{status:"unavailable"};try{if(s.exec("BEGIN"),s.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return s.exec("ROLLBACK"),{status:"unavailable"};let i=Rg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=KL(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as YL,realpath as zL,stat as QL}from"node:fs/promises";import{basename as xg,dirname as ZL,join as Cg,resolve as Og}from"node:path";function nx(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
10
- `)){let o=s.replace(/\r$/,""),i=/^\*\*\* (?:Add|Update|Delete) File: (.+)$/.exec(o);if(i){r(),n={path:i[1].trim(),bytes:0};continue}let a=/^\*\*\* Move to: (.+)$/.exec(o);if(a){n&&(n.path=a[1].trim());continue}if(o.startsWith("*** ")){r();continue}n&&o.startsWith("+")&&(n.bytes+=Buffer.byteLength(o.slice(1),"utf8")+1)}return r(),[...e].map(([s,o])=>({path:s,bytes:o}))}function rx(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function sx(t,e,n){let r=B(t);if(!r)return{entry:null,incomplete:t!=null};let s=[],o=!1;for(let[a,l]of Object.entries(r)){let c=B(l);if(!c){o=!0;continue}let d=B(c.usage),u=B(c.requests),f=B(c.tokenDetails),m=B(f?.input);s.push({model:a,requests_count:u?K(u.count):null,input_tokens:d?K(d.inputTokens):null,input_other_tokens:m?K(m.tokenCount):null,cache_read_tokens:d?K(d.cacheReadTokens):null,cache_write_tokens:d?K(d.cacheWriteTokens):null,output_tokens:d?K(d.outputTokens):null,reasoning_tokens:d?K(d.reasoningTokens):null})}s.sort((a,l)=>pe(a.model,l.model));let i=o||s.length>0;return e===null?{entry:null,incomplete:i}:{entry:{native_id:e,recorded_at:n,kind:"copilot_session_shutdown",semantics:"reported_scope_unknown",models:s},incomplete:o}}function ox(t,e,n,r){let s=new Map;for(let u of t){if(u.type!=="user.message")continue;let f=B(u.data),m=typeof f?.interactionId=="string"?f.interactionId:null;if(m===null)continue;let p=rx(f);s.has(m)?s.get(m)===null&&p!==null&&s.set(m,p):s.set(m,p)}let o=new Map,i=new Set,a=new Map,l=!1,c=1e3;for(let u of t){if(r.signal.throwIfAborted(),u.type==="session.shutdown"){let g=typeof u.id=="string"&&u.id?u.id:null,E=yt(u.timestamp),{entry:y,incomplete:T}=sx(B(u.data)?.modelMetrics,g,E);if(T&&(l=!0),y){let w=a.get(y.native_id);if(w&&JSON.stringify(w)!==JSON.stringify(y))l=!0;else if(a.set(y.native_id,y),a.size>c)return{snapshot:{status:"partial"},sessionUsage:null}}continue}if(u.type!=="assistant.message")continue;let f=B(u.data);if(!f)continue;let m=typeof f.messageId=="string"&&f.messageId?f.messageId:typeof u.id=="string"&&u.id?u.id:null;if(m===null)continue;let p=typeof f.interactionId=="string"?f.interactionId:null,_=o.get(m);if(!_){if(_={meta:{response_id:m,timestamp:yt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,promptRecorded:!1},o.set(m,_),o.size>r.maxRows)return{snapshot:{status:"partial"},sessionUsage:null};if(p!==null&&s.has(p)){if(!i.has(p)){i.add(p);let g=s.get(p);_.io.record({direction:"read",kind:"prompt",id:p,ref:null,bytes:g,basis:g===null?"unknown":"input_text"}),_.promptRecorded=!0}}else _.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"})}let h=K(f.outputTokens);if(h!==null&&(_.meta.tokens.output=(_.meta.tokens.output??0)+h),_.meta.model===null&&typeof f.model=="string"&&f.model&&(_.meta.model=f.model),Array.isArray(f.toolRequests))for(let g of f.toolRequests){let E=B(g);if(!E)continue;let y=typeof E.name=="string"?E.name.toLowerCase():"",T=typeof E.toolCallId=="string"&&E.toolCallId?E.toolCallId:null,w=E.arguments;if(y==="create"){let S=B(w),I=typeof S?.path=="string"?S.path:null,b=typeof S?.file_text=="string"?Buffer.byteLength(S.file_text,"utf8"):null;I!==null?_.obs.record(T??m,"written",I,b):Ie(_.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let S=nx(w);if(S.length>0)for(let I of S)_.obs.record(T??m,"written",I.path,I.bytes);else Ie(_.io,T)}else Ie(_.io,T);else if(tx.has(y)){let S=B(w),I=typeof S?.path=="string"?S.path:null;I!==null?_.obs.record(T??m,"read",I,null):Ie(_.io,T)}else ex.has(y)||Ie(_.io,T)}}let d=[];for(let{meta:u,obs:f,io:m}of o.values()){let p=f.files("read"),_=f.files("written"),h=m.entries();d.push({...u,files_read:p,files_written:_,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(_,h,"written"),model_provider:null,pricing_facts:null})}return l?{snapshot:{status:"partial"},sessionUsage:null}:{snapshot:{status:"complete",source:e,revision:n,checkpoint:n,responses:d},sessionUsage:a.size>0?[...a.values()]:null}}function ix(){return process.env.HOME||process.env.USERPROFILE||""}function Mg(t={}){return new nu(t)}var Jn,Dg,ex,tx,nu,$g=x(()=>{"use strict";wn();Jn="copilot",Dg="events.jsonl",ex=new Set(["report_intent"]),tx=new Set(["view"]);nu=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Og(e.copilotSessionStateDir??Cg(ix(),".copilot","session-state"))}async discover(e,n,r=null){oe(e);let s;try{s=await YL(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Cg(this.sessionStateDir,i,Dg);if(!(await QL(a).catch(()=>null))?.isFile())continue;let c=await zL(a).catch(()=>Og(a)),d={provider:Jn,sessionid:i,source_id:c};r!==null&&pe(`${c}\0${i}`,r)<=0||o.push(d)}return o.sort((i,a)=>pe(`${i.source_id}\0${i.sessionid}`,`${a.source_id}\0${a.sessionid}`)),{sources:o.slice(0,n),truncated:!1}}matches(e,n){return xg(n)===Dg&&xg(ZL(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Jn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){return(await this.readWithUsage(e,n,r)).snapshot}async readWithUsage(e,n,r){if(oe(r),e.provider!==Jn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await Me(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ct(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ya(o.data,r);return i?ox(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Pg,readFile as ax,realpath as ru,stat as Ug}from"node:fs/promises";import{basename as Uo,dirname as vs,isAbsolute as ou,join as ws,relative as Wg,resolve as Po,sep as Hg}from"node:path";function px(t){return mx.has(t)||Bn(t)}function hx(){return process.env.HOME||process.env.USERPROFILE||""}function _x(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=B(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function Fg(t){let e=B(t);if(!e)return null;let n=K(e.inputOther),r=K(e.inputCacheRead),s=K(e.inputCacheCreation),o=K(e.output);return n===null||r===null||s===null||o===null?null:{input_uncached:n+s,input_cached:r,input_cache_write:s,output:o}}function gx(t){if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function Ex(t,e,n,r){let s=t.find(E=>E.type==="metadata"),o=s&&typeof s.protocol_version=="string"?s.protocol_version:null;if(o!==null&&!lx.has(o))return{status:"unsupported"};let i=Tx(e.source_id),a=new Map,l=new Map,c=[],d=new Set,u=new Set,f=null,m=!1,p=E=>`${i}/${E}`,_=(E,y)=>{let T=p(E),w=a.get(T);return w||(w={meta:{response_id:T,timestamp:yt(typeof y=="number"?y:null),model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,turnStepKey:null,tokensSource:"none"},a.set(T,w)),w},h=(E,y)=>{if(E.turnStepKey!==null)return;let T=y.turnId===void 0?null:String(y.turnId),w=y.step===void 0?null:String(y.step);T!==null&&w!==null&&(E.turnStepKey=`${T}.${w}`)};for(let E of t){if(r.signal.throwIfAborted(),E.type==="turn.prompt"){let T=B(E.origin),w=typeof T?.kind=="string"?T.kind:null,S=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(w!==null&&yx.has(w))continue;if(S!==null){if(d.has(S))continue;d.add(S)}w==="user"?c.push({bytes:gx(E.input),id:S}):c.push({bytes:null,id:S});continue}if(E.type==="usage.record"){if(u.size>1){m=!0;continue}if(u.size===0){f===null&&(m=!0);continue}let[T]=u,w=a.get(p(T));if(!w){m=!0;continue}if(w.tokensSource==="record"){m=!0;continue}let S=Fg(E.usage);S&&(w.meta.tokens=S,w.tokensSource="record");continue}if(E.type==="llm.request"){let T=typeof E.turnStep=="string"?E.turnStep:null,w=(typeof E.modelAlias=="string"&&E.modelAlias?E.modelAlias:null)??(typeof E.model=="string"&&E.model?E.model:null);T!==null&&w!==null&&(l.has(T)?l.get(T)!==w&&l.set(T,null):l.set(T,w));continue}if(E.type!=="context.append_loop_event")continue;let y=B(E.event);if(y){if(y.type==="step.begin"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};if(u.add(T),h(w,y),c.length>0){for(let S of c)w.io.record({direction:"read",kind:"prompt",id:S.id,ref:null,bytes:S.bytes,basis:S.bytes===null?"unknown":"input_text"});c.length=0}continue}if(y.type==="step.end"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};u.delete(T),f=T,h(w,y);let S=Fg(y.usage);S&&(w.meta.tokens=S),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=yt(typeof E.time=="number"?E.time:null));continue}if(y.type==="tool.call"){let T=typeof y.stepUuid=="string"&&y.stepUuid?y.stepUuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};let S=typeof y.name=="string"?y.name.toLowerCase():"",I=typeof y.toolCallId=="string"&&y.toolCallId?y.toolCallId:null,b=B(y.args),L=typeof b?.path=="string"&&b.path?b.path:typeof b?.file_path=="string"&&b.file_path?b.file_path:null;ux.has(S)?L!==null?w.obs.record(I??"","read",L,null):Ie(w.io,I):fx.has(S)?L!==null?w.obs.record(I??"","written",L,gs(b)):Ie(w.io,I):px(S)||Ie(w.io,I);continue}}}let g=[];for(let{meta:E,obs:y,io:T,turnStepKey:w}of a.values()){E.model===null&&w!==null&&(E.model=l.get(w)??null);let S=y.files("read"),I=y.files("written"),b=T.entries();g.push({...E,files_read:S,files_written:I,external_io:b,read_bytes:Ze(S,b,"read"),write_bytes:Ze(I,b,"written"),model_provider:null,pricing_facts:Jt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function su(t){return Uo(t)===iu&&Uo(vs(vs(t)))===Bg}function jg(t){return Uo(vs(vs(vs(t))))}function Tx(t){return Uo(vs(t))}function wx(t,e){let n=Wg(e,t);return n===""||!n.startsWith(`..${Hg}`)&&n!==".."&&!ou(n)}function vx(t){if(t instanceof Error&&t.name==="AbortError")throw t}function Xg(t={}){return new Fo(t)}var Kn,iu,Bg,lx,cx,dx,ux,fx,mx,yx,Fo,au=x(()=>{"use strict";wn();Kn="kimi",iu="wire.jsonl",Bg="agents",lx=new Set(["1.4","1.5"]),cx=5e5,dx=8*1024*1024,ux=new Set(["read"]),fx=new Set(["write","edit"]),mx=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);yx=new Set(["system_trigger","cron_job","task"]);Fo=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Po(e.kimiHome??process.env.KIMI_CODE_HOME??ws(hx(),".kimi-code")),this.sessionsDir=ws(this.home,"sessions"),this.indexPath=ws(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):cx}async discover(e,n,r=null){oe(e);let s=new Set,o=!1,i=await ru(this.sessionsDir).catch(()=>Po(this.sessionsDir)),a=f=>{su(f)&&wx(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Pg(f,{withFileTypes:!0}).catch(()=>[]);p.sort((_,h)=>pe(_.name,h.name));for(let _ of p){if(e.signal.throwIfAborted(),l+=1,l>this.maxDiscoveryTraversalVisits){o=!0;return}let h=ws(f,_.name);if(_.isDirectory()&&!_.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else _.isFile()&&_.name===iu&&su(h)&&a(await ru(h).catch(()=>Po(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){vx(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:Kn,sessionid:jg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Ug(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>dx)return;let s=await ax(this.indexPath,{signal:n.signal});for(let o of s.toString("utf8").split(`
11
- `)){if(n.signal.throwIfAborted(),!o.trim())continue;let i;try{i=B(JSON.parse(o))}catch{continue}let a=typeof i?.sessionId=="string"?i.sessionId:null,l=typeof i?.sessionDir=="string"?i.sessionDir:null;if(!a||!l||!ou(l)||Uo(l)!==a)continue;let c=Wg(this.sessionsDir,Po(l));if(c.startsWith(`..${Hg}`)||c===".."||ou(c))continue;let d=ws(l,Bg),u=await Pg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=ws(d,f.name,iu);(await Ug(m).catch(()=>null))?.isFile()&&e(await ru(m).catch(()=>Po(m)))}}}matches(e,n){return su(n)&&jg(n)===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Kn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Kn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=_x(o.data,r);return i?Ex(i,e,n,r):{status:"partial"}}}});import{createHash as mu}from"node:crypto";import{createRequire as Sx}from"node:module";import{lstat as Ix,readFile as bx,readdir as kx,realpath as uu,stat as qg}from"node:fs/promises";import{basename as La,dirname as Ax,isAbsolute as Gg,join as Mr,relative as Nx,resolve as vn,sep as Rx}from"node:path";function pu(t){return typeof t=="string"&&xx.has(t.toLowerCase())}function Ho(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 Qg(t){if(typeof t!="string"||t.length===0)return null;try{let e=new URL(t);return e.protocol!=="http:"&&e.protocol!=="https:"?null:`${e.origin}${e.pathname}`}catch{return null}}function bs(t,e,n){if(t===null)return null;let r=n==="written"?"write":"read",s=0;for(let o of t){if(o.bytes===null)return null;s+=o.bytes}for(let o of e)if(o.direction===r){if(o.bytes===null)return null;s+=o.bytes}return s}function Is(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function hu(t,e,n){let r={},s=Is(t.cacheWrite5m),o=Is(t.cacheWrite1h),i=Is(t.reasoning),a=Is(t.webSearch),l=Is(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function xa(){return process.env.HOME||process.env.USERPROFILE||""}function Dx(){if(process.env.OPENCODE_DB)return[vn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Mr(xa(),".local","share");return[Mr(t,"lmplayer","opencode-local.db"),Mr(t,"lmplayer","opencode-dev.db")]}function Mx(){return Ox("node:sqlite").DatabaseSync}function Y(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function dt(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function gu(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function Wo(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 Ca(t){return`${t.source_id}\0${t.sessionid}`}function Qn(t,e){return t<e?-1:t>e?1:0}function lu(t,e){return Qn(Ca(t),Ca(e))}function $x(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function Vg(t){let e=Y(t);if(!e||typeof e.source_id!="string"||typeof e.sessionid!="string"||e.source_id.includes("\0")||e.sessionid.includes("\0"))throw new Error("invalid passive session discovery cursor");return{source_id:e.source_id,sessionid:e.sessionid}}function Px(t){if(t===void 0)return null;let e;try{e=Y(JSON.parse(Buffer.from(t,"base64url").toString("utf8")))}catch{throw new Error("invalid passive session discovery cursor")}if(!e)throw new Error("invalid passive session discovery cursor");if(e.version===1){let o=e.provider;if(!Number.isSafeInteger(o)||o<0||o>=cu.length)throw new Error("invalid passive session discovery cursor");let i=o,a=Vg({source_id:e.source_id,sessionid:e.sessionid}),l=new Map([[cu[i],a]]),c=new Set(cu.slice(0,i));return{pos:l,done:c,rr:0}}if(e.version!==2)throw new Error("invalid passive session discovery cursor");let n=Y(e.pos);if(!n||!Array.isArray(e.done)||!Number.isSafeInteger(e.rr)||e.rr<0)throw new Error("invalid passive session discovery cursor");let r=new Map;for(let[o,i]of Object.entries(n))r.set(o,Vg(i));let s=new Set;for(let o of e.done){if(typeof o!="string")throw new Error("invalid passive session discovery cursor");s.add(o)}return{pos:r,done:s,rr:e.rr}}function Zg(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Ux.includes(e)?"read":Fx.includes(e)?"written":null}function Wx(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Oa(t,e=jx){let n=Y(t);if(!n)return null;for(let r of e){let s=n[r];if(typeof s=="string"&&s.length>0)return s;if(Array.isArray(s)){for(let o of s)if(typeof o=="string"&&o.length>0)return o}}return null}function ey(t){let e=Y(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_source=="string")return Buffer.byteLength(e.new_source,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=Y(r),o=s?.new_string??s?.newString;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function Da(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
9
+ `)}return{revision:`${xo}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function JL(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=B(JSON.parse(s.data))}catch{continue}let i=typeof o?.type=="string"?o.type:"";o?.synthetic===!0||o?.ignored===!0||(i==="text"&&typeof o.text=="string"?(e+=Buffer.byteLength(o.text,"utf8"),n=!0):i&&!HL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function KL(t,e,n,r){let s=new Map;for(let c of n.parts){let d=s.get(c.message_id)??[];d.push(c),s.set(c.message_id,d)}let o=new Map;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=JL(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="assistant")continue;let u=typeof d.parentID=="string"?d.parentID:null;u!==null&&o.has(u)&&!a.has(u)&&(a.add(u),i.set(c.id,{id:u,bytes:o.get(u)}))}let l=[];for(let c of n.messages){r.signal.throwIfAborted();let d;try{d=B(JSON.parse(c.data))}catch{return{status:"partial"}}if(r.requireBillingCounters&&d&&Object.hasOwn(d,"tokens")&&d.role!=="assistant")return{status:"partial"};if(!d||d.role!=="assistant")continue;let u=new _t,f=new gt,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let b of s.get(c.id)??[]){let I;try{I=B(JSON.parse(b.data))}catch{return{status:"partial"}}if(I?.type!=="tool")continue;let L=typeof I.tool=="string"?I.tool.toLowerCase():"",O=BL(I.tool),k=B(I.state),v=B(k?.input),A=typeof I.callID=="string"&&I.callID?I.callID:typeof k?.callID=="string"&&k.callID?k.callID:b.id;if(O==="written")u.record(A,"written",Ng(v),XL(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of qL(N))u.record(A,"written",R.path,R.bytes);else be(f,A)}else if(O==="read"){let N=Ng(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=B(B(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:GL(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else Bn(I.tool)||be(f,A)}let _=B(d.time),h=B(d.model)?.modelID??d.modelID,g=VL(d.tokens,r.requireBillingCounters),E=B(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=Jt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:yt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Ze(y,w,"read"),write_bytes:Ze(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}function Lg(t={}){return new $o(t)}var Dr,$L,FL,jL,WL,HL,$o,tu=x(()=>{"use strict";wn();Dr="opencode",$L=ML(import.meta.url);FL=["read","read_file","view","view_file","view_image"],jL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],WL=["filePath","path","file","file_path","filepath","notebook_path","paths"],HL=new Set(["session-job-notification"]);$o=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??UL()).map(n=>eu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(eu(e)))return null;try{let n=new(PL())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discover(e,n,r=null){oe(e);let s=new Map;for(let i of this.dbPaths){e.signal.throwIfAborted();let a=await Me(i,[eu(i,"..")]);if(!a||r&&pe(a,r.source_id)<0)continue;let l=this.openDb(a);if(l)try{let c=r?.source_id===a?r.sessionid:"",d=l.prepare("SELECT id FROM session WHERE id > ? ORDER BY id LIMIT ?").all(c,n);for(let u of d)typeof u.id=="string"&&u.id&&!s.has(u.id)&&s.set(u.id,{provider:Dr,sessionid:u.id,source_id:a})}catch{}finally{l.close()}}return{sources:[...s.values()].sort((i,a)=>pe(`${i.source_id}\0${i.sessionid}`,`${a.source_id}\0${a.sessionid}`)).slice(0,n),truncated:!1}}inspect(e,n){if(oe(n),e.provider!==Dr)return{status:"unsupported"};let r=this.openDb(e.source_id);if(!r)return{status:"unavailable"};try{if(r.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return{status:"unavailable"};let o=Rg(r,e.sessionid,n);return o?{status:"ready",revision:o.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}read(e,n,r){if(oe(r),e.provider!==Dr)return{status:"unsupported"};let s=this.openDb(e.source_id);if(!s)return{status:"unavailable"};try{if(s.exec("BEGIN"),s.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return s.exec("ROLLBACK"),{status:"unavailable"};let i=Rg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=KL(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as YL,realpath as zL,stat as QL}from"node:fs/promises";import{basename as xg,dirname as ZL,join as Cg,resolve as Og}from"node:path";function nx(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
10
+ `)){let o=s.replace(/\r$/,""),i=/^\*\*\* (?:Add|Update|Delete) File: (.+)$/.exec(o);if(i){r(),n={path:i[1].trim(),bytes:0};continue}let a=/^\*\*\* Move to: (.+)$/.exec(o);if(a){n&&(n.path=a[1].trim());continue}if(o.startsWith("*** ")){r();continue}n&&o.startsWith("+")&&(n.bytes+=Buffer.byteLength(o.slice(1),"utf8")+1)}return r(),[...e].map(([s,o])=>({path:s,bytes:o}))}function rx(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function sx(t,e,n){let r=B(t);if(!r)return{entry:null,incomplete:t!=null};let s=[],o=!1;for(let[a,l]of Object.entries(r)){let c=B(l);if(!c){o=!0;continue}let d=B(c.usage),u=B(c.requests),f=B(c.tokenDetails),m=B(f?.input);s.push({model:a,requests_count:u?K(u.count):null,input_tokens:d?K(d.inputTokens):null,input_other_tokens:m?K(m.tokenCount):null,cache_read_tokens:d?K(d.cacheReadTokens):null,cache_write_tokens:d?K(d.cacheWriteTokens):null,output_tokens:d?K(d.outputTokens):null,reasoning_tokens:d?K(d.reasoningTokens):null})}s.sort((a,l)=>pe(a.model,l.model));let i=o||s.length>0;return e===null?{entry:null,incomplete:i}:{entry:{native_id:e,recorded_at:n,kind:"copilot_session_shutdown",semantics:"reported_scope_unknown",models:s},incomplete:o}}function ox(t,e,n,r){let s=new Map;for(let u of t){if(u.type!=="user.message")continue;let f=B(u.data),m=typeof f?.interactionId=="string"?f.interactionId:null;if(m===null)continue;let p=rx(f);s.has(m)?s.get(m)===null&&p!==null&&s.set(m,p):s.set(m,p)}let o=new Map,i=new Set,a=new Map,l=!1,c=1e3;for(let u of t){if(r.signal.throwIfAborted(),u.type==="session.shutdown"){let g=typeof u.id=="string"&&u.id?u.id:null,E=yt(u.timestamp),{entry:y,incomplete:T}=sx(B(u.data)?.modelMetrics,g,E);if(T&&(l=!0),y){let w=a.get(y.native_id);if(w&&JSON.stringify(w)!==JSON.stringify(y))l=!0;else if(a.set(y.native_id,y),a.size>c)return{snapshot:{status:"partial"},sessionUsage:null}}continue}if(u.type!=="assistant.message")continue;let f=B(u.data);if(!f)continue;let m=typeof f.messageId=="string"&&f.messageId?f.messageId:typeof u.id=="string"&&u.id?u.id:null;if(m===null)continue;let p=typeof f.interactionId=="string"?f.interactionId:null,_=o.get(m);if(!_){if(_={meta:{response_id:m,timestamp:yt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,promptRecorded:!1},o.set(m,_),o.size>r.maxRows)return{snapshot:{status:"partial"},sessionUsage:null};if(p!==null&&s.has(p)){if(!i.has(p)){i.add(p);let g=s.get(p);_.io.record({direction:"read",kind:"prompt",id:p,ref:null,bytes:g,basis:g===null?"unknown":"input_text"}),_.promptRecorded=!0}}else _.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"})}let h=K(f.outputTokens);if(h!==null&&(_.meta.tokens.output=(_.meta.tokens.output??0)+h),_.meta.model===null&&typeof f.model=="string"&&f.model&&(_.meta.model=f.model),Array.isArray(f.toolRequests))for(let g of f.toolRequests){let E=B(g);if(!E)continue;let y=typeof E.name=="string"?E.name.toLowerCase():"",T=typeof E.toolCallId=="string"&&E.toolCallId?E.toolCallId:null,w=E.arguments;if(y==="create"){let S=B(w),b=typeof S?.path=="string"?S.path:null,I=typeof S?.file_text=="string"?Buffer.byteLength(S.file_text,"utf8"):null;b!==null?_.obs.record(T??m,"written",b,I):be(_.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let S=nx(w);if(S.length>0)for(let b of S)_.obs.record(T??m,"written",b.path,b.bytes);else be(_.io,T)}else be(_.io,T);else if(tx.has(y)){let S=B(w),b=typeof S?.path=="string"?S.path:null;b!==null?_.obs.record(T??m,"read",b,null):be(_.io,T)}else ex.has(y)||be(_.io,T)}}let d=[];for(let{meta:u,obs:f,io:m}of o.values()){let p=f.files("read"),_=f.files("written"),h=m.entries();d.push({...u,files_read:p,files_written:_,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(_,h,"written"),model_provider:null,pricing_facts:null})}return l?{snapshot:{status:"partial"},sessionUsage:null}:{snapshot:{status:"complete",source:e,revision:n,checkpoint:n,responses:d},sessionUsage:a.size>0?[...a.values()]:null}}function ix(){return process.env.HOME||process.env.USERPROFILE||""}function Mg(t={}){return new nu(t)}var Jn,Dg,ex,tx,nu,$g=x(()=>{"use strict";wn();Jn="copilot",Dg="events.jsonl",ex=new Set(["report_intent"]),tx=new Set(["view"]);nu=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Og(e.copilotSessionStateDir??Cg(ix(),".copilot","session-state"))}async discover(e,n,r=null){oe(e);let s;try{s=await YL(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Cg(this.sessionStateDir,i,Dg);if(!(await QL(a).catch(()=>null))?.isFile())continue;let c=await zL(a).catch(()=>Og(a)),d={provider:Jn,sessionid:i,source_id:c};r!==null&&pe(`${c}\0${i}`,r)<=0||o.push(d)}return o.sort((i,a)=>pe(`${i.source_id}\0${i.sessionid}`,`${a.source_id}\0${a.sessionid}`)),{sources:o.slice(0,n),truncated:!1}}matches(e,n){return xg(n)===Dg&&xg(ZL(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Jn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){return(await this.readWithUsage(e,n,r)).snapshot}async readWithUsage(e,n,r){if(oe(r),e.provider!==Jn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await Me(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ct(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ya(o.data,r);return i?ox(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Pg,readFile as ax,realpath as ru,stat as Ug}from"node:fs/promises";import{basename as Uo,dirname as vs,isAbsolute as ou,join as ws,relative as Wg,resolve as Po,sep as Hg}from"node:path";function px(t){return mx.has(t)||Bn(t)}function hx(){return process.env.HOME||process.env.USERPROFILE||""}function _x(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=B(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function Fg(t){let e=B(t);if(!e)return null;let n=K(e.inputOther),r=K(e.inputCacheRead),s=K(e.inputCacheCreation),o=K(e.output);return n===null||r===null||s===null||o===null?null:{input_uncached:n+s,input_cached:r,input_cache_write:s,output:o}}function gx(t){if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function Ex(t,e,n,r){let s=t.find(E=>E.type==="metadata"),o=s&&typeof s.protocol_version=="string"?s.protocol_version:null;if(o!==null&&!lx.has(o))return{status:"unsupported"};let i=Tx(e.source_id),a=new Map,l=new Map,c=[],d=new Set,u=new Set,f=null,m=!1,p=E=>`${i}/${E}`,_=(E,y)=>{let T=p(E),w=a.get(T);return w||(w={meta:{response_id:T,timestamp:yt(typeof y=="number"?y:null),model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,turnStepKey:null,tokensSource:"none"},a.set(T,w)),w},h=(E,y)=>{if(E.turnStepKey!==null)return;let T=y.turnId===void 0?null:String(y.turnId),w=y.step===void 0?null:String(y.step);T!==null&&w!==null&&(E.turnStepKey=`${T}.${w}`)};for(let E of t){if(r.signal.throwIfAborted(),E.type==="turn.prompt"){let T=B(E.origin),w=typeof T?.kind=="string"?T.kind:null,S=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(w!==null&&yx.has(w))continue;if(S!==null){if(d.has(S))continue;d.add(S)}w==="user"?c.push({bytes:gx(E.input),id:S}):c.push({bytes:null,id:S});continue}if(E.type==="usage.record"){if(u.size>1){m=!0;continue}if(u.size===0){f===null&&(m=!0);continue}let[T]=u,w=a.get(p(T));if(!w){m=!0;continue}if(w.tokensSource==="record"){m=!0;continue}let S=Fg(E.usage);S&&(w.meta.tokens=S,w.tokensSource="record");continue}if(E.type==="llm.request"){let T=typeof E.turnStep=="string"?E.turnStep:null,w=(typeof E.modelAlias=="string"&&E.modelAlias?E.modelAlias:null)??(typeof E.model=="string"&&E.model?E.model:null);T!==null&&w!==null&&(l.has(T)?l.get(T)!==w&&l.set(T,null):l.set(T,w));continue}if(E.type!=="context.append_loop_event")continue;let y=B(E.event);if(y){if(y.type==="step.begin"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};if(u.add(T),h(w,y),c.length>0){for(let S of c)w.io.record({direction:"read",kind:"prompt",id:S.id,ref:null,bytes:S.bytes,basis:S.bytes===null?"unknown":"input_text"});c.length=0}continue}if(y.type==="step.end"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};u.delete(T),f=T,h(w,y);let S=Fg(y.usage);S&&(w.meta.tokens=S),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=yt(typeof E.time=="number"?E.time:null));continue}if(y.type==="tool.call"){let T=typeof y.stepUuid=="string"&&y.stepUuid?y.stepUuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};let S=typeof y.name=="string"?y.name.toLowerCase():"",b=typeof y.toolCallId=="string"&&y.toolCallId?y.toolCallId:null,I=B(y.args),L=typeof I?.path=="string"&&I.path?I.path:typeof I?.file_path=="string"&&I.file_path?I.file_path:null;ux.has(S)?L!==null?w.obs.record(b??"","read",L,null):be(w.io,b):fx.has(S)?L!==null?w.obs.record(b??"","written",L,gs(I)):be(w.io,b):px(S)||be(w.io,b);continue}}}let g=[];for(let{meta:E,obs:y,io:T,turnStepKey:w}of a.values()){E.model===null&&w!==null&&(E.model=l.get(w)??null);let S=y.files("read"),b=y.files("written"),I=T.entries();g.push({...E,files_read:S,files_written:b,external_io:I,read_bytes:Ze(S,I,"read"),write_bytes:Ze(b,I,"written"),model_provider:null,pricing_facts:Jt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function su(t){return Uo(t)===iu&&Uo(vs(vs(t)))===Bg}function jg(t){return Uo(vs(vs(vs(t))))}function Tx(t){return Uo(vs(t))}function wx(t,e){let n=Wg(e,t);return n===""||!n.startsWith(`..${Hg}`)&&n!==".."&&!ou(n)}function vx(t){if(t instanceof Error&&t.name==="AbortError")throw t}function Xg(t={}){return new Fo(t)}var Kn,iu,Bg,lx,cx,dx,ux,fx,mx,yx,Fo,au=x(()=>{"use strict";wn();Kn="kimi",iu="wire.jsonl",Bg="agents",lx=new Set(["1.4","1.5"]),cx=5e5,dx=8*1024*1024,ux=new Set(["read"]),fx=new Set(["write","edit"]),mx=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);yx=new Set(["system_trigger","cron_job","task"]);Fo=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Po(e.kimiHome??process.env.KIMI_CODE_HOME??ws(hx(),".kimi-code")),this.sessionsDir=ws(this.home,"sessions"),this.indexPath=ws(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):cx}async discover(e,n,r=null){oe(e);let s=new Set,o=!1,i=await ru(this.sessionsDir).catch(()=>Po(this.sessionsDir)),a=f=>{su(f)&&wx(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Pg(f,{withFileTypes:!0}).catch(()=>[]);p.sort((_,h)=>pe(_.name,h.name));for(let _ of p){if(e.signal.throwIfAborted(),l+=1,l>this.maxDiscoveryTraversalVisits){o=!0;return}let h=ws(f,_.name);if(_.isDirectory()&&!_.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else _.isFile()&&_.name===iu&&su(h)&&a(await ru(h).catch(()=>Po(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){vx(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:Kn,sessionid:jg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Ug(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>dx)return;let s=await ax(this.indexPath,{signal:n.signal});for(let o of s.toString("utf8").split(`
11
+ `)){if(n.signal.throwIfAborted(),!o.trim())continue;let i;try{i=B(JSON.parse(o))}catch{continue}let a=typeof i?.sessionId=="string"?i.sessionId:null,l=typeof i?.sessionDir=="string"?i.sessionDir:null;if(!a||!l||!ou(l)||Uo(l)!==a)continue;let c=Wg(this.sessionsDir,Po(l));if(c.startsWith(`..${Hg}`)||c===".."||ou(c))continue;let d=ws(l,Bg),u=await Pg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=ws(d,f.name,iu);(await Ug(m).catch(()=>null))?.isFile()&&e(await ru(m).catch(()=>Po(m)))}}}matches(e,n){return su(n)&&jg(n)===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Kn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Kn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=_x(o.data,r);return i?Ex(i,e,n,r):{status:"partial"}}}});import{createHash as mu}from"node:crypto";import{createRequire as Sx}from"node:module";import{lstat as bx,readFile as Ix,readdir as kx,realpath as uu,stat as qg}from"node:fs/promises";import{basename as La,dirname as Ax,isAbsolute as Gg,join as Mr,relative as Nx,resolve as vn,sep as Rx}from"node:path";function pu(t){return typeof t=="string"&&xx.has(t.toLowerCase())}function Ho(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 Qg(t){if(typeof t!="string"||t.length===0)return null;try{let e=new URL(t);return e.protocol!=="http:"&&e.protocol!=="https:"?null:`${e.origin}${e.pathname}`}catch{return null}}function Is(t,e,n){if(t===null)return null;let r=n==="written"?"write":"read",s=0;for(let o of t){if(o.bytes===null)return null;s+=o.bytes}for(let o of e)if(o.direction===r){if(o.bytes===null)return null;s+=o.bytes}return s}function bs(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function hu(t,e,n){let r={},s=bs(t.cacheWrite5m),o=bs(t.cacheWrite1h),i=bs(t.reasoning),a=bs(t.webSearch),l=bs(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function xa(){return process.env.HOME||process.env.USERPROFILE||""}function Dx(){if(process.env.OPENCODE_DB)return[vn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Mr(xa(),".local","share");return[Mr(t,"lmplayer","opencode-local.db"),Mr(t,"lmplayer","opencode-dev.db")]}function Mx(){return Ox("node:sqlite").DatabaseSync}function Y(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function dt(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function gu(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function Wo(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 Ca(t){return`${t.source_id}\0${t.sessionid}`}function Qn(t,e){return t<e?-1:t>e?1:0}function lu(t,e){return Qn(Ca(t),Ca(e))}function $x(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function Vg(t){let e=Y(t);if(!e||typeof e.source_id!="string"||typeof e.sessionid!="string"||e.source_id.includes("\0")||e.sessionid.includes("\0"))throw new Error("invalid passive session discovery cursor");return{source_id:e.source_id,sessionid:e.sessionid}}function Px(t){if(t===void 0)return null;let e;try{e=Y(JSON.parse(Buffer.from(t,"base64url").toString("utf8")))}catch{throw new Error("invalid passive session discovery cursor")}if(!e)throw new Error("invalid passive session discovery cursor");if(e.version===1){let o=e.provider;if(!Number.isSafeInteger(o)||o<0||o>=cu.length)throw new Error("invalid passive session discovery cursor");let i=o,a=Vg({source_id:e.source_id,sessionid:e.sessionid}),l=new Map([[cu[i],a]]),c=new Set(cu.slice(0,i));return{pos:l,done:c,rr:0}}if(e.version!==2)throw new Error("invalid passive session discovery cursor");let n=Y(e.pos);if(!n||!Array.isArray(e.done)||!Number.isSafeInteger(e.rr)||e.rr<0)throw new Error("invalid passive session discovery cursor");let r=new Map;for(let[o,i]of Object.entries(n))r.set(o,Vg(i));let s=new Set;for(let o of e.done){if(typeof o!="string")throw new Error("invalid passive session discovery cursor");s.add(o)}return{pos:r,done:s,rr:e.rr}}function Zg(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Ux.includes(e)?"read":Fx.includes(e)?"written":null}function Wx(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Oa(t,e=jx){let n=Y(t);if(!n)return null;for(let r of e){let s=n[r];if(typeof s=="string"&&s.length>0)return s;if(Array.isArray(s)){for(let o of s)if(typeof o=="string"&&o.length>0)return o}}return null}function ey(t){let e=Y(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_source=="string")return Buffer.byteLength(e.new_source,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=Y(r),o=s?.new_string??s?.newString;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function Da(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
12
12
  `)){let o=s.replace(/\r$/,""),i=/^\*\*\* (?:Add|Update|Delete) File: (.+)$/.exec(o);if(i){r(),n={path:i[1].trim(),bytes:0};continue}let a=/^\*\*\* Move to: (.+)$/.exec(o);if(a){n&&(n.path=a[1].trim());continue}if(o.startsWith("*** ")){r();continue}n&&o.startsWith("+")&&(n.bytes+=Buffer.byteLength(o.slice(1),"utf8")+1)}return r(),[...e].map(([s,o])=>({path:s,bytes:o}))}function Bx(t){let e=0,n=t.length,r=()=>{for(;e<n&&/\s/.test(t[e]);)e++};r();let s=0,o=!1;for(let[c,d]of Hx)if(t.startsWith(c,e)){e+=c.length,s=d,o=!0;break}if(!o||t[e]!=='"')return null;let i=e;e++;let a=!1;for(;e<n;){let c=t[e];if(c==="\\"){e+=2;continue}if(c==='"'){e++,a=!0;break}e++}if(!a)return null;let l;try{l=JSON.parse(t.slice(i,e))}catch{return null}if(typeof l!="string")return null;for(let c=0;c<s;c++){if(r(),t[e]!==")")return null;e++}return r(),t[e]===";"&&e++,r(),e<n?null:l}function Jg(t){if(t.length===0||t.endsWith(`
13
13
  `))return null;let e=[];for(let n of t.split(`
14
14
  `)){let r=/^\s*\d+\t(.*)$/s.exec(n);if(r===null)return null;e.push(r[1])}return e.join(`
15
- `)}async function Kg(t,e){Wo(e);let n=await qg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await bx(t,{signal:e.signal});e.signal.throwIfAborted();let s=await qg(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${_u}:sha256:${mu("sha256").update(r).digest("hex")}`,data:r}}function Xx(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=Y(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function qx(t){return La(Ax(t))==="subagents"}function Gx(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:dt(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:dt(e.cache_creation_input_tokens);return s===null||o===null?null:{input_uncached:n+o,input_cached:s,input_cache_write:o,output:r}}function Vx(t,e){let n=new Map;for(let r of t){if(e.signal.throwIfAborted(),r.type!=="user")continue;let s=Y(r.message),o=Array.isArray(s?.content)?s.content:null;if(!o)continue;let i=o.map(Y).filter(d=>d?.type==="tool_result"),a=i.length===1,l=Y(r.toolUseResult),c=l?.type==="text"?Y(l.file):null;for(let d of i){if(typeof d.tool_use_id!="string"||d.tool_use_id.length===0)continue;let u,f=null;if(d.is_error===!0)u=null;else if(a&&c&&typeof c.content=="string")u=Buffer.byteLength(c.content,"utf8"),f=typeof c.filePath=="string"?c.filePath:null;else if(typeof d.content=="string"){let m=Jg(d.content);u=m!==null?Buffer.byteLength(m,"utf8"):null}else if(Array.isArray(d.content)){let m=d.content.map(Y).filter(p=>p?.type==="text"&&typeof p.text=="string").map(p=>p.text);if(m.length===1){let p=Jg(m[0]);u=p!==null?Buffer.byteLength(p,"utf8"):null}else u=null}else u=null;n.set(d.tool_use_id,{bytes:u,cleanPath:f})}}return n}function Jx(t){let e=t?.content;if(typeof e=="string")return Buffer.byteLength(e,"utf8");if(Array.isArray(e)){let n=0,r=!1;for(let s of e){let o=Y(s);o?.type==="text"&&typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}if(r)return n}return null}function Kx(t){if(t.type!=="user"||t.toolUseResult!==void 0||t.isMeta===!0||t.isCompactSummary===!0||t.isVisibleInTranscriptOnly===!0||t.promptSource==="system"||t.scheduledTaskId!==void 0||t.scheduledFireId!==void 0)return!1;let e=Y(t.message)?.content;return!(Array.isArray(e)&&e.some(n=>Y(n)?.type==="tool_result"))}function Yx(t){let e=new Map,n=new Set,r=new Map;for(let i of t){let a=typeof i.uuid=="string"&&i.uuid?i.uuid:null;if(a!==null&&(e.set(a,typeof i.parentUuid=="string"&&i.parentUuid?i.parentUuid:null),Kx(i))){n.add(a);let l=Jx(Y(i.message));l!==null&&r.set(a,l)}}let s=new Map;return{promptBytes:r,parent:e,resolve:i=>{let a=[],l=new Set,c=i,d;for(;;){let u=s.get(c);if(u){d=u;break}if(n.has(c)){d={kind:"found",uuid:c};break}if(!e.has(c)){d={kind:"broken"};break}if(l.has(c)){d={kind:"broken"};break}l.add(c),a.push(c);let f=e.get(c)??null;if(f===null){d={kind:"clean"};break}c=f}for(let u of a)s.set(u,d);return d}}}function zx(t,e){let n=Y(e.cache_creation),r=Y(e.output_tokens_details),s=Y(e.server_tool_use),o=(i,a)=>{let l=Is(a);l!==null&&(t[i]=l)};o("cacheWrite5m",n?.ephemeral_5m_input_tokens),o("cacheWrite1h",n?.ephemeral_1h_input_tokens),o("reasoning",r?.thinking_tokens),o("webSearch",s?.web_search_requests),o("webFetch",s?.web_fetch_requests)}function Qx(t,e,n,r,s=!1){let o=Vx(t,r),{promptBytes:i,parent:a,resolve:l}=Yx(t),c=new Set,d=(p,_)=>{let h=i.get(_)??null;p.record({direction:"read",kind:"prompt",id:_,ref:null,bytes:h,basis:h===null?"unknown":"input_text"})},u=p=>{p.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"})},f=new Map;for(let p of t){if(r.signal.throwIfAborted(),p.type!=="assistant"||p.isSidechain===!0&&!s||p.isMeta===!0)continue;let _=Y(p.message);if(!_||typeof _.id!="string"||_.id.length===0)continue;let h=f.get(_.id);if(!h){if(h={meta:{response_id:_.id,timestamp:gu(p.timestamp),model:null,tokens:{...jo},files_read:[],files_written:[]},obs:new Yn,io:new zn,pricingRaw:{}},f.set(_.id,h),f.size>r.maxRows)return{status:"partial"};let E=typeof p.uuid=="string"&&p.uuid?p.uuid:null;if(E===null)u(h.io);else{let y=l(E);if(y.kind==="broken")u(h.io);else if(y.kind==="found"){let T=[],w=y.uuid;for(;w!==null&&!c.has(w);){let S=w;c.add(S),T.push(S);let I=a.get(S)??null;if(I===null){w=null;continue}let b=l(I);w=b.kind==="found"?b.uuid:null}for(let S=T.length-1;S>=0;S-=1)d(h.io,T[S])}}}let g=Y(_.usage);if(g){let E=Gx(g);E&&(h.meta.tokens=E),zx(h.pricingRaw,g)}if(typeof _.model=="string"&&_.model&&(h.meta.model=_.model),Array.isArray(_.content))for(let E of _.content){let y=Y(E);if(y?.type!=="tool_use")continue;let T=typeof y.id=="string"&&y.id?y.id:_.id,w=Zg(y.name),S=Wx(y.input),I=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let b=Oa(S,["file_path","filePath","path","file"]);if(b===null)continue;let L=o.get(T),O=L===void 0||L.cleanPath!==null&&L.cleanPath!==b?null:L.bytes;h.obs.record(T,"read",b,O)}else if(w==="written")h.obs.record(T,"written",Oa(S),ey(S));else if(w==="apply_patch"){let b=typeof S=="string"?S:Y(S)?.input;if(typeof b=="string")for(let L of Da(b))h.obs.record(T,"written",L.path,L.bytes)}else I==="webfetch"||I==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:Qg(Y(S)?.url),bytes:null,basis:"unknown"}):pu(y.name)||Ho(h.io,T)}}let m=[];for(let{meta:p,obs:_,io:h,pricingRaw:g}of f.values()){let E=_.files("read"),y=_.files("written"),T=h.entries();m.push({...p,files_read:E,files_written:y,external_io:T,read_bytes:bs(E,T,"read"),write_bytes:bs(y,T,"written"),model_provider:null,pricing_facts:hu(g,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function Zx(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.cached_input_tokens),s=dt(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:dt(e.cache_write_input_tokens);return e.cache_write_input_tokens!==void 0&&o===null?null:{input_uncached:n-r,input_cached:r,input_cache_write:o,output:s}}function eC(t,e,n){let r=typeof t.call_id=="string"&&t.call_id?t.call_id:null,s=typeof t.name=="string"?t.name.toLowerCase():"",o=t.type==="custom_tool_call"?t.input:t.arguments;if(s==="apply_patch"&&typeof o=="string"){if(r!==null)for(let i of Da(o))e.record(r,"written",i.path,i.bytes);return}if(typeof o=="string"){let i=Bx(o);if(i!==null){if(r!==null)for(let a of Da(i))e.record(r,"written",a.path,a.bytes);return}}pu(s)||Ho(n,r)}function tC(t){let n=Y(t.internal_chat_message_metadata_passthrough)?.content_item_kinds,r=t.content;if(!Array.isArray(n))return"unknown";if(!Array.isArray(r))return"injected";let s=0,o=!1;for(let i=0;i<r.length;i+=1){if(n[i]!=="user.text")continue;let a=Y(r[i]);a&&typeof a.text=="string"&&(s+=Buffer.byteLength(a.text,"utf8"),o=!0)}return o?{bytes:s}:"injected"}function nC(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new Yn,c=new zn,d=0,u=!1,f=!0,m=new Set;for(let _ of t){r.signal.throwIfAborted();let h=Y(_.payload);if(_.type==="session_meta"&&h&&typeof h.model_provider=="string"&&h.model_provider){a=h.model_provider;continue}if(_.type==="turn_context"&&h){let T=typeof h.model=="string"&&h.model?h.model:null;T&&(i=T),T&&typeof h.turn_id=="string"&&o.set(h.turn_id,T);continue}if(_.type==="response_item"&&h){if(h.type==="function_call"||h.type==="custom_tool_call")eC(h,l,c);else if(h.type==="local_shell_call")Ho(c,typeof h.call_id=="string"?h.call_id:null);else if(h.type==="web_search_call")d+=1,c.record({direction:"read",kind:"web",id:typeof h.id=="string"?h.id:null,ref:null,bytes:null,basis:"unknown"});else if(h.type==="message"&&h.role==="user"){let T=tC(h),w=typeof h.id=="string"&&h.id?h.id:null;T==="unknown"?c.record({direction:"read",kind:"prompt",id:w,ref:null,bytes:null,basis:"unknown"}):T!=="injected"&&(w===null?c.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"}):m.has(w)||(m.add(w),c.record({direction:"read",kind:"prompt",id:w,ref:null,bytes:T.bytes,basis:"input_text"})))}continue}if(_.type==="event_msg"&&h?.type==="token_count"){u=!0,f&&(l=new Yn,c=new zn,d=0);continue}if(_.type!=="token_usage_record"||!h)continue;if(typeof h.response_id!="string"||h.response_id.length===0)return{status:"unsupported"};let g=Zx(h.usage);if(!g)return{status:"partial"};let E=typeof h.turn_id=="string"?o.get(h.turn_id)??i:i,y=s.get(h.response_id);if(!y&&(y={meta:{response_id:h.response_id,timestamp:null,model:null,tokens:g,files_read:[],files_written:[]},obs:new Yn,io:new zn,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=gu(_.timestamp),y.meta.model=E??null,y.meta.tokens=g,y.rawUsage=Y(h.usage),y.obs.absorb(l),y.io.absorb(c),y.webSearch+=d,l=new Yn,c=new zn,d=0}if(u&&s.size===0)return{status:"unsupported"};let p=[];for(let{meta:_,obs:h,io:g,rawUsage:E,webSearch:y}of s.values()){let T=h.files("read"),w=h.files("written"),S=g.entries(),I=Y(E),b=hu({reasoning:I?.reasoning_output_tokens,webSearch:y>0?y:void 0},_.tokens.output,_.tokens.input_cache_write);p.push({..._,files_read:T,files_written:w,external_io:S,read_bytes:bs(T,S,"read"),write_bytes:bs(w,S,"written"),model_provider:a,pricing_facts:b})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function rC(t,e=!1){let n=Y(t);if(!n)return{...jo};let r=n.input===void 0?e?null:0:dt(n.input),s=n.output===void 0?e?null:0:dt(n.output),o=n.reasoning===void 0?e?null:0:dt(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:dt(i.read),l=i?.write===void 0?e?null:0:dt(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...jo}:e?{input_uncached:r!==null&&l!==null&&Number.isSafeInteger(r+l)?r+l:null,input_cached:a,input_cache_write:l,output:s!==null&&o!==null&&Number.isSafeInteger(s+o)?s+o:null}:r===null||s===null||o===null||a===null||l===null?{...jo}:r+s+o+a+l===0?{...jo}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function Yg(t,e,n){Wo(n);let r=n.maxRows*20,s=t.prepare("SELECT (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS total").get(e,e),o=dt(s?.total);if(o===null||o>n.maxBytes)return null;let i=t.prepare("SELECT id,time_created,time_updated,data FROM message WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1),a=t.prepare("SELECT id,message_id,time_created,time_updated,data FROM part WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1);if(i.length+a.length>r)return null;let l=0,c=mu("sha256");for(let d of[...i,...a]){n.signal.throwIfAborted();let u=JSON.stringify(d);if(l+=Buffer.byteLength(u),l>n.maxBytes)return null;c.update(u).update(`
16
- `)}return{revision:`${_u}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function oC(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=Y(JSON.parse(s.data))}catch{continue}let i=typeof o?.type=="string"?o.type:"";o?.synthetic===!0||o?.ignored===!0||(i==="text"&&typeof o.text=="string"?(e+=Buffer.byteLength(o.text,"utf8"),n=!0):i&&!sC.has(i)&&(r=!0))}return n?e:r?"unknown":null}function iC(t,e,n,r){let s=new Map;for(let c of n.parts){let d=s.get(c.message_id)??[];d.push(c),s.set(c.message_id,d)}let o=new Map;for(let c of n.messages){let d;try{d=Y(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=oC(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=Y(JSON.parse(c.data))}catch{continue}if(d?.role!=="assistant")continue;let u=typeof d.parentID=="string"?d.parentID:null;u!==null&&o.has(u)&&!a.has(u)&&(a.add(u),i.set(c.id,{id:u,bytes:o.get(u)}))}let l=[];for(let c of n.messages){r.signal.throwIfAborted();let d;try{d=Y(JSON.parse(c.data))}catch{return{status:"partial"}}if(r.requireBillingCounters&&d&&Object.hasOwn(d,"tokens")&&d.role!=="assistant")return{status:"partial"};if(!d||d.role!=="assistant")continue;let u=new Yn,f=new zn,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let I of s.get(c.id)??[]){let b;try{b=Y(JSON.parse(I.data))}catch{return{status:"partial"}}if(b?.type!=="tool")continue;let L=typeof b.tool=="string"?b.tool.toLowerCase():"",O=Zg(b.tool),k=Y(b.state),v=Y(k?.input),A=typeof b.callID=="string"&&b.callID?b.callID:typeof k?.callID=="string"&&k.callID?k.callID:I.id;if(O==="written")u.record(A,"written",Oa(v),ey(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of Da(N))u.record(A,"written",R.path,R.bytes);else Ho(f,A)}else if(O==="read"){let N=Oa(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=Y(Y(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:Qg(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else pu(b.tool)||Ho(f,A)}let _=Y(d.time),h=Y(d.model)?.modelID??d.modelID,g=rC(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=hu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:gu(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:bs(y,w,"read"),write_bytes:bs(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}async function du(t,e){if(!Gg(t))return null;let n=await Ix(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await uu(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await uu(s).catch(()=>vn(s)),i=Nx(o,r);if(i===""||!i.startsWith(`..${Rx}`)&&i!==".."&&!Gg(i))return r}return null}async function zg(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await kx(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>Qn(u.name,f.name));for(let u of d){if(r.signal.throwIfAborted(),o.length>=e)return;if(i+=1,i>n){a=!0;return}let f=Mr(c,u.name);if(u.isDirectory()&&!u.isSymbolicLink()){if(await l(f),a||o.length>=e)return}else if(u.isFile()&&u.name.endsWith(".jsonl")){let m=await uu(f).catch(()=>vn(f));(s===null||Qn(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(Qn),truncated:a}}function aC(t,e){let n=new Set;if(e.length===0)return n;let r=400;for(let{db:s}of t)for(let o=0;o<e.length;o+=r){let i=e.slice(o,o+r);try{let a=s.prepare(`SELECT id FROM session WHERE id IN (${i.map(()=>"?").join(",")})`).all(...i);for(let l of a)typeof l.id=="string"&&n.add(l.id)}catch{}}return n}function ty(t={}){return new fu(t)}var Yn,Lx,zn,xx,Ss,jo,Cx,_u,Ox,cu,Ux,Fx,jx,Hx,sC,fu,ny=x(()=>{"use strict";Gd();Vd();ba();Kd();vg();kg();tu();$g();au();Yn=class{map=new Map;record(e,n,r,s){if(typeof r!="string"||r.length===0||r.includes("\0"))return;let o=`${e}\0${n}\0${r}`;this.map.has(o)||this.map.set(o,{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}absorb(e){for(let[n,r]of e.map)this.map.has(n)||this.map.set(n,r)}},Lx=0,zn=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${Lx++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}absorb(e){for(let[n,r]of e.map)this.map.has(n)||this.map.set(n,r)}},xx=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);Ss=["claude","codex","lmplayer",qn,Gn,Dr,Jn,Vn,Kn,"muse","miniplayer"],jo={input_uncached:null,input_cached:null,input_cache_write:null,output:null},Cx=5e5,_u="bx3",Ox=Sx(import.meta.url);cu=["claude","codex","lmplayer"];Ux=["read","read_file","view","view_file","view_image"],Fx=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],jx=["filePath","path","file","file_path","filepath","notebook_path","paths"];Hx=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];sC=new Set(["session-job-notification"]);fu=class{claudeProjectsDir;codexSessionDirs;lmplayerDbPaths;sqliteBusyTimeoutMs;maxDiscoveryTraversalVisits;agyReader;dshReader;qwenReader;opencodeReader;copilotReader;kimiReader;sessionDataReaders;constructor(e={}){this.sessionDataReaders=Object.fromEntries([eg(e.museDataHome),Ia(e.miniplayerHome)].map(n=>[n.provider,new ys(n)])),this.claudeProjectsDir=vn(e.claudeProjectsDir??Mr(xa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Mr(xa(),".codex","sessions"),Mr(xa(),".code","sessions")]).map(n=>vn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??Dx()).map(n=>vn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):Cx,this.agyReader=mg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=wg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=bg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=Lg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=Mg(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=Xg(e.kimiHome?{kimiHome:e.kimiHome}:{})}capabilities(){let e=mu("sha256").update(JSON.stringify({claudeProjectsDir:this.claudeProjectsDir,codexSessionDirs:this.codexSessionDirs,lmplayerDbPaths:this.lmplayerDbPaths,agyExtractionRevisionTag:ka,sessionData:Object.values(this.sessionDataReaders).map(({format:n})=>[n.provider,n.root,n.revision])})).digest("hex");return{scope:"account",revision:`${_u}:${e}`,providers:[...Ss],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Vn]:"per_response",[Gn]:"per_response",[qn]:"partial",[Jn]:"partial",[Kn]:"per_response"}}}async discover(e){if(Wo(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=Px(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=Ss.filter(h=>!s.has(h));if(i.length===0)return{sources:[],complete:!0,cursor:null};let a=new Map,l=new Map;for(let h of i){e.signal.throwIfAborted();let g=r.get(h)??null,{sources:E,truncated:y}=await this.discoverProvider(Ss.indexOf(h),e,e.maxSources+1,g);if(y)throw new Error(`passive session discovery exceeded the traversal budget for provider "${h}"; cannot certify a complete or progressing sweep`);let T=g?Ca({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,w=T===null?E:E.filter(S=>Qn(Ca(S),T)>0);l.set(h,w.length>e.maxSources),a.set(h,w.slice(0,e.maxSources))}let c=o%i.length,d=i.map((h,g)=>i[(g+c)%i.length]),u=new Map(i.map(h=>[h,0])),f=[],m=!0;for(;f.length<e.maxSources&&m;){m=!1;for(let h of d){if(f.length>=e.maxSources)break;let g=a.get(h),E=u.get(h);E<g.length&&(f.push(g[E]),u.set(h,E+1),m=!0)}}let p={},_=[...s];for(let h of i){let g=a.get(h),E=u.get(h);if(!l.get(h)&&E===g.length){_.push(h);continue}if(E>0){let T=g[E-1];p[h]={source_id:T.source_id,sessionid:T.sessionid}}else{let T=r.get(h);T&&(p[h]=T)}}return Ss.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:$x({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Wo(n),!Ss.includes(e.provider))return{status:"unsupported"};if(e.provider==="claude"||e.provider==="codex"){let r=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,s=await du(e.source_id,r);if(!s||!this.jsonlSourceMatches(e,s))return{status:"unavailable"};let o=await Kg(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===qn?this.agyReader.inspect(e,n):e.provider===Gn?this.dshReader.inspect(e,n):e.provider===Dr?this.opencodeReader.inspect(e,n):e.provider===Jn?this.copilotReader.inspect(e,n):e.provider===Vn?this.qwenReader.inspect(e,n):e.provider===Kn?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Wo(r),e.provider==="claude"||e.provider==="codex"){let s=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,o=await du(e.source_id,s);if(!o||!this.jsonlSourceMatches(e,o))return{status:"unavailable"};let i=await Kg(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=Xx(i.data,r);return a?e.provider==="claude"?Qx(a,e,n,r,qx(o)):nC(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===qn)return this.agyReader.read(e,n,r);if(e.provider===Gn)return this.dshReader.read(e,n,r);if(e.provider===Dr)return this.opencodeReader.read(e,n,r);if(e.provider===Vn)return this.qwenReader.read(e,n,r);if(e.provider===Jn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===Kn?this.kimiReader.read(e,n,r):this.sessionDataReaders[e.provider]?this.sessionDataReaders[e.provider].read(e,n,r):{status:"unsupported"}}async discoverProvider(e,n,r,s){let o=s?.source_id??null;if(e===0){let{paths:i,truncated:a}=await zg(this.claudeProjectsDir,r,this.maxDiscoveryTraversalVisits,n,o);return{sources:i.map(l=>({provider:"claude",sessionid:La(l,".jsonl"),source_id:l})).sort(lu),truncated:a}}if(e===1){let i=[],a=!1;for(let l of[...this.codexSessionDirs].sort(Qn)){let c=await zg(l,r,this.maxDiscoveryTraversalVisits,n,o);c.truncated&&(a=!0);for(let d of c.paths){let u=La(d,".jsonl"),f=u.match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/u);i.push({provider:"codex",sessionid:f?.[1]??u,source_id:d})}}return{sources:i.sort(lu).slice(0,r),truncated:a}}if(e===2)return{sources:await this.discoverLmplayer(n,r,s),truncated:!1};if(e===3)return this.agyReader.discover(n,r,o);if(e===4)return this.dshReader.discover(n,r,o);if(e===5)return this.opencodeReader.discover(n,r,s);if(e===6){let i=s?`${s.source_id}\0${s.sessionid}`:null;return this.copilotReader.discover(n,r,i)}return e===7?this.qwenReader.discover(n,r,o):e===8?this.kimiReader.discover(n,r,o):this.sessionDataReaders[Ss[e]].discover(n,r,o)}jsonlSourceMatches(e,n){let r=La(n,".jsonl");return e.provider==="claude"?r===e.sessionid:(r.match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/u)?.[1]??r)===e.sessionid}openLmplayer(e){if(!this.lmplayerDbPaths.includes(vn(e)))return null;try{let n=new(Mx())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discoverLmplayer(e,n,r){let s=[];try{let o=[...new Set(this.lmplayerDbPaths.map(a=>vn(a)))].sort(Qn);for(let a of o){e.signal.throwIfAborted();let l=await du(a,[vn(a,"..")]);if(!l)continue;let c=this.openLmplayer(l);c&&s.push({path:l,db:c})}let i=[];for(let a=0;a<s.length&&i.length<n;a+=1){e.signal.throwIfAborted();let{path:l,db:c}=s[a];if(r&&Qn(l,r.source_id)<0)continue;let d=r?.source_id===l?r.sessionid:"";for(;;){e.signal.throwIfAborted();let u;try{u=c.prepare("SELECT id FROM session WHERE id > ? ORDER BY id LIMIT ?").all(d,n)}catch{break}if(u.length===0)break;let f=u.map(p=>typeof p.id=="string"&&p.id?p.id:"").filter(Boolean);if(f.length===0)break;let m=a===0?new Set:aC(s.slice(0,a),f);for(let p of f){if(i.length>=n)break;m.has(p)||i.push({provider:"lmplayer",sessionid:p,source_id:l})}if(d=f[f.length-1],i.length>=n||u.length<n)break}}return i.sort(lu).slice(0,n)}finally{for(let{db:o}of s)try{o.close()}catch{}}}inspectLmplayer(e,n){let r=this.openLmplayer(e.source_id);if(!r)return{status:"unavailable"};try{if(r.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return{status:"unavailable"};let o=Yg(r,e.sessionid,n);return o?{status:"ready",revision:o.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}readLmplayer(e,n,r){let s=this.openLmplayer(e.source_id);if(!s)return{status:"unavailable"};try{if(s.exec("BEGIN"),s.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return s.exec("ROLLBACK"),{status:"unavailable"};let i=Yg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=iC(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Bo(t){if(!t.trim())return"unknown";let e=t.split(/\r?\n/).filter(r=>r.trim().length>0);if(e.length>1)try{let r=JSON.parse(e[0]);if(r!==null&&typeof r=="object"&&!Array.isArray(r)&&"kind"in r)return"jsonl"}catch{}let n;try{n=JSON.parse(t)}catch{return"unknown"}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let r=n;if(Array.isArray(r.messages))return"json";if("kind"in r)return"jsonl"}return"unknown"}function $r(t){let e=Bo(t);if(e==="unknown")throw new Error("gemini session content matches neither known format (old .json with messages[] or new .jsonl with kind metadata)");if(e==="json"){let a=JSON.parse(t);return{sessionId:a.sessionId,projectHash:a.projectHash,startTime:a.startTime,lastUpdated:a.lastUpdated,kind:a.kind,messages:Array.isArray(a.messages)?a.messages:[]}}let n=t.split(`
15
+ `)}async function Kg(t,e){Wo(e);let n=await qg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await Ix(t,{signal:e.signal});e.signal.throwIfAborted();let s=await qg(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${_u}:sha256:${mu("sha256").update(r).digest("hex")}`,data:r}}function Xx(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=Y(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function qx(t){return La(Ax(t))==="subagents"}function Gx(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:dt(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:dt(e.cache_creation_input_tokens);return s===null||o===null?null:{input_uncached:n+o,input_cached:s,input_cache_write:o,output:r}}function Vx(t,e){let n=new Map;for(let r of t){if(e.signal.throwIfAborted(),r.type!=="user")continue;let s=Y(r.message),o=Array.isArray(s?.content)?s.content:null;if(!o)continue;let i=o.map(Y).filter(d=>d?.type==="tool_result"),a=i.length===1,l=Y(r.toolUseResult),c=l?.type==="text"?Y(l.file):null;for(let d of i){if(typeof d.tool_use_id!="string"||d.tool_use_id.length===0)continue;let u,f=null;if(d.is_error===!0)u=null;else if(a&&c&&typeof c.content=="string")u=Buffer.byteLength(c.content,"utf8"),f=typeof c.filePath=="string"?c.filePath:null;else if(typeof d.content=="string"){let m=Jg(d.content);u=m!==null?Buffer.byteLength(m,"utf8"):null}else if(Array.isArray(d.content)){let m=d.content.map(Y).filter(p=>p?.type==="text"&&typeof p.text=="string").map(p=>p.text);if(m.length===1){let p=Jg(m[0]);u=p!==null?Buffer.byteLength(p,"utf8"):null}else u=null}else u=null;n.set(d.tool_use_id,{bytes:u,cleanPath:f})}}return n}function Jx(t){let e=t?.content;if(typeof e=="string")return Buffer.byteLength(e,"utf8");if(Array.isArray(e)){let n=0,r=!1;for(let s of e){let o=Y(s);o?.type==="text"&&typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}if(r)return n}return null}function Kx(t){if(t.type!=="user"||t.toolUseResult!==void 0||t.isMeta===!0||t.isCompactSummary===!0||t.isVisibleInTranscriptOnly===!0||t.promptSource==="system"||t.scheduledTaskId!==void 0||t.scheduledFireId!==void 0)return!1;let e=Y(t.message)?.content;return!(Array.isArray(e)&&e.some(n=>Y(n)?.type==="tool_result"))}function Yx(t){let e=new Map,n=new Set,r=new Map;for(let i of t){let a=typeof i.uuid=="string"&&i.uuid?i.uuid:null;if(a!==null&&(e.set(a,typeof i.parentUuid=="string"&&i.parentUuid?i.parentUuid:null),Kx(i))){n.add(a);let l=Jx(Y(i.message));l!==null&&r.set(a,l)}}let s=new Map;return{promptBytes:r,parent:e,resolve:i=>{let a=[],l=new Set,c=i,d;for(;;){let u=s.get(c);if(u){d=u;break}if(n.has(c)){d={kind:"found",uuid:c};break}if(!e.has(c)){d={kind:"broken"};break}if(l.has(c)){d={kind:"broken"};break}l.add(c),a.push(c);let f=e.get(c)??null;if(f===null){d={kind:"clean"};break}c=f}for(let u of a)s.set(u,d);return d}}}function zx(t,e){let n=Y(e.cache_creation),r=Y(e.output_tokens_details),s=Y(e.server_tool_use),o=(i,a)=>{let l=bs(a);l!==null&&(t[i]=l)};o("cacheWrite5m",n?.ephemeral_5m_input_tokens),o("cacheWrite1h",n?.ephemeral_1h_input_tokens),o("reasoning",r?.thinking_tokens),o("webSearch",s?.web_search_requests),o("webFetch",s?.web_fetch_requests)}function Qx(t,e,n,r,s=!1){let o=Vx(t,r),{promptBytes:i,parent:a,resolve:l}=Yx(t),c=new Set,d=(p,_)=>{let h=i.get(_)??null;p.record({direction:"read",kind:"prompt",id:_,ref:null,bytes:h,basis:h===null?"unknown":"input_text"})},u=p=>{p.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"})},f=new Map;for(let p of t){if(r.signal.throwIfAborted(),p.type!=="assistant"||p.isSidechain===!0&&!s||p.isMeta===!0)continue;let _=Y(p.message);if(!_||typeof _.id!="string"||_.id.length===0)continue;let h=f.get(_.id);if(!h){if(h={meta:{response_id:_.id,timestamp:gu(p.timestamp),model:null,tokens:{...jo},files_read:[],files_written:[]},obs:new Yn,io:new zn,pricingRaw:{}},f.set(_.id,h),f.size>r.maxRows)return{status:"partial"};let E=typeof p.uuid=="string"&&p.uuid?p.uuid:null;if(E===null)u(h.io);else{let y=l(E);if(y.kind==="broken")u(h.io);else if(y.kind==="found"){let T=[],w=y.uuid;for(;w!==null&&!c.has(w);){let S=w;c.add(S),T.push(S);let b=a.get(S)??null;if(b===null){w=null;continue}let I=l(b);w=I.kind==="found"?I.uuid:null}for(let S=T.length-1;S>=0;S-=1)d(h.io,T[S])}}}let g=Y(_.usage);if(g){let E=Gx(g);E&&(h.meta.tokens=E),zx(h.pricingRaw,g)}if(typeof _.model=="string"&&_.model&&(h.meta.model=_.model),Array.isArray(_.content))for(let E of _.content){let y=Y(E);if(y?.type!=="tool_use")continue;let T=typeof y.id=="string"&&y.id?y.id:_.id,w=Zg(y.name),S=Wx(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let I=Oa(S,["file_path","filePath","path","file"]);if(I===null)continue;let L=o.get(T),O=L===void 0||L.cleanPath!==null&&L.cleanPath!==I?null:L.bytes;h.obs.record(T,"read",I,O)}else if(w==="written")h.obs.record(T,"written",Oa(S),ey(S));else if(w==="apply_patch"){let I=typeof S=="string"?S:Y(S)?.input;if(typeof I=="string")for(let L of Da(I))h.obs.record(T,"written",L.path,L.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:Qg(Y(S)?.url),bytes:null,basis:"unknown"}):pu(y.name)||Ho(h.io,T)}}let m=[];for(let{meta:p,obs:_,io:h,pricingRaw:g}of f.values()){let E=_.files("read"),y=_.files("written"),T=h.entries();m.push({...p,files_read:E,files_written:y,external_io:T,read_bytes:Is(E,T,"read"),write_bytes:Is(y,T,"written"),model_provider:null,pricing_facts:hu(g,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function Zx(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.cached_input_tokens),s=dt(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:dt(e.cache_write_input_tokens);return e.cache_write_input_tokens!==void 0&&o===null?null:{input_uncached:n-r,input_cached:r,input_cache_write:o,output:s}}function eC(t,e,n){let r=typeof t.call_id=="string"&&t.call_id?t.call_id:null,s=typeof t.name=="string"?t.name.toLowerCase():"",o=t.type==="custom_tool_call"?t.input:t.arguments;if(s==="apply_patch"&&typeof o=="string"){if(r!==null)for(let i of Da(o))e.record(r,"written",i.path,i.bytes);return}if(typeof o=="string"){let i=Bx(o);if(i!==null){if(r!==null)for(let a of Da(i))e.record(r,"written",a.path,a.bytes);return}}pu(s)||Ho(n,r)}function tC(t){let n=Y(t.internal_chat_message_metadata_passthrough)?.content_item_kinds,r=t.content;if(!Array.isArray(n))return"unknown";if(!Array.isArray(r))return"injected";let s=0,o=!1;for(let i=0;i<r.length;i+=1){if(n[i]!=="user.text")continue;let a=Y(r[i]);a&&typeof a.text=="string"&&(s+=Buffer.byteLength(a.text,"utf8"),o=!0)}return o?{bytes:s}:"injected"}function nC(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new Yn,c=new zn,d=0,u=!1,f=!0,m=new Set;for(let _ of t){r.signal.throwIfAborted();let h=Y(_.payload);if(_.type==="session_meta"&&h&&typeof h.model_provider=="string"&&h.model_provider){a=h.model_provider;continue}if(_.type==="turn_context"&&h){let T=typeof h.model=="string"&&h.model?h.model:null;T&&(i=T),T&&typeof h.turn_id=="string"&&o.set(h.turn_id,T);continue}if(_.type==="response_item"&&h){if(h.type==="function_call"||h.type==="custom_tool_call")eC(h,l,c);else if(h.type==="local_shell_call")Ho(c,typeof h.call_id=="string"?h.call_id:null);else if(h.type==="web_search_call")d+=1,c.record({direction:"read",kind:"web",id:typeof h.id=="string"?h.id:null,ref:null,bytes:null,basis:"unknown"});else if(h.type==="message"&&h.role==="user"){let T=tC(h),w=typeof h.id=="string"&&h.id?h.id:null;T==="unknown"?c.record({direction:"read",kind:"prompt",id:w,ref:null,bytes:null,basis:"unknown"}):T!=="injected"&&(w===null?c.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"}):m.has(w)||(m.add(w),c.record({direction:"read",kind:"prompt",id:w,ref:null,bytes:T.bytes,basis:"input_text"})))}continue}if(_.type==="event_msg"&&h?.type==="token_count"){u=!0,f&&(l=new Yn,c=new zn,d=0);continue}if(_.type!=="token_usage_record"||!h)continue;if(typeof h.response_id!="string"||h.response_id.length===0)return{status:"unsupported"};let g=Zx(h.usage);if(!g)return{status:"partial"};let E=typeof h.turn_id=="string"?o.get(h.turn_id)??i:i,y=s.get(h.response_id);if(!y&&(y={meta:{response_id:h.response_id,timestamp:null,model:null,tokens:g,files_read:[],files_written:[]},obs:new Yn,io:new zn,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=gu(_.timestamp),y.meta.model=E??null,y.meta.tokens=g,y.rawUsage=Y(h.usage),y.obs.absorb(l),y.io.absorb(c),y.webSearch+=d,l=new Yn,c=new zn,d=0}if(u&&s.size===0)return{status:"unsupported"};let p=[];for(let{meta:_,obs:h,io:g,rawUsage:E,webSearch:y}of s.values()){let T=h.files("read"),w=h.files("written"),S=g.entries(),b=Y(E),I=hu({reasoning:b?.reasoning_output_tokens,webSearch:y>0?y:void 0},_.tokens.output,_.tokens.input_cache_write);p.push({..._,files_read:T,files_written:w,external_io:S,read_bytes:Is(T,S,"read"),write_bytes:Is(w,S,"written"),model_provider:a,pricing_facts:I})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function rC(t,e=!1){let n=Y(t);if(!n)return{...jo};let r=n.input===void 0?e?null:0:dt(n.input),s=n.output===void 0?e?null:0:dt(n.output),o=n.reasoning===void 0?e?null:0:dt(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:dt(i.read),l=i?.write===void 0?e?null:0:dt(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...jo}:e?{input_uncached:r!==null&&l!==null&&Number.isSafeInteger(r+l)?r+l:null,input_cached:a,input_cache_write:l,output:s!==null&&o!==null&&Number.isSafeInteger(s+o)?s+o:null}:r===null||s===null||o===null||a===null||l===null?{...jo}:r+s+o+a+l===0?{...jo}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function Yg(t,e,n){Wo(n);let r=n.maxRows*20,s=t.prepare("SELECT (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS total").get(e,e),o=dt(s?.total);if(o===null||o>n.maxBytes)return null;let i=t.prepare("SELECT id,time_created,time_updated,data FROM message WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1),a=t.prepare("SELECT id,message_id,time_created,time_updated,data FROM part WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1);if(i.length+a.length>r)return null;let l=0,c=mu("sha256");for(let d of[...i,...a]){n.signal.throwIfAborted();let u=JSON.stringify(d);if(l+=Buffer.byteLength(u),l>n.maxBytes)return null;c.update(u).update(`
16
+ `)}return{revision:`${_u}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function oC(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=Y(JSON.parse(s.data))}catch{continue}let i=typeof o?.type=="string"?o.type:"";o?.synthetic===!0||o?.ignored===!0||(i==="text"&&typeof o.text=="string"?(e+=Buffer.byteLength(o.text,"utf8"),n=!0):i&&!sC.has(i)&&(r=!0))}return n?e:r?"unknown":null}function iC(t,e,n,r){let s=new Map;for(let c of n.parts){let d=s.get(c.message_id)??[];d.push(c),s.set(c.message_id,d)}let o=new Map;for(let c of n.messages){let d;try{d=Y(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=oC(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=Y(JSON.parse(c.data))}catch{continue}if(d?.role!=="assistant")continue;let u=typeof d.parentID=="string"?d.parentID:null;u!==null&&o.has(u)&&!a.has(u)&&(a.add(u),i.set(c.id,{id:u,bytes:o.get(u)}))}let l=[];for(let c of n.messages){r.signal.throwIfAborted();let d;try{d=Y(JSON.parse(c.data))}catch{return{status:"partial"}}if(r.requireBillingCounters&&d&&Object.hasOwn(d,"tokens")&&d.role!=="assistant")return{status:"partial"};if(!d||d.role!=="assistant")continue;let u=new Yn,f=new zn,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let b of s.get(c.id)??[]){let I;try{I=Y(JSON.parse(b.data))}catch{return{status:"partial"}}if(I?.type!=="tool")continue;let L=typeof I.tool=="string"?I.tool.toLowerCase():"",O=Zg(I.tool),k=Y(I.state),v=Y(k?.input),A=typeof I.callID=="string"&&I.callID?I.callID:typeof k?.callID=="string"&&k.callID?k.callID:b.id;if(O==="written")u.record(A,"written",Oa(v),ey(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of Da(N))u.record(A,"written",R.path,R.bytes);else Ho(f,A)}else if(O==="read"){let N=Oa(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=Y(Y(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:Qg(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else pu(I.tool)||Ho(f,A)}let _=Y(d.time),h=Y(d.model)?.modelID??d.modelID,g=rC(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=hu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:gu(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Is(y,w,"read"),write_bytes:Is(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}async function du(t,e){if(!Gg(t))return null;let n=await bx(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await uu(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await uu(s).catch(()=>vn(s)),i=Nx(o,r);if(i===""||!i.startsWith(`..${Rx}`)&&i!==".."&&!Gg(i))return r}return null}async function zg(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await kx(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>Qn(u.name,f.name));for(let u of d){if(r.signal.throwIfAborted(),o.length>=e)return;if(i+=1,i>n){a=!0;return}let f=Mr(c,u.name);if(u.isDirectory()&&!u.isSymbolicLink()){if(await l(f),a||o.length>=e)return}else if(u.isFile()&&u.name.endsWith(".jsonl")){let m=await uu(f).catch(()=>vn(f));(s===null||Qn(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(Qn),truncated:a}}function aC(t,e){let n=new Set;if(e.length===0)return n;let r=400;for(let{db:s}of t)for(let o=0;o<e.length;o+=r){let i=e.slice(o,o+r);try{let a=s.prepare(`SELECT id FROM session WHERE id IN (${i.map(()=>"?").join(",")})`).all(...i);for(let l of a)typeof l.id=="string"&&n.add(l.id)}catch{}}return n}function ty(t={}){return new fu(t)}var Yn,Lx,zn,xx,Ss,jo,Cx,_u,Ox,cu,Ux,Fx,jx,Hx,sC,fu,ny=x(()=>{"use strict";Gd();Vd();Ia();Kd();vg();kg();tu();$g();au();Yn=class{map=new Map;record(e,n,r,s){if(typeof r!="string"||r.length===0||r.includes("\0"))return;let o=`${e}\0${n}\0${r}`;this.map.has(o)||this.map.set(o,{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}absorb(e){for(let[n,r]of e.map)this.map.has(n)||this.map.set(n,r)}},Lx=0,zn=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${Lx++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}absorb(e){for(let[n,r]of e.map)this.map.has(n)||this.map.set(n,r)}},xx=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);Ss=["claude","codex","lmplayer",qn,Gn,Dr,Jn,Vn,Kn,"muse","miniplayer"],jo={input_uncached:null,input_cached:null,input_cache_write:null,output:null},Cx=5e5,_u="bx3",Ox=Sx(import.meta.url);cu=["claude","codex","lmplayer"];Ux=["read","read_file","view","view_file","view_image"],Fx=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],jx=["filePath","path","file","file_path","filepath","notebook_path","paths"];Hx=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];sC=new Set(["session-job-notification"]);fu=class{claudeProjectsDir;codexSessionDirs;lmplayerDbPaths;sqliteBusyTimeoutMs;maxDiscoveryTraversalVisits;agyReader;dshReader;qwenReader;opencodeReader;copilotReader;kimiReader;sessionDataReaders;constructor(e={}){this.sessionDataReaders=Object.fromEntries([eg(e.museDataHome),ba(e.miniplayerHome)].map(n=>[n.provider,new ys(n)])),this.claudeProjectsDir=vn(e.claudeProjectsDir??Mr(xa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Mr(xa(),".codex","sessions"),Mr(xa(),".code","sessions")]).map(n=>vn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??Dx()).map(n=>vn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):Cx,this.agyReader=mg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=wg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=Ig(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=Lg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=Mg(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=Xg(e.kimiHome?{kimiHome:e.kimiHome}:{})}capabilities(){let e=mu("sha256").update(JSON.stringify({claudeProjectsDir:this.claudeProjectsDir,codexSessionDirs:this.codexSessionDirs,lmplayerDbPaths:this.lmplayerDbPaths,agyExtractionRevisionTag:ka,sessionData:Object.values(this.sessionDataReaders).map(({format:n})=>[n.provider,n.root,n.revision])})).digest("hex");return{scope:"account",revision:`${_u}:${e}`,providers:[...Ss],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Vn]:"per_response",[Gn]:"per_response",[qn]:"partial",[Jn]:"partial",[Kn]:"per_response"}}}async discover(e){if(Wo(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=Px(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=Ss.filter(h=>!s.has(h));if(i.length===0)return{sources:[],complete:!0,cursor:null};let a=new Map,l=new Map;for(let h of i){e.signal.throwIfAborted();let g=r.get(h)??null,{sources:E,truncated:y}=await this.discoverProvider(Ss.indexOf(h),e,e.maxSources+1,g);if(y)throw new Error(`passive session discovery exceeded the traversal budget for provider "${h}"; cannot certify a complete or progressing sweep`);let T=g?Ca({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,w=T===null?E:E.filter(S=>Qn(Ca(S),T)>0);l.set(h,w.length>e.maxSources),a.set(h,w.slice(0,e.maxSources))}let c=o%i.length,d=i.map((h,g)=>i[(g+c)%i.length]),u=new Map(i.map(h=>[h,0])),f=[],m=!0;for(;f.length<e.maxSources&&m;){m=!1;for(let h of d){if(f.length>=e.maxSources)break;let g=a.get(h),E=u.get(h);E<g.length&&(f.push(g[E]),u.set(h,E+1),m=!0)}}let p={},_=[...s];for(let h of i){let g=a.get(h),E=u.get(h);if(!l.get(h)&&E===g.length){_.push(h);continue}if(E>0){let T=g[E-1];p[h]={source_id:T.source_id,sessionid:T.sessionid}}else{let T=r.get(h);T&&(p[h]=T)}}return Ss.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:$x({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Wo(n),!Ss.includes(e.provider))return{status:"unsupported"};if(e.provider==="claude"||e.provider==="codex"){let r=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,s=await du(e.source_id,r);if(!s||!this.jsonlSourceMatches(e,s))return{status:"unavailable"};let o=await Kg(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===qn?this.agyReader.inspect(e,n):e.provider===Gn?this.dshReader.inspect(e,n):e.provider===Dr?this.opencodeReader.inspect(e,n):e.provider===Jn?this.copilotReader.inspect(e,n):e.provider===Vn?this.qwenReader.inspect(e,n):e.provider===Kn?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Wo(r),e.provider==="claude"||e.provider==="codex"){let s=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,o=await du(e.source_id,s);if(!o||!this.jsonlSourceMatches(e,o))return{status:"unavailable"};let i=await Kg(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=Xx(i.data,r);return a?e.provider==="claude"?Qx(a,e,n,r,qx(o)):nC(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===qn)return this.agyReader.read(e,n,r);if(e.provider===Gn)return this.dshReader.read(e,n,r);if(e.provider===Dr)return this.opencodeReader.read(e,n,r);if(e.provider===Vn)return this.qwenReader.read(e,n,r);if(e.provider===Jn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===Kn?this.kimiReader.read(e,n,r):this.sessionDataReaders[e.provider]?this.sessionDataReaders[e.provider].read(e,n,r):{status:"unsupported"}}async discoverProvider(e,n,r,s){let o=s?.source_id??null;if(e===0){let{paths:i,truncated:a}=await zg(this.claudeProjectsDir,r,this.maxDiscoveryTraversalVisits,n,o);return{sources:i.map(l=>({provider:"claude",sessionid:La(l,".jsonl"),source_id:l})).sort(lu),truncated:a}}if(e===1){let i=[],a=!1;for(let l of[...this.codexSessionDirs].sort(Qn)){let c=await zg(l,r,this.maxDiscoveryTraversalVisits,n,o);c.truncated&&(a=!0);for(let d of c.paths){let u=La(d,".jsonl"),f=u.match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/u);i.push({provider:"codex",sessionid:f?.[1]??u,source_id:d})}}return{sources:i.sort(lu).slice(0,r),truncated:a}}if(e===2)return{sources:await this.discoverLmplayer(n,r,s),truncated:!1};if(e===3)return this.agyReader.discover(n,r,o);if(e===4)return this.dshReader.discover(n,r,o);if(e===5)return this.opencodeReader.discover(n,r,s);if(e===6){let i=s?`${s.source_id}\0${s.sessionid}`:null;return this.copilotReader.discover(n,r,i)}return e===7?this.qwenReader.discover(n,r,o):e===8?this.kimiReader.discover(n,r,o):this.sessionDataReaders[Ss[e]].discover(n,r,o)}jsonlSourceMatches(e,n){let r=La(n,".jsonl");return e.provider==="claude"?r===e.sessionid:(r.match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/u)?.[1]??r)===e.sessionid}openLmplayer(e){if(!this.lmplayerDbPaths.includes(vn(e)))return null;try{let n=new(Mx())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discoverLmplayer(e,n,r){let s=[];try{let o=[...new Set(this.lmplayerDbPaths.map(a=>vn(a)))].sort(Qn);for(let a of o){e.signal.throwIfAborted();let l=await du(a,[vn(a,"..")]);if(!l)continue;let c=this.openLmplayer(l);c&&s.push({path:l,db:c})}let i=[];for(let a=0;a<s.length&&i.length<n;a+=1){e.signal.throwIfAborted();let{path:l,db:c}=s[a];if(r&&Qn(l,r.source_id)<0)continue;let d=r?.source_id===l?r.sessionid:"";for(;;){e.signal.throwIfAborted();let u;try{u=c.prepare("SELECT id FROM session WHERE id > ? ORDER BY id LIMIT ?").all(d,n)}catch{break}if(u.length===0)break;let f=u.map(p=>typeof p.id=="string"&&p.id?p.id:"").filter(Boolean);if(f.length===0)break;let m=a===0?new Set:aC(s.slice(0,a),f);for(let p of f){if(i.length>=n)break;m.has(p)||i.push({provider:"lmplayer",sessionid:p,source_id:l})}if(d=f[f.length-1],i.length>=n||u.length<n)break}}return i.sort(lu).slice(0,n)}finally{for(let{db:o}of s)try{o.close()}catch{}}}inspectLmplayer(e,n){let r=this.openLmplayer(e.source_id);if(!r)return{status:"unavailable"};try{if(r.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return{status:"unavailable"};let o=Yg(r,e.sessionid,n);return o?{status:"ready",revision:o.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}readLmplayer(e,n,r){let s=this.openLmplayer(e.source_id);if(!s)return{status:"unavailable"};try{if(s.exec("BEGIN"),s.prepare("SELECT id FROM session WHERE id=?").get(e.sessionid)?.id!==e.sessionid)return s.exec("ROLLBACK"),{status:"unavailable"};let i=Yg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=iC(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Bo(t){if(!t.trim())return"unknown";let e=t.split(/\r?\n/).filter(r=>r.trim().length>0);if(e.length>1)try{let r=JSON.parse(e[0]);if(r!==null&&typeof r=="object"&&!Array.isArray(r)&&"kind"in r)return"jsonl"}catch{}let n;try{n=JSON.parse(t)}catch{return"unknown"}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let r=n;if(Array.isArray(r.messages))return"json";if("kind"in r)return"jsonl"}return"unknown"}function $r(t){let e=Bo(t);if(e==="unknown")throw new Error("gemini session content matches neither known format (old .json with messages[] or new .jsonl with kind metadata)");if(e==="json"){let a=JSON.parse(t);return{sessionId:a.sessionId,projectHash:a.projectHash,startTime:a.startTime,lastUpdated:a.lastUpdated,kind:a.kind,messages:Array.isArray(a.messages)?a.messages:[]}}let n=t.split(`
17
17
  `).map(a=>a).filter(a=>a.trim().length>0);if(n.length===0)throw new Error("gemini session file is empty");let r=n[0],s;try{s=JSON.parse(r)}catch(a){throw new Error(`gemini JSONL session: metadata line failed to parse: ${a instanceof Error?a.message:String(a)}`)}if(s===null||typeof s!="object")throw new Error("gemini JSONL session: metadata line is not an object");let o=[],i=new Map;for(let a=1;a<n.length;a++){let l;try{l=JSON.parse(n[a])}catch{continue}if(l===null||typeof l!="object")continue;let c=l;if("$set"in c&&c.$set&&typeof c.$set=="object"){Object.assign(s,c.$set);continue}if(typeof c.id=="string"||typeof c.type=="string"){let d=c;if(typeof d.id=="string"){let u=i.get(d.id);u?lC(u,d):(o.push(d),i.set(d.id,d))}else o.push(d)}}return{sessionId:typeof s.sessionId=="string"?s.sessionId:void 0,projectHash:typeof s.projectHash=="string"?s.projectHash:void 0,startTime:typeof s.startTime=="string"?s.startTime:void 0,lastUpdated:typeof s.lastUpdated=="string"?s.lastUpdated:void 0,kind:typeof s.kind=="string"?s.kind:void 0,messages:o}}function lC(t,e){for(let[n,r]of Object.entries(e))if(r!==void 0){if(n==="tokens"&&ry(t.tokens)&&ry(r)){t.tokens={...t.tokens,...r};continue}t[n]=r}}function ry(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function sy(t,e){if(e==="json")return JSON.stringify(t,null,2);let{messages:n,...r}=t,s=[JSON.stringify(r)];for(let o of n)s.push(JSON.stringify(o));return s.join(`
18
18
  `)+`
19
19
  `}var Ma=x(()=>{"use strict"});import{createHash as oy}from"node:crypto";import{opendir as cC,open as dC,realpath as iy}from"node:fs/promises";import{constants as yu}from"node:fs";import{join as uC,relative as fC,isAbsolute as mC,basename as pC,dirname as hC}from"node:path";function gC(t,e,n){try{if(t==="pi"){let d=e.split(`
@@ -21,7 +21,7 @@ var GR=Object.create;var Fd=Object.defineProperty;var VR=Object.getOwnPropertyDe
21
21
  `).filter(d=>d.trim()).map(d=>JSON.parse(d));if((Array.isArray(r?.messages)?r:s[0])?.sessionId!==n)return;let i=new Map,a=new Map;for(let d of s){if(!d||typeof d!="object"||Array.isArray(d)||d.$set?.sessionId!==void 0&&d.$set.sessionId!==n)return;if(typeof d.id!="string")continue;let u=i.get(d.id)??{};for(let f of["model","timestamp","type"]){let m=d[f];if(!(f==="model"&&m===null&&u.model===void 0)&&m!==void 0){if(typeof m!="string"||u[f]!==void 0&&u[f]!==m)return;u[f]=m}}i.set(d.id,u),Object.hasOwn(d,"tokens")&&a.set(d.id,d.tokens)}let l=$r(e);if(!l||l.sessionId!==n)return;let c=[];for(let d of l.messages){if(d.tokens!==void 0&&!["gemini","assistant"].includes(d.type??""))return;if(!["gemini","assistant"].includes(d.type??""))continue;if(!d.id||!d.tokens)return;let u=a.get(d.id)??d.tokens,f=Sn(u.input),m=Sn(u.cached),p=Sn(u.output),_=Sn(u.thoughts),h=ay(d.id,d.timestamp,d.model);h.tokens={input_uncached:f!==null&&m!==null&&m<=f?f-m:null,input_cached:m,input_cache_write:null,output:p!==null&&_!==null&&Number.isSafeInteger(p+_)?p+_:null},h.pricing_facts={reasoning_output_tokens:_},c.push(h)}return c}catch{return}}function Eu(t,e){let n=async(s,o)=>{o.signal.throwIfAborted();let i=await iy(s),a=await iy(e),l=fC(a,i);if(l===".."||l.startsWith("../")||l.startsWith("..\\")||mC(l))throw Error("outside native root");let c=await dC(i,yu.O_RDONLY|yu.O_NOFOLLOW|yu.O_NONBLOCK);try{let d=await c.stat({bigint:!0});if(!d.isFile()||d.size>BigInt(o.maxBytes))throw Error("native byte limit");let u=Buffer.alloc(Number(d.size)+1),f=0;for(;f<u.length;){o.signal.throwIfAborted();let p=await c.read(u,f,u.length-f,f);if(!p.bytesRead)break;f+=p.bytesRead}let m=await c.stat({bigint:!0});if(o.signal.throwIfAborted(),f!==Number(d.size)||d.size!==m.size||d.mtimeNs!==m.mtimeNs||d.ctimeNs!==m.ctimeNs||d.ino!==m.ino||d.dev!==m.dev)throw Error("changing native file");return new TextDecoder("utf-8",{fatal:!0}).decode(u.subarray(0,f))}finally{await c.close()}},r=s=>{try{return t==="pi"?JSON.parse(s.slice(0,s.indexOf(`
22
22
  `)<0?s.length:s.indexOf(`
23
23
  `))).id:$r(s)?.sessionId}catch{return}};return{async discover(s){let o=[],i=0,a=!0,l=async(c,d)=>{if(s.signal.throwIfAborted(),d>4){a=!1;return}let u=await cC(c).catch(()=>{a=!1});if(u)for await(let f of u){if(s.signal.throwIfAborted(),++i>s.maxRows||o.length>=s.maxSources){a=!1;break}let m=uC(c,f.name);if(f.isDirectory())await l(m,d+1);else if(f.isFile()&&/\.jsonl?$/.test(f.name)&&(t!=="gemini"||pC(hC(m))==="chats"&&f.name.startsWith("session-"))){let p=await n(m,s).catch(()=>{});if(p===void 0){s.signal.throwIfAborted(),a=!1;continue}let _=r(p);typeof _=="string"&&_?o.push({provider:t,sessionid:_,source_id:m}):a=!1}}};return await l(e,0),{sources:o,complete:a,cursor:null}},async inspect(s,o){let i=await n(s.source_id,o);return{status:"ready",revision:oy("sha256").update(i).digest("hex")}},async read(s,o,i){let a=await n(s.source_id,i);if(oy("sha256").update(a).digest("hex")!==o)return{status:"partial"};if(a.split(`
24
- `).length>i.maxRows)return{status:"partial"};let l=gC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var Sn,_C,ay,ly=x(()=>{"use strict";Ma();Sn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,_C=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},ay=(t,e,n)=>({response_id:t,timestamp:_C(e),model:typeof n=="string"&&n?n:null,tokens:{input_uncached:null,input_cached:null,input_cache_write:null,output:null},files_read:null,files_written:null})});import{stat as yC,realpath as EC}from"node:fs/promises";import{join as ut,resolve as dy}from"node:path";import{homedir as TC}from"node:os";function wC(t,e){if(!e.length||e.some(d=>typeof d.response_id!="string"||!d.response_id)||new Set(e.map(d=>d.response_id)).size!==e.length)return;let n=t==="agy"&&e.some(d=>(d.tokens.input_cache_write??0)>0),r=e.map(d=>{let u=d.tokens,f=u.input_cache_write,m=u.input_uncached;for(let _ of Object.values(u))_!==null&&Tu(_)===null&&(n=!0);let p=m;return["kimi","opencode","miniplayer","lmplayer"].includes(t)&&(f===null||m===null||f>m?(p=null,n=!0):p=m-f),(p===null||u.input_cached===null||u.output===null)&&(n=!0),{...d,tokens:{...u,input_uncached:p}}}),s=Xn(r);s.input_cache_write===null&&(t==="pi"||r.some(d=>d.tokens.input_cache_write!=null))&&(n=!0);let o=new Set(e.map(d=>d.model).filter(d=>typeof d=="string"&&d.length>0));for(let d of["input_uncached","input_cached","output"])s[d]===null&&(n=!0);let i=d=>{if(d.some(f=>f==null))return null;if(d.some(f=>Tu(f)===null))return n=!0,null;let u=d.reduce((f,m)=>f+m,0);return Tu(u)===null?(n=!0,null):u};e.some(d=>d.pricing_facts?.reasoning_output_tokens!=null&&d.tokens.output!=null&&d.pricing_facts.reasoning_output_tokens>d.tokens.output)&&(n=!0);let a=i(e.map(d=>d.pricing_facts?.reasoning_output_tokens)),l=e.map(d=>d.providerCostUsd),c=l.every(d=>typeof d=="number"&&Number.isFinite(d)&&d>=0)?l.reduce((d,u)=>d+u,0):null;return{source:"native",inputUncached:s.input_uncached,cacheRead:s.input_cached,cacheWrite:s.input_cache_write,output:s.output,reasoning:a,modelReported:o.size===1?[...o][0]:null,mixedModels:o.size>1,providerCostUsd:c,reason:n||s.input_cache_write===null?"counter_not_exposed":null,invalidCounters:n}}async function cy(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=dy(i),l;try{if(!(await yC(a)).isFile())return{sources:s,complete:!1};let c=await EC(a);if(o.has(c))continue;o.add(c),l=Cr(a),l.pragma("busy_timeout = 0"),l.prepare("SELECT id FROM session WHERE id=?").get(n)&&s.push({provider:e,sessionid:n,source_id:a})}catch(c){if(c.code!=="ENOENT")return{sources:s,complete:!1}}finally{try{l?.close()}catch{}}}return{sources:s,complete:!0}}function vC(t,e,n){let r=e.HOME||e.USERPROFILE||TC(),s=e.XDG_DATA_HOME||ut(r,".local","share"),o=e.XDG_CONFIG_HOME||ut(r,".config");if(t==="pi")return Eu("pi",e.PI_CODING_AGENT_DIR?ut(e.PI_CODING_AGENT_DIR,"sessions"):ut(r,".pi","agent","sessions"));if(t==="gemini")return Eu("gemini",ut(e.GEMINI_CLI_HOME||ut(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new ys(Ia(e.MINIPLAYER_HOME||ut(s,"miniplayer")));return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}if(t==="opencode"){let l=[ut(s,"opencode","opencode.db"),ut(s,"opencode","opencode-local.db"),ut(o,"opencode","opencode.db")].map(d=>dy(d)),c=new $o({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>cy(l,t,n,d),inspect:(d,u)=>c.inspect(d,u),read:(d,u,f)=>c.read(d,u,f)}}if(t==="kimi"||t==="agy"){let l=t==="kimi"?new Fo({kimiHome:e.KIMI_CODE_HOME||ut(r,".kimi-code")}):new Oo({agyConversationsDir:ut(r,".gemini","antigravity-cli","conversations"),sqliteBusyTimeoutMs:0});return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}let i=e.OPENCODE_DB?[e.OPENCODE_DB]:[ut(s,"lmplayer","opencode-local.db"),ut(s,"lmplayer","opencode-dev.db")],a=ty({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>cy(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function uy(t,e,n,r){if(!$a.includes(t.provider)||!e||t.native_session_id&&t.native_session_id!==e)return;let s=new AbortController,o,i,a=async()=>{let l=r.db??(i=Cr(r.dbPath));i&&i.pragma("busy_timeout = 0");let c={signal:s.signal,maxBytes:8*1024*1024,maxRows:1e4,maxSources:512,requireBillingCounters:!0},d=r.reader??vC(t.provider,r.env??process.env,e),u=await d.discover(c);if(u.complete!==!0)return;let f=u.sources.filter(p=>p.provider===t.provider&&(p.sessionid===e||t.provider==="lmplayer"&&p.sessionid==="")).map(p=>({...p,sessionid:e}));if(!f.length)return;let m;for(let p of f){s.signal.throwIfAborted();let _=await d.inspect(p,c);if(_.status!=="ready")return;let h=await d.read(p,_.revision,c);if(s.signal.throwIfAborted(),h.status!=="complete"||h.capture_status!==void 0||h.source?.provider!==t.provider||h.source?.sessionid!==e||h.source?.source_id!==p.source_id||h.revision!==_.revision)return;let g=Date.parse(t.startedAt),E=Date.parse(n);if(!Number.isFinite(g)||!Number.isFinite(E)||E<g)return;let y=h.responses;if(!Array.isArray(y)||y.some(S=>!S.timestamp||!Number.isFinite(Date.parse(S.timestamp))))return;let T=y.filter(S=>Date.parse(S.timestamp)>=g&&Date.parse(S.timestamp)<=E);if(!T.length)continue;if(m)return;let w=l.pragma("busy_timeout",{simple:!0});try{l.pragma("busy_timeout = 0");let S=l.prepare("SELECT 1 FROM team_chat_log WHERE attempt_key IS NOT NULL AND attempt_key<>? AND provider=? AND (native_session_id=? OR native_session_id IS NULL) AND julianday(created_at)<=julianday(?) AND (ended_at IS NULL OR julianday(ended_at)>=julianday(?)) LIMIT 1");for(let I of T){let b=new Date(I.timestamp).toISOString();if(S.get(t.attempt_key,t.provider,e,b,b))return}}finally{l.pragma("busy_timeout = "+w)}m=T}return m?wC(t.provider,m):void 0};try{return await Promise.race([a(),new Promise(l=>{o=setTimeout(()=>{s.abort(),l(void 0)},2e3)})])}catch{return}finally{clearTimeout(o),s.abort();try{i?.close()}catch{}}}var $a,Tu,fy=x(()=>{"use strict";ga();ny();au();tu();Kd();Gd();ba();Co();ly();$a=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],Tu=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Yt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var Xo=x(()=>{"use strict"});var Pa,my,wu=x(()=>{"use strict";Pa={attempt_key:"TEXT",provider:"TEXT",native_session_id:"TEXT",cwd:"TEXT",ended_at:"TEXT",turn_outcome:"TEXT",model_requested:"TEXT",model_reported:"TEXT",tok_input_uncached:"INTEGER",tok_cache_read:"INTEGER",tok_cache_write:"INTEGER",tok_output:"INTEGER",tok_reasoning:"INTEGER",usage_source:"TEXT CHECK(usage_source IN ('wire','native','cumulative_delta'))",usage_reason:"TEXT",price_record_id:"TEXT",price_snapshot_sha256:"TEXT",rate_input_1m:"REAL",rate_output_1m:"REAL",rate_cache_read_1m:"REAL",rate_cache_write_1m:"REAL",cost_reason:"TEXT",provider_cost_usd:"REAL"},my=`CREATE UNIQUE INDEX IF NOT EXISTS idx_team_chat_attempt_unique ON team_chat_log(attempt_key) WHERE attempt_key IS NOT NULL;
24
+ `).length>i.maxRows)return{status:"partial"};let l=gC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var Sn,_C,ay,ly=x(()=>{"use strict";Ma();Sn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,_C=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},ay=(t,e,n)=>({response_id:t,timestamp:_C(e),model:typeof n=="string"&&n?n:null,tokens:{input_uncached:null,input_cached:null,input_cache_write:null,output:null},files_read:null,files_written:null})});import{stat as yC,realpath as EC}from"node:fs/promises";import{join as ut,resolve as dy}from"node:path";import{homedir as TC}from"node:os";function wC(t,e){if(!e.length||e.some(d=>typeof d.response_id!="string"||!d.response_id)||new Set(e.map(d=>d.response_id)).size!==e.length)return;let n=t==="agy"&&e.some(d=>(d.tokens.input_cache_write??0)>0),r=e.map(d=>{let u=d.tokens,f=u.input_cache_write,m=u.input_uncached;for(let _ of Object.values(u))_!==null&&Tu(_)===null&&(n=!0);let p=m;return["kimi","opencode","miniplayer","lmplayer"].includes(t)&&(f===null||m===null||f>m?(p=null,n=!0):p=m-f),(p===null||u.input_cached===null||u.output===null)&&(n=!0),{...d,tokens:{...u,input_uncached:p}}}),s=Xn(r);s.input_cache_write===null&&(t==="pi"||r.some(d=>d.tokens.input_cache_write!=null))&&(n=!0);let o=new Set(e.map(d=>d.model).filter(d=>typeof d=="string"&&d.length>0));for(let d of["input_uncached","input_cached","output"])s[d]===null&&(n=!0);let i=d=>{if(d.some(f=>f==null))return null;if(d.some(f=>Tu(f)===null))return n=!0,null;let u=d.reduce((f,m)=>f+m,0);return Tu(u)===null?(n=!0,null):u};e.some(d=>d.pricing_facts?.reasoning_output_tokens!=null&&d.tokens.output!=null&&d.pricing_facts.reasoning_output_tokens>d.tokens.output)&&(n=!0);let a=i(e.map(d=>d.pricing_facts?.reasoning_output_tokens)),l=e.map(d=>d.providerCostUsd),c=l.every(d=>typeof d=="number"&&Number.isFinite(d)&&d>=0)?l.reduce((d,u)=>d+u,0):null;return{source:"native",inputUncached:s.input_uncached,cacheRead:s.input_cached,cacheWrite:s.input_cache_write,output:s.output,reasoning:a,modelReported:o.size===1?[...o][0]:null,mixedModels:o.size>1,providerCostUsd:c,reason:n||s.input_cache_write===null?"counter_not_exposed":null,invalidCounters:n}}async function cy(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=dy(i),l;try{if(!(await yC(a)).isFile())return{sources:s,complete:!1};let c=await EC(a);if(o.has(c))continue;o.add(c),l=Cr(a),l.pragma("busy_timeout = 0"),l.prepare("SELECT id FROM session WHERE id=?").get(n)&&s.push({provider:e,sessionid:n,source_id:a})}catch(c){if(c.code!=="ENOENT")return{sources:s,complete:!1}}finally{try{l?.close()}catch{}}}return{sources:s,complete:!0}}function vC(t,e,n){let r=e.HOME||e.USERPROFILE||TC(),s=e.XDG_DATA_HOME||ut(r,".local","share"),o=e.XDG_CONFIG_HOME||ut(r,".config");if(t==="pi")return Eu("pi",e.PI_CODING_AGENT_DIR?ut(e.PI_CODING_AGENT_DIR,"sessions"):ut(r,".pi","agent","sessions"));if(t==="gemini")return Eu("gemini",ut(e.GEMINI_CLI_HOME||ut(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new ys(ba(e.MINIPLAYER_HOME||ut(s,"miniplayer")));return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}if(t==="opencode"){let l=[ut(s,"opencode","opencode.db"),ut(s,"opencode","opencode-local.db"),ut(o,"opencode","opencode.db")].map(d=>dy(d)),c=new $o({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>cy(l,t,n,d),inspect:(d,u)=>c.inspect(d,u),read:(d,u,f)=>c.read(d,u,f)}}if(t==="kimi"||t==="agy"){let l=t==="kimi"?new Fo({kimiHome:e.KIMI_CODE_HOME||ut(r,".kimi-code")}):new Oo({agyConversationsDir:ut(r,".gemini","antigravity-cli","conversations"),sqliteBusyTimeoutMs:0});return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}let i=e.OPENCODE_DB?[e.OPENCODE_DB]:[ut(s,"lmplayer","opencode-local.db"),ut(s,"lmplayer","opencode-dev.db")],a=ty({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>cy(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function uy(t,e,n,r){if(!$a.includes(t.provider)||!e||t.native_session_id&&t.native_session_id!==e)return;let s=new AbortController,o,i,a=async()=>{let l=r.db??(i=Cr(r.dbPath));i&&i.pragma("busy_timeout = 0");let c={signal:s.signal,maxBytes:8*1024*1024,maxRows:1e4,maxSources:512,requireBillingCounters:!0},d=r.reader??vC(t.provider,r.env??process.env,e),u=await d.discover(c);if(u.complete!==!0)return;let f=u.sources.filter(p=>p.provider===t.provider&&(p.sessionid===e||t.provider==="lmplayer"&&p.sessionid==="")).map(p=>({...p,sessionid:e}));if(!f.length)return;let m;for(let p of f){s.signal.throwIfAborted();let _=await d.inspect(p,c);if(_.status!=="ready")return;let h=await d.read(p,_.revision,c);if(s.signal.throwIfAborted(),h.status!=="complete"||h.capture_status!==void 0||h.source?.provider!==t.provider||h.source?.sessionid!==e||h.source?.source_id!==p.source_id||h.revision!==_.revision)return;let g=Date.parse(t.startedAt),E=Date.parse(n);if(!Number.isFinite(g)||!Number.isFinite(E)||E<g)return;let y=h.responses;if(!Array.isArray(y)||y.some(S=>!S.timestamp||!Number.isFinite(Date.parse(S.timestamp))))return;let T=y.filter(S=>Date.parse(S.timestamp)>=g&&Date.parse(S.timestamp)<=E);if(!T.length)continue;if(m)return;let w=l.pragma("busy_timeout",{simple:!0});try{l.pragma("busy_timeout = 0");let S=l.prepare("SELECT 1 FROM team_chat_log WHERE attempt_key IS NOT NULL AND attempt_key<>? AND provider=? AND (native_session_id=? OR native_session_id IS NULL) AND julianday(created_at)<=julianday(?) AND (ended_at IS NULL OR julianday(ended_at)>=julianday(?)) LIMIT 1");for(let b of T){let I=new Date(b.timestamp).toISOString();if(S.get(t.attempt_key,t.provider,e,I,I))return}}finally{l.pragma("busy_timeout = "+w)}m=T}return m?wC(t.provider,m):void 0};try{return await Promise.race([a(),new Promise(l=>{o=setTimeout(()=>{s.abort(),l(void 0)},2e3)})])}catch{return}finally{clearTimeout(o),s.abort();try{i?.close()}catch{}}}var $a,Tu,fy=x(()=>{"use strict";ga();ny();au();tu();Kd();Gd();Ia();Co();ly();$a=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],Tu=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Yt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var Xo=x(()=>{"use strict"});var Pa,my,wu=x(()=>{"use strict";Pa={attempt_key:"TEXT",provider:"TEXT",native_session_id:"TEXT",cwd:"TEXT",ended_at:"TEXT",turn_outcome:"TEXT",model_requested:"TEXT",model_reported:"TEXT",tok_input_uncached:"INTEGER",tok_cache_read:"INTEGER",tok_cache_write:"INTEGER",tok_output:"INTEGER",tok_reasoning:"INTEGER",usage_source:"TEXT CHECK(usage_source IN ('wire','native','cumulative_delta'))",usage_reason:"TEXT",price_record_id:"TEXT",price_snapshot_sha256:"TEXT",rate_input_1m:"REAL",rate_output_1m:"REAL",rate_cache_read_1m:"REAL",rate_cache_write_1m:"REAL",cost_reason:"TEXT",provider_cost_usd:"REAL"},my=`CREATE UNIQUE INDEX IF NOT EXISTS idx_team_chat_attempt_unique ON team_chat_log(attempt_key) WHERE attempt_key IS NOT NULL;
25
25
  CREATE INDEX IF NOT EXISTS idx_team_chat_started ON team_chat_log(created_at);
26
26
  CREATE INDEX IF NOT EXISTS idx_team_chat_provider_model ON team_chat_log(provider, model_reported);
27
27
  CREATE INDEX IF NOT EXISTS idx_team_chat_provider_session ON team_chat_log(provider, native_session_id);
@@ -40,7 +40,7 @@ CREATE VIEW IF NOT EXISTS turn_usage AS SELECT
40
40
  +COALESCE(tok_cache_write,0)*COALESCE(rate_cache_write_1m,rate_input_1m,0)
41
41
  +COALESCE(tok_output,0)*COALESCE(rate_output_1m,0))/1e6 END AS cost_usd
42
42
  FROM team_chat_log WHERE attempt_key IS NOT NULL;
43
- `});import{createHash as vy}from"node:crypto";import{mkdirSync as Sy,readFileSync as SC,renameSync as IC,writeFileSync as bC,existsSync as Iy}from"node:fs";import{homedir as kC}from"node:os";import{dirname as by,join as Wa,resolve as Ha}from"node:path";import{fileURLToPath as AC}from"node:url";function CC(){return Wa(kC(),".lmctl","cache","lmprice")}function Ns(t,e){return Wa(t,e)}function Ba(t,e){if(!t||!e)return null;let n=qo.get(t),r=qo.get(e);return n===void 0||r===void 0?null:vy("sha256").update(n).update(r).digest("hex")}function Pr(t){try{let e=SC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&qo.set(n,e),n}catch{return null}}function Ay(t,e){let n=`${t}.tmp-${process.pid}`;bC(n,e),IC(n,t)}function vu(t){return t===null||typeof t=="number"}function Ur(t){if(typeof t!="object"||t===null)return!1;let e=t;return e.schema_version!==1||!Array.isArray(e.records)||e.records.length===0?!1:e.records.every(n=>{if(typeof n!="object"||n===null)return!1;let r=n;if(typeof r.source!="string"||typeof r.source_model_id!="string"||typeof r.pricing!="object"||r.pricing===null)return!1;let s=r.pricing;if(r.native!==void 0){if(typeof r.native!="object"||r.native===null||Array.isArray(r.native))return!1;let o=r.native;if(Object.keys(o).some(i=>!["codex","agy","claude_code","kimi"].includes(i))||Object.values(o).some(i=>typeof i!="string"||i.length===0||i.trim()!==i))return!1}return vu(s.input_per_1m_tokens)&&vu(s.output_per_1m_tokens)&&vu(s.input_cache_read_per_1m_tokens)})}function Fr(t){if(typeof t!="object"||t===null)return!1;let e=t;if(e.schema_version!==1||!Array.isArray(e.standards)||!Array.isArray(e.aliases))return!1;let n=e.standards.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.standard_slug=="string"&&(o.catalog_record_id===null||typeof o.catalog_record_id=="string")}),r=e.aliases.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.alias=="string"&&(o.standard_slug===null||typeof o.standard_slug=="string")&&typeof o.evidence=="string"&&DC.has(o.evidence)});return n&&r}function MC(t){let e=Pr(Ns(t,ky)),n={etag:typeof e?.model_list?.etag=="string"?e.model_list.etag:null,last_checked:typeof e?.model_list?.last_checked=="string"?e.model_list.last_checked:null},r={etag:typeof e?.aliases?.etag=="string"?e.aliases.etag:null,last_checked:typeof e?.aliases?.last_checked=="string"?e.aliases.last_checked:null};if(e===null){let s=Pr(Ns(t,OC));s&&(n.etag=typeof s.etag=="string"?s.etag:null,n.last_checked=typeof s.fetchedAt=="string"?s.fetchedAt:null)}return{model_list:n,aliases:r,...typeof e?.pair_sha256=="string"?{pair_sha256:e.pair_sha256}:{}}}function $C(t){let e=MC(t),n=Pr(Ns(t,Fa)),r=Pr(Ns(t,ja));return e.pair_sha256&&Ba(Ur(n)?n:null,Fr(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{...hy},aliases:{...hy}}}:{catalog:Ur(n)?n:null,aliases:Fr(r)?r:null,meta:e}}function _y(t,e){try{return Sy(t,{recursive:!0}),Ay(Ns(t,ky),JSON.stringify(e)),!0}catch{return!1}}function Su(t){return(t&&typeof t=="object"?qo.get(t):void 0)??JSON.stringify(t)}function Ua(t,e,n){try{Sy(t,{recursive:!0}),Ay(Ns(t,e),Su(n))}catch{}}function PC(t,e){let n=UC(t),r=n?[Ha(n,"data",e)]:[Ha(t,"..","..","data",e)];for(let s of r)if(Iy(s))return s;return null}function UC(t){let e=Ha(t);for(;;){if(Iy(Ha(e,"package.json")))return e;let n=by(e);if(n===e)return null;e=n}}function gy(t,e,n){let r=n!==void 0?n:PC(t,e);return r===null?null:Pr(r)}function Rs(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return py;let n=Number(e);return!Number.isFinite(n)||n<0?py:n*1e3}function FC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function yy(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout(LC)});if(!s.ok)return{kind:"failed"};let o=s.headers.get("etag");if(n!==null&&o!==null&&o===r)return{kind:"match"};let i=await t(e,{signal:AbortSignal.timeout(xC)});if(!i.ok)return{kind:"failed"};let a=await i.text(),l=JSON.parse(a);return l&&typeof l=="object"&&qo.set(l,a),{kind:"payload",payload:l,etag:i.headers.get("etag")??o}}catch{return{kind:"failed"}}}function Tt(t={}){return Object.keys(t).length===0?(Ey??=Ty(t),Ey):Ty(t)}async function Ty(t){let e=by(AC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:FC();if(n!==null&&n!==""){let _=Pr(Wa(n,Fa)),h=Pr(Wa(n,ja));if(Ur(_)&&Fr(h)){let g={sha256:Ba(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return Iu=g.generatedAt,g}return wy(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??CC(),o=t.now??Date.now(),i=t.ttlMs??Rs(),a=$C(s),l=(_,h)=>_!==null&&h.last_checked!==null&&o>=Date.parse(h.last_checked)&&o-Date.parse(h.last_checked)<i,c=a.catalog,d=a.aliases,u=!1,f=!1,m={model_list:{...a.meta.model_list},aliases:{...a.meta.aliases}},p=!1;if(!l(c,a.meta.model_list)){let _=await yy(r,NC,c,a.meta.model_list.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.model_list.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Ur(_.payload)?(m.model_list.last_checked=new Date(o).toISOString(),p=!0,c=_.payload,_.etag!==null&&(m.model_list.etag=_.etag),u=!0):f=!0)}if(!l(d,a.meta.aliases)){let _=await yy(r,RC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Fr(_.payload)?(m.aliases.last_checked=new Date(o).toISOString(),p=!0,d=_.payload,_.etag!==null&&(m.aliases.etag=_.etag),u=!0):f=!0)}if(!f&&(p||u))if(c!==null&&d!==null){let _=vy("sha256").update(Su(c)).update(Su(d)).digest("hex");_y(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Ua(s,Fa,c),Ua(s,ja,d))}else c!==a.catalog&&c!==null&&Ua(s,Fa,c),d!==a.aliases&&d!==null&&Ua(s,ja,d),_y(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ba(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return Iu=_.generatedAt,_}return{...wy(t,e),refreshFailed:f}}function wy(t,e){let n=gy(e,"price-data.json",t.bundledPath),r=gy(e,"price-aliases.json",t.bundledAliasesPath),s=Ur(n)?n:null,o=Fr(r)?r:null,i={catalog:s,aliases:o,sha256:Ba(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return Iu=i.generatedAt,i}function Ny(t){if(t.cacheWrite!==void 0)return As(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=As(t.cacheWrite5m),n=As(t.cacheWrite1h);return e===null||n===null?null:As(e+n)}function bu(t,e){let n=As(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=As(t.cacheWrite1h===void 0?0:t.cacheWrite1h);return n!==null&&r!==null&&Number.isSafeInteger(n+r)&&n+r===e?{five:n,one:r}:null}function Go(t,e){let n=ks(e.input_per_1m_tokens),r=ks(e.output_per_1m_tokens),s=ks(e.input_cache_read_per_1m_tokens),o=ks(e.source_cost_fields?.cache_creation_input_token_cost),i=ks(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=ks(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Ny(t),d=bu(t,c),u=c===null?null:d===null||c===0?i:d.five>0&&i===null||d.one>0&&l===null?null:(d.five*(i??0)+d.one*(l??0))/c;return{inputPer1m:n,outputPer1m:r,cacheReadPer1m:s,cacheWritePer1m:u}}function Vo(t,e){if(e===null)return null;let n=Go(t,e),r=Ny(t);if(r===null||t.input>0&&n.inputPer1m===null||t.output>0&&n.outputPer1m===null||t.cachedInput>0&&n.cacheReadPer1m===null||r>0&&n.cacheWritePer1m===null)return null;let s=(t.input*(n.inputPer1m??0)+t.output*(n.outputPer1m??0)+t.cachedInput*(n.cacheReadPer1m??0)+r*(n.cacheWritePer1m??0))/1e6;return Number(s.toPrecision(10))}var NC,RC,LC,xC,py,Fa,ja,ky,OC,qo,DC,hy,Iu,Ey,ks,As,zt=x(()=>{"use strict";NC="https://lmctl.com/dataset/model_list.json",RC="https://lmctl.com/dataset/aliases.json",LC=1e3,xC=1e4,py=6*60*60*1e3;Fa="model_list.json",ja="aliases.json",ky="meta.json",OC="model_list.meta.json";qo=new WeakMap;DC=new Set(["established","asserted","unresolved"]);hy={etag:null,last_checked:null};Iu=null,Ey=null;ks=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,As=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Zn(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function jr(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return Zn(n)}function jC(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(Zn(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function WC(t,e){let n=new Set,r=l=>{n.add(Zn(l))},s=t.trim().toLowerCase(),o=null,i=s.indexOf(":");i>0&&!s.slice(0,i).includes("/")&&(o=s.slice(0,i),r(s),s=s.slice(i+1)),r(s);let a=s.slice(s.lastIndexOf("/")+1);r(a);for(let l of e)r(`${l}/${a}`);return o!==null&&r(`${o}/${a}`),[...n]}function Wr(t){let e=r=>!(r.mode!==void 0&&r.mode!==null&&r.mode!=="chat"||t.nonChatName&&t.nonChatName.test(r.source_model_id.toLowerCase())),n=r=>e(r)&&t.family.test(r.source_model_id.toLowerCase());return{firstPartyProviders:t.firstPartyProviders,isChatModel:e,coversRecord:n,normalize:r=>WC(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=jC(r);return s.some(i=>o.has(i))}}}function XC(t,e,n){let r=e.trim().toLowerCase(),s=Zn(r);if(n.records.some(i=>i.source_model_id.toLowerCase()===r&&t.matchRow(i,[s])))return!0;let o=t.normalize(e);return o.length>0&&n.records.some(i=>t.matchRow(i,o))}function qC(t,e,n){let r=[];for(let[s,o]of Object.entries(Qt))s!==n&&XC(o,t,e)&&r.push(s);return r}function Xa(t){return t==="moonshot"?0:t==="litellm"?1:t==="openrouter"?2:t==="manual"?3:4}function GC(t,e){return t.input_per_1m_tokens===e.input_per_1m_tokens&&t.output_per_1m_tokens===e.output_per_1m_tokens&&t.input_cache_read_per_1m_tokens===e.input_cache_read_per_1m_tokens&&(t.input_cache_write_per_1m_tokens??null)===(e.input_cache_write_per_1m_tokens??null)&&(t.source_cost_fields?.cache_creation_input_token_cost??null)===(e.source_cost_fields?.cache_creation_input_token_cost??null)&&(t.source_cost_fields?.cache_creation_input_token_cost_above_1hr??null)===(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr??null)}function VC(t){let e=new Map,n=[];for(let r of t){let s=r.source_model_id.toLowerCase(),o=s.lastIndexOf("/"),i=o===-1?"":s.slice(0,o+1),a=o===-1?s:s.slice(o+1),l=`${r.source}:${i}${Zn(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!GC(c.pricing,r.pricing)){n.push(r);continue}/\d\.\d/.test(c.source_model_id)&&!/\d\.\d/.test(r.source_model_id)&&e.set(l,r)}return[...e.values(),...n]}function Py(t){return{route:t.record_id??`${t.source}:${t.source_model_id}`,source:t.source,sourceModelId:t.source_model_id,provider:t.provider??null,pricing:t.pricing,estimated:t.source==="manual"}}function Uy(t,e){return t.map(Py).sort((n,r)=>{let s=Xa(n.source)-Xa(r.source);if(s!==0)return s;let o=n.provider!==null&&e.includes(n.provider)?0:1,i=r.provider!==null&&e.includes(r.provider)?0:1;return o!==i?o-i:n.sourceModelId.localeCompare(r.sourceModelId)})}function qa(t){return t.pricing.input_per_1m_tokens!==null&&t.pricing.output_per_1m_tokens!==null}function JC(t,e,n){let r=VC(t),s=Uy(r,n),i=r.find(a=>(a.record_id??`${a.source}:${a.source_model_id}`)===s[0].route)?.context_window?.input_tokens??void 0;return{id:s[0].sourceModelId,normalizedId:e,offers:s,...i!=null?{contextWindow:i}:{}}}function ku(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=JC(t,e,n);if(r!==void 0){let i=t.map(Py),a=i.filter(d=>d.provider===r&&!d.sourceModelId.includes("/")&&d.source!=="openrouter"&&!d.estimated),l=a.length>0?a:i;if(l.length!==1||!qa(l[0]))return{kind:"known-unpriced",id:e};let c=l[0];s.offers=[c,...s.offers.filter(d=>d.route!==c.route)],s.id=c.sourceModelId}let o=s.offers.find(qa);return o===void 0?{kind:"known-unpriced",id:e}:o.estimated?{kind:"estimated",model:s}:{kind:"priced",model:s}}function KC(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function YC(t,e,n){let r=t.standard_slug;if(e===null||e.catalog_record_id===null)return{kind:"known-unpriced",id:r};let s=e.catalog_record_id,o=u=>u.record_id??u.source+":"+u.source_model_id,i=n.records.find(u=>o(u)===s),a=i?[]:n.records.filter(u=>o(u).toLowerCase()===s.toLowerCase()),l=i??(a.length===1?a[0]:void 0);if(!l)return{kind:"known-unpriced",id:r};let c=jr(l),d=n.records.filter(u=>jr(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:ku(d,c,Au)}function Fy(t,e,n,r){if(n===null||!Array.isArray(n.records))return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};if(r!==null){let _=[e.trim().toLowerCase()];_.push(`${t.toLowerCase()}/${_[0]}`);let h=r.aliases.find(g=>_.includes(g.alias.toLowerCase()));if(h){if(h.evidence==="unresolved"||h.standard_slug===null)return{state:{kind:"unresolved",alias:h.alias},viaAlias:!0,pinRoute:null};let g=KC(r,h.standard_slug);return{state:YC(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=Qt[t];if(!s)return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};let o=e.trim().toLowerCase(),i=s.normalize(e),a=_=>({state:_,viaAlias:!1,pinRoute:null}),l=Zn(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=jr(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&jr(g)===_);return a(ku(h.length>0?h:c,_,Ry[t]??Au,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=qC(e,n,t);return _.length>0?a({kind:"wrong-provider",declared:e,otherProviders:_}):a({kind:"unknown",declared:e})}let u=new Map;for(let _ of d){let h=jr(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=Ry[t]??Au,m=null,p=null;for(let _ of u.values()){let h=Uy(_,f);(p===null||zC(h[0],p[0],f)<0)&&(m=_,p=h)}return a(ku(m,jr(m[0]),f,t==="codex"?"openai":void 0))}function Ga(t,e,n,r){return Fy(t,e,n,r).state}function wt(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=Fy(t,e,n,r);if(s.kind!=="priced"&&s.kind!=="estimated")return{state:s,offer:null,provenance:null};let a=s.model.offers;if(o&&i!==null){let c=a.find(d=>d.route===i)??a.find(d=>d.route.toLowerCase()===i.toLowerCase());if(c!==void 0&&qa(c))return{state:s,offer:c,provenance:"alias-pin"}}let l=a.find(qa)??null;return{state:s,offer:l,provenance:o&&i!==null?"alias-pin":"route-preference"}}function jy(t,e){let n=Qt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(jr(s));return r.size}function zC(t,e,n){let r=Xa(t.source)-Xa(e.source);if(r!==0)return r;let s=t.provider!==null&&n.includes(t.provider)?0:1,o=e.provider!==null&&n.includes(e.provider)?0:1;return s!==o?s-o:t.sourceModelId.localeCompare(e.sourceModelId)}var Ly,xy,Cy,Oy,Dy,My,HC,BC,$y,Qt,Ry,Au,Hr=x(()=>{"use strict";Ly=Wr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),xy=Wr({vendorPrefixes:["openai"],family:/(^|\/)(gpt-|o\d|chatgpt|ft:gpt)|openai\//,firstPartyProviders:["openai"],nonChatName:/(^|[-/])(tts|transcribe(?:-\w+)?|realtime(?:-\w+)?|search(?:-\w+)*|image(?:-\w+)?|audio(?:-\w+)?|whisper(?:-\w+)?|dall-e(?:-\w+)?|embedding|moderation)(-|$)/}),Cy=Wr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),Oy=Wr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),Dy=Wr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),My=Wr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),HC=["gemini","google","vertex_ai-language-models","anthropic"],BC={normalize(t){let n=t.trim().toLowerCase().replace(/-(low|medium|high)$/,"");return[Zn(n)]},isChatModel(t){return t.mode===void 0||t.mode===null||t.mode==="chat"},coversRecord(t){return this.isChatModel(t)&&typeof t.native?.agy=="string"},matchRow(t,e){return this.coversRecord(t)?e.includes(Zn(t.native.agy)):!1}},$y=Wr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),Qt={claude:Ly,codex:xy,gemini:Cy,agy:BC,kimi:Oy,qwen:Dy,hermes:My,deepseek:$y},Ry={claude:Ly.firstPartyProviders,codex:xy.firstPartyProviders,gemini:Cy.firstPartyProviders,agy:HC,kimi:Oy.firstPartyProviders,qwen:Dy.firstPartyProviders,hermes:My.firstPartyProviders,deepseek:$y.firstPartyProviders};Au=[]});import{randomUUID as QC}from"node:crypto";function Va(t){return{startedAt:new Date().toISOString(),attempt_key:QC(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function Ls(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function Jo(t,e,n=async()=>({catalog:null,aliases:null,source:"unavailable",generatedAt:null}),r){let s={...t,ended_at:new Date().toISOString(),turn_outcome:e.status,native_session_id:e.sessionId||t.native_session_id||null};try{let o=["claude","codex","muse","dsh"].includes(t.provider)||$a.includes(t.provider)&&e.usage?.source==="wire"?e.usage:r&&$a.includes(t.provider)?await uy(t,e.sessionId||String(t.native_session_id??""),String(s.ended_at),r):void 0;if(e.status!=="cancelled"&&(o?.outcome==="cancelled"||o?.outcome==="error")&&(s.turn_outcome=o.outcome),!o||o.source===null)return s.usage_source=null,s.usage_reason=t.provider==="ClaudeMock"?"mock_estimate":s.turn_outcome!=="ok"?"turn_not_completed":["copilot","hermes"].includes(t.provider)?"session_totals_only":"native_record_missing",s.cost_reason="usage_unavailable",s;if(Object.assign(s,{usage_source:o.source,usage_reason:o.reason,tok_input_uncached:In(o.inputUncached),tok_cache_read:In(o.cacheRead),tok_cache_write:In(o.cacheWrite),tok_output:In(o.output),tok_reasoning:In(o.reasoning),model_reported:o.modelReported,provider_cost_usd:ZC(o.providerCostUsd)}),o.invalidCounters||Yt([o.inputUncached,o.cacheRead,o.cacheWrite,o.output,o.reasoning]))return s.usage_reason="counter_not_exposed",s.cost_reason="usage_unavailable",s;if(o.mixedModels)return s.cost_reason="mixed_models",s.model_reported=null,s;let i=o.modelReported||t.model_requested;if(!i)return s.cost_reason="model_unknown",s;let a,l=await Promise.race([n(),new Promise(p=>{a=setTimeout(()=>p(null),1e3)})]).finally(()=>{a&&clearTimeout(a)});if(!l||!l.catalog)return s.cost_reason="price_data_unavailable",s;let c=wt(t.provider,i,l.catalog,l.aliases);if(!c.offer)return s.cost_reason=c.state.kind==="unresolved"?"model_unresolved":c.state.kind==="unknown"||c.state.kind==="wrong-provider"?"model_unknown":"model_unpriced",s;let d=l.catalog.records.find(p=>(p.record_id??p.source+":"+p.source_model_id)===c.offer.route),u=c.offer.pricing,f={input:In(o.inputUncached)??0,output:In(o.output)??0,cachedInput:In(o.cacheRead)??0,cacheWrite:In(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=Go(f,u);return Object.assign(s,{price_record_id:d?.record_id??null,price_snapshot_sha256:l.sha256??null,rate_input_1m:m.inputPer1m,rate_output_1m:m.outputPer1m,rate_cache_read_1m:m.cacheReadPer1m,rate_cache_write_1m:m.cacheWritePer1m}),s.cost_reason=Vo(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Br(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Pa,s));if(!r.length)return;t.prepare(`UPDATE team_chat_log SET ${r.map(([s])=>`${s}=?`).join(",")} WHERE id=? AND ended_at IS NULL`).run(...r.map(([,s])=>s??null),e)}catch(r){for(let o of["usage_source","model_reported","tok_input_uncached","tok_cache_read","tok_cache_write","tok_output","tok_reasoning","price_record_id","price_snapshot_sha256","rate_input_1m","rate_output_1m","rate_cache_read_1m","rate_cache_write_1m","provider_cost_usd"])n[o]=null;n.usage_reason="recorder_failed",n.cost_reason="usage_unavailable";let s=r?.code??"";if(/^SQLITE_(?:BUSY|LOCKED)(?:_|$)/.test(s))return;try{t.prepare("UPDATE team_chat_log SET attempt_key=COALESCE(attempt_key,?),provider=COALESCE(provider,?),native_session_id=COALESCE(native_session_id,?),cwd=COALESCE(cwd,?),model_requested=COALESCE(model_requested,?),ended_at=COALESCE(ended_at,?),turn_outcome=COALESCE(turn_outcome,?),usage_reason='recorder_failed',cost_reason='usage_unavailable' WHERE id=? AND ended_at IS NULL").run(n.attempt_key??null,n.provider??null,n.native_session_id??null,n.cwd??null,n.model_requested??null,n.ended_at??null,n.turn_outcome??null,e)}catch{}}}var In,ZC,Ko=x(()=>{"use strict";fy();Xo();wu();zt();Hr();In=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,ZC=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var Wy,Hy=x(()=>{"use strict";Wy=`
43
+ `});import{createHash as vy}from"node:crypto";import{mkdirSync as Sy,readFileSync as SC,renameSync as bC,writeFileSync as IC,existsSync as by}from"node:fs";import{homedir as kC}from"node:os";import{dirname as Iy,join as Wa,resolve as Ha}from"node:path";import{fileURLToPath as AC}from"node:url";function CC(){return Wa(kC(),".lmctl","cache","lmprice")}function Ns(t,e){return Wa(t,e)}function Ba(t,e){if(!t||!e)return null;let n=qo.get(t),r=qo.get(e);return n===void 0||r===void 0?null:vy("sha256").update(n).update(r).digest("hex")}function Pr(t){try{let e=SC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&qo.set(n,e),n}catch{return null}}function Ay(t,e){let n=`${t}.tmp-${process.pid}`;IC(n,e),bC(n,t)}function vu(t){return t===null||typeof t=="number"}function Ur(t){if(typeof t!="object"||t===null)return!1;let e=t;return e.schema_version!==1||!Array.isArray(e.records)||e.records.length===0?!1:e.records.every(n=>{if(typeof n!="object"||n===null)return!1;let r=n;if(typeof r.source!="string"||typeof r.source_model_id!="string"||typeof r.pricing!="object"||r.pricing===null)return!1;let s=r.pricing;if(r.native!==void 0){if(typeof r.native!="object"||r.native===null||Array.isArray(r.native))return!1;let o=r.native;if(Object.keys(o).some(i=>!["codex","agy","claude_code","kimi"].includes(i))||Object.values(o).some(i=>typeof i!="string"||i.length===0||i.trim()!==i))return!1}return vu(s.input_per_1m_tokens)&&vu(s.output_per_1m_tokens)&&vu(s.input_cache_read_per_1m_tokens)})}function Fr(t){if(typeof t!="object"||t===null)return!1;let e=t;if(e.schema_version!==1||!Array.isArray(e.standards)||!Array.isArray(e.aliases))return!1;let n=e.standards.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.standard_slug=="string"&&(o.catalog_record_id===null||typeof o.catalog_record_id=="string")}),r=e.aliases.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.alias=="string"&&(o.standard_slug===null||typeof o.standard_slug=="string")&&typeof o.evidence=="string"&&DC.has(o.evidence)});return n&&r}function MC(t){let e=Pr(Ns(t,ky)),n={etag:typeof e?.model_list?.etag=="string"?e.model_list.etag:null,last_checked:typeof e?.model_list?.last_checked=="string"?e.model_list.last_checked:null},r={etag:typeof e?.aliases?.etag=="string"?e.aliases.etag:null,last_checked:typeof e?.aliases?.last_checked=="string"?e.aliases.last_checked:null};if(e===null){let s=Pr(Ns(t,OC));s&&(n.etag=typeof s.etag=="string"?s.etag:null,n.last_checked=typeof s.fetchedAt=="string"?s.fetchedAt:null)}return{model_list:n,aliases:r,...typeof e?.pair_sha256=="string"?{pair_sha256:e.pair_sha256}:{}}}function $C(t){let e=MC(t),n=Pr(Ns(t,Fa)),r=Pr(Ns(t,ja));return e.pair_sha256&&Ba(Ur(n)?n:null,Fr(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{...hy},aliases:{...hy}}}:{catalog:Ur(n)?n:null,aliases:Fr(r)?r:null,meta:e}}function _y(t,e){try{return Sy(t,{recursive:!0}),Ay(Ns(t,ky),JSON.stringify(e)),!0}catch{return!1}}function Su(t){return(t&&typeof t=="object"?qo.get(t):void 0)??JSON.stringify(t)}function Ua(t,e,n){try{Sy(t,{recursive:!0}),Ay(Ns(t,e),Su(n))}catch{}}function PC(t,e){let n=UC(t),r=n?[Ha(n,"data",e)]:[Ha(t,"..","..","data",e)];for(let s of r)if(by(s))return s;return null}function UC(t){let e=Ha(t);for(;;){if(by(Ha(e,"package.json")))return e;let n=Iy(e);if(n===e)return null;e=n}}function gy(t,e,n){let r=n!==void 0?n:PC(t,e);return r===null?null:Pr(r)}function Rs(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return py;let n=Number(e);return!Number.isFinite(n)||n<0?py:n*1e3}function FC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function yy(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout(LC)});if(!s.ok)return{kind:"failed"};let o=s.headers.get("etag");if(n!==null&&o!==null&&o===r)return{kind:"match"};let i=await t(e,{signal:AbortSignal.timeout(xC)});if(!i.ok)return{kind:"failed"};let a=await i.text(),l=JSON.parse(a);return l&&typeof l=="object"&&qo.set(l,a),{kind:"payload",payload:l,etag:i.headers.get("etag")??o}}catch{return{kind:"failed"}}}function Tt(t={}){return Object.keys(t).length===0?(Ey??=Ty(t),Ey):Ty(t)}async function Ty(t){let e=Iy(AC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:FC();if(n!==null&&n!==""){let _=Pr(Wa(n,Fa)),h=Pr(Wa(n,ja));if(Ur(_)&&Fr(h)){let g={sha256:Ba(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return bu=g.generatedAt,g}return wy(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??CC(),o=t.now??Date.now(),i=t.ttlMs??Rs(),a=$C(s),l=(_,h)=>_!==null&&h.last_checked!==null&&o>=Date.parse(h.last_checked)&&o-Date.parse(h.last_checked)<i,c=a.catalog,d=a.aliases,u=!1,f=!1,m={model_list:{...a.meta.model_list},aliases:{...a.meta.aliases}},p=!1;if(!l(c,a.meta.model_list)){let _=await yy(r,NC,c,a.meta.model_list.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.model_list.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Ur(_.payload)?(m.model_list.last_checked=new Date(o).toISOString(),p=!0,c=_.payload,_.etag!==null&&(m.model_list.etag=_.etag),u=!0):f=!0)}if(!l(d,a.meta.aliases)){let _=await yy(r,RC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Fr(_.payload)?(m.aliases.last_checked=new Date(o).toISOString(),p=!0,d=_.payload,_.etag!==null&&(m.aliases.etag=_.etag),u=!0):f=!0)}if(!f&&(p||u))if(c!==null&&d!==null){let _=vy("sha256").update(Su(c)).update(Su(d)).digest("hex");_y(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Ua(s,Fa,c),Ua(s,ja,d))}else c!==a.catalog&&c!==null&&Ua(s,Fa,c),d!==a.aliases&&d!==null&&Ua(s,ja,d),_y(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ba(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return bu=_.generatedAt,_}return{...wy(t,e),refreshFailed:f}}function wy(t,e){let n=gy(e,"price-data.json",t.bundledPath),r=gy(e,"price-aliases.json",t.bundledAliasesPath),s=Ur(n)?n:null,o=Fr(r)?r:null,i={catalog:s,aliases:o,sha256:Ba(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return bu=i.generatedAt,i}function Ny(t){if(t.cacheWrite!==void 0)return As(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=As(t.cacheWrite5m),n=As(t.cacheWrite1h);return e===null||n===null?null:As(e+n)}function Iu(t,e){let n=As(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=As(t.cacheWrite1h===void 0?0:t.cacheWrite1h);return n!==null&&r!==null&&Number.isSafeInteger(n+r)&&n+r===e?{five:n,one:r}:null}function Go(t,e){let n=ks(e.input_per_1m_tokens),r=ks(e.output_per_1m_tokens),s=ks(e.input_cache_read_per_1m_tokens),o=ks(e.source_cost_fields?.cache_creation_input_token_cost),i=ks(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=ks(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Ny(t),d=Iu(t,c),u=c===null?null:d===null||c===0?i:d.five>0&&i===null||d.one>0&&l===null?null:(d.five*(i??0)+d.one*(l??0))/c;return{inputPer1m:n,outputPer1m:r,cacheReadPer1m:s,cacheWritePer1m:u}}function Vo(t,e){if(e===null)return null;let n=Go(t,e),r=Ny(t);if(r===null||t.input>0&&n.inputPer1m===null||t.output>0&&n.outputPer1m===null||t.cachedInput>0&&n.cacheReadPer1m===null||r>0&&n.cacheWritePer1m===null)return null;let s=(t.input*(n.inputPer1m??0)+t.output*(n.outputPer1m??0)+t.cachedInput*(n.cacheReadPer1m??0)+r*(n.cacheWritePer1m??0))/1e6;return Number(s.toPrecision(10))}var NC,RC,LC,xC,py,Fa,ja,ky,OC,qo,DC,hy,bu,Ey,ks,As,zt=x(()=>{"use strict";NC="https://lmctl.com/dataset/model_list.json",RC="https://lmctl.com/dataset/aliases.json",LC=1e3,xC=1e4,py=6*60*60*1e3;Fa="model_list.json",ja="aliases.json",ky="meta.json",OC="model_list.meta.json";qo=new WeakMap;DC=new Set(["established","asserted","unresolved"]);hy={etag:null,last_checked:null};bu=null,Ey=null;ks=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,As=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Zn(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function jr(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return Zn(n)}function jC(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(Zn(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function WC(t,e){let n=new Set,r=l=>{n.add(Zn(l))},s=t.trim().toLowerCase(),o=null,i=s.indexOf(":");i>0&&!s.slice(0,i).includes("/")&&(o=s.slice(0,i),r(s),s=s.slice(i+1)),r(s);let a=s.slice(s.lastIndexOf("/")+1);r(a);for(let l of e)r(`${l}/${a}`);return o!==null&&r(`${o}/${a}`),[...n]}function Wr(t){let e=r=>!(r.mode!==void 0&&r.mode!==null&&r.mode!=="chat"||t.nonChatName&&t.nonChatName.test(r.source_model_id.toLowerCase())),n=r=>e(r)&&t.family.test(r.source_model_id.toLowerCase());return{firstPartyProviders:t.firstPartyProviders,isChatModel:e,coversRecord:n,normalize:r=>WC(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=jC(r);return s.some(i=>o.has(i))}}}function XC(t,e,n){let r=e.trim().toLowerCase(),s=Zn(r);if(n.records.some(i=>i.source_model_id.toLowerCase()===r&&t.matchRow(i,[s])))return!0;let o=t.normalize(e);return o.length>0&&n.records.some(i=>t.matchRow(i,o))}function qC(t,e,n){let r=[];for(let[s,o]of Object.entries(Qt))s!==n&&XC(o,t,e)&&r.push(s);return r}function Xa(t){return t==="moonshot"?0:t==="litellm"?1:t==="openrouter"?2:t==="manual"?3:4}function GC(t,e){return t.input_per_1m_tokens===e.input_per_1m_tokens&&t.output_per_1m_tokens===e.output_per_1m_tokens&&t.input_cache_read_per_1m_tokens===e.input_cache_read_per_1m_tokens&&(t.input_cache_write_per_1m_tokens??null)===(e.input_cache_write_per_1m_tokens??null)&&(t.source_cost_fields?.cache_creation_input_token_cost??null)===(e.source_cost_fields?.cache_creation_input_token_cost??null)&&(t.source_cost_fields?.cache_creation_input_token_cost_above_1hr??null)===(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr??null)}function VC(t){let e=new Map,n=[];for(let r of t){let s=r.source_model_id.toLowerCase(),o=s.lastIndexOf("/"),i=o===-1?"":s.slice(0,o+1),a=o===-1?s:s.slice(o+1),l=`${r.source}:${i}${Zn(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!GC(c.pricing,r.pricing)){n.push(r);continue}/\d\.\d/.test(c.source_model_id)&&!/\d\.\d/.test(r.source_model_id)&&e.set(l,r)}return[...e.values(),...n]}function Py(t){return{route:t.record_id??`${t.source}:${t.source_model_id}`,source:t.source,sourceModelId:t.source_model_id,provider:t.provider??null,pricing:t.pricing,estimated:t.source==="manual"}}function Uy(t,e){return t.map(Py).sort((n,r)=>{let s=Xa(n.source)-Xa(r.source);if(s!==0)return s;let o=n.provider!==null&&e.includes(n.provider)?0:1,i=r.provider!==null&&e.includes(r.provider)?0:1;return o!==i?o-i:n.sourceModelId.localeCompare(r.sourceModelId)})}function qa(t){return t.pricing.input_per_1m_tokens!==null&&t.pricing.output_per_1m_tokens!==null}function JC(t,e,n){let r=VC(t),s=Uy(r,n),i=r.find(a=>(a.record_id??`${a.source}:${a.source_model_id}`)===s[0].route)?.context_window?.input_tokens??void 0;return{id:s[0].sourceModelId,normalizedId:e,offers:s,...i!=null?{contextWindow:i}:{}}}function ku(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=JC(t,e,n);if(r!==void 0){let i=t.map(Py),a=i.filter(d=>d.provider===r&&!d.sourceModelId.includes("/")&&d.source!=="openrouter"&&!d.estimated),l=a.length>0?a:i;if(l.length!==1||!qa(l[0]))return{kind:"known-unpriced",id:e};let c=l[0];s.offers=[c,...s.offers.filter(d=>d.route!==c.route)],s.id=c.sourceModelId}let o=s.offers.find(qa);return o===void 0?{kind:"known-unpriced",id:e}:o.estimated?{kind:"estimated",model:s}:{kind:"priced",model:s}}function KC(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function YC(t,e,n){let r=t.standard_slug;if(e===null||e.catalog_record_id===null)return{kind:"known-unpriced",id:r};let s=e.catalog_record_id,o=u=>u.record_id??u.source+":"+u.source_model_id,i=n.records.find(u=>o(u)===s),a=i?[]:n.records.filter(u=>o(u).toLowerCase()===s.toLowerCase()),l=i??(a.length===1?a[0]:void 0);if(!l)return{kind:"known-unpriced",id:r};let c=jr(l),d=n.records.filter(u=>jr(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:ku(d,c,Au)}function Fy(t,e,n,r){if(n===null||!Array.isArray(n.records))return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};if(r!==null){let _=[e.trim().toLowerCase()];_.push(`${t.toLowerCase()}/${_[0]}`);let h=r.aliases.find(g=>_.includes(g.alias.toLowerCase()));if(h){if(h.evidence==="unresolved"||h.standard_slug===null)return{state:{kind:"unresolved",alias:h.alias},viaAlias:!0,pinRoute:null};let g=KC(r,h.standard_slug);return{state:YC(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=Qt[t];if(!s)return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};let o=e.trim().toLowerCase(),i=s.normalize(e),a=_=>({state:_,viaAlias:!1,pinRoute:null}),l=Zn(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=jr(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&jr(g)===_);return a(ku(h.length>0?h:c,_,Ry[t]??Au,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=qC(e,n,t);return _.length>0?a({kind:"wrong-provider",declared:e,otherProviders:_}):a({kind:"unknown",declared:e})}let u=new Map;for(let _ of d){let h=jr(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=Ry[t]??Au,m=null,p=null;for(let _ of u.values()){let h=Uy(_,f);(p===null||zC(h[0],p[0],f)<0)&&(m=_,p=h)}return a(ku(m,jr(m[0]),f,t==="codex"?"openai":void 0))}function Ga(t,e,n,r){return Fy(t,e,n,r).state}function wt(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=Fy(t,e,n,r);if(s.kind!=="priced"&&s.kind!=="estimated")return{state:s,offer:null,provenance:null};let a=s.model.offers;if(o&&i!==null){let c=a.find(d=>d.route===i)??a.find(d=>d.route.toLowerCase()===i.toLowerCase());if(c!==void 0&&qa(c))return{state:s,offer:c,provenance:"alias-pin"}}let l=a.find(qa)??null;return{state:s,offer:l,provenance:o&&i!==null?"alias-pin":"route-preference"}}function jy(t,e){let n=Qt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(jr(s));return r.size}function zC(t,e,n){let r=Xa(t.source)-Xa(e.source);if(r!==0)return r;let s=t.provider!==null&&n.includes(t.provider)?0:1,o=e.provider!==null&&n.includes(e.provider)?0:1;return s!==o?s-o:t.sourceModelId.localeCompare(e.sourceModelId)}var Ly,xy,Cy,Oy,Dy,My,HC,BC,$y,Qt,Ry,Au,Hr=x(()=>{"use strict";Ly=Wr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),xy=Wr({vendorPrefixes:["openai"],family:/(^|\/)(gpt-|o\d|chatgpt|ft:gpt)|openai\//,firstPartyProviders:["openai"],nonChatName:/(^|[-/])(tts|transcribe(?:-\w+)?|realtime(?:-\w+)?|search(?:-\w+)*|image(?:-\w+)?|audio(?:-\w+)?|whisper(?:-\w+)?|dall-e(?:-\w+)?|embedding|moderation)(-|$)/}),Cy=Wr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),Oy=Wr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),Dy=Wr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),My=Wr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),HC=["gemini","google","vertex_ai-language-models","anthropic"],BC={normalize(t){let n=t.trim().toLowerCase().replace(/-(low|medium|high)$/,"");return[Zn(n)]},isChatModel(t){return t.mode===void 0||t.mode===null||t.mode==="chat"},coversRecord(t){return this.isChatModel(t)&&typeof t.native?.agy=="string"},matchRow(t,e){return this.coversRecord(t)?e.includes(Zn(t.native.agy)):!1}},$y=Wr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),Qt={claude:Ly,codex:xy,gemini:Cy,agy:BC,kimi:Oy,qwen:Dy,hermes:My,deepseek:$y},Ry={claude:Ly.firstPartyProviders,codex:xy.firstPartyProviders,gemini:Cy.firstPartyProviders,agy:HC,kimi:Oy.firstPartyProviders,qwen:Dy.firstPartyProviders,hermes:My.firstPartyProviders,deepseek:$y.firstPartyProviders};Au=[]});import{randomUUID as QC}from"node:crypto";function Va(t){return{startedAt:new Date().toISOString(),attempt_key:QC(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function Ls(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function Jo(t,e,n=async()=>({catalog:null,aliases:null,source:"unavailable",generatedAt:null}),r){let s={...t,ended_at:new Date().toISOString(),turn_outcome:e.status,native_session_id:e.sessionId||t.native_session_id||null};try{let o=["claude","codex","muse","dsh"].includes(t.provider)||$a.includes(t.provider)&&e.usage?.source==="wire"?e.usage:r&&$a.includes(t.provider)?await uy(t,e.sessionId||String(t.native_session_id??""),String(s.ended_at),r):void 0;if(e.status!=="cancelled"&&(o?.outcome==="cancelled"||o?.outcome==="error")&&(s.turn_outcome=o.outcome),!o||o.source===null)return s.usage_source=null,s.usage_reason=t.provider==="ClaudeMock"?"mock_estimate":s.turn_outcome!=="ok"?"turn_not_completed":["copilot","hermes"].includes(t.provider)?"session_totals_only":"native_record_missing",s.cost_reason="usage_unavailable",s;if(Object.assign(s,{usage_source:o.source,usage_reason:o.reason,tok_input_uncached:bn(o.inputUncached),tok_cache_read:bn(o.cacheRead),tok_cache_write:bn(o.cacheWrite),tok_output:bn(o.output),tok_reasoning:bn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:ZC(o.providerCostUsd)}),o.invalidCounters||Yt([o.inputUncached,o.cacheRead,o.cacheWrite,o.output,o.reasoning]))return s.usage_reason="counter_not_exposed",s.cost_reason="usage_unavailable",s;if(o.mixedModels)return s.cost_reason="mixed_models",s.model_reported=null,s;let i=o.modelReported||t.model_requested;if(!i)return s.cost_reason="model_unknown",s;let a,l=await Promise.race([n(),new Promise(p=>{a=setTimeout(()=>p(null),1e3)})]).finally(()=>{a&&clearTimeout(a)});if(!l||!l.catalog)return s.cost_reason="price_data_unavailable",s;let c=wt(t.provider,i,l.catalog,l.aliases);if(!c.offer)return s.cost_reason=c.state.kind==="unresolved"?"model_unresolved":c.state.kind==="unknown"||c.state.kind==="wrong-provider"?"model_unknown":"model_unpriced",s;let d=l.catalog.records.find(p=>(p.record_id??p.source+":"+p.source_model_id)===c.offer.route),u=c.offer.pricing,f={input:bn(o.inputUncached)??0,output:bn(o.output)??0,cachedInput:bn(o.cacheRead)??0,cacheWrite:bn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=Go(f,u);return Object.assign(s,{price_record_id:d?.record_id??null,price_snapshot_sha256:l.sha256??null,rate_input_1m:m.inputPer1m,rate_output_1m:m.outputPer1m,rate_cache_read_1m:m.cacheReadPer1m,rate_cache_write_1m:m.cacheWritePer1m}),s.cost_reason=Vo(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Br(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Pa,s));if(!r.length)return;t.prepare(`UPDATE team_chat_log SET ${r.map(([s])=>`${s}=?`).join(",")} WHERE id=? AND ended_at IS NULL`).run(...r.map(([,s])=>s??null),e)}catch(r){for(let o of["usage_source","model_reported","tok_input_uncached","tok_cache_read","tok_cache_write","tok_output","tok_reasoning","price_record_id","price_snapshot_sha256","rate_input_1m","rate_output_1m","rate_cache_read_1m","rate_cache_write_1m","provider_cost_usd"])n[o]=null;n.usage_reason="recorder_failed",n.cost_reason="usage_unavailable";let s=r?.code??"";if(/^SQLITE_(?:BUSY|LOCKED)(?:_|$)/.test(s))return;try{t.prepare("UPDATE team_chat_log SET attempt_key=COALESCE(attempt_key,?),provider=COALESCE(provider,?),native_session_id=COALESCE(native_session_id,?),cwd=COALESCE(cwd,?),model_requested=COALESCE(model_requested,?),ended_at=COALESCE(ended_at,?),turn_outcome=COALESCE(turn_outcome,?),usage_reason='recorder_failed',cost_reason='usage_unavailable' WHERE id=? AND ended_at IS NULL").run(n.attempt_key??null,n.provider??null,n.native_session_id??null,n.cwd??null,n.model_requested??null,n.ended_at??null,n.turn_outcome??null,e)}catch{}}}var bn,ZC,Ko=x(()=>{"use strict";fy();Xo();wu();zt();Hr();bn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,ZC=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var Wy,Hy=x(()=>{"use strict";Wy=`
44
44
  CREATE TABLE IF NOT EXISTS price_snapshot (
45
45
  sha256 TEXT PRIMARY KEY,
46
46
  generated_at TEXT,
@@ -102,7 +102,7 @@ CREATE TABLE IF NOT EXISTS price_alias (
102
102
  cwd, command, request_message_id, request_payload, holder_pid, holder_host, status, started_at, last_seq)
103
103
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', ?, ?)
104
104
  ON CONFLICT(invocation_id) DO NOTHING`).run(n,s.kind??"chat",s.origin??"unknown",s.launch_source??"",s.from_identity??"",Le(s,"target","teamfile"),Le(s,"target","alias"),s.root_teamfile??null,s.cwd??null,s.command??null,s.request_message_id??null,s.request_payload??null,s.holder_pid??null,s.holder_host??null,s.started_at??"",e);break;case ie.INVOCATION_FINISH:t.prepare(`UPDATE invocation_state SET status=?, ended_at=?, result_summary=?, error=?, last_seq=?
105
- WHERE invocation_id=?`).run(s.status??"done",s.ended_at??null,s.result_summary??null,s.error??null,e,n);break;case ie.INVOCATION_NOTIFY_CLAIM:t.prepare("UPDATE invocation_state SET notified_by=?, notified_at=?, last_seq=? WHERE invocation_id=?").run(s.notified_by??null,s.notified_at??null,e,n);break;default:break}}var ie,Ru=x(()=>{"use strict";jd();Ja();ie={CREATE:"CREATE",ENQUEUE:"ENQUEUE",DELIVER_CLAIM:"DELIVER_CLAIM",DELIVER_CLAIM_RELEASE:"DELIVER_CLAIM_RELEASE",DELIVERED:"DELIVERED",HANDLED:"HANDLED",WAIT_REGISTER:"WAIT_REGISTER",RESPONSE_CREATE:"RESPONSE_CREATE",RESPONSE_ENQUEUE:"RESPONSE_ENQUEUE",RESPONSE_DELIVERED:"RESPONSE_DELIVERED",INFLIGHT_TAKE:"INFLIGHT_TAKE",INFLIGHT_RELEASE:"INFLIGHT_RELEASE",INFLIGHT_RECLAIM:"INFLIGHT_RECLAIM",TERMINAL_LOCK_TAKE:"TERMINAL_LOCK_TAKE",TERMINAL_LOCK_RELEASE:"TERMINAL_LOCK_RELEASE",TERMINAL_LOCK_EXPIRE:"TERMINAL_LOCK_EXPIRE",INVOCATION_START:"INVOCATION_START",INVOCATION_FINISH:"INVOCATION_FINISH",INVOCATION_NOTIFY_CLAIM:"INVOCATION_NOTIFY_CLAIM"}});var Zy={};me(Zy,{CURRENT_USER_VERSION:()=>bn,SchemaSkewError:()=>jt,_resetNewerSchemaWarningForTests:()=>TO,currentSchemaSkew:()=>wO,migrate:()=>zo});import{existsSync as cO,mkdirSync as dO,readFileSync as Jy}from"node:fs";import{randomUUID as uO}from"node:crypto";import{homedir as fO}from"node:os";import{dirname as Ky,join as mO,resolve as Yy}from"node:path";import{fileURLToPath as pO,pathToFileURL as hO}from"node:url";function zo(t){t.dbPath!==":memory:"&&dO(Ky(t.dbPath),{recursive:!0});let e=new xr(t.dbPath);try{e.pragma("journal_mode = WAL"),e.pragma("synchronous = NORMAL"),e.pragma("foreign_keys = ON");let n=Yo(e),r=t.buildVersionForTests??bn,s=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(n>r)return qy(e,t.dbPath,r,s),e;if(n===bn)return Gy(e),e;let o=n>0&&n<47;o&&e.pragma("foreign_keys = OFF");try{e.transaction(()=>{let i=Yo(e);i>r&&qy(e,t.dbPath,r,s)||(i===0&&(e.exec(Jy(Qy,"utf8")),e.pragma("user_version = "+bn)),i>0&&i<63&&e.exec("DROP VIEW IF EXISTS turn_usage"),gO(e,i),Gy(e))}).immediate()}finally{o&&e.pragma("foreign_keys = ON")}return e}catch(n){try{e.close()}catch{}throw n}}function qy(t,e,n,r){return t.transaction(()=>{let s=Yo(t);if(s<=n)return!1;let o=yO(t,s);if(xu={dbVersion:s,buildVersion:n},o>n&&!r)throw new jt(e,s,n);return o>n&&EO(e,s,n),!0})()}function gO(t,e){let n=e;if(n<2&&n!==0&&(t.exec(`
105
+ WHERE invocation_id=?`).run(s.status??"done",s.ended_at??null,s.result_summary??null,s.error??null,e,n);break;case ie.INVOCATION_NOTIFY_CLAIM:t.prepare("UPDATE invocation_state SET notified_by=?, notified_at=?, last_seq=? WHERE invocation_id=?").run(s.notified_by??null,s.notified_at??null,e,n);break;default:break}}var ie,Ru=x(()=>{"use strict";jd();Ja();ie={CREATE:"CREATE",ENQUEUE:"ENQUEUE",DELIVER_CLAIM:"DELIVER_CLAIM",DELIVER_CLAIM_RELEASE:"DELIVER_CLAIM_RELEASE",DELIVERED:"DELIVERED",HANDLED:"HANDLED",WAIT_REGISTER:"WAIT_REGISTER",RESPONSE_CREATE:"RESPONSE_CREATE",RESPONSE_ENQUEUE:"RESPONSE_ENQUEUE",RESPONSE_DELIVERED:"RESPONSE_DELIVERED",INFLIGHT_TAKE:"INFLIGHT_TAKE",INFLIGHT_RELEASE:"INFLIGHT_RELEASE",INFLIGHT_RECLAIM:"INFLIGHT_RECLAIM",TERMINAL_LOCK_TAKE:"TERMINAL_LOCK_TAKE",TERMINAL_LOCK_RELEASE:"TERMINAL_LOCK_RELEASE",TERMINAL_LOCK_EXPIRE:"TERMINAL_LOCK_EXPIRE",INVOCATION_START:"INVOCATION_START",INVOCATION_FINISH:"INVOCATION_FINISH",INVOCATION_NOTIFY_CLAIM:"INVOCATION_NOTIFY_CLAIM"}});var Zy={};me(Zy,{CURRENT_USER_VERSION:()=>In,SchemaSkewError:()=>jt,_resetNewerSchemaWarningForTests:()=>TO,currentSchemaSkew:()=>wO,migrate:()=>zo});import{existsSync as cO,mkdirSync as dO,readFileSync as Jy}from"node:fs";import{randomUUID as uO}from"node:crypto";import{homedir as fO}from"node:os";import{dirname as Ky,join as mO,resolve as Yy}from"node:path";import{fileURLToPath as pO,pathToFileURL as hO}from"node:url";function zo(t){t.dbPath!==":memory:"&&dO(Ky(t.dbPath),{recursive:!0});let e=new xr(t.dbPath);try{e.pragma("journal_mode = WAL"),e.pragma("synchronous = NORMAL"),e.pragma("foreign_keys = ON");let n=Yo(e),r=t.buildVersionForTests??In,s=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(n>r)return qy(e,t.dbPath,r,s),e;if(n===In)return Gy(e),e;let o=n>0&&n<47;o&&e.pragma("foreign_keys = OFF");try{e.transaction(()=>{let i=Yo(e);i>r&&qy(e,t.dbPath,r,s)||(i===0&&(e.exec(Jy(Qy,"utf8")),e.pragma("user_version = "+In)),i>0&&i<63&&e.exec("DROP VIEW IF EXISTS turn_usage"),gO(e,i),Gy(e))}).immediate()}finally{o&&e.pragma("foreign_keys = ON")}return e}catch(n){try{e.close()}catch{}throw n}}function qy(t,e,n,r){return t.transaction(()=>{let s=Yo(t);if(s<=n)return!1;let o=yO(t,s);if(xu={dbVersion:s,buildVersion:n},o>n&&!r)throw new jt(e,s,n);return o>n&&EO(e,s,n),!0})()}function gO(t,e){let n=e;if(n<2&&n!==0&&(t.exec(`
106
106
  CREATE TABLE IF NOT EXISTS session_size (
107
107
  id INTEGER PRIMARY KEY AUTOINCREMENT,
108
108
  team_name TEXT NOT NULL,
@@ -945,7 +945,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
945
945
  ALTER TABLE team_chat_log_v46 RENAME TO team_chat_log;
946
946
  `)}finally{t.pragma("foreign_keys = ON")}}function Yo(t){let e=t.pragma("user_version",{simple:!0});return typeof e=="number"?e:0}function yO(t,e){try{if(!Lt(t,"schema_meta"))return e;let n=t.prepare("SELECT value FROM schema_meta WHERE key = 'min_reader_version'").get();if(n===void 0||typeof n.value!="string"||!/^\d+$/.test(n.value))return e;let r=Number(n.value);return Number.isSafeInteger(r)&&r>0?r:e}catch{return e}}function EO(t,e,n){Lu||(Lu=!0,process.stderr.write("warning: "+t+": this lmctl is too old for this database (database v"+e+"; build v"+n+`). --allow-schema-skew may hide newer data. Run: npm install -g @lmctl-ai/lmctl@latest. No manual database changes are needed.
947
947
  `),process.argv.includes("--json")&&process.stderr.write(`${JSON.stringify({schema_skew:{db_version:e,build_version:n,mode:"best_effort"}})}
948
- `))}function TO(){Lu=!1,xu=null}function wO(){return xu}function vO(){return process.env.LMCTL_DB??mO(fO(),".lmctl","state.db")}var zy,Qy,_O,bn,jt,Lu,xu,za=x(()=>{"use strict";wu();Hy();Ro();Ru();zy=Ky(pO(import.meta.url)),Qy=Yy(zy,"schema.sql"),_O=Yy(zy,"migrations"),bn=66,jt=class extends Error{dbPath;dbVersion;buildVersion;constructor(e,n,r=bn,s){super(e+": refusing to proceed: this lmctl is older than this database (database v"+n+"; build v"+r+"). "+(s?"Required database structure is unavailable: "+s.replace(/\s+/g," ")+". ":"")+"Run: npm install -g @lmctl-ai/lmctl@latest. No manual database changes are needed. --allow-schema-skew is a last resort and may hide newer data."),this.name="SchemaSkewError",this.dbPath=e,this.dbVersion=n,this.buildVersion=r}};Lu=!1;xu=null;if(process.argv[1]&&(process.argv[1].endsWith("migrate.ts")||process.argv[1].endsWith("migrate.js"))&&import.meta.url===hO(process.argv[1]).href)try{let t=zo({dbPath:process.argv[2]??vO()});try{process.stdout.write("migrated user_version="+Yo(t)+`
948
+ `))}function TO(){Lu=!1,xu=null}function wO(){return xu}function vO(){return process.env.LMCTL_DB??mO(fO(),".lmctl","state.db")}var zy,Qy,_O,In,jt,Lu,xu,za=x(()=>{"use strict";wu();Hy();Ro();Ru();zy=Ky(pO(import.meta.url)),Qy=Yy(zy,"schema.sql"),_O=Yy(zy,"migrations"),In=66,jt=class extends Error{dbPath;dbVersion;buildVersion;constructor(e,n,r=In,s){super(e+": refusing to proceed: this lmctl is older than this database (database v"+n+"; build v"+r+"). "+(s?"Required database structure is unavailable: "+s.replace(/\s+/g," ")+". ":"")+"Run: npm install -g @lmctl-ai/lmctl@latest. No manual database changes are needed. --allow-schema-skew is a last resort and may hide newer data."),this.name="SchemaSkewError",this.dbPath=e,this.dbVersion=n,this.buildVersion=r}};Lu=!1;xu=null;if(process.argv[1]&&(process.argv[1].endsWith("migrate.ts")||process.argv[1].endsWith("migrate.js"))&&import.meta.url===hO(process.argv[1]).href)try{let t=zo({dbPath:process.argv[2]??vO()});try{process.stdout.write("migrated user_version="+Yo(t)+`
949
949
  `)}finally{t.close()}}catch(t){if(!(t instanceof jt))throw t;process.stderr.write("error: "+t.message+`
950
950
  `),process.exitCode=1}});function eE(t){return{getAgentInflight:t.prepare("SELECT * FROM agent_inflight WHERE receiver_teamfile = ? AND receiver_alias = ?"),listAgentInflight:t.prepare("SELECT * FROM agent_inflight ORDER BY started_at ASC, receiver_teamfile ASC, receiver_alias ASC"),acquireAgentInflight:t.prepare(`
951
951
  INSERT INTO agent_inflight (receiver_teamfile, receiver_alias, sender_teamfile, sender_alias, started_at, active_count, holder_pid)
@@ -1208,7 +1208,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1208
1208
  AND started_at = ?
1209
1209
  AND last_heartbeat_at IS ?
1210
1210
  `)}}function xt(t){if(t==null)return null;if(Buffer.byteLength(t,"utf8")<=65536)return t;let n=Buffer.byteLength(nE,"utf8"),r=Math.max(0,65536-n),s=Buffer.from(t,"utf8"),o=r;for(;o>0&&(s[o]&192)===128;)o-=1;return`${s.subarray(0,o).toString("utf8")}${nE}`}var nE,sE=x(()=>{"use strict";nE=`
1211
- ...[truncated]`});function ei(t,e){return JSON.stringify([t,e])}function oE(t){try{let e=JSON.parse(t);return typeof e.lock_id!="string"||typeof e.teamfile!="string"||typeof e.alias!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||!Array.isArray(e.holder_ips)||!e.holder_ips.every(n=>typeof n=="string")||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,teamfile:e.teamfile,alias:e.alias,holder_pid:e.holder_pid,holder_host:e.holder_host,holder_ips:e.holder_ips,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}var Qo,Zo,iE=x(()=>{"use strict";Qo="terminal_lock",Zo="member"});function et(t){if(!Number.isInteger(t)||(t??0)<=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"}}var qr=x(()=>{"use strict"});import{hostname as xs}from"node:os";function Qa(t,e={}){let n=setInterval(()=>{Promise.resolve().then(()=>t(new Date().toISOString())).then(r=>{r||clearInterval(n)}).catch(r=>e.onError?.(r))},e.intervalMs??SO);return n.unref?.(),n}function tr(t,e){let n=new Date().toISOString(),r=new Date(Date.now()-e.ttlMs).toISOString(),s={receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,started_at:n},o=t.getAgentInflight(e.receiver_teamfile,e.receiver_alias),i=o===null||o.holder_pid===null,a=t.tryAcquireAgentInflight(s,{...i?{stale_before:r}:{},force:e.force,reclaim_reason:e.reclaimReason,nativeHolder:e.nativeHolder});if(a.acquired){let c=o===null?null:e.force===!0?e.reclaimReason??"force":o.holder_pid===null&&o.started_at<r?"stale":null;return{acquired:!0,lease:a.current??s,leaseId:a.lease_id,previous:o,reclaimReason:c}}if(!Za(a.current,r))return{acquired:!1,current:a.current};let l=t.tryAcquireAgentInflight(s,a.current.holder_pid===null?{stale_before:r,nativeHolder:e.nativeHolder}:{reclaim_observed:{sender_teamfile:a.current.sender_teamfile,sender_alias:a.current.sender_alias,started_at:a.current.started_at,holder_pid:a.current.holder_pid},reclaim_reason:"dead-pid",nativeHolder:e.nativeHolder});return l.acquired?{acquired:!0,lease:l.current??s,leaseId:l.lease_id,previous:a.current,reclaimReason:a.current.holder_pid===null?"stale":"dead-pid"}:{acquired:!1,current:l.current}}function nr(t){return t.status!=="running"?null:t.holder_host===xs()&&t.holder_pid!==null&&t.holder_pid>0?et(t.holder_pid)?"live":"dead":"unknown"}function Zt(t,e,n){let r,s=t.getTerminalLock(e,n);if(s!==null){if(IO(s))return{busy:!0,reason:"terminal-held",source:"terminal-lock",terminalLock:s};r??={source:"terminal-lock",holder_pid:s.holder_pid,holder_host:s.holder_host,reason:s.holder_host===xs()?"dead-pid":"stale"}}let o=bO(t,e,n);if(o!==null){if(kO(o))return{busy:!0,reason:"terminal-held",source:"terminal-invocation",terminalInvocation:o};r??={source:"terminal-invocation",holder_pid:o.holder_pid,holder_host:o.holder_host,reason:o.holder_pid!==null&&(o.holder_host===null||o.holder_host===xs())?"dead-pid":"stale"}}let i=t.getAgentInflight(e,n);if(i!==null){let a=new Date(Date.now()-Cs()).toISOString();if(!Za(i,a))return{busy:!0,reason:"in-flight",inFlight:i};r??={source:"in-flight",holder_pid:i.holder_pid,holder_host:i.holder_pid===null?null:xs(),reason:i.holder_pid===null?"stale":"dead-pid"}}return r===void 0?{busy:!1}:{busy:!1,reclaimable:r}}function IO(t){if(t.holder_host===xs())return et(t.holder_pid);let e=Date.parse(t.last_heartbeat);return Number.isFinite(e)?Date.now()-e<=NO():!1}function bO(t,e,n){return t.query(`SELECT id, started_at, last_heartbeat_at, holder_pid, holder_host
1211
+ ...[truncated]`});function ei(t,e){return JSON.stringify([t,e])}function oE(t){try{let e=JSON.parse(t);return typeof e.lock_id!="string"||typeof e.teamfile!="string"||typeof e.alias!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||!Array.isArray(e.holder_ips)||!e.holder_ips.every(n=>typeof n=="string")||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,teamfile:e.teamfile,alias:e.alias,holder_pid:e.holder_pid,holder_host:e.holder_host,holder_ips:e.holder_ips,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}var Qo,Zo,iE=x(()=>{"use strict";Qo="terminal_lock",Zo="member"});function et(t){if(!Number.isInteger(t)||(t??0)<=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"}}var qr=x(()=>{"use strict"});import{hostname as xs}from"node:os";function Qa(t,e={}){let n=setInterval(()=>{Promise.resolve().then(()=>t(new Date().toISOString())).then(r=>{r||clearInterval(n)}).catch(r=>e.onError?.(r))},e.intervalMs??SO);return n.unref?.(),n}function tr(t,e){let n=new Date().toISOString(),r=new Date(Date.now()-e.ttlMs).toISOString(),s={receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,started_at:n},o=t.getAgentInflight(e.receiver_teamfile,e.receiver_alias),i=o===null||o.holder_pid===null,a=t.tryAcquireAgentInflight(s,{...i?{stale_before:r}:{},force:e.force,reclaim_reason:e.reclaimReason,nativeHolder:e.nativeHolder});if(a.acquired){let c=o===null?null:e.force===!0?e.reclaimReason??"force":o.holder_pid===null&&o.started_at<r?"stale":null;return{acquired:!0,lease:a.current??s,leaseId:a.lease_id,previous:o,reclaimReason:c}}if(!Za(a.current,r))return{acquired:!1,current:a.current};let l=t.tryAcquireAgentInflight(s,a.current.holder_pid===null?{stale_before:r,nativeHolder:e.nativeHolder}:{reclaim_observed:{sender_teamfile:a.current.sender_teamfile,sender_alias:a.current.sender_alias,started_at:a.current.started_at,holder_pid:a.current.holder_pid},reclaim_reason:"dead-pid",nativeHolder:e.nativeHolder});return l.acquired?{acquired:!0,lease:l.current??s,leaseId:l.lease_id,previous:a.current,reclaimReason:a.current.holder_pid===null?"stale":"dead-pid"}:{acquired:!1,current:l.current}}function nr(t){return t.status!=="running"?null:t.holder_host===xs()&&t.holder_pid!==null&&t.holder_pid>0?et(t.holder_pid)?"live":"dead":"unknown"}function Zt(t,e,n){let r,s=t.getTerminalLock(e,n);if(s!==null){if(bO(s))return{busy:!0,reason:"terminal-held",source:"terminal-lock",terminalLock:s};r??={source:"terminal-lock",holder_pid:s.holder_pid,holder_host:s.holder_host,reason:s.holder_host===xs()?"dead-pid":"stale"}}let o=IO(t,e,n);if(o!==null){if(kO(o))return{busy:!0,reason:"terminal-held",source:"terminal-invocation",terminalInvocation:o};r??={source:"terminal-invocation",holder_pid:o.holder_pid,holder_host:o.holder_host,reason:o.holder_pid!==null&&(o.holder_host===null||o.holder_host===xs())?"dead-pid":"stale"}}let i=t.getAgentInflight(e,n);if(i!==null){let a=new Date(Date.now()-Cs()).toISOString();if(!Za(i,a))return{busy:!0,reason:"in-flight",inFlight:i};r??={source:"in-flight",holder_pid:i.holder_pid,holder_host:i.holder_pid===null?null:xs(),reason:i.holder_pid===null?"stale":"dead-pid"}}return r===void 0?{busy:!1}:{busy:!1,reclaimable:r}}function bO(t){if(t.holder_host===xs())return et(t.holder_pid);let e=Date.parse(t.last_heartbeat);return Number.isFinite(e)?Date.now()-e<=NO():!1}function IO(t,e,n){return t.query(`SELECT id, started_at, last_heartbeat_at, holder_pid, holder_host
1212
1212
  FROM tracked_invocation
1213
1213
  WHERE target_teamfile = ?
1214
1214
  AND target_alias = ?
@@ -1281,9 +1281,9 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1281
1281
  status, started_at, last_heartbeat_at, last_seq)
1282
1282
  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,o),Pu(e)&&pE(t,o,{invocationId:n,targetTeamfile:e.target_teamfile,targetAlias:e.target_alias??"",holderPid:e.holder_pid,holderHost:e.holder_host,heartbeatAt:s})})}function nl(t,e){let n=Gr(e.id),r=gE(t,n);return r===null?!1:(ft(t,{stream_id:n,event_type:FO,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
1283
1283
  SET status = ?, ended_at = ?, result_summary = ?, error = ?, last_seq = ?
1284
- 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}`);Pu(e)&&_E(t,s,n)}),!0)}function EE(t,e,n,r){let s=Gr(e.id),o=gE(t,s);return o===null?!1:(ft(t,{stream_id:s,event_type:jO,observedLastSeq:o.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},i=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,i,s,o.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function TE(t,e,n){let r=Gr(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Pu(e)&&hE(t,r,n)}function wE(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,Gr(e))}function vE(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,Gr(e))}var UO,FO,jO,SE=x(()=>{"use strict";Ja();tl();UO="INVOCATION_START",FO="INVOCATION_FINISH",jO="INVOCATION_NOTIFY_CLAIM"});var WO,HO,yK,IE,bE,kE,AE=x(()=>{"use strict";WO="other",HO=["not_enough_information","dont_know","other_work"],yK=new Set([WO,...HO]),IE="@abort",bE="invalid_decision",kE="workflow_escalation"});import{randomUUID as NE}from"node:crypto";import{existsSync as CE,mkdirSync as BO,renameSync as XO,rmdirSync as qO}from"node:fs";import{hostname as Fu}from"node:os";function ju(t){return t.provider_resolved??t.provider}function X(){return new Date().toISOString()}function GO(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!CE(t))return e;let n;try{n=new xr(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 VO(t){if(t===":memory:"||!CE(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{XO(r,`${e}${n}`)}catch{}}return e}function RE(t,e){let n=e instanceof Error?e.message:String(e);try{let r=GO(t),s=VO(t),o=new ni(zo({dbPath:t}));for(let i of r.rootTeams)o.upsertRootTeam(i);for(let{key:i,value:a}of r.config)o.setConfig(i,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${bn} (${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}.
1284
+ 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}`);Pu(e)&&_E(t,s,n)}),!0)}function EE(t,e,n,r){let s=Gr(e.id),o=gE(t,s);return o===null?!1:(ft(t,{stream_id:s,event_type:jO,observedLastSeq:o.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},i=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,i,s,o.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function TE(t,e,n){let r=Gr(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Pu(e)&&hE(t,r,n)}function wE(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,Gr(e))}function vE(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,Gr(e))}var UO,FO,jO,SE=x(()=>{"use strict";Ja();tl();UO="INVOCATION_START",FO="INVOCATION_FINISH",jO="INVOCATION_NOTIFY_CLAIM"});var WO,HO,yK,bE,IE,kE,AE=x(()=>{"use strict";WO="other",HO=["not_enough_information","dont_know","other_work"],yK=new Set([WO,...HO]),bE="@abort",IE="invalid_decision",kE="workflow_escalation"});import{randomUUID as NE}from"node:crypto";import{existsSync as CE,mkdirSync as BO,renameSync as XO,rmdirSync as qO}from"node:fs";import{hostname as Fu}from"node:os";function ju(t){return t.provider_resolved??t.provider}function X(){return new Date().toISOString()}function GO(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!CE(t))return e;let n;try{n=new xr(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 VO(t){if(t===":memory:"||!CE(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{XO(r,`${e}${n}`)}catch{}}return e}function RE(t,e){let n=e instanceof Error?e.message:String(e);try{let r=GO(t),s=VO(t),o=new ni(zo({dbPath:t}));for(let i of r.rootTeams)o.upsertRootTeam(i);for(let{key:i,value:a}of r.config)o.setConfig(i,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${In} (${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}.
1285
1285
  `:`
1286
- `)),o}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 Uu(t,e){let n;try{return n=zo({dbPath:t,allowSchemaSkew:e}),{dal:new ni(n)}}catch(r){if(r instanceof jt)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 zO(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function QO(t){if(t===":memory:")return!0;try{return BO(`${t}${OE}`),!0}catch{return!1}}function ZO(t){if(t!==":memory:")try{qO(`${t}${OE}`)}catch{}}function $e(t){let e=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(t.recover===!1){let s=Uu(t.path,e);if(s.dal)return s.dal;throw s.cause}let n={};for(let s=0;s<JO;s+=1)if(n=Uu(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>bn){let s=n.cause instanceof Error?n.cause.message:String(n.cause);throw new jt(t.path,n.dbVersion,bn,s)}for(let s=0;s<KO;s+=1){if(QO(t.path))try{return RE(t.path,n.cause)}finally{ZO(t.path)}zO(YO);let o=Uu(t.path,e);if(o.dal!==void 0)return o.dal}return RE(t.path,n.cause)}function LE(t,e,n){let r=xE(e);if(r.length===0)return;let s=new Set,o=[],i=l=>{if(l===t)return r;let c=n(l);if(c===null)throw new Error(`unknown workflow reference: ${l}`);return xE(c.definition)},a=l=>{let c=o.indexOf(l);if(c>=0)throw new Error(`cycle detected: ${[...o.slice(c),l].join(" -> ")}`);if(!s.has(l)){o.push(l);try{for(let d of i(l))a(d)}finally{o.pop()}s.add(l)}};a(t)}function xE(t){let e=eD(t),n=e===null?null:tD(e,"states");if(n===null)return[];let r=[];for(let s of Object.values(n))rl(s)&&s.type==="Subflow"&&typeof s.workflow_name=="string"&&s.workflow_name.length>0&&r.push(s.workflow_name);return r}function eD(t){try{let e=JSON.parse(t);return rl(e)?e:null}catch{return null}}function tD(t,e){let n=t[e];return rl(n)?n:null}function rl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function nD(t){try{let e=JSON.parse(t);return!rl(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 rD(t,e){return t===null?!0:t.holder_host===Fu()?!et(t.holder_pid):t.last_heartbeat<e}function sD(t){return{getRuntimeState:t.prepare("SELECT * FROM runtime_state WHERE scope = ? AND key = ? AND kind = ?"),upsertRuntimeState:t.prepare(`
1286
+ `)),o}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 Uu(t,e){let n;try{return n=zo({dbPath:t,allowSchemaSkew:e}),{dal:new ni(n)}}catch(r){if(r instanceof jt)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 zO(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function QO(t){if(t===":memory:")return!0;try{return BO(`${t}${OE}`),!0}catch{return!1}}function ZO(t){if(t!==":memory:")try{qO(`${t}${OE}`)}catch{}}function $e(t){let e=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(t.recover===!1){let s=Uu(t.path,e);if(s.dal)return s.dal;throw s.cause}let n={};for(let s=0;s<JO;s+=1)if(n=Uu(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>In){let s=n.cause instanceof Error?n.cause.message:String(n.cause);throw new jt(t.path,n.dbVersion,In,s)}for(let s=0;s<KO;s+=1){if(QO(t.path))try{return RE(t.path,n.cause)}finally{ZO(t.path)}zO(YO);let o=Uu(t.path,e);if(o.dal!==void 0)return o.dal}return RE(t.path,n.cause)}function LE(t,e,n){let r=xE(e);if(r.length===0)return;let s=new Set,o=[],i=l=>{if(l===t)return r;let c=n(l);if(c===null)throw new Error(`unknown workflow reference: ${l}`);return xE(c.definition)},a=l=>{let c=o.indexOf(l);if(c>=0)throw new Error(`cycle detected: ${[...o.slice(c),l].join(" -> ")}`);if(!s.has(l)){o.push(l);try{for(let d of i(l))a(d)}finally{o.pop()}s.add(l)}};a(t)}function xE(t){let e=eD(t),n=e===null?null:tD(e,"states");if(n===null)return[];let r=[];for(let s of Object.values(n))rl(s)&&s.type==="Subflow"&&typeof s.workflow_name=="string"&&s.workflow_name.length>0&&r.push(s.workflow_name);return r}function eD(t){try{let e=JSON.parse(t);return rl(e)?e:null}catch{return null}}function tD(t,e){let n=t[e];return rl(n)?n:null}function rl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function nD(t){try{let e=JSON.parse(t);return!rl(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 rD(t,e){return t===null?!0:t.holder_host===Fu()?!et(t.holder_pid):t.last_heartbeat<e}function sD(t){return{getRuntimeState:t.prepare("SELECT * FROM runtime_state WHERE scope = ? AND key = ? AND kind = ?"),upsertRuntimeState:t.prepare(`
1287
1287
  INSERT INTO runtime_state (scope, key, kind, data, updated_at)
1288
1288
  VALUES (?, ?, ?, ?, ?)
1289
1289
  ON CONFLICT(scope, key, kind) DO UPDATE SET
@@ -1690,14 +1690,14 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1690
1690
  response = NULL
1691
1691
  WHERE id = ?
1692
1692
  AND status = 'running'
1693
- `),...rE(t),...eE(t)}}function oD(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var JO,OE,KO,YO,ni,vt=x(()=>{"use strict";jd();Ko();Ro();za();tE();sE();iE();qr();tl();SE();AE();JO=3,OE=".recovery.lock",KO=20,YO=50;ni=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=sD(e),this.claimTxn=e.transaction((n,r,s)=>{let o=this.stmts.selectClaimableJob.get(s,s,s);return o===void 0||this.stmts.claimJob.run(n,r,s,o.id,s,s,s).changes!==1?null:this.getJob(o.id)}),this.claimWithConcurrencyTxn=e.transaction((n,r,s,o)=>{let i=this.stmts.selectClaimableJobs.all(s,s,s);for(let a of i){let l=this.getJob(a.id);if(l===null)continue;let c=o(l);if(c.concurrency_key!==null&&(l.concurrency_key_resolved!==c.concurrency_key&&this.stmts.setJobConcurrencyKey.run(c.concurrency_key,l.id),(this.stmts.countRunningByConcurrencyKey.get(c.concurrency_key,s,l.id)?.count??0)>=Math.max(1,c.concurrent_limit)))continue;if(this.stmts.claimJob.run(n,r,s,l.id,s,s,s).changes===1)return this.getJob(l.id)}return null}),this.claimByIdWithConcurrencyTxn=e.transaction((n,r,s,o,i)=>{let a=this.getJob(n);if(a===null)return{claimed:!1,reason:"not_found",job_id:n};if(a.locked_until!==null&&a.locked_until>=o)return{claimed:!1,reason:"locked",job_id:n,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let c=a.status==="queued"&&a.available_at<=o,d=a.status==="running"&&a.locked_until!==null&&a.locked_until<o;if(!c&&!d)return{claimed:!1,reason:"not_claimable",job_id:n,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let u=i(a);if(u.concurrency_key!==null&&(a.concurrency_key_resolved!==u.concurrency_key&&this.stmts.setJobConcurrencyKey.run(u.concurrency_key,a.id),(this.stmts.countRunningByConcurrencyKey.get(u.concurrency_key,o,a.id)?.count??0)>=Math.max(1,u.concurrent_limit)))return{claimed:!1,reason:"concurrency_limit",job_id:n,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};if(this.stmts.claimJob.run(r,s,o,a.id,o,o,o).changes!==1){let p=this.getJob(a.id);return{claimed:!1,reason:p?.locked_until!==null&&p?.locked_until!==void 0&&p.locked_until>=o?"locked":"not_claimable",job_id:n,status:p?.status??a.status,locked_by:p?.locked_by??a.locked_by,locked_until:p?.locked_until??a.locked_until}}let m=this.getJob(a.id);return m===null?{claimed:!1,reason:"not_found",job_id:n}:{claimed:!0,job:m}}),this.resumeRunTxn=e.transaction((n,r,s)=>oD("state_not_found")),this.resumeInteractiveTxn=e.transaction((n,r,s,o)=>{let i=this.getInteractiveSessionByStepId(n);if(i===null)return{resumed:!1,reason:"not_found"};if(i.status!=="waiting_operator")return{resumed:!1,reason:"not_waiting_operator"};let a=this.getRun(i.run_id);if(a===null)return{resumed:!1,reason:"run_not_found"};let l=s?"done":"waiting_agent";return this.stmts.updateInteractiveSession.run(l,r,Date.now(),i.id),this.stmts.resumeRunState.run(i.state_name,a.id),this.stmts.requeuePausedJob.run(o,a.job_id),{resumed:!0,session:this.getInteractiveSessionByStepId(n),run:this.getRun(a.id),job:this.getJob(a.job_id)}}),this.resumeEscalationTxn=e.transaction((n,r,s)=>{let o=this.stmts.getAttention.get(n);if(o===void 0)return{resumed:!1,reason:"not_found"};if(o.kind!==kE)return{resumed:!1,reason:"wrong_kind"};if(o.acknowledged_at!==null)return{resumed:!1,reason:"already_acked"};if(o.run_id===null)return{resumed:!1,reason:"run_not_found"};let i=null,a=[];if(o.payload!==null)try{let d=JSON.parse(o.payload);d.step!==void 0&&typeof d.step.id=="string"&&d.step.id.length>0&&(i=d.step.id),Array.isArray(d.declared_outcomes)&&(a=d.declared_outcomes.filter(u=>typeof u=="string"))}catch{}if(i===null)return{resumed:!1,reason:"no_step"};let l=this.getRun(o.run_id);if(l===null)return{resumed:!1,reason:"run_not_found"};if(r!==IE&&!a.includes(r))return{resumed:!1,reason:bE};let c={};if(l.pending_escalation_decision!==null)try{let d=JSON.parse(l.pending_escalation_decision);d!==null&&typeof d=="object"&&!Array.isArray(d)&&(c=d)}catch{c={}}return c[i]=r,this.stmts.setRunPendingEscalationDecision.run(JSON.stringify(c),l.id),this.stmts.resumeRunState.run(i,l.id),this.stmts.requeuePausedJob.run(s,l.job_id),this.stmts.ackAttention.run(s,n),{resumed:!0,run:this.getRun(l.id),job:this.getJob(l.job_id)}}),this.tryAcquireAgentInflightTxn=(n,r={})=>{this.db.exec("BEGIN IMMEDIATE");try{let s=this.getAgentInflight(n.receiver_teamfile,n.receiver_alias);if(r.nativeHolder!==void 0&&s!==null&&(s.native_provider!==null&&s.native_provider!==void 0||s.native_session_id!==null&&s.native_session_id!==void 0||s.native_endpoint!==null&&s.native_endpoint!==void 0))return this.db.exec("COMMIT"),{acquired:!1,current:s};let o=r.reclaim_observed,i=this.stmts.acquireAgentInflight.get({...n,holder_pid:process.pid,stale_before:r.stale_before??null,force:r.force===!0?1:0,reclaim_observed_sender_teamfile:o?.sender_teamfile??null,reclaim_observed_sender_alias:o?.sender_alias??null,reclaim_observed_started_at:o?.started_at??null,reclaim_observed_holder_pid:typeof o?.holder_pid=="number"?o.holder_pid:null}),a;if(i!==void 0){let l=s===null?null:r.reclaim_reason??(r.force===!0?"force":r.reclaim_observed!==void 0?"dead-pid":"stale"),c=uE(this.db,i,s,l,r.stale_before??null,r.force===!0);this.stmts.clearNativeHolderMetadata.run(n.receiver_teamfile,n.receiver_alias);let d=r.nativeHolder;d!==void 0&&this.stmts.setNativeHolderMetadata.run({receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,provider:d.provider,session_id:d.sessionId,endpoint:d.endpoint,phase:d.phase,generation:c,boot_id:d.processIdentity?.bootId??null,start_time:d.processIdentity?.startTime??null,config_json:d.configJson}),a={acquired:!0,current:i,lease_id:c}}else a={acquired:!1,current:this.getAgentInflight(n.receiver_teamfile,n.receiver_alias)??(()=>{throw new Error("agent_inflight conflict row disappeared during acquire")})()};return this.db.exec("COMMIT"),a}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}}close(){this.db.close()}query(e,...n){let r=e.trim().toLowerCase();if(!r.startsWith("select")&&!r.startsWith("with")&&!r.startsWith("pragma"))throw new Error("Dal.query only allows read-only SELECT/WITH/PRAGMA statements");return this.db.prepare(e).all(...n)}insertWorkflow(e){LE(e.name,e.definition,i=>this.getWorkflowByName(i));let n=this.stmts.insertWorkflow.run(e.name,e.version??1,e.definition_schema_version??1,e.definition,X()),r=this.getWorkflow(Number(n.lastInsertRowid)),s=this.stmts.insertWorkflowVersion.run(r.id,r.version,e.definition,e.author??null,X());this.stmts.updateWorkflowActiveVersion.run(s.lastInsertRowid,r.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,r.id);let o=this.getWorkflow(r.id);return this.syncWorkflowTriggers(r.id,e.definition),o}upsertWorkflow(e){LE(e.name,e.definition,i=>this.getWorkflowByName(i));let n=this.getWorkflowByName(e.name);if(n===null)return this.insertWorkflow({name:e.name,definition_schema_version:e.definition_schema_version,definition:e.definition,author:e.author,source_uri:e.source_uri,source_sha256:e.source_sha256});let s=(this.stmts.getLatestWorkflowVersion.get(n.id)?.version??n.version)+1,o=this.stmts.insertWorkflowVersion.run(n.id,s,e.definition,e.author??null,X());return this.stmts.updateWorkflowActiveVersionDefinitionAndVersion.run(Number(o.lastInsertRowid),e.definition,e.definition_schema_version??n.definition_schema_version,s,n.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,n.id),this.syncWorkflowTriggers(n.id,e.definition),this.getWorkflow(n.id)}insertCompositionUnit(e){this.stmts.insertCompositionUnit.run(e.name,e.version,e.lang,e.source,e.source_sha,e.compiled_workflow_version_id,X())}getWorkflow(e){return this.stmts.getWorkflow.get(e)??null}getWorkflowByName(e,n){return(n===void 0?this.stmts.findWorkflowLatest.get(e):this.stmts.findWorkflowVersion.get(e,n))??null}findWorkflowByName(e,n){return this.getWorkflowByName(e,n)}insertWorkflowVersion(e,n,r){let o=(this.stmts.getLatestWorkflowVersion.get(e)?.version??0)+1,i=this.stmts.insertWorkflowVersion.run(e,o,n,r??null,X());return this.stmts.getWorkflowVersion.get(i.lastInsertRowid)}activateWorkflowVersion(e,n){let r=this.getWorkflowVersionById(n);if(r===null||r.workflow_id!==e)return null;let s=1;try{let o=JSON.parse(r.definition);typeof o.definition_schema_version=="number"&&(s=o.definition_schema_version)}catch{}return this.stmts.updateWorkflowActiveVersionAndDefinition.run(n,r.definition,s,e),this.syncWorkflowTriggers(e,r.definition),this.getWorkflow(e)}getWorkflowVersionById(e){return this.stmts.getWorkflowVersion.get(e)??null}listWorkflowVersions(e){return this.stmts.listWorkflowVersions.all(e)}upsertTriggerInstance(e){return this.stmts.upsertTriggerInstance.run(e.workflow_id,e.trigger_id,e.trigger_type,e.parameters,e.enabled===!1?0:1,X()),this.stmts.getTriggerInstanceByWorkflowAndId.get(e.workflow_id,e.trigger_id)}listTriggerInstancesForWorkflow(e){return this.stmts.listTriggerInstancesForWorkflow.all(e)}listEnabledTriggerInstances(){return this.stmts.listEnabledTriggerInstances.all()}setTriggerCursor(e,n){return this.stmts.setTriggerCursor.run(n,X(),e),this.stmts.getTriggerInstance.get(e)??null}setTriggerFailure(e,n){return this.stmts.setTriggerFailure.run(X(),n,e),this.stmts.getTriggerInstance.get(e)??null}syncWorkflowTriggers(e,n){let r;try{r=JSON.parse(n)}catch{return}if(r===null||typeof r!="object"||Array.isArray(r))return;let s=r.triggers;if(Array.isArray(s))for(let o of s){if(o===null||typeof o!="object"||Array.isArray(o))continue;let i=o;typeof i.id!="string"||i.id.length===0||typeof i.type!="string"||i.type.length===0||this.upsertTriggerInstance({workflow_id:e,trigger_id:i.id,trigger_type:i.type,parameters:JSON.stringify(i.parameters??{})})}}insertTeam(e){let n=this.stmts.insertTeam.run(e.name,X());return this.stmts.getTeam.get(n.lastInsertRowid)}getTeam(e){return this.stmts.getTeam.get(e)??null}findTeamByName(e){return this.stmts.findTeamByName.get(e)??null}listTeams(){return this.stmts.listTeams.all()}insertTeamMember(e){let n=this.stmts.insertTeamMember.run(e.team_id,e.alias,e.role??"agent",e.provider,e.model??null,e.sessionid??null,e.sessiondir,X());return this.stmts.getTeamMember.get(n.lastInsertRowid)}listTeamMembers(e){return this.stmts.listTeamMembers.all(e)}findTeamMemberByAlias(e,n){return this.stmts.findTeamMemberByAlias.get(e,n)??null}updateTeamMemberSession(e,n){return this.stmts.updateTeamMemberSession.run(n,e),this.stmts.getTeamMember.get(e)??null}setMemberState(e,n,r){return this.stmts.setMemberState.run(n,r??null,X(),e),this.stmts.getTeamMember.get(e)??null}listMembersInState(e){return this.stmts.listMembersInState.all(e)}setMemberPromptSnapshot(e,n){return this.stmts.setMemberPromptSnapshot.run(n,e),this.stmts.getTeamMember.get(e)??null}setMemberProviderResolved(e,n){return this.stmts.setMemberProviderResolved.run(n,e),this.stmts.getTeamMember.get(e)??null}setMemberRolePrompt(e,n){return this.stmts.setMemberRolePrompt.run(n,e),this.stmts.getTeamMember.get(e)??null}updateTeamMemberMeta(e,n){let r=this.stmts.getTeamMember.get(e);if(r===void 0)return null;let s=Object.prototype.hasOwnProperty.call(n,"role_prompt"),o=Object.prototype.hasOwnProperty.call(n,"model"),i=Object.prototype.hasOwnProperty.call(n,"provider");return this.stmts.updateTeamMemberMeta.run(s?n.role_prompt??null:r.role_prompt,o?n.model??null:r.model,i?n.provider??r.provider:r.provider,e),this.stmts.getTeamMember.get(e)??null}insertTeamMemberCompanion(e){let n=this.stmts.insertTeamMemberCompanion.run(e.interpreter_id,e.companion_id,X());return this.stmts.getTeamMemberCompanion.get(n.lastInsertRowid)}insertProject(e){let n=this.stmts.insertProject.run(e.name,e.description??null,e.local_path,e.workflow_name,e.team_id,e.default_branch??null,e.intake_config??null,e.test_argv??null,e.test_command??null,e.durable_memory_mode??"folder",X());return this.stmts.getProject.get(n.lastInsertRowid)}listProjects(){return this.stmts.listProjects.all()}getProject(e){return this.stmts.getProject.get(e)??null}findProjectByName(e){return this.stmts.findProjectByName.get(e)??null}setProjectIntakeConfig(e,n){return this.stmts.setProjectIntakeConfig.run(n,e),this.stmts.getProject.get(e)??null}updateProjectSettings(e,n){let r=this.stmts.getProject.get(e);if(r===void 0)return null;let s=Object.prototype.hasOwnProperty.call(n,"local_path"),o=Object.prototype.hasOwnProperty.call(n,"durable_memory_mode"),i=Object.prototype.hasOwnProperty.call(n,"default_branch"),a=Object.prototype.hasOwnProperty.call(n,"intake_config");return this.stmts.updateProjectSettings.run(s?n.local_path:r.local_path,o?n.durable_memory_mode:r.durable_memory_mode,i?n.default_branch??null:r.default_branch,a?n.intake_config??null:r.intake_config,e),this.stmts.getProject.get(e)??null}listProjectsWithIntakeEnabled(){return this.stmts.listProjectsWithIntakeConfig.all().filter(e=>{if(e.intake_config===null)return!1;try{let n=JSON.parse(e.intake_config);return typeof n=="object"&&n!==null&&!Array.isArray(n)&&n.scan_github_issues===!0}catch{return!1}})}getProjectByJob(e){return this.stmts.getProjectByJob.get(e)??null}insertProjectWorkflow(e){let n=e.condition??null,r=this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,n);if(r!==void 0)return r;let s=this.stmts.insertProjectWorkflow.run(e.project_id,e.workflow_id,n,e.parameters_override??null,e.enabled===!1?0:1,e.priority??100,X());return s.changes===1?this.stmts.getProjectWorkflow.get(s.lastInsertRowid):this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,n)}getProjectWorkflow(e){return this.stmts.getProjectWorkflow.get(e)??null}listProjectWorkflows(e,n={}){return n.enabled_only===!0?this.stmts.listEnabledProjectWorkflows.all(e):this.stmts.listProjectWorkflows.all(e)}removeProjectWorkflow(e){return this.stmts.removeProjectWorkflow.run(e).changes>0}setProjectWorkflowEnabled(e,n){return this.stmts.setProjectWorkflowEnabled.run(n?1:0,e),this.getProjectWorkflow(e)}createIssue(e){let n=X(),r=this.stmts.createIssue.run(e.project_id,e.title,e.body,e.severity??"medium",e.labels??null,e.ai_test_path??null,e.source_run_id??null,n,n);return this.stmts.getIssue.get(r.lastInsertRowid)}getIssue(e){return this.stmts.getIssue.get(e)??null}listIssues(e,n={}){return this.stmts.listIssuesForProject.all(e).filter(r=>!(n.status!==void 0&&!n.status.includes(r.status)||n.severity!==void 0&&!n.severity.includes(r.severity)||n.ai_test_path!==void 0&&r.ai_test_path!==n.ai_test_path))}claimNextIssue(e,n){return this.stmts.claimNextIssue.get(n,X(),e)??null}claimIssue(e,n){return this.stmts.claimIssue.get(n,X(),e)??null}closeIssue(e,n,r){let s=X(),o=this.stmts.closeIssue.get(n,r??null,s,s,e);if(o===void 0)throw new Error(`issue not found: ${e}`);return o}reopenIssue(e,n){let r=this.stmts.reopenIssue.get(n,X(),e);if(r===void 0)throw this.getIssue(e)===null?new Error(`issue not found: ${e}`):new Error(`issue ${e} is not closed`);return r}updateIssue(e,n){let r=this.getIssue(e);if(r===null)throw new Error(`issue not found: ${e}`);let s=Object.prototype.hasOwnProperty.call(n,"labels"),o=Object.prototype.hasOwnProperty.call(n,"ai_test_path"),i=this.stmts.updateIssue.get(n.title??r.title,n.body??r.body,n.severity??r.severity,s?n.labels??null:r.labels,o?n.ai_test_path??null:r.ai_test_path,X(),e);if(i===void 0)throw new Error(`issue not found: ${e}`);return i}listWorkflows(){return this.stmts.listWorkflows.all()}getOrCreateWebuiSession(e,n){let r=this.stmts.getWebuiSession.get(e);if(r!==void 0)return r;let s=X();return this.stmts.insertWebuiSession.run(e,n,"N1",null,null,null,null,"authenticated",s,s),this.stmts.getWebuiSession.get(e)}getWebuiSession(e){return this.stmts.getWebuiSession.get(e)??null}updateWebuiSessionTransition(e,n,r,s,o){if(this.stmts.updateWebuiSessionTransition.run(n,r,s,o,X(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}setWebuiSessionChatbot(e,n){if(this.stmts.setWebuiSessionChatbot.run(n,X(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}createChatbotSession(e,n){let r=NE(),s=X();return this.stmts.insertChatbotSession.run(r,e,n??null,s,s,"active"),this.stmts.getChatbotSession.get(r)}getChatbotSession(e){return this.stmts.getChatbotSession.get(e)??null}listChatbotSessions(e){return this.stmts.listChatbotSessionsForUser.all(e)}appendChatbotMessage(e,n,r,s){let o=X(),i=this.stmts.insertChatbotMessage.run(e,n,r,s??null,o);return this.stmts.touchChatbotSession.run(o,e),this.stmts.getChatbotMessage.get(i.lastInsertRowid)}listChatbotMessages(e){return this.stmts.listChatbotMessages.all(e)}getConfig(e){return this.stmts.getConfig.get(e)?.value??null}setConfig(e,n){this.stmts.upsertConfig.run(e,n,X())}getConfigAll(){let e=this.stmts.listConfig.all(),n={};for(let r of e)n[r.key]=r.value;return n}enqueueJob(e){let n=this.stmts.insertJob.run(e.project_id,e.workflow_id_override??null,e.source,e.source_ref??null,e.payload??null,e.priority??0,e.available_at??X(),e.dedupe_key??null,e.concurrency_key??null,X());if(n.changes===1)return this.stmts.getJob.get(n.lastInsertRowid);if(e.dedupe_key===void 0||e.dedupe_key===null)throw new Error("job insert ignored without dedupe key");return this.stmts.findJobByDedupe.get(e.source,e.dedupe_key)}claimNextJob(e){let n=X(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimTxn(e.worker_id,r,n)}claimNextJobWithConcurrency(e){let n=X(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimWithConcurrencyTxn(e.worker_id,r,n,e.evaluator)}claimJobByIdWithConcurrency(e){let n=X(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimByIdWithConcurrencyTxn(e.job_id,e.worker_id,r,n,e.evaluator)}releaseJob(e,n,r){let s=n==="queued"||n==="running"?null:X();return this.stmts.releaseJob.run(n,r??null,s,e),this.getJob(e)}getJob(e){return this.stmts.getJob.get(e)??null}findJobBySourceAndDedupe(e,n){return this.stmts.findJobByDedupe.get(e,n)??null}insertRun(e){let n=this.getWorkflow(e.workflow_id);if(n===null)throw new Error(`workflow not found: ${e.workflow_id}`);let r=this.stmts.insertRun.run(e.job_id,e.workflow_id,e.team_id,e.current_state??null,n.active_version_id,e.parent_run_id??null,X()),s=this.stmts.getRun.get(r.lastInsertRowid);return(e.parent_run_id===void 0||e.parent_run_id===null)&&this.stmts.setJobRun.run(s.id,e.job_id),s}setJobRun(e,n){return this.stmts.setJobRun.run(n,e),this.getJob(e)}insertPromptDispatch(e){return this.stmts.insertPromptDispatch.run(e.prompt_id,e.project_id,e.job_id,e.text,e.context_json??null,X()),this.stmts.getPromptDispatch.get(e.prompt_id)}getPromptDispatch(e){return this.stmts.getPromptDispatch.get(e)??null}setPromptDispatchCompleted(e,n){return this.stmts.setPromptDispatchCompleted.run(n??X(),e),this.getPromptDispatch(e)}getWorkspace(e){return this.stmts.getWorkspace.get(e)??null}ensureWorkspace(e={}){let n=e.id??"default";this.stmts.ensureWorkspace.run(n,e.name??"Default workspace",e.idleThresholdMs??6e5,X());let r=this.getWorkspace(n);if(r===null)throw new Error(`workspace ${n} missing after upsert`);return r}listWebProjectsActive(e){return this.stmts.listWebProjectsActive.all(e)}getWebProject(e){return this.stmts.getWebProject.get(e)??null}insertWebProject(e){let n=X(),r=this.stmts.insertWebProject.run(e.workspace_id,e.name,e.repo_path,e.config_json??null,e.linked_v4_project_id??null,n,n),s=Number(r.lastInsertRowid),o=this.getWebProject(s);if(o===null)throw new Error(`web_project ${s} missing after insert`);return o}updateWebProject(e){let n=this.getWebProject(e.id);return n===null||n.deleted_at!==null?null:(this.stmts.updateWebProject.run(e.name??n.name,e.config_json===void 0?n.config_json:e.config_json,X(),e.id),this.getWebProject(e.id))}softDeleteWebProject(e){return this.stmts.softDeleteWebProject.run(X(),e).changes===1}loadMailboxCursor(e,n){return this.stmts.loadMailboxCursor.get(e,n)??null}saveMailboxCursor(e){this.stmts.saveMailboxCursor.run(e.user_id,e.mailbox_key,e.last_processed_version_id,e.last_processed_seq??null,e.last_processed_at)}addUsage(e){this.stmts.addUsage.run(e.user_id,e.device_id,e.period,e.put,e.get,e.list,e.updated_at)}loadUsage(e,n,r){return this.stmts.loadUsage.get(e,n,r)??null}sumUsageForPeriod(e,n){let r=this.stmts.sumUsageForPeriod.get(e,n);return{put:r?.put??0,get:r?.get??0,list:r?.list??0}}upsertRootTeam(e){this.stmts.upsertRootTeam.run(e.teamfile_path,e.name,e.raw_text,e.raw_sha256,e.registered_at,e.last_seeded_at)}getRootTeam(e){return this.stmts.getRootTeam.get(e)??null}listRootTeams(){return this.stmts.listRootTeams.all()}insertTeamChatLog(e){return this.db.transaction(()=>{let n=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.message_type??null,e.created_at),r=Number(n.lastInsertRowid);return e.usage&&Br(this.db,r,e.usage),Mu(this.db,r,e),e.usage&&Br(this.db,r,e.usage),el(this.db,r,e),r})()}beginTeamChatLog(e){return this.db.transaction(()=>{let n=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.message_type??null,e.created_at),r=Number(n.lastInsertRowid);return e.usage&&Br(this.db,r,e.usage),Mu(this.db,r,e),r})()}finishTeamChatLog(e,n){this.db.transaction(()=>{if(this.db.prepare("SELECT ended_at FROM team_chat_log WHERE id=?").get(e)?.ended_at!=null)return;if(this.stmts.updateTeamChatLogResponse.run(n.response,n.status,n.error_detail,n.truncated,e).changes!==1)throw new Error(`team_chat_log row disappeared during finish: ${e}`);n.usage&&Br(this.db,e,n.usage),el(this.db,e,n)})()}insertDirectTurn(e,n,r){return this.db.transaction(()=>{let s=this.db.prepare("SELECT id FROM team_chat_log WHERE attempt_key = ?").get(e.attempt_key);if(s!==void 0)return s.id;let o=this.stmts.insertTeamChatLog.run(r?.teamfile??"(direct)",null,null,r?.teamfile??"(direct)",r?.alias??e.provider,"","",n,"running",null,0,null,e.startedAt),i=Number(o.lastInsertRowid);return this.db.prepare("UPDATE team_chat_log SET accounting_only=1 WHERE id=?").run(i),Br(this.db,i,e),i})()}finishDirectTurn(e,n){this.db.transaction(()=>{if(this.db.prepare("SELECT ended_at FROM team_chat_log WHERE id = ?").get(e)?.ended_at!=null)return;let s=n.turn_outcome==="ok"?"ok":"error";if(this.stmts.updateTeamChatLogResponse.run("",s,null,0,e).changes!==1)throw new Error(`direct turn row disappeared during finish: ${e}`);Br(this.db,e,n)})()}setCurrentlyHandlingMessage(e,n,r){this.db.transaction(()=>{Ou(this.db,e,n,r)})()}clearCurrentlyHandlingMessage(e,n,r){return this.db.transaction(()=>Du(this.db,e,n,r))()}listTeamChatLog(e){return this.stmts.listTeamChatLog.all(e)}listTeamChatLogSinceId(e,n=500){return this.stmts.listTeamChatLogSinceId.all(e,Math.max(1,Math.trunc(n)))}getMaxTeamChatLogId(){return this.stmts.getMaxTeamChatLogId.get()?.max_id??0}loadTeamChatLogCursor(e){return this.stmts.loadTeamChatLogCursor.get(e)??null}saveTeamChatLogCursor(e){this.stmts.saveTeamChatLogCursor.run(e.cursor_key,e.last_pushed_id,e.updated_at)}startTrackedInvocation(e){return this.db.transaction(()=>this.startTrackedInvocationInner(e))()}startTrackedInvocationInner(e){let n=e.started_at??X(),r=e.holder_host??Fu(),s=e.last_heartbeat_at??n,o=this.stmts.insertTrackedInvocation.run(e.kind,e.origin,e.scope_teamfile??null,e.from_identity,e.target_teamfile??null,e.target_alias??null,e.root_teamfile??null,e.cwd??null,xt(e.command),n,e.holder_pid??null,r,s,xt(e.meta),e.launch_source??e.kind,e.request_payload??null,e.parent_invocation_id??null),i=this.getTrackedInvocation(Number(o.lastInsertRowid));return yE(this.db,i),i}getTrackedInvocation(e){return this.stmts.getTrackedInvocation.get(e)??null}listTrackedInvocationsForTarget(e,n,r={}){let s=["target_teamfile = ?","target_alias = ?"],o=[e,n];r.sinceMs!==void 0&&(s.push("started_at >= ?"),o.push(new Date(r.sinceMs).toISOString())),r.untilMs!==void 0&&(s.push("started_at <= ?"),o.push(new Date(r.untilMs).toISOString()));let i=Math.max(1,Math.trunc(r.limit??200));return this.db.prepare(`SELECT * FROM tracked_invocation WHERE ${s.join(" AND ")} ORDER BY started_at DESC LIMIT ?`).all(...o,i)}listAllRunningTrackedInvocations(){return this.stmts.listAllRunningTrackedInvocations.all()}listRecentlyFinishedTrackedInvocations(e){return this.stmts.listRecentlyFinishedTrackedInvocations.all(e)}listFinishedTrackedInvocationChildren(e,n){if(e.length===0)return[];let r=e.map(()=>"?").join(", ");return this.db.prepare(`
1693
+ `),...rE(t),...eE(t)}}function oD(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var JO,OE,KO,YO,ni,vt=x(()=>{"use strict";jd();Ko();Ro();za();tE();sE();iE();qr();tl();SE();AE();JO=3,OE=".recovery.lock",KO=20,YO=50;ni=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=sD(e),this.claimTxn=e.transaction((n,r,s)=>{let o=this.stmts.selectClaimableJob.get(s,s,s);return o===void 0||this.stmts.claimJob.run(n,r,s,o.id,s,s,s).changes!==1?null:this.getJob(o.id)}),this.claimWithConcurrencyTxn=e.transaction((n,r,s,o)=>{let i=this.stmts.selectClaimableJobs.all(s,s,s);for(let a of i){let l=this.getJob(a.id);if(l===null)continue;let c=o(l);if(c.concurrency_key!==null&&(l.concurrency_key_resolved!==c.concurrency_key&&this.stmts.setJobConcurrencyKey.run(c.concurrency_key,l.id),(this.stmts.countRunningByConcurrencyKey.get(c.concurrency_key,s,l.id)?.count??0)>=Math.max(1,c.concurrent_limit)))continue;if(this.stmts.claimJob.run(n,r,s,l.id,s,s,s).changes===1)return this.getJob(l.id)}return null}),this.claimByIdWithConcurrencyTxn=e.transaction((n,r,s,o,i)=>{let a=this.getJob(n);if(a===null)return{claimed:!1,reason:"not_found",job_id:n};if(a.locked_until!==null&&a.locked_until>=o)return{claimed:!1,reason:"locked",job_id:n,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let c=a.status==="queued"&&a.available_at<=o,d=a.status==="running"&&a.locked_until!==null&&a.locked_until<o;if(!c&&!d)return{claimed:!1,reason:"not_claimable",job_id:n,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let u=i(a);if(u.concurrency_key!==null&&(a.concurrency_key_resolved!==u.concurrency_key&&this.stmts.setJobConcurrencyKey.run(u.concurrency_key,a.id),(this.stmts.countRunningByConcurrencyKey.get(u.concurrency_key,o,a.id)?.count??0)>=Math.max(1,u.concurrent_limit)))return{claimed:!1,reason:"concurrency_limit",job_id:n,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};if(this.stmts.claimJob.run(r,s,o,a.id,o,o,o).changes!==1){let p=this.getJob(a.id);return{claimed:!1,reason:p?.locked_until!==null&&p?.locked_until!==void 0&&p.locked_until>=o?"locked":"not_claimable",job_id:n,status:p?.status??a.status,locked_by:p?.locked_by??a.locked_by,locked_until:p?.locked_until??a.locked_until}}let m=this.getJob(a.id);return m===null?{claimed:!1,reason:"not_found",job_id:n}:{claimed:!0,job:m}}),this.resumeRunTxn=e.transaction((n,r,s)=>oD("state_not_found")),this.resumeInteractiveTxn=e.transaction((n,r,s,o)=>{let i=this.getInteractiveSessionByStepId(n);if(i===null)return{resumed:!1,reason:"not_found"};if(i.status!=="waiting_operator")return{resumed:!1,reason:"not_waiting_operator"};let a=this.getRun(i.run_id);if(a===null)return{resumed:!1,reason:"run_not_found"};let l=s?"done":"waiting_agent";return this.stmts.updateInteractiveSession.run(l,r,Date.now(),i.id),this.stmts.resumeRunState.run(i.state_name,a.id),this.stmts.requeuePausedJob.run(o,a.job_id),{resumed:!0,session:this.getInteractiveSessionByStepId(n),run:this.getRun(a.id),job:this.getJob(a.job_id)}}),this.resumeEscalationTxn=e.transaction((n,r,s)=>{let o=this.stmts.getAttention.get(n);if(o===void 0)return{resumed:!1,reason:"not_found"};if(o.kind!==kE)return{resumed:!1,reason:"wrong_kind"};if(o.acknowledged_at!==null)return{resumed:!1,reason:"already_acked"};if(o.run_id===null)return{resumed:!1,reason:"run_not_found"};let i=null,a=[];if(o.payload!==null)try{let d=JSON.parse(o.payload);d.step!==void 0&&typeof d.step.id=="string"&&d.step.id.length>0&&(i=d.step.id),Array.isArray(d.declared_outcomes)&&(a=d.declared_outcomes.filter(u=>typeof u=="string"))}catch{}if(i===null)return{resumed:!1,reason:"no_step"};let l=this.getRun(o.run_id);if(l===null)return{resumed:!1,reason:"run_not_found"};if(r!==bE&&!a.includes(r))return{resumed:!1,reason:IE};let c={};if(l.pending_escalation_decision!==null)try{let d=JSON.parse(l.pending_escalation_decision);d!==null&&typeof d=="object"&&!Array.isArray(d)&&(c=d)}catch{c={}}return c[i]=r,this.stmts.setRunPendingEscalationDecision.run(JSON.stringify(c),l.id),this.stmts.resumeRunState.run(i,l.id),this.stmts.requeuePausedJob.run(s,l.job_id),this.stmts.ackAttention.run(s,n),{resumed:!0,run:this.getRun(l.id),job:this.getJob(l.job_id)}}),this.tryAcquireAgentInflightTxn=(n,r={})=>{this.db.exec("BEGIN IMMEDIATE");try{let s=this.getAgentInflight(n.receiver_teamfile,n.receiver_alias);if(r.nativeHolder!==void 0&&s!==null&&(s.native_provider!==null&&s.native_provider!==void 0||s.native_session_id!==null&&s.native_session_id!==void 0||s.native_endpoint!==null&&s.native_endpoint!==void 0))return this.db.exec("COMMIT"),{acquired:!1,current:s};let o=r.reclaim_observed,i=this.stmts.acquireAgentInflight.get({...n,holder_pid:process.pid,stale_before:r.stale_before??null,force:r.force===!0?1:0,reclaim_observed_sender_teamfile:o?.sender_teamfile??null,reclaim_observed_sender_alias:o?.sender_alias??null,reclaim_observed_started_at:o?.started_at??null,reclaim_observed_holder_pid:typeof o?.holder_pid=="number"?o.holder_pid:null}),a;if(i!==void 0){let l=s===null?null:r.reclaim_reason??(r.force===!0?"force":r.reclaim_observed!==void 0?"dead-pid":"stale"),c=uE(this.db,i,s,l,r.stale_before??null,r.force===!0);this.stmts.clearNativeHolderMetadata.run(n.receiver_teamfile,n.receiver_alias);let d=r.nativeHolder;d!==void 0&&this.stmts.setNativeHolderMetadata.run({receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,provider:d.provider,session_id:d.sessionId,endpoint:d.endpoint,phase:d.phase,generation:c,boot_id:d.processIdentity?.bootId??null,start_time:d.processIdentity?.startTime??null,config_json:d.configJson}),a={acquired:!0,current:i,lease_id:c}}else a={acquired:!1,current:this.getAgentInflight(n.receiver_teamfile,n.receiver_alias)??(()=>{throw new Error("agent_inflight conflict row disappeared during acquire")})()};return this.db.exec("COMMIT"),a}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}}close(){this.db.close()}query(e,...n){let r=e.trim().toLowerCase();if(!r.startsWith("select")&&!r.startsWith("with")&&!r.startsWith("pragma"))throw new Error("Dal.query only allows read-only SELECT/WITH/PRAGMA statements");return this.db.prepare(e).all(...n)}insertWorkflow(e){LE(e.name,e.definition,i=>this.getWorkflowByName(i));let n=this.stmts.insertWorkflow.run(e.name,e.version??1,e.definition_schema_version??1,e.definition,X()),r=this.getWorkflow(Number(n.lastInsertRowid)),s=this.stmts.insertWorkflowVersion.run(r.id,r.version,e.definition,e.author??null,X());this.stmts.updateWorkflowActiveVersion.run(s.lastInsertRowid,r.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,r.id);let o=this.getWorkflow(r.id);return this.syncWorkflowTriggers(r.id,e.definition),o}upsertWorkflow(e){LE(e.name,e.definition,i=>this.getWorkflowByName(i));let n=this.getWorkflowByName(e.name);if(n===null)return this.insertWorkflow({name:e.name,definition_schema_version:e.definition_schema_version,definition:e.definition,author:e.author,source_uri:e.source_uri,source_sha256:e.source_sha256});let s=(this.stmts.getLatestWorkflowVersion.get(n.id)?.version??n.version)+1,o=this.stmts.insertWorkflowVersion.run(n.id,s,e.definition,e.author??null,X());return this.stmts.updateWorkflowActiveVersionDefinitionAndVersion.run(Number(o.lastInsertRowid),e.definition,e.definition_schema_version??n.definition_schema_version,s,n.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,n.id),this.syncWorkflowTriggers(n.id,e.definition),this.getWorkflow(n.id)}insertCompositionUnit(e){this.stmts.insertCompositionUnit.run(e.name,e.version,e.lang,e.source,e.source_sha,e.compiled_workflow_version_id,X())}getWorkflow(e){return this.stmts.getWorkflow.get(e)??null}getWorkflowByName(e,n){return(n===void 0?this.stmts.findWorkflowLatest.get(e):this.stmts.findWorkflowVersion.get(e,n))??null}findWorkflowByName(e,n){return this.getWorkflowByName(e,n)}insertWorkflowVersion(e,n,r){let o=(this.stmts.getLatestWorkflowVersion.get(e)?.version??0)+1,i=this.stmts.insertWorkflowVersion.run(e,o,n,r??null,X());return this.stmts.getWorkflowVersion.get(i.lastInsertRowid)}activateWorkflowVersion(e,n){let r=this.getWorkflowVersionById(n);if(r===null||r.workflow_id!==e)return null;let s=1;try{let o=JSON.parse(r.definition);typeof o.definition_schema_version=="number"&&(s=o.definition_schema_version)}catch{}return this.stmts.updateWorkflowActiveVersionAndDefinition.run(n,r.definition,s,e),this.syncWorkflowTriggers(e,r.definition),this.getWorkflow(e)}getWorkflowVersionById(e){return this.stmts.getWorkflowVersion.get(e)??null}listWorkflowVersions(e){return this.stmts.listWorkflowVersions.all(e)}upsertTriggerInstance(e){return this.stmts.upsertTriggerInstance.run(e.workflow_id,e.trigger_id,e.trigger_type,e.parameters,e.enabled===!1?0:1,X()),this.stmts.getTriggerInstanceByWorkflowAndId.get(e.workflow_id,e.trigger_id)}listTriggerInstancesForWorkflow(e){return this.stmts.listTriggerInstancesForWorkflow.all(e)}listEnabledTriggerInstances(){return this.stmts.listEnabledTriggerInstances.all()}setTriggerCursor(e,n){return this.stmts.setTriggerCursor.run(n,X(),e),this.stmts.getTriggerInstance.get(e)??null}setTriggerFailure(e,n){return this.stmts.setTriggerFailure.run(X(),n,e),this.stmts.getTriggerInstance.get(e)??null}syncWorkflowTriggers(e,n){let r;try{r=JSON.parse(n)}catch{return}if(r===null||typeof r!="object"||Array.isArray(r))return;let s=r.triggers;if(Array.isArray(s))for(let o of s){if(o===null||typeof o!="object"||Array.isArray(o))continue;let i=o;typeof i.id!="string"||i.id.length===0||typeof i.type!="string"||i.type.length===0||this.upsertTriggerInstance({workflow_id:e,trigger_id:i.id,trigger_type:i.type,parameters:JSON.stringify(i.parameters??{})})}}insertTeam(e){let n=this.stmts.insertTeam.run(e.name,X());return this.stmts.getTeam.get(n.lastInsertRowid)}getTeam(e){return this.stmts.getTeam.get(e)??null}findTeamByName(e){return this.stmts.findTeamByName.get(e)??null}listTeams(){return this.stmts.listTeams.all()}insertTeamMember(e){let n=this.stmts.insertTeamMember.run(e.team_id,e.alias,e.role??"agent",e.provider,e.model??null,e.sessionid??null,e.sessiondir,X());return this.stmts.getTeamMember.get(n.lastInsertRowid)}listTeamMembers(e){return this.stmts.listTeamMembers.all(e)}findTeamMemberByAlias(e,n){return this.stmts.findTeamMemberByAlias.get(e,n)??null}updateTeamMemberSession(e,n){return this.stmts.updateTeamMemberSession.run(n,e),this.stmts.getTeamMember.get(e)??null}setMemberState(e,n,r){return this.stmts.setMemberState.run(n,r??null,X(),e),this.stmts.getTeamMember.get(e)??null}listMembersInState(e){return this.stmts.listMembersInState.all(e)}setMemberPromptSnapshot(e,n){return this.stmts.setMemberPromptSnapshot.run(n,e),this.stmts.getTeamMember.get(e)??null}setMemberProviderResolved(e,n){return this.stmts.setMemberProviderResolved.run(n,e),this.stmts.getTeamMember.get(e)??null}setMemberRolePrompt(e,n){return this.stmts.setMemberRolePrompt.run(n,e),this.stmts.getTeamMember.get(e)??null}updateTeamMemberMeta(e,n){let r=this.stmts.getTeamMember.get(e);if(r===void 0)return null;let s=Object.prototype.hasOwnProperty.call(n,"role_prompt"),o=Object.prototype.hasOwnProperty.call(n,"model"),i=Object.prototype.hasOwnProperty.call(n,"provider");return this.stmts.updateTeamMemberMeta.run(s?n.role_prompt??null:r.role_prompt,o?n.model??null:r.model,i?n.provider??r.provider:r.provider,e),this.stmts.getTeamMember.get(e)??null}insertTeamMemberCompanion(e){let n=this.stmts.insertTeamMemberCompanion.run(e.interpreter_id,e.companion_id,X());return this.stmts.getTeamMemberCompanion.get(n.lastInsertRowid)}insertProject(e){let n=this.stmts.insertProject.run(e.name,e.description??null,e.local_path,e.workflow_name,e.team_id,e.default_branch??null,e.intake_config??null,e.test_argv??null,e.test_command??null,e.durable_memory_mode??"folder",X());return this.stmts.getProject.get(n.lastInsertRowid)}listProjects(){return this.stmts.listProjects.all()}getProject(e){return this.stmts.getProject.get(e)??null}findProjectByName(e){return this.stmts.findProjectByName.get(e)??null}setProjectIntakeConfig(e,n){return this.stmts.setProjectIntakeConfig.run(n,e),this.stmts.getProject.get(e)??null}updateProjectSettings(e,n){let r=this.stmts.getProject.get(e);if(r===void 0)return null;let s=Object.prototype.hasOwnProperty.call(n,"local_path"),o=Object.prototype.hasOwnProperty.call(n,"durable_memory_mode"),i=Object.prototype.hasOwnProperty.call(n,"default_branch"),a=Object.prototype.hasOwnProperty.call(n,"intake_config");return this.stmts.updateProjectSettings.run(s?n.local_path:r.local_path,o?n.durable_memory_mode:r.durable_memory_mode,i?n.default_branch??null:r.default_branch,a?n.intake_config??null:r.intake_config,e),this.stmts.getProject.get(e)??null}listProjectsWithIntakeEnabled(){return this.stmts.listProjectsWithIntakeConfig.all().filter(e=>{if(e.intake_config===null)return!1;try{let n=JSON.parse(e.intake_config);return typeof n=="object"&&n!==null&&!Array.isArray(n)&&n.scan_github_issues===!0}catch{return!1}})}getProjectByJob(e){return this.stmts.getProjectByJob.get(e)??null}insertProjectWorkflow(e){let n=e.condition??null,r=this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,n);if(r!==void 0)return r;let s=this.stmts.insertProjectWorkflow.run(e.project_id,e.workflow_id,n,e.parameters_override??null,e.enabled===!1?0:1,e.priority??100,X());return s.changes===1?this.stmts.getProjectWorkflow.get(s.lastInsertRowid):this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,n)}getProjectWorkflow(e){return this.stmts.getProjectWorkflow.get(e)??null}listProjectWorkflows(e,n={}){return n.enabled_only===!0?this.stmts.listEnabledProjectWorkflows.all(e):this.stmts.listProjectWorkflows.all(e)}removeProjectWorkflow(e){return this.stmts.removeProjectWorkflow.run(e).changes>0}setProjectWorkflowEnabled(e,n){return this.stmts.setProjectWorkflowEnabled.run(n?1:0,e),this.getProjectWorkflow(e)}createIssue(e){let n=X(),r=this.stmts.createIssue.run(e.project_id,e.title,e.body,e.severity??"medium",e.labels??null,e.ai_test_path??null,e.source_run_id??null,n,n);return this.stmts.getIssue.get(r.lastInsertRowid)}getIssue(e){return this.stmts.getIssue.get(e)??null}listIssues(e,n={}){return this.stmts.listIssuesForProject.all(e).filter(r=>!(n.status!==void 0&&!n.status.includes(r.status)||n.severity!==void 0&&!n.severity.includes(r.severity)||n.ai_test_path!==void 0&&r.ai_test_path!==n.ai_test_path))}claimNextIssue(e,n){return this.stmts.claimNextIssue.get(n,X(),e)??null}claimIssue(e,n){return this.stmts.claimIssue.get(n,X(),e)??null}closeIssue(e,n,r){let s=X(),o=this.stmts.closeIssue.get(n,r??null,s,s,e);if(o===void 0)throw new Error(`issue not found: ${e}`);return o}reopenIssue(e,n){let r=this.stmts.reopenIssue.get(n,X(),e);if(r===void 0)throw this.getIssue(e)===null?new Error(`issue not found: ${e}`):new Error(`issue ${e} is not closed`);return r}updateIssue(e,n){let r=this.getIssue(e);if(r===null)throw new Error(`issue not found: ${e}`);let s=Object.prototype.hasOwnProperty.call(n,"labels"),o=Object.prototype.hasOwnProperty.call(n,"ai_test_path"),i=this.stmts.updateIssue.get(n.title??r.title,n.body??r.body,n.severity??r.severity,s?n.labels??null:r.labels,o?n.ai_test_path??null:r.ai_test_path,X(),e);if(i===void 0)throw new Error(`issue not found: ${e}`);return i}listWorkflows(){return this.stmts.listWorkflows.all()}getOrCreateWebuiSession(e,n){let r=this.stmts.getWebuiSession.get(e);if(r!==void 0)return r;let s=X();return this.stmts.insertWebuiSession.run(e,n,"N1",null,null,null,null,"authenticated",s,s),this.stmts.getWebuiSession.get(e)}getWebuiSession(e){return this.stmts.getWebuiSession.get(e)??null}updateWebuiSessionTransition(e,n,r,s,o){if(this.stmts.updateWebuiSessionTransition.run(n,r,s,o,X(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}setWebuiSessionChatbot(e,n){if(this.stmts.setWebuiSessionChatbot.run(n,X(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}createChatbotSession(e,n){let r=NE(),s=X();return this.stmts.insertChatbotSession.run(r,e,n??null,s,s,"active"),this.stmts.getChatbotSession.get(r)}getChatbotSession(e){return this.stmts.getChatbotSession.get(e)??null}listChatbotSessions(e){return this.stmts.listChatbotSessionsForUser.all(e)}appendChatbotMessage(e,n,r,s){let o=X(),i=this.stmts.insertChatbotMessage.run(e,n,r,s??null,o);return this.stmts.touchChatbotSession.run(o,e),this.stmts.getChatbotMessage.get(i.lastInsertRowid)}listChatbotMessages(e){return this.stmts.listChatbotMessages.all(e)}getConfig(e){return this.stmts.getConfig.get(e)?.value??null}setConfig(e,n){this.stmts.upsertConfig.run(e,n,X())}getConfigAll(){let e=this.stmts.listConfig.all(),n={};for(let r of e)n[r.key]=r.value;return n}enqueueJob(e){let n=this.stmts.insertJob.run(e.project_id,e.workflow_id_override??null,e.source,e.source_ref??null,e.payload??null,e.priority??0,e.available_at??X(),e.dedupe_key??null,e.concurrency_key??null,X());if(n.changes===1)return this.stmts.getJob.get(n.lastInsertRowid);if(e.dedupe_key===void 0||e.dedupe_key===null)throw new Error("job insert ignored without dedupe key");return this.stmts.findJobByDedupe.get(e.source,e.dedupe_key)}claimNextJob(e){let n=X(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimTxn(e.worker_id,r,n)}claimNextJobWithConcurrency(e){let n=X(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimWithConcurrencyTxn(e.worker_id,r,n,e.evaluator)}claimJobByIdWithConcurrency(e){let n=X(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimByIdWithConcurrencyTxn(e.job_id,e.worker_id,r,n,e.evaluator)}releaseJob(e,n,r){let s=n==="queued"||n==="running"?null:X();return this.stmts.releaseJob.run(n,r??null,s,e),this.getJob(e)}getJob(e){return this.stmts.getJob.get(e)??null}findJobBySourceAndDedupe(e,n){return this.stmts.findJobByDedupe.get(e,n)??null}insertRun(e){let n=this.getWorkflow(e.workflow_id);if(n===null)throw new Error(`workflow not found: ${e.workflow_id}`);let r=this.stmts.insertRun.run(e.job_id,e.workflow_id,e.team_id,e.current_state??null,n.active_version_id,e.parent_run_id??null,X()),s=this.stmts.getRun.get(r.lastInsertRowid);return(e.parent_run_id===void 0||e.parent_run_id===null)&&this.stmts.setJobRun.run(s.id,e.job_id),s}setJobRun(e,n){return this.stmts.setJobRun.run(n,e),this.getJob(e)}insertPromptDispatch(e){return this.stmts.insertPromptDispatch.run(e.prompt_id,e.project_id,e.job_id,e.text,e.context_json??null,X()),this.stmts.getPromptDispatch.get(e.prompt_id)}getPromptDispatch(e){return this.stmts.getPromptDispatch.get(e)??null}setPromptDispatchCompleted(e,n){return this.stmts.setPromptDispatchCompleted.run(n??X(),e),this.getPromptDispatch(e)}getWorkspace(e){return this.stmts.getWorkspace.get(e)??null}ensureWorkspace(e={}){let n=e.id??"default";this.stmts.ensureWorkspace.run(n,e.name??"Default workspace",e.idleThresholdMs??6e5,X());let r=this.getWorkspace(n);if(r===null)throw new Error(`workspace ${n} missing after upsert`);return r}listWebProjectsActive(e){return this.stmts.listWebProjectsActive.all(e)}getWebProject(e){return this.stmts.getWebProject.get(e)??null}insertWebProject(e){let n=X(),r=this.stmts.insertWebProject.run(e.workspace_id,e.name,e.repo_path,e.config_json??null,e.linked_v4_project_id??null,n,n),s=Number(r.lastInsertRowid),o=this.getWebProject(s);if(o===null)throw new Error(`web_project ${s} missing after insert`);return o}updateWebProject(e){let n=this.getWebProject(e.id);return n===null||n.deleted_at!==null?null:(this.stmts.updateWebProject.run(e.name??n.name,e.config_json===void 0?n.config_json:e.config_json,X(),e.id),this.getWebProject(e.id))}softDeleteWebProject(e){return this.stmts.softDeleteWebProject.run(X(),e).changes===1}loadMailboxCursor(e,n){return this.stmts.loadMailboxCursor.get(e,n)??null}saveMailboxCursor(e){this.stmts.saveMailboxCursor.run(e.user_id,e.mailbox_key,e.last_processed_version_id,e.last_processed_seq??null,e.last_processed_at)}addUsage(e){this.stmts.addUsage.run(e.user_id,e.device_id,e.period,e.put,e.get,e.list,e.updated_at)}loadUsage(e,n,r){return this.stmts.loadUsage.get(e,n,r)??null}sumUsageForPeriod(e,n){let r=this.stmts.sumUsageForPeriod.get(e,n);return{put:r?.put??0,get:r?.get??0,list:r?.list??0}}upsertRootTeam(e){this.stmts.upsertRootTeam.run(e.teamfile_path,e.name,e.raw_text,e.raw_sha256,e.registered_at,e.last_seeded_at)}getRootTeam(e){return this.stmts.getRootTeam.get(e)??null}listRootTeams(){return this.stmts.listRootTeams.all()}insertTeamChatLog(e){return this.db.transaction(()=>{let n=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.message_type??null,e.created_at),r=Number(n.lastInsertRowid);return e.usage&&Br(this.db,r,e.usage),Mu(this.db,r,e),e.usage&&Br(this.db,r,e.usage),el(this.db,r,e),r})()}beginTeamChatLog(e){return this.db.transaction(()=>{let n=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.message_type??null,e.created_at),r=Number(n.lastInsertRowid);return e.usage&&Br(this.db,r,e.usage),Mu(this.db,r,e),r})()}finishTeamChatLog(e,n){this.db.transaction(()=>{if(this.db.prepare("SELECT ended_at FROM team_chat_log WHERE id=?").get(e)?.ended_at!=null)return;if(this.stmts.updateTeamChatLogResponse.run(n.response,n.status,n.error_detail,n.truncated,e).changes!==1)throw new Error(`team_chat_log row disappeared during finish: ${e}`);n.usage&&Br(this.db,e,n.usage),el(this.db,e,n)})()}insertDirectTurn(e,n,r){return this.db.transaction(()=>{let s=this.db.prepare("SELECT id FROM team_chat_log WHERE attempt_key = ?").get(e.attempt_key);if(s!==void 0)return s.id;let o=this.stmts.insertTeamChatLog.run(r?.teamfile??"(direct)",null,null,r?.teamfile??"(direct)",r?.alias??e.provider,"","",n,"running",null,0,null,e.startedAt),i=Number(o.lastInsertRowid);return this.db.prepare("UPDATE team_chat_log SET accounting_only=1 WHERE id=?").run(i),Br(this.db,i,e),i})()}finishDirectTurn(e,n){this.db.transaction(()=>{if(this.db.prepare("SELECT ended_at FROM team_chat_log WHERE id = ?").get(e)?.ended_at!=null)return;let s=n.turn_outcome==="ok"?"ok":"error";if(this.stmts.updateTeamChatLogResponse.run("",s,null,0,e).changes!==1)throw new Error(`direct turn row disappeared during finish: ${e}`);Br(this.db,e,n)})()}setCurrentlyHandlingMessage(e,n,r){this.db.transaction(()=>{Ou(this.db,e,n,r)})()}clearCurrentlyHandlingMessage(e,n,r){return this.db.transaction(()=>Du(this.db,e,n,r))()}listTeamChatLog(e){return this.stmts.listTeamChatLog.all(e)}listTeamChatLogSinceId(e,n=500){return this.stmts.listTeamChatLogSinceId.all(e,Math.max(1,Math.trunc(n)))}getMaxTeamChatLogId(){return this.stmts.getMaxTeamChatLogId.get()?.max_id??0}loadTeamChatLogCursor(e){return this.stmts.loadTeamChatLogCursor.get(e)??null}saveTeamChatLogCursor(e){this.stmts.saveTeamChatLogCursor.run(e.cursor_key,e.last_pushed_id,e.updated_at)}startTrackedInvocation(e){return this.db.transaction(()=>this.startTrackedInvocationInner(e))()}startTrackedInvocationInner(e){let n=e.started_at??X(),r=e.holder_host??Fu(),s=e.last_heartbeat_at??n,o=this.stmts.insertTrackedInvocation.run(e.kind,e.origin,e.scope_teamfile??null,e.from_identity,e.target_teamfile??null,e.target_alias??null,e.root_teamfile??null,e.cwd??null,xt(e.command),n,e.holder_pid??null,r,s,xt(e.meta),e.launch_source??e.kind,e.request_payload??null,e.parent_invocation_id??null),i=this.getTrackedInvocation(Number(o.lastInsertRowid));return yE(this.db,i),i}getTrackedInvocation(e){return this.stmts.getTrackedInvocation.get(e)??null}listTrackedInvocationsForTarget(e,n,r={}){let s=["target_teamfile = ?","target_alias = ?"],o=[e,n];r.sinceMs!==void 0&&(s.push("started_at >= ?"),o.push(new Date(r.sinceMs).toISOString())),r.untilMs!==void 0&&(s.push("started_at <= ?"),o.push(new Date(r.untilMs).toISOString()));let i=Math.max(1,Math.trunc(r.limit??200));return this.db.prepare(`SELECT * FROM tracked_invocation WHERE ${s.join(" AND ")} ORDER BY started_at DESC LIMIT ?`).all(...o,i)}listAllRunningTrackedInvocations(){return this.stmts.listAllRunningTrackedInvocations.all()}listRecentlyFinishedTrackedInvocations(e){return this.stmts.listRecentlyFinishedTrackedInvocations.all(e)}listFinishedTrackedInvocationChildren(e,n){if(e.length===0)return[];let r=e.map(()=>"?").join(", ");return this.db.prepare(`
1694
1694
  SELECT * FROM tracked_invocation
1695
1695
  WHERE parent_invocation_id IN (${r})
1696
1696
  AND ended_at IS NOT NULL
1697
1697
  AND ended_at >= ?
1698
1698
  ORDER BY started_at ASC, id ASC
1699
1699
  `).all(...e,n)}finishTrackedInvocation(e,n){return this.db.transaction(()=>{let r=n.ended_at??X();if(this.stmts.finishTrackedInvocation.run(n.status,r,n.exit_code??null,n.signal??null,xt(n.result_summary),xt(n.error),n.team_chat_log_id??null,xt(n.meta),xt(n.config_warnings),r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return nl(this.db,o),o.status==="cancelled"&&o.signal!==null&&o.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(o.team_chat_log_id,o.error??`holder received ${o.signal}`),o})()}reclaimTrackedInvocationIfUnchanged(e,n,r){return this.db.transaction(()=>{let s=r.ended_at??X();if(this.stmts.reclaimTrackedInvocationIfUnchanged.run(r.status,s,r.exit_code??null,r.signal??null,xt(r.result_summary),xt(r.error),r.team_chat_log_id??null,xt(r.meta),xt(r.config_warnings),s,e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let i=this.getTrackedInvocation(e);return nl(this.db,i),i})()}heartbeatTrackedInvocation(e,n=X()){return this.db.transaction(()=>{if(this.stmts.heartbeatTrackedInvocation.run(n,e).changes!==1)return null;let s=this.getTrackedInvocation(e);return TE(this.db,s,n),s})()}updateTrackedInvocationRequestPayload(e,n){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(n,e).changes!==1?null:(wE(this.db,e,n),this.getTrackedInvocation(e)))()}linkTrackedInvocationMessage(e,n){return this.db.transaction(()=>this.stmts.linkTrackedInvocationChatLog.run(n,e).changes!==1?null:(vE(this.db,e,kn(n)),this.getTrackedInvocation(e)))()}abortTrackedInvocationAndTerminalizeMessage(e,n,r){return this.db.transaction(()=>{let s=X();if(this.stmts.abortTrackedInvocationIfUnchanged.run(s,xt(r),e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let i=this.getTrackedInvocation(e);return nl(this.db,i),i.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(i.team_chat_log_id,r),i})()}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||el(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:X()})}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=X()){return this.db.transaction(()=>{if(this.stmts.claimTrackedInvocationNotification.run(n,r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return EE(this.db,o,n,r),o})()}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 o=n.length===0?"":` WHERE ${n.join(" AND ")}`;return this.db.prepare(`SELECT * FROM tracked_invocation${o} 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 ")}`,o=this.db.prepare(`SELECT COALESCE(MAX(id), 0) AS max_id FROM tracked_invocation${s}`).get(...r);return Number(o?.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,o="ready"){return this.stmts.publishNativeHolder.run(s,o,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=X()){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:fE(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&&ti(this.db,s,"INFLIGHT_RECLAIM","stale")})()}clearObservedTerminalAgentInflight(e,n,r){return this.db.transaction(()=>{let o=this.getAgentInflight(e,n),i=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 i.changes===1&&o!==null&&ti(this.db,o,"INFLIGHT_RELEASE"),i.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
1700
- 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 o=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return o.changes===1&&ti(this.db,r,"INFLIGHT_RELEASE"),this.db.exec("COMMIT"),o.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(o=>o.started_at<e),s=0;for(let o of r)this.stmts.clearAgentInflight.run(o.receiver_teamfile,o.receiver_alias).changes===1&&(ti(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Qo,ei(e,n),Zo);return r===void 0?null:oE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&$u(this.db,r,!0),this.stmts.upsertRuntimeState.run(Qo,ei(e.teamfile,e.alias),Zo,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&mE(this.db,e)})()}heartbeatTerminalLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getTerminalLock(e,n);if(o===null||o.lock_id!==r)return this.db.exec("COMMIT"),!1;let i={...o,last_heartbeat:s};return this.stmts.upsertRuntimeState.run(Qo,ei(e,n),Zo,JSON.stringify(i),s),this.db.exec("COMMIT"),!0}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}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 o=this.stmts.deleteRuntimeState.run(Qo,ei(e,n),Zo);return o.changes===1&&$u(this.db,s),this.db.exec("COMMIT"),o.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:nD(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,o=X()){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i!==null&&!rD(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:NE(),holder_pid:process.pid,holder_host:Fu(),started_at:o,last_heartbeat:o};return this.stmts.upsertRuntimeState.run(e,n,r,JSON.stringify(a),o),this.db.exec("COMMIT"),{acquired:!0,lock:a,previous:i}}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}clearRuntimeProcessLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getRuntimeProcessLock(e,n,r);if(o===null||o.lock_id!==s)return this.db.exec("COMMIT"),!1;let i=this.stmts.deleteRuntimeState.run(e,n,r);return this.db.exec("COMMIT"),i.changes===1}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}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,X(),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,X())}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,X());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,X(),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??X(),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,X());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,X()).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,X()),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,X());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(X(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=X();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:o,type:i,updated_at:a})=>({name:s,description:o,type:i,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:r,description:s,type:o,updated_at:i})=>({name:r,description:s,type:o,updated_at:i}))}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??X());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,o=0;for(let i of n)try{let a=JSON.parse(i.payload);typeof a.tokens_in=="number"&&(r+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),o+=1}catch{}return{totalInputTokens:r,totalOutputTokens:s,agentCallCount:o}}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,X())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,X())}}});var Ct=zR(tt=>{"use strict";function Ms(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 ME(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 An(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 Wu(t,e,n){let r=" ".repeat(Math.max(0,e-An(t)));return n?r+t:t+r}function $E(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 iD(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 aD(t,e,n="\u2026"){if(An(t)<=e)return t;let r=An(n)>e?"\u2026":n,s=An(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=An(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function lD(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 PE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function cD(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 UE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=$E(n);r.headers!==void 0&&Ms(r.headers);for(let s of r.rows.map(Ms))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,PE(o)?.places??0)})}return e}tt.measureDecimalPlaces=UE;function FE(t,e,n){let r=cD(n)??[],s=e.includes("decimal")?UE(t):[];return Array.from({length:Math.max(r.length,s.length)},(o,i)=>Math.max(r[i]??0,s[i]??0))}function jE(t,e){let n=PE(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 WE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=lD(e),o=ME(n),i=FE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=$E(c);d.headers!==void 0&&Ms(d.headers).forEach((u,f)=>{l(f,An(u))});for(let u of d.rows.map(Ms))u.forEach((f,m)=>{let p=o[m]==="decimal"?jE(f,i[m]??0)??f:f;l(m,An(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}tt.measureColumns=WE;function dD(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 HE(t,{widths:e,headers:n,align:r,truncate:s=!0,truncateTrailing:o=!1,margin:i,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 d=dD(i),u=ME(r),f=iD(l),m=FE([t],u,c),p=e??WE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Ms);n!==void 0&&_.unshift(Ms(n));let h=_.map((g,E)=>{let y=g.length-1;for(;y>=0&&g[y]==="";)y--;return g.slice(0,y+1).map((T,w)=>{let S=p[w]||0,I=s&&S>0&&(w!==y||o)?aD(T,S,f):T;if(u[w]==="decimal"){let b=n!==void 0&&E===0?null:jE(T,m[w]??0),L=Wu(b!==null&&An(b)<=S?b:I,S,!0);return w===y&&b!==null?L.trimEnd():L}return u[w]==="right"?Wu(I,S,!0):w===y?I:Wu(I,S,!1)}).join(" ")}).join(`
1700
+ 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 o=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return o.changes===1&&ti(this.db,r,"INFLIGHT_RELEASE"),this.db.exec("COMMIT"),o.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(o=>o.started_at<e),s=0;for(let o of r)this.stmts.clearAgentInflight.run(o.receiver_teamfile,o.receiver_alias).changes===1&&(ti(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Qo,ei(e,n),Zo);return r===void 0?null:oE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&$u(this.db,r,!0),this.stmts.upsertRuntimeState.run(Qo,ei(e.teamfile,e.alias),Zo,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&mE(this.db,e)})()}heartbeatTerminalLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getTerminalLock(e,n);if(o===null||o.lock_id!==r)return this.db.exec("COMMIT"),!1;let i={...o,last_heartbeat:s};return this.stmts.upsertRuntimeState.run(Qo,ei(e,n),Zo,JSON.stringify(i),s),this.db.exec("COMMIT"),!0}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}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 o=this.stmts.deleteRuntimeState.run(Qo,ei(e,n),Zo);return o.changes===1&&$u(this.db,s),this.db.exec("COMMIT"),o.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:nD(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,o=X()){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i!==null&&!rD(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:NE(),holder_pid:process.pid,holder_host:Fu(),started_at:o,last_heartbeat:o};return this.stmts.upsertRuntimeState.run(e,n,r,JSON.stringify(a),o),this.db.exec("COMMIT"),{acquired:!0,lock:a,previous:i}}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}clearRuntimeProcessLock(e,n,r,s){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getRuntimeProcessLock(e,n,r);if(o===null||o.lock_id!==s)return this.db.exec("COMMIT"),!1;let i=this.stmts.deleteRuntimeState.run(e,n,r);return this.db.exec("COMMIT"),i.changes===1}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}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,X(),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,X())}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,X());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,X(),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??X(),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,X());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,X()).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,X()),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,X());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(X(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=X();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:o,type:i,updated_at:a})=>({name:s,description:o,type:i,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:r,description:s,type:o,updated_at:i})=>({name:r,description:s,type:o,updated_at:i}))}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??X());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,o=0;for(let i of n)try{let a=JSON.parse(i.payload);typeof a.tokens_in=="number"&&(r+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),o+=1}catch{}return{totalInputTokens:r,totalOutputTokens:s,agentCallCount:o}}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,X())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,X())}}});var Ct=zR(tt=>{"use strict";function Ms(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 ME(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 An(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 Wu(t,e,n){let r=" ".repeat(Math.max(0,e-An(t)));return n?r+t:t+r}function $E(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 iD(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 aD(t,e,n="\u2026"){if(An(t)<=e)return t;let r=An(n)>e?"\u2026":n,s=An(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=An(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function lD(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 PE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function cD(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 UE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=$E(n);r.headers!==void 0&&Ms(r.headers);for(let s of r.rows.map(Ms))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,PE(o)?.places??0)})}return e}tt.measureDecimalPlaces=UE;function FE(t,e,n){let r=cD(n)??[],s=e.includes("decimal")?UE(t):[];return Array.from({length:Math.max(r.length,s.length)},(o,i)=>Math.max(r[i]??0,s[i]??0))}function jE(t,e){let n=PE(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 WE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=lD(e),o=ME(n),i=FE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=$E(c);d.headers!==void 0&&Ms(d.headers).forEach((u,f)=>{l(f,An(u))});for(let u of d.rows.map(Ms))u.forEach((f,m)=>{let p=o[m]==="decimal"?jE(f,i[m]??0)??f:f;l(m,An(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}tt.measureColumns=WE;function dD(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 HE(t,{widths:e,headers:n,align:r,truncate:s=!0,truncateTrailing:o=!1,margin:i,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 d=dD(i),u=ME(r),f=iD(l),m=FE([t],u,c),p=e??WE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Ms);n!==void 0&&_.unshift(Ms(n));let h=_.map((g,E)=>{let y=g.length-1;for(;y>=0&&g[y]==="";)y--;return g.slice(0,y+1).map((T,w)=>{let S=p[w]||0,b=s&&S>0&&(w!==y||o)?aD(T,S,f):T;if(u[w]==="decimal"){let I=n!==void 0&&E===0?null:jE(T,m[w]??0),L=Wu(I!==null&&An(I)<=S?I:b,S,!0);return w===y&&I!==null?L.trimEnd():L}return u[w]==="right"?Wu(b,S,!0):w===y?b:Wu(b,S,!1)}).join(" ")}).join(`
1701
1701
  `);return h===""||d===""?h:`${d}${h.split(`
1702
1702
  `).join(`
1703
1703
  ${d}`)}`}tt.renderGrid=HE;function BE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l}={}){return HE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l})}function uD(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l,stream:c=process.stdout}={}){let d=BE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l});d&&c.write(`${d}
@@ -1705,9 +1705,9 @@ ${d}`)}`}tt.renderGrid=HE;function BE(t,{headers:e,align:n,truncate:r,truncateTr
1705
1705
  `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}tt.escapeCell=ED});var YE={};me(YE,{defaultDbPath:()=>Bu,describeStateLocation:()=>ri,isSlowWslMount:()=>KE,lmctlNextHome:()=>JE,resolveDbPath:()=>Je,warnIfSlowDbPath:()=>Xu});import{platform as GE}from"node:os";import{homedir as TD}from"node:os";import{join as VE}from"node:path";function JE(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:VE(t.HOME||TD(),wD)}function Bu(t=process.env){return VE(JE(t),vD)}function Je(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:Bu(e)}function ri(t,e=process.env){return e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0&&e.LMCTL_DB!==Bu(e)?`db: ${t} (overridden by --db/LMCTL_DB)`:`db: ${t}`}function KE(t,e=GE()){return e!=="linux"?!1:t.startsWith("/mnt/c/")||t==="/mnt/c"}function Xu(t,e=process.stderr,n=GE()){KE(t,n)&&e.write(`warning: DB on /mnt/c is slow; consider moving to ~/.lmctl/state.db (set LMCTL_DB or use --db)
1706
1706
  `)}var wD,vD,Nn=x(()=>{"use strict";wD=".lmctl",vD="state.db"});function Rn(t){return(t.env??process.env).LMCTL_NON_INTERACTIVE==="1"}function sl(t){return{...t,env:{...t.env??process.env,LMCTL_NON_INTERACTIVE:"1"}}}function Pe(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:Je(void 0,{...process.env,...t.env})}async function W(t,e){if(t.dal!==void 0)return e(t.dal);let n=$e({path:Pe(t)});try{return await e(n)}finally{n.close()}}function ae(t,e,n=["--json"]){let r=new Set(e),s=new Set(n),o=[],i={};for(let a=0;a<t.length;a+=1){let l=t[a];if(!l.startsWith("--")){o.push(l);continue}if(s.has(l)){i[l]=!0;continue}if(!r.has(l))return{positionals:o,flags:i,error:`unknown flag: ${l}`};let c=t[a+1];if(c===void 0||c.startsWith("--"))return{positionals:o,flags:i,error:`missing value for ${l}`};i[l]=c,a+=1}return{positionals:o,flags:i}}function V(t,e){let n=t.flags[e];return typeof n=="string"?n:void 0}function z(t,e){return t.flags[e]===!0}function te(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
1707
1707
  `)}function D(t,e){return t.stderr.write(`error: ${e}
1708
- `),1}function Vr(){return(0,ZE.formatClock)()}function si(t,e,n=5e3){let r=Date.now(),s=r,o=setInterval(()=>{let i=Date.now();i-s<n||t.stderr.write(e(Math.round((i-r)/1e3)))},n);return o.unref(),{poke:()=>{s=Date.now()},stop:()=>clearInterval(o)}}function SD(t=process.env){return t.LMCTL_SELF_SESSIONID!==void 0&&t.LMCTL_SELF_SESSIONID!==""||t.LMCTL_LAUNCH_SOURCE!==void 0&&t.LMCTL_LAUNCH_SOURCE!==""||t.LMCTL_INVOCATION_ID!==void 0&&t.LMCTL_INVOCATION_ID!==""||t.LMCTL_NON_INTERACTIVE==="1"}function ID(t){let e=t.env??process.env;return e.LMCTL_HEARTBEAT==="0"||e.LMCTL_HEARTBEAT==="never"?!1:e.LMCTL_HEARTBEAT==="1"||e.LMCTL_HEARTBEAT==="always"?!0:!t.stderr.isTTY?!1:!SD(e)}function bD(t){if(t==null)return!0;if(typeof t!="object")return!1;let e=t;return e.kind==="delta"?typeof e.chunk=="string"&&e.chunk.length>0:e.kind==="progress"&&e.event&&typeof e.event=="object"?zE(e.event):zE(e)}function zE(t){let e=t.kind;return e==="text"||e==="tool_use"||e==="tool_result"?!0:e==="thinking"||e==="system"||e==="api_retry"||e==="warning"?!1:e==="other"}function eT(t,e){if(ID(t)){let l=e.intervalMs??5e3,c=Date.now(),d=c,u=t.env??process.env,f=t.stderr.isTTY===!0&&u.TERM!=="dumb",m=!1,p=setInterval(()=>{let _=Date.now();if(_-d<l)return;let h=Math.round((_-c)/1e3),g=e.alias+": turn still running ("+h+"s elapsed)";f?(m=!0,t.stderr.write("\r\x1B[K"+g)):t.stderr.write(g+`
1708
+ `),1}function Vr(){return(0,ZE.formatClock)()}function si(t,e,n=5e3){let r=Date.now(),s=r,o=setInterval(()=>{let i=Date.now();i-s<n||t.stderr.write(e(Math.round((i-r)/1e3)))},n);return o.unref(),{poke:()=>{s=Date.now()},stop:()=>clearInterval(o)}}function SD(t=process.env){return t.LMCTL_SELF_SESSIONID!==void 0&&t.LMCTL_SELF_SESSIONID!==""||t.LMCTL_LAUNCH_SOURCE!==void 0&&t.LMCTL_LAUNCH_SOURCE!==""||t.LMCTL_INVOCATION_ID!==void 0&&t.LMCTL_INVOCATION_ID!==""||t.LMCTL_NON_INTERACTIVE==="1"}function bD(t){let e=t.env??process.env;return e.LMCTL_HEARTBEAT==="0"||e.LMCTL_HEARTBEAT==="never"?!1:e.LMCTL_HEARTBEAT==="1"||e.LMCTL_HEARTBEAT==="always"?!0:!t.stderr.isTTY?!1:!SD(e)}function ID(t){if(t==null)return!0;if(typeof t!="object")return!1;let e=t;return e.kind==="delta"?typeof e.chunk=="string"&&e.chunk.length>0:e.kind==="progress"&&e.event&&typeof e.event=="object"?zE(e.event):zE(e)}function zE(t){let e=t.kind;return e==="text"||e==="tool_use"||e==="tool_result"?!0:e==="thinking"||e==="system"||e==="api_retry"||e==="warning"?!1:e==="other"}function eT(t,e){if(bD(t)){let l=e.intervalMs??5e3,c=Date.now(),d=c,u=t.env??process.env,f=t.stderr.isTTY===!0&&u.TERM!=="dumb",m=!1,p=setInterval(()=>{let _=Date.now();if(_-d<l)return;let h=Math.round((_-c)/1e3),g=e.alias+": turn still running ("+h+"s elapsed)";f?(m=!0,t.stderr.write("\r\x1B[K"+g)):t.stderr.write(g+`
1709
1709
  `)},l);return p.unref(),{poke:()=>{d=Date.now()},stop:()=>{clearInterval(p),f&&m&&t.stderr.write("\r\x1B[K")}}}let n=t.env??process.env,r=e.stallThresholdMs;if(r===void 0){if(n.LMCTL_STALL_THRESHOLD_MS){let l=Number(n.LMCTL_STALL_THRESHOLD_MS);Number.isFinite(l)&&l>0&&(r=l)}else if(n.LMCTL_STALL_MINUTES){let l=Number(n.LMCTL_STALL_MINUTES);Number.isFinite(l)&&l>0&&(r=l*6e4)}}(r===void 0||r<=0)&&(r=10*6e4);let s=Math.min(1e3,r),o=Date.now(),i=!1,a=setInterval(()=>{let c=Date.now()-o;if(c>=r&&!i){i=!0;let d=Math.max(1,Math.floor(c/6e4)),u=e.alias+": no assistant output or tool activity for "+d+" min (reasoning events may still be arriving; inspect with: lmctl tail "+e.teamfile+" "+e.alias+`)
1710
- `;t.stderr.write(u)}},s);return a.unref(),{poke:l=>{bD(l)&&(o=Date.now(),i=!1)},stop:()=>{clearInterval(a)}}}function Ot(t,e){let n=e instanceof Error?e.message:String(e);return t.stderr.write(`internal error: ${n}
1710
+ `;t.stderr.write(u)}},s);return a.unref(),{poke:l=>{ID(l)&&(o=Date.now(),i=!1)},stop:()=>{clearInterval(a)}}}function Ot(t,e){let n=e instanceof Error?e.message:String(e);return t.stderr.write(`internal error: ${n}
1711
1711
  `),2}function $s(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}function ol(t){if(t.stdout!==process.stdout||QE)return;QE=!0;let e=n=>{throw n.code==="EPIPE"&&process.exit(0),process.stdout.off("error",e),n};process.stdout.on("error",e)}var ZE,QE,le=x(()=>{"use strict";vt();ZE=Ft(Ct(),1);Nn();QE=!1});function Jr(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var il=x(()=>{"use strict"});import{randomUUID as LD}from"node:crypto";import{chmodSync as nT,mkdirSync as xD,readdirSync as CD,statSync as OD,unlinkSync as DD,writeFileSync as MD}from"node:fs";import{homedir as $D,tmpdir as PD}from"node:os";import{join as ai}from"node:path";function Gu(t){return Jr(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function li(t){return Gu(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(BD,"$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 XD(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?ai(PD(),`lmctl-test-${process.pid}`,".lmctl"):ai(process.env.HOME||$D(),".lmctl"));return ai(t,"provider-errors")}function qD(t,e,n){if(t.length<=e)return t;let r=Math.floor(e*.2),s=e-r,o=t.length-e;return`${t.slice(0,r)}
1712
1712
  \u2026 ${o} characters of ${n} \u2026
1713
1713
  ${t.slice(-s)}`}function GD(t,e){try{let n=CD(t).filter(s=>HD.test(s)).sort().map(s=>{let o=ai(t,s);return{path:o,size:OD(o).size}}),r=n.reduce((s,o)=>s+o.size,0);for(let s=0;s<n.length&&(n.length-s>jD||r>WD);s++){let o=n[s];o.path!==e&&(DD(o.path),r-=o.size)}}catch{}}function VD(t,e){let n=XD(),r=ai(n,`stderr-${Date.now()}-${process.pid}-${LD()}.log`);try{xD(n,{recursive:!0,mode:448}),nT(n,448);let s=`[${new Date().toISOString()}] provider=${e}
@@ -1727,11 +1727,11 @@ ${r}`}}}function Ps(t,e){return e===""?t:`${t}:${e.includes(`
1727
1727
  `:" "}${e}`}var UD,FD,jD,WD,HD,BD,St=x(()=>{"use strict";il();UD=500,FD=1e6,jD=50,WD=20*1024*1024,HD=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,BD=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as lT,appendFileSync as zD,mkdirSync as QD,existsSync as t6,readdirSync as n6,unlinkSync as r6}from"node:fs";import{join as cl,dirname as ZD}from"node:path";import{homedir as eM}from"node:os";function Ju(){return cl(eM(),".lmctl")}function Ku(){Us=!0,process.env.LMCTL_DEBUG="1"}function cT(){return{cliDebug:Us,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function dT(t){Us=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ye(){if(Us||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-aT>=tM&&(iT=oM(),aT=t),iT}function ci(){return Us||process.env.LMCTL_DEBUG==="1"}function nM(){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 Vu(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 li(t);if(Array.isArray(t))return t.map(r=>Vu(r,"",n));if(t&&typeof t=="object"){if(n.has(t))return"[Circular]";n.add(t);let r={};for(let[s,o]of Object.entries(t))r[s]=Vu(o,s,n);return n.delete(t),r}return t}function rM(t){return Vu(t)}function He(t,e){if(e?.verbose){if(!Us)return}else if(!e?.always&&!ye())return;try{sM();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,...rM(t)};zD(ll,JSON.stringify(n)+`
1728
1728
  `)}catch{}}function sM(){if(!ll){let e=nM().slice(0,13).replace("T","-");ll=cl(Ju(),`debug-${e}.log`)}QD(ZD(ll),{recursive:!0})}function Ke(...t){He({event:"legacy",msg:t.join(" ")})}function Ue(...t){He({event:"legacy",msg:t.join(" ")},{verbose:!0})}function U(t){He(t,{always:!0})}function oM(){return iM()||aM()}function iM(){try{let t=lT(cl(Ju(),"config.toml"),"utf-8");for(let e of t.split(`
1729
1729
  `)){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 aM(){try{let t=lT(cl(Ju(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var Us,iT,aT,tM,ll,re=x(()=>{"use strict";St();Us=!1,iT=!1,aT=0,tM=5e3;ll=null});import{openSync as kM,closeSync as AM,fstatSync as NM,readSync as RM,constants as hT}from"node:fs";import{dirname as LM,join as dl}from"node:path";import{createHash as xM}from"node:crypto";function Qu(t){if(!Ur(t.catalog)||!Fr(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=o=>{if(o.length>65536)throw Error("price identity exceeds the 65536-character limit")},n=new Set,r=new Set,s=new Set;for(let o of t.catalog.records){let i=ET(o);if(!i||n.has(i))throw Error("duplicate or missing price record id");n.add(i),e(i),e(o.source),e(o.source_model_id);for(let d of[o.source,o.source_model_id])if(typeof d!="string"||!d.trim())throw Error("invalid price record identity");let a=o;for(let d of[o.provider,o.mode,o.gateway_id,o.record_id,a.vendor_model_id,a.canonical_slug])if(d!=null&&typeof d!="string")throw Error("invalid price record metadata");for(let d of[o.pricing.input_per_1m_tokens,o.pricing.output_per_1m_tokens,o.pricing.input_cache_read_per_1m_tokens,o.pricing.input_cache_write_per_1m_tokens??null])if(!_T(d))throw Error("price rates must be finite nonnegative numbers or null");let l=o.pricing.source_cost_fields;if(l!=null&&(typeof l!="object"||Array.isArray(l)))throw Error("invalid source cost fields");for(let d of["cache_creation_input_token_cost","cache_creation_input_token_cost_above_1hr"])if(l?.[d]!==void 0&&!_T(l[d]))throw Error("source blend rates must be finite nonnegative numbers or null");let c=o.pricing.currency;if(c!=null&&c!=="USD")throw Error("price currency must be USD")}for(let o of t.aliases.standards){e(o.standard_slug),o.catalog_record_id!==null&&e(o.catalog_record_id);let i=o.standard_slug.toLowerCase();if(!i||r.has(i))throw Error("duplicate price standard");r.add(i)}for(let o of t.aliases.aliases){e(o.alias),o.standard_slug!==null&&e(o.standard_slug);let i=o.alias.toLowerCase();if(!i||s.has(i))throw Error("duplicate price alias");if(s.add(i),o.standard_slug!==null&&!r.has(o.standard_slug.toLowerCase()))throw Error("price alias references missing standard")}}function gT(t){let e=kM(t,hT.O_RDONLY|hT.O_NONBLOCK);try{let n=NM(e);if(!n.isFile()||n.size>CM)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 o=RM(e,r,s,r.length-s,null);if(o===0)break;s+=o}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{AM(e)}}function Zu(t,e=dl(LM(t),"aliases.json")){let n=gT(t),r=gT(e),s;try{s=yT(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 o=yT(r),i={catalog:s,aliases:o,source:"pinned",generatedAt:s?.generated_at||null,sha256:xM("sha256").update(n).update(r).digest("hex")};return Qu(i),i}function Fs(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(i=>{if(typeof i.record_id!="string"||!i.record_id||i.currency!=="USD"||i.unit!=="per_1m_tokens")throw Error("invalid stored price identity, currency or unit");let a=JSON.parse(i.record_json);return{...a,record_id:i.record_id,pricing:{...a.pricing,input_per_1m_tokens:i.input_1m,output_per_1m_tokens:i.output_1m,input_cache_read_per_1m_tokens:i.cache_read_1m,input_cache_write_per_1m_tokens:i.cache_write_1m,source_cost_fields:JSON.parse(i.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(),o={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 Qu(o),o})():null}finally{t.pragma("busy_timeout = "+e)}}function ef(t,e,n={}){Qu(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 o=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,d)=>{let u=c;o.run(ET(c),c.source,c.provider??null,c.source_model_id,u.vendor_model_id??null,u.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),d)});let i=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 d=a.get(c.standard_slug?.toLowerCase()??"");i.run(c.alias.toLowerCase(),c.standard_slug,c.evidence,d?.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(o){if(/^SQLITE_(BUSY|LOCKED|READONLY)(_|$)/.test(String(o?.code)))return"deferred";throw o}finally{t.pragma("busy_timeout = "+s)}}async function tf(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=Fs(t),o=zu.get(t),i=o&&o.hash===s?.sha256?o.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=i&&n-i<Rs(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(Zu(dl(r.LMCTL_PRICE_DATA,"model_list.json"))):Tt({cacheDir:r.LMCTL_HOME?dl(r.LMCTL_HOME,"cache","lmprice"):r.HOME?dl(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:Rs(r)})),l,c;try{c=await(e.budgetMs===void 0?a():Promise.race([a(),new Promise(f=>{l=setTimeout(()=>f(null),e.budgetMs)})]))}finally{clearTimeout(l)}if(zu.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 d=ef(t,c,{now:n}),u=Fs(t);return zu.set(t,{hash:u?.sha256??null,at:n}),{status:d,snapshot:u}}async function ul(t,e){try{return(await tf(t,{env:e,budgetMs:900})).snapshot??di}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return di;try{return Fs(t)??di}catch{return di}}}async function nf(t){if(t.dal)return ul(t.dal.db,t.env);let e;try{return e=$e({path:Pe(t),recover:!1}),await ul(e.db,t.env)}catch{return di}finally{try{e?.close()}catch{}}}var di,ET,_T,CM,yT,zu,fl=x(()=>{"use strict";zt();vt();le();di={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},ET=t=>t.record_id??t.source+":"+t.source_model_id,_T=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;CM=64*1024*1024;yT=t=>JSON.parse(t.replace(/^\uFEFF/,""));zu=new WeakMap});function xn(t){return t!=="gemini"}function ml(t){if(!xn(t))throw new Error(sr)}var sr,js=x(()=>{"use strict";sr="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function TT(t){if(t.length===0||!t.startsWith("---"))throw new tn("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
1730
- `);if(e[0]!=="---")throw new tn("frontmatter must start at line 1 with `---` on its own line");let n={},r=-1;for(let i=1;i<e.length;i++){let a=e[i];if(a==="---"){r=i;break}if(a.trim()==="")continue;let l=a.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\s*:\s*(.*)$/);if(!l)throw new tn(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!OM.has(c))throw new tn(`unknown frontmatter key "${c}" \u2014 allowed keys: ${pl.join(", ")}`);n[c]=d}if(r===-1)throw new tn("frontmatter not closed (missing trailing `---` on its own line)");for(let i of pl)if(n[i]===void 0)throw new tn(`missing required frontmatter key "${i}" \u2014 required: ${pl.join(", ")}`);let s=0;for(let i=0;i<=r;i++)s+=e[i].length+1;s>t.length&&(s=t.length);let o=n.members.split(",").map(i=>i.trim()).filter(Boolean);return{title:n.title,description:n.description,members:o,bodyOffset:s}}var pl,OM,tn,wT=x(()=>{"use strict";pl=["title","description","members"],OM=new Set(pl),tn=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function ui(t){return rf.has(t)}var rf,hl=x(()=>{"use strict";rf=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as DM,writeFileSync as A6,renameSync as N6,existsSync as ST}from"node:fs";import{basename as MM,resolve as Ws,dirname as sf}from"node:path";function $M(t){let e={},n=/(\w+)=(?:"([^"]*)"|([\S]*))/g,r;for(;(r=n.exec(t))!==null;){let s=r[1],o=r[2]!==void 0?r[2]:r[3];e[s]=o}return e}function PM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function UM(t){return/^\s*_SESSION_\s+\S/.test(t)}function FM(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function xe(t){return/\.(?:lmctl|lmc)$/i.test(t)}function fi(t){return MM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function be(t){let e=DM(t,"utf-8"),n=sf(Ws(t)),r=Cn(e,fi(t),{baseDir:n,sourcePath:Ws(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Ws(n,s.sessiondir));return r}function Cn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1730
+ `);if(e[0]!=="---")throw new tn("frontmatter must start at line 1 with `---` on its own line");let n={},r=-1;for(let i=1;i<e.length;i++){let a=e[i];if(a==="---"){r=i;break}if(a.trim()==="")continue;let l=a.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\s*:\s*(.*)$/);if(!l)throw new tn(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!OM.has(c))throw new tn(`unknown frontmatter key "${c}" \u2014 allowed keys: ${pl.join(", ")}`);n[c]=d}if(r===-1)throw new tn("frontmatter not closed (missing trailing `---` on its own line)");for(let i of pl)if(n[i]===void 0)throw new tn(`missing required frontmatter key "${i}" \u2014 required: ${pl.join(", ")}`);let s=0;for(let i=0;i<=r;i++)s+=e[i].length+1;s>t.length&&(s=t.length);let o=n.members.split(",").map(i=>i.trim()).filter(Boolean);return{title:n.title,description:n.description,members:o,bodyOffset:s}}var pl,OM,tn,wT=x(()=>{"use strict";pl=["title","description","members"],OM=new Set(pl),tn=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function ui(t){return rf.has(t)}var rf,hl=x(()=>{"use strict";rf=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as DM,writeFileSync as A6,renameSync as N6,existsSync as ST}from"node:fs";import{basename as MM,resolve as Ws,dirname as sf}from"node:path";function $M(t){let e={},n=/(\w+)=(?:"([^"]*)"|([\S]*))/g,r;for(;(r=n.exec(t))!==null;){let s=r[1],o=r[2]!==void 0?r[2]:r[3];e[s]=o}return e}function PM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function UM(t){return/^\s*_SESSION_\s+\S/.test(t)}function FM(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function xe(t){return/\.(?:lmctl|lmc)$/i.test(t)}function fi(t){return MM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ie(t){let e=DM(t,"utf-8"),n=sf(Ws(t)),r=Cn(e,fi(t),{baseDir:n,sourcePath:Ws(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Ws(n,s.sessiondir));return r}function Cn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1731
1731
  `);o=l>=0?o.slice(l+1):""}let i=null;if(o.startsWith("---"))try{i=TT(o)}catch(l){if(l instanceof tn)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
1732
1732
  `);for(let l=0;l<a.length;l++){let c=a[l],d=l+1;if(UM(c))throw new Error(`line ${d}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(FM(c)||!PM(c))continue;let u=$M(c);for(let m of Object.keys(u))if(!vT.includes(m))throw new Error(`line ${d}: unknown key "${m}" on _MEMBER_ line: ${c.trim()}
1733
- allowed keys: ${vT.join(", ")}`);if(!u.provider&&!u.teamfile){s.push(`line ${d}: member line missing provider (or teamfile): ${c.trim()}`);continue}if(!u.alias){s.push(`line ${d}: member line missing required alias: ${c.trim()}`);continue}let f={alias:u.alias,provider:u.provider||"",extra:{}};u.sessionid&&(f.session=u.sessionid),Object.prototype.hasOwnProperty.call(u,"sessiondir")&&(f.sessiondir=u.sessiondir),u.teamfile&&(f.teamfile=u.teamfile),u.model&&(f.model=u.model),u.effort&&(f.effort=u.effort),r.push(f)}return{name:e,members:r,rawText:t,parseErrors:s,frontmatter:i}}function mi(t,e){let n=[];for(let o of t.parseErrors)n.push({field:"session",message:o});let r=t.members.filter(o=>o.alias.toLowerCase()===of.toLowerCase());r.length>1&&n.push({field:of,message:`${r.length} alias=Lead found (max 1)`});let s=new Set;for(let o of t.members){let i=o.alias.toLowerCase();if(s.has(i)&&n.push({field:o.alias,message:`Duplicate alias "${o.alias}" (case-insensitive)`}),s.add(i),o.teamfile){let a=e?Ws(e,o.teamfile):Ws(o.teamfile);if(!ST(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=be(a),c=Hs(l);c?c.session||n.push({field:o.alias,message:`Team at ${o.teamfile} lead has no session ID. Run: lmctl seed`}):n.push({field:o.alias,message:`Team at ${o.teamfile} has no lead session`})}}else rf.has(o.provider)?xn(o.provider)||n.push({field:o.alias,message:sr}):n.push({field:o.alias,message:`Invalid provider "${o.provider}"`});o.sessiondir!==void 0&&o.sessiondir===""&&n.push({field:o.alias,message:"sessiondir is empty"})}return n}function Hs(t){return t.members.find(e=>e.alias.toLowerCase()===of.toLowerCase())}function af(t,e,n,r={}){let s=r.requireSession??!0;if(!t.teamfile)throw new Error(`Member "${t.alias}" is not a team reference`);let o=Ws(e,t.teamfile),i=n??new Set;if(i.has(o))throw new Error(`Circular team reference: ${t.alias} \u2192 ${o} (already visited: ${[...i].join(" \u2192 ")})`);if(i.add(o),!ST(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=be(o),l=Hs(a);if(!l)throw new Error(`Team at ${o} has no lead session`);if(l.teamfile)return af(l,sf(o),i,r);if(s&&!l.session)throw new Error(`Team at ${o} lead has no session ID. Run: lmctl seed`);return{provider:l.provider,session:l.session??"",sessiondir:l.sessiondir||sf(o),alias:t.alias,resolvedFrom:o,model:l.model,effort:l.effort}}function _l(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var of,vT,Be=x(()=>{"use strict";js();wT();hl();of="Lead";vT=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as jM}from"node:crypto";import{existsSync as IT,readFileSync as bT,realpathSync as WM}from"node:fs";import{dirname as HM,resolve as kT}from"node:path";function Ne(t,e){let n=kT(t);if(IT(n))return WM(n);if(e!==void 0){let r=XM(t,n,e);if(r!==null)return r}return n}function yl(t,e){let n=HM(e),r=Cn(t,fi(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=kT(n,s.sessiondir));return r}function nn(t,e,n=r=>{process.stderr.write(`warning: ${r}
1734
- `)}){let r=Ne(t,BM(e)?e:void 0);if(IT(r)){let o=bT(r,"utf8"),i=yl(o,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&qM(i)&&VM(e,r,i,o,n),i}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 BM(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function XM(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function qM(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=lf)}function pi(t,e,n){let r=Ne(e),s=n.members.filter(o=>o.teamfile===void 0&&o.session!==void 0&&o.session.length>=lf);if(s.length!==0)for(let o of t.listRootTeams()){let i,a;try{if(i=Ne(o.teamfile_path),i===r)continue;a=bT(i,"utf8")}catch(c){if(GM(c))continue;throw c}let l=yl(a,i);for(let c of s){let d=l.members.find(u=>u.teamfile===void 0&&u.session===c.session&&(u.session?.length??0)>=lf);if(d!==void 0)throw new gl(`sessionid ownership conflict: ${r}:${c.alias} and ${i}:${d.alias} both use sessionid "${c.session}"`)}}}function GM(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function VM(t,e,n,r,s){try{pi(t,e,n)}catch(i){if(!(i instanceof gl))throw i;s(`${i.message}; skipping automatic registration`);return}let o={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:jM("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(o)}var lf,gl,rn=x(()=>{"use strict";Be();lf=5,gl=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as JM}from"node:crypto";import{closeSync as KM,openSync as YM,readFileSync as NT,statSync as zM,unlinkSync as cf,writeFileSync as QM}from"node:fs";function RT(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function LT(t){let e;try{e=JSON.parse(NT(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:AT(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 AT(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function AT(t){try{return Date.now()-zM(t).mtimeMs<3e5}catch{return!1}}function df(t,e){return LT(RT(t,e))}function xT(t,e){let n=RT(t,e),r=JSON.stringify({pid:process.pid,token:JM()});for(let s=0;s<2;s+=1)try{let o=YM(n,"wx");try{QM(o,r)}catch(i){throw cf(n),i}finally{KM(o)}return()=>{try{NT(n,"utf8")===r&&cf(n)}catch(i){if(i.code!=="ENOENT")throw i}}}catch(o){if(o.code!=="EEXIST")throw o;if(LT(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{cf(n)}catch(i){if(i.code!=="ENOENT")throw i}}throw new Error(`${e}: could not acquire seed marker`)}var uf=x(()=>{"use strict"});import{existsSync as ZM}from"node:fs";import{dirname as CT}from"node:path";function ff(t){return e$.test(t)||t$.test(t)||n$.test(t)}function hi(t){return El.test(t)}function On(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!xe(n)||!El.test(r)?null:{teamfile:n,alias:r}}function Xe(t,e,n){if(!xe(t))throw new ge(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!hi(e))throw new ge(`lmctl: "${e}" is not a valid alias (must match ${El.source}).`);let r=Ne(t,n);if(n===void 0&&!ZM(r))throw new ge(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=nn(r,n)}catch(i){throw new ge(`lmctl: ${t}: ${i instanceof Error?i.message:String(i)}`)}if(s.parseErrors.length>0)throw new ge(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let o=_l(s,e);if(o===void 0){let i=s.members.map(a=>a.alias).join(", ")||"(none)";throw new ge(`lmctl: alias "${e}" not found in ${t}.
1733
+ allowed keys: ${vT.join(", ")}`);if(!u.provider&&!u.teamfile){s.push(`line ${d}: member line missing provider (or teamfile): ${c.trim()}`);continue}if(!u.alias){s.push(`line ${d}: member line missing required alias: ${c.trim()}`);continue}let f={alias:u.alias,provider:u.provider||"",extra:{}};u.sessionid&&(f.session=u.sessionid),Object.prototype.hasOwnProperty.call(u,"sessiondir")&&(f.sessiondir=u.sessiondir),u.teamfile&&(f.teamfile=u.teamfile),u.model&&(f.model=u.model),u.effort&&(f.effort=u.effort),r.push(f)}return{name:e,members:r,rawText:t,parseErrors:s,frontmatter:i}}function mi(t,e){let n=[];for(let o of t.parseErrors)n.push({field:"session",message:o});let r=t.members.filter(o=>o.alias.toLowerCase()===of.toLowerCase());r.length>1&&n.push({field:of,message:`${r.length} alias=Lead found (max 1)`});let s=new Set;for(let o of t.members){let i=o.alias.toLowerCase();if(s.has(i)&&n.push({field:o.alias,message:`Duplicate alias "${o.alias}" (case-insensitive)`}),s.add(i),o.teamfile){let a=e?Ws(e,o.teamfile):Ws(o.teamfile);if(!ST(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=Ie(a),c=Hs(l);c?c.session||n.push({field:o.alias,message:`Team at ${o.teamfile} lead has no session ID. Run: lmctl seed`}):n.push({field:o.alias,message:`Team at ${o.teamfile} has no lead session`})}}else rf.has(o.provider)?xn(o.provider)||n.push({field:o.alias,message:sr}):n.push({field:o.alias,message:`Invalid provider "${o.provider}"`});o.sessiondir!==void 0&&o.sessiondir===""&&n.push({field:o.alias,message:"sessiondir is empty"})}return n}function Hs(t){return t.members.find(e=>e.alias.toLowerCase()===of.toLowerCase())}function af(t,e,n,r={}){let s=r.requireSession??!0;if(!t.teamfile)throw new Error(`Member "${t.alias}" is not a team reference`);let o=Ws(e,t.teamfile),i=n??new Set;if(i.has(o))throw new Error(`Circular team reference: ${t.alias} \u2192 ${o} (already visited: ${[...i].join(" \u2192 ")})`);if(i.add(o),!ST(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=Ie(o),l=Hs(a);if(!l)throw new Error(`Team at ${o} has no lead session`);if(l.teamfile)return af(l,sf(o),i,r);if(s&&!l.session)throw new Error(`Team at ${o} lead has no session ID. Run: lmctl seed`);return{provider:l.provider,session:l.session??"",sessiondir:l.sessiondir||sf(o),alias:t.alias,resolvedFrom:o,model:l.model,effort:l.effort}}function _l(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var of,vT,Be=x(()=>{"use strict";js();wT();hl();of="Lead";vT=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as jM}from"node:crypto";import{existsSync as bT,readFileSync as IT,realpathSync as WM}from"node:fs";import{dirname as HM,resolve as kT}from"node:path";function Ne(t,e){let n=kT(t);if(bT(n))return WM(n);if(e!==void 0){let r=XM(t,n,e);if(r!==null)return r}return n}function yl(t,e){let n=HM(e),r=Cn(t,fi(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=kT(n,s.sessiondir));return r}function nn(t,e,n=r=>{process.stderr.write(`warning: ${r}
1734
+ `)}){let r=Ne(t,BM(e)?e:void 0);if(bT(r)){let o=IT(r,"utf8"),i=yl(o,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&qM(i)&&VM(e,r,i,o,n),i}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 BM(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function XM(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function qM(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=lf)}function pi(t,e,n){let r=Ne(e),s=n.members.filter(o=>o.teamfile===void 0&&o.session!==void 0&&o.session.length>=lf);if(s.length!==0)for(let o of t.listRootTeams()){let i,a;try{if(i=Ne(o.teamfile_path),i===r)continue;a=IT(i,"utf8")}catch(c){if(GM(c))continue;throw c}let l=yl(a,i);for(let c of s){let d=l.members.find(u=>u.teamfile===void 0&&u.session===c.session&&(u.session?.length??0)>=lf);if(d!==void 0)throw new gl(`sessionid ownership conflict: ${r}:${c.alias} and ${i}:${d.alias} both use sessionid "${c.session}"`)}}}function GM(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function VM(t,e,n,r,s){try{pi(t,e,n)}catch(i){if(!(i instanceof gl))throw i;s(`${i.message}; skipping automatic registration`);return}let o={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:jM("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(o)}var lf,gl,rn=x(()=>{"use strict";Be();lf=5,gl=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as JM}from"node:crypto";import{closeSync as KM,openSync as YM,readFileSync as NT,statSync as zM,unlinkSync as cf,writeFileSync as QM}from"node:fs";function RT(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function LT(t){let e;try{e=JSON.parse(NT(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:AT(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 AT(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function AT(t){try{return Date.now()-zM(t).mtimeMs<3e5}catch{return!1}}function df(t,e){return LT(RT(t,e))}function xT(t,e){let n=RT(t,e),r=JSON.stringify({pid:process.pid,token:JM()});for(let s=0;s<2;s+=1)try{let o=YM(n,"wx");try{QM(o,r)}catch(i){throw cf(n),i}finally{KM(o)}return()=>{try{NT(n,"utf8")===r&&cf(n)}catch(i){if(i.code!=="ENOENT")throw i}}}catch(o){if(o.code!=="EEXIST")throw o;if(LT(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{cf(n)}catch(i){if(i.code!=="ENOENT")throw i}}throw new Error(`${e}: could not acquire seed marker`)}var uf=x(()=>{"use strict"});import{existsSync as ZM}from"node:fs";import{dirname as CT}from"node:path";function ff(t){return e$.test(t)||t$.test(t)||n$.test(t)}function hi(t){return El.test(t)}function On(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!xe(n)||!El.test(r)?null:{teamfile:n,alias:r}}function Xe(t,e,n){if(!xe(t))throw new ge(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!hi(e))throw new ge(`lmctl: "${e}" is not a valid alias (must match ${El.source}).`);let r=Ne(t,n);if(n===void 0&&!ZM(r))throw new ge(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=nn(r,n)}catch(i){throw new ge(`lmctl: ${t}: ${i instanceof Error?i.message:String(i)}`)}if(s.parseErrors.length>0)throw new ge(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let o=_l(s,e);if(o===void 0){let i=s.members.map(a=>a.alias).join(", ")||"(none)";throw new ge(`lmctl: alias "${e}" not found in ${t}.
1735
1735
  Known aliases: ${i}`,"not_found")}if(o.teamfile!==void 0){let i=af(o,CT(r));return{teamfile:r,alias:o.alias,provider:i.provider,sessionid:i.session,sessiondir:i.sessiondir,isLead:!0,...i.model??o.model?{model:i.model??o.model}:{},...i.effort??o.effort?{effort:i.effort??o.effort}:{}}}if(df(r,o.alias))throw new ge(`lmctl: alias "${o.alias}" is being seeded. Wait for the seed to finish, then retry this prompt.`);if(o.session===void 0)throw s.members.some(i=>df(r,i.alias))?new ge(`lmctl: alias "${o.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 ge(`lmctl: alias "${o.alias}" in ${t} has no session ID yet.
1736
1736
  Run: lmctl seed ${t}`);return{teamfile:r,alias:o.alias,provider:o.provider,sessionid:o.session,sessiondir:o.sessiondir??CT(r),isLead:Hs(s)?.alias===o.alias,...o.model!==void 0?{model:o.model}:{},...o.effort!==void 0?{effort:o.effort}:{}}}function sn(t,e){let{target:n,alias:r,flags:s}=e;if(s.run!==void 0||s.project!==void 0||s.workflow!==void 0){if(n!==void 0)return{mode:"error",message:`lmctl ${t.name}: --run/--project/--workflow (managed mode) are mutually exclusive with a positional target "${n}" \u2014 pick one form.`};let i={mode:"managed"};return s.run!==void 0&&(i.run=s.run),s.project!==void 0&&(i.project=s.project),s.workflow!==void 0&&(i.workflow=s.workflow),i}if(n!==void 0){let i=On(n);if(i!==null)return r!==void 0&&r!==i.alias?{mode:"error",message:`lmctl ${t.name}: got "${n}" AND second positional "${r}" \u2014 pick one form.`}:{mode:"ai-team",teamfile:i.teamfile,alias:i.alias};if(xe(n))return r!==void 0?hi(r)?{mode:"ai-team",teamfile:n,alias:r}:{mode:"error",message:`lmctl ${t.name}: "${r}" is not a valid alias (must match ${El.source}).`}:t.allowsBareTeamfile?{mode:"ai-team",teamfile:n}:{mode:"error",message:`lmctl ${t.name}: alias required.
1737
1737
  Use: lmctl ${t.name} ${n}:<alias> or lmctl ${t.name} ${n} <alias>`};if(ff(n)){if(r!==void 0)return{mode:"error",message:`lmctl ${t.name}: got a second positional "${r}" but "${n}" is not a teamfile path.`};if(!t.supportsRaw)return{mode:"error",message:`lmctl ${t.name}: "${n}" is a bare sessionid, but ${t.name} is teamfile-only (a sessionid carries no provider resume incantation).`};let a={mode:"ai-team-raw",sessionid:n};return s.provider!==void 0&&(a.provider=s.provider),a}return r!==void 0?{mode:"error",message:`lmctl ${t.name}: got a second positional "${r}" but "${n}" is not a teamfile path.
@@ -1739,14 +1739,14 @@ ${r}`}}}function Ps(t,e){return e===""?t:`${t}:${e.includes(`
1739
1739
  Expected one of: <path>.lmctl, <path>.lmctl:<alias>, <sessionid>.`}}if(s.session!==void 0){if(!t.supportsRaw)return{mode:"error",message:`lmctl ${t.name}: --session (raw mode) is not supported by ${t.name}.`};let i={mode:"ai-team-raw",sessionid:s.session};return s.provider!==void 0&&(i.provider=s.provider),i}return{mode:"error",message:`lmctl ${t.name}: a target is required.
1740
1740
  Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var ge,e$,t$,n$,El,nt=x(()=>{"use strict";Be();Be();rn();uf();ge=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},e$=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,t$=/^ses_[A-Za-z0-9_-]+$/,n$=/^session_[A-Za-z0-9_-]+$/,El=/^[A-Za-z][A-Za-z0-9_-]*$/});import{existsSync as r$,mkdirSync as s$,readFileSync as o$,renameSync as i$,unlinkSync as a$,writeFileSync as l$}from"node:fs";import{homedir as DT}from"node:os";import{dirname as _i,join as rt,resolve as c$}from"node:path";function Xs(t,e,n){let r=_i(c$(n)),s=new Set,o=new Map;for(let i of e.members){if(s.add(i.provider),i.teamfile!==void 0)continue;let a=i.sessiondir??r,l=o.get(a)??new Set;l.add(i.provider),o.set(a,l)}for(let[i,a]of o.entries())on(rt(i,".mcp.json"),"mcpServers",[or(),ir()]),a.has("opencode")&&on(rt(i,".opencode","opencode.json"),"mcp",[MT(),$T()]),a.has("kimi")&&on(rt(i,".kimi-code","mcp.json"),"mcpServers",[or(),ir()]);for(let i of s)p$(i)}function u$(t=mf??DT()){return rt(t,".copilot","mcp-config.json")}function f$(t,e){Dt.mkdirSync(_i(t),{recursive:!0});let n=rt(_i(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Dt.writeFileSync(n,`${JSON.stringify(e,null,2)}
1741
1741
  `,"utf8"),Dt.renameSync(n,t)}catch(r){try{Dt.unlinkSync(n)}catch{}throw r}}function m$(t,e){Dt.mkdirSync(_i(t),{recursive:!0});let n=rt(_i(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Dt.writeFileSync(n,e,"utf8"),Dt.renameSync(n,t)}catch(r){try{Dt.unlinkSync(n)}catch{}throw r}}function on(t,e,n){try{if(!Dt.existsSync(t))return;let r=JSON.parse(Dt.readFileSync(t,"utf8"));if(!Bs(r)||!Bs(r[e]))return;let s={...r[e]},o=[];for(let{name:i,shouldRemove:a}of n)Object.prototype.hasOwnProperty.call(s,i)&&a(s[i])&&(delete s[i],o.push(i));if(o.length===0)return;r[e]=s,f$(t,r),U({event:"mcp_cleanup",path:t,removed:o})}catch{}}function or(){return{name:wl,shouldRemove:v$}}function MT(){return{name:wl,shouldRemove:S$}}function ir(){return{name:Tl,shouldRemove:T$}}function $T(){return{name:Tl,shouldRemove:w$}}function p$(t){let e=mf??DT();switch(t){case"copilot":on(u$(e),"mcpServers",[or(),ir()]);return;case"claude":on(rt(e,".claude.json"),"mcpServers",[or(),ir()]);return;case"gemini":on(rt(e,".gemini","settings.json"),"mcpServers",[or(),ir()]);return;case"qwen":on(rt(e,".qwen","settings.json"),"mcpServers",[or(),ir()]);return;case"agy":on(rt(e,".gemini","antigravity-cli","settings.json"),"mcpServers",[or(),ir()]);return;case"opencode":on(rt(e,".config","opencode","opencode.json"),"mcp",[MT(),$T()]);return;case"kimi":on(rt(mf===void 0?process.env.KIMI_CODE_HOME??rt(e,".kimi-code"):rt(e,".kimi-code"),"mcp.json"),"mcpServers",[or(),ir()]);return;case"codex":h$(rt(e,".codex","config.toml"));return;default:return}}function h$(t){try{if(!Dt.existsSync(t))return;let e=Dt.readFileSync(t,"utf8"),n=_$(e);if(n===null)return;let r=e.split(/\n/),s=[],o=new Set,i=!1,a;for(let l of r){let c=PT(l);if(c===null)return;if(c!==void 0){if(OT(c,n)){i=!0,a=c[1],o.add(a);continue}i=!1,a=void 0,s.push(l);continue}if(i){if(/^\s*(?:#.*)?$/.test(l)){s.push(l);continue}a!==void 0&&o.add(a);continue}let d=y$(l);if(d===null)return;if(d!==void 0&&OT(d,n)){o.add(d[1]);continue}s.push(l)}if(o.size===0)return;m$(t,s.join(`
1742
- `)),U({event:"mcp_cleanup",path:t,removed:[...o]})}catch{}}function OT(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function _$(t){let e=new Map,n;for(let s of t.split(/\n/)){let o=PT(s);if(o===null)return null;if(o!==void 0){n=o;continue}let i=s.indexOf("=");if(i<0)continue;let a=s.slice(0,i).trim(),l=s.slice(i+1).trim(),c=g$(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==Tl&&c[1]!==wl)continue;let d=e.get(c[1])??{};if(c[2]==="command"){let u=UT(l);if(u===null)return null;d.command=u}else if(c[2]==="args"){let u=E$(l);if(u===null)return null;d.args=u}e.set(c[1],d)}let r=new Set;for(let[s,o]of e.entries())s===Tl&&jT(o.command,o.args)&&r.add(s),s===wl&&WT(o.command,o.args)&&r.add(s);return r}function g$(t,e){if(t.startsWith("mcp_servers"))return vl(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=vl(t);return n===null?null:[...e,...n]}function PT(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:vl(e[1])}function y$(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 vl(n)}function vl(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="",o=!1;for(;n<t.length;){let i=t[n];if(i==="\\"){if(n+1>=t.length)return null;s+=t[n+1],n+=2;continue}if(i==='"'){n+=1,o=!0;break}s+=i,n+=1}if(!o)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 UT(t){let e=FT(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 E$(t){let e=FT(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=>UT(s.trim()));return r.some(s=>s===null)?null:r}function FT(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 T$(t){return Bs(t)?t.type==="stdio"&&typeof t.command=="string"&&jT(t.command,t.args):!1}function w$(t){return!Bs(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&BT(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"&&HT(t.command[0],[t.command[1],t.command[2]])}function v$(t){return Bs(t)?t.type==="stdio"&&WT(t.command,t.args):!1}function S$(t){return!Bs(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&XT(t.command[0])&&t.command[1]==="mcp"}function jT(t,e){return BT(t)&&qT(e)||HT(t,e)}function WT(t,e){return XT(t)&&qT(e)}function HT(t,e){return I$(t)&&Array.isArray(e)&&e.length===2&&b$(e[0])&&e[1]==="mcp"}function BT(t){return typeof t=="string"&&pf(t)==="lmctl"}function XT(t){return typeof t=="string"&&pf(t)==="lmctl0"}function I$(t){if(typeof t!="string")return!1;let e=pf(t).toLowerCase();return e==="node"||e==="node.exe"}function b$(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 pf(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function qT(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Bs(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Tl,wl,d$,Dt,mf,Sl=x(()=>{"use strict";re();Tl="lmctl",wl="lmctl0",d$={existsSync:r$,mkdirSync:s$,readFileSync:o$,writeFileSync:l$,renameSync:i$,unlinkSync:a$},Dt=d$});import{basename as k$}from"node:path";function JT(t,e){let n=new Date(e.now.getTime()-ar()).toISOString(),r=zT(t,n).filter(m=>!m.sender.teamfile.startsWith("prompt:")),s=L$(e.sender,r),o=x$(e.sender,r);o!==null&&o.teamfile===e.root&&!VT(s[0],o)&&s.unshift({...o,at:null});let i={teamfile:e.receiverTeamfile,alias:e.receiverAlias,at:e.now.getTime()},a=[...s,i],l=s.filter(m=>VT(m,i)),c=l.map(m=>m.at).filter(m=>m!==null).sort((m,p)=>p-m)[0]??null,d=c!==null&&e.now.getTime()-c<A$,u=hf(e.sender,r).length;return{stop:l.length>=1&&d&&u>=N$,chain:C$(a)}}function KT(t,e){let n=new Date(e.now.getTime()-ar()).toISOString(),r=zT(t,n),s=hf(e.sender,r);if(s.length===0)return null;let o=s[0];return o.sender.teamfile.startsWith("prompt:")?o.receiver.teamfile:o.sender.teamfile}function ar(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return GT;let n=Number(e);return!Number.isFinite(n)||n<=0?GT:n}function YT(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function R$(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 zT(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(R$).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function L$(t,e,n={}){let r=new Map;for(let a of e)r.set(Kr(a.receiver),a);let s=[{...t,at:null}],o=t,i=new Set([Kr(t)]);for(let a=0;a<64;a+=1){let l=r.get(Kr(o));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 d=Kr(l.sender);if(i.has(d))break;s.unshift(c),i.add(d),o=l.sender}return s}function hf(t,e){let n=Kr(t),r=new Set([n]),s=[n],o=[];for(let i=0;s.length>0&&i<128;i+=1){let a=s.shift();for(let l of e){let c=Kr(l.sender),d=Kr(l.receiver);c!==a&&d!==a||(o.includes(l)||o.push(l),r.has(c)||(r.add(c),s.push(c)),r.has(d)||(r.add(d),s.push(d)))}}return o.sort((i,a)=>i.at-a.at)}function x$(t,e){let n=hf(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function VT(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function Kr(t){return`${t.teamfile}\0${t.alias}`}function C$(t){return t.map(e=>`${k$(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var A$,N$,GT,Il=x(()=>{"use strict";A$=6e4,N$=2,GT=8*60*60*1e3});function _f(t,e){if(nr(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 bl(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
1742
+ `)),U({event:"mcp_cleanup",path:t,removed:[...o]})}catch{}}function OT(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function _$(t){let e=new Map,n;for(let s of t.split(/\n/)){let o=PT(s);if(o===null)return null;if(o!==void 0){n=o;continue}let i=s.indexOf("=");if(i<0)continue;let a=s.slice(0,i).trim(),l=s.slice(i+1).trim(),c=g$(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==Tl&&c[1]!==wl)continue;let d=e.get(c[1])??{};if(c[2]==="command"){let u=UT(l);if(u===null)return null;d.command=u}else if(c[2]==="args"){let u=E$(l);if(u===null)return null;d.args=u}e.set(c[1],d)}let r=new Set;for(let[s,o]of e.entries())s===Tl&&jT(o.command,o.args)&&r.add(s),s===wl&&WT(o.command,o.args)&&r.add(s);return r}function g$(t,e){if(t.startsWith("mcp_servers"))return vl(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=vl(t);return n===null?null:[...e,...n]}function PT(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:vl(e[1])}function y$(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 vl(n)}function vl(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="",o=!1;for(;n<t.length;){let i=t[n];if(i==="\\"){if(n+1>=t.length)return null;s+=t[n+1],n+=2;continue}if(i==='"'){n+=1,o=!0;break}s+=i,n+=1}if(!o)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 UT(t){let e=FT(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 E$(t){let e=FT(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=>UT(s.trim()));return r.some(s=>s===null)?null:r}function FT(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 T$(t){return Bs(t)?t.type==="stdio"&&typeof t.command=="string"&&jT(t.command,t.args):!1}function w$(t){return!Bs(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&BT(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"&&HT(t.command[0],[t.command[1],t.command[2]])}function v$(t){return Bs(t)?t.type==="stdio"&&WT(t.command,t.args):!1}function S$(t){return!Bs(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&XT(t.command[0])&&t.command[1]==="mcp"}function jT(t,e){return BT(t)&&qT(e)||HT(t,e)}function WT(t,e){return XT(t)&&qT(e)}function HT(t,e){return b$(t)&&Array.isArray(e)&&e.length===2&&I$(e[0])&&e[1]==="mcp"}function BT(t){return typeof t=="string"&&pf(t)==="lmctl"}function XT(t){return typeof t=="string"&&pf(t)==="lmctl0"}function b$(t){if(typeof t!="string")return!1;let e=pf(t).toLowerCase();return e==="node"||e==="node.exe"}function I$(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 pf(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function qT(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Bs(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Tl,wl,d$,Dt,mf,Sl=x(()=>{"use strict";re();Tl="lmctl",wl="lmctl0",d$={existsSync:r$,mkdirSync:s$,readFileSync:o$,writeFileSync:l$,renameSync:i$,unlinkSync:a$},Dt=d$});import{basename as k$}from"node:path";function JT(t,e){let n=new Date(e.now.getTime()-ar()).toISOString(),r=zT(t,n).filter(m=>!m.sender.teamfile.startsWith("prompt:")),s=L$(e.sender,r),o=x$(e.sender,r);o!==null&&o.teamfile===e.root&&!VT(s[0],o)&&s.unshift({...o,at:null});let i={teamfile:e.receiverTeamfile,alias:e.receiverAlias,at:e.now.getTime()},a=[...s,i],l=s.filter(m=>VT(m,i)),c=l.map(m=>m.at).filter(m=>m!==null).sort((m,p)=>p-m)[0]??null,d=c!==null&&e.now.getTime()-c<A$,u=hf(e.sender,r).length;return{stop:l.length>=1&&d&&u>=N$,chain:C$(a)}}function KT(t,e){let n=new Date(e.now.getTime()-ar()).toISOString(),r=zT(t,n),s=hf(e.sender,r);if(s.length===0)return null;let o=s[0];return o.sender.teamfile.startsWith("prompt:")?o.receiver.teamfile:o.sender.teamfile}function ar(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return GT;let n=Number(e);return!Number.isFinite(n)||n<=0?GT:n}function YT(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function R$(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 zT(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(R$).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function L$(t,e,n={}){let r=new Map;for(let a of e)r.set(Kr(a.receiver),a);let s=[{...t,at:null}],o=t,i=new Set([Kr(t)]);for(let a=0;a<64;a+=1){let l=r.get(Kr(o));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 d=Kr(l.sender);if(i.has(d))break;s.unshift(c),i.add(d),o=l.sender}return s}function hf(t,e){let n=Kr(t),r=new Set([n]),s=[n],o=[];for(let i=0;s.length>0&&i<128;i+=1){let a=s.shift();for(let l of e){let c=Kr(l.sender),d=Kr(l.receiver);c!==a&&d!==a||(o.includes(l)||o.push(l),r.has(c)||(r.add(c),s.push(c)),r.has(d)||(r.add(d),s.push(d)))}}return o.sort((i,a)=>i.at-a.at)}function x$(t,e){let n=hf(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function VT(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function Kr(t){return`${t.teamfile}\0${t.alias}`}function C$(t){return t.map(e=>`${k$(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var A$,N$,GT,bl=x(()=>{"use strict";A$=6e4,N$=2,GT=8*60*60*1e3});function _f(t,e){if(nr(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 Il(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
1743
1743
  FROM tracked_invocation
1744
1744
  WHERE target_teamfile = ?
1745
1745
  AND target_alias = ?
1746
1746
  AND status = 'running'`,e,n),s=0;for(let o of r)_f(t,o)!==null&&(s+=1);return s}var kl=x(()=>{"use strict";nt();vt();Wt()});function Al(t,e,n){return xn(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function Dn(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 qs(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new qs(`session identity mismatch: expected "${n}", got "${o.sessionId}"`),{usage:o.usage,sessionId:o.sessionId});return{...o,...o.text===""&&o.sawActivity===!1?{status:"empty"}:{}}}async function Nl(t,e){ml(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 o=s?await t.openSession(e):void 0,i=!n&&e.sessionId==="";if(o&&(o.provider!==t.name||typeof o.sessionId!="string"||!o.sessionId.trim()||!i&&o.sessionId!==e.sessionId))throw await o.close(),new Error(`session identity mismatch opening ${t.name}: expected "${e.sessionId}", got "${o.sessionId}" (${o.provider})`);let a=o?.sessionId??e.sessionId,l=0,c=!1,d,u;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(f,m={}){if(c)throw new Error("conversation is closed");if(d)throw new Error("conversation already has an active turn");if(m.signal?.aborted)throw new Error("Aborted");let p=new AbortController;d=p;let _=()=>p.abort();m.signal?.addEventListener("abort",_,{once:!0});try{let h=o?await Dn(o,t.name,a,f,{...m,signal:p.signal}):await t.sendTurn(f,{...e,...m,signal:p.signal,requireResume:n,timeoutMs:e.timeoutMs??0});if(p.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 qs(`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 p.signal.aborted&&o&&t.protocol?.persistentCancellation==="session"&&(c=!0),h instanceof qs&&(c=!0,await o?.close()),h}finally{m.signal?.removeEventListener("abort",_),d=void 0}},close(){return u||(c=!0,d?.abort(),u=o?o.close():Promise.resolve()),u}}}var qs,Gs=x(()=>{"use strict";js();qs=class extends Error{}});import{realpathSync as O$}from"node:fs";import{resolve as D$}from"node:path";function gf(t){let e=D$(t);try{return O$(e)}catch{return e}}var QT=x(()=>{"use strict"});import{platform as ZT}from"node:os";function Vs(t){let e=new gi;for(let n of t)e.registerAdapter(n);return e}var gi,yf=x(()=>{"use strict";QT();gi=class{providers=[];adapters=new Map;register(e){this.providers.push(e)}async listAll(e){let n=[],r=e?.provider?this.providers.filter(i=>i.name===e.provider):this.providers,s=await Promise.all(r.map(i=>i.discoverSessions()));for(let i of s)n.push(...i);let o=n;if(e?.workspace){let i=gf(e.workspace);o=o.filter(a=>gf(a.cwd)===i)}if(e?.from){let i=e.from.getTime();o=o.filter(a=>a.modifiedAt.getTime()>=i)}if(e?.to){let i=e.to.getTime();o=o.filter(a=>a.modifiedAt.getTime()<=i)}return o.sort((i,a)=>a.modifiedAt.getTime()-i.modifiedAt.getTime()),e?.limit&&(o=o.slice(0,e.limit)),o}async getSession(e,n){let r=n?this.providers.filter(s=>s.name===n):this.providers;for(let s of r){let o=await s.loadSession(e);if(o)return o}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(o=>o.name===n):this.providers,s=[];for(let o of r){let i=await o.resolveSessionPath(e);i&&s.push({provider:o,filePath:i})}return s}getWatchTargets(){let e=ZT()==="darwin"||ZT()==="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 vf(){return new Tf}function Sf(t){let e=!1;for(let n of t.split(`
1747
- `)){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 If(t){let e=t.trimEnd().split(`
1747
+ `)){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 bf(t){let e=t.trimEnd().split(`
1748
1748
  `).at(-1)?.trimStart()??"";if(!e.startsWith("{"))return!1;try{return JSON.parse(e),!1}catch{return!0}}function ew(t){let e,n=!1,r=!1,s;for(let o of t.split(`
1749
- `)){let i;try{i=JSON.parse(o)}catch{continue}if(i.type==="thread.started"&&typeof i.thread_id=="string"&&(e=i.thread_id),i.type==="turn.started"&&(n=!0),i.type!=="turn.completed"||!n||r)continue;r=!0;let a=i.usage;if(!a)continue;let l=st(a.input_tokens),c=st(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:st(a.output_tokens),reasoning:st(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:Yt([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(If(t)||Sf(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 st,M$,Ef,Tf,wf,bf=x(()=>{"use strict";Xo();st=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,M$=(t,e)=>t===null||e===null?null:st(t+e),Ef=(t,e)=>JSON.stringify([t,e]),Tf=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(Ef(e,n))}turn(e,n=""){return new wf(this,e,n)}};wf=class{session;thread;id;value;ended=!1;reported=new Set;constructor(e,n,r){this.session=e,this.thread=n,this.id=r}bind(e){return typeof e!="string"||!e||this.ended||this.session.finished.has(Ef(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,o=r?.turnId??s?.id,i=typeof r?.threadId=="string"?r.threadId:this.thread;if(this.thread&&i!==this.thread||(this.thread||(this.thread=i),typeof o=="string"&&this.session.finished.has(Ef(i,o))))return!1;if(n==="turn/started")return this.bind(o);if(this.id&&o&&o!==this.id)return!1;if(n==="turn/completed")return this.id?!this.ended:this.bind(o);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(w=>w==null))return!0;let l=w=>["inputTokens","cachedInputTokens","cacheWriteInputTokens","outputTokens","reasoningOutputTokens","totalTokens"].map(S=>w[S]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(w=>st(a.total[w])!==null)?l(a.total):null,d=typeof e.id=="string"&&e.id.length>0||typeof e.id=="number"&&Number.isSafeInteger(e.id)?e.id:null,u=st(e.emittedAtMs)??d,f=st(e.ordinal)??st(r.ordinal),m=JSON.stringify([this.thread,this.id,c,l(a.last),u,d,f]),p=u!==null||f!==null;if(p&&this.session.seen.has(m))return!1;p&&this.session.seen.add(m);let _=a.last,h=st(_.inputTokens),g=st(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:st(_.cacheWriteInputTokens??0),output:st(_.outputTokens),reasoning:st(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:Yt([_.inputTokens,_.cachedInputTokens,_.cacheWriteInputTokens,_.outputTokens,_.reasoningOutputTokens])||h!==null&&g!==null&&g>h};[y.inputUncached,y.cacheRead,y.cacheWrite,y.output].includes(null)&&(y.reason="counter_not_exposed");let T=r.model??_.model;if(typeof T=="string"&&T&&T!=="<synthetic>"&&this.reported.add(T),!this.value)this.value=y;else{for(let w of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let S=this.value[w],I=y[w];S!==null&&I!==null&&st(S+I)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=M$(this.value[w],y[w])}this.value.reason=this.value.reason||y.reason,this.value.invalidCounters||=y.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 $$,writeFileSync as _Y,mkdirSync as gY}from"node:fs";import{join as P$,dirname as EY}from"node:path";import{homedir as U$}from"node:os";function j$(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function W$(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=j$(t.slice(e+1).trim());return n?{key:n,value:r}:null}function H$(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Rl(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function B$(){return P$(U$(),".lmctl","config.toml")}function Ll(t){let e=t??B$(),n;try{n=$$(e,"utf-8")}catch{return{tools:{}}}return X$(n)}function tw(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 X$(t){let e={},n={},r=t.split(`
1749
+ `)){let i;try{i=JSON.parse(o)}catch{continue}if(i.type==="thread.started"&&typeof i.thread_id=="string"&&(e=i.thread_id),i.type==="turn.started"&&(n=!0),i.type!=="turn.completed"||!n||r)continue;r=!0;let a=i.usage;if(!a)continue;let l=st(a.input_tokens),c=st(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:st(a.output_tokens),reasoning:st(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:Yt([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(bf(t)||Sf(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 st,M$,Ef,Tf,wf,If=x(()=>{"use strict";Xo();st=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,M$=(t,e)=>t===null||e===null?null:st(t+e),Ef=(t,e)=>JSON.stringify([t,e]),Tf=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(Ef(e,n))}turn(e,n=""){return new wf(this,e,n)}};wf=class{session;thread;id;value;ended=!1;reported=new Set;constructor(e,n,r){this.session=e,this.thread=n,this.id=r}bind(e){return typeof e!="string"||!e||this.ended||this.session.finished.has(Ef(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,o=r?.turnId??s?.id,i=typeof r?.threadId=="string"?r.threadId:this.thread;if(this.thread&&i!==this.thread||(this.thread||(this.thread=i),typeof o=="string"&&this.session.finished.has(Ef(i,o))))return!1;if(n==="turn/started")return this.bind(o);if(this.id&&o&&o!==this.id)return!1;if(n==="turn/completed")return this.id?!this.ended:this.bind(o);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(w=>w==null))return!0;let l=w=>["inputTokens","cachedInputTokens","cacheWriteInputTokens","outputTokens","reasoningOutputTokens","totalTokens"].map(S=>w[S]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(w=>st(a.total[w])!==null)?l(a.total):null,d=typeof e.id=="string"&&e.id.length>0||typeof e.id=="number"&&Number.isSafeInteger(e.id)?e.id:null,u=st(e.emittedAtMs)??d,f=st(e.ordinal)??st(r.ordinal),m=JSON.stringify([this.thread,this.id,c,l(a.last),u,d,f]),p=u!==null||f!==null;if(p&&this.session.seen.has(m))return!1;p&&this.session.seen.add(m);let _=a.last,h=st(_.inputTokens),g=st(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:st(_.cacheWriteInputTokens??0),output:st(_.outputTokens),reasoning:st(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:Yt([_.inputTokens,_.cachedInputTokens,_.cacheWriteInputTokens,_.outputTokens,_.reasoningOutputTokens])||h!==null&&g!==null&&g>h};[y.inputUncached,y.cacheRead,y.cacheWrite,y.output].includes(null)&&(y.reason="counter_not_exposed");let T=r.model??_.model;if(typeof T=="string"&&T&&T!=="<synthetic>"&&this.reported.add(T),!this.value)this.value=y;else{for(let w of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let S=this.value[w],b=y[w];S!==null&&b!==null&&st(S+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=M$(this.value[w],y[w])}this.value.reason=this.value.reason||y.reason,this.value.invalidCounters||=y.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 $$,writeFileSync as _Y,mkdirSync as gY}from"node:fs";import{join as P$,dirname as EY}from"node:path";import{homedir as U$}from"node:os";function j$(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function W$(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=j$(t.slice(e+1).trim());return n?{key:n,value:r}:null}function H$(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Rl(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function B$(){return P$(U$(),".lmctl","config.toml")}function Ll(t){let e=t??B$(),n;try{n=$$(e,"utf-8")}catch{return{tools:{}}}return X$(n)}function tw(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 X$(t){let e={},n={},r=t.split(`
1750
1750
  `),s={kind:"none"},o={},i=!1,a={};function l(){if(s.kind==="tool"){let u=e[s.tool]??{};if(s.profile){let f=u.profiles?.[s.profile]??{};o.description&&(f.description=o.description),o.flags!==void 0&&(f.flags=o.flags),u.profiles||(u.profiles={}),u.profiles[s.profile]=f}else o.start&&(u.start=o.start),o.resume&&(u.resume=o.resume),o.agent&&(u.agent=o.agent),o.profile_flag!==void 0&&(u.profile_flag=o.profile_flag);e[s.tool]=u}else if(s.kind==="compact"){let u=s.provider?n.providers?.[s.provider]??{}:n.global??{};if(o.min!==void 0){let f=tw(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=tw(o.max);f!==null&&(u.max=f)}s.provider?(n.providers||(n.providers={}),n.providers[s.provider]=u):n.global=u}o={}}for(let u of r){let f=u.trim();if(!f||f.startsWith("#"))continue;let m=H$(f);if(m!==null){if(i=!0,l(),m.startsWith("tool.")){let _=".profile.",h=m.indexOf(_);h!==-1?s={kind:"tool",tool:m.slice(5,h),profile:m.slice(h+_.length)}:s={kind:"tool",tool:m.slice(5),profile:null}}else m==="compact"?s={kind:"compact",provider:null}:m.startsWith("compact.")?s={kind:"compact",provider:m.slice(8)}:s={kind:"none"};continue}let p=W$(f);p&&s.kind!=="none"?o[p.key]=p.value:p&&!i&&(a[p.key]=p.value)}l();let c={tools:e};(n.global||n.providers)&&(c.compact=n);let d=a.site_name;return d!==void 0&&d.length>0&&(c.site_name=d),c}function nw(t){return t.site_name??null}function q$(t,e,n){if(!n)return"";let r=t.tools[e]??kf[e],s=r?.profiles?.[n]?.flags??kf[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 rw(t,e){return!!t.tools[e]}function sw(t,e,n,r,s){let o=t.tools[e]??kf[e],i;if(o?.agent){let l=Rl(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=F$[e];if(!l)throw new Error(`No agent command configured for tool "${e}"`);let c=l.argv.map(d=>d.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,r));if(l.mode==="stdin"){let d=c.map(Rl).join(" ");i=`printf '%s\\n' ${Rl(r)} | ${d}`}else i=c.map(Rl).join(" ")}let a=q$(t,e,s);return a&&(i+=" "+a),i}var kf,F$,xl=x(()=>{"use strict";kf={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:""}}}},F$={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 ow(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 iw=x(()=>{"use strict"});function Ol(t){let e=t?.prompt??Z;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${Z}${lw}${t.teamfile}:
1751
1751
  ${n}${Nf}${JSON.stringify(t.teamfile)}${Rf}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
1752
1752
  ${e}`),e}function aw(t){let e=t.trim(),n=e.match(/^\[lmctl-seed:[0-9a-zA-Z_-]+\](?:\r?\n|\s+)/);if(n&&(e=e.slice(n[0].length).trim()),e===Z)return!0;let r=`${Z}${lw}`;if(!e.startsWith(r)||!e.endsWith(Rf))return!1;let s=e.slice(r.length),o=s.slice(0,-Rf.length),i=o.lastIndexOf(Nf);if(i===-1)return!1;let a=o.slice(i+Nf.length),l;try{if(l=JSON.parse(a),typeof l!="string")return!1}catch{return!1}let c=`${l}:
@@ -1755,40 +1755,40 @@ ${e}`),e}function aw(t){let e=t.trim(),n=e.match(/^\[lmctl-seed:[0-9a-zA-Z_-]+\]
1755
1755
 
1756
1756
  Teamfile `,Nf=`
1757
1757
 
1758
- After this seed finishes, use \`lmctl prompt `,Rf=' <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{existsSync as G$}from"node:fs";function cw(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&&!G$(e);if(!n&&!r)return t;U({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 Js(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function J$(t,e){return e===void 0||e.length===0?t:{...t??process.env,[xf]:e}}function Ce(t,e,n,r="chat"){return{...J$(Js(t,e),n),[V$]:r}}var xf,V$,Ht=x(()=>{"use strict";re();xf="LMCTL_SELF_SESSIONID",V$="LMCTL_LAUNCH_SOURCE"});function Ti(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new Ei(t,n,e)}var lr,Te,ve,Dl,Ei,cr=x(()=>{"use strict";lr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},Te=class extends lr{},ve=class extends lr{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},Dl=class extends lr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},Ei=class extends lr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{spawn as dw}from"node:child_process";import{mkdirSync as K$}from"node:fs";var Yr,ce,Ye=x(()=>{"use strict";bf();xl();iw();Fe();Ht();il();St();cr();Yr=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},ce=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===Z?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"}):(K$(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=dw(this.binary,this.seedArgsFor(n),{cwd:e,env:Js(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 o="",i="";s.stdout?.on("data",l=>{o+=l.toString()}),s.stderr?.on("data",l=>{i+=l.toString()});let a=n?.prompt!==void 0&&this.seedStdin!==void 0?`${n.prompt}
1759
- `:this.seedStdin;a&&s.stdin?.write(a),s.stdin?.end(),s.on("exit",(l,c)=>{if(l===0&&!c)r({success:!0});else{let d=Jr(i).trim(),u=Jr(o).trim(),f=d||u;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:f?we(f,{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:Cl,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&&rw(r.userConfig,this.name)){let o=r.userConfig.tools[this.name];if(o?.agent)return this.runOneShotAgent(e,r,o.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,o,i,a="",l,c=r.sessionId,d,u=()=>{e<=0||(clearTimeout(o),o=setTimeout(()=>{r.onIdleWarning?.(e),f(),s.abort(),d&&d({text:a,...l?{usage:l}:{},sessionId:c,durationMs:e,status:"stalled",stalledAfterMs:e})},e))},f=()=>{clearTimeout(o)};r.signal&&(r.signal.aborted?(i="external",s.abort()):r.signal.addEventListener("abort",()=>{i="external",s.abort()},{once:!0})),u();let m={...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,u(),r.onDelta?.(h)},onProgress:h=>{h.kind!=="api_retry"&&u(),r.onProgress?.(h)}},p=this.transportFn(n,m).then(h=>(f(),{...h,status:h.status??"ok"})).catch(h=>{throw f(),i==="external"?Object.assign(new Yr("Turn cancelled","external"),{usage:h.usage??l,sessionId:c}):h}),_=new Promise(h=>{d=h});return Promise.race([p,_])}runOneShotAgent(e,n,r){let s=sw(n.userConfig,this.name,n.sessionId,e,n.profile),o=Date.now();return new Promise((i,a)=>{let l=n.timeoutMs!==void 0&&n.timeoutMs<=0?0:ow(n.env),c=dw(s,{shell:!0,cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),d=!1,u=!1,f,m,p=!1,_=null,h=null,g=()=>{clearTimeout(f),f=setTimeout(()=>{!If(y)&&!Sf(y)&&w(_,h)},100)},E=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&w(null)},l):void 0,y="",T="";if(c.stdout?.on("data",S=>{let I=S.toString();y+=I,n.onDelta?.(I),p&&!d&&g()}),c.stderr?.on("data",S=>{T+=S.toString(),p&&!d&&g()}),n.signal){if(n.signal.aborted)return clearTimeout(E),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let w=(S,I=null)=>{if(d)return;d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let b=Date.now()-o,L=this.name==="codex"?ew(y):{};L.usage&&n.onUsage?.(L.usage),L.sessionId&&n.onSessionId?.(L.sessionId);let O=k=>Object.assign(k,{usage:L.usage,sessionId:L.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new Yr("Turn cancelled","external")));else if(u)a(O(new Error(`Agent command timed out after ${l}ms`)));else if(S===0||S===null&&I===null)i({text:y.trim(),sessionId:L.sessionId??n.sessionId,durationMs:b,...L.usage?{usage:L.usage}:{}});else{let k=T.trim();a(O(new ve(k?we(k,{provider:this.name}):I?`Agent command terminated by ${I}`:`Agent command exited with code ${S}`,S,I,T)))}};this.name==="codex"?(c.on("close",(S,I)=>w(S,I)),c.on("exit",(S,I)=>{d||(p=!0,_=S,h=I,g(),m=setTimeout(()=>w(S,I),5e3))})):c.on("exit",(S,I)=>w(S,I)),c.on("error",S=>{d||(d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),a(S))})})}}});function fw(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 o=e[s],i=r[s];o!==null&&i!==null&&Oe(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Oe(o+i)}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 Oe,dr,uw,Ml,Ks,$l=x(()=>{"use strict";Xo();Oe=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,dr=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,uw=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});Ml=class{session;seen;parts=[];constructor(e,n){this.session=e,this.seen=n}event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=dr(r?.first?.id),o=dr(r?.last?.id),i=dr(r?.stream?.id),a=dr(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):dr(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,d=Oe(e.promptTokens),u=Oe(c.outputTokens),f=Oe(c.cacheReadTokens),m=Oe(c.cacheWriteTokens),p=d===0,_=f??(p?0:null),h=m??(p?0:null),g=d!==null&&_!==null&&h!==null&&_+h<=d?d-_-h:null,E=(_??0)>0||(h??0)>0,y={...uw(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:Oe(c.reasoningTokens),modelReported:dr(e.modelId),invalidCounters:Yt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||Oe(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Oe(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return fw(this.parts)}},Ks=class{session;boundary;seen;parts=new Map;ownershipUncertain=!1;latestSnapshot;invalidateOwnership(){this.ownershipUncertain=!0,this.latestSnapshot&&(this.latestSnapshot.invalidCounters=!0,this.latestSnapshot.reason="counter_not_exposed")}constructor(e,n,r){this.session=e,this.boundary=n,this.seen=r}update(e,n=1/0){let r=e.filter(l=>Oe(l.seq)!==null&&l.seq>this.boundary&&l.seq<=n),s=r.find(l=>l.type==="turn/start")?.data?.turn,o=new Set(r.map(l=>l.data?.turn).filter(l=>Oe(l)!==null)),i=this.ownershipUncertain||o.size>1,a=new Map;for(let l of r){let c=l.data;if(!c||s!==void 0&&c.turn!==s)continue;let d=l.type==="assistant/message",u=d?c.usage:l.type==="assistant/chunk"&&c.chunk?.type==="usage"?c.chunk.usage:void 0;if(!u||typeof u!="object")continue;let f=Oe(c.turn)!==null&&Oe(c.step)!==null?["step",c.turn,c.step]:dr(c.message?.id)?["message",c.message.id]:["seq",l.seq],m=JSON.stringify([this.session,...f]);if(this.seen.has(m))continue;let p=a.get(m);(!p||d||!p.final)&&a.set(m,{record:l,final:d})}this.parts=new Map;for(let[l,{record:c,final:d}]of a){let u=c.data,f=d?u.usage:u.chunk.usage;this.parts.set(l,{...uw(),inputUncached:Oe(f.inputTokens),cacheRead:Oe(f.cacheReadTokens),output:Oe(f.outputTokens),reasoning:Oe(f.reasoningTokens),modelReported:dr(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Oe(m)===null)||Yt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Oe(f.reasoningTokens)!==null&&Oe(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=fw([...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{createInterface as Y$}from"node:readline";function ur(t,e){let n=e.protocol??"acp",r=Y$({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=z$++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});He({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1758
+ After this seed finishes, use \`lmctl prompt `,Rf=' <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{existsSync as G$}from"node:fs";function cw(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&&!G$(e);if(!n&&!r)return t;U({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 Js(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function J$(t,e){return e===void 0||e.length===0?t:{...t??process.env,[xf]:e}}function Ce(t,e,n,r="chat"){return{...J$(Js(t,e),n),[V$]:r}}var xf,V$,Ht=x(()=>{"use strict";re();xf="LMCTL_SELF_SESSIONID",V$="LMCTL_LAUNCH_SOURCE"});function Ti(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new Ei(t,n,e)}var lr,Te,ve,Dl,Ei,cr=x(()=>{"use strict";lr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},Te=class extends lr{},ve=class extends lr{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},Dl=class extends lr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},Ei=class extends lr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{spawn as dw}from"node:child_process";import{mkdirSync as K$}from"node:fs";var Yr,ce,Ye=x(()=>{"use strict";If();xl();iw();Fe();Ht();il();St();cr();Yr=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},ce=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===Z?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"}):(K$(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=dw(this.binary,this.seedArgsFor(n),{cwd:e,env:Js(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 o="",i="";s.stdout?.on("data",l=>{o+=l.toString()}),s.stderr?.on("data",l=>{i+=l.toString()});let a=n?.prompt!==void 0&&this.seedStdin!==void 0?`${n.prompt}
1759
+ `:this.seedStdin;a&&s.stdin?.write(a),s.stdin?.end(),s.on("exit",(l,c)=>{if(l===0&&!c)r({success:!0});else{let d=Jr(i).trim(),u=Jr(o).trim(),f=d||u;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:f?we(f,{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:Cl,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&&rw(r.userConfig,this.name)){let o=r.userConfig.tools[this.name];if(o?.agent)return this.runOneShotAgent(e,r,o.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,o,i,a="",l,c=r.sessionId,d,u=()=>{e<=0||(clearTimeout(o),o=setTimeout(()=>{r.onIdleWarning?.(e),f(),s.abort(),d&&d({text:a,...l?{usage:l}:{},sessionId:c,durationMs:e,status:"stalled",stalledAfterMs:e})},e))},f=()=>{clearTimeout(o)};r.signal&&(r.signal.aborted?(i="external",s.abort()):r.signal.addEventListener("abort",()=>{i="external",s.abort()},{once:!0})),u();let m={...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,u(),r.onDelta?.(h)},onProgress:h=>{h.kind!=="api_retry"&&u(),r.onProgress?.(h)}},p=this.transportFn(n,m).then(h=>(f(),{...h,status:h.status??"ok"})).catch(h=>{throw f(),i==="external"?Object.assign(new Yr("Turn cancelled","external"),{usage:h.usage??l,sessionId:c}):h}),_=new Promise(h=>{d=h});return Promise.race([p,_])}runOneShotAgent(e,n,r){let s=sw(n.userConfig,this.name,n.sessionId,e,n.profile),o=Date.now();return new Promise((i,a)=>{let l=n.timeoutMs!==void 0&&n.timeoutMs<=0?0:ow(n.env),c=dw(s,{shell:!0,cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),d=!1,u=!1,f,m,p=!1,_=null,h=null,g=()=>{clearTimeout(f),f=setTimeout(()=>{!bf(y)&&!Sf(y)&&w(_,h)},100)},E=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&w(null)},l):void 0,y="",T="";if(c.stdout?.on("data",S=>{let b=S.toString();y+=b,n.onDelta?.(b),p&&!d&&g()}),c.stderr?.on("data",S=>{T+=S.toString(),p&&!d&&g()}),n.signal){if(n.signal.aborted)return clearTimeout(E),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let w=(S,b=null)=>{if(d)return;d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let I=Date.now()-o,L=this.name==="codex"?ew(y):{};L.usage&&n.onUsage?.(L.usage),L.sessionId&&n.onSessionId?.(L.sessionId);let O=k=>Object.assign(k,{usage:L.usage,sessionId:L.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new Yr("Turn cancelled","external")));else if(u)a(O(new Error(`Agent command timed out after ${l}ms`)));else if(S===0||S===null&&b===null)i({text:y.trim(),sessionId:L.sessionId??n.sessionId,durationMs:I,...L.usage?{usage:L.usage}:{}});else{let k=T.trim();a(O(new ve(k?we(k,{provider:this.name}):b?`Agent command terminated by ${b}`:`Agent command exited with code ${S}`,S,b,T)))}};this.name==="codex"?(c.on("close",(S,b)=>w(S,b)),c.on("exit",(S,b)=>{d||(p=!0,_=S,h=b,g(),m=setTimeout(()=>w(S,b),5e3))})):c.on("exit",(S,b)=>w(S,b)),c.on("error",S=>{d||(d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),a(S))})})}}});function fw(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 o=e[s],i=r[s];o!==null&&i!==null&&Oe(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Oe(o+i)}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 Oe,dr,uw,Ml,Ks,$l=x(()=>{"use strict";Xo();Oe=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,dr=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,uw=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});Ml=class{session;seen;parts=[];constructor(e,n){this.session=e,this.seen=n}event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=dr(r?.first?.id),o=dr(r?.last?.id),i=dr(r?.stream?.id),a=dr(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):dr(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,d=Oe(e.promptTokens),u=Oe(c.outputTokens),f=Oe(c.cacheReadTokens),m=Oe(c.cacheWriteTokens),p=d===0,_=f??(p?0:null),h=m??(p?0:null),g=d!==null&&_!==null&&h!==null&&_+h<=d?d-_-h:null,E=(_??0)>0||(h??0)>0,y={...uw(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:Oe(c.reasoningTokens),modelReported:dr(e.modelId),invalidCounters:Yt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||Oe(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Oe(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return fw(this.parts)}},Ks=class{session;boundary;seen;parts=new Map;ownershipUncertain=!1;latestSnapshot;invalidateOwnership(){this.ownershipUncertain=!0,this.latestSnapshot&&(this.latestSnapshot.invalidCounters=!0,this.latestSnapshot.reason="counter_not_exposed")}constructor(e,n,r){this.session=e,this.boundary=n,this.seen=r}update(e,n=1/0){let r=e.filter(l=>Oe(l.seq)!==null&&l.seq>this.boundary&&l.seq<=n),s=r.find(l=>l.type==="turn/start")?.data?.turn,o=new Set(r.map(l=>l.data?.turn).filter(l=>Oe(l)!==null)),i=this.ownershipUncertain||o.size>1,a=new Map;for(let l of r){let c=l.data;if(!c||s!==void 0&&c.turn!==s)continue;let d=l.type==="assistant/message",u=d?c.usage:l.type==="assistant/chunk"&&c.chunk?.type==="usage"?c.chunk.usage:void 0;if(!u||typeof u!="object")continue;let f=Oe(c.turn)!==null&&Oe(c.step)!==null?["step",c.turn,c.step]:dr(c.message?.id)?["message",c.message.id]:["seq",l.seq],m=JSON.stringify([this.session,...f]);if(this.seen.has(m))continue;let p=a.get(m);(!p||d||!p.final)&&a.set(m,{record:l,final:d})}this.parts=new Map;for(let[l,{record:c,final:d}]of a){let u=c.data,f=d?u.usage:u.chunk.usage;this.parts.set(l,{...uw(),inputUncached:Oe(f.inputTokens),cacheRead:Oe(f.cacheReadTokens),output:Oe(f.outputTokens),reasoning:Oe(f.reasoningTokens),modelReported:dr(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Oe(m)===null)||Yt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Oe(f.reasoningTokens)!==null&&Oe(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=fw([...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{createInterface as Y$}from"node:readline";function ur(t,e){let n=e.protocol??"acp",r=Y$({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=z$++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});He({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1760
1760
  `)}),i=(a,l={})=>{t.stdin?.write(`${JSON.stringify({jsonrpc:"2.0",method:a,params:l})}
1761
1761
  `)};return r.on("line",a=>{let l=u=>{if(!e.onProtocolError)return;let f=a.slice(0,512);U({event:`${n}_protocol_error`,provider:e.provider,reason:u,raw_preview:f,truncated:a.length>512}),e.onProtocolError(new Error(`${n.toUpperCase()} ${u}: ${JSON.stringify(f)}${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(He({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 u=s.get(c.id);s.delete(c.id);try{u.onResponse?.(c)}catch(f){u.reject(f instanceof Error?f:new Error(String(f)));return}if(c.error){let f=c.error,m=typeof f?.message=="string"&&f.message.length>0?f.message:JSON.stringify(c.error);u.reject(Ti(`${n.toUpperCase()} RPC error: ${m}`,f))}else u.resolve(c);return}let d=c.method;if(!d){l("returned an uncorrelated response");return}if(typeof c.id=="number"||typeof c.id=="string"){U({event:`${n}_unhandled_request`,provider:e.provider,method:d,id:c.id,params:c.params});let u=JSON.stringify({jsonrpc:"2.0",id:c.id,error:{code:-32601,message:`Method not found: ${d} (lmctl does not implement server-side ${n.toUpperCase()} methods)`}});He({event:`${n}_send`,direction:"SEND",provider:e.provider,replyTo:c.id,error:"method not found"}),t.stdin?.write(`${u}
1762
1762
  `);return}e.onNotification?.(c)}),{sendRpc:o,sendNotification:i,close(a=new Te(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var z$,Cf=x(()=>{"use strict";re();cr();z$=1});import*as Df from"node:child_process";function Z$(t){if(typeof Df.spawnSync=="function")try{Df.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function mw(t){return t.exitCode!==null||t.signalCode!==null}function Of(t,e){return mw(t)?Promise.resolve(!0):new Promise(n=>{let r=!1,s=()=>{r||(r=!0,clearTimeout(o),n(!0))},o=setTimeout(()=>{r||(r=!0,t.removeListener("exit",s),n(!1))},e);t.once("exit",s)})}async function de(t,e={}){let n=Date.now(),r=e.stdinEnd!==!1,s=e.softDelayMs??5e3,o=e.killDelayMs??5e3,i=e.platform??process.platform,a=e.runTaskkill??Z$;if(mw(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await Of(t,s))return{signal:"stdin",elapsedMs:Date.now()-n};if(i==="win32"&&typeof t.pid=="number")a(t.pid);else try{t.kill("SIGTERM")}catch{}if(await Of(t,o))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(i!=="win32")try{t.kill("SIGKILL")}catch{}return await Of(t,Q$)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var Q$,zr=x(()=>{"use strict";Q$=1e3});async function Ul(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(o=>{r=setTimeout(()=>o(Mf),e),r.unref?.(),n!==void 0&&(s=()=>o(Mf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function an(t,e){if(t===void 0){e.closeStdin();return}let n=!1,r=o=>{if(!n){n=!0;try{t.onRelease?.({elapsedMs:Date.now()-o.startedMs,held:o.held,reason:o.reason})}catch{}}e.closeStdin()},s=Date.now();sP(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function sP(t,e,n,r){let s=t.pollMs??eP,o=t.maxHoldMs??Pl,i=t.settleMs??tP,a=t.backgroundGraceMs??nP,l=!1,c=null,d=u=>r({startedMs:n,held:l,reason:u});for(;;){if(e.isAborted())return d("aborted");if(e.hasChildExited())return d("child-exited");let u=o-(Date.now()-n);if(u<=0)return d("max-hold");let f;try{f=await Ul(t.hasOutstandingWork(),u,e.signal)}catch{return d("check-error")}if(f===Mf)return d(e.isAborted()||e.signal?.aborted===!0?"aborted":"max-hold");if(f)c=null;else{if(!l&&e.wasBackgroundJobLaunched?.()===!0&&Date.now()-n<a){let _=a-(Date.now()-n);await new Promise(h=>setTimeout(h,Math.max(0,Math.min(s,rP,_))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),Ue(`${e.label}: dispatched work cleared \u2014 settling ${i}ms before closing stdin`));let p=Math.max(c,e.lastEventAtMs());if(!e.isTurnInFlight()&&Date.now()-p>=i)return d("cleared")}if(l||(l=!0,t.onHold?.(),Ue(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=o)return U({event:"transport_hold_open_max_wait",provider:e.label,elapsed_ms:Date.now()-n}),d("max-hold");let m=Math.max(0,Math.min(s,o-(Date.now()-n)));await new Promise(p=>setTimeout(p,m).unref?.())}}var eP,Pl,tP,nP,rP,Mf,wi=x(()=>{"use strict";re();eP=2e3,Pl=8*60*60*1e3,tP=5e3,nP=1e3,rP=50,Mf=Symbol("check-timed-out")});function pw(t){ye()&&He({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function fr(t,e){let n=iP[t];if(n)return n[e]??n.yolo}function lP(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 De(t,e,n="yolo"){if(aP.has(t)){pw(`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"?fr(t,"plan"):oP[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 U({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new Te(s)}if(!lP(e,r)){let s=r.join(" "),o=`${t} spawn missing YOLO flag '${s}' \u2014 YOLO is mandatory for every provider; see src/providers/yolo-contract.ts. Got argv: [${e.map(i=>JSON.stringify(i)).join(", ")}]`;throw U({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:o}),new Te(o)}pw(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var oP,iP,aP,ln=x(()=>{"use strict";cr();re();oP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},iP={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"]}};aP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as cP}from"node:child_process";import{randomBytes as dP}from"node:crypto";import{realpath as Fl}from"node:fs/promises";function vi(){let t=dP(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 jl(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]:[]];De("muse",n,t.permissionMode??"yolo");let r=cP(t.progPath??"muse",n,{cwd:t.cwd,env:Ce(t.env,t.cwd,t.sessionId),stdio:["pipe","pipe","pipe"]}),s,o=new Set,i=new Set,a,l,c=!1,d=!1,u=!1,f=!1,m=0,p=oT(),_=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",v=>{p.append(v)});let g=(v,A,N)=>{if(s===v){if(s=void 0,v.id&&i.add(v.id),A){let R=v.usage.usage()??(v.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(A,{usage:R?{...R,outcome:v.outcome}:void 0,sessionId:h})}else N&&(N.usage=v.usage.usage());v.cleanup(),v.drained(),v.settled||(v.settled=!0,A?v.reject(A):(m++,v.resolve(N)))}},E=v=>{a||(a=v,s&&g(s,a),T.close(a),!f&&!c&&de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},y=(v,A)=>{let N=A.params;if(!N||N.sessionId!==h)return;let R=A.method;if(R==="view/gap"||R==="session/closed"){E(new Error(`Muse ${R}: the conversation cannot continue without reopening`));return}if(R==="turn/unqueued"&&N.turnId===v.id){v.outcome="cancelled",g(v,new Yr("Muse queued turn cancelled","external"));return}R==="turn/started"&&N.turnId===v.id&&(v.queued=!1);let C=N.item,$=N.turnId??C?.turnId;if($&&$!==v.id||R==="session/tokenUsage"&&(v.settled||N.turnId!==v.id||!v.usage.event(N,v.id)))return;v.opts.onEvent?.(A);let P={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(R)&&C?.turnId===v.id&&typeof C.itemId=="string"){let M=v.items.get(C.itemId);if(M&&typeof C.revision=="number"&&C.revision<=M.revision)return;v.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&R!=="item/updated"?P={kind:R==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...R==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:A}:C.kind==="reasoning"?P={kind:"thinking",raw:A}:C.kind==="agentMessage"&&(P={kind:"text",raw:A})}else if(R==="item/delta"&&typeof N.itemId=="string"&&typeof N.delta=="string"){let M=v.items.get(N.itemId);if(!M)return;M.kind==="agentMessage"&&(N.field===void 0||N.field==="text")?(M.text=(M.text??"")+N.delta,v.cancelled||v.opts.onDelta?.(N.delta),P={kind:"text",raw:A}):M.kind==="reasoning"&&(P={kind:"thinking",raw:A})}if(v.cancelled||v.opts.onProgress?.(P),R!=="turn/completed"||N.turnId!==v.id)return;if(!["completed","failed","cancelled"].includes(N.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(N.terminal)}`));return}if(v.cancelled||N.terminal==="cancelled"){v.outcome="cancelled",g(v,new Yr("Muse turn cancelled",v.cancelled?"external":"provider"));return}if(N.terminal!=="completed"){v.outcome="error",g(v,new Error(N.error?.message??N.reason??`Muse turn ended with ${String(N.terminal)}`));return}let q=[...v.items.values()].filter(M=>M.kind==="agentMessage");g(v,void 0,{text:q.map(M=>typeof M.text=="string"?M.text:"").join(`
1763
- `),sessionId:h,durationMs:typeof N.durationMs=="number"?N.durationMs:Date.now()-v.started,stopReason:N.terminal,...q.some(M=>M.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=ur(r,{provider:"muse",protocol:"msp",onProtocolError:E,onNotification:v=>{if(_=Date.now(),v.method==="view/gap"||v.method==="session/closed"){v.params?.sessionId===h&&!c&&E(new Error(`Muse ${v.method}: session must be reopened`));return}let A=s;A&&(A.id?y(A,v):A.events.push(v))}}),w=async(v,A,N=vi())=>(await T.sendRpc(v,{...A,commandId:N})).result,S=v=>{!v.id||v.interruptSent||s!==v||(v.interruptSent=!0,w("turn/interrupt",{sessionId:h,turnId:v.id}).catch(A=>{s===v&&E(A instanceof Error?A:new Error(String(A)))}))},I=v=>{!v.id||v.unqueueSent||s!==v||(v.unqueueSent=!0,w("turn/unqueue",{sessionId:h,turnId:v.id}).catch(A=>{let N=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(N)?(v.queued=!1,S(v)):s===v&&E(A instanceof Error?A:new Error(N))}))},b=v=>{v.queued?I(v):S(v)};r.on("error",v=>E(new Error(`Unable to start Muse: ${v.message}`)));let L=()=>{c||f||a||u||(u=!0,de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(v=>E(v instanceof Error?v:new Error(String(v)))))};r.stdin.on("error",L),r.stdout.on("end",L),r.on("exit",()=>{f=!0}),r.on("close",(v,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(Ps(`Muse exited (${A??v}) after ${m} completed prompt(s)`,p.text().trim()?we(p.text(),{provider:"muse"}):""))),s&&g(s,new Error("Muse session closed"))});let O=()=>{if(l)return l;c=!0;let v=!!s;return s&&(s.cancelled=!0,b(s)),l=(async()=>{f||(await new Promise(A=>an(d?t.holdOpen:void 0,{isAborted:()=>v,hasChildExited:()=>f,isTurnInFlight:()=>!!s,lastEventAtMs:()=>_,closeStdin:()=>{r.stdin.end(),A()},label:"muse"})),await de(r,{stdinEnd:!1,softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{})),s&&g(s,new Error("Muse session closed")),T.close(new Error("Muse session closed"))})(),l},k=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",k,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let v=(await T.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(v?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof v.museHome!="string"||await Fl(v.museHome)!==await Fl(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(v.sessionDurability!==void 0&&v.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");T.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",R=(t.create?await w("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:A,...t.model?{modelId:t.model}:{}}):await w("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(R?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof R.workspaceRoot!="string"||await Fl(R.workspaceRoot)!==await Fl(t.cwd))throw new Error("Muse session belongs to a different working directory");if(R.activeTurnId||R.status!=="idle")throw new Error(`Muse session is not idle (${String(R.status)})`);if((await w("session/setApprovalMode",{sessionId:h,mode:A}))?.effectiveMode?.mode!==A)throw new Error("Muse did not apply the requested approval mode");if(!t.create&&t.model&&R.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...R.providerId?{providerId:R.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(v){throw await O(),a??v}finally{t.signal?.removeEventListener("abort",k)}return{provider:"muse",sessionId:h,get completedTurns(){return m},close:O,async sendTurn(v,A={}){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(A.signal?.aborted)throw new Error("Aborted");return new Promise((N,R)=>{let C,$=new Promise(M=>{C=M}),P={usage:new Ml(h,o),commandId:vi(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:N,reject:R,drain:$,drained:C,cleanup:()=>{}};s=P;let q=()=>{P.cancelled=!0,P.settled=!0,R(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),b(P)};P.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),w("turn/start",{sessionId:h,input:[{type:"text",text:v}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then(M=>{if(s===P){if(M?.commandId!==P.commandId||M.status!=="accepted"||!["started","queued"].includes(M.disposition)||typeof M.turnId!="string"||M.turnId.length===0||i.has(M.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=M.turnId,P.queued=M.disposition==="queued",P.cancelled&&b(P);for(let ue of P.events)s===P&&y(P,ue);P.events=[]}},M=>{s===P&&g(P,M instanceof Error?M:new Error(String(M)))})})}}}var hw=x(()=>{"use strict";$l();Ye();Cf();zr();Ht();wi();ln();St()});import{join as $f}from"node:path";import{mkdir as uP}from"node:fs/promises";function Pf(t={}){let e=Ta(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Dn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||vi(),a=await jl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:$f(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends ce{constructor(){super({provider:new Ea({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 jl({...s,env:n(s.env),expectedHome:$f(e,"muse")})}async seed(s,o){await uP(s,{recursive:!0});let i=vi(),a,l;try{a=await jl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:$f(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??Z,{signal:o?.signal});if(l=c.usage,await a.close(),!await this.load(i))throw new Error("Muse seed did not persist a readable native session");return{success:!0,sessionId:i,usage:c.usage}}catch(c){return{success:!1,sessionId:i,usage:c?.usage??l,error:`Muse seed failed: ${c instanceof Error?c.message:String(c)}`}}finally{await a?.close()}}}}var Uf=x(()=>{"use strict";Ye();Vd();hw();Gs();Fe()});function gw(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(`
1763
+ `),sessionId:h,durationMs:typeof N.durationMs=="number"?N.durationMs:Date.now()-v.started,stopReason:N.terminal,...q.some(M=>M.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=ur(r,{provider:"muse",protocol:"msp",onProtocolError:E,onNotification:v=>{if(_=Date.now(),v.method==="view/gap"||v.method==="session/closed"){v.params?.sessionId===h&&!c&&E(new Error(`Muse ${v.method}: session must be reopened`));return}let A=s;A&&(A.id?y(A,v):A.events.push(v))}}),w=async(v,A,N=vi())=>(await T.sendRpc(v,{...A,commandId:N})).result,S=v=>{!v.id||v.interruptSent||s!==v||(v.interruptSent=!0,w("turn/interrupt",{sessionId:h,turnId:v.id}).catch(A=>{s===v&&E(A instanceof Error?A:new Error(String(A)))}))},b=v=>{!v.id||v.unqueueSent||s!==v||(v.unqueueSent=!0,w("turn/unqueue",{sessionId:h,turnId:v.id}).catch(A=>{let N=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(N)?(v.queued=!1,S(v)):s===v&&E(A instanceof Error?A:new Error(N))}))},I=v=>{v.queued?b(v):S(v)};r.on("error",v=>E(new Error(`Unable to start Muse: ${v.message}`)));let L=()=>{c||f||a||u||(u=!0,de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(v=>E(v instanceof Error?v:new Error(String(v)))))};r.stdin.on("error",L),r.stdout.on("end",L),r.on("exit",()=>{f=!0}),r.on("close",(v,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(Ps(`Muse exited (${A??v}) after ${m} completed prompt(s)`,p.text().trim()?we(p.text(),{provider:"muse"}):""))),s&&g(s,new Error("Muse session closed"))});let O=()=>{if(l)return l;c=!0;let v=!!s;return s&&(s.cancelled=!0,I(s)),l=(async()=>{f||(await new Promise(A=>an(d?t.holdOpen:void 0,{isAborted:()=>v,hasChildExited:()=>f,isTurnInFlight:()=>!!s,lastEventAtMs:()=>_,closeStdin:()=>{r.stdin.end(),A()},label:"muse"})),await de(r,{stdinEnd:!1,softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{})),s&&g(s,new Error("Muse session closed")),T.close(new Error("Muse session closed"))})(),l},k=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",k,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let v=(await T.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(v?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof v.museHome!="string"||await Fl(v.museHome)!==await Fl(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(v.sessionDurability!==void 0&&v.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");T.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",R=(t.create?await w("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:A,...t.model?{modelId:t.model}:{}}):await w("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(R?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof R.workspaceRoot!="string"||await Fl(R.workspaceRoot)!==await Fl(t.cwd))throw new Error("Muse session belongs to a different working directory");if(R.activeTurnId||R.status!=="idle")throw new Error(`Muse session is not idle (${String(R.status)})`);if((await w("session/setApprovalMode",{sessionId:h,mode:A}))?.effectiveMode?.mode!==A)throw new Error("Muse did not apply the requested approval mode");if(!t.create&&t.model&&R.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...R.providerId?{providerId:R.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(v){throw await O(),a??v}finally{t.signal?.removeEventListener("abort",k)}return{provider:"muse",sessionId:h,get completedTurns(){return m},close:O,async sendTurn(v,A={}){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(A.signal?.aborted)throw new Error("Aborted");return new Promise((N,R)=>{let C,$=new Promise(M=>{C=M}),P={usage:new Ml(h,o),commandId:vi(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:N,reject:R,drain:$,drained:C,cleanup:()=>{}};s=P;let q=()=>{P.cancelled=!0,P.settled=!0,R(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),I(P)};P.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),w("turn/start",{sessionId:h,input:[{type:"text",text:v}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then(M=>{if(s===P){if(M?.commandId!==P.commandId||M.status!=="accepted"||!["started","queued"].includes(M.disposition)||typeof M.turnId!="string"||M.turnId.length===0||i.has(M.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=M.turnId,P.queued=M.disposition==="queued",P.cancelled&&I(P);for(let ue of P.events)s===P&&y(P,ue);P.events=[]}},M=>{s===P&&g(P,M instanceof Error?M:new Error(String(M)))})})}}}var hw=x(()=>{"use strict";$l();Ye();Cf();zr();Ht();wi();ln();St()});import{join as $f}from"node:path";import{mkdir as uP}from"node:fs/promises";function Pf(t={}){let e=Ta(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Dn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||vi(),a=await jl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:$f(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends ce{constructor(){super({provider:new Ea({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 jl({...s,env:n(s.env),expectedHome:$f(e,"muse")})}async seed(s,o){await uP(s,{recursive:!0});let i=vi(),a,l;try{a=await jl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:$f(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??Z,{signal:o?.signal});if(l=c.usage,await a.close(),!await this.load(i))throw new Error("Muse seed did not persist a readable native session");return{success:!0,sessionId:i,usage:c.usage}}catch(c){return{success:!1,sessionId:i,usage:c?.usage??l,error:`Muse seed failed: ${c instanceof Error?c.message:String(c)}`}}finally{await a?.close()}}}}var Uf=x(()=>{"use strict";Ye();Vd();hw();Gs();Fe()});function gw(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(`
1764
1764
 
1765
1765
  --- additional response (turn ${n+1} of ${t.length}; likely an injected mid-call notification) ---
1766
1766
 
1767
- `+t[n]);return e.join("")}function Wl(t={}){let e=[],n="",r=!1,s=t.usageState,o,i=new Set,a=t.resultIds??s?.resultIds??new Set,l=d=>typeof d=="number"&&Number.isSafeInteger(d)&&d>=0?d:null,c=(d,u)=>d===null||u===null?null:d+u;return{processLine(d){if(!d.trim())return;let u;try{u=JSON.parse(d)}catch{return}let f=jf(u,n||s?.sessionId||t.sessionId||"");if(f&&a.has(f))return;f&&a.add(f),t.onEvent?.(u);let m=u.type;if(m==="system"&&u.subtype==="init"&&(n=u.session_id||n,s&&(_w(s,n),typeof u.model=="string"&&(s.model=u.model))),m==="assistant"){let p=u.message;typeof p?.model=="string"&&p.model!=="<synthetic>"&&i.add(p.model);let _=p?.content;if(Array.isArray(_))for(let h of _)h.type==="text"&&h.text&&t.onText?.(h.text)}if(m==="result"&&(r=!0,e.push(u),s)){_w(s,typeof u.session_id=="string"?u.session_id:n);let p=u.usage,_=u.total_cost_usd,h=typeof _=="number"&&Number.isFinite(_)&&_>=0,g=s.cost,E=h&&g!==null&&_>=g?_-g:null;if(s.cost=h?_:null,p&&typeof p=="object"){let y=p.cache_creation,T=l(p.cache_creation_input_tokens),w=bu({cacheWrite5m:y?.ephemeral_5m_input_tokens,cacheWrite1h:y?.ephemeral_1h_input_tokens},T),S=p.output_tokens_details,I={source:"wire",inputUncached:l(p.input_tokens),cacheRead:l(p.cache_read_input_tokens),cacheWrite:l(p.cache_creation_input_tokens),output:l(p.output_tokens),reasoning:l(S?.thinking_tokens),modelReported:null,providerCostUsd:E,reason:E===null?"cumulative_only":null,cacheWrite5m:w?.five??null,cacheWrite1h:w?.one??null,invalidCounters:Yt([p.input_tokens,p.cache_read_input_tokens,p.cache_creation_input_tokens,p.output_tokens,S?.thinking_tokens])};if([I.inputUncached,I.cacheRead,I.cacheWrite,I.output].includes(null)&&(I.reason="counter_not_exposed"),!o)o=I;else{for(let b of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])o[b]=c(o[b]??null,I[b]??null);o.reason=o.reason||I.reason,o.invalidCounters||=I.invalidCounters}}}},usage(){if(o)return{...o,modelReported:i.size>1?null:[...i][0]??s?.model??null,mixedModels:i.size>1}},sawResult(){return r},finalize(){if(!r)return null;let d=yw(e),u=gw(d.resultTexts);return{result:u,usage:this.usage(),sessionId:d.sessionId||n||t.sessionId||"",durationMs:d.durationMs,numTurns:d.numTurns,isError:d.isError&&u.trim().length===0,errorMessage:d.errorMessage}}}}function yw(t){let e=[],n=0,r=0,s="",o=!1,i;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 d=a.session_id;if(typeof d=="string"&&d&&(s=d),a.is_error===!0){o=!0;let u=a.errors,f=Array.isArray(u)?u.filter(p=>typeof p=="string").join("; "):void 0,m=typeof a.subtype=="string"?a.subtype:"unknown";i=f&&f.length>0?f:`result subtype=${m} (no error detail provided)`}}return{resultTexts:e,durationMs:n,numTurns:r,sessionId:s,isError:o,errorMessage:i}}function Ff(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function _w(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function jf(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 Wf=x(()=>{"use strict";Xo();zt()});import{spawn as Tw}from"node:child_process";import{existsSync as ww}from"node:fs";import{join as Hl}from"node:path";import{readdir as fP}from"node:fs/promises";function vw(){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 Sw(){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 Iw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function pP(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.
1767
+ `+t[n]);return e.join("")}function Wl(t={}){let e=[],n="",r=!1,s=t.usageState,o,i=new Set,a=t.resultIds??s?.resultIds??new Set,l=d=>typeof d=="number"&&Number.isSafeInteger(d)&&d>=0?d:null,c=(d,u)=>d===null||u===null?null:d+u;return{processLine(d){if(!d.trim())return;let u;try{u=JSON.parse(d)}catch{return}let f=jf(u,n||s?.sessionId||t.sessionId||"");if(f&&a.has(f))return;f&&a.add(f),t.onEvent?.(u);let m=u.type;if(m==="system"&&u.subtype==="init"&&(n=u.session_id||n,s&&(_w(s,n),typeof u.model=="string"&&(s.model=u.model))),m==="assistant"){let p=u.message;typeof p?.model=="string"&&p.model!=="<synthetic>"&&i.add(p.model);let _=p?.content;if(Array.isArray(_))for(let h of _)h.type==="text"&&h.text&&t.onText?.(h.text)}if(m==="result"&&(r=!0,e.push(u),s)){_w(s,typeof u.session_id=="string"?u.session_id:n);let p=u.usage,_=u.total_cost_usd,h=typeof _=="number"&&Number.isFinite(_)&&_>=0,g=s.cost,E=h&&g!==null&&_>=g?_-g:null;if(s.cost=h?_:null,p&&typeof p=="object"){let y=p.cache_creation,T=l(p.cache_creation_input_tokens),w=Iu({cacheWrite5m:y?.ephemeral_5m_input_tokens,cacheWrite1h:y?.ephemeral_1h_input_tokens},T),S=p.output_tokens_details,b={source:"wire",inputUncached:l(p.input_tokens),cacheRead:l(p.cache_read_input_tokens),cacheWrite:l(p.cache_creation_input_tokens),output:l(p.output_tokens),reasoning:l(S?.thinking_tokens),modelReported:null,providerCostUsd:E,reason:E===null?"cumulative_only":null,cacheWrite5m:w?.five??null,cacheWrite1h:w?.one??null,invalidCounters:Yt([p.input_tokens,p.cache_read_input_tokens,p.cache_creation_input_tokens,p.output_tokens,S?.thinking_tokens])};if([b.inputUncached,b.cacheRead,b.cacheWrite,b.output].includes(null)&&(b.reason="counter_not_exposed"),!o)o=b;else{for(let I of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])o[I]=c(o[I]??null,b[I]??null);o.reason=o.reason||b.reason,o.invalidCounters||=b.invalidCounters}}}},usage(){if(o)return{...o,modelReported:i.size>1?null:[...i][0]??s?.model??null,mixedModels:i.size>1}},sawResult(){return r},finalize(){if(!r)return null;let d=yw(e),u=gw(d.resultTexts);return{result:u,usage:this.usage(),sessionId:d.sessionId||n||t.sessionId||"",durationMs:d.durationMs,numTurns:d.numTurns,isError:d.isError&&u.trim().length===0,errorMessage:d.errorMessage}}}}function yw(t){let e=[],n=0,r=0,s="",o=!1,i;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 d=a.session_id;if(typeof d=="string"&&d&&(s=d),a.is_error===!0){o=!0;let u=a.errors,f=Array.isArray(u)?u.filter(p=>typeof p=="string").join("; "):void 0,m=typeof a.subtype=="string"?a.subtype:"unknown";i=f&&f.length>0?f:`result subtype=${m} (no error detail provided)`}}return{resultTexts:e,durationMs:n,numTurns:r,sessionId:s,isError:o,errorMessage:i}}function Ff(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function _w(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function jf(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 Wf=x(()=>{"use strict";Xo();zt()});import{spawn as Tw}from"node:child_process";import{existsSync as ww}from"node:fs";import{join as Hl}from"node:path";import{readdir as fP}from"node:fs/promises";function vw(){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 Sw(){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 bw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function pP(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.
1768
1768
  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:
1769
1769
  ${we(e,{provider:t.tool})}
1770
1770
 
1771
- ${r}`:r}function bw(t){let e=t.tool||"claude",n=t.binaryPath||mP[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",o=fr(e,s)??hP[e]??["--dangerously-skip-permissions"];if(r.push(...o),De(e,r,s),t.cwd&&!ww(t.cwd))throw U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=Ce(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?cw(i):i}}function kw(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=bw(e))}catch(H){return r(H instanceof Error?H:new Error(String(H)))}let c=Tw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",H=>{Ue(`stream-json: stdin pipe error, ignored (exit handler reports): ${H.message}`)});let d=!1;if(e.signal){if(e.signal.aborted)return d=!0,U({event:"transport_abort",provider:o,phase:"pre_spawn"}),de(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,U({event:"transport_abort",provider:o}),de(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:$.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,T=null,w=null,S=!1,I=!1,b=vw(),L=Sw();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function k(){y!==void 0&&(clearTimeout(y),y=void 0)}let v=null;function A(){return f||d||$.sawResult()}function N(H){return H==="text_done"?b:L}async function R(H){if(H==="text_done"?E=void 0:y=void 0,A()||T!==null)return;v??=Date.now();let ne=N(H);if(e.holdOpen){let ze=(e.holdOpen.maxHoldMs??Pl)-(Date.now()-v),Qe=ze>0?await Ul(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),ze,e.signal):!1;if(A()||(H==="text_done"?E!==void 0:y!==void 0))return;if(Qe===!0){U({event:"transport_stall_grace_deferred",provider:o,grace_kind:H,grace_ms:ne,reason:"outstanding_dispatched_work"}),C(H);return}}w=H,T=H==="text_done"?`${o} finished responding but never emitted its closing result event (${ne}ms of silence after its last message)`:`${o} went silent mid-turn and never emitted its closing result event (${ne}ms of silence)`,U({event:"transport_stall_grace_fired",provider:o,grace_kind:H,grace_ms:ne}),de(c).catch(()=>{})}function C(H){let ne=setTimeout(()=>{R(H)},N(H));ne.unref?.(),H==="text_done"?(O(),E=ne):(k(),y=ne)}let $=Wl({usageState:o==="claude"?Ff(!!e.sessionId):void 0,onEvent:H=>{p=Date.now(),_=H.type!=="result",H.type==="system"&&H.subtype==="init"&&(g=H.session_id||g),H.type==="assistant"?(S=!Iw(H),I=S&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(S=!1,I=!1),O(),o==="claude"&&S&&!I&&!$.sawResult()&&C("text_done"),k(),o==="claude"&&!$.sawResult()&&C("tool_use_silence"),e.onEvent?.(H)},onText:H=>{h+=H,e.onText?.(H)}});function P(){m||(m=!0,an(e.holdOpen,{isAborted:()=>d,hasChildExited:()=>f,isTurnInFlight:()=>_,lastEventAtMs:()=>p,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function q(H){let ne=$.sawResult();$.processLine(H);let fe=$.usage();fe&&e.onUsage?.(fe),!ne&&$.sawResult()&&P()}c.stdout?.on("data",H=>{u+=H.toString();let ne=u.split(`
1771
+ ${r}`:r}function Iw(t){let e=t.tool||"claude",n=t.binaryPath||mP[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",o=fr(e,s)??hP[e]??["--dangerously-skip-permissions"];if(r.push(...o),De(e,r,s),t.cwd&&!ww(t.cwd))throw U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=Ce(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?cw(i):i}}function kw(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=Iw(e))}catch(H){return r(H instanceof Error?H:new Error(String(H)))}let c=Tw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",H=>{Ue(`stream-json: stdin pipe error, ignored (exit handler reports): ${H.message}`)});let d=!1;if(e.signal){if(e.signal.aborted)return d=!0,U({event:"transport_abort",provider:o,phase:"pre_spawn"}),de(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,U({event:"transport_abort",provider:o}),de(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:$.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,T=null,w=null,S=!1,b=!1,I=vw(),L=Sw();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function k(){y!==void 0&&(clearTimeout(y),y=void 0)}let v=null;function A(){return f||d||$.sawResult()}function N(H){return H==="text_done"?I:L}async function R(H){if(H==="text_done"?E=void 0:y=void 0,A()||T!==null)return;v??=Date.now();let ne=N(H);if(e.holdOpen){let ze=(e.holdOpen.maxHoldMs??Pl)-(Date.now()-v),Qe=ze>0?await Ul(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),ze,e.signal):!1;if(A()||(H==="text_done"?E!==void 0:y!==void 0))return;if(Qe===!0){U({event:"transport_stall_grace_deferred",provider:o,grace_kind:H,grace_ms:ne,reason:"outstanding_dispatched_work"}),C(H);return}}w=H,T=H==="text_done"?`${o} finished responding but never emitted its closing result event (${ne}ms of silence after its last message)`:`${o} went silent mid-turn and never emitted its closing result event (${ne}ms of silence)`,U({event:"transport_stall_grace_fired",provider:o,grace_kind:H,grace_ms:ne}),de(c).catch(()=>{})}function C(H){let ne=setTimeout(()=>{R(H)},N(H));ne.unref?.(),H==="text_done"?(O(),E=ne):(k(),y=ne)}let $=Wl({usageState:o==="claude"?Ff(!!e.sessionId):void 0,onEvent:H=>{p=Date.now(),_=H.type!=="result",H.type==="system"&&H.subtype==="init"&&(g=H.session_id||g),H.type==="assistant"?(S=!bw(H),b=S&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(S=!1,b=!1),O(),o==="claude"&&S&&!b&&!$.sawResult()&&C("text_done"),k(),o==="claude"&&!$.sawResult()&&C("tool_use_silence"),e.onEvent?.(H)},onText:H=>{h+=H,e.onText?.(H)}});function P(){m||(m=!0,an(e.holdOpen,{isAborted:()=>d,hasChildExited:()=>f,isTurnInFlight:()=>_,lastEventAtMs:()=>p,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function q(H){let ne=$.sawResult();$.processLine(H);let fe=$.usage();fe&&e.onUsage?.(fe),!ne&&$.sawResult()&&P()}c.stdout?.on("data",H=>{u+=H.toString();let ne=u.split(`
1772
1772
  `);u=ne.pop()||"";for(let fe of ne)q(fe)});let M="";c.stderr?.on("data",H=>{M+=H.toString()}),c.on("error",H=>{U({event:"transport_error",provider:o,error_class:"TransportConnectionError",error_message:H.message}),r(new Te(`Failed to spawn ${i}: ${H.message}`,{cause:H}))}),c.on("exit",(H,ne)=>{if(f=!0,O(),k(),d)return;u.trim()&&q(u);let fe=$.finalize();if(fe?.isError)U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_result_error",error_message:fe.errorMessage}),r(Object.assign(new Error(`${o} reported an error for this turn (no assistant output)`+(e.sessionId?` \u2014 session=${e.sessionId}`:"")+`: ${fe.errorMessage??"unknown error"}`),{usage:fe.usage,sessionId:fe.sessionId}));else if(fe)Ue(`stream-json: result ${fe.result.slice(0,80)}${fe.result.length>80?"...":""} (${fe.durationMs}ms)`),n({result:fe.result,sessionId:fe.sessionId,durationMs:fe.durationMs,numTurns:fe.numTurns,usage:fe.usage,exitCode:H});else if(T!==null&&w==="text_done"&&h.trim().length>0)U({event:"transport_stall_finalized",provider:o,reason:T,text_len:h.length}),n({result:h,sessionId:g||e.sessionId||"",durationMs:Date.now()-s,numTurns:1,exitCode:H,warnings:[T]});else if(T!==null&&w==="tool_use_silence"){let ze=M.trim()?`
1773
1773
  ${we(M,{provider:o})}`:"",Qe=`${T} \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})`:"")+ze;U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:H,signal:ne,stderr_summary:Qe}),r(new ve(Qe,H,ne,M))}else{let ze=T!==null?`${T} \u2014 and produced no usable content to fall back on`+(e.sessionId?` (session=${e.sessionId})`:"")+(M.trim()?`
1774
1774
  ${we(M,{provider:o})}`:""):pP({tool:o,exitCode:H,signal:ne,stderr:M});U({event:"transport_error",provider:o,error_class:"Error",reason:T!==null?"provider_stalled_no_content":"provider_no_result",exit_code:H,signal:ne,stderr_summary:ze}),r(new ve(ze,H,ne,M))}});let ue=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(ue+`
1775
- `),Ue(`stream-json: prompt sent (${t.length} chars)`)})}function _P(t){return t==="qwen"?[Hl(Q,".qwen","projects")]:[Hl(Q,".claude","projects")]}async function Ew(t,e,n){let r=n??_P(t),s=null;for(let a of r){let l;try{l=await fP(a)}catch{continue}for(let c of l){for(let d of[Hl(a,c,`${e}.jsonl`),Hl(a,c,"chats",`${e}.jsonl`)])if(ww(d)){s=d;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 i=(await Et(s,5).catch(()=>[])).map(a=>a?.sessionId).find(a=>typeof a=="string"&&a.length>0);if(i!==e)throw new Error(`stream-json bundle: session file ${s} header does not match the requested session (expected "${e}", header carries ${i??"no sessionId"}) \u2014 the session was likely re-seeded externally; aborting instead of writing into the wrong session`)}async function Aw(t){let{tool:e,binary:n,args:r,spawnEnv:s}=bw(t),o=Tw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",F=>{Ue(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${F.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"?Ff(!!t.sessionId):void 0,d=c?.resultIds??new Set,u=null,f="";o.stderr?.on("data",F=>{f+=F.toString()});let m="",p="",_=!1,h=!1,g=null,E=null,y=null,T,w,S=vw(),I=Sw(),b=null,L=[],O=()=>a.exited?Promise.resolve():new Promise(F=>{L.push(F)}),k=()=>new ve(`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,f);function v(){T!==void 0&&(clearTimeout(T),T=void 0)}function A(){w!==void 0&&(clearTimeout(w),w=void 0)}function N(){return a.exited||b===null||b.aborted||b.processor.sawResult()}function R(F){return F==="text_done"?S:I}async function C(F){if(F==="text_done"?T=void 0:w=void 0,N()||g!==null)return;y??=Date.now();let j=R(F);if(t.holdOpen){let ke=(t.holdOpen.maxHoldMs??Pl)-(Date.now()-y),Ut=ke>0?await Ul(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),ke,void 0):!1;if(N()||(F==="text_done"?T!==void 0:w!==void 0))return;if(Ut===!0){U({event:"transport_stall_grace_deferred",provider:e,grace_kind:F,grace_ms:j,reason:"outstanding_dispatched_work"}),$(F);return}}E=F,g=F==="text_done"?`${e} finished responding but never emitted its closing result event (${j}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${j}ms of silence)`,U({event:"transport_stall_grace_fired",provider:e,grace_kind:F,grace_ms:j}),de(o).catch(()=>{})}function $(F){if(t.serviceHosted)return;let j=setTimeout(()=>{C(F)},R(F));j.unref?.(),F==="text_done"?(v(),T=j):(A(),w=j)}let P=!1,q,M,ue=new Promise((F,j)=>{q=F,M=j});ue.catch(()=>{});let H=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,M(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);H?.unref?.();function ne(F){P||(P=!0,H!==void 0&&clearTimeout(H),F?M(F):q())}let fe="";function ze(F){if(a.lastEventAtMs=Date.now(),F.type==="system"&&F.subtype==="init"){if(c&&typeof F.model=="string"&&(c.model=F.model),p=F.session_id||p,t.sessionId&&typeof F.session_id=="string"&&F.session_id.length>0&&F.session_id!==t.sessionId){let he=new Error(`stream-json bundle: provider resumed a different session (init reported "${F.session_id}", expected "${t.sessionId}")`);ne(he),de(o).catch(()=>{});return}ne()}let j=b?.processor.sawResult()??!0;F.type==="assistant"?(_=!Iw(F),h=_&&F.message?.stop_reason==="pause_turn"):(F.type==="result"||F.type==="user")&&(_=!1,h=!1),v(),e==="claude"&&a.turnActive&&_&&!h&&!j&&$("text_done"),A(),e==="claude"&&a.turnActive&&!j&&$("tool_use_silence")}function Qe(){let F=b;if(F===null)return;let j=F.processor.finalize();if(j!==null){if(b=null,a.turnActive=!1,v(),A(),j.isError){U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:j.errorMessage}),F.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${j.errorMessage??"unknown error"}`),{usage:j.usage,sessionId:j.sessionId}));return}a.completedTurns+=1,l=j.sessionId||l,Ue(`stream-json bundle: result ${j.result.slice(0,80)}${j.result.length>80?"...":""} (${j.durationMs}ms)`),F.resolve({result:j.result,sessionId:j.sessionId||l,durationMs:j.durationMs,numTurns:j.numTurns,usage:j.usage})}}function Ao(F){if(!F.trim())return;let j;try{j=JSON.parse(F)}catch{return}let he=jf(j,p||l);if(he&&d.has(he))return;let ke=b;if(ke===null&&he&&(d.add(he),c&&(c.cost=null)),ze(j),ke!==null){let Ut=ke.processor.sawResult();ke.processor.processLine(F),ke.onEventForward?.(j),!Ut&&ke.processor.sawResult()&&Qe()}}o.stdout?.on("data",F=>{fe+=F.toString();let j=fe.split(`
1776
- `);fe=j.pop()||"";for(let he of j)Ao(he)}),o.on("error",F=>{if(u=new Te(`Failed to spawn ${n}: ${F.message}`,{cause:F}),U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:F.message}),ne(u),b!==null){let j=b;b=null,a.turnActive=!1,j.reject(u)}}),o.on("exit",(F,j)=>{a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),fe.trim()&&Ao(fe),ne(a.exited&&!P?new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`exited (code ${String(F)})`} before its init event`,F,j):void 0);let he=b;if(he!==null&&(b=null,a.turnActive=!1,!he.aborted))if(g!==null&&E==="text_done"&&m.trim().length>0)U({event:"transport_stall_finalized",provider:e,reason:g,text_len:m.length}),he.resolve({result:m,sessionId:p||t.sessionId||"",durationMs:Date.now()-he.startMs,numTurns:1,warnings:[g]});else if(g!==null&&E==="tool_use_silence"){let ke=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:F,signal:j,...ke?{stderr_summary:ke}:{}}),he.reject(new ve(`${g} \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})`:"")+(ke?`
1775
+ `),Ue(`stream-json: prompt sent (${t.length} chars)`)})}function _P(t){return t==="qwen"?[Hl(Q,".qwen","projects")]:[Hl(Q,".claude","projects")]}async function Ew(t,e,n){let r=n??_P(t),s=null;for(let a of r){let l;try{l=await fP(a)}catch{continue}for(let c of l){for(let d of[Hl(a,c,`${e}.jsonl`),Hl(a,c,"chats",`${e}.jsonl`)])if(ww(d)){s=d;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 i=(await Et(s,5).catch(()=>[])).map(a=>a?.sessionId).find(a=>typeof a=="string"&&a.length>0);if(i!==e)throw new Error(`stream-json bundle: session file ${s} header does not match the requested session (expected "${e}", header carries ${i??"no sessionId"}) \u2014 the session was likely re-seeded externally; aborting instead of writing into the wrong session`)}async function Aw(t){let{tool:e,binary:n,args:r,spawnEnv:s}=Iw(t),o=Tw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",F=>{Ue(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${F.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"?Ff(!!t.sessionId):void 0,d=c?.resultIds??new Set,u=null,f="";o.stderr?.on("data",F=>{f+=F.toString()});let m="",p="",_=!1,h=!1,g=null,E=null,y=null,T,w,S=vw(),b=Sw(),I=null,L=[],O=()=>a.exited?Promise.resolve():new Promise(F=>{L.push(F)}),k=()=>new ve(`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,f);function v(){T!==void 0&&(clearTimeout(T),T=void 0)}function A(){w!==void 0&&(clearTimeout(w),w=void 0)}function N(){return a.exited||I===null||I.aborted||I.processor.sawResult()}function R(F){return F==="text_done"?S:b}async function C(F){if(F==="text_done"?T=void 0:w=void 0,N()||g!==null)return;y??=Date.now();let j=R(F);if(t.holdOpen){let ke=(t.holdOpen.maxHoldMs??Pl)-(Date.now()-y),Ut=ke>0?await Ul(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),ke,void 0):!1;if(N()||(F==="text_done"?T!==void 0:w!==void 0))return;if(Ut===!0){U({event:"transport_stall_grace_deferred",provider:e,grace_kind:F,grace_ms:j,reason:"outstanding_dispatched_work"}),$(F);return}}E=F,g=F==="text_done"?`${e} finished responding but never emitted its closing result event (${j}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${j}ms of silence)`,U({event:"transport_stall_grace_fired",provider:e,grace_kind:F,grace_ms:j}),de(o).catch(()=>{})}function $(F){if(t.serviceHosted)return;let j=setTimeout(()=>{C(F)},R(F));j.unref?.(),F==="text_done"?(v(),T=j):(A(),w=j)}let P=!1,q,M,ue=new Promise((F,j)=>{q=F,M=j});ue.catch(()=>{});let H=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,M(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);H?.unref?.();function ne(F){P||(P=!0,H!==void 0&&clearTimeout(H),F?M(F):q())}let fe="";function ze(F){if(a.lastEventAtMs=Date.now(),F.type==="system"&&F.subtype==="init"){if(c&&typeof F.model=="string"&&(c.model=F.model),p=F.session_id||p,t.sessionId&&typeof F.session_id=="string"&&F.session_id.length>0&&F.session_id!==t.sessionId){let he=new Error(`stream-json bundle: provider resumed a different session (init reported "${F.session_id}", expected "${t.sessionId}")`);ne(he),de(o).catch(()=>{});return}ne()}let j=I?.processor.sawResult()??!0;F.type==="assistant"?(_=!bw(F),h=_&&F.message?.stop_reason==="pause_turn"):(F.type==="result"||F.type==="user")&&(_=!1,h=!1),v(),e==="claude"&&a.turnActive&&_&&!h&&!j&&$("text_done"),A(),e==="claude"&&a.turnActive&&!j&&$("tool_use_silence")}function Qe(){let F=I;if(F===null)return;let j=F.processor.finalize();if(j!==null){if(I=null,a.turnActive=!1,v(),A(),j.isError){U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:j.errorMessage}),F.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${j.errorMessage??"unknown error"}`),{usage:j.usage,sessionId:j.sessionId}));return}a.completedTurns+=1,l=j.sessionId||l,Ue(`stream-json bundle: result ${j.result.slice(0,80)}${j.result.length>80?"...":""} (${j.durationMs}ms)`),F.resolve({result:j.result,sessionId:j.sessionId||l,durationMs:j.durationMs,numTurns:j.numTurns,usage:j.usage})}}function Ao(F){if(!F.trim())return;let j;try{j=JSON.parse(F)}catch{return}let he=jf(j,p||l);if(he&&d.has(he))return;let ke=I;if(ke===null&&he&&(d.add(he),c&&(c.cost=null)),ze(j),ke!==null){let Ut=ke.processor.sawResult();ke.processor.processLine(F),ke.onEventForward?.(j),!Ut&&ke.processor.sawResult()&&Qe()}}o.stdout?.on("data",F=>{fe+=F.toString();let j=fe.split(`
1776
+ `);fe=j.pop()||"";for(let he of j)Ao(he)}),o.on("error",F=>{if(u=new Te(`Failed to spawn ${n}: ${F.message}`,{cause:F}),U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:F.message}),ne(u),I!==null){let j=I;I=null,a.turnActive=!1,j.reject(u)}}),o.on("exit",(F,j)=>{a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),fe.trim()&&Ao(fe),ne(a.exited&&!P?new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`exited (code ${String(F)})`} before its init event`,F,j):void 0);let he=I;if(he!==null&&(I=null,a.turnActive=!1,!he.aborted))if(g!==null&&E==="text_done"&&m.trim().length>0)U({event:"transport_stall_finalized",provider:e,reason:g,text_len:m.length}),he.resolve({result:m,sessionId:p||t.sessionId||"",durationMs:Date.now()-he.startMs,numTurns:1,warnings:[g]});else if(g!==null&&E==="tool_use_silence"){let ke=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:F,signal:j,...ke?{stderr_summary:ke}:{}}),he.reject(new ve(`${g} \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})`:"")+(ke?`
1777
1777
  ${ke}`:""),F,j,f))}else{let ke=k(),Ut=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:g!==null?"provider_stalled_no_content":"provider_no_result",exit_code:F,signal:j,...Ut?{stderr_summary:Ut}:{}}),he.reject(new ve(Ut?`${ke.message}
1778
- ${Ut}`:ke.message,F,j,f))}for(let ke of L.splice(0))ke()}),o.on("close",(F,j)=>{if(!a.exited){a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),P||ne(new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`closed (code ${String(F)})`} before its init event`,F,j));for(let he of L.splice(0))he()}});try{t.sessionId&&await Ew(e,t.sessionId,t.sessionFileRoots),await ue}catch(F){let j=u??(F instanceof Error?F:new Error(String(F)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)o.stdin?.end(),await O();else{let he=t.closeTimeoutMs??2e3;await de(o,{softDelayMs:Math.min(1e3,he),killDelayMs:Math.min(1e3,he)}).catch(()=>{})}throw j}let Rr=F=>new Promise(j=>{setTimeout(j,F).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(F,j={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw k();if(b!==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 he=()=>(a.closed=!0,de(o).catch(()=>{}),new Error("Aborted"));if(j.signal?.aborted)throw he();if(t.sessionId&&(await Ew(e,t.sessionId,t.sessionFileRoots),a.exited))throw k();if(j.signal?.aborted)throw he();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((ke,Ut)=>{let F_=Wl({usageState:c,resultIds:d,sessionId:p||l,onText:j_=>{m+=j_,j.onText?.(j_)}}),Ud={processor:F_,resolve:ke,reject:Ut,startMs:Date.now(),aborted:!1,onEventForward:j.onEvent};b=Ud,a.turnActive=!0;let XR=()=>{Ud.aborted=!0,U({event:"transport_abort",provider:e}),a.closed=!0,de(o).catch(()=>{}),b===Ud&&(b=null,a.turnActive=!1),Ut(Object.assign(new Error("Aborted"),{usage:F_.usage()}))};j.signal?.addEventListener("abort",XR,{once:!0});let qR=JSON.stringify({type:"user",message:{role:"user",content:F}});o.stdin?.write(`${qR}
1778
+ ${Ut}`:ke.message,F,j,f))}for(let ke of L.splice(0))ke()}),o.on("close",(F,j)=>{if(!a.exited){a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),P||ne(new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`closed (code ${String(F)})`} before its init event`,F,j));for(let he of L.splice(0))he()}});try{t.sessionId&&await Ew(e,t.sessionId,t.sessionFileRoots),await ue}catch(F){let j=u??(F instanceof Error?F:new Error(String(F)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)o.stdin?.end(),await O();else{let he=t.closeTimeoutMs??2e3;await de(o,{softDelayMs:Math.min(1e3,he),killDelayMs:Math.min(1e3,he)}).catch(()=>{})}throw j}let Rr=F=>new Promise(j=>{setTimeout(j,F).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(F,j={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw k();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 he=()=>(a.closed=!0,de(o).catch(()=>{}),new Error("Aborted"));if(j.signal?.aborted)throw he();if(t.sessionId&&(await Ew(e,t.sessionId,t.sessionFileRoots),a.exited))throw k();if(j.signal?.aborted)throw he();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((ke,Ut)=>{let F_=Wl({usageState:c,resultIds:d,sessionId:p||l,onText:j_=>{m+=j_,j.onText?.(j_)}}),Ud={processor:F_,resolve:ke,reject:Ut,startMs:Date.now(),aborted:!1,onEventForward:j.onEvent};I=Ud,a.turnActive=!0;let XR=()=>{Ud.aborted=!0,U({event:"transport_abort",provider:e}),a.closed=!0,de(o).catch(()=>{}),I===Ud&&(I=null,a.turnActive=!1),Ut(Object.assign(new Error("Aborted"),{usage:F_.usage()}))};j.signal?.addEventListener("abort",XR,{once:!0});let qR=JSON.stringify({type:"user",message:{role:"user",content:F}});o.stdin?.write(`${qR}
1779
1779
  `),Ue(`stream-json bundle: prompt sent (${F.length} chars)`)})},close(){return a.closing!==null||(a.closing=(async()=>{if(a.closed=!0,!a.exited&&(t.holdOpen!==void 0?await new Promise(F=>{an(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>a.exited,isTurnInFlight:()=>a.turnActive,lastEventAtMs:()=>a.lastEventAtMs,closeStdin:()=>{o.stdin?.end(),F()},label:e})}):o.stdin?.end(),!a.exited)){let F=t.closeTimeoutMs;if(F===void 0&&t.serviceHosted)await O();else{let j=F??2e3;await Promise.race([O(),Rr(j)]),a.exited||await de(o,{stdinEnd:!1,softDelayMs:Math.min(1e3,j),killDelayMs:Math.min(1e3,j)}).catch(()=>{})}}})()),a.closing}}}var mP,hP,Hf=x(()=>{"use strict";cr();zr();ln();re();wi();Ht();Wf();Re();St();Wf();mP={claude:"claude",qwen:"qwen"};hP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function Bl(t={}){return[]}var Bf=x(()=>{"use strict"});function Xf(t){return t==="plan"?"read-only":"danger-full-access"}function Nw(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function Xl(){return{agentItems:new Map,resultText:""}}function Ys(t,e,n,r){let s=t.method;if(!s)return!1;let o=t.params;if(s==="turn/started")return e.agentItems.clear(),e.resultText="",!1;if(s==="item/started"){let i=o?.item;if(i?.type==="agentMessage"&&typeof i.id=="string"){let a=typeof i.phase=="string"?i.phase:void 0,l=a==="commentary"||a==="final_answer"?a:void 0;return e.agentItems.set(i.id,{phase:l,buffer:""}),!0}return!1}if(s==="item/agentMessage/delta"){let i=o?.delta||"",a=typeof o?.itemId=="string"?o.itemId:void 0;if(!i)return!0;let l=a?e.agentItems.get(a):void 0;return l?(l.phase==="commentary"||(l.buffer+=i),n?.(i),l.phase&&o&&(o._lmctlItemPhase=l.phase)):(e.resultText+=i,n?.(i)),!0}if(s==="item/completed"){let i=o?.item;if(i?.type==="agentMessage"&&typeof i.id=="string"){let a=e.agentItems.get(i.id);if(a){if(a.phase!=="commentary"){let l=typeof i.text=="string"?i.text:a.buffer;if(r&&typeof i.text=="string"&&i.text!==a.buffer){let c=typeof o?.threadId=="string"?o.threadId:void 0,d=typeof o?.turnId=="string"?o.turnId:void 0;r({itemId:i.id,threadId:c,turnId:d,expectedFromItemText:i.text,gotFromBuffer:a.buffer})}e.resultText+=l}e.agentItems.delete(i.id)}return!0}return!1}return!1}function ql(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function Rw(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 Gl(){return{pendingCodexError:null}}function Vl(t,e){let n=Rw(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function Jl(t,e){if(e.pendingCodexError){let o=e.pendingCodexError;return e.pendingCodexError=null,{shouldReject:!0,turnError:o}}let r=t.params?.turn;if((typeof r?.status=="string"?r.status:void 0)==="failed"){let o=r?.error,i=typeof o?.message=="string"?o.message:void 0,a=i&&i.length>0?i:"(no message)";return{shouldReject:!0,turnError:new Error(`Turn errored: ${a}`)}}return{shouldReject:!1}}var qf=x(()=>{"use strict"});import{spawn as Lw}from"node:child_process";import{createInterface as xw}from"node:readline";import{existsSync as gP,readFileSync as yP}from"node:fs";import{fileURLToPath as EP}from"node:url";function Cw(){return Nw(TP)}function mr(t,e){Ue(`[codex:${t}] ${JSON.stringify(e)}`)}function wP(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.
1780
1780
  One possible cause: Codex stopped before delivering a terminal turn/completed event.`;return e?`Original provider error:
1781
1781
  ${we(e,{provider:"codex"})}
1782
1782
 
1783
1783
  ${n}`:n}function Ow(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?Bl():[];n.push(...s),ye()&&Ke(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let o=t.permissionMode??"yolo",i=Xf(o);if(De("codex",n,o),t.cwd&&!gP(t.cwd))throw U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:i,permissionMode:o,spawnEnv:Ce(t.env,t.cwd,t.threadId)}}function Dw(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 Mw(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=Ow(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=Lw(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:Ce(e.env,e.cwd,e.threadId)}),l=vf(),c=l.turn(e.threadId||""),d=O=>Object.assign(O,{usage:c.usage(),sessionId:_}),u=!1;if(e.signal){if(e.signal.aborted)return u=!0,U({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),de(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,U({event:"transport_abort",provider:"codex"}),de(a).catch(()=>{}),r(d(new Error("Aborted")))},{once:!0})}let f=xw({input:a.stdout}),m=new Map,p=1,_=e.threadId||"",h="",g=!1,E=!1,y=Date.now(),T=Xl(),w=Gl();function S(O,k={}){return new Promise((v,A)=>{let N=p++;m.set(N,{resolve:v,reject:A});let R=JSON.stringify({jsonrpc:"2.0",id:N,method:O,params:k});a.stdin?.write(R+`
1784
- `)})}function I(O,k={}){let v=JSON.stringify({jsonrpc:"2.0",method:O,params:k});a.stdin?.write(v+`
1785
- `)}f.on("line",O=>{let k;try{k=JSON.parse(O)}catch{return}if(typeof k.id=="number"&&m.has(k.id)){Dw(l,k);let R=m.get(k.id);if(m.delete(k.id),k.error){let C=k.error,$=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(k.error);R.reject(Ti(`codex app-server error: ${$}`,C))}else R.resolve(k);e.onEvent?.(k);return}let v=k.method;if(!v){e.onEvent?.(k);return}if(u||!c.event(k))return;let A=c.usage();if(A&&e.onUsage?.(A),v==="thread/started"){let C=k.params?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}let N=ye()?R=>{mr("item.text/buffer-mismatch",{itemId:R.itemId,threadId:R.threadId??null,turnId:R.turnId??null,expectedFromItemText:R.expectedFromItemText,gotFromBuffer:R.gotFromBuffer,expectedLen:R.expectedFromItemText.length,gotLen:R.gotFromBuffer.length})}:void 0;if(v==="turn/started"){let R=k.params,C=R?.turn;C?.id&&(h=C.id),Ys(k,T,e.onDelta,N),ye()&&mr("turn/started",{params:R??null})}if(ye()&&(v==="item/started"||v==="item/completed")){let R=k.params;R?.item?.type==="agentMessage"&&mr(v,{params:R??null})}if(v==="item/started"||v==="item/agentMessage/delta"||v==="item/completed"){if(v==="item/agentMessage/delta"){let R=k.params;ye()&&mr("agentMessage/delta",{params:R??null})}Ys(k,T,e.onDelta,N)}if(v==="turn/completed"){c.finish();let R=k.params;if(ye())for(let[$,P]of T.agentItems.entries())P.buffer&&mr("turn/completed/unflushed-item",{itemId:$,phase:P.phase,bufferLen:P.buffer.length});ql(T),ye()&&mr("turn/completed",{params:R??null});let C=Jl(k,w);C.shouldReject?(ye()&&mr("turn/completed/terminal-reject",{message:C.turnError.message}),E=!0,g=!0,a.stdin?.end(),r(d(C.turnError))):(g=!0,a.stdin?.end())}if(v==="error"){let R=Vl(k,w);if(ye()){let C=k.params,$=C?.error,P=typeof $?.message=="string"?$.message:"(no message)";mr(R.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:R.willRetry,params:C??null})}}e.onEvent?.(k)});let b="";a.stderr?.on("data",O=>{b+=O.toString()});let L=O=>{U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let k=new Te(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let v of m.values())v.reject(d(k));m.clear(),r(d(k))};a.on("error",L),a.stdin?.on("error",L),a.on("exit",(O,k)=>{if(u||E)return;if(g){n({result:T.resultText,usage:c.usage(),threadId:_,turnId:h,durationMs:Date.now()-y,exitCode:O});return}if(w.pendingCodexError){r(d(w.pendingCodexError));return}let v=wP({exitCode:O,signal:k,stderr:b});U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:k,stderr_summary:v}),r(d(new ve(v,O,k,b)))}),(async()=>{try{if(await S("initialize",Cw()),I("initialized",{}),e.threadId)try{let O=S("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),k,v=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((A,N)=>{k=setTimeout(()=>N(new Error("resume timeout")),3e4)});try{let N=(await Promise.race([O,v])).result?.thread?.id;if(e.requireResume&&N!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${N??"unknown"}")`)}finally{clearTimeout(k)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1784
+ `)})}function b(O,k={}){let v=JSON.stringify({jsonrpc:"2.0",method:O,params:k});a.stdin?.write(v+`
1785
+ `)}f.on("line",O=>{let k;try{k=JSON.parse(O)}catch{return}if(typeof k.id=="number"&&m.has(k.id)){Dw(l,k);let R=m.get(k.id);if(m.delete(k.id),k.error){let C=k.error,$=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(k.error);R.reject(Ti(`codex app-server error: ${$}`,C))}else R.resolve(k);e.onEvent?.(k);return}let v=k.method;if(!v){e.onEvent?.(k);return}if(u||!c.event(k))return;let A=c.usage();if(A&&e.onUsage?.(A),v==="thread/started"){let C=k.params?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}let N=ye()?R=>{mr("item.text/buffer-mismatch",{itemId:R.itemId,threadId:R.threadId??null,turnId:R.turnId??null,expectedFromItemText:R.expectedFromItemText,gotFromBuffer:R.gotFromBuffer,expectedLen:R.expectedFromItemText.length,gotLen:R.gotFromBuffer.length})}:void 0;if(v==="turn/started"){let R=k.params,C=R?.turn;C?.id&&(h=C.id),Ys(k,T,e.onDelta,N),ye()&&mr("turn/started",{params:R??null})}if(ye()&&(v==="item/started"||v==="item/completed")){let R=k.params;R?.item?.type==="agentMessage"&&mr(v,{params:R??null})}if(v==="item/started"||v==="item/agentMessage/delta"||v==="item/completed"){if(v==="item/agentMessage/delta"){let R=k.params;ye()&&mr("agentMessage/delta",{params:R??null})}Ys(k,T,e.onDelta,N)}if(v==="turn/completed"){c.finish();let R=k.params;if(ye())for(let[$,P]of T.agentItems.entries())P.buffer&&mr("turn/completed/unflushed-item",{itemId:$,phase:P.phase,bufferLen:P.buffer.length});ql(T),ye()&&mr("turn/completed",{params:R??null});let C=Jl(k,w);C.shouldReject?(ye()&&mr("turn/completed/terminal-reject",{message:C.turnError.message}),E=!0,g=!0,a.stdin?.end(),r(d(C.turnError))):(g=!0,a.stdin?.end())}if(v==="error"){let R=Vl(k,w);if(ye()){let C=k.params,$=C?.error,P=typeof $?.message=="string"?$.message:"(no message)";mr(R.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:R.willRetry,params:C??null})}}e.onEvent?.(k)});let I="";a.stderr?.on("data",O=>{I+=O.toString()});let L=O=>{U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let k=new Te(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let v of m.values())v.reject(d(k));m.clear(),r(d(k))};a.on("error",L),a.stdin?.on("error",L),a.on("exit",(O,k)=>{if(u||E)return;if(g){n({result:T.resultText,usage:c.usage(),threadId:_,turnId:h,durationMs:Date.now()-y,exitCode:O});return}if(w.pendingCodexError){r(d(w.pendingCodexError));return}let v=wP({exitCode:O,signal:k,stderr:I});U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:k,stderr_summary:v}),r(d(new ve(v,O,k,I)))}),(async()=>{try{if(await S("initialize",Cw()),b("initialized",{}),e.threadId)try{let O=S("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),k,v=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((A,N)=>{k=setTimeout(()=>N(new Error("resume timeout")),3e4)});try{let N=(await Promise.race([O,v])).result?.thread?.id;if(e.requireResume&&N!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${N??"unknown"}")`)}finally{clearTimeout(k)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1786
1786
  `),U({event:"codex_thread_resume_fallback",provider:"codex",thread_id:e.threadId,error_message:O instanceof Error?O.message:String(O)});let v=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;v?.id&&(_=v.id,e.onSessionId?.(_))}else{let k=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;k?.id&&(_=k.id,e.onSessionId?.(_))}c=l.turn(_),await S("turn/start",{threadId:_,input:[{type:"text",text:t}],...e.model?{model:e.model}:{}})}catch(O){de(a).catch(()=>{}),r(O instanceof Error?O:new Error(String(O)))}})()})}async function $w(t){let{binary:e,codexArgs:n,sandbox:r}=Ow(t),s=Lw(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ce(t.env,t.cwd,t.threadId)}),o=Date.now(),i={exited:!1,exitCode:null,signal:null,completedTurns:0,closed:!1,closing:null},a=t.threadId||"",l=vf(),c=null,d="";s.stderr?.on("data",k=>{d+=k.toString()});let u=xw({input:s.stdout}),f=new Map,m=1;function p(k,v={}){return new Promise((A,N)=>{let R=m++;f.set(R,{resolve:A,reject:N});let C=JSON.stringify({jsonrpc:"2.0",id:R,method:k,params:v});s.stdin?.write(C+`
1787
1787
  `)})}function _(k,v={}){let A=JSON.stringify({jsonrpc:"2.0",method:k,params:v});s.stdin?.write(A+`
1788
- `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(k=>{h.push(k)}),E=()=>new ve(`codex bundle process exited${i.signal!==null?` by ${i.signal}`:i.exitCode!==null?` with code ${i.exitCode}`:""} after ${i.completedTurns} completed prompt(s); the bundle cannot continue`,i.exitCode,i.signal,d),y=null,T=null,w,S,I=k=>{k.turnId&&p("turn/interrupt",{threadId:a,turnId:k.turnId}).catch(()=>{})};function b(k){let v=y;v===null||v.settled||(v.settled=!0,y=null,v.usage.finish(),k&&v.reject(Object.assign(k,{usage:v.usage.usage(),sessionId:a})))}u.on("line",k=>{let v;try{v=JSON.parse(k)}catch{return}if(typeof v.id=="number"&&f.has(v.id)){Dw(l,v);let P=f.get(v.id);if(f.delete(v.id),v.error){let q=v.error,M=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(v.error);P.reject(Ti(`codex app-server error: ${M}`,q))}else P.resolve(v);y?.onEvent?.(v);return}let A=v.method;if(!A){y?.onEvent?.(v);return}if(A==="thread/started"){let q=v.params?.thread;q?.id&&(a=q.id,t.onSessionId?.(a))}let N=v.params,R=N?.turnId??N?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&R&&(T.usage.bind(R),T.usage.finish(),T.turnId=R,I(T)),A==="turn/completed"&&R===T.turnId&&(l.remember(a,R),T=null,S?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let C=y;if(R&&C?.turnId&&R!==C.turnId||C!==null&&!C.usage.event(v))return;let $=C?.usage.usage();if($&&C?.onUsage?.($),A==="turn/started"&&C!==null){let q=v.params?.turn;q?.id&&(C.turnId=q.id),Ys(v,C.agentState,C.onDelta,void 0)}if(C!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&Ys(v,C.agentState,C.onDelta,void 0),A==="turn/completed"&&C!==null&&!C.settled){ql(C.agentState);let P=Jl(v,C.turnState);C.settled=!0,C.usage.finish(),y=null,P.shouldReject?C.reject(Object.assign(P.turnError,{usage:C.usage.usage(),sessionId:a})):(i.completedTurns+=1,C.resolve({text:C.agentState.resultText,usage:C.usage.usage(),sessionId:a,turnId:C.turnId,durationMs:Date.now()-C.startMs}))}A==="error"&&C!==null&&Vl(v,C.turnState),C?.onEvent?.(v)});let L=k=>{c=new Te(`Failed to spawn codex app-server: ${k.message}`,{cause:k}),U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:k.message});for(let v of f.values())v.reject(c);f.clear(),b(c)};s.on("error",L),s.stdin?.on("error",L),s.on("exit",(k,v)=>{i.exited=!0,S?.(),i.exitCode=k,i.signal=v;let A=E();for(let R of f.values())R.reject(A);f.clear();let N=y;if(N!==null&&!N.settled)if(N.settled=!0,N.usage.finish(),y=null,N.turnState.pendingCodexError)N.reject(Object.assign(N.turnState.pendingCodexError,{usage:N.usage.usage(),sessionId:a}));else{let R=d.trim()?we(d,{provider:"codex"}):"";U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:k,signal:v,...R?{stderr_summary:R}:{}}),N.reject(Object.assign(new ve(R?`${A.message}
1789
- ${R}`:A.message,k,v,d),{usage:N.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()}),s.on("close",(k,v)=>{if(!i.exited){i.exited=!0,i.exitCode=k,i.signal=v;for(let A of h.splice(0))A()}});try{if(await p("initialize",Cw()),_("initialized",{}),t.threadId){let k;try{k=await p("thread/resume",{threadId:t.threadId,sandbox:r,approvalPolicy:"never",...t.model?{model:t.model}:{}})}catch(A){throw new Error(`Cannot resume codex thread ${t.threadId} for a bundle: ${A instanceof Error?A.message:String(A)} (the thread/start fallback is disabled in bundle mode)`)}let v=k.result?.thread;if(v?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${v?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let v=(await p("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;v?.id&&(a=v.id,t.onSessionId?.(a))}}catch(k){let v=c??(k instanceof Error?k:new Error(String(k)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)s.stdin?.end(),await g();else{let A=t.closeTimeoutMs??2e3;await de(s,{softDelayMs:Math.min(1e3,A),killDelayMs:Math.min(1e3,A)}).catch(()=>{})}throw v}let O=k=>new Promise(v=>{setTimeout(v,k).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(k,v={}){if(w&&await w,i.closed||i.closing!==null)throw new Error("codex bundle session is closed");if(i.exited)throw E();if(y!==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(v.signal?.aborted)throw new Error("Aborted");return new Promise((A,N)=>{let R={usage:l.turn(a),onUsage:v.onUsage,agentState:Xl(),turnState:Gl(),resolve:A,reject:N,startMs:Date.now(),turnId:"",onDelta:v.onDelta,onEvent:v.onEvent,settled:!1};y=R;let C=()=>{R.settled||(R.settled=!0,y=null,T=R,w=new Promise($=>{S=$}),I(R),v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(new Error("Aborted"),{usage:R.usage.usage(),sessionId:a})))};v.signal?.addEventListener("abort",C,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:k}],...t.model?{model:t.model}:{}}).then($=>{R.usage.bind($.result?.turn?.id)}).catch($=>{if(R.settled){T===R&&(T=null,S?.());return}R.settled=!0,y=null,v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(i.exited?E():$ instanceof Error?$:new Error(String($)),{usage:R.usage.usage(),sessionId:a}))})})},close(){return i.closing!==null||(i.closing=(async()=>{if(i.closed=!0,S?.(),!i.exited&&(t.holdOpen!==void 0?await new Promise(k=>{an(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),k()},label:"codex"})}):s.stdin?.end(),!i.exited)){let k=t.closeTimeoutMs;if(k===void 0&&t.serviceHosted)await g();else{let v=k??2e3;await Promise.race([g(),O(v)]),i.exited||await de(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,v),killDelayMs:Math.min(1e3,v)}).catch(()=>{})}}})()),i.closing}}}var TP,Pw=x(()=>{"use strict";bf();re();re();cr();zr();wi();ln();Bf();re();Ht();St();qf();qf();TP=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(yP(EP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Kl(t){let e=[...t.matchAll(vP)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return Uw(t.slice(r).trimStart())}return Uw(AP(t.replace(SP,"")))}function AP(t){let e=IP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(bP)];if(r.length<2)return t;let s=r[0],o=(s.index??0)+s[0].length;return n.slice(o).trimStart()}function Uw(t){let e=[...t.matchAll(kP)];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 Mn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function jw(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function Yl(t={}){let e="",n="",r="",s=!1,o=!1,i=!1,a=t.isolateResult??(t.tool==="gemini"?Kl:void 0),l=()=>({result:a?a(n):n,sessionId:e,stopReason:r,sawActivity:i});return{setSessionId(c){e=c},beginTurn(){n="",r="",s=!1,o=!0,i=!1},completeTurn(c){return r=jw(c),s=!0,o=!1,l()},cancelTurn(){n="",r="",o=!1},processMessage(c){if(c.method!=="session/update")return!1;let u=c.params?.update,f=u?.sessionUpdate;if(typeof f!="string"||(o&&NP.has(f)&&(i=!0),f!=="agent_message_chunk"))return!1;let m=u?.content,p=typeof m?.text=="string"?m.text:"";return p&&o&&(n+=p,t.onDelta?.(p)),!0},finalize(){return s?l():null}}}var Fw,vP,SP,IP,bP,kP,NP,Si=x(()=>{"use strict";Fw="(?:png|jpe?g|webp|heic|pdf)",vP=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${Fw}\\s*`,"gi"),SP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${Fw}\\s*`,"i"),IP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,bP=/^STANCE:\s+\S+\s*$/gim,kP=/\[Thought:\s*true\]\s*/gi;NP=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var Gf=x(()=>{"use strict";Cf()});var zl,Ww=x(()=>{"use strict";zl={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 RP,readdirSync as Hw}from"node:fs";import{join as Ql}from"node:path";function Bw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Ql(Q,".gemini"),r=Ql(n,"tmp"),s;try{s=Hw(r)}catch{throw new Error(`gemini bundle: cannot read the gemini session store at ${r} \u2014 cannot verify session "${t}"`)}let o=`"sessionId": "${t}"`,i=`"sessionId":"${t}"`;for(let a of s){let l=Ql(r,a,"chats"),c;try{c=Hw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=RP(Ql(l,d),"utf8").slice(0,8192)}catch{continue}if(u.includes(o)||u.includes(i))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 Ii,Xw=x(()=>{"use strict";Si();Re();ln();Ii={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...Ii.baseArgs];if(t.permissionMode==="plan"){let n=fr("gemini","plan"),r=fr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Kl,sessionIdentity:{verifyLoadedSession:t=>{Bw(t.requestedSessionId,t.env)},recheckSession:t=>{Bw(t.requestedSessionId,t.env)}}}});import{existsSync as LP,readFileSync as xP}from"node:fs";import{join as Vf}from"node:path";function qw(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??Vf(Q,".copilot"),r=Vf(n,"session-state",t),s=Vf(r,"workspace.yaml");if(!LP(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 o;try{o=xP(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 i=/^id:\s*(\S+)\s*$/m.exec(o);if(i===null||i[1]!==t)throw new Error(`copilot bundle: session store entry ${s} belongs to ${i?.[1]??"no recorded id"}, not "${t}"`)}var bi,Gw=x(()=>{"use strict";re();Re();bi={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.
1788
+ `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(k=>{h.push(k)}),E=()=>new ve(`codex bundle process exited${i.signal!==null?` by ${i.signal}`:i.exitCode!==null?` with code ${i.exitCode}`:""} after ${i.completedTurns} completed prompt(s); the bundle cannot continue`,i.exitCode,i.signal,d),y=null,T=null,w,S,b=k=>{k.turnId&&p("turn/interrupt",{threadId:a,turnId:k.turnId}).catch(()=>{})};function I(k){let v=y;v===null||v.settled||(v.settled=!0,y=null,v.usage.finish(),k&&v.reject(Object.assign(k,{usage:v.usage.usage(),sessionId:a})))}u.on("line",k=>{let v;try{v=JSON.parse(k)}catch{return}if(typeof v.id=="number"&&f.has(v.id)){Dw(l,v);let P=f.get(v.id);if(f.delete(v.id),v.error){let q=v.error,M=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(v.error);P.reject(Ti(`codex app-server error: ${M}`,q))}else P.resolve(v);y?.onEvent?.(v);return}let A=v.method;if(!A){y?.onEvent?.(v);return}if(A==="thread/started"){let q=v.params?.thread;q?.id&&(a=q.id,t.onSessionId?.(a))}let N=v.params,R=N?.turnId??N?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&R&&(T.usage.bind(R),T.usage.finish(),T.turnId=R,b(T)),A==="turn/completed"&&R===T.turnId&&(l.remember(a,R),T=null,S?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let C=y;if(R&&C?.turnId&&R!==C.turnId||C!==null&&!C.usage.event(v))return;let $=C?.usage.usage();if($&&C?.onUsage?.($),A==="turn/started"&&C!==null){let q=v.params?.turn;q?.id&&(C.turnId=q.id),Ys(v,C.agentState,C.onDelta,void 0)}if(C!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&Ys(v,C.agentState,C.onDelta,void 0),A==="turn/completed"&&C!==null&&!C.settled){ql(C.agentState);let P=Jl(v,C.turnState);C.settled=!0,C.usage.finish(),y=null,P.shouldReject?C.reject(Object.assign(P.turnError,{usage:C.usage.usage(),sessionId:a})):(i.completedTurns+=1,C.resolve({text:C.agentState.resultText,usage:C.usage.usage(),sessionId:a,turnId:C.turnId,durationMs:Date.now()-C.startMs}))}A==="error"&&C!==null&&Vl(v,C.turnState),C?.onEvent?.(v)});let L=k=>{c=new Te(`Failed to spawn codex app-server: ${k.message}`,{cause:k}),U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:k.message});for(let v of f.values())v.reject(c);f.clear(),I(c)};s.on("error",L),s.stdin?.on("error",L),s.on("exit",(k,v)=>{i.exited=!0,S?.(),i.exitCode=k,i.signal=v;let A=E();for(let R of f.values())R.reject(A);f.clear();let N=y;if(N!==null&&!N.settled)if(N.settled=!0,N.usage.finish(),y=null,N.turnState.pendingCodexError)N.reject(Object.assign(N.turnState.pendingCodexError,{usage:N.usage.usage(),sessionId:a}));else{let R=d.trim()?we(d,{provider:"codex"}):"";U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:k,signal:v,...R?{stderr_summary:R}:{}}),N.reject(Object.assign(new ve(R?`${A.message}
1789
+ ${R}`:A.message,k,v,d),{usage:N.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()}),s.on("close",(k,v)=>{if(!i.exited){i.exited=!0,i.exitCode=k,i.signal=v;for(let A of h.splice(0))A()}});try{if(await p("initialize",Cw()),_("initialized",{}),t.threadId){let k;try{k=await p("thread/resume",{threadId:t.threadId,sandbox:r,approvalPolicy:"never",...t.model?{model:t.model}:{}})}catch(A){throw new Error(`Cannot resume codex thread ${t.threadId} for a bundle: ${A instanceof Error?A.message:String(A)} (the thread/start fallback is disabled in bundle mode)`)}let v=k.result?.thread;if(v?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${v?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let v=(await p("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;v?.id&&(a=v.id,t.onSessionId?.(a))}}catch(k){let v=c??(k instanceof Error?k:new Error(String(k)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)s.stdin?.end(),await g();else{let A=t.closeTimeoutMs??2e3;await de(s,{softDelayMs:Math.min(1e3,A),killDelayMs:Math.min(1e3,A)}).catch(()=>{})}throw v}let O=k=>new Promise(v=>{setTimeout(v,k).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(k,v={}){if(w&&await w,i.closed||i.closing!==null)throw new Error("codex bundle session is closed");if(i.exited)throw E();if(y!==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(v.signal?.aborted)throw new Error("Aborted");return new Promise((A,N)=>{let R={usage:l.turn(a),onUsage:v.onUsage,agentState:Xl(),turnState:Gl(),resolve:A,reject:N,startMs:Date.now(),turnId:"",onDelta:v.onDelta,onEvent:v.onEvent,settled:!1};y=R;let C=()=>{R.settled||(R.settled=!0,y=null,T=R,w=new Promise($=>{S=$}),b(R),v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(new Error("Aborted"),{usage:R.usage.usage(),sessionId:a})))};v.signal?.addEventListener("abort",C,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:k}],...t.model?{model:t.model}:{}}).then($=>{R.usage.bind($.result?.turn?.id)}).catch($=>{if(R.settled){T===R&&(T=null,S?.());return}R.settled=!0,y=null,v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(i.exited?E():$ instanceof Error?$:new Error(String($)),{usage:R.usage.usage(),sessionId:a}))})})},close(){return i.closing!==null||(i.closing=(async()=>{if(i.closed=!0,S?.(),!i.exited&&(t.holdOpen!==void 0?await new Promise(k=>{an(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),k()},label:"codex"})}):s.stdin?.end(),!i.exited)){let k=t.closeTimeoutMs;if(k===void 0&&t.serviceHosted)await g();else{let v=k??2e3;await Promise.race([g(),O(v)]),i.exited||await de(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,v),killDelayMs:Math.min(1e3,v)}).catch(()=>{})}}})()),i.closing}}}var TP,Pw=x(()=>{"use strict";If();re();re();cr();zr();wi();ln();Bf();re();Ht();St();qf();qf();TP=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(yP(EP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Kl(t){let e=[...t.matchAll(vP)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return Uw(t.slice(r).trimStart())}return Uw(AP(t.replace(SP,"")))}function AP(t){let e=bP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(IP)];if(r.length<2)return t;let s=r[0],o=(s.index??0)+s[0].length;return n.slice(o).trimStart()}function Uw(t){let e=[...t.matchAll(kP)];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 Mn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function jw(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function Yl(t={}){let e="",n="",r="",s=!1,o=!1,i=!1,a=t.isolateResult??(t.tool==="gemini"?Kl:void 0),l=()=>({result:a?a(n):n,sessionId:e,stopReason:r,sawActivity:i});return{setSessionId(c){e=c},beginTurn(){n="",r="",s=!1,o=!0,i=!1},completeTurn(c){return r=jw(c),s=!0,o=!1,l()},cancelTurn(){n="",r="",o=!1},processMessage(c){if(c.method!=="session/update")return!1;let u=c.params?.update,f=u?.sessionUpdate;if(typeof f!="string"||(o&&NP.has(f)&&(i=!0),f!=="agent_message_chunk"))return!1;let m=u?.content,p=typeof m?.text=="string"?m.text:"";return p&&o&&(n+=p,t.onDelta?.(p)),!0},finalize(){return s?l():null}}}var Fw,vP,SP,bP,IP,kP,NP,Si=x(()=>{"use strict";Fw="(?:png|jpe?g|webp|heic|pdf)",vP=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${Fw}\\s*`,"gi"),SP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${Fw}\\s*`,"i"),bP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,IP=/^STANCE:\s+\S+\s*$/gim,kP=/\[Thought:\s*true\]\s*/gi;NP=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var Gf=x(()=>{"use strict";Cf()});var zl,Ww=x(()=>{"use strict";zl={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 RP,readdirSync as Hw}from"node:fs";import{join as Ql}from"node:path";function Bw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Ql(Q,".gemini"),r=Ql(n,"tmp"),s;try{s=Hw(r)}catch{throw new Error(`gemini bundle: cannot read the gemini session store at ${r} \u2014 cannot verify session "${t}"`)}let o=`"sessionId": "${t}"`,i=`"sessionId":"${t}"`;for(let a of s){let l=Ql(r,a,"chats"),c;try{c=Hw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=RP(Ql(l,d),"utf8").slice(0,8192)}catch{continue}if(u.includes(o)||u.includes(i))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 bi,Xw=x(()=>{"use strict";Si();Re();ln();bi={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...bi.baseArgs];if(t.permissionMode==="plan"){let n=fr("gemini","plan"),r=fr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Kl,sessionIdentity:{verifyLoadedSession:t=>{Bw(t.requestedSessionId,t.env)},recheckSession:t=>{Bw(t.requestedSessionId,t.env)}}}});import{existsSync as LP,readFileSync as xP}from"node:fs";import{join as Vf}from"node:path";function qw(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??Vf(Q,".copilot"),r=Vf(n,"session-state",t),s=Vf(r,"workspace.yaml");if(!LP(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 o;try{o=xP(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 i=/^id:\s*(\S+)\s*$/m.exec(o);if(i===null||i[1]!==t)throw new Error(`copilot bundle: session store entry ${s} belongs to ${i?.[1]??"no recorded id"}, not "${t}"`)}var Ii,Gw=x(()=>{"use strict";re();Re();Ii={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.
1790
1790
  `),U({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.
1791
- `),U({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...bi.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{qw(t.requestedSessionId,t.env)},recheckSession:t=>{qw(t.requestedSessionId,t.env)}}}});import{existsSync as Kw,mkdirSync as CP,readFileSync as Yw,writeFileSync as Vw}from"node:fs";import{join as ki,resolve as OP}from"node:path";function zw(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 Jf(t,e,n={existsSync:Kw,readFileSync:Yw}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let o=OP(e,s.sessiondir??e);for(let i of DP(o)){let a=MP(i,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(zw(a.permission)||r.push(`[${s.alias}] ${i} 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 DP(t){return[ki(t,".opencode","opencode.jsonc"),ki(t,"opencode.jsonc"),ki(t,"opencode.json")]}function MP(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse($P(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function $P(t){let e="",n=!1,r="",s=!1;for(let o=0;o<t.length;o+=1){let i=t[o],a=t[o+1];if(n){e+=i,s?s=!1:i==="\\"?s=!0:i===r&&(n=!1,r="");continue}if(i==='"'||i==="'"){n=!0,r=i,e+=i;continue}if(i==="/"&&a==="/"){for(;o<t.length&&t[o]!==`
1791
+ `),U({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...Ii.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{qw(t.requestedSessionId,t.env)},recheckSession:t=>{qw(t.requestedSessionId,t.env)}}}});import{existsSync as Kw,mkdirSync as CP,readFileSync as Yw,writeFileSync as Vw}from"node:fs";import{join as ki,resolve as OP}from"node:path";function zw(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 Jf(t,e,n={existsSync:Kw,readFileSync:Yw}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let o=OP(e,s.sessiondir??e);for(let i of DP(o)){let a=MP(i,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(zw(a.permission)||r.push(`[${s.alias}] ${i} 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 DP(t){return[ki(t,".opencode","opencode.jsonc"),ki(t,"opencode.jsonc"),ki(t,"opencode.json")]}function MP(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse($P(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function $P(t){let e="",n=!1,r="",s=!1;for(let o=0;o<t.length;o+=1){let i=t[o],a=t[o+1];if(n){e+=i,s?s=!1:i==="\\"?s=!0:i===r&&(n=!1,r="");continue}if(i==='"'||i==="'"){n=!0,r=i,e+=i;continue}if(i==="/"&&a==="/"){for(;o<t.length&&t[o]!==`
1792
1792
  `;)o+=1;o<t.length&&(e+=t[o]);continue}if(i==="/"&&a==="*"){for(o+=2;o<t.length&&!(t[o]==="*"&&t[o+1]==="/");)o+=1;o+=1;continue}e+=i}return e.replace(/,\s*([}\]])/g,"$1")}function Qw(t,e={}){let n=ki(t,".opencode"),r=ki(n,"opencode.json");if(!Kw(r)){CP(n,{recursive:!0});let i=JSON.stringify({permission:"allow"},null,2);return Vw(r,i+`
1793
1793
  `,"utf-8"),!0}let s;try{s=JSON.parse(Yw(r,"utf-8"))}catch{return console.log(Jw.yellow(` .opencode/opencode.json at ${r} is malformed \u2014 skipping opencode config install.`)),!1}if(typeof s!="object"||s===null)return console.log(Jw.yellow(` .opencode/opencode.json at ${r} is not an object \u2014 skipping opencode config install.`)),!1;let o=!1;return s.permission===void 0&&(s.permission="allow",o=!0),zw(s.permission)||U({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.`}),o&&Vw(r,JSON.stringify(s,null,2)+`
1794
1794
  `,"utf-8"),o}var Jw,Kf=x(()=>{"use strict";re();Jw={yellow:t=>t}});import{existsSync as zf,readdirSync as PP,statSync as Zw}from"node:fs";import{join as pr}from"node:path";import{createRequire as UP}from"node:module";function Qf(){return Yf===null&&(Yf=UP(import.meta.url)("node:sqlite").DatabaseSync),Yf}function ev(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function tv(t,e){if(!e)return;t.observed=!0;let n=e.input??0,r=e.output??0,s=e.reasoning??0,o=e.cache?.read??0,i=e.cache?.write??0;if(t.totalInputTokens+=n,t.totalCachedInputTokens+=o,t.totalCacheWriteInputTokens+=i,t.totalOutputTokens+=r,t.totalReasoningOutputTokens+=s,n+r+s+o+i>0){let a=n+o+i;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:n,cachedInputTokens:o,cacheWriteInputTokens:i,outputTokens:r,reasoningOutputTokens:s,totalTokens:a+r+s}}}function nv(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 rv(){let t=process.env.XDG_DATA_HOME||pr(Q,".local","share"),e=process.env.XDG_CONFIG_HOME||pr(Q,".config");return[pr(t,"opencode","opencode.db"),pr(e,"opencode","opencode.db")]}function FP(){return jP(process.env,Q)}function jP(t,e){if(t.OPENCODE_DB)return[t.OPENCODE_DB];let n=t.XDG_DATA_HOME||pr(e,".local","share"),r=pr(n,"lmplayer"),s=pr(r,"opencode-local.db"),o=[s];try{let i=PP(r).filter(a=>/^opencode.*\.db$/u.test(a)).map(a=>pr(r,a)).filter(a=>a!==s).sort((a,l)=>{try{return Zw(l).mtimeMs-Zw(a).mtimeMs}catch{return 0}});o.push(...i)}catch{}return o}function WP(t){return t==="lmplayer"?FP():rv()}function Zf(t,e){let n=e?.dbPath!==void 0?[e.dbPath]:rv();for(let r of n){if(!zf(r))continue;let s=new(Qf())(r,{open:!0,readOnly:!0});try{s.exec("PRAGMA busy_timeout = 5000");let o=s.prepare("SELECT directory FROM session WHERE id = ?").get(t);if(o!==void 0)return{directory:typeof o.directory=="string"?o.directory:""}}finally{s.close()}}return null}var Yf,zs,Zl=x(()=>{"use strict";Re();re();Yf=null;zs=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=WP(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>zf(e))}openDb(e){if(!zf(e))return null;let n=new(Qf())(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,o=r.prepare("SELECT id, worktree, name FROM project").all();for(let a of o)s.set(a.id,a);let i=r.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
@@ -1808,39 +1808,39 @@ ${R}`:A.message,k,v,d),{usage:N.usage.usage(),sessionId:a}))}for(let R of h.spli
1808
1808
  `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var em=x(()=>{"use strict"});import{spawn as HP}from"node:child_process";import{resolve as sv}from"node:path";function Ni(t){let e;try{e=HP(t.binaryPath??Qr.binary,[...Qr.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ce(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=ur(e,{provider:"opencode"}),r=t.timeoutMs??5e3;return new Promise(s=>{let o=!1,i=(d,u=!0)=>{if(!o){if(o=!0,clearTimeout(c),e.removeListener("error",a),e.removeListener("exit",l),n.close(),!u){s(d);return}de(e,{softDelayMs:100,killDelayMs:100}).finally(()=>s(d))}},a=d=>{i({status:"unavailable",reason:"spawn",error:d.message},!1)},l=(d,u)=>{i({status:"unavailable",reason:"handshake",error:`opencode ACP exited before verification (code=${String(d)}, signal=${String(u)})`},!1)};e.once("error",a),e.once("exit",l);let c=setTimeout(()=>{i({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 d=await n.sendRpc("session/new",{cwd:t.cwd,mcpServers:[]}),u=Mn(d);try{await n.sendRpc("session/set_config_option",{sessionId:u,configId:"model",value:t.model})}catch(f){i({status:"rejected",option:"model",value:t.model,error:f instanceof Error?f.message:String(f)});return}if(t.effort!==void 0)try{await n.sendRpc("session/set_config_option",{sessionId:u,configId:"effort",value:t.effort})}catch(f){i({status:"rejected",option:"effort",value:t.effort,error:f instanceof Error?f.message:String(f)});return}i({status:"verified"})}catch(d){i({status:"unavailable",reason:"handshake",error:d instanceof Error?d.message:String(d)})}})()})}var Qr,tm=x(()=>{"use strict";re();Kf();Zl();Si();Ht();zr();Gf();em();Qr={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...Qr.baseArgs],preSpawn(t){try{Qw(t.cwd)}catch(e){U({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[Ai({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),Ai({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:Ni,sessionIdentity:{verifyLoadedSession:t=>{let e=Zf(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(sv(e.directory)!==sv(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(Zf(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 BP}from"node:fs";import{readdir as XP}from"node:fs/promises";import{join as nm,resolve as qP}from"node:path";function iv(t){let e=GP.exec(t);return e?e[0]:null}function VP(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 o=[s],i=r;for(;i+1<e.length&&o.length<8&&(i++,o.push(e[i]),e[i].trim()!=="}"););let a=o.join(`
1809
1809
  `);if(/\bcode:\s*-32601\b/.test(a)&&/Method not found[^]*notifications\/initialized/.test(a)){r=i;continue}}n.push(s)}return n.join(`
1810
1810
  `)}async function ov(t,e){let n=qP(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??nm(Q,".kimi-code")),r=nm(n,"sessions"),s;try{s=await XP(r,{withFileTypes:!0})}catch{throw new Error(`kimi bundle: cannot read the kimi session store at ${r} \u2014 cannot verify session "${t}"`)}for(let o of s)if(o.isDirectory()&&BP(nm(r,o.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 GP,rm,Ri,sm=x(()=>{"use strict";re();Re();em();GP=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;rm=t=>t.permissionMode==="plan"?"plan":"auto";Ri={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...Ri.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:rm(t)})},describeFailure:(t,e)=>{let n=rm(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=${rm(t)}) ok`},Ai({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=iv(t.result);e!==null&&U({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:VP,sessionIdentity:{verifyLoadedSession:async t=>{await ov(t.requestedSessionId,t.env)},recheckSession:async t=>{await ov(t.requestedSessionId,t.env)}}}});var Li,av=x(()=>{"use strict";Li={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...Li.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}
1811
- `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function xi(t){return JP[t]}var JP,KP,lv=x(()=>{"use strict";Ww();Xw();Gw();tm();sm();av();JP={miniplayer:zl,gemini:Ii,copilot:bi,opencode:Qr,kimi:Ri,hermes:Li};KP={miniplayer:{binary:zl.binary,args:zl.baseArgs},gemini:{binary:Ii.binary,args:Ii.baseArgs},copilot:{binary:bi.binary,args:bi.baseArgs},opencode:{binary:Qr.binary,args:Qr.baseArgs},kimi:{binary:Ri.binary,args:Ri.baseArgs},hermes:{binary:Li.binary,args:Li.baseArgs}}});import{spawn as cv}from"node:child_process";import{existsSync as YP}from"node:fs";function dv(t,e){let n=xi(t)?.modeVocabulary;if(!n)throw new Te(`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 Te(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new Te(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function zP(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.
1811
+ `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function xi(t){return JP[t]}var JP,KP,lv=x(()=>{"use strict";Ww();Xw();Gw();tm();sm();av();JP={miniplayer:zl,gemini:bi,copilot:Ii,opencode:Qr,kimi:Ri,hermes:Li};KP={miniplayer:{binary:zl.binary,args:zl.baseArgs},gemini:{binary:bi.binary,args:bi.baseArgs},copilot:{binary:Ii.binary,args:Ii.baseArgs},opencode:{binary:Qr.binary,args:Qr.baseArgs},kimi:{binary:Ri.binary,args:Ri.baseArgs},hermes:{binary:Li.binary,args:Li.baseArgs}}});import{spawn as cv}from"node:child_process";import{existsSync as YP}from"node:fs";function dv(t,e){let n=xi(t)?.modeVocabulary;if(!n)throw new Te(`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 Te(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new Te(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function zP(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.
1812
1812
  One possible cause: the provider process failed before a complete ACP response was delivered.`;return e?`Original provider error:
1813
1813
  ${we(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
1814
1814
 
1815
1815
  ${n}`:n}function QP(t,e){return xi(t)?.filterExpectedStderr?.(e)??e}function uv(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 fv(t,e,n,r){for(let s of t.sessionSetup??[]){let o={...e,sessionId:n.sessionId,response:n.response,sendRpc:r};if(s.applies(o))try{await s.run(o),s.successLog&&Ue(s.successLog(o))}catch(i){let a=s.describeFailure(o,i);if(U({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 mv(t,e,n){let r=Ce(e.env,e.cwd,e.sessionId);t.preSpawn?.({...n,cwd:e.cwd,env:r});let s=e.binaryPath||t.binary,o=t.argv(n),i=t.yoloAssertion==="always-yolo"?"yolo":n.permissionMode;if(De(e.tool,o,i),e.cwd&&!YP(e.cwd))throw U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new Te(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function pv(t){let{sendRpc:e,sendNotification:n,opts:r,outputProcessor:s}=t,o=t.strictSessionIdentity===!0,i=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(i.result?.agentCapabilities?.loadSession===!1)throw new Error("provider advertises loadSession=false");c=await e("session/load",{sessionId:r.sessionId,cwd:r.cwd,mcpServers:[]})}catch(u){if(o||r.requireResume)throw new Error(`Cannot resume session ${r.sessionId} via ACP: ${u instanceof Error?u.message:String(u)}`);process.stderr.write(`[acp] session/load failed for ${r.sessionId}, creating new session
1816
- `),U({event:"acp_session_resume_fallback",provider:r.tool,session_id:r.sessionId,error_message:u instanceof Error?u.message:String(u)});let f=await e("session/new",{cwd:r.cwd,mcpServers:[]});return a=Mn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Mn(c);if(r.requireResume&&d!==""&&d!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${d}"`);if(o){let u=Mn(c);if(u!==""&&u!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${u}"`);if(u===""){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=Mn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Mn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function hv(t,e){let n=xi(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{dv(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let o=e.permissionMode??"yolo",i=[],a={permissionMode:o,...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:b=>{i.push(b)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=mv(n,e,a))}catch(b){return s(b instanceof Error?b:new Error(String(b)))}let u=cv(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:d}),f=Date.now(),m=!1,p=!1,_=0,h=!1,g=!1;if(e.signal){if(e.signal.aborted)return m=!0,U({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),de(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,U({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),de(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=Yl({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=ur(u,{provider:e.tool,onEvent:b=>{_=Date.now(),uv(b)&&(g=!0),e.onEvent?.(b)},onNotification:b=>{_=Date.now(),y.processMessage(b)}}),{sendRpc:w,sendNotification:S}=T,I="";u.stderr?.on("data",b=>{I+=b.toString()}),u.on("error",b=>{T.close(b),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:b.message,elapsed_ms:Date.now()-f}),s(new Te(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${b.message}`,{cause:b}))}),u.on("exit",(b,L)=>{if(p=!0,T.close(new ve(`ACP process ${L?`terminated by ${L}`:`exited with code ${String(b)}`}`,b,L)),m)return;let O=y.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:b}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-f,stopReason:O.stopReason,exitCode:b,sawActivity:O.sawActivity,...i.length>0?{warnings:i}:{}});else{let k=QP(e.tool,I),v=zP({tool:e.tool,exitCode:b,signal:L,stderr:k,fullOutput:I});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:b,signal:L,stderr_summary:v,elapsed_ms:Date.now()-f}),s(new ve(v,b,L,I))}}),(async()=>{try{let b=await pv({sendRpc:w,sendNotification:S,opts:e,outputProcessor:y});E=b.sessionId,e.onSessionId?.(E);let L=b.sessionResponse;await fv(n,a,{sessionId:E,response:L},w),y.beginTurn(),h=!0,Ue(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},k=>{k.error?y.cancelTurn():O=y.completeTurn(k)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,Ue(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),an(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(b){de(u).catch(()=>{}),s(b instanceof Error?b:new Error(String(b)))}})()})}async function _v(t){let e=xi(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&dv(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,o={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:L=>{r.push(L)}}},{binary:i,spawnArgs:a,spawnEnv:l}=mv(e,t,o),c=cv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,_="";c.stderr?.on("data",L=>{_+=L.toString()});let h,g,E=Yl({tool:t.tool,onDelta:L=>h?.(L),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=ur(c,{provider:t.tool,onEvent:L=>{u.lastEventAtMs=Date.now(),uv(L)&&(u.backgroundJobLaunched=!0),g?.(L)},onNotification:L=>{u.lastEventAtMs=Date.now(),E.processMessage(L)}}),T=()=>new ve(`ACP bundle process (${t.tool}) exited${u.signal!==null?` by ${u.signal}`:u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`,u.exitCode,u.signal,_),w=[],S=()=>u.exited?Promise.resolve():new Promise(L=>{w.push(L)}),I=null;c.on("error",L=>{p=new Te(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${L.message}`,{cause:L}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:L.message,elapsed_ms:Date.now()-d}),y.close(L)}),c.on("exit",(L,O)=>{if(u.exited=!0,u.exitCode=L,u.signal=O,y.close(new ve(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(L)}`}`,L,O)),!u.telemetryFired){u.telemetryFired=!0;let k=E.finalize();k!==null&&e.onExitFinalization?.({...o,sessionId:k.sessionId,result:k.result,stopReason:k.stopReason,exitCode:L})}if(I!==null){let k=I;I=null,k(T())}for(let k of w.splice(0))k()}),c.on("close",(L,O)=>{if(!u.exited){u.exited=!0,u.exitCode=L,u.signal=O;for(let k of w.splice(0))k()}});try{let L=await pv({sendRpc:y.sendRpc,sendNotification:y.sendNotification,opts:t,outputProcessor:E,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...o,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});m=L.sessionId,t.onSessionId?.(m),await fv(e,o,{sessionId:L.sessionId,response:L.sessionResponse},y.sendRpc)}catch(L){let O=p??(L instanceof Error?L:new Error(String(L)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await S()):de(c).catch(()=>{}),O}let b=L=>new Promise(O=>{setTimeout(O,L).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(L,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.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:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,h=O.onDelta,g=O.onEvent;let k=Date.now();try{E.beginTurn(),Ue(`acp: bundle prompt sent (${L.length} chars)`);let v,A=!1;if(await new Promise((R,C)=>{I=C;let $,P=()=>{A=!0,f=Promise.resolve().then(()=>$).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),C(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",P,{once:!0}),$=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:L}]},M=>{A||(M.error?E.cancelTurn():v=E.completeTurn(M),h=void 0,g=void 0)}),$.then(M=>{q?.removeEventListener("abort",P),R(M)},M=>{q?.removeEventListener("abort",P),C(M instanceof Error?M:new Error(String(M)))})}),I=null,!v)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Ue(`acp: bundle result received (${v.result.length} chars, stopReason=${v.stopReason})`);let N=s&&r.length>0?[...r]:void 0;return s=!1,{result:v.result,sessionId:v.sessionId,stopReason:v.stopReason,durationMs:Date.now()-k,sawActivity:v.sawActivity,...N!==void 0?{warnings:N}:{}}}catch(v){throw I=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():v}finally{h=void 0,g=void 0}},close(){return u.closing!==null||(u.closing=(async()=>{if(u.closed=!0,u.exited||(t.holdOpen!==void 0?await new Promise(O=>{an(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let L=t.closeTimeoutMs;if(L===void 0&&t.serviceHosted)await S();else{let O=L??2e3;await Promise.race([S(),b(O)]),u.exited||await de(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),u.closing}}}var om=x(()=>{"use strict";re();cr();zr();wi();ln();re();Ht();St();Si();Gf();lv();sm();tm();Si()});function Se(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function gv(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=ZP){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 yv(){let t=new Map;return(e,n)=>{e1(e,gv(t,n))}}function e1(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,o=typeof t.max_retries=="number"?t.max_retries:void 0,i=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(o!==void 0?`attempt ${s}/${o}`:`attempt ${s}`),i!==void 0&&c.push(`HTTP ${i}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(Se(a,60));let d=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:d});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,o=typeof t.error=="string"?t.error:void 0,i=["api_error"];s!==void 0&&i.push(`HTTP ${s}`),o&&i.push(Se(o,80)),e({kind:"other",summary:i.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 o of s){let i=o.type;if(i==="text"){let a=o.text||"";a&&e({kind:"text",summary:Se(a),raw:o})}else if(i==="tool_use"){let a=o.name||"tool",l=typeof o.id=="string"?o.id:void 0,c=o.input,d="";c&&(typeof c.command=="string"?d=c.command:typeof c.file_path=="string"?d=c.file_path:typeof c.path=="string"?d=c.path:typeof c.pattern=="string"?d=c.pattern:typeof c.url=="string"?d=c.url:d=Se(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:Se(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:Se(a),raw:o})}else if(i==="tool_result"){let l=o.is_error===!0?"error":"ok",c=typeof o.tool_use_id=="string"?o.tool_use_id:void 0,d,u=o.content;if(typeof u=="string")d=`${u.split(`
1816
+ `),U({event:"acp_session_resume_fallback",provider:r.tool,session_id:r.sessionId,error_message:u instanceof Error?u.message:String(u)});let f=await e("session/new",{cwd:r.cwd,mcpServers:[]});return a=Mn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Mn(c);if(r.requireResume&&d!==""&&d!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${d}"`);if(o){let u=Mn(c);if(u!==""&&u!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${u}"`);if(u===""){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=Mn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Mn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function hv(t,e){let n=xi(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{dv(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let o=e.permissionMode??"yolo",i=[],a={permissionMode:o,...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=>{i.push(I)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=mv(n,e,a))}catch(I){return s(I instanceof Error?I:new Error(String(I)))}let u=cv(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:d}),f=Date.now(),m=!1,p=!1,_=0,h=!1,g=!1;if(e.signal){if(e.signal.aborted)return m=!0,U({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),de(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,U({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),de(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=Yl({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=ur(u,{provider:e.tool,onEvent:I=>{_=Date.now(),uv(I)&&(g=!0),e.onEvent?.(I)},onNotification:I=>{_=Date.now(),y.processMessage(I)}}),{sendRpc:w,sendNotification:S}=T,b="";u.stderr?.on("data",I=>{b+=I.toString()}),u.on("error",I=>{T.close(I),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:I.message,elapsed_ms:Date.now()-f}),s(new Te(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${I.message}`,{cause:I}))}),u.on("exit",(I,L)=>{if(p=!0,T.close(new ve(`ACP process ${L?`terminated by ${L}`:`exited with code ${String(I)}`}`,I,L)),m)return;let O=y.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()-f,stopReason:O.stopReason,exitCode:I,sawActivity:O.sawActivity,...i.length>0?{warnings:i}:{}});else{let k=QP(e.tool,b),v=zP({tool:e.tool,exitCode:I,signal:L,stderr:k,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:I,signal:L,stderr_summary:v,elapsed_ms:Date.now()-f}),s(new ve(v,I,L,b))}}),(async()=>{try{let I=await pv({sendRpc:w,sendNotification:S,opts:e,outputProcessor:y});E=I.sessionId,e.onSessionId?.(E);let L=I.sessionResponse;await fv(n,a,{sessionId:E,response:L},w),y.beginTurn(),h=!0,Ue(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},k=>{k.error?y.cancelTurn():O=y.completeTurn(k)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,Ue(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),an(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(I){de(u).catch(()=>{}),s(I instanceof Error?I:new Error(String(I)))}})()})}async function _v(t){let e=xi(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&dv(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,o={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:L=>{r.push(L)}}},{binary:i,spawnArgs:a,spawnEnv:l}=mv(e,t,o),c=cv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,_="";c.stderr?.on("data",L=>{_+=L.toString()});let h,g,E=Yl({tool:t.tool,onDelta:L=>h?.(L),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=ur(c,{provider:t.tool,onEvent:L=>{u.lastEventAtMs=Date.now(),uv(L)&&(u.backgroundJobLaunched=!0),g?.(L)},onNotification:L=>{u.lastEventAtMs=Date.now(),E.processMessage(L)}}),T=()=>new ve(`ACP bundle process (${t.tool}) exited${u.signal!==null?` by ${u.signal}`:u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`,u.exitCode,u.signal,_),w=[],S=()=>u.exited?Promise.resolve():new Promise(L=>{w.push(L)}),b=null;c.on("error",L=>{p=new Te(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${L.message}`,{cause:L}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:L.message,elapsed_ms:Date.now()-d}),y.close(L)}),c.on("exit",(L,O)=>{if(u.exited=!0,u.exitCode=L,u.signal=O,y.close(new ve(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(L)}`}`,L,O)),!u.telemetryFired){u.telemetryFired=!0;let k=E.finalize();k!==null&&e.onExitFinalization?.({...o,sessionId:k.sessionId,result:k.result,stopReason:k.stopReason,exitCode:L})}if(b!==null){let k=b;b=null,k(T())}for(let k of w.splice(0))k()}),c.on("close",(L,O)=>{if(!u.exited){u.exited=!0,u.exitCode=L,u.signal=O;for(let k of w.splice(0))k()}});try{let L=await pv({sendRpc:y.sendRpc,sendNotification:y.sendNotification,opts:t,outputProcessor:E,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...o,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});m=L.sessionId,t.onSessionId?.(m),await fv(e,o,{sessionId:L.sessionId,response:L.sessionResponse},y.sendRpc)}catch(L){let O=p??(L instanceof Error?L:new Error(String(L)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await S()):de(c).catch(()=>{}),O}let I=L=>new Promise(O=>{setTimeout(O,L).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(L,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.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:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,h=O.onDelta,g=O.onEvent;let k=Date.now();try{E.beginTurn(),Ue(`acp: bundle prompt sent (${L.length} chars)`);let v,A=!1;if(await new Promise((R,C)=>{b=C;let $,P=()=>{A=!0,f=Promise.resolve().then(()=>$).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),C(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",P,{once:!0}),$=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:L}]},M=>{A||(M.error?E.cancelTurn():v=E.completeTurn(M),h=void 0,g=void 0)}),$.then(M=>{q?.removeEventListener("abort",P),R(M)},M=>{q?.removeEventListener("abort",P),C(M instanceof Error?M:new Error(String(M)))})}),b=null,!v)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Ue(`acp: bundle result received (${v.result.length} chars, stopReason=${v.stopReason})`);let N=s&&r.length>0?[...r]:void 0;return s=!1,{result:v.result,sessionId:v.sessionId,stopReason:v.stopReason,durationMs:Date.now()-k,sawActivity:v.sawActivity,...N!==void 0?{warnings:N}:{}}}catch(v){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():v}finally{h=void 0,g=void 0}},close(){return u.closing!==null||(u.closing=(async()=>{if(u.closed=!0,u.exited||(t.holdOpen!==void 0?await new Promise(O=>{an(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let L=t.closeTimeoutMs;if(L===void 0&&t.serviceHosted)await S();else{let O=L??2e3;await Promise.race([S(),I(O)]),u.exited||await de(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),u.closing}}}var om=x(()=>{"use strict";re();cr();zr();wi();ln();re();Ht();St();Si();Gf();lv();sm();tm();Si()});function Se(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function gv(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=ZP){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 yv(){let t=new Map;return(e,n)=>{e1(e,gv(t,n))}}function e1(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,o=typeof t.max_retries=="number"?t.max_retries:void 0,i=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(o!==void 0?`attempt ${s}/${o}`:`attempt ${s}`),i!==void 0&&c.push(`HTTP ${i}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(Se(a,60));let d=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:d});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,o=typeof t.error=="string"?t.error:void 0,i=["api_error"];s!==void 0&&i.push(`HTTP ${s}`),o&&i.push(Se(o,80)),e({kind:"other",summary:i.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 o of s){let i=o.type;if(i==="text"){let a=o.text||"";a&&e({kind:"text",summary:Se(a),raw:o})}else if(i==="tool_use"){let a=o.name||"tool",l=typeof o.id=="string"?o.id:void 0,c=o.input,d="";c&&(typeof c.command=="string"?d=c.command:typeof c.file_path=="string"?d=c.file_path:typeof c.path=="string"?d=c.path:typeof c.pattern=="string"?d=c.pattern:typeof c.url=="string"?d=c.url:d=Se(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:Se(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:Se(a),raw:o})}else if(i==="tool_result"){let l=o.is_error===!0?"error":"ok",c=typeof o.tool_use_id=="string"?o.tool_use_id:void 0,d,u=o.content;if(typeof u=="string")d=`${u.split(`
1817
1817
  `).length} lines, ${u.length} chars`;else if(Array.isArray(u)){let f=u.map(m=>typeof m=="object"&&m&&"text"in m?m.text:"").filter(Boolean).join("");f&&(d=`${f.split(`
1818
1818
  `).length} lines, ${f.length} chars`)}e({kind:"tool_result",status:l,summary:d,id:c,raw:o})}else i&&e({kind:"other",summary:i,raw:o})}return}if(n==="result"){e({kind:"system",summary:"result",raw:t});return}}async function ec(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?yv():void 0;if(e.bundleSession!==void 0)return Dn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await kw(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:o=>{typeof o.session_id=="string"&&o.session_id&&e.onSessionId?.(o.session_id),r&&r(o,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 tc(t){let e=t.binary==="qwen"?"qwen":"claude",n=await Aw({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 o=yv(),i=await n.sendTurn(r,{onText:s.onDelta,onEvent:a=>{s.onEvent?.(a),s.onProgress&&o(a,s.onProgress)},signal:s.signal});return{text:i.result,...i.usage?{usage:i.usage}:{},sessionId:i.sessionId,durationMs:i.durationMs,...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Ev(){let t=new Map;return(e,n)=>{t1(e,gv(t,n))}}function t1(t,e){if(t.method!=="session/update")return;let s=t.params?.update;if(!s)return;let o=s.sessionUpdate;if(o){if(o==="agent_message_chunk"){let a=s.content?.text||"";a&&e({kind:"text",summary:Se(a)});return}if(o==="agent_thought_chunk"||o==="thought"||o==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:Se(a)});return}if(o==="tool_call"){let i=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=Se(JSON.stringify(c))),e({kind:"tool_use",tool:i,summary:Se(l),id:a});return}if(o==="tool_call_update"){let i=s.status||"",a=typeof s.toolCallId=="string"?s.toolCallId:void 0;if(i==="completed"||i==="failed")e({kind:"tool_result",summary:i,status:i==="failed"?"error":"ok",id:a});else if(i==="in_progress"){let l=s.content,c=typeof l=="string"?l:typeof l?.text=="string"?l.text:"",d=c?`running\u2026 ${Se(c,80)}`:"running\u2026";e({kind:"other",summary:d,id:a})}return}e({kind:"other",summary:o})}}function Tv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function Bt(t,e){let n=e.acpTool||e.binary,r=e.onProgress?Ev():void 0;if(e.bundleSession!==void 0)return Dn(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";He({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await hv(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}),i=[...s,...o.warnings??[]];return{text:o.result,sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,...Tv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function cn(t){let e=t.acpTool||t.binary,n=await _v({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 o=Ev(),i=await n.sendTurn(r,{...s,onEvent:a=>{s.onEvent?.(a),s.onProgress&&o(a,s.onProgress)}});return{text:i.result,sessionId:i.sessionId,durationMs:i.durationMs,stopReason:i.stopReason,sawActivity:i.sawActivity,...Tv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function wv(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,o=typeof s?.message=="string"?s.message:void 0,i=o&&o.length>0?o:"(no message)",a=r?.willRetry===!0;e(a?{kind:"api_retry",summary:`codex retry: ${Se(i,120)}`}:{kind:"other",summary:`codex error: ${Se(i,120)}`});return}if(n==="item/started"||n==="item/completed"){let s=r?.item;if(!s)return;let o=s.type,i=n==="item/started";switch(o){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(i)e({kind:"tool_use",tool:"Bash",summary:Se(c||"(command)"),id:a});else{let d=s.exitCode,u=s.status||"",f=typeof s.durationMs=="number"?s.durationMs:void 0,m=typeof d=="number"?`exit ${d}`:u||"done",p=[];typeof d=="number"?p.push(`exit ${d}`):u&&p.push(u),typeof f=="number"&&p.push(`${Math.round(f/1e3)}s`),e({kind:"tool_result",summary:p.join(", ")||"done",status:m,elapsedMs:f,id:a})}return}case"fileChange":{let a=typeof s.id=="string"?s.id:void 0;if(i){let l=s.changes,c=Array.isArray(l)?l.map(d=>d.path||"").filter(Boolean).join(", "):"";e({kind:"tool_use",tool:"FileChange",summary:Se(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(i)e({kind:"tool_use",tool:`${l}/${c}`,summary:"",id:a});else{let d=s.status||"done";e({kind:"tool_result",summary:d,status:d,id:a})}return}case"webSearch":{let a=typeof s.id=="string"?s.id:void 0;e(i?{kind:"tool_use",tool:"WebSearch",summary:Se(s.query||""),id:a}:{kind:"tool_result",summary:"done",status:"done",id:a});return}case"reasoning":{i&&e({kind:"thinking",summary:""});return}case"agentMessage":case"userMessage":return;default:{o&&e({kind:i?"tool_use":"tool_result",tool:o,summary:""});return}}}if(n==="item/agentMessage/delta"){let s=r?.delta||"";if(s){let o=typeof r?._lmctlItemPhase=="string"?r._lmctlItemPhase:void 0;e(o==="commentary"?{kind:"thinking",summary:Se(s)}:{kind:"text",summary:Se(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:Se(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let o=s.split(`
1819
1819
  `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${Se(i,60)}`:Se(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 o=s.split(`
1820
- `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${Se(i,60)}`:Se(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 vv(t,e){if(e.bundleSession!==void 0)return Dn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Mw(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=>wv(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 Sv(t){let e=await $w({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:o=>{r.onEvent?.(o),r.onProgress&&wv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var ZP,$n=x(()=>{"use strict";Hf();Hf();Pw();om();Gs();re();ZP=256});function im(t={}){let e=Sa(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ce{constructor(){super({provider:new va({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)=>Bt(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return cn({...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 o=await Bt(s?.prompt??Z,{binary:"miniplayer",acpTool:"miniplayer",sessionId:"",requireResume:!1,cwd:r,env:n(s?.env),signal:s?.signal,model:s?.model});return{success:!0,sessionId:o.sessionId,usage:o.usage}}catch(o){return{success:!1,usage:o?.usage,error:`miniplayer seed failed: ${o instanceof Error?o.message:String(o)}`}}}}}var am=x(()=>{"use strict";Ye();ba();$n();Fe()});import{readdir as nc,stat as Iv,unlink as n1}from"node:fs/promises";import{join as Qs,basename as bv}from"node:path";function r1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function s1(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return _e(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 o1(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 i1(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 a1(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 kv(t){let e=0,n=0,r=0,s=0,o=0,i=0,a,l,c=new Map,d=[];for await(let p of Ee(t))if(!p.isSidechain){if(p.type==="user"&&!p.isMeta&&p.message){let _=p.message.content;if(typeof _=="string"){if(_.includes("<command-name>")||_.includes("<local-command-"))continue;e++,l=G(_.trim(),80)}}else if(p.type==="assistant"&&p.message){let _=p.message.content;if(Array.isArray(_))for(let g of _)g.type==="text"&&e++;let h=p.message.usage;if(h){let g=i1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?o1(T,g):c.set(E,g)}else d.push(g);let y=g.input+g.cacheWrite+g.cacheRead;y&&(i=y),a={inputTokens:g.input,cacheWriteInputTokens:g.cacheWrite,cachedInputTokens:g.cacheRead,outputTokens:g.output}}}}let u=0,f=0,m=p=>{let _=a1(p);n+=p.input+p.cacheRead+_.total,r+=p.cacheRead,s+=_.total,u+=_.fiveMinute,f+=_.oneHour,o+=p.output};for(let p of c.values())m(p);for(let p of d)m(p);return{messageCount:e,totalInputTokens:n,totalCacheReadInputTokens:r,totalCacheWriteInputTokens:s,totalCacheWrite5mInputTokens:u,totalCacheWrite1hInputTokens:f,totalOutputTokens:o,lastInputTokens:i,lastTokenUsage:a,lastUserMessage:l}}function l1(t){let e=c1(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 o=s.content.match(/Command running in background with ID:\s*([A-Za-z0-9_-]+)/)?.[1];o!==void 0&&(n.add(o),r.backgroundTaskId=o,s.backgroundTaskId=o)}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 o=e.get(r.toolCallId);o!==void 0&&(o.backgroundTaskId=s)}}function c1(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 rc,Av=x(()=>{"use strict";Re();rc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Qs(Q,".claude"),this.projectsDir=Qs(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await nc(this.projectsDir)}catch{return e}for(let r of n){let s=Qs(this.projectsDir,r);if(!(await Iv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await nc(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=bv(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Qs(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await Et(e,50),s=await Ae(e),o="",i,a,l,c,d,u;for(let m of r)if(!r1(m.type)&&(!o&&m.cwd&&(o=m.cwd),!i&&m.slug&&(i=m.slug),!a&&m.version&&(a=m.version),!u&&m.timestamp&&(u=new Date(m.timestamp)),m.type==="assistant"&&m.message?.model&&(l=m.message.model),m.type==="user"&&!m.isMeta&&m.message)){let p=m.message.content;if(typeof p=="string"){if(p.includes("<command-name>")||p.includes("<local-command-"))continue;c||(c=G(p.trim(),80)),d=G(p.trim(),80)}}if(!o)return null;let f=await kv(e);return{provider:"claude",sessionId:n,slug:i,cwd:o,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:f.lastUserMessage??d,messageCount:f.messageCount,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:f.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:f.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:f.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u,f,m=e,p,_=[];for await(let g of Ee(n))if(g.type!=="file-history-snapshot"&&!g.isSidechain){if(!o&&g.cwd&&(o=g.cwd),!i&&g.slug&&(i=g.slug),!a&&g.version&&(a=g.version),!c&&g.gitBranch&&(c=g.gitBranch),!f&&g.timestamp&&(f=new Date(g.timestamp)),g.sessionId&&(m=g.sessionId),g.type==="system"||g.type==="progress"||g.type==="queue-operation"){s.push({role:"system",timestamp:new Date(g.timestamp||0),content:s1(g)});continue}if(g.type==="user"&&g.message){if(g.isMeta)continue;let E=new Date(g.timestamp||0),y=g.message.content;if(g.isCompactSummary!==!0&&g.isVisibleInTranscriptOnly!==!0&&g.promptSource!=="system"&&g.toolUseResult===void 0&&g.origin?.kind!=="task-notification"&&g.interruptedMessageId===void 0&&g.interruptedByShutdown!==!0&&g.scheduledTaskId===void 0&&g.scheduledFireId===void 0&&!(Array.isArray(y)&&y.some(T=>T.type==="tool_result"))){let T=typeof y=="string"?y:Array.isArray(y)?y.filter(w=>w.type==="text"&&typeof w.text=="string").map(w=>w.text).join(`
1821
- `):"";T&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(T.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T.trim())&&!T.trimStart().startsWith("lmctl seed initial connection only.")&&_.push(T)}if(typeof y=="string"){let T=y.trim();if(T.includes("<command-name>")||T.includes("<local-command-")||/^<task-notification>\s*</u.test(T)||T.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T))continue;d||(d=G(y.trim(),80)),u=G(y.trim(),80),p=void 0,s.push({role:"user",timestamp:E,content:_e(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?_e(T.content):JSON.stringify(T.content);s.push({role:"tool_result",timestamp:E,content:w,toolCallId:T.tool_use_id})}}}if(g.type==="assistant"&&g.message){g.message.stop_reason===null||g.message.stop_reason==="tool_use"?p="in_progress":typeof g.message.stop_reason=="string"&&(p="complete"),g.message.model&&(l=g.message.model);let E=new Date(g.timestamp||0),y=g.message.content;if(Array.isArray(y))for(let T of y)T.type==="text"&&T.text?s.push({role:"assistant",timestamp:E,content:_e(T.text),model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="tool_use"?s.push({role:"tool_use",timestamp:E,content:T.name||"unknown tool",toolName:T.name,toolInput:JSON.stringify(T.input,null,2),toolInputData:T.input,toolCallId:T.id,model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="thinking"&&T.thinking&&s.push({role:"thinking",timestamp:E,content:T.thinking})}}if(!o)return null;l1(s);let h=await kv(n);return{provider:"claude",sessionId:m,slug:i,cwd:o,createdAt:f||r.createdAt,modifiedAt:r.modifiedAt,model:l,cliVersion:a,startCommand:"claude",gitBranch:c,turnStatus:p,firstUserMessage:d,lastUserMessage:u,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:_}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await n1(n),!0):!1}async resolveSessionFile(e){let n;try{n=await nc(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=Qs(this.projectsDir,i);if(!(await Iv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await nc(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=bv(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Qs(a,d),fileSessionId:u})}}let s=r.find(i=>i.fileSessionId===e);if(s)return s.filePath;let o=r.filter(i=>i.fileSessionId.startsWith(e));if(o.length===1)return o[0].filePath;for(let i of r){let a=await Et(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Nv}from"node:path";function cm(t){return new lm(t)}var lm,dm=x(()=>{"use strict";Av();Ye();Re();$n();Fe();lm=class extends ce{claudeDir;constructor(e){super({provider:new rc(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",Z,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:ec}),this.claudeDir=e?.claudeDir??Nv(Q,".claude")}openSession(e){return tc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Nv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as d1,stat as Rv,unlink as u1}from"node:fs/promises";import{join as Ci,basename as f1}from"node:path";function um(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&m1.has(n)}function p1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Oi(t,e,n){let r=p1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function Lv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function h1(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 Zs(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 Zs(n)}).filter(n=>n.length>0).join(`
1822
- `);try{return JSON.stringify(t)}catch{return String(t)}}function _1(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 g1(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 xv(t){let e=0,n=0,r=0,s=0,o=0,i,a,l=new Set,c,d;for await(let u of Ee(t)){if(u.type==="event_msg"&&u.payload?.type==="user_message"){let f=u.payload.message||u.payload.text;f&&(d=G(f.trim(),80))}if(u.type==="response_item"&&u.payload){let f=u.payload;if(f.type==="message"&&f.role==="user"&&f.content){let m=f.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let p=0;p<f.content.length;p++){let _=f.content[p];um(m,p)||_.type==="input_text"&&typeof _.text=="string"&&_.text&&(e++,d=G(_.text.trim(),80))}}else if(f.type==="message"&&f.role==="assistant"&&f.content)for(let m of f.content)m.type==="output_text"&&typeof m.text=="string"&&m.text&&e++}if(u.payload&&typeof u.payload.model_context_window=="number"&&(c=u.payload.model_context_window),u.type==="event_msg"&&u.payload?.type==="token_count"&&u.payload.info?.total_token_usage){let f=u.payload.info.total_token_usage;n=f.input_tokens??n,r=f.cached_input_tokens??f.cache_read_input_tokens??r,s=f.output_tokens??s,o=f.reasoning_output_tokens??o;let m=u.payload.info.last_token_usage;if(m&&typeof m.input_tokens=="number"&&typeof m.output_tokens=="number"){let _=JSON.stringify([u.timestamp??null,u.ordinal??null,f,m]);if(!l.has(_)){l.add(_);let h=[m.input_tokens,m.cached_input_tokens??m.cache_read_input_tokens??0,m.output_tokens,m.reasoning_output_tokens??0];a??=[0,0,0,0],h.forEach((g,E)=>{a[E]+=g})}}let p=h1(u.payload.info.last_token_usage);p&&(i=p),typeof u.payload.info.model_context_window=="number"&&(c=u.payload.info.model_context_window)}}return a&&([n,r,s,o]=a),{messageCount:e,totalInputTokens:n,totalCachedInputTokens:r,totalOutputTokens:s,totalReasoningOutputTokens:o,lastTokenUsage:i,modelContextWindow:c,lastUserMessage:d}}var m1,sc,Cv=x(()=>{"use strict";Re();m1=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"]);sc=class{name="codex";codexDirs;constructor(e={}){let n=[Ci(Q,".codex"),Ci(Q,".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:Ci(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=Ci(n,"sessions");try{await Rv(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 o of s)try{let i=await this.extractSummary(o);i&&e.push(i)}catch{}}return e}async findSessionFiles(e){let n=[],r;try{r=await d1(e)}catch{return n}for(let s of r){let o=Ci(e,s),i=await Rv(o).catch(()=>null);if(i)if(i.isDirectory()){let a=await this.findSessionFiles(o);n.push(...a)}else s.endsWith(".jsonl")&&n.push(o)}return n}extractSessionIdFromFilename(e){let n=f1(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 Et(e,30),r=await Ae(e),s=this.extractSessionIdFromFilename(e),o="",i,a,l,c,d,u,f;for(let p of n){if(p.type==="session_meta"&&p.payload&&(p.payload.id&&(s=p.payload.id),p.payload.cwd&&(o=p.payload.cwd),p.payload.cli_version&&(i=p.payload.cli_version),p.payload.timestamp&&(l=new Date(p.payload.timestamp)),p.payload.originator&&(u=p.payload.originator),p.payload.source&&(f=p.payload.source)),p.type==="turn_context"&&p.payload&&(p.payload.model&&(a=p.payload.model),!o&&p.payload.cwd&&(o=p.payload.cwd)),p.type==="event_msg"&&p.payload?.type==="user_message"){let _=p.payload.message||p.payload.text;_&&(c||(c=G(_.trim(),80)),d=G(_.trim(),80))}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload.role==="user"&&p.payload.content){let _=p.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let h=0;h<p.payload.content.length;h++){let g=p.payload.content[h];um(_,h)||g.type==="input_text"&&typeof g.text=="string"&&g.text&&(c||(c=G(g.text.trim(),80)),d=G(g.text.trim(),80))}}}if(!o)return null;let m=await xv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:Lv(u,f),firstUserMessage:c,lastUserMessage:m.lastUserMessage??d,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:m.lastTokenUsage,modelContextWindow:m.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,_=[],h=new Set,g=[],E=(w,S)=>{let I=g.find(b=>!b.mirrored&&b.source!==S&&b.text===w);I?I.mirrored=!0:g.push({text:w,source:S,mirrored:!1})},y=()=>{_.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let S=w.timestamp?new Date(w.timestamp):new Date;if(w.type==="session_meta"&&w.payload){w.payload.id&&(u=w.payload.id),w.payload.cwd&&(o=w.payload.cwd),w.payload.cli_version&&(i=w.payload.cli_version),w.payload.timestamp&&(l=new Date(w.payload.timestamp)),f=Lv(w.payload.originator,w.payload.source);continue}if(w.type==="turn_context"&&w.payload){w.payload.model&&(a=w.payload.model),!o&&w.payload.cwd&&(o=w.payload.cwd);continue}if(w.type==="response_item"&&w.payload){let I=w.payload;if(I.type==="message"){if(I.role==="user"&&I.content){let b=I.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(b)){let L=I.content.filter((O,k)=>b[k]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1823
- `);b.includes("user.text")&&L&&(!I.id||!h.has(I.id))&&(E(L,"metadata"),I.id&&h.add(I.id))}for(let L=0;L<I.content.length;L++){let O=I.content[L];if(!um(b,L)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let k=O.text.trim();c||(c=G(k,80)),d=G(k,80),Oi(s,p,{role:"user",timestamp:S,content:_e(k)})}}continue}if(I.role==="assistant"&&I.content){for(let b of I.content)b.type==="output_text"&&typeof b.text=="string"&&b.text&&Oi(s,p,{role:"assistant",timestamp:S,content:_e(b.text),model:a});continue}if(I.role!=="user"&&I.role!=="assistant"&&I.content){for(let b of I.content)(b.type==="input_text"||b.type==="output_text")&&typeof b.text=="string"&&b.text&&Oi(s,p,{role:"system",timestamp:S,content:_e(b.text.trim())});continue}}if(I.type==="function_call"){s.push({role:"tool_use",timestamp:S,content:I.name||"unknown tool",toolName:I.name,toolInput:I.arguments!==void 0?_e(Zs(I.arguments)):void 0,toolInputData:_1(I.arguments),toolCallId:I.call_id});continue}if(I.type==="function_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(Zs(I.output)),toolCallId:I.call_id});continue}if(I.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:S,content:I.name||"unknown tool",toolName:I.name,toolInput:I.input!==void 0?_e(Zs(I.input)):void 0,toolInputData:g1(I.name,I.input),toolCallId:I.call_id});continue}if(I.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(Zs(I.output)),toolCallId:I.call_id});continue}if(I.type==="reasoning"&&I.summary){let b=I.summary.map(L=>Zs(L.text)).join(`
1824
- `);b.trim()&&Oi(s,p,{role:"thinking",timestamp:S,content:_e(b)});continue}}if(w.type==="event_msg"&&w.payload&&(w.payload.type==="task_started"?(y(),m="in_progress"):w.payload.type==="task_complete"?m="complete":w.payload.type==="turn_aborted"&&(m="aborted"),w.payload.type==="user_message"&&typeof w.payload.message=="string"&&E(w.payload.message,"event"),w.payload.type==="agent_reasoning")){let I=w.payload.message||w.payload.text;I&&Oi(s,p,{role:"thinking",timestamp:S,content:_e(I)})}}if(!o)return null;y();let T=await xv(n);return{provider:"codex",sessionId:u,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:f,turnStatus:m,firstUserMessage:c,lastUserMessage:d,messageCount:T.messageCount,filePath:n,totalInputTokens:T.totalInputTokens||void 0,totalCachedInputTokens:T.totalCachedInputTokens||void 0,totalOutputTokens:T.totalOutputTokens||void 0,totalReasoningOutputTokens:T.totalReasoningOutputTokens||void 0,lastInputTokens:T.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:T.lastTokenUsage,modelContextWindow:T.modelContextWindow,messages:s,userPrompts:_}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await u1(n),!0):!1}async resolveSessionFile(e){let n=await this.getSessionsDirs(),r=[];for(let o of n){let i=await this.findSessionFiles(o);r.push(...i)}for(let o of r)if(this.extractSessionIdFromFilename(o)===e)return o;let s=[];for(let o of r)this.extractSessionIdFromFilename(o).startsWith(e)&&s.push(o);if(s.length===1)return s[0];for(let o of r){let i=await Et(o,1);if(i.length>0&&i[0].type==="session_meta"){let a=i[0].payload?.id;if(a===e||a&&a.startsWith(e))return o}}return null}}});import{execFile as y1}from"node:child_process";import{realpathSync as Ov,readdirSync as E1}from"node:fs";import{homedir as T1}from"node:os";import{join as oc,resolve as Dv,sep as w1}from"node:path";function pm(t){return new mm(t)}var fm,mm,hm=x(()=>{"use strict";Cv();Ye();$n();Fe();fm="gpt-5.6-sol",mm=class extends ce{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 sc(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:`${Z}
1825
- `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:vv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(L,O)=>new Promise(k=>{let v=Math.ceil(n-performance.now());if(v<=0){k(void 0);return}let A,N=()=>{try{A?.kill("SIGKILL")}catch{}},R=()=>{N()},C=()=>{N()},$=()=>{N()};process.once("exit",R),process.once("SIGINT",C),process.once("SIGTERM",$);let P=()=>{process.removeListener("exit",R),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",$)};A=y1(L,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:v,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{P(),k(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let L=s.match(/\{[\s\S]*\}/);if(L)try{o=JSON.parse(L[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=L=>typeof L=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(L)&&L.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,_=m+"; using the daemon's binary. "+p,h={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},g=Dv(e.cwd,e.env.CODEX_HOME||oc(e.env.HOME||T1(),".codex")),E=[],y=[],T=process.platform==="win32"?"codex.exe":"codex",w=o.managedCodexPath??o.managed_codex_path;typeof w=="string"&&w.trim().length>0&&E.push(w.trim());let S=L=>L.replace(/\+.*$/,""),I=S(d),b=process.arch==="arm64"?"aarch64":"x86_64";for(let L of["app-server-daemon","standalone"]){let O=oc(g,"packages",L,"releases");try{y.push(Ov(O)+w1);let k=E1(O).filter(v=>process.arch==="x64"&&(v.includes("aarch64")||v.includes("arm64"))||process.arch==="arm64"&&(v.includes("x86_64")||v.includes("x64")||v.includes("i686"))?!1:v===d||v===I||v.startsWith(d+"-")||v.startsWith(I+"-"));k.sort((v,A)=>{let N=v.includes(b)?0:1,R=A.includes(b)?0:1;return N!==R?N-R:v.localeCompare(A)});for(let v of k)E.push(oc(O,v,"bin",T)),E.push(oc(O,v,T))}catch{}}for(let L of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Ov(Dv(e.cwd,L)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let v=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(v&&(v===d||S(v)===I))return{kind:"use-binary",binary:O,message:_}}return h}openSession(e){return Sv({...e,model:e.model??fm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??fm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:fm}}}});import{createHash as v1}from"node:crypto";import{readdir as Di,readFile as Mv,stat as ic,unlink as S1}from"node:fs/promises";import{join as It,basename as I1,dirname as b1}from"node:path";import{cwd as k1}from"node:process";function _m(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function $v(t){return t==="user"}function gm(t){return t==="gemini"||t==="assistant"}function Zr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function A1(t){return`${t.sessionId}\0${t.cwd}`}function N1(t,e){let n=t.filePaths??[t.filePath],r=e.filePaths??[e.filePath],s=[...new Set([...n,...r])],o=e.modifiedAt.getTime()>=t.modifiedAt.getTime()?e:t;return{...o,createdAt:t.createdAt.getTime()<=e.createdAt.getTime()?t.createdAt:e.createdAt,modifiedAt:o.modifiedAt,filePath:o.filePath,filePaths:s}}function ac(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function Pv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!gm(a.type)||!a.tokens)continue;let l=ac(a.tokens.input),c=ac(a.tokens.cached),d=Math.max(l-c,0),u=ac(a.tokens.output),f=ac(a.tokens.thoughts);e+=l,n+=c,r+=u,s+=f,o=l,i={inputTokens:d,cachedInputTokens:c,cacheWriteInputTokens:0,outputTokens:u,reasoningOutputTokens:f,totalTokens:l+u+f}}return{totalInputTokens:e,totalCachedInputTokens:n,totalOutputTokens:r,totalReasoningOutputTokens:s,lastInputTokens:o,lastTokenUsage:i}}function R1(t){return v1("sha256").update(t).digest("hex")}function Mi(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=b1(n);if(r===n)break;n=r}}var lc,Uv=x(()=>{"use strict";Re();Ma();re();lc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||It(Q,".gemini");this.geminiProjectsFile=It(n,"projects.json"),this.geminiTmpDir=It(n,"tmp");let r=e.claudeDir||It(Q,".claude");this.claudeProjectsDir=It(r,"projects");let s=[It(Q,".codex"),It(Q,".code")],o=e.codexDirs&&e.codexDirs.length>0?e.codexDirs:[e.codexDir||s[0],e.codeDir||s[1]];this.codexSessionDirs=[...new Set(o)].map(i=>It(i,"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 o=A1(s),i=n.get(o);n.set(o,i?N1(i,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 Ae(n),o=[],i=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",d=await this.resolveWorkspace(c),u,f,m;for(let g of a){let E=Zr(g.timestamp),y=g.type,T=_e(_m(g.content));if($v(y)){let S=_m(g.content);S&&i.push(S);let I=T.trim();I&&(u||(u=G(I,80)),f=G(I,80)),o.push({role:"user",timestamp:E,content:I||T});continue}if(gm(y)){g.model&&(m=g.model);for(let S of g.thoughts||[]){let I=[S.subject,S.description].filter(Boolean).join(`
1826
- `).trim();I&&o.push({role:"thinking",timestamp:Zr(S.timestamp,E),content:_e(I)})}o.push({role:"assistant",timestamp:E,content:T,model:g.model});continue}let w=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${w}${T}`.trim()})}let p=Zr(r.startTime,s.createdAt),_=Zr(r.lastUpdated,s.modifiedAt),h=Pv(a);return{provider:"gemini",sessionId:l,cwd:d,createdAt:p,modifiedAt:_,model:m,startCommand:"gemini",firstUserMessage:u,lastUserMessage:f,messageCount:o.filter(g=>g.role==="user"||g.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:o,userPrompts:i}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await Ae(e),s=n.messages||[],o=n.sessionId||this.extractSessionIdFromFilename(e),i=n.projectHash||"",a=await this.resolveWorkspace(i),l,c,d,u=0;for(let m of s)if($v(m.type)){u++;let p=_m(m.content).trim();p&&(l||(l=G(_e(p),80)),c=G(_e(p),80))}else gm(m.type)&&(u++,m.model&&(d=m.model));let f=Pv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Zr(n.startTime,r.createdAt),modifiedAt:Zr(n.lastUpdated,r.modifiedAt),model:d,startCommand:"gemini",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCachedInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,totalReasoningOutputTokens:f.totalReasoningOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async readSessionFile(e){let n=await Mv(e,"utf-8");if(Bo(n)==="unknown")return U({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 $r(n)}catch{return null}}extractSessionIdFromFilename(e){let n=I1(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 Di(this.geminiTmpDir)}catch{return e}for(let r of n){let s=It(this.geminiTmpDir,r,"chats");if(!(await ic(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Di(s)}catch{continue}for(let a of i)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(It(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await S1(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let o=await this.readSessionFile(s).catch(()=>null),i=this.extractSessionIdFromFilename(s),a=o?.sessionId||i,l=a===e||a.startsWith(e),c=i===e||i.startsWith(e)||i.length>=8&&e.startsWith(i);if(!l&&!c)continue;let d=await Ae(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Zr(o?.lastUpdated,d.modifiedAt)})}return r.sort((s,o)=>{let i=o.modifiedAt.getTime()-s.modifiedAt.getTime();return i!==0?i:o.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;Mi(e,k1());for(let r of this.extraWorkspacePaths)Mi(e,r);for(let r of await this.collectGeminiProjectPaths())Mi(e,r);for(let r of await this.collectCodexCwds())Mi(e,r);for(let r of await this.collectClaudeCwds())Mi(e,r);let n=new Map;for(let r of e)n.set(R1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Mv(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 i=(await Et(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Di(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=It(this.claudeProjectsDir,r);if(!(await ic(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Di(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=It(s,a),d=(await Et(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await ic(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Di(e)}catch{return n}for(let o of s){let i=It(e,o),a=await ic(i).catch(()=>null);if(a)if(a.isDirectory()){let l=await this.findJsonlFiles(i);n.push(...l)}else o.endsWith(".jsonl")&&n.push(i)}return n}}});import{readFileSync as L1,writeFileSync as x1,mkdirSync as C1}from"node:fs";import{join as O1,dirname as D1}from"node:path";import{randomUUID as M1}from"node:crypto";function Em(t){return new ym(t)}var ym,Tm=x(()=>{"use strict";js();Uv();Ye();Fe();Ma();ym=class extends ce{constructor(e){super({provider:new lc(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",Z,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(sr))})}seed(e,n){return Promise.resolve({success:!1,error:sr})}sendTurn(e,n){return Promise.reject(new Error(sr))}openSession(e){return Promise.reject(new Error(sr))}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(`
1820
+ `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${Se(i,60)}`:Se(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 vv(t,e){if(e.bundleSession!==void 0)return Dn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Mw(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=>wv(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 Sv(t){let e=await $w({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:o=>{r.onEvent?.(o),r.onProgress&&wv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var ZP,$n=x(()=>{"use strict";Hf();Hf();Pw();om();Gs();re();ZP=256});function im(t={}){let e=Sa(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ce{constructor(){super({provider:new va({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)=>Bt(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return cn({...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 o=await Bt(s?.prompt??Z,{binary:"miniplayer",acpTool:"miniplayer",sessionId:"",requireResume:!1,cwd:r,env:n(s?.env),signal:s?.signal,model:s?.model});return{success:!0,sessionId:o.sessionId,usage:o.usage}}catch(o){return{success:!1,usage:o?.usage,error:`miniplayer seed failed: ${o instanceof Error?o.message:String(o)}`}}}}}var am=x(()=>{"use strict";Ye();Ia();$n();Fe()});import{readdir as nc,stat as bv,unlink as n1}from"node:fs/promises";import{join as Qs,basename as Iv}from"node:path";function r1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function s1(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return _e(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 o1(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 i1(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 a1(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 kv(t){let e=0,n=0,r=0,s=0,o=0,i=0,a,l,c=new Map,d=[];for await(let p of Ee(t))if(!p.isSidechain){if(p.type==="user"&&!p.isMeta&&p.message){let _=p.message.content;if(typeof _=="string"){if(_.includes("<command-name>")||_.includes("<local-command-"))continue;e++,l=G(_.trim(),80)}}else if(p.type==="assistant"&&p.message){let _=p.message.content;if(Array.isArray(_))for(let g of _)g.type==="text"&&e++;let h=p.message.usage;if(h){let g=i1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?o1(T,g):c.set(E,g)}else d.push(g);let y=g.input+g.cacheWrite+g.cacheRead;y&&(i=y),a={inputTokens:g.input,cacheWriteInputTokens:g.cacheWrite,cachedInputTokens:g.cacheRead,outputTokens:g.output}}}}let u=0,f=0,m=p=>{let _=a1(p);n+=p.input+p.cacheRead+_.total,r+=p.cacheRead,s+=_.total,u+=_.fiveMinute,f+=_.oneHour,o+=p.output};for(let p of c.values())m(p);for(let p of d)m(p);return{messageCount:e,totalInputTokens:n,totalCacheReadInputTokens:r,totalCacheWriteInputTokens:s,totalCacheWrite5mInputTokens:u,totalCacheWrite1hInputTokens:f,totalOutputTokens:o,lastInputTokens:i,lastTokenUsage:a,lastUserMessage:l}}function l1(t){let e=c1(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 o=s.content.match(/Command running in background with ID:\s*([A-Za-z0-9_-]+)/)?.[1];o!==void 0&&(n.add(o),r.backgroundTaskId=o,s.backgroundTaskId=o)}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 o=e.get(r.toolCallId);o!==void 0&&(o.backgroundTaskId=s)}}function c1(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 rc,Av=x(()=>{"use strict";Re();rc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Qs(Q,".claude"),this.projectsDir=Qs(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await nc(this.projectsDir)}catch{return e}for(let r of n){let s=Qs(this.projectsDir,r);if(!(await bv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await nc(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Iv(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Qs(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await Et(e,50),s=await Ae(e),o="",i,a,l,c,d,u;for(let m of r)if(!r1(m.type)&&(!o&&m.cwd&&(o=m.cwd),!i&&m.slug&&(i=m.slug),!a&&m.version&&(a=m.version),!u&&m.timestamp&&(u=new Date(m.timestamp)),m.type==="assistant"&&m.message?.model&&(l=m.message.model),m.type==="user"&&!m.isMeta&&m.message)){let p=m.message.content;if(typeof p=="string"){if(p.includes("<command-name>")||p.includes("<local-command-"))continue;c||(c=G(p.trim(),80)),d=G(p.trim(),80)}}if(!o)return null;let f=await kv(e);return{provider:"claude",sessionId:n,slug:i,cwd:o,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:f.lastUserMessage??d,messageCount:f.messageCount,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:f.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:f.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:f.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u,f,m=e,p,_=[];for await(let g of Ee(n))if(g.type!=="file-history-snapshot"&&!g.isSidechain){if(!o&&g.cwd&&(o=g.cwd),!i&&g.slug&&(i=g.slug),!a&&g.version&&(a=g.version),!c&&g.gitBranch&&(c=g.gitBranch),!f&&g.timestamp&&(f=new Date(g.timestamp)),g.sessionId&&(m=g.sessionId),g.type==="system"||g.type==="progress"||g.type==="queue-operation"){s.push({role:"system",timestamp:new Date(g.timestamp||0),content:s1(g)});continue}if(g.type==="user"&&g.message){if(g.isMeta)continue;let E=new Date(g.timestamp||0),y=g.message.content;if(g.isCompactSummary!==!0&&g.isVisibleInTranscriptOnly!==!0&&g.promptSource!=="system"&&g.toolUseResult===void 0&&g.origin?.kind!=="task-notification"&&g.interruptedMessageId===void 0&&g.interruptedByShutdown!==!0&&g.scheduledTaskId===void 0&&g.scheduledFireId===void 0&&!(Array.isArray(y)&&y.some(T=>T.type==="tool_result"))){let T=typeof y=="string"?y:Array.isArray(y)?y.filter(w=>w.type==="text"&&typeof w.text=="string").map(w=>w.text).join(`
1821
+ `):"";T&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(T.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T.trim())&&!T.trimStart().startsWith("lmctl seed initial connection only.")&&_.push(T)}if(typeof y=="string"){let T=y.trim();if(T.includes("<command-name>")||T.includes("<local-command-")||/^<task-notification>\s*</u.test(T)||T.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T))continue;d||(d=G(y.trim(),80)),u=G(y.trim(),80),p=void 0,s.push({role:"user",timestamp:E,content:_e(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?_e(T.content):JSON.stringify(T.content);s.push({role:"tool_result",timestamp:E,content:w,toolCallId:T.tool_use_id})}}}if(g.type==="assistant"&&g.message){g.message.stop_reason===null||g.message.stop_reason==="tool_use"?p="in_progress":typeof g.message.stop_reason=="string"&&(p="complete"),g.message.model&&(l=g.message.model);let E=new Date(g.timestamp||0),y=g.message.content;if(Array.isArray(y))for(let T of y)T.type==="text"&&T.text?s.push({role:"assistant",timestamp:E,content:_e(T.text),model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="tool_use"?s.push({role:"tool_use",timestamp:E,content:T.name||"unknown tool",toolName:T.name,toolInput:JSON.stringify(T.input,null,2),toolInputData:T.input,toolCallId:T.id,model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="thinking"&&T.thinking&&s.push({role:"thinking",timestamp:E,content:T.thinking})}}if(!o)return null;l1(s);let h=await kv(n);return{provider:"claude",sessionId:m,slug:i,cwd:o,createdAt:f||r.createdAt,modifiedAt:r.modifiedAt,model:l,cliVersion:a,startCommand:"claude",gitBranch:c,turnStatus:p,firstUserMessage:d,lastUserMessage:u,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:_}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await n1(n),!0):!1}async resolveSessionFile(e){let n;try{n=await nc(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=Qs(this.projectsDir,i);if(!(await bv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await nc(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Iv(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Qs(a,d),fileSessionId:u})}}let s=r.find(i=>i.fileSessionId===e);if(s)return s.filePath;let o=r.filter(i=>i.fileSessionId.startsWith(e));if(o.length===1)return o[0].filePath;for(let i of r){let a=await Et(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Nv}from"node:path";function cm(t){return new lm(t)}var lm,dm=x(()=>{"use strict";Av();Ye();Re();$n();Fe();lm=class extends ce{claudeDir;constructor(e){super({provider:new rc(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",Z,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:ec}),this.claudeDir=e?.claudeDir??Nv(Q,".claude")}openSession(e){return tc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Nv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as d1,stat as Rv,unlink as u1}from"node:fs/promises";import{join as Ci,basename as f1}from"node:path";function um(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&m1.has(n)}function p1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Oi(t,e,n){let r=p1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function Lv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function h1(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 Zs(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 Zs(n)}).filter(n=>n.length>0).join(`
1822
+ `);try{return JSON.stringify(t)}catch{return String(t)}}function _1(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 g1(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 xv(t){let e=0,n=0,r=0,s=0,o=0,i,a,l=new Set,c,d;for await(let u of Ee(t)){if(u.type==="event_msg"&&u.payload?.type==="user_message"){let f=u.payload.message||u.payload.text;f&&(d=G(f.trim(),80))}if(u.type==="response_item"&&u.payload){let f=u.payload;if(f.type==="message"&&f.role==="user"&&f.content){let m=f.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let p=0;p<f.content.length;p++){let _=f.content[p];um(m,p)||_.type==="input_text"&&typeof _.text=="string"&&_.text&&(e++,d=G(_.text.trim(),80))}}else if(f.type==="message"&&f.role==="assistant"&&f.content)for(let m of f.content)m.type==="output_text"&&typeof m.text=="string"&&m.text&&e++}if(u.payload&&typeof u.payload.model_context_window=="number"&&(c=u.payload.model_context_window),u.type==="event_msg"&&u.payload?.type==="token_count"&&u.payload.info?.total_token_usage){let f=u.payload.info.total_token_usage;n=f.input_tokens??n,r=f.cached_input_tokens??f.cache_read_input_tokens??r,s=f.output_tokens??s,o=f.reasoning_output_tokens??o;let m=u.payload.info.last_token_usage;if(m&&typeof m.input_tokens=="number"&&typeof m.output_tokens=="number"){let _=JSON.stringify([u.timestamp??null,u.ordinal??null,f,m]);if(!l.has(_)){l.add(_);let h=[m.input_tokens,m.cached_input_tokens??m.cache_read_input_tokens??0,m.output_tokens,m.reasoning_output_tokens??0];a??=[0,0,0,0],h.forEach((g,E)=>{a[E]+=g})}}let p=h1(u.payload.info.last_token_usage);p&&(i=p),typeof u.payload.info.model_context_window=="number"&&(c=u.payload.info.model_context_window)}}return a&&([n,r,s,o]=a),{messageCount:e,totalInputTokens:n,totalCachedInputTokens:r,totalOutputTokens:s,totalReasoningOutputTokens:o,lastTokenUsage:i,modelContextWindow:c,lastUserMessage:d}}var m1,sc,Cv=x(()=>{"use strict";Re();m1=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"]);sc=class{name="codex";codexDirs;constructor(e={}){let n=[Ci(Q,".codex"),Ci(Q,".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:Ci(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=Ci(n,"sessions");try{await Rv(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 o of s)try{let i=await this.extractSummary(o);i&&e.push(i)}catch{}}return e}async findSessionFiles(e){let n=[],r;try{r=await d1(e)}catch{return n}for(let s of r){let o=Ci(e,s),i=await Rv(o).catch(()=>null);if(i)if(i.isDirectory()){let a=await this.findSessionFiles(o);n.push(...a)}else s.endsWith(".jsonl")&&n.push(o)}return n}extractSessionIdFromFilename(e){let n=f1(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 Et(e,30),r=await Ae(e),s=this.extractSessionIdFromFilename(e),o="",i,a,l,c,d,u,f;for(let p of n){if(p.type==="session_meta"&&p.payload&&(p.payload.id&&(s=p.payload.id),p.payload.cwd&&(o=p.payload.cwd),p.payload.cli_version&&(i=p.payload.cli_version),p.payload.timestamp&&(l=new Date(p.payload.timestamp)),p.payload.originator&&(u=p.payload.originator),p.payload.source&&(f=p.payload.source)),p.type==="turn_context"&&p.payload&&(p.payload.model&&(a=p.payload.model),!o&&p.payload.cwd&&(o=p.payload.cwd)),p.type==="event_msg"&&p.payload?.type==="user_message"){let _=p.payload.message||p.payload.text;_&&(c||(c=G(_.trim(),80)),d=G(_.trim(),80))}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload.role==="user"&&p.payload.content){let _=p.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let h=0;h<p.payload.content.length;h++){let g=p.payload.content[h];um(_,h)||g.type==="input_text"&&typeof g.text=="string"&&g.text&&(c||(c=G(g.text.trim(),80)),d=G(g.text.trim(),80))}}}if(!o)return null;let m=await xv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:Lv(u,f),firstUserMessage:c,lastUserMessage:m.lastUserMessage??d,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:m.lastTokenUsage,modelContextWindow:m.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,_=[],h=new Set,g=[],E=(w,S)=>{let b=g.find(I=>!I.mirrored&&I.source!==S&&I.text===w);b?b.mirrored=!0:g.push({text:w,source:S,mirrored:!1})},y=()=>{_.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let S=w.timestamp?new Date(w.timestamp):new Date;if(w.type==="session_meta"&&w.payload){w.payload.id&&(u=w.payload.id),w.payload.cwd&&(o=w.payload.cwd),w.payload.cli_version&&(i=w.payload.cli_version),w.payload.timestamp&&(l=new Date(w.payload.timestamp)),f=Lv(w.payload.originator,w.payload.source);continue}if(w.type==="turn_context"&&w.payload){w.payload.model&&(a=w.payload.model),!o&&w.payload.cwd&&(o=w.payload.cwd);continue}if(w.type==="response_item"&&w.payload){let b=w.payload;if(b.type==="message"){if(b.role==="user"&&b.content){let I=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(I)){let L=b.content.filter((O,k)=>I[k]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1823
+ `);I.includes("user.text")&&L&&(!b.id||!h.has(b.id))&&(E(L,"metadata"),b.id&&h.add(b.id))}for(let L=0;L<b.content.length;L++){let O=b.content[L];if(!um(I,L)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let k=O.text.trim();c||(c=G(k,80)),d=G(k,80),Oi(s,p,{role:"user",timestamp:S,content:_e(k)})}}continue}if(b.role==="assistant"&&b.content){for(let I of b.content)I.type==="output_text"&&typeof I.text=="string"&&I.text&&Oi(s,p,{role:"assistant",timestamp:S,content:_e(I.text),model:a});continue}if(b.role!=="user"&&b.role!=="assistant"&&b.content){for(let I of b.content)(I.type==="input_text"||I.type==="output_text")&&typeof I.text=="string"&&I.text&&Oi(s,p,{role:"system",timestamp:S,content:_e(I.text.trim())});continue}}if(b.type==="function_call"){s.push({role:"tool_use",timestamp:S,content:b.name||"unknown tool",toolName:b.name,toolInput:b.arguments!==void 0?_e(Zs(b.arguments)):void 0,toolInputData:_1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(Zs(b.output)),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:S,content:b.name||"unknown tool",toolName:b.name,toolInput:b.input!==void 0?_e(Zs(b.input)):void 0,toolInputData:g1(b.name,b.input),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(Zs(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let I=b.summary.map(L=>Zs(L.text)).join(`
1824
+ `);I.trim()&&Oi(s,p,{role:"thinking",timestamp:S,content:_e(I)});continue}}if(w.type==="event_msg"&&w.payload&&(w.payload.type==="task_started"?(y(),m="in_progress"):w.payload.type==="task_complete"?m="complete":w.payload.type==="turn_aborted"&&(m="aborted"),w.payload.type==="user_message"&&typeof w.payload.message=="string"&&E(w.payload.message,"event"),w.payload.type==="agent_reasoning")){let b=w.payload.message||w.payload.text;b&&Oi(s,p,{role:"thinking",timestamp:S,content:_e(b)})}}if(!o)return null;y();let T=await xv(n);return{provider:"codex",sessionId:u,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:f,turnStatus:m,firstUserMessage:c,lastUserMessage:d,messageCount:T.messageCount,filePath:n,totalInputTokens:T.totalInputTokens||void 0,totalCachedInputTokens:T.totalCachedInputTokens||void 0,totalOutputTokens:T.totalOutputTokens||void 0,totalReasoningOutputTokens:T.totalReasoningOutputTokens||void 0,lastInputTokens:T.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:T.lastTokenUsage,modelContextWindow:T.modelContextWindow,messages:s,userPrompts:_}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await u1(n),!0):!1}async resolveSessionFile(e){let n=await this.getSessionsDirs(),r=[];for(let o of n){let i=await this.findSessionFiles(o);r.push(...i)}for(let o of r)if(this.extractSessionIdFromFilename(o)===e)return o;let s=[];for(let o of r)this.extractSessionIdFromFilename(o).startsWith(e)&&s.push(o);if(s.length===1)return s[0];for(let o of r){let i=await Et(o,1);if(i.length>0&&i[0].type==="session_meta"){let a=i[0].payload?.id;if(a===e||a&&a.startsWith(e))return o}}return null}}});import{execFile as y1}from"node:child_process";import{realpathSync as Ov,readdirSync as E1}from"node:fs";import{homedir as T1}from"node:os";import{join as oc,resolve as Dv,sep as w1}from"node:path";function pm(t){return new mm(t)}var fm,mm,hm=x(()=>{"use strict";Cv();Ye();$n();Fe();fm="gpt-5.6-sol",mm=class extends ce{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 sc(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:`${Z}
1825
+ `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:vv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(L,O)=>new Promise(k=>{let v=Math.ceil(n-performance.now());if(v<=0){k(void 0);return}let A,N=()=>{try{A?.kill("SIGKILL")}catch{}},R=()=>{N()},C=()=>{N()},$=()=>{N()};process.once("exit",R),process.once("SIGINT",C),process.once("SIGTERM",$);let P=()=>{process.removeListener("exit",R),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",$)};A=y1(L,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:v,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{P(),k(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let L=s.match(/\{[\s\S]*\}/);if(L)try{o=JSON.parse(L[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=L=>typeof L=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(L)&&L.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,_=m+"; using the daemon's binary. "+p,h={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},g=Dv(e.cwd,e.env.CODEX_HOME||oc(e.env.HOME||T1(),".codex")),E=[],y=[],T=process.platform==="win32"?"codex.exe":"codex",w=o.managedCodexPath??o.managed_codex_path;typeof w=="string"&&w.trim().length>0&&E.push(w.trim());let S=L=>L.replace(/\+.*$/,""),b=S(d),I=process.arch==="arm64"?"aarch64":"x86_64";for(let L of["app-server-daemon","standalone"]){let O=oc(g,"packages",L,"releases");try{y.push(Ov(O)+w1);let k=E1(O).filter(v=>process.arch==="x64"&&(v.includes("aarch64")||v.includes("arm64"))||process.arch==="arm64"&&(v.includes("x86_64")||v.includes("x64")||v.includes("i686"))?!1:v===d||v===b||v.startsWith(d+"-")||v.startsWith(b+"-"));k.sort((v,A)=>{let N=v.includes(I)?0:1,R=A.includes(I)?0:1;return N!==R?N-R:v.localeCompare(A)});for(let v of k)E.push(oc(O,v,"bin",T)),E.push(oc(O,v,T))}catch{}}for(let L of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Ov(Dv(e.cwd,L)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let v=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(v&&(v===d||S(v)===b))return{kind:"use-binary",binary:O,message:_}}return h}openSession(e){return Sv({...e,model:e.model??fm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??fm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:fm}}}});import{createHash as v1}from"node:crypto";import{readdir as Di,readFile as Mv,stat as ic,unlink as S1}from"node:fs/promises";import{join as bt,basename as b1,dirname as I1}from"node:path";import{cwd as k1}from"node:process";function _m(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function $v(t){return t==="user"}function gm(t){return t==="gemini"||t==="assistant"}function Zr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function A1(t){return`${t.sessionId}\0${t.cwd}`}function N1(t,e){let n=t.filePaths??[t.filePath],r=e.filePaths??[e.filePath],s=[...new Set([...n,...r])],o=e.modifiedAt.getTime()>=t.modifiedAt.getTime()?e:t;return{...o,createdAt:t.createdAt.getTime()<=e.createdAt.getTime()?t.createdAt:e.createdAt,modifiedAt:o.modifiedAt,filePath:o.filePath,filePaths:s}}function ac(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function Pv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!gm(a.type)||!a.tokens)continue;let l=ac(a.tokens.input),c=ac(a.tokens.cached),d=Math.max(l-c,0),u=ac(a.tokens.output),f=ac(a.tokens.thoughts);e+=l,n+=c,r+=u,s+=f,o=l,i={inputTokens:d,cachedInputTokens:c,cacheWriteInputTokens:0,outputTokens:u,reasoningOutputTokens:f,totalTokens:l+u+f}}return{totalInputTokens:e,totalCachedInputTokens:n,totalOutputTokens:r,totalReasoningOutputTokens:s,lastInputTokens:o,lastTokenUsage:i}}function R1(t){return v1("sha256").update(t).digest("hex")}function Mi(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=I1(n);if(r===n)break;n=r}}var lc,Uv=x(()=>{"use strict";Re();Ma();re();lc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||bt(Q,".gemini");this.geminiProjectsFile=bt(n,"projects.json"),this.geminiTmpDir=bt(n,"tmp");let r=e.claudeDir||bt(Q,".claude");this.claudeProjectsDir=bt(r,"projects");let s=[bt(Q,".codex"),bt(Q,".code")],o=e.codexDirs&&e.codexDirs.length>0?e.codexDirs:[e.codexDir||s[0],e.codeDir||s[1]];this.codexSessionDirs=[...new Set(o)].map(i=>bt(i,"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 o=A1(s),i=n.get(o);n.set(o,i?N1(i,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 Ae(n),o=[],i=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",d=await this.resolveWorkspace(c),u,f,m;for(let g of a){let E=Zr(g.timestamp),y=g.type,T=_e(_m(g.content));if($v(y)){let S=_m(g.content);S&&i.push(S);let b=T.trim();b&&(u||(u=G(b,80)),f=G(b,80)),o.push({role:"user",timestamp:E,content:b||T});continue}if(gm(y)){g.model&&(m=g.model);for(let S of g.thoughts||[]){let b=[S.subject,S.description].filter(Boolean).join(`
1826
+ `).trim();b&&o.push({role:"thinking",timestamp:Zr(S.timestamp,E),content:_e(b)})}o.push({role:"assistant",timestamp:E,content:T,model:g.model});continue}let w=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${w}${T}`.trim()})}let p=Zr(r.startTime,s.createdAt),_=Zr(r.lastUpdated,s.modifiedAt),h=Pv(a);return{provider:"gemini",sessionId:l,cwd:d,createdAt:p,modifiedAt:_,model:m,startCommand:"gemini",firstUserMessage:u,lastUserMessage:f,messageCount:o.filter(g=>g.role==="user"||g.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:o,userPrompts:i}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await Ae(e),s=n.messages||[],o=n.sessionId||this.extractSessionIdFromFilename(e),i=n.projectHash||"",a=await this.resolveWorkspace(i),l,c,d,u=0;for(let m of s)if($v(m.type)){u++;let p=_m(m.content).trim();p&&(l||(l=G(_e(p),80)),c=G(_e(p),80))}else gm(m.type)&&(u++,m.model&&(d=m.model));let f=Pv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Zr(n.startTime,r.createdAt),modifiedAt:Zr(n.lastUpdated,r.modifiedAt),model:d,startCommand:"gemini",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCachedInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,totalReasoningOutputTokens:f.totalReasoningOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async readSessionFile(e){let n=await Mv(e,"utf-8");if(Bo(n)==="unknown")return U({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 $r(n)}catch{return null}}extractSessionIdFromFilename(e){let n=b1(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 Di(this.geminiTmpDir)}catch{return e}for(let r of n){let s=bt(this.geminiTmpDir,r,"chats");if(!(await ic(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Di(s)}catch{continue}for(let a of i)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(bt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await S1(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let o=await this.readSessionFile(s).catch(()=>null),i=this.extractSessionIdFromFilename(s),a=o?.sessionId||i,l=a===e||a.startsWith(e),c=i===e||i.startsWith(e)||i.length>=8&&e.startsWith(i);if(!l&&!c)continue;let d=await Ae(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Zr(o?.lastUpdated,d.modifiedAt)})}return r.sort((s,o)=>{let i=o.modifiedAt.getTime()-s.modifiedAt.getTime();return i!==0?i:o.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;Mi(e,k1());for(let r of this.extraWorkspacePaths)Mi(e,r);for(let r of await this.collectGeminiProjectPaths())Mi(e,r);for(let r of await this.collectCodexCwds())Mi(e,r);for(let r of await this.collectClaudeCwds())Mi(e,r);let n=new Map;for(let r of e)n.set(R1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Mv(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 i=(await Et(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Di(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=bt(this.claudeProjectsDir,r);if(!(await ic(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Di(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=bt(s,a),d=(await Et(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await ic(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Di(e)}catch{return n}for(let o of s){let i=bt(e,o),a=await ic(i).catch(()=>null);if(a)if(a.isDirectory()){let l=await this.findJsonlFiles(i);n.push(...l)}else o.endsWith(".jsonl")&&n.push(i)}return n}}});import{readFileSync as L1,writeFileSync as x1,mkdirSync as C1}from"node:fs";import{join as O1,dirname as D1}from"node:path";import{randomUUID as M1}from"node:crypto";function Em(t){return new ym(t)}var ym,Tm=x(()=>{"use strict";js();Uv();Ye();Fe();Ma();ym=class extends ce{constructor(e){super({provider:new lc(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",Z,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(sr))})}seed(e,n){return Promise.resolve({success:!1,error:sr})}sendTurn(e,n){return Promise.reject(new Error(sr))}openSession(e){return Promise.reject(new Error(sr))}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(`
1827
1827
  `)}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:Cl,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=L1(r,"utf-8"),o=Bo(s),i=$r(s),a=M1();i.sessionId=a,i.kind="main";let l=D1(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=O1(l,u);return C1(l,{recursive:!0}),x1(f,sy(i,o),"utf-8"),{success:!0,sessionId:a,filePath:f}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}}});import{readdir as Fv,readFile as $1,rm as P1,stat as eo}from"node:fs/promises";import{basename as U1,join as Xt}from"node:path";function F1(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 wm(){return{shutdownTotals:null,assistantOutputSum:0}}function Wv(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=F1(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function jv(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 j1(t){let e={};for(let n of t.split(`
1828
1828
  `)){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 es(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function W1(t){let e=0,n=wm(),r;for await(let s of Ee(t)){if(s.type==="user.message"){e++;let o=(s.data?.content||"").trim();o&&(r=G(o,80))}else s.type==="assistant.message"&&(s.data?.content||"").trim()&&e++;Wv(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function H1(t){let e=B1(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),d=[l?.content,l?.toolDetailedContent].filter(f=>typeof f=="string").join(`
1829
- `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(d===void 0)continue;let u=`copilot-shell:${d}:${r.toolCallId}`;n.set(d,u),r.backgroundTaskId=u,l!==void 0&&(l.backgroundTaskId=u);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 o=String(s),i=n.get(o);if(i===void 0)continue;r.backgroundTaskId=i;let a=e.get(r.toolCallId);a!==void 0&&(a.backgroundTaskId=i)}}function B1(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 cc,Hv=x(()=>{"use strict";Re();cc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||Xt(Q,".copilot");this.sessionStateDir=Xt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Fv(this.sessionStateDir)}catch{return e}for(let r of n){let s=Xt(this.sessionStateDir,r);if((await eo(s).catch(()=>null))?.isDirectory())try{let i=await this.extractSummary(s,r);i&&e.push(i)}catch{}}return e}async loadSession(e){let n=await this.resolveSessionDir(e);if(!n)return null;let r=await this.readWorkspaceYaml(n),s=Xt(n,"events.jsonl"),o=await eo(s).catch(()=>null),i=o?s:Xt(n,"workspace.yaml"),a=await Ae(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||U1(n)||e,E=wm();if(o)for await(let y of Ee(s)){let T=es(y.timestamp)||a.modifiedAt;if(Wv(E,y),y.type==="session.start"&&y.data){y.data.sessionId&&(g=y.data.sessionId),y.data.copilotVersion&&(f=y.data.copilotVersion),y.data.startTime&&(h=es(y.data.startTime)),y.data.selectedModel&&(u=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){u=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let w=y.data.content||"";w&&c.push(w);let S=w.trim();S&&(p||(p=G(S,80)),_=G(S,80)),l.push({role:"user",timestamp:T,content:_e(S||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:_e(w),model:u}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments?JSON.stringify(S.arguments,null,2):void 0,toolInputData:Rt(S.arguments),toolCallId:S.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:_e(w),toolDetailedContent:S?_e(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:_e(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let w=y.data?.message||"";w.trim()&&l.push({role:"system",timestamp:T,content:_e(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return H1(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",gitBranch:m,firstUserMessage:p,lastUserMessage:_,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:i,...jv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=Xt(e,"events.jsonl"),o=await eo(s).catch(()=>null),i=o?s:Xt(e,"workspace.yaml"),a=await Ae(o?s:e),l=o?await Et(s,20):[],c=r?.id||n,d=r?.cwd||"(unknown workspace)",u,f,m,p,_;for(let g of l)if(g.type==="session.start"&&g.data&&(g.data.sessionId&&(c=g.data.sessionId),g.data.copilotVersion&&(f=g.data.copilotVersion),g.data.startTime&&(m=es(g.data.startTime)),g.data.selectedModel&&(u=g.data.selectedModel),g.data.context?.cwd&&(d=g.data.context.cwd)),g.type==="session.model_change"&&g.data?.newModel&&(u||(u=g.data.newModel)),g.type==="user.message"&&g.data){let E=(g.data.content||"").trim();E&&(p||(p=G(E,80)),_=G(E,80))}if(!p){let g=(r?.summary||"").trim();g&&(p=G(g,80))}let h=o?await W1(s):{messageCount:0,tokens:wm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...jv(h.tokens)}}async readWorkspaceYaml(e){let n=Xt(e,"workspace.yaml");try{let r=await $1(n,"utf-8");return j1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await P1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Fv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=Xt(this.sessionStateDir,e);if((await eo(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=Xt(this.sessionStateDir,s);(await eo(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=Xt(this.sessionStateDir,s);if(!(await eo(o).catch(()=>null))?.isDirectory())continue;let a=await this.readWorkspaceYaml(o);if(a&&(a.id===e||a.id?.startsWith(e)))return o}return null}}});function Sm(t){return new vm(t)}var vm,Im=x(()=>{"use strict";Hv();Ye();$n();re();Fe();vm=class extends ce{copilotDir;constructor(e){super({provider:new cc(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",Z,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>Bt(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return cn({...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 He({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function km(t){return new bm(t)}var bm,Am=x(()=>{"use strict";Zl();Ye();$n();Fe();bm=class extends ce{constructor(e){super({provider:new zs(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",Z],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>Bt(n,{...r,acpTool:"opencode"})})}openSession(e){return cn({...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??Z),n}}});import{appendFile as X1,mkdir as q1,readFile as Bv,readdir as Xv,rm as G1,stat as qv}from"node:fs/promises";import{basename as V1,dirname as J1,isAbsolute as Gv,join as ts,relative as K1,resolve as Nm}from"node:path";function Rm(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function Z1(t){return typeof t=="number"?new Date(t):Rm(t)??new Date(0)}function Vv(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(`
1829
+ `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(d===void 0)continue;let u=`copilot-shell:${d}:${r.toolCallId}`;n.set(d,u),r.backgroundTaskId=u,l!==void 0&&(l.backgroundTaskId=u);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 o=String(s),i=n.get(o);if(i===void 0)continue;r.backgroundTaskId=i;let a=e.get(r.toolCallId);a!==void 0&&(a.backgroundTaskId=i)}}function B1(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 cc,Hv=x(()=>{"use strict";Re();cc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||Xt(Q,".copilot");this.sessionStateDir=Xt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Fv(this.sessionStateDir)}catch{return e}for(let r of n){let s=Xt(this.sessionStateDir,r);if((await eo(s).catch(()=>null))?.isDirectory())try{let i=await this.extractSummary(s,r);i&&e.push(i)}catch{}}return e}async loadSession(e){let n=await this.resolveSessionDir(e);if(!n)return null;let r=await this.readWorkspaceYaml(n),s=Xt(n,"events.jsonl"),o=await eo(s).catch(()=>null),i=o?s:Xt(n,"workspace.yaml"),a=await Ae(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||U1(n)||e,E=wm();if(o)for await(let y of Ee(s)){let T=es(y.timestamp)||a.modifiedAt;if(Wv(E,y),y.type==="session.start"&&y.data){y.data.sessionId&&(g=y.data.sessionId),y.data.copilotVersion&&(f=y.data.copilotVersion),y.data.startTime&&(h=es(y.data.startTime)),y.data.selectedModel&&(u=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){u=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let w=y.data.content||"";w&&c.push(w);let S=w.trim();S&&(p||(p=G(S,80)),_=G(S,80)),l.push({role:"user",timestamp:T,content:_e(S||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:_e(w),model:u}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments?JSON.stringify(S.arguments,null,2):void 0,toolInputData:Rt(S.arguments),toolCallId:S.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:_e(w),toolDetailedContent:S?_e(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:_e(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let w=y.data?.message||"";w.trim()&&l.push({role:"system",timestamp:T,content:_e(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return H1(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",gitBranch:m,firstUserMessage:p,lastUserMessage:_,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:i,...jv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=Xt(e,"events.jsonl"),o=await eo(s).catch(()=>null),i=o?s:Xt(e,"workspace.yaml"),a=await Ae(o?s:e),l=o?await Et(s,20):[],c=r?.id||n,d=r?.cwd||"(unknown workspace)",u,f,m,p,_;for(let g of l)if(g.type==="session.start"&&g.data&&(g.data.sessionId&&(c=g.data.sessionId),g.data.copilotVersion&&(f=g.data.copilotVersion),g.data.startTime&&(m=es(g.data.startTime)),g.data.selectedModel&&(u=g.data.selectedModel),g.data.context?.cwd&&(d=g.data.context.cwd)),g.type==="session.model_change"&&g.data?.newModel&&(u||(u=g.data.newModel)),g.type==="user.message"&&g.data){let E=(g.data.content||"").trim();E&&(p||(p=G(E,80)),_=G(E,80))}if(!p){let g=(r?.summary||"").trim();g&&(p=G(g,80))}let h=o?await W1(s):{messageCount:0,tokens:wm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...jv(h.tokens)}}async readWorkspaceYaml(e){let n=Xt(e,"workspace.yaml");try{let r=await $1(n,"utf-8");return j1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await P1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Fv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=Xt(this.sessionStateDir,e);if((await eo(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=Xt(this.sessionStateDir,s);(await eo(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=Xt(this.sessionStateDir,s);if(!(await eo(o).catch(()=>null))?.isDirectory())continue;let a=await this.readWorkspaceYaml(o);if(a&&(a.id===e||a.id?.startsWith(e)))return o}return null}}});function Sm(t){return new vm(t)}var vm,bm=x(()=>{"use strict";Hv();Ye();$n();re();Fe();vm=class extends ce{copilotDir;constructor(e){super({provider:new cc(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",Z,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>Bt(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return cn({...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 He({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function km(t){return new Im(t)}var Im,Am=x(()=>{"use strict";Zl();Ye();$n();Fe();Im=class extends ce{constructor(e){super({provider:new zs(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",Z],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>Bt(n,{...r,acpTool:"opencode"})})}openSession(e){return cn({...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??Z),n}}});import{appendFile as X1,mkdir as q1,readFile as Bv,readdir as Xv,rm as G1,stat as qv}from"node:fs/promises";import{basename as V1,dirname as J1,isAbsolute as Gv,join as ts,relative as K1,resolve as Nm}from"node:path";function Rm(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function Z1(t){return typeof t=="number"?new Date(t):Rm(t)??new Date(0)}function Vv(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(`
1830
1830
  `).trim():""}function Jv(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function eU(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:Jv(t)??""}function tU(t){let e=nU(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 o=s.content.match(/(?:^|\n)task_id:\s*([^\s]+)/)?.[1];o!==void 0&&(n.add(o),r.backgroundTaskId=o,s.backgroundTaskId=o)}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 o=e.get(r.toolCallId);o!==void 0&&(o.backgroundTaskId=s)}}function nU(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 Y1,z1,Q1,dc,Kv=x(()=>{"use strict";Re();Y1="1.4",z1="1.5",Q1=new Set([Y1,z1]),dc=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Nm(e?.kimiHome??process.env.KIMI_CODE_HOME??ts(Q,".kimi-code")),this.sessionsDir=ts(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 G1(n.sessionDir,{recursive:!0,force:!0}),await q1(J1(this.indexPath()),{recursive:!0,mode:448}),await X1(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1831
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return ts(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 Xv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=ts(this.sessionsDir,s.name),i;try{i=await Xv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=ts(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await Bv(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:Nm(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:ts(n,"state.json"),wirePath:ts(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Gv(e)||V1(e)!==n)return!1;let r=K1(this.sessionsDir,Nm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Gv(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(o=>o.sessionId===e);if(r)return r;let s=n.filter(o=>o.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await Bv(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 qv(e.wirePath)}catch{return null}let s=await qv(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Rm(n.createdAt)??s.birthtime,a=Rm(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:i,modifiedAt:a,model:o.model,startCommand:"kimi",firstUserMessage:o.firstUserMessage,lastUserMessage:o.lastUserMessage??(n.lastPrompt?G(n.lastPrompt.trim(),80):void 0),messageCount:o.messageCount,filePath:e.wirePath,filePaths:[e.statePath,e.wirePath],totalInputTokens:o.totalInputTokens,totalCachedInputTokens:o.totalCachedInputTokens,totalCacheWriteInputTokens:o.totalCacheWriteInputTokens,totalOutputTokens:o.totalOutputTokens,lastInputTokens:o.lastInputTokens,lastTokenUsage:o.lastTokenUsage}}async parseWire(e){let n=[],r=[],s=new Set,o=!0,i,a,l,c=0,d=0,u=0,f=0,m=!1,p=0,_,h;for await(let g of Ee(e)){let E=Z1(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!Q1.has(g.protocol_version))){let T=`Kimi transcript wire protocol version ${JSON.stringify(g.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:E,content:T}],userPrompts:[],messageCount:1,firstUserMessage:T,lastUserMessage:T}}if((g.type==="config.update"||g.type==="profile.bind")&&g.modelAlias&&(i=g.modelAlias),g.type==="usage.record"){g.model&&(i=g.model),m||=g.usage!==void 0;let T=g.usage?.inputOther??0,w=g.usage?.inputCacheRead??0,S=g.usage?.inputCacheCreation??0,I=g.usage?.output??0;c+=T,d+=w,u+=S,f+=I,g.usageScope==="turn"&&(_=T+w+S,h={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:S,outputTokens:I,totalTokens:_+I});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=Vv(g.input);T&&((!g.promptId||!s.has(g.promptId))&&(r.push(T),g.promptId&&s.add(g.promptId)),a??=G(T,80),l=G(T,80),n.push({role:"user",timestamp:E,content:T}),p++);continue}if(g.type==="turn.steer"){let T=Vv(g.input);T&&(n.push({role:"system",timestamp:E,content:T}),p++);continue}if(g.type!=="context.append_loop_event"||!g.event)continue;let y=g.event;y.type==="content.part"&&y.part?.type==="text"&&y.part.text?(n.push({role:"assistant",timestamp:E,content:y.part.text,model:i}),p++):y.type==="content.part"&&y.part?.type==="think"&&y.part.think?n.push({role:"thinking",timestamp:E,content:y.part.think,model:i}):y.type==="tool.call"?n.push({role:"tool_use",timestamp:E,content:y.name??"tool",toolName:y.name,toolInput:Jv(y.args),toolInputData:Rt(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:eU(y.result),toolCallId:y.toolCallId,model:i})}return tU(n),{messages:n,userPrompts:r,messageCount:p,model:i,firstUserMessage:a,lastUserMessage:l,totalInputTokens:m?c:void 0,totalCachedInputTokens:m?d:void 0,totalCacheWriteInputTokens:m?u:void 0,totalOutputTokens:m?f:void 0,lastInputTokens:_,lastTokenUsage:h}}}});function xm(t){return new Lm(t)}var Lm,Cm=x(()=>{"use strict";Kv();Ye();$n();Fe();Lm=class extends ce{kimiHome;constructor(e){super({provider:new dc(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",Z,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Bt(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return cn({...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??Z,"--output-format","stream-json"),n}}});import{spawn as rU}from"node:child_process";import{mkdirSync as sU}from"node:fs";function Dm(t){return new Om(t)}async function oU(t,e){let n=Date.now(),r=Yv({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});De("lmplayer",r,e.permissionMode??"yolo");let s=await Qv(e.binary,r,{cwd:e.cwd,env:Ce(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(zv(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Yv(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(...fr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function zv(t){let n=[Jr(t.stderr).trim(),t.error].filter(Boolean).join(`
1831
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return ts(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 Xv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=ts(this.sessionsDir,s.name),i;try{i=await Xv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=ts(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await Bv(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:Nm(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:ts(n,"state.json"),wirePath:ts(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Gv(e)||V1(e)!==n)return!1;let r=K1(this.sessionsDir,Nm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Gv(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(o=>o.sessionId===e);if(r)return r;let s=n.filter(o=>o.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await Bv(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 qv(e.wirePath)}catch{return null}let s=await qv(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Rm(n.createdAt)??s.birthtime,a=Rm(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:i,modifiedAt:a,model:o.model,startCommand:"kimi",firstUserMessage:o.firstUserMessage,lastUserMessage:o.lastUserMessage??(n.lastPrompt?G(n.lastPrompt.trim(),80):void 0),messageCount:o.messageCount,filePath:e.wirePath,filePaths:[e.statePath,e.wirePath],totalInputTokens:o.totalInputTokens,totalCachedInputTokens:o.totalCachedInputTokens,totalCacheWriteInputTokens:o.totalCacheWriteInputTokens,totalOutputTokens:o.totalOutputTokens,lastInputTokens:o.lastInputTokens,lastTokenUsage:o.lastTokenUsage}}async parseWire(e){let n=[],r=[],s=new Set,o=!0,i,a,l,c=0,d=0,u=0,f=0,m=!1,p=0,_,h;for await(let g of Ee(e)){let E=Z1(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!Q1.has(g.protocol_version))){let T=`Kimi transcript wire protocol version ${JSON.stringify(g.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:E,content:T}],userPrompts:[],messageCount:1,firstUserMessage:T,lastUserMessage:T}}if((g.type==="config.update"||g.type==="profile.bind")&&g.modelAlias&&(i=g.modelAlias),g.type==="usage.record"){g.model&&(i=g.model),m||=g.usage!==void 0;let T=g.usage?.inputOther??0,w=g.usage?.inputCacheRead??0,S=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=T,d+=w,u+=S,f+=b,g.usageScope==="turn"&&(_=T+w+S,h={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:S,outputTokens:b,totalTokens:_+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=Vv(g.input);T&&((!g.promptId||!s.has(g.promptId))&&(r.push(T),g.promptId&&s.add(g.promptId)),a??=G(T,80),l=G(T,80),n.push({role:"user",timestamp:E,content:T}),p++);continue}if(g.type==="turn.steer"){let T=Vv(g.input);T&&(n.push({role:"system",timestamp:E,content:T}),p++);continue}if(g.type!=="context.append_loop_event"||!g.event)continue;let y=g.event;y.type==="content.part"&&y.part?.type==="text"&&y.part.text?(n.push({role:"assistant",timestamp:E,content:y.part.text,model:i}),p++):y.type==="content.part"&&y.part?.type==="think"&&y.part.think?n.push({role:"thinking",timestamp:E,content:y.part.think,model:i}):y.type==="tool.call"?n.push({role:"tool_use",timestamp:E,content:y.name??"tool",toolName:y.name,toolInput:Jv(y.args),toolInputData:Rt(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:eU(y.result),toolCallId:y.toolCallId,model:i})}return tU(n),{messages:n,userPrompts:r,messageCount:p,model:i,firstUserMessage:a,lastUserMessage:l,totalInputTokens:m?c:void 0,totalCachedInputTokens:m?d:void 0,totalCacheWriteInputTokens:m?u:void 0,totalOutputTokens:m?f:void 0,lastInputTokens:_,lastTokenUsage:h}}}});function xm(t){return new Lm(t)}var Lm,Cm=x(()=>{"use strict";Kv();Ye();$n();Fe();Lm=class extends ce{kimiHome;constructor(e){super({provider:new dc(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",Z,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Bt(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return cn({...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??Z,"--output-format","stream-json"),n}}});import{spawn as rU}from"node:child_process";import{mkdirSync as sU}from"node:fs";function Dm(t){return new Om(t)}async function oU(t,e){let n=Date.now(),r=Yv({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});De("lmplayer",r,e.permissionMode??"yolo");let s=await Qv(e.binary,r,{cwd:e.cwd,env:Ce(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(zv(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Yv(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(...fr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function zv(t){let n=[Jr(t.stderr).trim(),t.error].filter(Boolean).join(`
1832
1832
  `);return n?we(n,{provider:"lmplayer"}):`exit code ${t.code}`}function Qv(t,e,n){return new Promise((r,s)=>{let o;try{o=rU(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(_){s(_);return}let i="",a="",l="",c,d,u,f=[],m=!1,p=_=>{let h=_.trim();if(!h)return;let g;try{g=JSON.parse(h)}catch{f.push(_),n.onText?.(_);return}if(!to(g))return;let E=uc(g,!1);c===void 0&&E!==void 0&&(c=E),d=uc(g,!0)??d;let y=iU(g);y!==void 0&&(u=y);let T=Zv(g);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",_=>{let h=_.toString("utf8");i+=h,l+=h;let g=l.indexOf(`
1833
1833
  `);for(;g>=0;){let E=l.slice(0,g);l=l.slice(g+1),p(E),g=l.indexOf(`
1834
1834
  `)}}),o.stderr?.on("data",_=>{a+=_.toString("utf8")}),n.signal&&(n.signal.aborted?o.kill():n.signal.addEventListener("abort",()=>o.kill(),{once:!0})),o.on("exit",_=>{m||(m=!0,l.length>0&&p(l),r({code:_,stdout:i,stderr:a,sessionId:c??d,text:f.join(""),error:u}))}),o.on("error",_=>{m||(m=!0,s(_))})})}function iU(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(to(e)){let n=e.data;if(to(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 Zv(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(to(n)){let r=Zv(n);if(r)return r}}}function uc(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(to(n)){let r=uc(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(to(s)){let o=uc(s,e);if(o!==void 0)return o}}}function to(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Om,Mm=x(()=>{"use strict";Zl();Ye();Fe();ln();Ht();il();St();Om=class extends ce{constructor(e){super({provider:new zs({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",Z],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:oU})}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 Yv({prompt:e?.prompt??Z,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){sU(e,{recursive:!0});let r=this.seedArgsFor(n);De("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await Qv(this.binary,r,{cwd:e,env:Js(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:zv(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 "${Z}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as fc,readFile as aU,rm as lU}from"node:fs/promises";import{basename as eS,join as hr}from"node:path";function cU(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function $i(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function dU(t,e){if(!e)return;t.observed=!0;let n=$i(e.promptTokenCount),r=$i(e.cachedContentTokenCount),s=$i(e.candidatesTokenCount),o=$i(e.thoughtsTokenCount);t.totalInputTokens+=n,t.totalCachedInputTokens+=r,t.totalOutputTokens+=s,t.totalReasoningOutputTokens+=o,t.lastInputTokens=n,t.lastTokenUsage={inputTokens:Math.max(n-r,0),cachedInputTokens:r,outputTokens:s,reasoningOutputTokens:o,totalTokens:$i(e.totalTokenCount)||n+s}}function uU(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 tS(t){return t.type==="user"||t.message?.role==="user"}function nS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function rS(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(`
1835
1835
  `):Array.isArray(e.parts)?e.parts.filter(n=>!n.thought&&n.type!=="thinking").map(n=>n.text||"").join(`
1836
- `):"":""}function sS(t){return t.model||t.message?.model}function fU(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:iS(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Pi(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 mU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Pi(e.output??e.error??t)}return Pi(t)}function iS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function oS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Pi(t.args,!0),toolInputData:Rt(t.args),toolCallId:t.id,model:n}}var mc,aS=x(()=>{"use strict";Re();mc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||hr(Q,".qwen")}async discoverSessions(){let e=hr(this.baseDir,"projects"),n;try{n=await fc(e)}catch{return[]}let r=[];for(let s of n){let o=hr(e,s,"chats"),i;try{i=await fc(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=hr(o,a);try{let d=await this.extractSummary(c,l);d&&r.push(d)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await Ae(e),o="(unknown)",i,a,l,c,d=0;for await(let u of Ee(e)){if(r=!0,u.cwd&&(o=u.cwd,u.version&&(a=u.version)),u.type==="system"&&u.cwd&&(o=u.cwd,u.version&&(a=u.version),u.model&&(i=u.model)),tS(u)){let f=rS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(nS(u)){let f=sS(u);f&&(i=f),d+=fU(u)}}return r?{provider:"qwen",sessionId:n,cwd:o,createdAt:s.createdAt,modifiedAt:s.modifiedAt,model:i,cliVersion:a,startCommand:"qwen",firstUserMessage:l,lastUserMessage:c,messageCount:d,filePath:e}:null}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=eS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ae(e),s="(unknown)",o,i,a,l,c,d,u=[],f=cU();for await(let m of Ee(e)){if(dU(f,m.usageMetadata),m.cwd&&(s=m.cwd,m.version&&(i=m.version),m.gitBranch&&(a=m.gitBranch)),m.type==="system"&&m.cwd&&(s=m.cwd,m.version&&(i=m.version),m.model&&(o=m.model),m.gitBranch&&(a=m.gitBranch)),!m.message)continue;let p=m.message,_=m.timestamp?new Date(m.timestamp):r.modifiedAt;if(m.type==="tool_result"){let h=iS(m).filter(g=>g.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:_,content:Pi(m.toolCallResult.resultDisplay??m.toolCallResult.error??m.toolCallResult.status)??"tool result",toolCallId:m.toolCallResult.callId});for(let g of h){let E=g.functionResponse,y=mU(E.response),T=Pi(m.toolCallResult?.resultDisplay);u.push({role:"tool_result",timestamp:_,content:T??y??m.toolCallResult?.status??"tool result",toolName:E.name,toolCallId:m.toolCallResult?.callId??E.id,...y!==void 0?{toolDetailedContent:y}:{}})}}else if(tS(m)){let h=rS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(nS(m)){let h=sS(m);if(h&&(o=h),Array.isArray(p.content))for(let g of p.content)g.type==="text"&&g.text?u.push({role:"assistant",timestamp:_,content:g.text,model:h}):g.type==="thinking"&&g.thinking?u.push({role:"thinking",timestamp:_,content:g.thinking}):g.functionCall&&u.push(oS(g.functionCall,_,h));else if(typeof p.content=="string")u.push({role:"assistant",timestamp:_,content:p.content,model:h});else if(Array.isArray(p.parts))for(let g of p.parts)if(g.thought||g.type==="thinking"){let E=g.thinking||g.text;E&&u.push({role:"thinking",timestamp:_,content:E})}else g.functionCall?u.push(oS(g.functionCall,_,h)):g.text&&u.push({role:"assistant",timestamp:_,content:g.text,model:h})}}return{provider:"qwen",sessionId:n,slug:l,cwd:s,createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:o,cliVersion:i,gitBranch:a,startCommand:"qwen",firstUserMessage:c,lastUserMessage:d,messageCount:u.filter(m=>m.role==="user"||m.role==="assistant").length,filePath:e,...uU(f),messages:u}}async resolveSessionPath(e){let n=hr(this.baseDir,"projects");try{let r=await fc(n),s=[];for(let o of r){let i=hr(n,o,"chats",`${e}.jsonl`);try{return await aU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=hr(n,o,"chats"),a;try{a=await fc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;eS(l,".jsonl").startsWith(e)&&s.push(hr(i,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 lU(n),!0}catch{return!1}}}});function Pm(t){return new $m(t)}var $m,Um=x(()=>{"use strict";aS();Ye();$n();Fe();$m=class extends ce{constructor(e){super({provider:new mc(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",Z,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:ec})}openSession(e){return tc({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as lS,readFile as cS,rm as dS,stat as uS}from"node:fs/promises";import{basename as Fm,join as dn}from"node:path";import{fileURLToPath as pU}from"node:url";async function hU(t){let e=await Promise.all(t.map(n=>Ae(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 _U(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function fS(t){return t.type==="USER_INPUT"}function mS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function gU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function pS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function hS(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 yU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function EU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=TU(s);if(o)return o}let r=wU(e.content);if(r)return r}return null}function TU(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 wU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function vU(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 SU(t,e){let n=new Set;for(let r of e){let s=IU(t,n,r);if(!s)continue;n.add(s);let o=r.event.step_index===void 0?void 0:`agy-step-${r.event.step_index}`;s.message.toolCallId=o,s.message.backgroundTaskId=r.message.backgroundTaskId,r.message.toolName=s.name,r.message.toolCallId=o}}function IU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:NU(n.event.content);if(r!==void 0)return _S(t.filter(o=>!e.has(o)&&RU(o)===r),n.event.step_index);let s=AU(n.event);if(s!==void 0)return _S(t.filter(o=>!e.has(o)&&bU(o.name,n.event.type)&&yS(kU(o))===s),n.event.step_index)}function _S(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 bU(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 kU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function AU(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]),yS(e)}function yS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return pU(e)}catch{return}}function NU(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function RU(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 gS(t){if(t.endsWith(".db"))return Fm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var pc,ES=x(()=>{"use strict";Re();pc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||dn(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:dn(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=dn(this.baseDir,"conversations"),n;try{n=await lS(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Fm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return dn(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return dn(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 uS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await hU([n,r].filter(Boolean)),i=await this.resolveCwd(e,r),a,l,c,d=0;if(r)for await(let u of Ee(r)){let f=hS(u.content);if(f&&(a=f),fS(u)){let m=pS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else mS(u)&&u.content&&d++}return{provider:"agy",sessionId:e,cwd:i,createdAt:o.createdAt,modifiedAt:o.modifiedAt,model:a,startCommand:"agy",firstUserMessage:l,lastUserMessage:c,messageCount:d,filePath:s,filePaths:r?[n,r]:[n]}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=gS(n);if(!r)return null;let s=await this.extractSummary(r);if(!s)return null;let o=await this.existingTranscriptPath(r),i=[],a=s.model,l=s.firstUserMessage,c=s.lastUserMessage,d=[],u=[];if(o)for await(let f of Ee(o)){let m=_U(f.created_at,s.modifiedAt),p=hS(f.content);if(p&&(a=p),fS(f)){let _=pS(f.content),h=_.trim();h&&(l||(l=G(h,80)),c=G(h,80)),i.push({role:"user",timestamp:m,content:_});continue}if(Array.isArray(f.tool_calls))for(let _ of f.tool_calls){let h=_.name||"tool",g=yU(_.args),E=Rt(_.args),y={role:"tool_use",timestamp:m,content:g,toolName:h,toolInput:g,toolInputData:E};i.push(y),d.push({name:h,stepIndex:f.step_index,input:E,message:y})}if(mS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(gU(f)&&f.content){let _=vU(f,r),h=_===void 0?null:await this.readTaskLog(r,_),g={role:"tool_result",timestamp:h?.modifiedAt??m,content:f.content,toolName:f.type?.toLowerCase(),backgroundTaskId:_,...h===null?{}:{toolDetailedContent:h.content}};i.push(g),u.push({event:f,message:g})}f.thinking&&i.push({role:"thinking",timestamp:m,content:f.thinking})}return SU(d,u),{...s,model:a,firstUserMessage:l,lastUserMessage:c,messageCount:i.filter(f=>f.role==="user"||f.role==="assistant").length,messages:i}}async resolveSessionPath(e){let n=this.conversationPath(e);try{return await uS(n),n}catch{}let r=dn(this.baseDir,"conversations");try{let s=[];for(let o of await lS(r)){if(!o.endsWith(".db"))continue;Fm(o,".db").startsWith(e)&&s.push(dn(r,o))}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=gS(n);return r?(await dS(this.conversationPath(r),{force:!0}),await dS(dn(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 EU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=dn(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await cS(n,"utf8"));for(let[s,o]of Object.entries(r))if(o===e)return s}catch{}return null}async readTaskLog(e,n){if(!/^task-\d+$/.test(n))return null;let r=dn(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([cS(r,"utf8"),Ae(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as LU}from"node:child_process";import{StringDecoder as TS}from"node:string_decoder";function hc(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:o}=await xU(t.label,n.binary,s,{cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:o.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function xU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=LU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new TS("utf8"),d=new TS("utf8");i.stdout?.on("data",f=>{a+=c.write(f)}),i.stderr?.on("data",f=>{l+=d.write(f)});let u=()=>{i.kill("SIGTERM"),o(new Error(`${t} turn aborted`))};i.on("error",f=>{r.signal?.removeEventListener("abort",u),o(f)}),i.on("close",(f,m)=>{if(r.signal?.removeEventListener("abort",u),a+=c.end(),l+=d.end(),f===0){s({stdout:a,stderr:l});return}let p=m?`signal ${m}`:`exit code ${f}`,_=l.trim()||a.trim();o(new Error(Ps(`${t} failed (${p})`,_?we(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var jm=x(()=>{"use strict";Ht();St()});import{basename as CU}from"node:path";import{randomUUID as OU}from"node:crypto";function Hm(t){return new Wm(t)}function MU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Wm,DU,Bm=x(()=>{"use strict";ES();Ye();Fe();ln();jm();Wm=class extends ce{constructor(e){super({provider:new pc(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",Z,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:DU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||CU(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=OU(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Ol({flightToken:r,prompt:n?.prompt})});if(!o.success&&(o.errorCode==="ENOENT"||o.errorCode==="ABORT_ERR"))return o;let i=(await this.provider.discoverSessions()).filter(a=>a.firstUserMessage?.startsWith(s));if(o.success&&i.length===1)return{...o,sessionId:i[0].sessionId};for(let a of i)await this.provider.deleteSession(a.sessionId);return{...o,success:!1,error:o.error??`agy seed created ${i.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}`}}},DU=hc({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",MU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>De("agy",t,e.permissionMode??"yolo")})});import{existsSync as Ui,readdirSync as $U,statSync as wS}from"node:fs";import{readdir as Xm,rm as PU}from"node:fs/promises";import vS,{join as un}from"node:path";function UU(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 o=t.charCodeAt(s),i=String.fromCharCode(o);i==="/"||i==="\\"||i===":"?(n||(e+="-"),n=!0):i!=="~"&&/^[A-Za-z0-9._-]$/.test(i)?(e+=i,n=!1):(e+="~"+o.toString(16).toUpperCase().padStart(4,"0"),n=!1)}return`--${(e.replace(/^-+/,"")||"root").slice(0,251)}--`}function FU(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function no(t,e){let n=e??(process.platform==="win32"?vS.win32:vS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!Ui(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=$U(r),i=[];for(let a of o){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 d=n.join(r,a);wS(d).isFile()&&i.push({name:a,version:c})}catch{}}}if(i.length>0)return i.sort((a,l)=>l.version-a.version),n.join(r,i[0].name)}catch{}try{if(Ui(t)&&wS(t).isFile())return t}catch{}return n.join(r,s)}function qm(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 jU(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 SS(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 o=r;if(o.source?.kind!==void 0&&o.source.kind!=="user")continue;e.push({role:"user",timestamp:s,content:qm(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of jU(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:qm(o?.content),model:o?.source?.model})}else if(n.type==="tool/call"){let o=r,i;if(typeof o.arguments=="string")try{i=JSON.parse(o.arguments)}catch{}else o.arguments&&typeof o.arguments=="object"&&(i=o.arguments);e.push({role:"tool_use",timestamp:s,content:typeof o.arguments=="string"?o.arguments:JSON.stringify(o.arguments??{}),toolName:o.name,toolCallId:o.callId,toolInputData:i})}else if(n.type==="tool/result"){let o=r,a=(Array.isArray(o.message?.content)?o.message.content:[])[0];e.push({role:"tool_result",timestamp:s,content:qm(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function WU(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 IS(t,e,n){let r=t.find(m=>m.type==="session");if(!r)return null;let s=r,o=r.data,i=s.id??o?.id;if(!i)return null;let a;for(let m of t)if(m.type==="request/header"){let p=m.data?.header;p?.config?.model&&(a=p.config.model)}let l=t.map(m=>m.time).filter(m=>typeof m=="number"),c=s.createdAt??o?.createdAt,d=c?new Date(c):new Date(0),u=l.length>0?new Date(Math.max(...l)):d,f=n.filter(m=>m.role==="user");return{provider:"dsh",sessionId:i,cwd:s.cwd??o?.cwd??"",createdAt:d,modifiedAt:u,model:a,firstUserMessage:f[0]?.content,lastUserMessage:f.at(-1)?.content,messageCount:n.filter(m=>m.role==="user"||m.role==="assistant").length,filePath:e,...HU(t)}}function HU(t){let e=new Map;for(let i of t){let a=i.data?.turn??null,l=e.get(a)??[];l.push(i),e.set(a,l)}let n=[],r=[];for(let i of e.values()){let a=new Ks("",-1,new Set);a.update(i);let l=a.usage();l&&(n.push(l),r.push(a.lastUsage()))}if(!n.length)return{};let s=i=>{if(n.some(l=>l.invalidCounters||l[i]===null))return;let a=n.reduce((l,c)=>l+c[i],0);return Number.isSafeInteger(a)?a:void 0},o=r.at(-1);return{totalInputTokens:s("inputUncached"),totalCachedInputTokens:s("cacheRead"),totalOutputTokens:s("output"),totalReasoningOutputTokens:s("reasoning"),lastInputTokens:o.inputUncached!==null&&o.cacheRead!==null?o.inputUncached+o.cacheRead:void 0,lastTokenUsage:{totalTokens:o.inputUncached!==null&&o.cacheRead!==null&&o.output!==null?o.inputUncached+o.cacheRead+o.output:void 0,inputTokens:o.inputUncached??void 0,cachedInputTokens:o.cacheRead??void 0,outputTokens:o.output??void 0,reasoningOutputTokens:o.reasoning??void 0}}}var _c,bS=x(()=>{"use strict";$l();Re();Na();_c=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||un(Q,".dsh");this.sessionsDir=un(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Xm(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Xm(un(this.sessionsDir,r))}catch{continue}for(let o of s)if(o.startsWith("session-"))try{let i=await this.readSummary(r,o);i&&e.push(i)}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=SS(r),o=IS(r,n.filePath,s);return o?{...o,turnStatus:WU(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 PU(un(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=UU(e),s=FU(e),o=r,i=un(this.sessionsDir,r,n),a=un(this.sessionsDir,s,n);!Ui(i)&&Ui(a)&&(o=s);let l=un(this.sessionsDir,o,n);return no(l)}async findSessionDir(e){let n;try{n=await Xm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=un(this.sessionsDir,r,s);try{let i=no(o);if(Ui(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=un(this.sessionsDir,e,n),o=no(s),i=await r(o),a=Aa(i),l=[];for(let c of a.split(`
1837
- `))if(c.trim())try{let d=JSON.parse(c);if(d.type?.endsWith("-chunks")||d.type==="assistant/chunk"&&d.data?.chunk?.type!=="usage")continue;l.push(d)}catch{}return l}async readSummary(e,n){let r=un(this.sessionsDir,e,n),s=no(r),o=await this.readRecords(e,n);return o.length===0?null:IS(o,s,SS(o))}}});import{spawn as BU}from"node:child_process";import{randomUUID as XU}from"node:crypto";function Gm(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=>Gm(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]=Gm(s,e);return n}return t}function GU(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 AS(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 gc(t,e=n=>Vm.spawn(n)){if(_r){let n=await _r.catch(()=>{});if(n?.alive)return n;_r=void 0}return _r=e(t),_r}async function Fi(){if(!_r)return;(await _r.catch(()=>{}))?.shutdown(),_r=void 0}var qU,kS,Pn,Vm,_r,NS=x(()=>{"use strict";St();qU=/dsh web:\s*(https?:\/\/\S+)/,kS=2e4;Pn=class t extends Error{method;detail;constructor(e,n,r=[]){let s=Gm(n,r),o=typeof s=="string"?s:JSON.stringify(s);super(`dsh RPC ${e} failed: ${o}`),this.name="DshRpcCallError",this.method=e,this.detail=s,Object.setPrototypeOf(this,t.prototype)}};Vm=class t{baseUrl;child;cookie;isV2;tokenUrl;static MAX_RETAINED_SECRETS=8;cookieExchangePromise;knownSecrets=[];constructor(e,n,r,s=!1,o){if(this.baseUrl=e,this.child=n,this.cookie=r,this.isV2=s,this.tokenUrl=o,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{}}}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,o=n?.cookie;try{let i=new URL(e);i.searchParams.has("token")&&(s=!0,r=i.origin)}catch{}return new t(r,void 0,o,s,e)}static async fromBootUrl(e,n,r){let s=GU(e),o=s.searchParams.has("token"),i;if(o)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){i=c.split(";")[0];break}}catch(l){if(r?.aborted)throw l;await new Promise(c=>setTimeout(c,100))}}return new t(s.origin,n,i,o,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),o=(await fetch(this.tokenUrl,{redirect:"manual",signal:r})).headers.get("set-cookie");if(o)return this.cookie=o.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]:[],o=`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=this.isV2?e.includes("/")?e:e.replace(/\./g,"/"):e.includes(".")?e:e.replace(/\//g,"."),a=n;if(this.isV2){let f=n;if(i==="session/prompt"&&f&&typeof f=="object"){let m=f;m.requestId||(f={...m,requestId:XU()})}f&&typeof f=="object"&&"args"in f?a=f:a={args:{request:f}}}let l={"content-type":"application/json"};this.cookie&&(l.cookie=this.cookie);let c;try{c=await fetch(`${this.baseUrl}/api/${i}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:o,method:i,payload:a}),redirect:"manual"})}catch(f){throw new Pn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Pn(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s));if((c.status===401||c.status===403)&&this.isV2&&this.tokenUrl){let f=await this.ensureCookie(!0);if(f&&f!==l.cookie){l.cookie=f,s.push(f);try{c=await fetch(`${this.baseUrl}/api/${i}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:o,method:i,payload:a}),redirect:"manual"})}catch(m){throw new Pn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Pn(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s))}}let d;try{d=await c.json()}catch{d=void 0}if(!c.ok)throw new Pn(e,d??c.statusText,this.getSecretsToRedact(s));let u=d&&typeof d=="object"?d.result:void 0;if(!u||typeof u!="object"||typeof u.ok!="boolean")throw new Pn(e,"malformed response: HTTP 200 but body is not a well-formed {result:{ok,\u2026}} envelope",this.getSecretsToRedact(s));if(u.ok===!1)throw new Pn(e,u.error??u,this.getSecretsToRedact(s));return"value"in u?u.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&&AS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=BU("dsh",["web","--no-open","--port","0"],{env:e,stdio:["ignore","pipe","pipe"]}),o=!1,i=!1,a="",l="",c="",d=new AbortController,u=m=>{o||(o=!0,clearTimeout(f),d.abort(),AS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1836
+ `):"":""}function sS(t){return t.model||t.message?.model}function fU(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:iS(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Pi(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 mU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Pi(e.output??e.error??t)}return Pi(t)}function iS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function oS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Pi(t.args,!0),toolInputData:Rt(t.args),toolCallId:t.id,model:n}}var mc,aS=x(()=>{"use strict";Re();mc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||hr(Q,".qwen")}async discoverSessions(){let e=hr(this.baseDir,"projects"),n;try{n=await fc(e)}catch{return[]}let r=[];for(let s of n){let o=hr(e,s,"chats"),i;try{i=await fc(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=hr(o,a);try{let d=await this.extractSummary(c,l);d&&r.push(d)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await Ae(e),o="(unknown)",i,a,l,c,d=0;for await(let u of Ee(e)){if(r=!0,u.cwd&&(o=u.cwd,u.version&&(a=u.version)),u.type==="system"&&u.cwd&&(o=u.cwd,u.version&&(a=u.version),u.model&&(i=u.model)),tS(u)){let f=rS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(nS(u)){let f=sS(u);f&&(i=f),d+=fU(u)}}return r?{provider:"qwen",sessionId:n,cwd:o,createdAt:s.createdAt,modifiedAt:s.modifiedAt,model:i,cliVersion:a,startCommand:"qwen",firstUserMessage:l,lastUserMessage:c,messageCount:d,filePath:e}:null}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=eS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ae(e),s="(unknown)",o,i,a,l,c,d,u=[],f=cU();for await(let m of Ee(e)){if(dU(f,m.usageMetadata),m.cwd&&(s=m.cwd,m.version&&(i=m.version),m.gitBranch&&(a=m.gitBranch)),m.type==="system"&&m.cwd&&(s=m.cwd,m.version&&(i=m.version),m.model&&(o=m.model),m.gitBranch&&(a=m.gitBranch)),!m.message)continue;let p=m.message,_=m.timestamp?new Date(m.timestamp):r.modifiedAt;if(m.type==="tool_result"){let h=iS(m).filter(g=>g.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:_,content:Pi(m.toolCallResult.resultDisplay??m.toolCallResult.error??m.toolCallResult.status)??"tool result",toolCallId:m.toolCallResult.callId});for(let g of h){let E=g.functionResponse,y=mU(E.response),T=Pi(m.toolCallResult?.resultDisplay);u.push({role:"tool_result",timestamp:_,content:T??y??m.toolCallResult?.status??"tool result",toolName:E.name,toolCallId:m.toolCallResult?.callId??E.id,...y!==void 0?{toolDetailedContent:y}:{}})}}else if(tS(m)){let h=rS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(nS(m)){let h=sS(m);if(h&&(o=h),Array.isArray(p.content))for(let g of p.content)g.type==="text"&&g.text?u.push({role:"assistant",timestamp:_,content:g.text,model:h}):g.type==="thinking"&&g.thinking?u.push({role:"thinking",timestamp:_,content:g.thinking}):g.functionCall&&u.push(oS(g.functionCall,_,h));else if(typeof p.content=="string")u.push({role:"assistant",timestamp:_,content:p.content,model:h});else if(Array.isArray(p.parts))for(let g of p.parts)if(g.thought||g.type==="thinking"){let E=g.thinking||g.text;E&&u.push({role:"thinking",timestamp:_,content:E})}else g.functionCall?u.push(oS(g.functionCall,_,h)):g.text&&u.push({role:"assistant",timestamp:_,content:g.text,model:h})}}return{provider:"qwen",sessionId:n,slug:l,cwd:s,createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:o,cliVersion:i,gitBranch:a,startCommand:"qwen",firstUserMessage:c,lastUserMessage:d,messageCount:u.filter(m=>m.role==="user"||m.role==="assistant").length,filePath:e,...uU(f),messages:u}}async resolveSessionPath(e){let n=hr(this.baseDir,"projects");try{let r=await fc(n),s=[];for(let o of r){let i=hr(n,o,"chats",`${e}.jsonl`);try{return await aU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=hr(n,o,"chats"),a;try{a=await fc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;eS(l,".jsonl").startsWith(e)&&s.push(hr(i,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 lU(n),!0}catch{return!1}}}});function Pm(t){return new $m(t)}var $m,Um=x(()=>{"use strict";aS();Ye();$n();Fe();$m=class extends ce{constructor(e){super({provider:new mc(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",Z,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:ec})}openSession(e){return tc({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as lS,readFile as cS,rm as dS,stat as uS}from"node:fs/promises";import{basename as Fm,join as dn}from"node:path";import{fileURLToPath as pU}from"node:url";async function hU(t){let e=await Promise.all(t.map(n=>Ae(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 _U(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function fS(t){return t.type==="USER_INPUT"}function mS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function gU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function pS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function hS(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 yU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function EU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=TU(s);if(o)return o}let r=wU(e.content);if(r)return r}return null}function TU(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 wU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function vU(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 SU(t,e){let n=new Set;for(let r of e){let s=bU(t,n,r);if(!s)continue;n.add(s);let o=r.event.step_index===void 0?void 0:`agy-step-${r.event.step_index}`;s.message.toolCallId=o,s.message.backgroundTaskId=r.message.backgroundTaskId,r.message.toolName=s.name,r.message.toolCallId=o}}function bU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:NU(n.event.content);if(r!==void 0)return _S(t.filter(o=>!e.has(o)&&RU(o)===r),n.event.step_index);let s=AU(n.event);if(s!==void 0)return _S(t.filter(o=>!e.has(o)&&IU(o.name,n.event.type)&&yS(kU(o))===s),n.event.step_index)}function _S(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 IU(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 kU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function AU(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]),yS(e)}function yS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return pU(e)}catch{return}}function NU(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function RU(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 gS(t){if(t.endsWith(".db"))return Fm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var pc,ES=x(()=>{"use strict";Re();pc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||dn(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:dn(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=dn(this.baseDir,"conversations"),n;try{n=await lS(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Fm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return dn(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return dn(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 uS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await hU([n,r].filter(Boolean)),i=await this.resolveCwd(e,r),a,l,c,d=0;if(r)for await(let u of Ee(r)){let f=hS(u.content);if(f&&(a=f),fS(u)){let m=pS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else mS(u)&&u.content&&d++}return{provider:"agy",sessionId:e,cwd:i,createdAt:o.createdAt,modifiedAt:o.modifiedAt,model:a,startCommand:"agy",firstUserMessage:l,lastUserMessage:c,messageCount:d,filePath:s,filePaths:r?[n,r]:[n]}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=gS(n);if(!r)return null;let s=await this.extractSummary(r);if(!s)return null;let o=await this.existingTranscriptPath(r),i=[],a=s.model,l=s.firstUserMessage,c=s.lastUserMessage,d=[],u=[];if(o)for await(let f of Ee(o)){let m=_U(f.created_at,s.modifiedAt),p=hS(f.content);if(p&&(a=p),fS(f)){let _=pS(f.content),h=_.trim();h&&(l||(l=G(h,80)),c=G(h,80)),i.push({role:"user",timestamp:m,content:_});continue}if(Array.isArray(f.tool_calls))for(let _ of f.tool_calls){let h=_.name||"tool",g=yU(_.args),E=Rt(_.args),y={role:"tool_use",timestamp:m,content:g,toolName:h,toolInput:g,toolInputData:E};i.push(y),d.push({name:h,stepIndex:f.step_index,input:E,message:y})}if(mS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(gU(f)&&f.content){let _=vU(f,r),h=_===void 0?null:await this.readTaskLog(r,_),g={role:"tool_result",timestamp:h?.modifiedAt??m,content:f.content,toolName:f.type?.toLowerCase(),backgroundTaskId:_,...h===null?{}:{toolDetailedContent:h.content}};i.push(g),u.push({event:f,message:g})}f.thinking&&i.push({role:"thinking",timestamp:m,content:f.thinking})}return SU(d,u),{...s,model:a,firstUserMessage:l,lastUserMessage:c,messageCount:i.filter(f=>f.role==="user"||f.role==="assistant").length,messages:i}}async resolveSessionPath(e){let n=this.conversationPath(e);try{return await uS(n),n}catch{}let r=dn(this.baseDir,"conversations");try{let s=[];for(let o of await lS(r)){if(!o.endsWith(".db"))continue;Fm(o,".db").startsWith(e)&&s.push(dn(r,o))}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=gS(n);return r?(await dS(this.conversationPath(r),{force:!0}),await dS(dn(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 EU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=dn(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await cS(n,"utf8"));for(let[s,o]of Object.entries(r))if(o===e)return s}catch{}return null}async readTaskLog(e,n){if(!/^task-\d+$/.test(n))return null;let r=dn(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([cS(r,"utf8"),Ae(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as LU}from"node:child_process";import{StringDecoder as TS}from"node:string_decoder";function hc(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:o}=await xU(t.label,n.binary,s,{cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:o.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function xU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=LU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new TS("utf8"),d=new TS("utf8");i.stdout?.on("data",f=>{a+=c.write(f)}),i.stderr?.on("data",f=>{l+=d.write(f)});let u=()=>{i.kill("SIGTERM"),o(new Error(`${t} turn aborted`))};i.on("error",f=>{r.signal?.removeEventListener("abort",u),o(f)}),i.on("close",(f,m)=>{if(r.signal?.removeEventListener("abort",u),a+=c.end(),l+=d.end(),f===0){s({stdout:a,stderr:l});return}let p=m?`signal ${m}`:`exit code ${f}`,_=l.trim()||a.trim();o(new Error(Ps(`${t} failed (${p})`,_?we(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var jm=x(()=>{"use strict";Ht();St()});import{basename as CU}from"node:path";import{randomUUID as OU}from"node:crypto";function Hm(t){return new Wm(t)}function MU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Wm,DU,Bm=x(()=>{"use strict";ES();Ye();Fe();ln();jm();Wm=class extends ce{constructor(e){super({provider:new pc(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",Z,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:DU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||CU(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=OU(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Ol({flightToken:r,prompt:n?.prompt})});if(!o.success&&(o.errorCode==="ENOENT"||o.errorCode==="ABORT_ERR"))return o;let i=(await this.provider.discoverSessions()).filter(a=>a.firstUserMessage?.startsWith(s));if(o.success&&i.length===1)return{...o,sessionId:i[0].sessionId};for(let a of i)await this.provider.deleteSession(a.sessionId);return{...o,success:!1,error:o.error??`agy seed created ${i.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}`}}},DU=hc({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",MU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>De("agy",t,e.permissionMode??"yolo")})});import{existsSync as Ui,readdirSync as $U,statSync as wS}from"node:fs";import{readdir as Xm,rm as PU}from"node:fs/promises";import vS,{join as un}from"node:path";function UU(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 o=t.charCodeAt(s),i=String.fromCharCode(o);i==="/"||i==="\\"||i===":"?(n||(e+="-"),n=!0):i!=="~"&&/^[A-Za-z0-9._-]$/.test(i)?(e+=i,n=!1):(e+="~"+o.toString(16).toUpperCase().padStart(4,"0"),n=!1)}return`--${(e.replace(/^-+/,"")||"root").slice(0,251)}--`}function FU(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function no(t,e){let n=e??(process.platform==="win32"?vS.win32:vS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!Ui(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=$U(r),i=[];for(let a of o){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 d=n.join(r,a);wS(d).isFile()&&i.push({name:a,version:c})}catch{}}}if(i.length>0)return i.sort((a,l)=>l.version-a.version),n.join(r,i[0].name)}catch{}try{if(Ui(t)&&wS(t).isFile())return t}catch{}return n.join(r,s)}function qm(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 jU(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 SS(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 o=r;if(o.source?.kind!==void 0&&o.source.kind!=="user")continue;e.push({role:"user",timestamp:s,content:qm(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of jU(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:qm(o?.content),model:o?.source?.model})}else if(n.type==="tool/call"){let o=r,i;if(typeof o.arguments=="string")try{i=JSON.parse(o.arguments)}catch{}else o.arguments&&typeof o.arguments=="object"&&(i=o.arguments);e.push({role:"tool_use",timestamp:s,content:typeof o.arguments=="string"?o.arguments:JSON.stringify(o.arguments??{}),toolName:o.name,toolCallId:o.callId,toolInputData:i})}else if(n.type==="tool/result"){let o=r,a=(Array.isArray(o.message?.content)?o.message.content:[])[0];e.push({role:"tool_result",timestamp:s,content:qm(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function WU(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 bS(t,e,n){let r=t.find(m=>m.type==="session");if(!r)return null;let s=r,o=r.data,i=s.id??o?.id;if(!i)return null;let a;for(let m of t)if(m.type==="request/header"){let p=m.data?.header;p?.config?.model&&(a=p.config.model)}let l=t.map(m=>m.time).filter(m=>typeof m=="number"),c=s.createdAt??o?.createdAt,d=c?new Date(c):new Date(0),u=l.length>0?new Date(Math.max(...l)):d,f=n.filter(m=>m.role==="user");return{provider:"dsh",sessionId:i,cwd:s.cwd??o?.cwd??"",createdAt:d,modifiedAt:u,model:a,firstUserMessage:f[0]?.content,lastUserMessage:f.at(-1)?.content,messageCount:n.filter(m=>m.role==="user"||m.role==="assistant").length,filePath:e,...HU(t)}}function HU(t){let e=new Map;for(let i of t){let a=i.data?.turn??null,l=e.get(a)??[];l.push(i),e.set(a,l)}let n=[],r=[];for(let i of e.values()){let a=new Ks("",-1,new Set);a.update(i);let l=a.usage();l&&(n.push(l),r.push(a.lastUsage()))}if(!n.length)return{};let s=i=>{if(n.some(l=>l.invalidCounters||l[i]===null))return;let a=n.reduce((l,c)=>l+c[i],0);return Number.isSafeInteger(a)?a:void 0},o=r.at(-1);return{totalInputTokens:s("inputUncached"),totalCachedInputTokens:s("cacheRead"),totalOutputTokens:s("output"),totalReasoningOutputTokens:s("reasoning"),lastInputTokens:o.inputUncached!==null&&o.cacheRead!==null?o.inputUncached+o.cacheRead:void 0,lastTokenUsage:{totalTokens:o.inputUncached!==null&&o.cacheRead!==null&&o.output!==null?o.inputUncached+o.cacheRead+o.output:void 0,inputTokens:o.inputUncached??void 0,cachedInputTokens:o.cacheRead??void 0,outputTokens:o.output??void 0,reasoningOutputTokens:o.reasoning??void 0}}}var _c,IS=x(()=>{"use strict";$l();Re();Na();_c=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||un(Q,".dsh");this.sessionsDir=un(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Xm(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Xm(un(this.sessionsDir,r))}catch{continue}for(let o of s)if(o.startsWith("session-"))try{let i=await this.readSummary(r,o);i&&e.push(i)}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=SS(r),o=bS(r,n.filePath,s);return o?{...o,turnStatus:WU(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 PU(un(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=UU(e),s=FU(e),o=r,i=un(this.sessionsDir,r,n),a=un(this.sessionsDir,s,n);!Ui(i)&&Ui(a)&&(o=s);let l=un(this.sessionsDir,o,n);return no(l)}async findSessionDir(e){let n;try{n=await Xm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=un(this.sessionsDir,r,s);try{let i=no(o);if(Ui(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=un(this.sessionsDir,e,n),o=no(s),i=await r(o),a=Aa(i),l=[];for(let c of a.split(`
1837
+ `))if(c.trim())try{let d=JSON.parse(c);if(d.type?.endsWith("-chunks")||d.type==="assistant/chunk"&&d.data?.chunk?.type!=="usage")continue;l.push(d)}catch{}return l}async readSummary(e,n){let r=un(this.sessionsDir,e,n),s=no(r),o=await this.readRecords(e,n);return o.length===0?null:bS(o,s,SS(o))}}});import{spawn as BU}from"node:child_process";import{randomUUID as XU}from"node:crypto";function Gm(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=>Gm(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]=Gm(s,e);return n}return t}function GU(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 AS(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 gc(t,e=n=>Vm.spawn(n)){if(_r){let n=await _r.catch(()=>{});if(n?.alive)return n;_r=void 0}return _r=e(t),_r}async function Fi(){if(!_r)return;(await _r.catch(()=>{}))?.shutdown(),_r=void 0}var qU,kS,Pn,Vm,_r,NS=x(()=>{"use strict";St();qU=/dsh web:\s*(https?:\/\/\S+)/,kS=2e4;Pn=class t extends Error{method;detail;constructor(e,n,r=[]){let s=Gm(n,r),o=typeof s=="string"?s:JSON.stringify(s);super(`dsh RPC ${e} failed: ${o}`),this.name="DshRpcCallError",this.method=e,this.detail=s,Object.setPrototypeOf(this,t.prototype)}};Vm=class t{baseUrl;child;cookie;isV2;tokenUrl;static MAX_RETAINED_SECRETS=8;cookieExchangePromise;knownSecrets=[];constructor(e,n,r,s=!1,o){if(this.baseUrl=e,this.child=n,this.cookie=r,this.isV2=s,this.tokenUrl=o,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{}}}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,o=n?.cookie;try{let i=new URL(e);i.searchParams.has("token")&&(s=!0,r=i.origin)}catch{}return new t(r,void 0,o,s,e)}static async fromBootUrl(e,n,r){let s=GU(e),o=s.searchParams.has("token"),i;if(o)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){i=c.split(";")[0];break}}catch(l){if(r?.aborted)throw l;await new Promise(c=>setTimeout(c,100))}}return new t(s.origin,n,i,o,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),o=(await fetch(this.tokenUrl,{redirect:"manual",signal:r})).headers.get("set-cookie");if(o)return this.cookie=o.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]:[],o=`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=this.isV2?e.includes("/")?e:e.replace(/\./g,"/"):e.includes(".")?e:e.replace(/\//g,"."),a=n;if(this.isV2){let f=n;if(i==="session/prompt"&&f&&typeof f=="object"){let m=f;m.requestId||(f={...m,requestId:XU()})}f&&typeof f=="object"&&"args"in f?a=f:a={args:{request:f}}}let l={"content-type":"application/json"};this.cookie&&(l.cookie=this.cookie);let c;try{c=await fetch(`${this.baseUrl}/api/${i}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:o,method:i,payload:a}),redirect:"manual"})}catch(f){throw new Pn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Pn(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s));if((c.status===401||c.status===403)&&this.isV2&&this.tokenUrl){let f=await this.ensureCookie(!0);if(f&&f!==l.cookie){l.cookie=f,s.push(f);try{c=await fetch(`${this.baseUrl}/api/${i}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:o,method:i,payload:a}),redirect:"manual"})}catch(m){throw new Pn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Pn(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s))}}let d;try{d=await c.json()}catch{d=void 0}if(!c.ok)throw new Pn(e,d??c.statusText,this.getSecretsToRedact(s));let u=d&&typeof d=="object"?d.result:void 0;if(!u||typeof u!="object"||typeof u.ok!="boolean")throw new Pn(e,"malformed response: HTTP 200 but body is not a well-formed {result:{ok,\u2026}} envelope",this.getSecretsToRedact(s));if(u.ok===!1)throw new Pn(e,u.error??u,this.getSecretsToRedact(s));return"value"in u?u.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&&AS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=BU("dsh",["web","--no-open","--port","0"],{env:e,stdio:["ignore","pipe","pipe"]}),o=!1,i=!1,a="",l="",c="",d=new AbortController,u=m=>{o||(o=!0,clearTimeout(f),d.abort(),AS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1838
1838
  ${l}`:"",c?`stderr:
1839
1839
  ${c}`:""].filter(Boolean).join(`
1840
1840
  `);u(new Error(`dsh web sidecar did not report a boot URL within ${kS}ms `+(m?`
1841
1841
  ${we(m,{provider:"dsh"})}`:"(no output captured)")))},kS);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let _=a.split(`
1842
1842
  `);a=_.pop()??"";for(let h of _){let g=qU.exec(h);if(g){i=!0,t.fromBootUrl(g[1],s,d.signal).then(E=>{o||(o=!0,clearTimeout(f),n(E))},E=>{u(E instanceof Error?E:new Error(String(E)))});return}}}),s.stderr?.on("data",m=>{c+=m.toString()}),s.on("error",m=>{u(m)}),s.on("exit",(m,p)=>{let _=p?`signal ${p}`:`exit code ${m}`;u(new Error(Ps(`dsh web exited before reporting a boot URL (${_})`,c.trim()?we(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as RS}from"node:crypto";import{existsSync as LS,statSync as VU}from"node:fs";import{readFile as JU,mkdir as KU}from"node:fs/promises";function Qm(t){return new zm(t)}function Ym(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function zU(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 yc(t){return t instanceof Error?t.message:String(t)}async function xS(t,e){let n;try{n=await JU(t)}catch{return e?.(),[]}e&&Do(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Aa(n),s=[];for(let o of r.split(`
1843
- `))if(o.trim())try{let i=JSON.parse(o);i!==null&&typeof i=="object"&&!Array.isArray(i)&&s.push(i)}catch{e?.()}return s}function QU(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 Ec(t,e){return no(t,e)}var Jm,YU,Km,zm,Zm=x(()=>{"use strict";$l();Gs();Ye();bS();Na();NS();Fe();ln();Jm=new Map,YU=500,Km=8*60*60*1e3;zm=class extends ce{dshProvider;usageSeen=new Set;constructor(e){let n=new _c(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 KU(e,{recursive:!0});let r=`session-${RS()}`,s=Ym(n?.env??process.env);De("dsh",[],"yolo");try{let o;try{o=await gc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${yc(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${yc(a)}`}}if(n?.model)try{await o.rpc("session.selectModel",{sessionId:r,provider:"deepseek-official",model:n.model})}catch(a){return{success:!1,error:`session.selectModel("${n.model}") failed: ${yc(a)}`}}let i=n?.prompt??Z;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,Km,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${yc(a)}`}}}finally{await Fi()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Dn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Ym(n.env??process.env);De("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${RS()}`:n.sessionId,a;try{let l=await gc(s);o&&await l.rpc("session.create",{sessionId:i,cwd:n.cwd}),n.model&&(await l.rpc("session.selectModel",{sessionId:i,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,i,e,n.timeoutMs??Km,n.signal)}finally{await Fi()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:i,durationMs:Date.now()-r}}async openSession(e){let n=Ym(e.env??process.env);De("dsh",[],e.permissionMode??"yolo");let r=await gc(n),s=Ec(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=LS(s)&&VU(s).isFile()}catch{o=!1}if(!o)throw await Fi(),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 i=e.sessionId,a=this,l=0,c=!1,d=null,u=!1,f=!1,m=async()=>{f||(f=!0,await Fi())};return{provider:"dsh",sessionId:i,get completedTurns(){return l},async sendTurn(p,_={}){if(c||d!==null)throw new Error("dsh bundle session is closed");if(u)throw new Error("dsh bundle session has a turn still in flight");if(_.signal?.aborted)throw new Error("Aborted");if(s=Ec(s),!LS(s))throw new Error(`dsh bundle: session file for session "${i}" disappeared mid-bundle \u2014 identity re-check failed (external re-seed?)`);u=!0;let h=Date.now();try{let g,E=a.promptAndWait(r,e.cwd,i,p,Km,_.signal,S=>{g=S});E.catch(()=>{});let y=()=>{},T=new Promise((S,I)=>{y=()=>{(async()=>{c=!0,await m()})().finally(()=>I(Object.assign(new Error("Aborted"),{usage:g,sessionId:i})))},_.signal?.addEventListener("abort",y,{once:!0})}),w;try{w=await Promise.race([E,T])}finally{_.signal?.removeEventListener("abort",y)}return l+=1,{...w,sessionId:i,durationMs:Date.now()-h}}finally{u=!1}},close(){return d!==null||(d=(async()=>{c=!0,await m()})()),d}}}async promptAndWait(e,n,r,s,o,i,a){let l=Date.now(),c=Ec(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await xS(c,()=>{d=!0}),f=u.reduce((E,y)=>typeof y.seq=="number"&&Number.isSafeInteger(y.seq)?Math.max(E,y.seq):E,-1),m=new Ks(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),_=Jm.get(p)??new Set;if(_.size){m.invalidateOwnership();for(let E of _)E.invalidateOwnership()}_.add(m),Jm.set(p,_),u.filter(E=>E.type==="turn/start"||E.type==="turn/end").at(-1)?.type==="turn/start"&&m.invalidateOwnership();let g;try{await e.rpc("session.prompt",{sessionId:r,mode:"queue",content:[{type:"text",text:s}]});let E=o>0?Date.now()+o:1/0;for(;;){c=Ec(c);let y=await xS(c),T=y.find(w=>w.type==="turn/end"&&(w.seq??-1)>f);if(y.length&&m.update(y,T?.seq??1/0),a?.(m.usage()),i?.aborted)throw new Error("Aborted");if(T){let w=T.data?.reason;w?.kind!=="completed"&&(g=w?.kind==="aborted"?"cancelled":"error");let S=[...y].reverse().find(L=>L.type==="assistant/message"&&(L.seq??-1)>f&&(L.seq??1/0)<=(T.seq??1/0)),I=S?QU(S):"";if(w?.kind!=="completed"&&!I)throw new Error(zU(w));m.finish();let b=m.usage();return{text:I,sessionId:r,durationMs:Date.now()-l,usage:b?{...b,...w?.kind==="completed"?{}:{outcome:w?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>E)throw new Error(`dsh turn timed out after ${o}ms waiting for turn/end`);await new Promise(w=>setTimeout(w,YU))}}catch(E){if(m.finish(),E instanceof Error){let y=m.usage();Object.assign(E,{usage:y?{...y,outcome:g}:void 0,sessionId:r})}throw E}finally{_.delete(m),_.size||Jm.delete(p)}}}});import{existsSync as ZU}from"node:fs";import{join as $S,resolve as eF}from"node:path";import{createRequire as tF}from"node:module";function nF(){return ep===null&&(ep=tF(import.meta.url)("node:sqlite").DatabaseSync),ep}function tp(t={}){return eF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||$S(Q,".hermes"))}function rF(t={}){return $S(tp(t),"state.db")}function ji(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function mt(t){return typeof t=="string"&&t.length>0?t:void 0}function sF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function DS(t){return mt(t.cwd)??mt(sF(t.model_config).cwd)??"(unknown)"}function oF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function iF(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 MS(t){let e=t.input_tokens??0,n=t.output_tokens??0,r=t.cache_read_tokens??0,s=t.cache_write_tokens??0,o=t.reasoning_tokens??0;return(t.message_count??0)>0&&e+n+r+s+o>0?{totalInputTokens:e,totalCachedInputTokens:r,totalCacheWriteInputTokens:s,totalOutputTokens:n,totalReasoningOutputTokens:o}:{}}var ep,CS,OS,Tc,PS=x(()=>{"use strict";Re();re();ep=null;CS="acp";OS=`id, source, model, model_config, started_at,
1843
+ `))if(o.trim())try{let i=JSON.parse(o);i!==null&&typeof i=="object"&&!Array.isArray(i)&&s.push(i)}catch{e?.()}return s}function QU(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 Ec(t,e){return no(t,e)}var Jm,YU,Km,zm,Zm=x(()=>{"use strict";$l();Gs();Ye();IS();Na();NS();Fe();ln();Jm=new Map,YU=500,Km=8*60*60*1e3;zm=class extends ce{dshProvider;usageSeen=new Set;constructor(e){let n=new _c(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 KU(e,{recursive:!0});let r=`session-${RS()}`,s=Ym(n?.env??process.env);De("dsh",[],"yolo");try{let o;try{o=await gc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${yc(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${yc(a)}`}}if(n?.model)try{await o.rpc("session.selectModel",{sessionId:r,provider:"deepseek-official",model:n.model})}catch(a){return{success:!1,error:`session.selectModel("${n.model}") failed: ${yc(a)}`}}let i=n?.prompt??Z;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,Km,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${yc(a)}`}}}finally{await Fi()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Dn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Ym(n.env??process.env);De("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${RS()}`:n.sessionId,a;try{let l=await gc(s);o&&await l.rpc("session.create",{sessionId:i,cwd:n.cwd}),n.model&&(await l.rpc("session.selectModel",{sessionId:i,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,i,e,n.timeoutMs??Km,n.signal)}finally{await Fi()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:i,durationMs:Date.now()-r}}async openSession(e){let n=Ym(e.env??process.env);De("dsh",[],e.permissionMode??"yolo");let r=await gc(n),s=Ec(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=LS(s)&&VU(s).isFile()}catch{o=!1}if(!o)throw await Fi(),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 i=e.sessionId,a=this,l=0,c=!1,d=null,u=!1,f=!1,m=async()=>{f||(f=!0,await Fi())};return{provider:"dsh",sessionId:i,get completedTurns(){return l},async sendTurn(p,_={}){if(c||d!==null)throw new Error("dsh bundle session is closed");if(u)throw new Error("dsh bundle session has a turn still in flight");if(_.signal?.aborted)throw new Error("Aborted");if(s=Ec(s),!LS(s))throw new Error(`dsh bundle: session file for session "${i}" disappeared mid-bundle \u2014 identity re-check failed (external re-seed?)`);u=!0;let h=Date.now();try{let g,E=a.promptAndWait(r,e.cwd,i,p,Km,_.signal,S=>{g=S});E.catch(()=>{});let y=()=>{},T=new Promise((S,b)=>{y=()=>{(async()=>{c=!0,await m()})().finally(()=>b(Object.assign(new Error("Aborted"),{usage:g,sessionId:i})))},_.signal?.addEventListener("abort",y,{once:!0})}),w;try{w=await Promise.race([E,T])}finally{_.signal?.removeEventListener("abort",y)}return l+=1,{...w,sessionId:i,durationMs:Date.now()-h}}finally{u=!1}},close(){return d!==null||(d=(async()=>{c=!0,await m()})()),d}}}async promptAndWait(e,n,r,s,o,i,a){let l=Date.now(),c=Ec(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await xS(c,()=>{d=!0}),f=u.reduce((E,y)=>typeof y.seq=="number"&&Number.isSafeInteger(y.seq)?Math.max(E,y.seq):E,-1),m=new Ks(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),_=Jm.get(p)??new Set;if(_.size){m.invalidateOwnership();for(let E of _)E.invalidateOwnership()}_.add(m),Jm.set(p,_),u.filter(E=>E.type==="turn/start"||E.type==="turn/end").at(-1)?.type==="turn/start"&&m.invalidateOwnership();let g;try{await e.rpc("session.prompt",{sessionId:r,mode:"queue",content:[{type:"text",text:s}]});let E=o>0?Date.now()+o:1/0;for(;;){c=Ec(c);let y=await xS(c),T=y.find(w=>w.type==="turn/end"&&(w.seq??-1)>f);if(y.length&&m.update(y,T?.seq??1/0),a?.(m.usage()),i?.aborted)throw new Error("Aborted");if(T){let w=T.data?.reason;w?.kind!=="completed"&&(g=w?.kind==="aborted"?"cancelled":"error");let S=[...y].reverse().find(L=>L.type==="assistant/message"&&(L.seq??-1)>f&&(L.seq??1/0)<=(T.seq??1/0)),b=S?QU(S):"";if(w?.kind!=="completed"&&!b)throw new Error(zU(w));m.finish();let I=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:I?{...I,...w?.kind==="completed"?{}:{outcome:w?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>E)throw new Error(`dsh turn timed out after ${o}ms waiting for turn/end`);await new Promise(w=>setTimeout(w,YU))}}catch(E){if(m.finish(),E instanceof Error){let y=m.usage();Object.assign(E,{usage:y?{...y,outcome:g}:void 0,sessionId:r})}throw E}finally{_.delete(m),_.size||Jm.delete(p)}}}});import{existsSync as ZU}from"node:fs";import{join as $S,resolve as eF}from"node:path";import{createRequire as tF}from"node:module";function nF(){return ep===null&&(ep=tF(import.meta.url)("node:sqlite").DatabaseSync),ep}function tp(t={}){return eF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||$S(Q,".hermes"))}function rF(t={}){return $S(tp(t),"state.db")}function ji(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function mt(t){return typeof t=="string"&&t.length>0?t:void 0}function sF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function DS(t){return mt(t.cwd)??mt(sF(t.model_config).cwd)??"(unknown)"}function oF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function iF(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 MS(t){let e=t.input_tokens??0,n=t.output_tokens??0,r=t.cache_read_tokens??0,s=t.cache_write_tokens??0,o=t.reasoning_tokens??0;return(t.message_count??0)>0&&e+n+r+s+o>0?{totalInputTokens:e,totalCachedInputTokens:r,totalCacheWriteInputTokens:s,totalOutputTokens:n,totalReasoningOutputTokens:o}:{}}var ep,CS,OS,Tc,PS=x(()=>{"use strict";Re();re();ep=null;CS="acp";OS=`id, source, model, model_config, started_at,
1844
1844
  last_activity_at, message_count, input_tokens, output_tokens,
1845
1845
  cache_read_tokens, cache_write_tokens, reasoning_tokens, cwd, title`;Tc=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=rF(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!ZU(this.dbPath))return null;let e=null;try{return e=new(nF())(this.dbPath,{open:!0,readOnly:!0}),e.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),e}catch(n){return e?.close(),U({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 ${OS} FROM sessions WHERE id = ? AND source = ?`).get(n,CS)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${OS} FROM sessions
1846
1846
  WHERE source = ?
@@ -1848,33 +1848,35 @@ ${we(m,{provider:"dsh"})}`:"(no output captured)")))},kS);s.stdout?.on("data",m=
1848
1848
  LIMIT ?`).all(CS,this.discoverLimit),r=[];for(let s of n){let o=this.previewTexts(e,s.id);r.push({provider:this.name,sessionId:s.id,slug:mt(s.title),cwd:DS(s),createdAt:ji(s.started_at),modifiedAt:ji(s.last_activity_at??s.started_at),model:mt(s.model),startCommand:this.name,firstUserMessage:o.first,lastUserMessage:o.last,messageCount:s.message_count??0,filePath:this.dbPath,...MS(s)})}return r}catch(n){return U({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)),o=`id, session_id, role, content, tool_call_id, tool_calls, tool_name,
1849
1849
  timestamp, finish_reason${["_compressed_summary","display_kind"].filter(a=>r.has(a)).map(a=>`, ${a}`).join("")}`,i="WHERE session_id = ? AND role IN ('user', 'assistant', 'tool')";try{return e.prepare(`SELECT ${o} FROM messages ${i} 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 ${o} FROM messages ${i} ORDER BY id ASC`).all(n)}}previewTexts(e,n){try{let[r,s]=["ASC","DESC"].map(o=>{let i=`SELECT content FROM messages WHERE session_id = ?
1850
1850
  AND role = 'user' AND content != ''`,a;try{a=e.prepare(`${i} AND active = 1 ORDER BY id ${o} LIMIT 1`).get(n)}catch(l){if(!/no such column: active/i.test(String(l)))throw l;a=e.prepare(`${i} ORDER BY id ${o} LIMIT 1`).get(n)}return a?G(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),o=[],i=[],a,l;for(let c of s){let d=ji(c.timestamp),u=c.content??"";if(c.role==="user"){u&&c._compressed_summary!==1&&c.display_kind!=="hidden"&&i.push(u),u.length>0&&(a||(a=G(u,80)),l=G(u,80)),o.push({role:"user",timestamp:d,content:u||"(empty)"});continue}if(c.role==="tool"){o.push({role:"tool_result",timestamp:d,content:u,toolCallId:mt(c.tool_call_id),toolName:mt(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:mt(r.model),stopReason:mt(c.finish_reason)});for(let f of oF(c.tool_calls)){let m=iF(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:mt(f.function?.name)??"tool_call",toolName:mt(f.function?.name),toolCallId:mt(f.call_id)??mt(f.id),toolInput:typeof f.function?.arguments=="string"?f.function.arguments:JSON.stringify(f.function?.arguments??{}),toolInputData:Rt(m)})}}return{provider:this.name,sessionId:r.id,slug:mt(r.title),cwd:DS(r),createdAt:ji(r.started_at),modifiedAt:ji(r.last_activity_at??r.started_at),model:mt(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...MS(r),messages:o,userPrompts:i}}catch(r){return U({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 aF}from"node:fs/promises";function cF(t){return lF.test(t)}function US(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 dF}function rp(t){return new np(t)}var lF,dF,np,sp=x(()=>{"use strict";Ye();PS();$n();Fe();re();lF=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;dF="dont_ask";np=class extends ce{hermesProvider;hermesHome;constructor(e){let n=new Tc(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)=>Bt(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:US(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=tp(e)}async openSession(e){return cn({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:US(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await aF(e,{recursive:!0});let r=[];if(n?.effort){let o="hermes has no ACP-level effort surface";U({event:"hermes_effort_ignored",provider:this.name,effort:n.effort,reason:o}),r.push(`hermes seed ignored effort=${n.effort}: ${o}`)}let s;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}s=await this.sendTurn(n?.prompt??Z,{sessionId:"",cwd:e,env:n?.env,signal:n?.signal,model:n?.model})}catch(o){return{success:!1,error:`hermes ACP seed failed: ${o instanceof Error?o.message:String(o)}`}}return cF(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(U({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 FS,rm as uF,stat as fF}from"node:fs/promises";import{join as op}from"node:path";function ip(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 jS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var wc,WS=x(()=>{"use strict";Re();wc=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||op(Q,".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 FS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=op(this.baseDir,r);try{if(!(await fF(s)).isDirectory())continue;for(let o of await FS(s))o.endsWith(".jsonl")&&n.push(op(s,o))}catch{}}return n}async readHeader(e){for await(let n of Ee(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 Ae(e),s,o,i,a=0,l=0,c=0,d=0,u=0,f=0,m=0,p;for await(let _ of Ee(e)){if(_.type==="model_change"&&_.provider&&_.modelId){s=`${_.provider}/${_.modelId}`;continue}if(_.type!=="message"||!_.message)continue;let h=_.message;if(h.provider&&h.model&&(s=`${h.provider}/${h.model}`),h.role==="user"){let g=ip(h).trim();g&&(o||(o=G(g,80)),i=G(g,80)),a++}else if(h.role==="assistant"){a++;let g=h.usage;g&&(l+=g.input??0,c+=g.cacheRead??0,d+=g.cacheWrite??0,u+=g.output??0,f+=g.reasoning??0,m=g.input??0,p={inputTokens:g.input,cachedInputTokens:g.cacheRead,cacheWriteInputTokens:g.cacheWrite,outputTokens:g.output,reasoningOutputTokens:g.reasoning,totalTokens:g.totalTokens})}}return{provider:"pi",sessionId:n.id,cwd:n.cwd??"(unknown)",createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:s,startCommand:"pi",firstUserMessage:o,lastUserMessage:i,messageCount:a,filePath:e,totalInputTokens:l,totalCachedInputTokens:c,totalCacheWriteInputTokens:d,totalOutputTokens:u,totalReasoningOutputTokens:f,lastInputTokens:m,lastTokenUsage:p}}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=[],o=r.model;for await(let i of Ee(n)){if(i.type==="model_change"&&i.provider&&i.modelId){o=`${i.provider}/${i.modelId}`;continue}if(i.type!=="message"||!i.message)continue;let a=i.message;a.provider&&a.model&&(o=`${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:ip(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:o}):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:jS(c.arguments),toolName:c.name??"tool",toolInput:jS(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:ip(a),toolName:a.toolName,toolCallId:a.toolCallId})}return{...r,model:o,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 uF(n,{force:!0}),!0):!1}}});function lp(t){return new ap(t)}var ap,mF,cp=x(()=>{"use strict";WS();Ye();Fe();ln();jm();ap=class extends ce{constructor(e){super({provider:new wc(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",Z],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:mF})}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}`}}},mF=hc({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)=>De("pi",t,e.permissionMode??"yolo")})});import{createHash as pF}from"node:crypto";import{existsSync as hF,mkdirSync as up,readFileSync as _F,renameSync as gF,rmdirSync as KS,statSync as yF,writeFileSync as EF}from"node:fs";import{dirname as hp,join as HS,resolve as dp}from"node:path";function TF(t){return pF("sha256").update(t).digest("hex").slice(0,8)}function wF(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function vF(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 YS(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function vc(t){return Math.max(1,Math.ceil(t.length/4))}function so(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return dp(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?HS(hp(dp(n)),".lmctl-claude-mock","sessions.json"):HS(dp(t),".lmctl-claude-mock","sessions.json")}function BS(){return{schemaVersion:1,sessions:{}}}function Wi(t){if(!hF(t))return BS();try{let e=JSON.parse(_F(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,o=fp(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...o!==void 0?{defaultDelayMs:o}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return BS()}}function zS(t,e){up(hp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;EF(n,`${JSON.stringify(e,null,2)}
1851
- `,"utf8"),gF(n,t)}function bF(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function kF(t){let e=`${t}.lock`;up(hp(t),{recursive:!0});let n=Date.now()+XS;for(;;)try{return up(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-yF(e).mtimeMs>SF){try{KS(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${XS}ms: ${e}`);bF(IF)}}function AF(t){try{KS(t)}catch{}}function QS(t,e){let n=kF(t);try{return e()}finally{AF(n)}}function NF(t){return{...t,timestamp:t.timestamp.toISOString()}}function RF(t){return{...t,timestamp:new Date(t.timestamp)}}function LF(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(NF)}}function ZS(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(RF)}}function Sc(t,e=process.cwd()){let n=ro.get(t);if(n!==void 0)return n;let s=Wi(so(e)).sessions[t];if(s===void 0)return;let o=ZS(s);return ro.set(o.sessionId,o),o}function qS(t){ro.set(t.sessionId,t);let e=so(t.cwd);QS(e,()=>{let n=Wi(e);n.sessions[t.sessionId]=LF({...t,filePath:e}),zS(e,n)})}function xF(t,e=process.cwd()){let n=so(e);return QS(n,()=>{let r=Wi(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],zS(n,r)),s})}function CF(){let t=Wi(so()),e=Object.values(t.sessions).map(ZS);for(let n of e)ro.set(n.sessionId,n);return e}function fp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function GS(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=fp(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=fp(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function VS(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function OF(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=GS(n[t]??n[YS(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=GS(r[s]);if(o!==void 0)return o}}}function JS(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 _p(){return new pp}var ro,SF,IF,XS,mp,pp,gp=x(()=>{"use strict";ro=new Map;SF=5e3,IF=15,XS=1e4;mp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of CF())e.set(n.sessionId,n);for(let n of ro.values())e.set(n.sessionId,n);return[...e.values()].map(JS)}async loadSession(e){let n=Sc(e);return n===void 0?null:{...JS(n),messages:n.messages.slice()}}async resolveSessionPath(e){return Sc(e)?.filePath??null}async deleteSession(e){let n=ro.delete(e),r=xF(e);return n||r}},pp=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new mp;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=wF(vF(e,n)),s=`mock-${r}-${TF(`${e}:${r}`)}`,o=new Date,i=so(e),a=Sc(s,e),l=n?.prompt??"ClaudeMock seed",c=vc(l),d={sessionId:s,cwd:e,filePath:i,createdAt:a?.createdAt??o,modifiedAt:o,messages:a?.messages.slice()??[],totalInputTokens:a?.totalInputTokens??0,totalOutputTokens:a?.totalOutputTokens??0};return d.messages.push({role:"user",timestamp:o,content:l}),d.messages.push({role:"assistant",timestamp:o,content:"ACK: ClaudeMock seeded"}),d.totalInputTokens+=c,d.totalOutputTokens+=vc("ACK: ClaudeMock seeded"),qS(d),{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=Sc(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let o=new Date,i=Wi(so(n.cwd)),a=OF(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await VS(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${YS(e)}`;return s.messages.push({role:"user",timestamp:o,content:e}),s.messages.push({role:"assistant",timestamp:o,content:c,model:n.model??"claude-mock"}),s.modifiedAt=o,s.totalInputTokens+=vc(e),s.totalOutputTokens+=vc(c),qS(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await VS(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function gr(t){let e=[Pf({museDataHome:t?.museDataHome}),im({miniplayerHome:t?.miniplayerHome}),cm({claudeDir:t?.claudeDir}),pm({codexDir:t?.codexDir,codeDir:t?.codeDir}),Em({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),Sm({copilotDir:t?.copilotDir}),km({dbPaths:t?.opencodeDbPaths}),xm({kimiHome:t?.kimiHome}),Dm({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Pm({qwenDir:t?.qwenDir}),Hm({agyDir:t?.agyDir}),Qm({dshHome:t?.dshHome}),rp({hermesHome:t?.hermesHome}),lp({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(_p()),e}var yp=x(()=>{"use strict";Uf();Uf();am();am();dm();hm();Tm();Im();Am();Cm();Mm();Um();Bm();Zm();sp();cp();gp();dm();hm();Tm();Im();Am();Cm();Mm();Um();Bm();Zm();sp();cp();gp()});var eI,tI,nI=x(()=>{"use strict";eI=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],tI=["agy","pi","lmplayer"]});var wp={};me(wp,{BUNDLE_CAPABLE_PROVIDERS:()=>eI,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>tI,ProviderRegistry:()=>gi,TransportConnectionError:()=>Te,TransportError:()=>lr,TransportJsonError:()=>Dl,TransportProcessError:()=>ve,TransportRpcError:()=>Ei,_resetDefaultRegistryForTests:()=>UF,bundleSupportedProviders:()=>Bi,canUsePersistentSession:()=>Al,chat:()=>Hi,countTokens:()=>BF,createAdapterRegistry:()=>Vs,createAllAdapters:()=>gr,deleteSession:()=>HF,listSessions:()=>Tp,openBundleSession:()=>Ep,openConversation:()=>FF,seed:()=>jF});import{accessSync as DF,constants as MF,statSync as $F}from"node:fs";import{join as PF,delimiter as rI}from"node:path";function yr(){return Ic===null&&(Ic=Vs(gr())),Ic}function UF(){Ic=null}function bc(t,e){ml(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function Hi(t){let e=t.registry??yr(),n=bc(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 Nl(n,{...r,execution:"per-turn",requireResume:t.requireResume??!1}):void 0,o;try{o=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:o.text,...o.usage?{usage:o.usage}:{},sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,numTurns:o.numTurns,status:o.status,stalledAfterMs:o.stalledAfterMs,...o.warnings!==void 0?{warnings:o.warnings}:{}}}function Bi(t){return(t??yr()).getAllAdapters().filter(n=>xn(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function Ep(t){let e=t.registry??yr(),n=bc(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Bi(e).join(", ")})`);return Nl(n,{...t,execution:"persistent"})}async function FF(t){return Nl(bc(t.registry??yr(),t.provider),t)}async function jF(t){let e=t.registry??yr(),n=bc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=rI===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(rI).some(p=>{try{return f.some(_=>{try{let h=PF(p||t.cwd,"agy"+_);return DF(h,MF.X_OK),$F(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 sI(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}),o;try{o=s.usage}catch{}let i={usage:o},a=s.warnings!==void 0&&s.warnings.length>0?{warnings:s.warnings}:{};if(s.success&&s.sessionId)return{success:!0,sessionId:s.sessionId,...a,...i};if(!s.success&&(s.errorCode==="ENOENT"||s.errorCode==="ABORT_ERR"))return{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...i};let l=await sI(e,t.provider,t.cwd),c=WF(r,l);return s.success?c?{success:!0,sessionId:c,...a,...i}:{success:!0,...a,...i}:(c&&await n.delete?.(c).catch(()=>{}),{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...i})}async function sI(t,e,n){let r=await t.listAll({provider:e,workspace:n}),s=new Map;for(let o of r)s.set(o.sessionId,o.modifiedAt);return s}function WF(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 Tp(t={}){return(t.registry??yr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function HF(t,e,n=yr()){return n.deleteSession(e,t)}async function BF(t){let n=await(t.registry??yr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,o=n.totalCacheWriteInputTokens??0,i=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:o,output:i,reasoningOutput:a,total:r+s+o+i+a,lastTurn:n.lastTokenUsage}}var Ic,Un=x(()=>{"use strict";Gs();js();yf();yp();Gs();yf();yp();nI();cr();Ic=null});function kc(t){return xn(t)&&qF.has(t)}function Xi(){return vp===null&&(vp=Vs(gr())),vp}function Sp(t,e,n={}){if(!kc(t))return null;try{let r=Xi().getAdapter?.(t);if(r===void 0)return null;let s=r.resumeCommand(e).trim();if(s.length===0)return null;let o=s.split(/\s+/),i=t==="codex"&&n.isLead===!0?Bl({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?XF[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`}),[...o,...a??[],...i,...oI[t]??[]]}catch{return null}}async function aI(t,e){try{let n=Xi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function lI(t){try{return Xi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function cI(t,e,n={}){let r=Sp(t,e,n);return r===null?null:r.join(" ")}function je(t,e){return Xi().getSession(t,e)}async function Er(t){return(await Xi().resolveSessions(t)).map(n=>n.provider.name)}var oI,XF,qF,iI,vp,fn=x(()=>{"use strict";js();Un();Bf();oI={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:[]},XF={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]},qF=new Set(Object.keys(oI)),iI=/^[\w.:-]+$/;vp=null});function GF(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return dI;let n=Number(e);return!Number.isFinite(n)||n<=0?dI:n}async function VF(t,e,n){try{let r=Xe(e,n,t),s=r.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let o;if(typeof r.provider=="string"&&r.provider.trim()!=="")o=r.provider;else{let c=await Er(s);if(c.length!==1)return null;o=c[0]}let i=await je(s,o);if(i===null)return null;let a=i.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function uI(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??GF(),i=await VF(t,n,r),a=i!==null&&i>=o;return a&&U({event:"session_idle_reclaim",receiver_teamfile:n,receiver_alias:r,idle_ms:i,idle_minutes:i===null?null:Math.round(i/6e4),threshold_ms:o,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var dI,fI=x(()=>{"use strict";re();fn();nt();dI=36e5});function JF(t){return t===null?null:et(t)?"live":"dead"}function Ip(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:JF(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function KF(t){return(0,mI.formatDuration)(t)}function bp(t){let e=[];return t.idle_ms!==null&&e.push(`active ${KF(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 mI,pI=x(()=>{"use strict";qr();mI=Ft(Ct(),1)});import{randomUUID as YF}from"node:crypto";import{hostname as hI,networkInterfaces as zF}from"node:os";function _I(t){let e=(t.now??new Date).toISOString();return{lock_id:YF(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??hI(),holder_ips:t.ips??nj(),started_at:e,last_heartbeat:e}}function gI(t=process.env){return yI(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,QF)}function ej(t=process.env){return yI(t.LMCTL_TERMINAL_LOCK_STALE_MS,ZF)}function kp(t,e={}){let n=e.now??new Date,r=e.localHost??hI(),s=e.staleMs??ej();if(t.holder_host===r)return(e.isProcessAlive??tj)(t.holder_pid)?{live:!0,reason:"local-pid-alive"}:{live:!1,reason:"dead-pid"};let o=Date.parse(t.last_heartbeat);return Number.isFinite(o)?n.getTime()-o<=s?{live:!0,reason:"remote-heartbeat-fresh"}:{live:!1,reason:"stale-heartbeat"}:{live:!1,reason:"stale-heartbeat"}}function qi(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function yI(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 tj(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 nj(){let t=new Set;for(let e of Object.values(zF()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var QF,ZF,Ac=x(()=>{"use strict";QF=15e3,ZF=12e4});function rj(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1851
+ `,"utf8"),gF(n,t)}function IF(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function kF(t){let e=`${t}.lock`;up(hp(t),{recursive:!0});let n=Date.now()+XS;for(;;)try{return up(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-yF(e).mtimeMs>SF){try{KS(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${XS}ms: ${e}`);IF(bF)}}function AF(t){try{KS(t)}catch{}}function QS(t,e){let n=kF(t);try{return e()}finally{AF(n)}}function NF(t){return{...t,timestamp:t.timestamp.toISOString()}}function RF(t){return{...t,timestamp:new Date(t.timestamp)}}function LF(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(NF)}}function ZS(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(RF)}}function Sc(t,e=process.cwd()){let n=ro.get(t);if(n!==void 0)return n;let s=Wi(so(e)).sessions[t];if(s===void 0)return;let o=ZS(s);return ro.set(o.sessionId,o),o}function qS(t){ro.set(t.sessionId,t);let e=so(t.cwd);QS(e,()=>{let n=Wi(e);n.sessions[t.sessionId]=LF({...t,filePath:e}),zS(e,n)})}function xF(t,e=process.cwd()){let n=so(e);return QS(n,()=>{let r=Wi(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],zS(n,r)),s})}function CF(){let t=Wi(so()),e=Object.values(t.sessions).map(ZS);for(let n of e)ro.set(n.sessionId,n);return e}function fp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function GS(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=fp(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=fp(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function VS(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function OF(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=GS(n[t]??n[YS(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=GS(r[s]);if(o!==void 0)return o}}}function JS(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 _p(){return new pp}var ro,SF,bF,XS,mp,pp,gp=x(()=>{"use strict";ro=new Map;SF=5e3,bF=15,XS=1e4;mp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of CF())e.set(n.sessionId,n);for(let n of ro.values())e.set(n.sessionId,n);return[...e.values()].map(JS)}async loadSession(e){let n=Sc(e);return n===void 0?null:{...JS(n),messages:n.messages.slice()}}async resolveSessionPath(e){return Sc(e)?.filePath??null}async deleteSession(e){let n=ro.delete(e),r=xF(e);return n||r}},pp=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new mp;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=wF(vF(e,n)),s=`mock-${r}-${TF(`${e}:${r}`)}`,o=new Date,i=so(e),a=Sc(s,e),l=n?.prompt??"ClaudeMock seed",c=vc(l),d={sessionId:s,cwd:e,filePath:i,createdAt:a?.createdAt??o,modifiedAt:o,messages:a?.messages.slice()??[],totalInputTokens:a?.totalInputTokens??0,totalOutputTokens:a?.totalOutputTokens??0};return d.messages.push({role:"user",timestamp:o,content:l}),d.messages.push({role:"assistant",timestamp:o,content:"ACK: ClaudeMock seeded"}),d.totalInputTokens+=c,d.totalOutputTokens+=vc("ACK: ClaudeMock seeded"),qS(d),{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=Sc(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let o=new Date,i=Wi(so(n.cwd)),a=OF(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await VS(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${YS(e)}`;return s.messages.push({role:"user",timestamp:o,content:e}),s.messages.push({role:"assistant",timestamp:o,content:c,model:n.model??"claude-mock"}),s.modifiedAt=o,s.totalInputTokens+=vc(e),s.totalOutputTokens+=vc(c),qS(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await VS(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function gr(t){let e=[Pf({museDataHome:t?.museDataHome}),im({miniplayerHome:t?.miniplayerHome}),cm({claudeDir:t?.claudeDir}),pm({codexDir:t?.codexDir,codeDir:t?.codeDir}),Em({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),Sm({copilotDir:t?.copilotDir}),km({dbPaths:t?.opencodeDbPaths}),xm({kimiHome:t?.kimiHome}),Dm({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Pm({qwenDir:t?.qwenDir}),Hm({agyDir:t?.agyDir}),Qm({dshHome:t?.dshHome}),rp({hermesHome:t?.hermesHome}),lp({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(_p()),e}var yp=x(()=>{"use strict";Uf();Uf();am();am();dm();hm();Tm();bm();Am();Cm();Mm();Um();Bm();Zm();sp();cp();gp();dm();hm();Tm();bm();Am();Cm();Mm();Um();Bm();Zm();sp();cp();gp()});var eb,tb,nb=x(()=>{"use strict";eb=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],tb=["agy","pi","lmplayer"]});var wp={};me(wp,{BUNDLE_CAPABLE_PROVIDERS:()=>eb,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>tb,ProviderRegistry:()=>gi,TransportConnectionError:()=>Te,TransportError:()=>lr,TransportJsonError:()=>Dl,TransportProcessError:()=>ve,TransportRpcError:()=>Ei,_resetDefaultRegistryForTests:()=>UF,bundleSupportedProviders:()=>Bi,canUsePersistentSession:()=>Al,chat:()=>Hi,countTokens:()=>BF,createAdapterRegistry:()=>Vs,createAllAdapters:()=>gr,deleteSession:()=>HF,listSessions:()=>Tp,openBundleSession:()=>Ep,openConversation:()=>FF,seed:()=>jF});import{accessSync as DF,constants as MF,statSync as $F}from"node:fs";import{join as PF,delimiter as rb}from"node:path";function yr(){return bc===null&&(bc=Vs(gr())),bc}function UF(){bc=null}function Ic(t,e){ml(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function Hi(t){let e=t.registry??yr(),n=Ic(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 Nl(n,{...r,execution:"per-turn",requireResume:t.requireResume??!1}):void 0,o;try{o=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:o.text,...o.usage?{usage:o.usage}:{},sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,numTurns:o.numTurns,status:o.status,stalledAfterMs:o.stalledAfterMs,...o.warnings!==void 0?{warnings:o.warnings}:{}}}function Bi(t){return(t??yr()).getAllAdapters().filter(n=>xn(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function Ep(t){let e=t.registry??yr(),n=Ic(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Bi(e).join(", ")})`);return Nl(n,{...t,execution:"persistent"})}async function FF(t){return Nl(Ic(t.registry??yr(),t.provider),t)}async function jF(t){let e=t.registry??yr(),n=Ic(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=rb===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(rb).some(p=>{try{return f.some(_=>{try{let h=PF(p||t.cwd,"agy"+_);return DF(h,MF.X_OK),$F(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 sb(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}),o;try{o=s.usage}catch{}let i={usage:o},a=s.warnings!==void 0&&s.warnings.length>0?{warnings:s.warnings}:{};if(s.success&&s.sessionId)return{success:!0,sessionId:s.sessionId,...a,...i};if(!s.success&&(s.errorCode==="ENOENT"||s.errorCode==="ABORT_ERR"))return{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...i};let l=await sb(e,t.provider,t.cwd),c=WF(r,l);return s.success?c?{success:!0,sessionId:c,...a,...i}:{success:!0,...a,...i}:(c&&await n.delete?.(c).catch(()=>{}),{success:!1,error:s.error,errorCode:s.errorCode,sessionId:s.sessionId,...a,...i})}async function sb(t,e,n){let r=await t.listAll({provider:e,workspace:n}),s=new Map;for(let o of r)s.set(o.sessionId,o.modifiedAt);return s}function WF(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 Tp(t={}){return(t.registry??yr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function HF(t,e,n=yr()){return n.deleteSession(e,t)}async function BF(t){let n=await(t.registry??yr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,o=n.totalCacheWriteInputTokens??0,i=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:o,output:i,reasoningOutput:a,total:r+s+o+i+a,lastTurn:n.lastTokenUsage}}var bc,Un=x(()=>{"use strict";Gs();js();yf();yp();Gs();yf();yp();nb();cr();bc=null});function kc(t){return xn(t)&&qF.has(t)}function Xi(){return vp===null&&(vp=Vs(gr())),vp}function Sp(t,e,n={}){if(!kc(t))return null;try{let r=Xi().getAdapter?.(t);if(r===void 0)return null;let s=r.resumeCommand(e).trim();if(s.length===0)return null;let o=s.split(/\s+/),i=t==="codex"&&n.isLead===!0?Bl({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?XF[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`}),[...o,...a??[],...i,...ob[t]??[]]}catch{return null}}async function ab(t,e){try{let n=Xi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function lb(t){try{return Xi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function cb(t,e,n={}){let r=Sp(t,e,n);return r===null?null:r.join(" ")}function je(t,e){return Xi().getSession(t,e)}async function Er(t){return(await Xi().resolveSessions(t)).map(n=>n.provider.name)}var ob,XF,qF,ib,vp,fn=x(()=>{"use strict";js();Un();Bf();ob={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:[]},XF={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]},qF=new Set(Object.keys(ob)),ib=/^[\w.:-]+$/;vp=null});function GF(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return db;let n=Number(e);return!Number.isFinite(n)||n<=0?db:n}async function VF(t,e,n){try{let r=Xe(e,n,t),s=r.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let o;if(typeof r.provider=="string"&&r.provider.trim()!=="")o=r.provider;else{let c=await Er(s);if(c.length!==1)return null;o=c[0]}let i=await je(s,o);if(i===null)return null;let a=i.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function ub(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??GF(),i=await VF(t,n,r),a=i!==null&&i>=o;return a&&U({event:"session_idle_reclaim",receiver_teamfile:n,receiver_alias:r,idle_ms:i,idle_minutes:i===null?null:Math.round(i/6e4),threshold_ms:o,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var db,fb=x(()=>{"use strict";re();fn();nt();db=36e5});function JF(t){return t===null?null:et(t)?"live":"dead"}function bp(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:JF(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function KF(t){return(0,mb.formatDuration)(t)}function Ip(t){let e=[];return t.idle_ms!==null&&e.push(`active ${KF(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 mb,pb=x(()=>{"use strict";qr();mb=Ft(Ct(),1)});import{randomUUID as YF}from"node:crypto";import{hostname as hb,networkInterfaces as zF}from"node:os";function _b(t){let e=(t.now??new Date).toISOString();return{lock_id:YF(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??hb(),holder_ips:t.ips??nj(),started_at:e,last_heartbeat:e}}function gb(t=process.env){return yb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,QF)}function ej(t=process.env){return yb(t.LMCTL_TERMINAL_LOCK_STALE_MS,ZF)}function kp(t,e={}){let n=e.now??new Date,r=e.localHost??hb(),s=e.staleMs??ej();if(t.holder_host===r)return(e.isProcessAlive??tj)(t.holder_pid)?{live:!0,reason:"local-pid-alive"}:{live:!1,reason:"dead-pid"};let o=Date.parse(t.last_heartbeat);return Number.isFinite(o)?n.getTime()-o<=s?{live:!0,reason:"remote-heartbeat-fresh"}:{live:!1,reason:"stale-heartbeat"}:{live:!1,reason:"stale-heartbeat"}}function qi(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function yb(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 tj(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 nj(){let t=new Set;for(let e of Object.values(zF()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var QF,ZF,Ac=x(()=>{"use strict";QF=15e3,ZF=12e4});function rj(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1852
1852
  manually, outside a member session that lmctl started. Running lmctl this way is
1853
1853
  not officially supported.
1854
1854
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function ns(t,e=process.env,n){let r=n?.db?.name??Je(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.
1855
1855
  The session marker may be stale or the team may not be registered in this lmctl database.
1856
1856
  Consulted ${ri(r,s)}
1857
- To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function EI(t){return`unknown option --from
1858
- ${rj(t)}`}function Nc(t,e){let n=Ap(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Ap(t,e){let n=t[xf];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let o of e.listRootTeams()){let i;try{i=nn(o.teamfile_path,e)}catch{continue}for(let a of i.members)a.teamfile===void 0&&a.session===n&&r.push(`${o.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 Gi=x(()=>{"use strict";vt();Ro();Ht();Nn();rn()});function rs(t){let e=On(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Rc=x(()=>{"use strict";nt()});function Np(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=$e({path:Pe(t)})),s),i=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>o().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&&et(a.holder_pid)),pollMs:sj,settleMs:oj,maxHoldMs:Cs(n),onHold:()=>U({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{i(),!(!a.held&&a.reason==="cleared")&&U({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function TI(t){let e=t.literalPrompt?t.newMessage:ij(t.newMessage,{newMessageFrom:t.newMessageFrom??aj(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=ye(),s=0,o=0,i=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,i=Buffer.byteLength(c,"utf8"),o+=i),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=Np(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await Hi(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&&Ke(JSON.stringify({event:"chat_return",alias:t.receiver.alias,provider:t.receiver.provider,streamed:n,blockCount:s,streamedBytes:o,resultTextBytes:Buffer.byteLength(l.text,"utf8"),lastChunkBytes:i,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 ij(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1857
+ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function Eb(t){return`unknown option --from
1858
+ ${rj(t)}`}function Nc(t,e){let n=Ap(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Ap(t,e){let n=t[xf];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let o of e.listRootTeams()){let i;try{i=nn(o.teamfile_path,e)}catch{continue}for(let a of i.members)a.teamfile===void 0&&a.session===n&&r.push(`${o.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 Gi=x(()=>{"use strict";vt();Ro();Ht();Nn();rn()});function rs(t){let e=On(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Rc=x(()=>{"use strict";nt()});function Np(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=$e({path:Pe(t)})),s),i=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>o().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&&et(a.holder_pid)),pollMs:sj,settleMs:oj,maxHoldMs:Cs(n),onHold:()=>U({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{i(),!(!a.held&&a.reason==="cleared")&&U({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function Tb(t){let e=t.literalPrompt?t.newMessage:ij(t.newMessage,{newMessageFrom:t.newMessageFrom??aj(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=ye(),s=0,o=0,i=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,i=Buffer.byteLength(c,"utf8"),o+=i),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=Np(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await Hi(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&&Ke(JSON.stringify({event:"chat_return",alias:t.receiver.alias,provider:t.receiver.provider,streamed:n,blockCount:s,streamedBytes:o,resultTextBytes:Buffer.byteLength(l.text,"utf8"),lastChunkBytes:i,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 ij(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1859
1859
  `)}function aj(t){return`${t.teamfile}:${t.alias}`}var jQ,sj,oj,Rp=x(()=>{"use strict";Un();re();le();vt();qr();Wt();jQ=60*60*1e3,sj=2e3,oj=5e3});async function Lc(t){let e=t.onEvent??(()=>{}),n=lj(t.io,e),r=null,s=null,o=null,i,a,l=null,c=!1,d=null,u=t.prompt,f,m=()=>{let p=t.signal?.reason;if(o===null||!["SIGINT","SIGTERM","SIGHUP"].includes(p))return;let _;try{_=n.dal??$e({path:Pe(n)}),_.finishTrackedInvocation(o,{status:"cancelled",signal:p,exit_code:p==="SIGINT"?130:p==="SIGTERM"?143:129,error:`prompt holder received ${p}`,team_chat_log_id:l}),s!==null&&_.releaseAgentInflight(s.row,s.leaseId)}catch(h){n.stderr.write(`error: failed to record holder ${p}: ${String(h)}
1860
- `)}finally{n.dal===void 0&&_?.close()}};t.signal?.addEventListener("abort",m,{once:!0});try{let p=t.resolvedNativeTarget,_=p!==void 0;if(_&&(t.heldLease===void 0||t.conversation===void 0))throw new ge("native session turns require a caller-held lease and conversation");let h=_?p:await W(n,C=>Xe(t.teamfile,t.alias,C));if(t.expectedSession!==void 0&&(h.provider!==t.expectedSession.provider||h.sessionid!==t.expectedSession.sessionid))throw new ge(`session changed for ${h.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${h.provider}:${h.sessionid}`);if(_&&(t.conversation.provider!==h.provider||t.conversation.sessionId!==h.sessionid))throw new ge("native session changed for "+h.alias+"; expected "+h.provider+":"+h.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let g=h.teamfile,E=await W(n,C=>Ej(C,t.env??process.env)),y=E.sender,T=_?"native:"+h.provider+":"+h.sessionid:await Tj(n,{explicitRoot:t.rootFlag,sender:y,receiverTeamfile:g,operatorOrigin:E.origin==="operator"}),w=t.env??process.env;if(!_){let C=await W(n,$=>$.getRootTeam(T)?.name??null);C!==null&&(w.LMBEE_TEAM_NAME=C)}if(o=await fj(n,{receiverTeamfile:g,receiverAlias:h.alias,sender:y,rootTeamfile:T,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:E.origin,parentInvocationId:$s(w.LMCTL_INVOCATION_ID)}),i=_j(n,o),t.signal?.aborted)throw m(),Error("Chat turn cancelled");o!==null&&(w.LMCTL_INVOCATION_ID=String(o));try{_||Xs(n,be(g),g)}catch{}r={root_teamfile:T,sender_teamfile:y?.teamfile??null,sender_alias:y?.alias??null,receiver_teamfile:g,receiver_alias:h.alias,receiver_provider:h.provider,receiver_session_id:h.sessionid,origin:E.origin,message_type:t.messageType??null};let S=await AI(n,g,h.alias);if(S!==null){let C=qi(S);return ss(o,r,t.prompt,C,"unavailable"),d=Lp(C,null),{status:"busy",message:C,teamChatLogId:null}}let I=!1;if(t.heldLease!==void 0){let C=t.heldLease;if(!await W(n,P=>{let q=P.getAgentInflight(g,h.alias);return q===null||q.sender_teamfile!==C.row.sender_teamfile||q.sender_alias!==C.row.sender_alias||q.started_at!==C.row.started_at||q.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 ss(o,r,t.prompt,P,"unavailable"),d=Vi(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await cj(n,g,h.alias);if(C.busy){let $=await dj(n,g,h.alias);return $+=await uj(n,g,h.alias),ss(o,r,t.prompt,$,"unavailable"),d=Lp($,null),{status:"busy",message:$,teamChatLogId:null}}I=C.idleReclaim}if(y!==null&&y.teamfile!==g){let C=await W(n,$=>JT($,{root:T,sender:y,receiverTeamfile:g,receiverAlias:h.alias,now:new Date}));if(C.stop){let $=YT(C.chain);return ss(o,r,t.prompt,$,"cycle"),d=Vi($,null),{status:"error",errorKind:"cycle",message:$,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await wj(n,{receiver_teamfile:g,receiver_alias:h.alias,sender_teamfile:y?.teamfile??g,sender_alias:y?.alias??"operator",...I?{force:!0,reclaimReason:"session-idle"}:{}});if(!C.acquired){let $=NI(g,h.alias,C.current);return $+=` ${bp(Ip({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,ss(o,r,t.prompt,$,"unavailable"),d=Lp($,null),{status:"busy",message:$,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=Qa($=>W(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,$)),{intervalMs:bI,onError:$=>{ye()&&Ke(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:$ instanceof Error?$.message:String($)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Va({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=f.startedAt);let b=await TI({sender:y??{teamfile:g,alias:"operator"},receiver:{teamfile:g,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:y===null?"operator":`${y.teamfile}:${y.alias}`,..._?{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=>{u=C,l===null&&(l=await Sj(n,{...r,message:C,usage:f}),l!==null&&(t.onAccepted?.(kn(l)),o!==null&&await hj(n,o,l))),o!==null&&await pj(n,o,C)}});u=b.prompt;let L=b.status==="stalled",O=b.status==="empty",k=null,v=L?`provider stalled${b.stalledAfterMs!==void 0?` after ${b.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":b.status==="error"?b.error??b.receipt:null,A=L||O||b.status==="error"?"error":"ok",N=await Jo(f,{status:b.status,sessionId:b.sessionId,usage:b.usage},()=>nf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env});l!==null?(await SI(n,l,{...r,message:u,response:b.receipt,status:A,error_detail:v,usage:N}),c=!0,k=l):k=await II(n,{...r,message:u,response:b.receipt,status:A,error_detail:v,usage:N});let R=b.status!=="error"?b.warnings:void 0;if(L||O){let C=v;ss(o,r,u,C,"error"),d=Vi(C,k,b.receipt,R)}else d=gj(b.receipt,k,R);return{status:L?"stalled":O?"empty":"ok",replyText:b.receipt,wroteDelta:b.wroteDelta,teamChatLogId:k,messageId:k===null?null:kn(k),durationMs:b.durationMs}}catch(p){let _=p instanceof Error?p.message:String(p),h=p,g=f?await Jo(f,{status:Ls(_,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>nf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await SI(n,l,{...r,message:u,response:null,status:"error",error_detail:_,usage:g}),c=!0),l===null&&r!==null&&g&&(l=await II(n,{...r,message:u,response:null,status:"error",error_detail:_,usage:g})),ss(o,r,u,_,"error"),d={...Vi(_,l),signal:p?.signal??null,exit_code:p?.exitCode??null},{status:"error",errorKind:p instanceof ge?"target":"provider",message:_,teamChatLogId:l,messageId:l===null?null:kn(l)}}finally{t.signal?.removeEventListener("abort",m),i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await Ij(n,r,kn(l)),s!==null&&await vj(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await mj(n,o,d??Vi("chat turn exited without a terminal outcome",null))}}function lj(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function cj(t,e,n){let r=await W(t,o=>(bl(o,e,n),Zt(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await W(t,o=>uI(o,r,e,n));return{busy:!s,idleReclaim:s}}async function dj(t,e,n){let r=await AI(t,e,n);if(r!==null)return qi(r);let s=await W(t,o=>o.getAgentInflight(e,n));return s!==null?NI(e,n,s):`${n} is busy; wait and retry`}async function uj(t,e,n){let r=await W(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${bp(Ip({holderPid:r.holder_pid,since:r.started_at}))}`}async function fj(t,e){try{return(await W(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:yj(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 ye()&&Ke(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function mj(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function pj(t,e,n){try{await W(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function hj(t,e,n){try{await W(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function _j(t,e){if(e===null)return;let n=setInterval(()=>{W(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ye()&&Ke(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},bI);return n.unref?.(),n}function kI(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function gj(t,e,n){return{status:"done",result_summary:xc(t),error:null,team_chat_log_id:e,...kI(n)}}function Lp(t,e){return{status:"busy",result_summary:xc(t),error:t,team_chat_log_id:e}}function Vi(t,e,n,r){return{status:"error",result_summary:n===void 0?rT(t,500):xc(n),error:t,team_chat_log_id:e,...kI(r)}}function xc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function yj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Ej(t,e){let n=Nc(e,t);if(n.ok)return{sender:rs(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(ns("chat",e,t))}async function Tj(t,e){if(e.explicitRoot!==void 0)return await W(t,r=>Ne(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await W(t,r=>KT(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function wj(t,e){return await W(t,n=>{let r=ye(),s=tr(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:ar(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Ke(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:vI(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Ke(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:vI(s.current)})),{acquired:!1,current:s.current})})}async function AI(t,e,n){return await W(t,r=>{for(let o=0;o<2;o+=1){let i=r.getTerminalLock(e,n);if(i===null)return null;if(kp(i).live)return i;let l=r.getAgentInflight(e,n);if(r.clearTerminalLock(e,n,i.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:kp(s).live?s:null})}function vI(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 vj(t,e,n){try{return await W(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)}
1861
- `)}return!1}function NI(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 Sj(t,e){let n=Ji(e.message);try{return await W(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)}
1862
- `),null}}async function SI(t,e,n){let r=Ji(n.message),s=n.response===null?null:Ji(n.response);try{await W(t,o=>o.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(o){t.stderr.write(`warning: failed to finish chat log ${e}: ${o instanceof Error?o.message:String(o)}
1863
- `)}}async function Ij(t,e,n){if(e!==null)try{await W(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)}
1864
- `)}}async function II(t,e){let n=Ji(e.message),r=e.response===null?null:Ji(e.response);try{return await W(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)}
1865
- `),null}}function ss(t,e,n,r,s){t!==null||e===null||U({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:xc(n)})}function Ji(t){return t.length<=wI?{text:t,truncated:!1}:{text:t.slice(0,wI),truncated:!0}}var wI,bI,xp=x(()=>{"use strict";Ko();fl();St();vt();nt();Be();Sl();rn();Il();re();le();Wt();kl();fI();pI();Ac();Gi();Rc();Rp();tl();wI=256*1024,bI=3e4});import*as RI from"node:readline";var Fn,Cc=x(()=>{"use strict";le();Fn=class{io;override;rl;queue=[];waiters=[];ended=!1;constructor(e,n){this.io=e,this.override=n}get interactive(){return!Rn(this.io)&&(this.override!==void 0||(this.io.stdin??process.stdin).isTTY===!0)}async ask(e){if(!this.interactive)throw new Error(`More information is needed: ${e.trim()} Run interactively or use an explicit command with all arguments.`);let n;if(this.override?n=await this.override(e):(this.rl||(this.rl=RI.createInterface({input:this.io.stdin??process.stdin,terminal:!1}),this.rl.on("line",r=>{let s=this.waiters.shift();s?s(r):this.queue.push(r)}),this.rl.on("close",()=>{for(this.ended=!0;this.waiters.length;)this.waiters.shift()(null)})),this.io.stderr.write(e),n=this.queue.length?this.queue.shift():this.ended?null:await new Promise(r=>this.waiters.push(r))),n===null)throw new Error("Input ended; no further action taken.");return n.trim()}async confirm(e){let n=await this.ask(`${e} [y/N]: `);return/^(y|yes)$/i.test(n)}async choose(e,n,r=!1){if(n.length===1&&!r)return n[0];if(!n.length)throw new Error(`No choices available for ${e}`);for(this.io.stderr.write(`${e}
1860
+ `)}finally{n.dal===void 0&&_?.close()}};t.signal?.addEventListener("abort",m,{once:!0});try{let p=t.resolvedNativeTarget,_=p!==void 0;if(_&&(t.heldLease===void 0||t.conversation===void 0))throw new ge("native session turns require a caller-held lease and conversation");let h=_?p:await W(n,C=>Xe(t.teamfile,t.alias,C));if(t.expectedSession!==void 0&&(h.provider!==t.expectedSession.provider||h.sessionid!==t.expectedSession.sessionid))throw new ge(`session changed for ${h.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${h.provider}:${h.sessionid}`);if(_&&(t.conversation.provider!==h.provider||t.conversation.sessionId!==h.sessionid))throw new ge("native session changed for "+h.alias+"; expected "+h.provider+":"+h.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let g=h.teamfile,E=await W(n,C=>Ej(C,t.env??process.env)),y=E.sender,T=_?"native:"+h.provider+":"+h.sessionid:await Tj(n,{explicitRoot:t.rootFlag,sender:y,receiverTeamfile:g,operatorOrigin:E.origin==="operator"}),w=t.env??process.env;if(!_){let C=await W(n,$=>$.getRootTeam(T)?.name??null);C!==null&&(w.LMBEE_TEAM_NAME=C)}if(o=await fj(n,{receiverTeamfile:g,receiverAlias:h.alias,sender:y,rootTeamfile:T,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:E.origin,parentInvocationId:$s(w.LMCTL_INVOCATION_ID)}),i=_j(n,o),t.signal?.aborted)throw m(),Error("Chat turn cancelled");o!==null&&(w.LMCTL_INVOCATION_ID=String(o));try{_||Xs(n,Ie(g),g)}catch{}r={root_teamfile:T,sender_teamfile:y?.teamfile??null,sender_alias:y?.alias??null,receiver_teamfile:g,receiver_alias:h.alias,receiver_provider:h.provider,receiver_session_id:h.sessionid,origin:E.origin,message_type:t.messageType??null};let S=await Ab(n,g,h.alias);if(S!==null){let C=qi(S);return ss(o,r,t.prompt,C,"unavailable"),d=Lp(C,null),{status:"busy",message:C,teamChatLogId:null}}let b=!1;if(t.heldLease!==void 0){let C=t.heldLease;if(!await W(n,P=>{let q=P.getAgentInflight(g,h.alias);return q===null||q.sender_teamfile!==C.row.sender_teamfile||q.sender_alias!==C.row.sender_alias||q.started_at!==C.row.started_at||q.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 ss(o,r,t.prompt,P,"unavailable"),d=Vi(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await cj(n,g,h.alias);if(C.busy){let $=await dj(n,g,h.alias);return $+=await uj(n,g,h.alias),ss(o,r,t.prompt,$,"unavailable"),d=Lp($,null),{status:"busy",message:$,teamChatLogId:null}}b=C.idleReclaim}if(y!==null&&y.teamfile!==g){let C=await W(n,$=>JT($,{root:T,sender:y,receiverTeamfile:g,receiverAlias:h.alias,now:new Date}));if(C.stop){let $=YT(C.chain);return ss(o,r,t.prompt,$,"cycle"),d=Vi($,null),{status:"error",errorKind:"cycle",message:$,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await wj(n,{receiver_teamfile:g,receiver_alias:h.alias,sender_teamfile:y?.teamfile??g,sender_alias:y?.alias??"operator",...b?{force:!0,reclaimReason:"session-idle"}:{}});if(!C.acquired){let $=Nb(g,h.alias,C.current);return $+=` ${Ip(bp({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,ss(o,r,t.prompt,$,"unavailable"),d=Lp($,null),{status:"busy",message:$,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=Qa($=>W(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,$)),{intervalMs:Ib,onError:$=>{ye()&&Ke(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:$ instanceof Error?$.message:String($)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Va({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=f.startedAt);let I=await Tb({sender:y??{teamfile:g,alias:"operator"},receiver:{teamfile:g,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:y===null?"operator":`${y.teamfile}:${y.alias}`,..._?{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=>{u=C,l===null&&(l=await Sj(n,{...r,message:C,usage:f}),l!==null&&(t.onAccepted?.(kn(l)),o!==null&&await hj(n,o,l))),o!==null&&await pj(n,o,C)}});u=I.prompt;let L=I.status==="stalled",O=I.status==="empty",k=null,v=L?`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,A=L||O||I.status==="error"?"error":"ok",N=await Jo(f,{status:I.status,sessionId:I.sessionId,usage:I.usage},()=>nf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env});l!==null?(await Sb(n,l,{...r,message:u,response:I.receipt,status:A,error_detail:v,usage:N}),c=!0,k=l):k=await bb(n,{...r,message:u,response:I.receipt,status:A,error_detail:v,usage:N});let R=I.status!=="error"?I.warnings:void 0;if(L||O){let C=v;ss(o,r,u,C,"error"),d=Vi(C,k,I.receipt,R)}else d=gj(I.receipt,k,R);return{status:L?"stalled":O?"empty":"ok",replyText:I.receipt,wroteDelta:I.wroteDelta,teamChatLogId:k,messageId:k===null?null:kn(k),durationMs:I.durationMs}}catch(p){let _=p instanceof Error?p.message:String(p),h=p,g=f?await Jo(f,{status:Ls(_,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>nf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Sb(n,l,{...r,message:u,response:null,status:"error",error_detail:_,usage:g}),c=!0),l===null&&r!==null&&g&&(l=await bb(n,{...r,message:u,response:null,status:"error",error_detail:_,usage:g})),ss(o,r,u,_,"error"),d={...Vi(_,l),signal:p?.signal??null,exit_code:p?.exitCode??null},{status:"error",errorKind:p instanceof ge?"target":"provider",message:_,teamChatLogId:l,messageId:l===null?null:kn(l)}}finally{t.signal?.removeEventListener("abort",m),i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await bj(n,r,kn(l)),s!==null&&await vj(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await mj(n,o,d??Vi("chat turn exited without a terminal outcome",null))}}function lj(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function cj(t,e,n){let r=await W(t,o=>(Il(o,e,n),Zt(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await W(t,o=>ub(o,r,e,n));return{busy:!s,idleReclaim:s}}async function dj(t,e,n){let r=await Ab(t,e,n);if(r!==null)return qi(r);let s=await W(t,o=>o.getAgentInflight(e,n));return s!==null?Nb(e,n,s):`${n} is busy; wait and retry`}async function uj(t,e,n){let r=await W(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Ip(bp({holderPid:r.holder_pid,since:r.started_at}))}`}async function fj(t,e){try{return(await W(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:yj(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 ye()&&Ke(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function mj(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function pj(t,e,n){try{await W(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function hj(t,e,n){try{await W(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function _j(t,e){if(e===null)return;let n=setInterval(()=>{W(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ye()&&Ke(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Ib);return n.unref?.(),n}function kb(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function gj(t,e,n){return{status:"done",result_summary:xc(t),error:null,team_chat_log_id:e,...kb(n)}}function Lp(t,e){return{status:"busy",result_summary:xc(t),error:t,team_chat_log_id:e}}function Vi(t,e,n,r){return{status:"error",result_summary:n===void 0?rT(t,500):xc(n),error:t,team_chat_log_id:e,...kb(r)}}function xc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function yj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Ej(t,e){let n=Nc(e,t);if(n.ok)return{sender:rs(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(ns("chat",e,t))}async function Tj(t,e){if(e.explicitRoot!==void 0)return await W(t,r=>Ne(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await W(t,r=>KT(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function wj(t,e){return await W(t,n=>{let r=ye(),s=tr(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:ar(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Ke(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:vb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Ke(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:vb(s.current)})),{acquired:!1,current:s.current})})}async function Ab(t,e,n){return await W(t,r=>{for(let o=0;o<2;o+=1){let i=r.getTerminalLock(e,n);if(i===null)return null;if(kp(i).live)return i;let l=r.getAgentInflight(e,n);if(r.clearTerminalLock(e,n,i.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:kp(s).live?s:null})}function vb(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 vj(t,e,n){try{return await W(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)}
1861
+ `)}return!1}function Nb(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 Sj(t,e){let n=Ji(e.message);try{return await W(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)}
1862
+ `),null}}async function Sb(t,e,n){let r=Ji(n.message),s=n.response===null?null:Ji(n.response);try{await W(t,o=>o.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(o){t.stderr.write(`warning: failed to finish chat log ${e}: ${o instanceof Error?o.message:String(o)}
1863
+ `)}}async function bj(t,e,n){if(e!==null)try{await W(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)}
1864
+ `)}}async function bb(t,e){let n=Ji(e.message),r=e.response===null?null:Ji(e.response);try{return await W(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)}
1865
+ `),null}}function ss(t,e,n,r,s){t!==null||e===null||U({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:xc(n)})}function Ji(t){return t.length<=wb?{text:t,truncated:!1}:{text:t.slice(0,wb),truncated:!0}}var wb,Ib,xp=x(()=>{"use strict";Ko();fl();St();vt();nt();Be();Sl();rn();bl();re();le();Wt();kl();fb();pb();Ac();Gi();Rc();Rp();tl();wb=256*1024,Ib=3e4});import*as Rb from"node:readline";var Fn,Cc=x(()=>{"use strict";le();Fn=class{io;override;rl;queue=[];waiters=[];ended=!1;constructor(e,n){this.io=e,this.override=n}get interactive(){return!Rn(this.io)&&(this.override!==void 0||(this.io.stdin??process.stdin).isTTY===!0)}async ask(e){if(!this.interactive)throw new Error(`More information is needed: ${e.trim()} Run interactively or use an explicit command with all arguments.`);let n;if(this.override?n=await this.override(e):(this.rl||(this.rl=Rb.createInterface({input:this.io.stdin??process.stdin,terminal:!1}),this.rl.on("line",r=>{let s=this.waiters.shift();s?s(r):this.queue.push(r)}),this.rl.on("close",()=>{for(this.ended=!0;this.waiters.length;)this.waiters.shift()(null)})),this.io.stderr.write(e),n=this.queue.length?this.queue.shift():this.ended?null:await new Promise(r=>this.waiters.push(r))),n===null)throw new Error("Input ended; no further action taken.");return n.trim()}async confirm(e){let n=await this.ask(`${e} [y/N]: `);return/^(y|yes)$/i.test(n)}async choose(e,n,r=!1){if(n.length===1&&!r)return n[0];if(!n.length)throw new Error(`No choices available for ${e}`);for(this.io.stderr.write(`${e}
1866
1866
  ${n.map((s,o)=>` ${o+1}) ${s}`).join(`
1867
1867
  `)}
1868
1868
  `);;){let s=await this.ask("Choose a number or exact value: "),o=n.filter(i=>i.toLowerCase()===s.toLowerCase());if(o.length===1)return o[0];if(/^[1-9]\d*$/.test(s)&&Number(s)<=n.length)return n[Number(s)-1];this.io.stderr.write(`Choose one of the listed values.
1869
- `)}}close(){this.rl?.close()}}});function Oc(t){return/\S\s+\S/u.test(t)}function LI(t){let[e,...n]=t;if(!e||e.startsWith("-"))return null;if(/\.lms$/i.test(e))return{kind:"script",file:e,rest:n};if(n.some(o=>["--force","-f","--yes","-y"].includes(o)))throw new Error("Force/yes flags are not allowed in inferred mode; destructive changes require confirmation.");if(n.some(o=>o.startsWith("-")&&!Oc(o)))throw new Error("Use an explicit command for options; no inferred action was taken.");if(/\.lmb$/i.test(e))return{kind:"batch",file:e,rest:n};let r=On(e)??(e.endsWith(":")&&xe(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||xe(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Oc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Oc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Oc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return ff(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function Dc(t,e){let n=t.toLowerCase(),r=e.filter(s=>s.toLowerCase()===n);return[...new Set(r.length?r:e.filter(s=>s.toLowerCase().startsWith(n)))]}var xI=x(()=>{"use strict";Be();nt()});import{spawnSync as Pp}from"node:child_process";import{existsSync as OI,readFileSync as DI}from"node:fs";import{homedir as MI}from"node:os";import{resolve as Mp}from"node:path";function ao(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 Aj(){let t=Pp("agy",["models"],{encoding:"utf-8",timeout:kj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Rj(t){let e=[],n={};for(let r of t.split(/\r?\n/)){let s=r.trim(),o=s.indexOf(" ");if(o<0)continue;let i=s.slice(0,o).trim(),a=s.slice(o+1).trim();i&&(e.push(i),a&&(n[i]=a))}return{models:e,displayNames:n}}function os(t){if(!t&&Cp)return Cp;let e=o=>(t||(Cp=o),o),n;try{n=(t??Nj??Aj)()}catch(o){return e({available:!1,models:[],reason:o instanceof Error?ao("agy models",o):`agy models could not be run: ${String(o)}`})}if(n.error)return e({available:!1,models:[],reason:ao("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}=Rj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r,displayNames:s})}function xj(){let t=Pp("codex",["debug","models"],{encoding:"utf-8",timeout:Lj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Oj(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:o,visibility:i}=s;typeof o=="string"&&i==="list"&&r.push(o)}return r}function is(t){if(!t&&Op)return Op;let e=s=>(t||(Op=s),s),n;try{n=(t??Cj??xj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?ao("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:ao("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=Oj(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 Mj(t){let e=Pp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:Dj});return{status:e.status,stdout:e.stdout??"",error:e.error}}function Up(t,e){if(!e&&Dp.has(t))return Dp.get(t);let n=i=>(e||Dp.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??Mj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?ao(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:ao(r,s.error)});if(s.status!==0)return n({available:!1,models:[],reason:`${r} exited with status ${s.status??"unknown"}`});let o=s.stdout.split(/\r?\n/).map(i=>i.trim()).filter(i=>i.length>0);return o.length===0?n({available:!1,models:[],reason:`${r} returned no models`}):n({available:!0,models:o})}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 o=Pj(e.opencodeConfigPath);if(!o.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for opencode: ${o.reason}.`);continue}if(o.models.includes(r.model)||/^github-copilot\/(gpt|gemini|o[0-9])/.test(r.model))continue;if(!r.model.includes("/")){let l=o.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 i=r.model.slice(0,r.model.indexOf("/")),a=Up(i,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 "${i}" (checked \`opencode models ${i}\`) -- this is unresolved, not a confirmed unavailability: it could mean opencode genuinely doesn't serve this model, OR that your local catalog/auth for "${i}" 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 o=as(e.kimiConfigPath);o.available?o.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not declared in Kimi's [models] config. Valid configured models: ${Ki(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for kimi: ${o.reason}.`);continue}if(s==="agy"){if(!r.model)continue;let o=os(e.agyModelsRunner);o.available?o.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in agy's live model catalog (\`agy models\`). Valid models: ${Ki(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||io.includes(r.model))continue;oo.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Ki(oo)}. 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): ${Ki(io)}. 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 o=r.model.indexOf(":");(o<=0||o===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===CI&&n.push(`[${r.alias}] model="${CI}" 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 o=is(e.codexModelsRunner);if(!o.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for codex: ${o.reason}.`);continue}o.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in codex's live model catalog (\`codex debug models\`). Valid models: ${Ki(o.models)}`);continue}r.model&&($I.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 PI(t,e={}){let n=t.filter(i=>i.model!==void 0&&$I.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Tt();if(r.catalog===null)return{warnings:[],errors:[]};let s=[],o=[];for(let i of n){let a=i.provider.trim().toLowerCase(),l=i.model,c=Ga(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=jy(r.catalog,a)??0;s.push(`[${i.alias}] model "${l}" is unknown to the lmprice catalog for provider "${a}" (${d} 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"?o.push({field:i.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(`[${i.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")&&bj.test(l)){let d=l.replace(/(\d)\.(?=\d)/g,"$1-");s.push(`[${i.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="${d}" instead.`)}}return{warnings:s,errors:o}}async function UI(t,e={}){return(await PI(t,e)).warnings}async function FI(t,e={}){return(await PI(t,e)).errors}function as(t){let e=process.env.KIMI_CODE_HOME||Mp(MI(),".kimi-code"),n=t??Mp(e,"config.toml");if(!OI(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=DI(n,"utf-8")}catch(o){return{available:!1,models:[],reason:`${n} could not be read: ${o instanceof Error?o.message:String(o)}`}}let s=new Set;for(let o of r.split(/\r?\n/)){if(/^\s*\[/.test(o)&&!/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.test(o))return{available:!1,models:[],reason:`${n} has an invalid TOML table header`};let i=/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.exec(o);if(!i)continue;let a=$j(i[1]);if(i[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 $j(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 Pj(t){let e=t??Mp(MI(),".config","opencode","opencode.json");if(!OI(e))return{available:!0,models:[]};let n;try{n=JSON.parse(DI(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:Uj(n)}}function Uj(t){if(!$p(t))return[];let e=Mc(t.provider)??Mc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!$p(s))continue;let o=Mc(s.models)??Mc(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function Mc(t){return $p(t)?t:null}function $p(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ki(t){return t.length>0?t.join(", "):"(none)"}var $I,bj,oo,io,CI,kj,Cp,Nj,Lj,Op,Cj,Dj,Dp,lo=x(()=>{"use strict";zt();Hr();$I=new Set(Object.keys(Qt).filter(t=>t!=="codex"&&t!=="kimi")),bj=/\d\.(?=\d)/,oo=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],io=["deepseek-flash","deepseek-pro"],CI="gpt-5.3-codex-spark",kj=15e3;Cp=null;Lj=5e3;Op=null;Dj=5e3;Dp=new Map});function $c(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function jI(t){if(!/(?:^|[/:])(?:gpt-|o\d(?:-|$)|chatgpt-|claude[ -]|gemini[ -])/i.test(t))return!1;let e=/claude/i.test(t)?"claude":/gemini/i.test(t)?"gemini":"codex";return Qt[e].isChatModel({source:"",source_model_id:t,pricing:{input_per_1m_tokens:null,output_per_1m_tokens:null,input_cache_read_per_1m_tokens:null}})}function Fj(t,e){let n=[];for(let r of e.records){let s=r.source_model_id,o;if(t==="copilot")r.provider==="github_copilot"&&s.startsWith("github_copilot/")&&(o=s.slice(15));else if(["hermes","pi","lmplayer","miniplayer"].includes(t))r.source==="openrouter"&&/^(openai|anthropic|google)\//.test(s)&&(o=t==="hermes"?`openrouter:${s}`:t==="pi"?`openrouter/${s}`:s);else{let i={claude:"anthropic",gemini:"gemini",qwen:"dashscope"}[t],a=Qt[t];if(i&&r.source==="litellm"&&r.provider===i&&a?.coversRecord(r)){o=s.startsWith(`${i}/`)?s.slice(i.length+1):s;let l=t==="claude"?"claude-":t==="gemini"?"gemini-":"qwen";(o.includes("/")||!o.startsWith(l))&&(o=void 0)}}!o||r.mode!=null&&r.mode!=="chat"||o.includes(":batch")||o.includes(":free")||$c(t)&&!jI(o)||n.push(o)}return[...new Set(n)].sort()}async function Pc(t){let e;switch(t){case"dsh":e=[...io,...oo];break;case"codex":e=is().models;break;case"agy":e=os().models;break;case"kimi":e=as().models;break;case"opencode":e=Up("").models;break;default:{let{catalog:n}=await Tt();e=n?Fj(t,n):[]}}return[...new Set(e.filter(n=>!$c(t)||jI(n)))].sort()}var jp=x(()=>{"use strict";zt();Hr();lo()});var qI={};me(qI,{MODEL_PROVIDERS:()=>jn,knownModelNames:()=>co,runModels:()=>Uc});function BI(t,e){switch(t){case"codex":return is();case"agy":return os();case"kimi":return as();case"claude":{let n=e.catalog?.records??[],r=n.flatMap(o=>o.native?.claude_code&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(o.native.claude_code)?[o.native.claude_code]:[]),s=r.length?r:n.flatMap(o=>{let i=o.source_model_id.split("/").at(-1);return o.provider==="anthropic"&&o.mode==="chat"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(i)?[i]:[]});return s.length?{available:!0,models:[...new Set(s)]}:{available:!1,models:[],reason:"No Claude Code ids in the available catalog"}}default:return{available:!1,models:[]}}}async function co(t){if(!jn.includes(t))return Pc(t);let e=t==="claude"?await Tt():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return BI(t,e).models}function Wp(t,e){return t==="agy"?e.replace(/-(low|medium|high)$/i,""):e}function Hp(t,e,n){if(!jn.includes(t)||!n.catalog)return;let r=Wj[t],s=Wp(t,e);return n.catalog.records.find(o=>o.native?.[r]===s)}function Yi(t,e,n){let r=wt(t,e,n.catalog,n.aliases).state;return r.kind==="priced"||r.kind==="estimated"||r.kind==="known-unpriced"}function Hj(t,e,n){if(Hp(t,e,n))return!0;let r=XI(t,e,n)?.state;return r?.kind==="priced"||r?.kind==="estimated"||r?.kind==="known-unpriced"}function Bj(t,e,n){let r=n.catalog?.records??[];if(t==="claude"||!n.catalog)return[];let s=new Set;if(t==="codex")for(let i of r)if(i.native?.codex)s.add(i.native.codex);else{let a=i.source_model_id.split("/").at(-1);/^(?:gpt-|o\d|chatgpt|ft:gpt)/i.test(a)&&Yi("codex",a,n)&&s.add(a)}else if(t==="agy"){let i=new Set;for(let a of r){if(a.native?.agy){i.add(Wp("agy",a.native.agy));continue}if(a.mode!=="chat")continue;let l=a.source_model_id.split("/").at(-1);(/^gemini-\d/.test(l)?Yi("gemini",l,n):a.provider==="anthropic"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(l)?Yi("claude",l,n):/^gpt-oss-\d/.test(l)?Yi("codex",l,n):!1)&&i.add(l)}for(let a of i)for(let l of["low","medium","high"])s.add(`${a}-${l}`)}else if(t==="kimi"){for(let i of r)i.native?.kimi&&s.add(i.native.kimi);for(let i of r){if(i.native?.kimi)continue;let a=i.source_model_id.split("/").at(-1),l=a.startsWith("kimi-")?`kimi-code/${a.slice(5)}`:a;/^kimi-code\/[a-z0-9][a-z0-9._-]*$/i.test(l)&&Yi("kimi",l,n)&&s.add(l)}}let o=new Set(e);return[...s].filter(i=>!o.has(i)&&Hj(t,i,n))}function XI(t,e,n){if(!n.catalog)return null;if(Hp(t,e,n)||t!=="agy")return wt(t,e,n.catalog,n.aliases);let s=Wp("agy",e);if(!/^(?:gemini-\d|claude-[a-z]+-\d|gpt-oss-\d)/.test(s))return null;let o=n.catalog.records.map(i=>{let a=i.source_model_id.split("/").at(-1).toLowerCase();return i.mode!=="chat"||a!==s.toLowerCase()?i:{...i,native:{...i.native,agy:s}}});return wt("agy",s,{...n.catalog,records:o},n.aliases)}function HI(t,e,n,r,s){let o=Hp(t,e,r),i=XI(t,e,r),a=i?.offer??null,l=i?.state,c=l?.kind==="priced"||l?.kind==="estimated"?l.model.id:l?.kind==="known-unpriced"?l.id:null;return{id:e,display_name:n,status:s,catalog_model:o?.source_model_id??c,pricing:{input_per_1m_tokens:a?.pricing.input_per_1m_tokens??null,output_per_1m_tokens:a?.pricing.output_per_1m_tokens??null,input_cache_read_per_1m_tokens:a?.pricing.input_cache_read_per_1m_tokens??null},price_resolution:l?.kind??(r.catalog?"unknown":"no-catalog"),price_source_model_id:a?.sourceModelId??null,price_estimated:a?.estimated??!1}}async function Uc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(WI),0;let r=ae(t,[],["--old","--json"]),s=r.positionals.find(u=>u!=="all"&&!jn.includes(u)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${jn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1870
- ${WI}`),2;let i=n.selections?.map(u=>u.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...jn]:jn.filter(u=>r.positionals.includes(u)));e.stderr.write(`querying models: ${i.join(", ")} ...
1871
- `);let a=await(n.loadSnapshot??Tt)(),l=z(r,"--old"),c=[];for(let u of i){let f;try{let p=n.selections?.find(_=>_.provider===u);f=p?.models!==void 0?{available:!0,models:p.models}:n.loadModels?await n.loadModels(u,a):BI(u,a)}catch(p){f={available:!1,models:[],reason:p instanceof Error?p.message:String(p)}}let m=jj[u]??"provider model list";c.push({provider:u,status:f.available?"ok":"unavailable",source:m,reason:f.reason??null,models:f.available?[...[...new Set(f.models)].map(p=>HI(u,p,f.displayNames?.[p]??null,a,u==="claude"?"unverified":"valid")),...l?Bj(u,f.models,a).map(p=>HI(u,p,null,a,"old")):[]]:[]})}if(z(r,"--json"))return te(e,{schema_version:2,currency:"USD",unit:"per_million_tokens",price_data_source:a.source,price_data_generated_at:a.generatedAt,providers:c}),0;e.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.
1869
+ `)}}close(){this.rl?.close()}}});function Oc(t){return/\S\s+\S/u.test(t)}function Lb(t){let[e,...n]=t;if(!e||e.startsWith("-"))return null;if(/\.lms$/i.test(e))return{kind:"script",file:e,rest:n};if(n.some(o=>["--force","-f","--yes","-y"].includes(o)))throw new Error("Force/yes flags are not allowed in inferred mode; destructive changes require confirmation.");if(n.some(o=>o.startsWith("-")&&!Oc(o)))throw new Error("Use an explicit command for options; no inferred action was taken.");if(/\.lmb$/i.test(e))return{kind:"batch",file:e,rest:n};let r=On(e)??(e.endsWith(":")&&xe(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||xe(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Oc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Oc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Oc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return ff(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function Dc(t,e){let n=t.toLowerCase(),r=e.filter(s=>s.toLowerCase()===n);return[...new Set(r.length?r:e.filter(s=>s.toLowerCase().startsWith(n)))]}var xb=x(()=>{"use strict";Be();nt()});import{spawnSync as Pp}from"node:child_process";import{existsSync as Ob,readFileSync as Db}from"node:fs";import{homedir as Mb}from"node:os";import{resolve as Mp}from"node:path";function ao(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 Aj(){let t=Pp("agy",["models"],{encoding:"utf-8",timeout:kj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Rj(t){let e=[],n={};for(let r of t.split(/\r?\n/)){let s=r.trim(),o=s.indexOf(" ");if(o<0)continue;let i=s.slice(0,o).trim(),a=s.slice(o+1).trim();i&&(e.push(i),a&&(n[i]=a))}return{models:e,displayNames:n}}function os(t){if(!t&&Cp)return Cp;let e=o=>(t||(Cp=o),o),n;try{n=(t??Nj??Aj)()}catch(o){return e({available:!1,models:[],reason:o instanceof Error?ao("agy models",o):`agy models could not be run: ${String(o)}`})}if(n.error)return e({available:!1,models:[],reason:ao("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}=Rj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r,displayNames:s})}function xj(){let t=Pp("codex",["debug","models"],{encoding:"utf-8",timeout:Lj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Oj(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:o,visibility:i}=s;typeof o=="string"&&i==="list"&&r.push(o)}return r}function is(t){if(!t&&Op)return Op;let e=s=>(t||(Op=s),s),n;try{n=(t??Cj??xj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?ao("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:ao("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=Oj(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 Mj(t){let e=Pp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:Dj});return{status:e.status,stdout:e.stdout??"",error:e.error}}function Up(t,e){if(!e&&Dp.has(t))return Dp.get(t);let n=i=>(e||Dp.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??Mj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?ao(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:ao(r,s.error)});if(s.status!==0)return n({available:!1,models:[],reason:`${r} exited with status ${s.status??"unknown"}`});let o=s.stdout.split(/\r?\n/).map(i=>i.trim()).filter(i=>i.length>0);return o.length===0?n({available:!1,models:[],reason:`${r} returned no models`}):n({available:!0,models:o})}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 o=Pj(e.opencodeConfigPath);if(!o.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for opencode: ${o.reason}.`);continue}if(o.models.includes(r.model)||/^github-copilot\/(gpt|gemini|o[0-9])/.test(r.model))continue;if(!r.model.includes("/")){let l=o.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 i=r.model.slice(0,r.model.indexOf("/")),a=Up(i,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 "${i}" (checked \`opencode models ${i}\`) -- this is unresolved, not a confirmed unavailability: it could mean opencode genuinely doesn't serve this model, OR that your local catalog/auth for "${i}" 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 o=as(e.kimiConfigPath);o.available?o.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not declared in Kimi's [models] config. Valid configured models: ${Ki(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for kimi: ${o.reason}.`);continue}if(s==="agy"){if(!r.model)continue;let o=os(e.agyModelsRunner);o.available?o.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in agy's live model catalog (\`agy models\`). Valid models: ${Ki(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||io.includes(r.model))continue;oo.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Ki(oo)}. 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): ${Ki(io)}. 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 o=r.model.indexOf(":");(o<=0||o===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===Cb&&n.push(`[${r.alias}] model="${Cb}" 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 o=is(e.codexModelsRunner);if(!o.available){n.push(`[${r.alias}] model="${r.model}" cannot be verified for codex: ${o.reason}.`);continue}o.models.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in codex's live model catalog (\`codex debug models\`). Valid models: ${Ki(o.models)}`);continue}r.model&&($b.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 Pb(t,e={}){let n=t.filter(i=>i.model!==void 0&&$b.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Tt();if(r.catalog===null)return{warnings:[],errors:[]};let s=[],o=[];for(let i of n){let a=i.provider.trim().toLowerCase(),l=i.model,c=Ga(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=jy(r.catalog,a)??0;s.push(`[${i.alias}] model "${l}" is unknown to the lmprice catalog for provider "${a}" (${d} 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"?o.push({field:i.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(`[${i.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")&&Ij.test(l)){let d=l.replace(/(\d)\.(?=\d)/g,"$1-");s.push(`[${i.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="${d}" instead.`)}}return{warnings:s,errors:o}}async function Ub(t,e={}){return(await Pb(t,e)).warnings}async function Fb(t,e={}){return(await Pb(t,e)).errors}function as(t){let e=process.env.KIMI_CODE_HOME||Mp(Mb(),".kimi-code"),n=t??Mp(e,"config.toml");if(!Ob(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=Db(n,"utf-8")}catch(o){return{available:!1,models:[],reason:`${n} could not be read: ${o instanceof Error?o.message:String(o)}`}}let s=new Set;for(let o of r.split(/\r?\n/)){if(/^\s*\[/.test(o)&&!/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.test(o))return{available:!1,models:[],reason:`${n} has an invalid TOML table header`};let i=/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.exec(o);if(!i)continue;let a=$j(i[1]);if(i[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 $j(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 Pj(t){let e=t??Mp(Mb(),".config","opencode","opencode.json");if(!Ob(e))return{available:!0,models:[]};let n;try{n=JSON.parse(Db(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:Uj(n)}}function Uj(t){if(!$p(t))return[];let e=Mc(t.provider)??Mc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!$p(s))continue;let o=Mc(s.models)??Mc(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function Mc(t){return $p(t)?t:null}function $p(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ki(t){return t.length>0?t.join(", "):"(none)"}var $b,Ij,oo,io,Cb,kj,Cp,Nj,Lj,Op,Cj,Dj,Dp,lo=x(()=>{"use strict";zt();Hr();$b=new Set(Object.keys(Qt).filter(t=>t!=="codex"&&t!=="kimi")),Ij=/\d\.(?=\d)/,oo=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],io=["deepseek-flash","deepseek-pro"],Cb="gpt-5.3-codex-spark",kj=15e3;Cp=null;Lj=5e3;Op=null;Dj=5e3;Dp=new Map});function $c(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function jb(t){if(!/(?:^|[/:])(?:gpt-|o\d(?:-|$)|chatgpt-|claude[ -]|gemini[ -])/i.test(t))return!1;let e=/claude/i.test(t)?"claude":/gemini/i.test(t)?"gemini":"codex";return Qt[e].isChatModel({source:"",source_model_id:t,pricing:{input_per_1m_tokens:null,output_per_1m_tokens:null,input_cache_read_per_1m_tokens:null}})}function Fj(t,e){let n=[];for(let r of e.records){let s=r.source_model_id,o;if(t==="copilot")r.provider==="github_copilot"&&s.startsWith("github_copilot/")&&(o=s.slice(15));else if(["hermes","pi","lmplayer","miniplayer"].includes(t))r.source==="openrouter"&&/^(openai|anthropic|google)\//.test(s)&&(o=t==="hermes"?`openrouter:${s}`:t==="pi"?`openrouter/${s}`:s);else{let i={claude:"anthropic",gemini:"gemini",qwen:"dashscope"}[t],a=Qt[t];if(i&&r.source==="litellm"&&r.provider===i&&a?.coversRecord(r)){o=s.startsWith(`${i}/`)?s.slice(i.length+1):s;let l=t==="claude"?"claude-":t==="gemini"?"gemini-":"qwen";(o.includes("/")||!o.startsWith(l))&&(o=void 0)}}!o||r.mode!=null&&r.mode!=="chat"||o.includes(":batch")||o.includes(":free")||$c(t)&&!jb(o)||n.push(o)}return[...new Set(n)].sort()}async function Pc(t){let e;switch(t){case"dsh":e=[...io,...oo];break;case"codex":e=is().models;break;case"agy":e=os().models;break;case"kimi":e=as().models;break;case"opencode":e=Up("").models;break;default:{let{catalog:n}=await Tt();e=n?Fj(t,n):[]}}return[...new Set(e.filter(n=>!$c(t)||jb(n)))].sort()}var jp=x(()=>{"use strict";zt();Hr();lo()});var qb={};me(qb,{MODEL_PROVIDERS:()=>jn,knownModelNames:()=>co,runModels:()=>Uc});function Bb(t,e){switch(t){case"codex":return is();case"agy":return os();case"kimi":return as();case"claude":{let n=e.catalog?.records??[],r=n.flatMap(o=>o.native?.claude_code&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(o.native.claude_code)?[o.native.claude_code]:[]),s=r.length?r:n.flatMap(o=>{let i=o.source_model_id.split("/").at(-1);return o.provider==="anthropic"&&o.mode==="chat"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(i)?[i]:[]});return s.length?{available:!0,models:[...new Set(s)]}:{available:!1,models:[],reason:"No Claude Code ids in the available catalog"}}default:return{available:!1,models:[]}}}async function co(t){if(!jn.includes(t))return Pc(t);let e=t==="claude"?await Tt():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return Bb(t,e).models}function Wp(t,e){return t==="agy"?e.replace(/-(low|medium|high)$/i,""):e}function Hp(t,e,n){if(!jn.includes(t)||!n.catalog)return;let r=Wj[t],s=Wp(t,e);return n.catalog.records.find(o=>o.native?.[r]===s)}function Yi(t,e,n){let r=wt(t,e,n.catalog,n.aliases).state;return r.kind==="priced"||r.kind==="estimated"||r.kind==="known-unpriced"}function Hj(t,e,n){if(Hp(t,e,n))return!0;let r=Xb(t,e,n)?.state;return r?.kind==="priced"||r?.kind==="estimated"||r?.kind==="known-unpriced"}function Bj(t,e,n){let r=n.catalog?.records??[];if(t==="claude"||!n.catalog)return[];let s=new Set;if(t==="codex")for(let i of r)if(i.native?.codex)s.add(i.native.codex);else{let a=i.source_model_id.split("/").at(-1);/^(?:gpt-|o\d|chatgpt|ft:gpt)/i.test(a)&&Yi("codex",a,n)&&s.add(a)}else if(t==="agy"){let i=new Set;for(let a of r){if(a.native?.agy){i.add(Wp("agy",a.native.agy));continue}if(a.mode!=="chat")continue;let l=a.source_model_id.split("/").at(-1);(/^gemini-\d/.test(l)?Yi("gemini",l,n):a.provider==="anthropic"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(l)?Yi("claude",l,n):/^gpt-oss-\d/.test(l)?Yi("codex",l,n):!1)&&i.add(l)}for(let a of i)for(let l of["low","medium","high"])s.add(`${a}-${l}`)}else if(t==="kimi"){for(let i of r)i.native?.kimi&&s.add(i.native.kimi);for(let i of r){if(i.native?.kimi)continue;let a=i.source_model_id.split("/").at(-1),l=a.startsWith("kimi-")?`kimi-code/${a.slice(5)}`:a;/^kimi-code\/[a-z0-9][a-z0-9._-]*$/i.test(l)&&Yi("kimi",l,n)&&s.add(l)}}let o=new Set(e);return[...s].filter(i=>!o.has(i)&&Hj(t,i,n))}function Xb(t,e,n){if(!n.catalog)return null;if(Hp(t,e,n)||t!=="agy")return wt(t,e,n.catalog,n.aliases);let s=Wp("agy",e);if(!/^(?:gemini-\d|claude-[a-z]+-\d|gpt-oss-\d)/.test(s))return null;let o=n.catalog.records.map(i=>{let a=i.source_model_id.split("/").at(-1).toLowerCase();return i.mode!=="chat"||a!==s.toLowerCase()?i:{...i,native:{...i.native,agy:s}}});return wt("agy",s,{...n.catalog,records:o},n.aliases)}function Hb(t,e,n,r,s){let o=Hp(t,e,r),i=Xb(t,e,r),a=i?.offer??null,l=i?.state,c=l?.kind==="priced"||l?.kind==="estimated"?l.model.id:l?.kind==="known-unpriced"?l.id:null;return{id:e,display_name:n,status:s,catalog_model:o?.source_model_id??c,pricing:{input_per_1m_tokens:a?.pricing.input_per_1m_tokens??null,output_per_1m_tokens:a?.pricing.output_per_1m_tokens??null,input_cache_read_per_1m_tokens:a?.pricing.input_cache_read_per_1m_tokens??null},price_resolution:l?.kind??(r.catalog?"unknown":"no-catalog"),price_source_model_id:a?.sourceModelId??null,price_estimated:a?.estimated??!1}}async function Uc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Wb),0;let r=ae(t,[],["--old","--json"]),s=r.positionals.find(u=>u!=="all"&&!jn.includes(u)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${jn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1870
+ ${Wb}`),2;let i=n.selections?.map(u=>u.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...jn]:jn.filter(u=>r.positionals.includes(u)));e.stderr.write(`querying models: ${i.join(", ")} ...
1871
+ `);let a=await(n.loadSnapshot??Tt)(),l=z(r,"--old"),c=[];for(let u of i){let f;try{let g=n.selections?.find(E=>E.provider===u);f=g?.models!==void 0?{available:!0,models:g.models}:n.loadModels?await n.loadModels(u,a):Bb(u,a)}catch(g){f={available:!1,models:[],reason:g instanceof Error?g.message:String(g)}}let m=jj[u]??"provider model list",p=f.available?[...new Set(f.models)].map(g=>Hb(u,g,f.displayNames?.[g]??null,a,u==="claude"?"unverified":"valid")):[],_=p.filter(g=>g.catalog_model===null).map(g=>g.id),h=f.available&&l?Bj(u,f.models,a).map(g=>Hb(u,g,null,a,"old")):[];c.push({provider:u,status:f.available?"ok":"unavailable",source:m,reason:f.reason??null,models:[...p,...h],unmatched:_})}if(z(r,"--json"))return te(e,{schema_version:2,currency:"USD",unit:"per_million_tokens",price_data_source:a.source,price_data_generated_at:a.generatedAt,providers:c}),0;e.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.
1872
1872
  `),e.stdout.write(`Price catalog: ${a.source}${a.generatedAt?` (${a.generatedAt})`:""}
1873
1873
  `);let d=u=>u===null?"n/a":`$${u}`;for(let u of c){let f=u.provider==="agy",m=f?["MODEL","DISPLAY","STATUS","INPUT","OUTPUT","CACHE READ"]:["MODEL","STATUS","INPUT","OUTPUT","CACHE READ"];if(e.stdout.write(`
1874
1874
  ${u.provider} (${u.source})
1875
1875
  `),u.status==="unavailable"){e.stdout.write(` unavailable: ${(0,qt.escapeCell)(u.reason??"model list unavailable")}
1876
+ `),e.stdout.write(` ${u.unmatched.length} live ids have no catalog row yet (lmprice dataset ${a.catalog?.generated_at?.slice(0,10)??"unknown"}; run lmctl prices update after lmprice publishes)
1876
1877
  `);continue}let p=u.models.map(y=>[(0,qt.escapeCell)(y.id),...f?[(0,qt.escapeCell)(y.display_name??"")]:[],(0,qt.escapeCell)(y.status),d(y.pricing.input_per_1m_tokens),d(y.pricing.output_per_1m_tokens),d(y.pricing.input_cache_read_per_1m_tokens)]),_=f?["left","left","left","decimal","decimal","decimal"]:["left","left","decimal","decimal","decimal"],h=(0,qt.measureDecimalPlaces)([p]),g={align:_,decimalPlaces:h},E=(0,qt.measureColumns)([{rows:p,headers:m}],g);e.stdout.write(`${(0,qt.renderGrid)(p,{headers:m,widths:E,margin:2,...g})}
1877
- `)}return 0}var qt,jn,WI,jj,Wj,Fc=x(()=>{"use strict";qt=Ft(Ct(),1);le();lo();jp();zt();Hr();jn=["codex","agy","claude","kimi"],WI=`usage: lmctl models [provider ...] [--old] [--json]
1878
+ `),e.stdout.write(` ${u.unmatched.length} live ids have no catalog row yet (lmprice dataset ${a.catalog?.generated_at?.slice(0,10)??"unknown"}; run lmctl prices update after lmprice publishes)
1879
+ `)}return 0}var qt,jn,Wb,jj,Wj,Fc=x(()=>{"use strict";qt=Ft(Ct(),1);le();lo();jp();zt();Hr();jn=["codex","agy","claude","kimi"],Wb=`usage: lmctl models [provider ...] [--old] [--json]
1878
1880
 
1879
1881
  List model ids accepted by each provider, joined to the available price catalog.
1880
1882
  Providers: all (default), codex, agy, claude, kimi. Multiple providers are allowed.
@@ -1884,7 +1886,7 @@ Old catalog-known ids are omitted unless --old is used. Claude catalog ids are u
1884
1886
  --json Emit schema_version 2 with native ids, catalog matches and per-million pricing.
1885
1887
  --old Include ids known to the catalog that the provider no longer reports.
1886
1888
  -h Show this help.
1887
- `,jj={codex:"codex debug models",agy:"agy models",claude:"lmprice native.claude_code",kimi:"Kimi [models] config"},Wj={codex:"codex",agy:"agy",claude:"claude_code",kimi:"kimi"}});function Tr(t){try{if(t instanceof Error){let e=t.message;if(typeof e=="string")return e}return String(t)}catch{return"Unprintable error"}}function pt(t,e,n){return{...n,status:"error",code:t,error:e}}var jc=x(()=>{"use strict"});function mn(t){try{return t?.usage}catch{return}}function Wc(t,e,n,r){let s,o,i,a=!1;try{i=Va(e),s=t.dal??$e({path:Pe(t),recover:!1}),o=s.insertDirectTurn(i,n,r)}catch{}return{async finish(l){if(!a){a=!0;try{s&&o!==void 0&&i&&s.finishDirectTurn(o,await Jo(i,l,()=>ul(s.db,t.env),{db:s.db,env:t.env}))}catch{}finally{if(s&&s!==t.dal)try{s.close()}catch{}}}}}}function Hc(t,e,n){let r=t,s,o;s=mn(r)??mn(n);try{o=r?.sessionId??n?.sessionId}catch{o=n?.sessionId}return{status:Ls(Tr(t),e.aborted),usage:s,sessionId:o}}var Bp=x(()=>{"use strict";vt();le();fl();Ko();jc()});var GI={};me(GI,{runFreshPrompt:()=>Gj});import{resolve as Xj}from"node:path";import{stat as qj}from"node:fs/promises";async function Gj(t,e){let n=Xj(e.cwd??process.cwd(),t.sessiondir??"."),r=new AbortController,s=()=>r.abort();process.once("SIGINT",s),process.once("SIGTERM",s);let o=!1,i,a={status:"error"};try{if(!(await qj(n)).isDirectory())throw new Error(`sessiondir is not a directory: ${n}`);i=Wc(e,{provider:t.provider,modelRequested:t.model,cwd:n,sessionId:""},"operator");let l=await Hi({provider:t.provider,model:t.model,cwd:n,sessionId:"",prompt:t.prompt,requireResume:!1,timeoutMs:0,permissionMode:t.permissionMode,signal:r.signal,onDelta:t.json?void 0:c=>{o=!0,e.stdout.write(c)},onProgress:t.verbose?c=>{(c.kind==="tool_use"||c.kind==="tool_result"||c.kind==="api_retry")&&e.stderr.write(`[${t.provider}] ${c.kind}${c.summary?`: ${c.summary}`:""}
1889
+ `,jj={codex:"codex debug models",agy:"agy models",claude:"lmprice native.claude_code",kimi:"Kimi [models] config"},Wj={codex:"codex",agy:"agy",claude:"claude_code",kimi:"kimi"}});function Tr(t){try{if(t instanceof Error){let e=t.message;if(typeof e=="string")return e}return String(t)}catch{return"Unprintable error"}}function pt(t,e,n){return{...n,status:"error",code:t,error:e}}var jc=x(()=>{"use strict"});function mn(t){try{return t?.usage}catch{return}}function Wc(t,e,n,r){let s,o,i,a=!1;try{i=Va(e),s=t.dal??$e({path:Pe(t),recover:!1}),o=s.insertDirectTurn(i,n,r)}catch{}return{async finish(l){if(!a){a=!0;try{s&&o!==void 0&&i&&s.finishDirectTurn(o,await Jo(i,l,()=>ul(s.db,t.env),{db:s.db,env:t.env}))}catch{}finally{if(s&&s!==t.dal)try{s.close()}catch{}}}}}}function Hc(t,e,n){let r=t,s,o;s=mn(r)??mn(n);try{o=r?.sessionId??n?.sessionId}catch{o=n?.sessionId}return{status:Ls(Tr(t),e.aborted),usage:s,sessionId:o}}var Bp=x(()=>{"use strict";vt();le();fl();Ko();jc()});var Gb={};me(Gb,{runFreshPrompt:()=>Gj});import{resolve as Xj}from"node:path";import{stat as qj}from"node:fs/promises";async function Gj(t,e){let n=Xj(e.cwd??process.cwd(),t.sessiondir??"."),r=new AbortController,s=()=>r.abort();process.once("SIGINT",s),process.once("SIGTERM",s);let o=!1,i,a={status:"error"};try{if(!(await qj(n)).isDirectory())throw new Error(`sessiondir is not a directory: ${n}`);i=Wc(e,{provider:t.provider,modelRequested:t.model,cwd:n,sessionId:""},"operator");let l=await Hi({provider:t.provider,model:t.model,cwd:n,sessionId:"",prompt:t.prompt,requireResume:!1,timeoutMs:0,permissionMode:t.permissionMode,signal:r.signal,onDelta:t.json?void 0:c=>{o=!0,e.stdout.write(c)},onProgress:t.verbose?c=>{(c.kind==="tool_use"||c.kind==="tool_result"||c.kind==="api_retry")&&e.stderr.write(`[${t.provider}] ${c.kind}${c.summary?`: ${c.summary}`:""}
1888
1890
  `)}:void 0,env:e.env});a={status:r.signal.aborted?"cancelled":l.status??"ok",sessionId:l.sessionId,usage:mn(l)};for(let c of l.warnings??[])t.json||e.stderr.write(`warning: ${c}
1889
1891
  `);return t.json?e.stdout.write(`${JSON.stringify({status:l.status??"ok",provider:t.provider,requestedModel:t.model,sessionId:l.sessionId,replyText:l.text,...l.warnings?{warnings:l.warnings}:{}})}
1890
1892
  `):o?l.text.length>0&&!l.text.endsWith(`
@@ -1894,17 +1896,17 @@ Old catalog-known ids are omitted unless --old is used. Claude catalog ids are u
1894
1896
  `}`),l.status==="empty"||l.status==="stalled"?1:(e.stderr.write(`note: fresh ${t.provider} session ${l.sessionId||"(provider did not report an id)"} completed
1895
1897
  `),0)}catch(l){a=Hc(l,r.signal,a);let c=l instanceof Error?l.message:String(l);return t.json?e.stdout.write(`${JSON.stringify({status:"error",provider:t.provider,requestedModel:t.model,error:c})}
1896
1898
  `):e.stderr.write(`error: ${c}
1897
- `),1}finally{await i?.finish(a),process.removeListener("SIGINT",s),process.removeListener("SIGTERM",s)}}var VI=x(()=>{"use strict";Un();Bp()});function JI(t,e){return new Error("Invalid template reference "+JSON.stringify(t)+" at offset "+e+"; use a simple name, PROPS.path or ARGV[n]. Assign a temporary variable first and pass it in vars.")}function Yj(t){if(typeof t!="string")throw new Error("expand: text must be a string");let e=[],n=0;for(;n<t.length;){let r=t.indexOf("${",n);if(r<0){e.push(t.slice(n));break}if(r>n&&t[r-1]==="$"){e.push(t.slice(n,r-1),"${"),n=r+2;continue}e.push(t.slice(n,r));let s=t.indexOf("}",r+2);if(s<0)throw JI(t.slice(r+2),r);let o=t.slice(r+2,s),i=Jj.exec(o),a=Kj.exec(o);if(i)e.push({kind:"property",name:o,key:i[1],offset:r});else if(a&&Number.isSafeInteger(Number(a[1])))e.push({kind:"argument",name:o,index:Number(a[1]),offset:r});else if(Vj.test(o)&&o!=="PROPS"&&o!=="ARGV")e.push({kind:"variable",name:o,offset:r});else throw JI(o,r);n=s+1}return e}function KI(t,e,n=r=>r!==null&&typeof r=="object"?JSON.stringify(r):String(r)){let r=[],s=new Map;for(let o of Yj(t)){if(typeof o=="string"){r.push(o);continue}let i;try{i=e(o)}catch(a){s.set(o.name,a instanceof Error?a.message:String(a));continue}if(i===void 0){s.set(o.name,"not defined");continue}r.push(n(i))}if(s.size)throw new Error("expand: missing references: "+[...s].map(([o,i])=>o+" ("+i+")").join("; "));return r.join("")}var Xp,Vj,Jj,Kj,YI=x(()=>{Xp="[_a-zA-Z][_a-zA-Z0-9]*",Vj=new RegExp("^"+Xp+"$"),Jj=new RegExp("^PROPS\\.("+Xp+"(?:\\."+Xp+")*)$"),Kj=/^ARGV\[(0|[1-9][0-9]*)\]$/});function zI(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 QI=x(()=>{"use strict"});function zj(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function Qj(t,e,n){let r=t.split(/\r?\n/),s="",o=(Math.log10(e+1)|0)+1;for(let i=e-1;i<=e+1;i++){let a=r[i-1];a&&(s+=i.toString().padEnd(o," "),s+=": ",s+=a,s+=`
1899
+ `),1}finally{await i?.finish(a),process.removeListener("SIGINT",s),process.removeListener("SIGTERM",s)}}var Vb=x(()=>{"use strict";Un();Bp()});function Jb(t,e){return new Error("Invalid template reference "+JSON.stringify(t)+" at offset "+e+"; use a simple name, PROPS.path or ARGV[n]. Assign a temporary variable first and pass it in vars.")}function Yj(t){if(typeof t!="string")throw new Error("expand: text must be a string");let e=[],n=0;for(;n<t.length;){let r=t.indexOf("${",n);if(r<0){e.push(t.slice(n));break}if(r>n&&t[r-1]==="$"){e.push(t.slice(n,r-1),"${"),n=r+2;continue}e.push(t.slice(n,r));let s=t.indexOf("}",r+2);if(s<0)throw Jb(t.slice(r+2),r);let o=t.slice(r+2,s),i=Jj.exec(o),a=Kj.exec(o);if(i)e.push({kind:"property",name:o,key:i[1],offset:r});else if(a&&Number.isSafeInteger(Number(a[1])))e.push({kind:"argument",name:o,index:Number(a[1]),offset:r});else if(Vj.test(o)&&o!=="PROPS"&&o!=="ARGV")e.push({kind:"variable",name:o,offset:r});else throw Jb(o,r);n=s+1}return e}function Kb(t,e,n=r=>r!==null&&typeof r=="object"?JSON.stringify(r):String(r)){let r=[],s=new Map;for(let o of Yj(t)){if(typeof o=="string"){r.push(o);continue}let i;try{i=e(o)}catch(a){s.set(o.name,a instanceof Error?a.message:String(a));continue}if(i===void 0){s.set(o.name,"not defined");continue}r.push(n(i))}if(s.size)throw new Error("expand: missing references: "+[...s].map(([o,i])=>o+" ("+i+")").join("; "));return r.join("")}var Xp,Vj,Jj,Kj,Yb=x(()=>{Xp="[_a-zA-Z][_a-zA-Z0-9]*",Vj=new RegExp("^"+Xp+"$"),Jj=new RegExp("^PROPS\\.("+Xp+"(?:\\."+Xp+")*)$"),Kj=/^ARGV\[(0|[1-9][0-9]*)\]$/});function zb(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 Qb=x(()=>{"use strict"});function zj(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function Qj(t,e,n){let r=t.split(/\r?\n/),s="",o=(Math.log10(e+1)|0)+1;for(let i=e-1;i<=e+1;i++){let a=r[i-1];a&&(s+=i.toString().padEnd(o," "),s+=": ",s+=a,s+=`
1898
1900
  `,i===e&&(s+=" ".repeat(o+n+2),s+=`^
1899
1901
  `))}return s}var J,ls=x(()=>{J=class t extends Error{line;column;codeblock;constructor(e,n){let[r,s]=zj(n.toml,n.ptr),o=Qj(n.toml,r,s);super(`Invalid TOML document: ${e}
1900
1902
 
1901
1903
  ${o}`,n),this.line=r,this.column=s,this.codeblock=o}static x(e,n,r){throw new t(e,{toml:n.s,ptr:r??n.p})}}});function Bc(t){let e=t.p,n=t.s.charCodeAt(t.p++),r=n,s=n===39,o=n===t.s.charCodeAt(t.p)&&n===t.s.charCodeAt(t.p+1);o&&((n=t.s.charCodeAt(t.p+=2))===10?t.p++:n===13&&t.s.charCodeAt(t.p+1)===10&&(t.p+=2));let i="",a=t.p,l=0;for(;t.p<t.s.length;t.p++)if(n=t.s.charCodeAt(t.p),o&&(n===10||n===13&&t.s.charCodeAt(t.p+1)===10))l=l&&3;else if(n<32&&n!==9||n===127)J.x("control characters are not allowed in strings",t);else if((!l||l===3)&&n===r&&(!o||t.s.charCodeAt(t.p+1)===r&&t.s.charCodeAt(t.p+2)===r)){if(o&&(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);i=i?i+c:c}return t.p+=o?3:1,i}else if(!l)!s&&n===92&&(i+=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,d=0,u=n===120?2:n===117?4:8;for(let f=0;f<u;f++,t.p++){let m=t.s.charCodeAt(t.p),p=m>=48&&m<=57?m-48:m>=65&&m<=70?m-65+10:m>=97&&m<=102?m-97+10:-1;p<0&&J.x("invalid non-hex character in unicode escape",t),d=d<<4|p}(d<0||d>1114111||d>=55296&&d<=57343)&&J.x("invalid unicode escape",t,c),i+=String.fromCodePoint(d),a=t.p--,l=0}else o&&(n===32||n===9)?l=2:(n===98?i+="\b":n===116?i+=" ":n===110?i+=`
1902
- `:n===102?i+="\f":n===114?i+="\r":n===101?i+="\x1B":n===34?i+='"':n===92?i+="\\":J.x("unrecognised escape sequence",t),a=t.p+1,l=0);else n!==32&&n!==9&&(l===2&&J.x("invalid escape: only line-ending whitespace may be escaped",t,a),l=!s&&n===92?1:0,a=t.p);J.x("unfinished string",t,e)}var qp=x(()=>{ls();});var Zj,zi,Gp=x(()=>{Zj=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,zi=class t extends Date{#t=!1;#n=!1;#e=null;constructor(e,n,r){let s=!0,o=!0,i="Z",a;if(typeof e=="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}n===2?(i=null,e+="Z"):(a=e.charCodeAt(e.length-1))!==90&&a!==122&&(i=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,o=n!==3}else{let l=e.match(Zj);l?(l[1]||(s=!1,e=`0000-01-01T${e}`),o=!!l[2],o&&e[10]===" "&&(e=e.replace(" ","T")),l[2]&&+l[2]>23?e="":(i=l[3]||null,!i&&o&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=s,this.#n=o,this.#e=i)}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 bt(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Jp(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function Zi(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||J.x("document contains excessively nested structures. aborting.",t);let s=r===91?tb(t):eb(t);return t.d++,s}return r===34||r===39?Bc(t):r===116?((t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)&&J.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)&&J.x("invalid value",t,n),t.p++,!1):r===43||r===45?Xc(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?eW(t,r,e):t.s.charCodeAt(t.p+2)===58?tW(t,r,e):Xc(t,t.p,r,0,e)}function Xc(t,e,n,r,s){let o=n,i=0,a=!1;if(o===105)return(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)&&J.x("invalid value",t,e),t.p++,(r||1)/0;if(o===110)return(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)&&J.x("invalid value",t,e),t.p++,NaN;if(o===48){if(++t.p>=t.s.length||Jp(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return Vp(t,e,16,s);if(o===98)return Vp(t,e,2,s);if(o===111)return Vp(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else bt(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!Jp(o,s));)i||(i=1),o===95?(i&1||J.x("illegal underscore",t),i+=11,a=!0):i===1&&o===46?i=2:(i===1||i===3)&&(o===101||o===69)?i=4:i===4&&(o===43||o===45)||(bt(o)?i>9?i-=11:i&1||i++:J.x("illegal character in numeric literal",t));if(!i){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}i&1||J.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),i>1?parseFloat(l):ZI(t,l,10,e)}function Vp(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Jp(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):bt(s,n)?o&1&&o--:J.x("illegal character in numeric literal",t);o&1&&J.x("unfinished numeric value",t);let i=t.s.slice(e+2,t.p);return o&&(i=i.replaceAll("_","")),ZI(t,i,n,e)}function ZI(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;J.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 eW(t,e,n){let r=t.p++,s;if(!bt(e)||!bt(t.s.charCodeAt(t.p++))||!bt(t.s.charCodeAt(t.p++))||!bt(t.s.charCodeAt(t.p++)))return Xc(t,t.p=r,e,0,n);if(t.p+=5,bt(t.s.charCodeAt(t.p++))||J.x("invalid date-time: date part is malformed",t,r),t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(s=!0,!bt(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return Qi(t,i,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58&&J.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(;bt(t.s.charCodeAt(++t.p)););if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let i=t.s.slice(r,++t.p);return Qi(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return Qi(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Qi(t,o,2,s,r)}function tW(t,e,n){let r=t.p;if(!bt(e)||!bt(t.s.charCodeAt(++t.p)))return Xc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;bt(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return Qi(t,s,4,!1,r)}function Qi(t,e,n,r,s,o){if(t.ld){let i=new zi(e,n,r);return i.isValid()||J.x("invalid date",t,s),i}try{switch(o&&(e+=o),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(i){J.x(i instanceof Error?i.message:""+i,t,s)}}var Kp=x(()=>{qp();Yp();ls();Gp();});function nW(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)&&J.x("control characters are not allowed in comments",t)}}function Gt(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;nW(t)}}var zp=x(()=>{ls();});function qc(t,e=61){let n,r=0,s=[],o,i=t.s.charCodeAt(n=t.p);do{if(i===e)return r||J.x("unexpected end of key",t),r===1&&s.push(t.s.slice(o,t.p)),t.p++,s;i===46?(r||J.x("illegal empty bare key",t),r===1&&s.push(t.s.slice(o,t.p)),r=0):!r&&(i===34||i===39)?(i===t.s.charCodeAt(t.p+1)&&i===t.s.charCodeAt(t.p+2)&&J.x("illegal quoted key: multiline strings are not allowed",t),s.push(Bc(t)),r=2,t.p--):i===32||i===9?r===1&&(s.push(t.s.slice(o,t.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?J.x("illegal character in key",t):r||(r=1,o=t.p)}while(i=t.s.charCodeAt(++t.p));J.x("incomplete key-value: cannot find end of key",t,n)}function eb(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Gt(t),(s=t.s.charCodeAt(t.p))===125)return t.p++,n;let o,i=n,a=!1,l=t.p,c=qc(t);for(let u=0;u<c.length;u++){u&&(i=a?i[o]:i[o]=Object.create(null)),o=c[u],(a=Object.hasOwn(i,o))&&(typeof i[o]!="object"||r.has(i[o]))&&J.x("trying to redefine an already defined value",t,l);let f=o==="__proto__";if(t.uk&&(f||o==="constructor")){i=t.uk!==1&&J.x("document contains an unsafe property",t,l);break}!a&&f&&Object.defineProperty(i,o,{enumerable:!0,configurable:!0,writable:!0})}a&&J.x("trying to redefine an already defined value",t,l),Gt(t,!0,!0);let d=Zi(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Gt(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished table",t,e)}function tb(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Gt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(Zi(t,93)),Gt(t),(r=t.s.charCodeAt(t.p++))===93)return n;r!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished array",t,e)}var Yp=x(()=>{qp();Kp();zp();ls();});function nb(t,e,n,r,s){let o=n,i=r,a,l=!1,c;for(let d=0;d<e.length;d++){if(d){if(o=l?o[a]:o[a]=Object.create(null),i=(c=i[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],i=i[u].c}}if(a=e[d],(l=Object.hasOwn(o,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!l){let u=a==="__proto__";if(t.uk&&(u||a==="constructor"))return!1;u&&(Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=i[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[a]=[]),o[a].push(o=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)o=l?o[a]:o[a]=Object.create(null);else if(s===0&&l)return null;return[a,o,c.c]}function rb(t,e,n){(e===null||t.uk===2)&&J.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function uo(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),o,i=!1,a=r,l=s;for(t.charCodeAt(0)===65279&&n.p++,Gt(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;o=n.p+=+c,i=!1;let d=qc(n,93);c&&(t.charCodeAt(n.p)!==93&&J.x("expected end of table array declaration",n),n.p++);let u=nb(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(rb(n,u,o),i=!0)}else{o=n.p;let c=qc(n),d=nb(n,c,a,l,0);!d&&!i&&rb(n,d,o),Gt(n,!0,!0);let u=Zi(n,void 0);d&&!i&&(d[1][d[0]]=u)}Gt(n,!0),n.p<t.length&&(o=t.charCodeAt(n.p))!==10&&(o!==13||t.charCodeAt(n.p+1)!==10)&&J.x("each key-value declaration must be followed by an end-of-line",n),Gt(n)}return r}var sb=x(()=>{Yp();Kp();zp();ls();});var dZ,ob=x(()=>{dZ=!!"".isWellFormed});var Qp=x(()=>{sb();ob();Gp();ls();});import{readFileSync as rW}from"node:fs";import{homedir as sW}from"node:os";import{join as ib,resolve as oW}from"node:path";function Mt(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?oW(e):ib(n||ib(t.HOME||sW(),".lmctl"),"init.toml")}function iW(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function pn(t,e="<init.toml>"){let{document:n}=ab(t,e),r={};for(let o of cs){let i=n[o];if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date)throw new qe(e,"schema","["+o+"] must be a table with provider and model1");let a={};for(let l of ea){let c=i[l];if(typeof c!="string"||!c.trim())throw new qe(e,"schema",o+"."+l+" must be a nonempty string");a[l]=c}r[o]=a}let s={raw:t,document:n,path:e,slots:r};return Object.defineProperty(s,"config",{enumerable:!1,get(){let o=cs.find(i=>!r[i]);if(o)throw new qe(e,"schema","["+o+"] is not in "+e+"; this needs the example slots ["+cs.join("], [")+"] -- add ["+o+"] with provider and model1");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function ab(t,e="<init.toml>"){let n;try{n=uo(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new qe(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 aW(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(rW(t))}catch(n){let r=n;throw new qe(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function ta(t=Mt()){return pn(aW(t),t)}var cs,ea,qe,Gc=x(()=>{"use strict";Qp();cs=["Provider1","Provider2","Provider3"],ea=["provider","model1"];qe=class extends Error{path;kind;line;column;detail;constructor(e,n,r,s=1,o=1){let i=iW(e,n,r,s,o);super(n==="missing"?i+". Run lmctl init first.":i+". Fix the file or run lmctl init."),this.path=e,this.kind=n,this.line=s,this.column=o,this.detail=i}}});function lW(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1904
+ `:n===102?i+="\f":n===114?i+="\r":n===101?i+="\x1B":n===34?i+='"':n===92?i+="\\":J.x("unrecognised escape sequence",t),a=t.p+1,l=0);else n!==32&&n!==9&&(l===2&&J.x("invalid escape: only line-ending whitespace may be escaped",t,a),l=!s&&n===92?1:0,a=t.p);J.x("unfinished string",t,e)}var qp=x(()=>{ls();});var Zj,zi,Gp=x(()=>{Zj=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,zi=class t extends Date{#t=!1;#n=!1;#e=null;constructor(e,n,r){let s=!0,o=!0,i="Z",a;if(typeof e=="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}n===2?(i=null,e+="Z"):(a=e.charCodeAt(e.length-1))!==90&&a!==122&&(i=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,o=n!==3}else{let l=e.match(Zj);l?(l[1]||(s=!1,e=`0000-01-01T${e}`),o=!!l[2],o&&e[10]===" "&&(e=e.replace(" ","T")),l[2]&&+l[2]>23?e="":(i=l[3]||null,!i&&o&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=s,this.#n=o,this.#e=i)}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 It(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Jp(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function Zi(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||J.x("document contains excessively nested structures. aborting.",t);let s=r===91?tI(t):eI(t);return t.d++,s}return r===34||r===39?Bc(t):r===116?((t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)&&J.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)&&J.x("invalid value",t,n),t.p++,!1):r===43||r===45?Xc(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?eW(t,r,e):t.s.charCodeAt(t.p+2)===58?tW(t,r,e):Xc(t,t.p,r,0,e)}function Xc(t,e,n,r,s){let o=n,i=0,a=!1;if(o===105)return(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)&&J.x("invalid value",t,e),t.p++,(r||1)/0;if(o===110)return(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)&&J.x("invalid value",t,e),t.p++,NaN;if(o===48){if(++t.p>=t.s.length||Jp(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return Vp(t,e,16,s);if(o===98)return Vp(t,e,2,s);if(o===111)return Vp(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else It(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!Jp(o,s));)i||(i=1),o===95?(i&1||J.x("illegal underscore",t),i+=11,a=!0):i===1&&o===46?i=2:(i===1||i===3)&&(o===101||o===69)?i=4:i===4&&(o===43||o===45)||(It(o)?i>9?i-=11:i&1||i++:J.x("illegal character in numeric literal",t));if(!i){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}i&1||J.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),i>1?parseFloat(l):Zb(t,l,10,e)}function Vp(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Jp(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):It(s,n)?o&1&&o--:J.x("illegal character in numeric literal",t);o&1&&J.x("unfinished numeric value",t);let i=t.s.slice(e+2,t.p);return o&&(i=i.replaceAll("_","")),Zb(t,i,n,e)}function Zb(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;J.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 eW(t,e,n){let r=t.p++,s;if(!It(e)||!It(t.s.charCodeAt(t.p++))||!It(t.s.charCodeAt(t.p++))||!It(t.s.charCodeAt(t.p++)))return Xc(t,t.p=r,e,0,n);if(t.p+=5,It(t.s.charCodeAt(t.p++))||J.x("invalid date-time: date part is malformed",t,r),t.p>=t.s.length||((e=t.s.charCodeAt(t.p))!==32||(s=!0,!It(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return Qi(t,i,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58&&J.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(;It(t.s.charCodeAt(++t.p)););if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let i=t.s.slice(r,++t.p);return Qi(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return Qi(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Qi(t,o,2,s,r)}function tW(t,e,n){let r=t.p;if(!It(e)||!It(t.s.charCodeAt(++t.p)))return Xc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;It(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return Qi(t,s,4,!1,r)}function Qi(t,e,n,r,s,o){if(t.ld){let i=new zi(e,n,r);return i.isValid()||J.x("invalid date",t,s),i}try{switch(o&&(e+=o),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(i){J.x(i instanceof Error?i.message:""+i,t,s)}}var Kp=x(()=>{qp();Yp();ls();Gp();});function nW(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)&&J.x("control characters are not allowed in comments",t)}}function Gt(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;nW(t)}}var zp=x(()=>{ls();});function qc(t,e=61){let n,r=0,s=[],o,i=t.s.charCodeAt(n=t.p);do{if(i===e)return r||J.x("unexpected end of key",t),r===1&&s.push(t.s.slice(o,t.p)),t.p++,s;i===46?(r||J.x("illegal empty bare key",t),r===1&&s.push(t.s.slice(o,t.p)),r=0):!r&&(i===34||i===39)?(i===t.s.charCodeAt(t.p+1)&&i===t.s.charCodeAt(t.p+2)&&J.x("illegal quoted key: multiline strings are not allowed",t),s.push(Bc(t)),r=2,t.p--):i===32||i===9?r===1&&(s.push(t.s.slice(o,t.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?J.x("illegal character in key",t):r||(r=1,o=t.p)}while(i=t.s.charCodeAt(++t.p));J.x("incomplete key-value: cannot find end of key",t,n)}function eI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Gt(t),(s=t.s.charCodeAt(t.p))===125)return t.p++,n;let o,i=n,a=!1,l=t.p,c=qc(t);for(let u=0;u<c.length;u++){u&&(i=a?i[o]:i[o]=Object.create(null)),o=c[u],(a=Object.hasOwn(i,o))&&(typeof i[o]!="object"||r.has(i[o]))&&J.x("trying to redefine an already defined value",t,l);let f=o==="__proto__";if(t.uk&&(f||o==="constructor")){i=t.uk!==1&&J.x("document contains an unsafe property",t,l);break}!a&&f&&Object.defineProperty(i,o,{enumerable:!0,configurable:!0,writable:!0})}a&&J.x("trying to redefine an already defined value",t,l),Gt(t,!0,!0);let d=Zi(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Gt(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished table",t,e)}function tI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Gt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(Zi(t,93)),Gt(t),(r=t.s.charCodeAt(t.p++))===93)return n;r!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished array",t,e)}var Yp=x(()=>{qp();Kp();zp();ls();});function nI(t,e,n,r,s){let o=n,i=r,a,l=!1,c;for(let d=0;d<e.length;d++){if(d){if(o=l?o[a]:o[a]=Object.create(null),i=(c=i[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],i=i[u].c}}if(a=e[d],(l=Object.hasOwn(o,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!l){let u=a==="__proto__";if(t.uk&&(u||a==="constructor"))return!1;u&&(Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=i[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[a]=[]),o[a].push(o=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)o=l?o[a]:o[a]=Object.create(null);else if(s===0&&l)return null;return[a,o,c.c]}function rI(t,e,n){(e===null||t.uk===2)&&J.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function uo(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),o,i=!1,a=r,l=s;for(t.charCodeAt(0)===65279&&n.p++,Gt(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;o=n.p+=+c,i=!1;let d=qc(n,93);c&&(t.charCodeAt(n.p)!==93&&J.x("expected end of table array declaration",n),n.p++);let u=nI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(rI(n,u,o),i=!0)}else{o=n.p;let c=qc(n),d=nI(n,c,a,l,0);!d&&!i&&rI(n,d,o),Gt(n,!0,!0);let u=Zi(n,void 0);d&&!i&&(d[1][d[0]]=u)}Gt(n,!0),n.p<t.length&&(o=t.charCodeAt(n.p))!==10&&(o!==13||t.charCodeAt(n.p+1)!==10)&&J.x("each key-value declaration must be followed by an end-of-line",n),Gt(n)}return r}var sI=x(()=>{Yp();Kp();zp();ls();});var dZ,oI=x(()=>{dZ=!!"".isWellFormed});var Qp=x(()=>{sI();oI();Gp();ls();});import{readFileSync as rW}from"node:fs";import{homedir as sW}from"node:os";import{join as iI,resolve as oW}from"node:path";function Mt(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?oW(e):iI(n||iI(t.HOME||sW(),".lmctl"),"init.toml")}function iW(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function pn(t,e="<init.toml>"){let{document:n}=aI(t,e),r={};for(let o of cs){let i=n[o];if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date)throw new qe(e,"schema","["+o+"] must be a table with provider and model1");let a={};for(let l of ea){let c=i[l];if(typeof c!="string"||!c.trim())throw new qe(e,"schema",o+"."+l+" must be a nonempty string");a[l]=c}r[o]=a}let s={raw:t,document:n,path:e,slots:r};return Object.defineProperty(s,"config",{enumerable:!1,get(){let o=cs.find(i=>!r[i]);if(o)throw new qe(e,"schema","["+o+"] is not in "+e+"; this needs the example slots ["+cs.join("], [")+"] -- add ["+o+"] with provider and model1");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function aI(t,e="<init.toml>"){let n;try{n=uo(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new qe(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 aW(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(rW(t))}catch(n){let r=n;throw new qe(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function ta(t=Mt()){return pn(aW(t),t)}var cs,ea,qe,Gc=x(()=>{"use strict";Qp();cs=["Provider1","Provider2","Provider3"],ea=["provider","model1"];qe=class extends Error{path;kind;line;column;detail;constructor(e,n,r,s=1,o=1){let i=iW(e,n,r,s,o);super(n==="missing"?i+". Run lmctl init first.":i+". Fix the file or run lmctl init."),this.path=e,this.kind=n,this.line=s,this.column=o,this.detail=i}}});function lW(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1903
1905
  `){let o=n;n+=r==="\r"&&t[n+1]===`
1904
1906
  `?2:1,e.push({start:o,end:n,text:`
1905
1907
  `,kind:"newline"});continue}if(/\s/.test(r)){n++;continue}if(r==="#"){for(;n<t.length&&t[n]!=="\r"&&t[n]!==`
1906
1908
  `;)n++;continue}let s=n;if(r==='"'||r==="'"){let o=t.startsWith(r.repeat(3),n);n+=o?3:1;let i=!1;for(;n<t.length;){if(r==='"'&&t[n]==="\\"){n+=2;continue}if(t[n]===r){if(!o){n++,i=!0;break}if(t.startsWith(r.repeat(3),n)){for(;t[n]===r;)n++;i=!0;break}}n++}if(!i)throw new Error("cannot locate string boundary");e.push({start:s,end:n,text:t.slice(s,n),kind:"string",multiline:o});continue}if("[]=.{},".includes(r)){n++,e.push({start:s,end:n,text:r,kind:"symbol"});continue}for(;n<t.length&&!/\s/.test(t[n])&&!`"'#[]=.{},`.includes(t[n]);)n++;if(n===s)throw new Error("cannot locate token");e.push({start:s,end:n,text:t.slice(s,n),kind:"word"})}return e}function cW(t){let e=uo(t+" = 0"),n=[];for(;e&&typeof e=="object"&&!Array.isArray(e);){let r=Object.entries(e);if(r.length!==1)throw new Error("ambiguous key");n.push(r[0][0]),e=r[0][1]}return n}function dW(t){let e=uo(t+`
1907
- __init_edit_marker__ = 0`),n=[];for(;e&&typeof e=="object"&&!Array.isArray(e);){let r=Object.entries(e);if(r.length!==1)return[];if(r[0][0]==="__init_edit_marker__")return n;n.push(r[0][0]),e=r[0][1]}return[]}function Zp(t){return'"'+Array.from(t).map(e=>{let n=e.codePointAt(0);if(n>=55296&&n<=57343)throw new Error("managed string contains an invalid Unicode scalar");return e==='"'?'\\"':e==="\\"?"\\\\":n<32||n===127?"\\u"+n.toString(16).padStart(4,"0"):e}).join("")+'"'}function lb(t,e,n=[]){if(n.length===2&&cs.includes(n[0])&&ea.includes(n[1])||Object.is(t,e))return!0;if(t instanceof Date||e instanceof Date)return t instanceof Date&&e instanceof Date&&t.toISOString()===e.toISOString();if(!t||!e||typeof t!="object"||typeof e!="object"||Array.isArray(t)!==Array.isArray(e))return!1;let r=Object.keys(t),s=Object.keys(e);return r.length!==s.length||r.some(o=>!Object.hasOwn(e,o))?!1:r.every(o=>lb(t[o],e[o],[...n,o]))}function cb(t,e){try{let n=pn(t),r=cs.filter(m=>n.slots[m]),s=cs.filter(m=>!n.slots[m]),o=[];for(let m of r)for(let p of ea){let _=n.slots[m][p],h=e[m.toLowerCase()][p];_!==h&&o.push({section:m,key:p,oldValue:_,newValue:h,line:1})}if(!o.length)return{ok:!0,text:t,changes:o,absent:s};let i=new Map,a=lW(t),l=0,c=[];for(;l<a.length;){if(a[l].kind==="newline"){l++;continue}let m=l;if(a[l].text==="["){for(;l<a.length&&a[l].kind!=="newline";)l++;c=dW(t.slice(a[m].start,a[l-1].end));continue}for(;l<a.length&&a[l].text!=="=";)l++;if(l===a.length)throw new Error("cannot locate assignment");let p=cW(t.slice(a[m].start,a[l-1].end));l++;let _=l,h=0;for(;l<a.length;){let g=a[l];if(g.kind==="newline"&&h===0)break;g.kind==="symbol"&&((g.text==="["||g.text==="{")&&h++,(g.text==="]"||g.text==="}")&&h--),l++}if(c.length===1&&p.length===1&&l-_===1){let g=a[_];g.kind==="string"&&!g.multiline&&i.set(c[0]+"."+p[0],g)}}let d=o.map(m=>{let p=i.get(m.section+"."+m.key);if(!p)throw new Error("cannot edit "+m.section+"."+m.key+" in place (multiline, dotted or inline managed layout); edit by hand");return m.line=t.slice(0,p.start).split(/\r\n|\r|\n/).length,{start:p.start,end:p.end,text:Zp(m.newValue)}}).sort((m,p)=>p.start-m.start),u=t;for(let m of d)u=u.slice(0,m.start)+m.text+u.slice(m.end);let f=pn(u);for(let m of r)for(let p of ea)if(f.slots[m]?.[p]!==e[m.toLowerCase()][p])throw new Error("managed-value verification failed");if(!lb(n.document,f.document))throw new Error("unmanaged semantic verification failed");return{ok:!0,text:u,changes:o,absent:s}}catch(n){return{ok:!1,error:n instanceof qe?n.detail:n.message,line:n.line}}}var db=x(()=>{"use strict";Qp();Gc()});import*as ub from"node:child_process";function uW(t,e){try{let n=e(t,["--version"],{encoding:"utf-8",timeout:5e3});return n.status===0?{found:!0,version:(n.stdout??"").toString().trim().split(/\r?\n/,1)[0]?.trim()||void 0}:n.status===null?{found:!1,failureMode:"not installed"}:{found:!1,failureMode:"runs but failed"}}catch{return{found:!1,failureMode:"not installed"}}}function fb(t,e={}){let n=e.spawnSync===void 0&&process.env[fW]==="1",r=e.spawnSync??ub.spawnSync,s=new Set,o=[];for(let i of t){if(s.has(i))continue;s.add(i);let a=ds[i];if(!a){o.push({provider:i,binary:"<unknown>",found:!1,failureMode:"not installed"});continue}if(n){o.push({provider:i,binary:a,found:!0,version:"(skipped)"});continue}let l=uW(a,r);l.found?o.push({provider:i,binary:a,found:!0,version:l.version}):o.push({provider:i,binary:a,found:!1,failureMode:l.failureMode})}return o}var ds,fW,na=x(()=>{"use strict";ds={claude:"claude",codex:"codex",copilot:"copilot",gemini:"gemini",opencode:"opencode",lmplayer:"lmplayer",qwen:"qwen",agy:"agy",kimi:"kimi",dsh:"dsh",hermes:"hermes",miniplayer:"miniplayer",muse:"muse",pi:"pi"};fW="LMCTL_SKIP_BINARY_CHECK"});import{spawnSync as mW}from"node:child_process";function pb(t){return fo.filter(e=>t.includes(e))}function pW(t,e){if(e.length===0)throw new Error(`No model ids are available for detected provider "${t}"`);if(t!=="claude")return e[0];let n=e.filter(s=>/^claude-[a-z]+-\d+(?:-\d+)?$/.test(s));if(n.length===0)throw new Error("No undated Claude Code model id is available in the catalog");let r=s=>s.match(/-(\d+)(?:-(\d+))?$/).slice(1).map(o=>Number(o??0));return n.reduce((s,o)=>{let i=r(s),a=r(o);return a[0]>i[0]||a[0]===i[0]&&a[1]>i[1]?o:s})}async function hb(t){switch(t){case"codex":{let e=is();if(!e.available)throw new Error(e.reason??"codex returned no models");return e.models}case"agy":{let e=os();if(!e.available)throw new Error(e.reason??"agy returned no models");return e.models}case"kimi":{let e=as();if(!e.available)throw new Error(e.reason??"Kimi config has no models");return e.models}case"claude":{let n=(await Tt()).catalog?.records??[],r=n.flatMap(s=>s.native?.claude_code?[s.native.claude_code]:[]);return r.length?[...new Set(r)]:[...new Set(n.flatMap(s=>{let o=s.source_model_id.split("/").at(-1);return s.provider==="anthropic"&&s.mode==="chat"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(o)?[o]:[]}))]}default:throw new Error(`Unsupported init provider "${t}"`)}}function _b(t,e){let n=t.filter((l,c)=>t.indexOf(l)===c),r=n.length>0?n:["claude"],[s,o=s,i=s]=r,a=l=>({provider:l,model1:pW(l,e[l]??[])});return{provider1:a(s),provider2:a(o),provider3:a(i)}}function gb(t=mW){return fb(fo,{spawnSync:t}).filter(e=>e.found).map(e=>e.provider)}function mb(t){return Zp(t)}function ra(t){let e=(n,r)=>[`[${n}]`,`provider = ${mb(r.provider)}`,`model1 = ${mb(r.model1)}`].join(`
1909
+ __init_edit_marker__ = 0`),n=[];for(;e&&typeof e=="object"&&!Array.isArray(e);){let r=Object.entries(e);if(r.length!==1)return[];if(r[0][0]==="__init_edit_marker__")return n;n.push(r[0][0]),e=r[0][1]}return[]}function Zp(t){return'"'+Array.from(t).map(e=>{let n=e.codePointAt(0);if(n>=55296&&n<=57343)throw new Error("managed string contains an invalid Unicode scalar");return e==='"'?'\\"':e==="\\"?"\\\\":n<32||n===127?"\\u"+n.toString(16).padStart(4,"0"):e}).join("")+'"'}function lI(t,e,n=[]){if(n.length===2&&cs.includes(n[0])&&ea.includes(n[1])||Object.is(t,e))return!0;if(t instanceof Date||e instanceof Date)return t instanceof Date&&e instanceof Date&&t.toISOString()===e.toISOString();if(!t||!e||typeof t!="object"||typeof e!="object"||Array.isArray(t)!==Array.isArray(e))return!1;let r=Object.keys(t),s=Object.keys(e);return r.length!==s.length||r.some(o=>!Object.hasOwn(e,o))?!1:r.every(o=>lI(t[o],e[o],[...n,o]))}function cI(t,e){try{let n=pn(t),r=cs.filter(m=>n.slots[m]),s=cs.filter(m=>!n.slots[m]),o=[];for(let m of r)for(let p of ea){let _=n.slots[m][p],h=e[m.toLowerCase()][p];_!==h&&o.push({section:m,key:p,oldValue:_,newValue:h,line:1})}if(!o.length)return{ok:!0,text:t,changes:o,absent:s};let i=new Map,a=lW(t),l=0,c=[];for(;l<a.length;){if(a[l].kind==="newline"){l++;continue}let m=l;if(a[l].text==="["){for(;l<a.length&&a[l].kind!=="newline";)l++;c=dW(t.slice(a[m].start,a[l-1].end));continue}for(;l<a.length&&a[l].text!=="=";)l++;if(l===a.length)throw new Error("cannot locate assignment");let p=cW(t.slice(a[m].start,a[l-1].end));l++;let _=l,h=0;for(;l<a.length;){let g=a[l];if(g.kind==="newline"&&h===0)break;g.kind==="symbol"&&((g.text==="["||g.text==="{")&&h++,(g.text==="]"||g.text==="}")&&h--),l++}if(c.length===1&&p.length===1&&l-_===1){let g=a[_];g.kind==="string"&&!g.multiline&&i.set(c[0]+"."+p[0],g)}}let d=o.map(m=>{let p=i.get(m.section+"."+m.key);if(!p)throw new Error("cannot edit "+m.section+"."+m.key+" in place (multiline, dotted or inline managed layout); edit by hand");return m.line=t.slice(0,p.start).split(/\r\n|\r|\n/).length,{start:p.start,end:p.end,text:Zp(m.newValue)}}).sort((m,p)=>p.start-m.start),u=t;for(let m of d)u=u.slice(0,m.start)+m.text+u.slice(m.end);let f=pn(u);for(let m of r)for(let p of ea)if(f.slots[m]?.[p]!==e[m.toLowerCase()][p])throw new Error("managed-value verification failed");if(!lI(n.document,f.document))throw new Error("unmanaged semantic verification failed");return{ok:!0,text:u,changes:o,absent:s}}catch(n){return{ok:!1,error:n instanceof qe?n.detail:n.message,line:n.line}}}var dI=x(()=>{"use strict";Qp();Gc()});import*as uI from"node:child_process";function uW(t,e){try{let n=e(t,["--version"],{encoding:"utf-8",timeout:5e3});return n.status===0?{found:!0,version:(n.stdout??"").toString().trim().split(/\r?\n/,1)[0]?.trim()||void 0}:n.status===null?{found:!1,failureMode:"not installed"}:{found:!1,failureMode:"runs but failed"}}catch{return{found:!1,failureMode:"not installed"}}}function fI(t,e={}){let n=e.spawnSync===void 0&&process.env[fW]==="1",r=e.spawnSync??uI.spawnSync,s=new Set,o=[];for(let i of t){if(s.has(i))continue;s.add(i);let a=ds[i];if(!a){o.push({provider:i,binary:"<unknown>",found:!1,failureMode:"not installed"});continue}if(n){o.push({provider:i,binary:a,found:!0,version:"(skipped)"});continue}let l=uW(a,r);l.found?o.push({provider:i,binary:a,found:!0,version:l.version}):o.push({provider:i,binary:a,found:!1,failureMode:l.failureMode})}return o}var ds,fW,na=x(()=>{"use strict";ds={claude:"claude",codex:"codex",copilot:"copilot",gemini:"gemini",opencode:"opencode",lmplayer:"lmplayer",qwen:"qwen",agy:"agy",kimi:"kimi",dsh:"dsh",hermes:"hermes",miniplayer:"miniplayer",muse:"muse",pi:"pi"};fW="LMCTL_SKIP_BINARY_CHECK"});import{spawnSync as mW}from"node:child_process";function pI(t){return fo.filter(e=>t.includes(e))}function pW(t,e){if(e.length===0)throw new Error(`No model ids are available for detected provider "${t}"`);if(t!=="claude")return e[0];let n=e.filter(s=>/^claude-[a-z]+-\d+(?:-\d+)?$/.test(s));if(n.length===0)throw new Error("No undated Claude Code model id is available in the catalog");let r=s=>s.match(/-(\d+)(?:-(\d+))?$/).slice(1).map(o=>Number(o??0));return n.reduce((s,o)=>{let i=r(s),a=r(o);return a[0]>i[0]||a[0]===i[0]&&a[1]>i[1]?o:s})}async function hI(t){switch(t){case"codex":{let e=is();if(!e.available)throw new Error(e.reason??"codex returned no models");return e.models}case"agy":{let e=os();if(!e.available)throw new Error(e.reason??"agy returned no models");return e.models}case"kimi":{let e=as();if(!e.available)throw new Error(e.reason??"Kimi config has no models");return e.models}case"claude":{let n=(await Tt()).catalog?.records??[],r=n.flatMap(s=>s.native?.claude_code?[s.native.claude_code]:[]);return r.length?[...new Set(r)]:[...new Set(n.flatMap(s=>{let o=s.source_model_id.split("/").at(-1);return s.provider==="anthropic"&&s.mode==="chat"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(o)?[o]:[]}))]}default:throw new Error(`Unsupported init provider "${t}"`)}}function _I(t,e){let n=t.filter((l,c)=>t.indexOf(l)===c),r=n.length>0?n:["claude"],[s,o=s,i=s]=r,a=l=>({provider:l,model1:pW(l,e[l]??[])});return{provider1:a(s),provider2:a(o),provider3:a(i)}}function gI(t=mW){return fI(fo,{spawnSync:t}).filter(e=>e.found).map(e=>e.provider)}function mI(t){return Zp(t)}function ra(t){let e=(n,r)=>[`[${n}]`,`provider = ${mI(r.provider)}`,`model1 = ${mI(r.model1)}`].join(`
1908
1910
  `);return`# Generated by \`lmctl init\`. This is a STARTING POINT, not a fixed answer --
1909
1911
  # lmctl properties: hierarchical keys such as Provider1.provider, Provider1.model1,
1910
1912
  # and user-defined top-level Env1. edit any value below to change what \`lmctl plan\`/\`lmctl quickrun\` resolve to.
@@ -1927,44 +1929,44 @@ ${e("Provider1",t.provider1)}
1927
1929
  ${e("Provider2",t.provider2)}
1928
1930
 
1929
1931
  ${e("Provider3",t.provider3)}
1930
- `}function wr(t){try{return ta(Mt(process.env,t)).config}catch(e){if(e instanceof qe&&e.kind==="missing")return null;throw e}}function yb(t,e){return cb(t,e)}function Eb(t,e,n={}){let r={...zI(e)},s=n.properties??Object.fromEntries([1,2,3].map(o=>{let i=e["provider"+o];return["Provider"+o,{Provider:i.provider,Model1:i.model1}]}));return KI(t,o=>{if(o.kind==="variable")return Object.hasOwn(r,o.name)?r[o.name]:void 0;if(o.kind==="argument")return n.argv?.[o.index];let i=o.key.split(".");/^Provider[123]$/.test(i[0])&&i.length===2&&["provider","model1"].includes(i[1])&&(i[1]=i[1][0].toUpperCase()+i[1].slice(1));let a=s;for(let d of i){if(!a||typeof a!="object"||!Object.hasOwn(a,d))throw Error("Property '"+o.key+"' is not defined in "+(n.path??"~/.lmctl/init.toml")+"; define it there or run lmctl init");a=a[d]}let l=new Set,c=(d,u)=>{if(d instanceof Date)return d.toISOString();if(d===null||typeof d=="string"||typeof d=="boolean"||typeof d=="number"&&Number.isFinite(d))return d;if(d&&typeof d=="object"&&(Array.isArray(d)||[Object.prototype,null].includes(Object.getPrototypeOf(d)))){if(l.has(d))throw Error("Property '"+u+"' contains a cycle in "+(n.path??"~/.lmctl/init.toml"));l.add(d);try{if(Array.isArray(d))return d.map((m,p)=>c(m,u+"."+p));let f=Object.create(null);for(let[m,p]of Object.entries(d))f[m]=c(p,u+"."+m);return f}finally{l.delete(d)}}throw Error("Property '"+u+"' has an unsupported value type: "+typeof d+" in "+(n.path??"~/.lmctl/init.toml"))};return c(a,o.key)})}var fo,us=x(()=>{"use strict";YI();QI();Gc();Gc();db();lo();zt();na();fo=["claude","codex","agy","kimi"]});import{homedir as hW}from"node:os";function Tb(t,e){let n=new Set;return{text:t.replace(gW,(s,o)=>{let i=o.trim(),a=_W[i];return a===void 0?(n.add(i),s):a(e)}),unknownNames:[...n].sort()}}function wb(t){return{workdir:t.workdir,teamfile:t.teamfile,date:yW(t.date)}}function yW(t){return t.toISOString().slice(0,10)}var _W,gW,vb=x(()=>{"use strict";Be();_W={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>fi(t.teamfile),home:()=>hW(),date:t=>t.date},gW=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var ch={};me(ch,{_setAgyModelsRunnerForTests:()=>bW,_setCatalogSnapshotForTests:()=>IW,_setCodexModelsRunnerForTests:()=>kW,_setLintOpenCodeConfigProbeForTests:()=>RW,_setLintSessiondirFsOpsForTests:()=>NW,_setTeamfileSeedForTests:()=>AW,buildRootTeamRegistrationRow:()=>Ob,lintTeamfileStructured:()=>lh,registerRootTeam:()=>Vc,runLint:()=>vr,runSeed:()=>oa,seedTeamfile:()=>po,sha256Text:()=>Cb,validateMemberSpec:()=>kt});import{createHash as EW}from"node:crypto";import{accessSync as TW,constants as Sb,existsSync as wW,readFileSync as nh,realpathSync as rh,statSync as vW,writeFileSync as Ib}from"node:fs";import{dirname as ms,resolve as kb}from"node:path";function IW(t){sa=t??void 0}function Rb(t){return UI(t,sa!==void 0?{snapshot:sa}:{})}function Lb(t){return FI(t,sa!==void 0?{snapshot:sa}:{})}function bW(t){ih=t??void 0}function kW(t){ah=t??void 0}function AW(t){Ab=t??(async e=>{let{seed:n}=await Promise.resolve().then(()=>(Un(),wp)),r=await n(e);return r.success?{sessionId:r.sessionId,warnings:r.warnings,usage:mn(r)}:{error:r.error??"provider seed failed",errorCode:r.errorCode,usage:mn(r),sessionId:r.sessionId}})}function NW(t){fs=t===null?sh:{...sh,...t}}function RW(t){Nb=t??Ni}async function LW(t,e,n){let r=t.filter(o=>o.teamfile===void 0&&o.provider.trim().toLowerCase()==="opencode"&&o.model!==void 0&&o.model.length>0);return(await Promise.all(r.map(async o=>({member:o,result:await Nb({cwd:o.sessiondir??e,model:o.model,...o.effort!==void 0?{effort:o.effort}:{},...n!==void 0?{env:n}:{}})})))).flatMap(({member:o,result:i})=>i.status==="rejected"?[`[${o.alias}] ${i.option}="${i.value}" rejected by opencode: ${i.error}`]:[])}function xW(t,e){let n=ms(e),r=new Set,s=[];for(let o of t){if(o.teamfile!==void 0)continue;let i=o.sessiondir??n,a=kb(i);if(r.has(a))continue;let l=CW(a);l!==void 0&&(r.add(a),s.push(`${o.alias}: sessiondir ${a} is not writable (seed would fail: ${l}) \u2014 fix permissions or set a writable sessiondir`))}return s}function CW(t){try{if(fs.existsSync(t)){if(!fs.statSync(t).isDirectory())return"ENOTDIR";fs.accessSync(t,Sb.W_OK);return}let e=DW(t);if(e===void 0)return;if(!fs.statSync(e).isDirectory())return"ENOTDIR";fs.accessSync(e,Sb.W_OK);return}catch(e){return MW(e)??"permission check failed"}}function OW(t){let e=kb(t);try{return rh(e)}catch{return e}}function DW(t){let e=t;for(;;){try{if(fs.existsSync(e))return e}catch{return}let n=ms(e);if(n===e)return;e=n}}function MW(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 xb(t,e){let n;try{n=await W(e,l=>Ne(t,l))}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let r;try{r=be(n)}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let s=mi(r,ms(n));e.stderr.write(`notice: checking teamfile and models ...
1931
- `);let o=Fp(r.members,{agyModelsRunner:ih,codexModelsRunner:ah});o.push(...await Rb(r.members)),s.push(...await Lb(r.members));let i=nh(n,"utf8"),a=Tb(i,wb({workdir:ms(n),teamfile:n,date:new Date})).unknownNames;a.length>0&&o.push(`unknown template placeholder${a.length===1?"":"s"}: ${a.map(l=>`{{${l}}}`).join(", ")}`),o.push(...Jf(r.members,ms(n))),o.push(...xW(r.members,n)),o.push(...await LW(r.members,ms(n),e.env));for(let l of s)e.stderr.write(`error: ${l.field}: ${l.message}
1932
+ `}function wr(t){try{return ta(Mt(process.env,t)).config}catch(e){if(e instanceof qe&&e.kind==="missing")return null;throw e}}function yI(t,e){return cI(t,e)}function EI(t,e,n={}){let r={...zb(e)},s=n.properties??Object.fromEntries([1,2,3].map(o=>{let i=e["provider"+o];return["Provider"+o,{Provider:i.provider,Model1:i.model1}]}));return Kb(t,o=>{if(o.kind==="variable")return Object.hasOwn(r,o.name)?r[o.name]:void 0;if(o.kind==="argument")return n.argv?.[o.index];let i=o.key.split(".");/^Provider[123]$/.test(i[0])&&i.length===2&&["provider","model1"].includes(i[1])&&(i[1]=i[1][0].toUpperCase()+i[1].slice(1));let a=s;for(let d of i){if(!a||typeof a!="object"||!Object.hasOwn(a,d))throw Error("Property '"+o.key+"' is not defined in "+(n.path??"~/.lmctl/init.toml")+"; define it there or run lmctl init");a=a[d]}let l=new Set,c=(d,u)=>{if(d instanceof Date)return d.toISOString();if(d===null||typeof d=="string"||typeof d=="boolean"||typeof d=="number"&&Number.isFinite(d))return d;if(d&&typeof d=="object"&&(Array.isArray(d)||[Object.prototype,null].includes(Object.getPrototypeOf(d)))){if(l.has(d))throw Error("Property '"+u+"' contains a cycle in "+(n.path??"~/.lmctl/init.toml"));l.add(d);try{if(Array.isArray(d))return d.map((m,p)=>c(m,u+"."+p));let f=Object.create(null);for(let[m,p]of Object.entries(d))f[m]=c(p,u+"."+m);return f}finally{l.delete(d)}}throw Error("Property '"+u+"' has an unsupported value type: "+typeof d+" in "+(n.path??"~/.lmctl/init.toml"))};return c(a,o.key)})}var fo,us=x(()=>{"use strict";Yb();Qb();Gc();Gc();dI();lo();zt();na();fo=["claude","codex","agy","kimi"]});import{homedir as hW}from"node:os";function TI(t,e){let n=new Set;return{text:t.replace(gW,(s,o)=>{let i=o.trim(),a=_W[i];return a===void 0?(n.add(i),s):a(e)}),unknownNames:[...n].sort()}}function wI(t){return{workdir:t.workdir,teamfile:t.teamfile,date:yW(t.date)}}function yW(t){return t.toISOString().slice(0,10)}var _W,gW,vI=x(()=>{"use strict";Be();_W={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>fi(t.teamfile),home:()=>hW(),date:t=>t.date},gW=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var ch={};me(ch,{_setAgyModelsRunnerForTests:()=>IW,_setCatalogSnapshotForTests:()=>bW,_setCodexModelsRunnerForTests:()=>kW,_setLintOpenCodeConfigProbeForTests:()=>RW,_setLintSessiondirFsOpsForTests:()=>NW,_setTeamfileSeedForTests:()=>AW,buildRootTeamRegistrationRow:()=>OI,lintTeamfileStructured:()=>lh,registerRootTeam:()=>Vc,runLint:()=>vr,runSeed:()=>oa,seedTeamfile:()=>po,sha256Text:()=>CI,validateMemberSpec:()=>kt});import{createHash as EW}from"node:crypto";import{accessSync as TW,constants as SI,existsSync as wW,readFileSync as nh,realpathSync as rh,statSync as vW,writeFileSync as bI}from"node:fs";import{dirname as ms,resolve as kI}from"node:path";function bW(t){sa=t??void 0}function RI(t){return Ub(t,sa!==void 0?{snapshot:sa}:{})}function LI(t){return Fb(t,sa!==void 0?{snapshot:sa}:{})}function IW(t){ih=t??void 0}function kW(t){ah=t??void 0}function AW(t){AI=t??(async e=>{let{seed:n}=await Promise.resolve().then(()=>(Un(),wp)),r=await n(e);return r.success?{sessionId:r.sessionId,warnings:r.warnings,usage:mn(r)}:{error:r.error??"provider seed failed",errorCode:r.errorCode,usage:mn(r),sessionId:r.sessionId}})}function NW(t){fs=t===null?sh:{...sh,...t}}function RW(t){NI=t??Ni}async function LW(t,e,n){let r=t.filter(o=>o.teamfile===void 0&&o.provider.trim().toLowerCase()==="opencode"&&o.model!==void 0&&o.model.length>0);return(await Promise.all(r.map(async o=>({member:o,result:await NI({cwd:o.sessiondir??e,model:o.model,...o.effort!==void 0?{effort:o.effort}:{},...n!==void 0?{env:n}:{}})})))).flatMap(({member:o,result:i})=>i.status==="rejected"?[`[${o.alias}] ${i.option}="${i.value}" rejected by opencode: ${i.error}`]:[])}function xW(t,e){let n=ms(e),r=new Set,s=[];for(let o of t){if(o.teamfile!==void 0)continue;let i=o.sessiondir??n,a=kI(i);if(r.has(a))continue;let l=CW(a);l!==void 0&&(r.add(a),s.push(`${o.alias}: sessiondir ${a} is not writable (seed would fail: ${l}) \u2014 fix permissions or set a writable sessiondir`))}return s}function CW(t){try{if(fs.existsSync(t)){if(!fs.statSync(t).isDirectory())return"ENOTDIR";fs.accessSync(t,SI.W_OK);return}let e=DW(t);if(e===void 0)return;if(!fs.statSync(e).isDirectory())return"ENOTDIR";fs.accessSync(e,SI.W_OK);return}catch(e){return MW(e)??"permission check failed"}}function OW(t){let e=kI(t);try{return rh(e)}catch{return e}}function DW(t){let e=t;for(;;){try{if(fs.existsSync(e))return e}catch{return}let n=ms(e);if(n===e)return;e=n}}function MW(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 xI(t,e){let n;try{n=await W(e,l=>Ne(t,l))}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let r;try{r=Ie(n)}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let s=mi(r,ms(n));e.stderr.write(`notice: checking teamfile and models ...
1933
+ `);let o=Fp(r.members,{agyModelsRunner:ih,codexModelsRunner:ah});o.push(...await RI(r.members)),s.push(...await LI(r.members));let i=nh(n,"utf8"),a=TI(i,wI({workdir:ms(n),teamfile:n,date:new Date})).unknownNames;a.length>0&&o.push(`unknown template placeholder${a.length===1?"":"s"}: ${a.map(l=>`{{${l}}}`).join(", ")}`),o.push(...Jf(r.members,ms(n))),o.push(...xW(r.members,n)),o.push(...await LW(r.members,ms(n),e.env));for(let l of s)e.stderr.write(`error: ${l.field}: ${l.message}
1932
1934
  `);for(let l of r.members)oh([l],e),l.session!==void 0&&l.session.length<mo&&o.push(`${l.alias}: sessionid is shorter than ${mo} chars; run lmctl seed to refresh it`);return{ok:!0,result:{config:r,absTeamfile:n,errors:s,warnings:o}}}async function vr(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(SW),0;let n=ae(t,[],[]);if(n.error!==void 0)return e.stderr.write(`error: ${n.error}
1933
1935
  `),2;if(n.positionals.length!==1)return e.stderr.write(`usage: lmctl lint <teamfile.lmctl>
1934
- `),2;let r=n.positionals[0],s=await xb(r,e);if(!s.ok)return hn(e,s.message);let{errors:o,warnings:i}=s.result;for(let a of i)e.stderr.write(`warning: ${a}
1936
+ `),2;let r=n.positionals[0],s=await xI(r,e);if(!s.ok)return hn(e,s.message);let{errors:o,warnings:i}=s.result;for(let a of i)e.stderr.write(`warning: ${a}
1935
1937
  `);return e.stderr.write(`notice: ${o.length} error${o.length===1?"":"s"}, ${i.length} warning${i.length===1?"":"s"}
1936
1938
  `),o.length>0?1:(e.stdout.write(`ok
1937
- `),0)}function UW(t,e){let n=$W.exec(t);if(n){let s=e.get(n[1].toLowerCase());if(s!==void 0)return{alias:s,message:n[2]}}let r=PW.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 lh(t,e){let n=await xb(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:o}=n.result,i=new Map(r.members.map(c=>[c.alias.toLowerCase(),c.alias])),a=s.map(c=>({alias:i.get(c.field.toLowerCase())??"",message:c.message})),l=o.map(c=>UW(c,i));for(let c of l)e.stderr.write(`warning: ${c.alias?`${c.alias}: `:""}${c.message}
1939
+ `),0)}function UW(t,e){let n=$W.exec(t);if(n){let s=e.get(n[1].toLowerCase());if(s!==void 0)return{alias:s,message:n[2]}}let r=PW.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 lh(t,e){let n=await xI(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:o}=n.result,i=new Map(r.members.map(c=>[c.alias.toLowerCase(),c.alias])),a=s.map(c=>({alias:i.get(c.field.toLowerCase())??"",message:c.message})),l=o.map(c=>UW(c,i));for(let c of l)e.stderr.write(`warning: ${c.alias?`${c.alias}: `:""}${c.message}
1938
1940
  `);return e.stderr.write(`notice: ${a.length} error${a.length===1?"":"s"}, ${l.length} warning${l.length===1?"":"s"}
1939
- `),{status:a.length>0?"error":"ok",errors:a,warnings:l,counts:{errors:a.length,warnings:l.length}}}async function oa(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(eh),0;let n=ae(t,[],[]);return n.error!==void 0?bb(e,n.error,eh):n.positionals.length!==1?bb(e,"expected <teamfile.lmctl>",eh):po(n.positionals[0],e)}function FW(t,e,n,r){if(e.preamble===void 0)return t.toLowerCase()!=="lead"?void 0:Ol({teamfile:n,teamfileContent:r});if(typeof e.preamble=="string")return e.preamble;for(let[s,o]of Object.entries(e.preamble))if(s.toLowerCase()===t.toLowerCase())return o}async function po(t,e,n={}){let r;try{r=await W(e,y=>Ne(t,y))}catch(y){return hn(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let s;try{s=rh(r)}catch(y){return hn(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let o=ms(r),i;try{i=be(r)}catch(y){return hn(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let a=nh(r,"utf8"),l=a.split(`
1941
+ `),{status:a.length>0?"error":"ok",errors:a,warnings:l,counts:{errors:a.length,warnings:l.length}}}async function oa(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(eh),0;let n=ae(t,[],[]);return n.error!==void 0?II(e,n.error,eh):n.positionals.length!==1?II(e,"expected <teamfile.lmctl>",eh):po(n.positionals[0],e)}function FW(t,e,n,r){if(e.preamble===void 0)return t.toLowerCase()!=="lead"?void 0:Ol({teamfile:n,teamfileContent:r});if(typeof e.preamble=="string")return e.preamble;for(let[s,o]of Object.entries(e.preamble))if(s.toLowerCase()===t.toLowerCase())return o}async function po(t,e,n={}){let r;try{r=await W(e,y=>Ne(t,y))}catch(y){return hn(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let s;try{s=rh(r)}catch(y){return hn(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let o=ms(r),i;try{i=Ie(r)}catch(y){return hn(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let a=nh(r,"utf8"),l=a.split(`
1940
1942
  `),c=a,d=jW(l),u=mi(i,o);if(u.length>0){oh(i.members,e);for(let y of u)e.stderr.write(`error: ${y.field}: ${y.message}
1941
1943
  `);return 1}try{Xs(e,i,r)}catch{}oh(i.members,e),e.stderr.write(`notice: checking teamfile and models ...
1942
1944
  `);for(let y of Fp(i.members,{agyModelsRunner:ih,codexModelsRunner:ah}))e.stderr.write(`warning: ${y}
1943
- `);for(let y of await Rb(i.members))e.stderr.write(`warning: ${y}
1945
+ `);for(let y of await RI(i.members))e.stderr.write(`warning: ${y}
1944
1946
  `);for(let y of Jf(i.members,o))e.stderr.write(`warning: ${y}
1945
- `);let f=await Lb(i.members);if(f.length>0){for(let y of f)e.stderr.write(`error: ${y.field}: ${y.message}
1947
+ `);let f=await LI(i.members);if(f.length>0){for(let y of f)e.stderr.write(`error: ${y.field}: ${y.message}
1946
1948
  `);return 1}let m=n.replaceSession;if(m){let y=i.members.find(T=>T.alias.toLowerCase()===m.alias.toLowerCase());if(!y||y.teamfile||y.session!==m.sessionid)return hn(e,"Session binding changed; refresh cancelled.")}let p=0,_=i.members.filter(y=>y.teamfile!==void 0?!1:m?y.alias.toLowerCase()===m.alias.toLowerCase():y.session===void 0||y.session.length<mo);for(let y of _)if(!ui(y.provider))return e.stderr.write(`error: ${y.alias}: invalid provider "${y.provider}"
1947
1949
  `),1;for(let y of i.members){if(n.signal?.aborted)return hn(e,"Seed cancelled before dispatch.");if(y.teamfile!==void 0||m&&y.alias.toLowerCase()!==m.alias.toLowerCase())continue;if(!m&&y.session!==void 0&&y.session.length>=mo){e.stderr.write(`warning: ${y.alias}: existing sessionid preserved; skipping
1948
1950
  `);continue}let T=y.sessiondir??o;e.stderr.write(`${y.alias}: launching ${y.provider} seed session; this can take several seconds
1949
1951
  `);let w=si(e,L=>`${y.alias}: still launching (${L}s elapsed)
1950
1952
  `),S=m?l.map((L,O)=>O===d.get(y.alias.toLowerCase())?L.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,""):L).join(`
1951
1953
  `):l.join(`
1952
- `),I=FW(y.alias,n,r,S),b;try{b=xT(r,y.alias)}catch(L){return w.stop(),hn(e,L instanceof Error?L.message:String(L))}try{let L,O;try{L=await Ab({env:e.env,signal:n.signal,onDispatch:()=>{O??=Wc(e,{provider:y.provider,cwd:T,modelRequested:y.model??null,sessionId:""},"operator",{teamfile:r,alias:y.alias})},provider:y.provider,cwd:T,...y.model!==void 0?{model:y.model}:{},...y.effort!==void 0?{effort:y.effort}:{},...I!==void 0?{prompt:I}:{}}),await O?.finish({status:n.signal?.aborted?"cancelled":L.error!==void 0||!L.sessionId||L.sessionId.length<mo?Ls(L.error??"",L.errorCode==="ABORT_ERR"):"ok",sessionId:L.sessionId,usage:mn(L)})}catch(R){throw await O?.finish(Hc(R,{aborted:n.signal?.aborted||R?.code==="ABORT_ERR"})),R}finally{w.stop()}if(n.signal?.aborted)return hn(e,"Seed cancelled during dispatch.");for(let R of L.warnings??[])e.stderr.write(`warning: ${y.alias}: ${R}
1954
+ `),b=FW(y.alias,n,r,S),I;try{I=xT(r,y.alias)}catch(L){return w.stop(),hn(e,L instanceof Error?L.message:String(L))}try{let L,O;try{L=await AI({env:e.env,signal:n.signal,onDispatch:()=>{O??=Wc(e,{provider:y.provider,cwd:T,modelRequested:y.model??null,sessionId:""},"operator",{teamfile:r,alias:y.alias})},provider:y.provider,cwd:T,...y.model!==void 0?{model:y.model}:{},...y.effort!==void 0?{effort:y.effort}:{},...b!==void 0?{prompt:b}:{}}),await O?.finish({status:n.signal?.aborted?"cancelled":L.error!==void 0||!L.sessionId||L.sessionId.length<mo?Ls(L.error??"",L.errorCode==="ABORT_ERR"):"ok",sessionId:L.sessionId,usage:mn(L)})}catch(R){throw await O?.finish(Hc(R,{aborted:n.signal?.aborted||R?.code==="ABORT_ERR"})),R}finally{w.stop()}if(n.signal?.aborted)return hn(e,"Seed cancelled during dispatch.");for(let R of L.warnings??[])e.stderr.write(`warning: ${y.alias}: ${R}
1953
1955
  `);if(L.error!==void 0||L.sessionId===void 0||L.sessionId.length<mo){let R=`provider did not report a sessionid; no new session was found for ${T} (possible provider workspace/cwd mismatch)`;return e.stderr.write(`error: ${y.alias}: seed failed${L.error!==void 0?`: ${L.error}`:`; ${R}`}
1954
1956
  `),1}let k=d.get(y.alias.toLowerCase());if(k===void 0)return e.stderr.write(`error: ${y.alias}: could not find matching _MEMBER_ line to update
1955
1957
  `),1;let v=OW(T),A=th(l[k],"sessionid",L.sessionId);A=th(A,"sessiondir",v);let N=y.model;if(y.model===void 0){let R;try{R=(await je(L.sessionId,y.provider))?.model}catch{R=void 0}R!==void 0&&R.length>0&&(A=th(A,"model",R),N=R)}if((m||n.guardFile)&&nh(r,"utf8")!==c)return hn(e,`Teamfile changed during seeding; new session ${L.sessionId} was not attached. Existing bindings preserved.`);l[k]=A,p+=1,c=l.join(`
1956
- `),Ib(r,c,"utf8"),n.onSeeded?.({alias:y.alias,provider:y.provider,sessionid:L.sessionId,sessiondir:v,...N!==void 0?{model:N}:{}}),e.stdout.write(`${y.alias}: seeded ${L.sessionId} provider=${y.provider} sessiondir=${v} model=${N?JSON.stringify(N):"default (not reported)"}
1957
- `)}finally{b()}}let h=l.join(`
1958
- `),g=XW(h,rh(r));g!==h&&Ib(r,g,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1959
- `);let E=new Date().toISOString();try{await W(e,y=>{Vc(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return hn(e,y instanceof Error?y.message:String(y))}return 0}function Cb(t){return EW("sha256").update(t).digest("hex")}function Ob(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:Cb(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function Vc(t,e){let n=yl(e.rawText,e.teamfilePath);pi(t,e.teamfilePath,n);let r=Ob(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function jW(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=HW(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function WW(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function HW(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function th(t,e,n){let r=`${e}=${BW(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function BW(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function XW(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1958
+ `),bI(r,c,"utf8"),n.onSeeded?.({alias:y.alias,provider:y.provider,sessionid:L.sessionId,sessiondir:v,...N!==void 0?{model:N}:{}}),e.stdout.write(`${y.alias}: seeded ${L.sessionId} provider=${y.provider} sessiondir=${v} model=${N?JSON.stringify(N):"default (not reported)"}
1959
+ `)}finally{I()}}let h=l.join(`
1960
+ `),g=XW(h,rh(r));g!==h&&bI(r,g,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1961
+ `);let E=new Date().toISOString();try{await W(e,y=>{Vc(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return hn(e,y instanceof Error?y.message:String(y))}return 0}function CI(t){return EW("sha256").update(t).digest("hex")}function OI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:CI(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function Vc(t,e){let n=yl(e.rawText,e.teamfilePath);pi(t,e.teamfilePath,n);let r=OI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function jW(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=HW(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function WW(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function HW(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function th(t,e,n){let r=`${e}=${BW(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function BW(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function XW(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1960
1962
  `),s=r>=0?t.slice(0,r):t,o=r>=0?t.slice(r+1):"";return s===n?t:s.startsWith("#teamfile:")?o.length>0?`${n}
1961
1963
  ${o}`:`${n}
1962
1964
  `:t.length>0?`${n}
1963
1965
  ${t}`:`${n}
1964
1966
  `}function kt(t){if(!WW(t.alias))return`invalid alias "${t.alias}"`;if(!ui(t.provider))return`invalid provider "${t.provider}"`}function hn(t,e){return t.stderr.write(`error: ${e}
1965
- `),1}function bb(t,e,n){return t.stderr.write(`error: ${e}
1967
+ `),1}function II(t,e,n){return t.stderr.write(`error: ${e}
1966
1968
  ${n}`),2}function oh(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_
1967
- `)}var mo,SW,eh,sh,Ab,fs,Nb,ih,ah,sa,$W,PW,_n=x(()=>{"use strict";Ko();Bp();Be();lo();Kf();om();hl();fn();le();rn();vb();Sl();uf();Fe();mo=5,SW=`usage: lmctl lint <teamfile.lmctl>
1969
+ `)}var mo,SW,eh,sh,AI,fs,NI,ih,ah,sa,$W,PW,_n=x(()=>{"use strict";Ko();Bp();Be();lo();Kf();om();hl();fn();le();rn();vI();Sl();uf();Fe();mo=5,SW=`usage: lmctl lint <teamfile.lmctl>
1968
1970
 
1969
1971
  Validate an lmctl teamfile and warn about stale or placeholder session ids.
1970
1972
  For opencode members with model=, lint also asks the local ACP provider to
@@ -2024,7 +2026,7 @@ possibly work, seed reports it as an error and seeds nothing.
2024
2026
  and save it to <file> (lmctl.com curates these, not lmctl itself).
2025
2027
  Refuses to overwrite an existing <file> unless --force is given.
2026
2028
  --script <name> With --save-script, fetch commands/<name>.lms instead of the default
2027
- `,sh={existsSync:wW,statSync:vW,accessSync:TW},Ab=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Un(),wp)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:mn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:mn(n),sessionId:n.sessionId}},fs=sh,Nb=Ni;$W=/^\[([^\]]+)\]\s+(.*)$/s,PW=/^([^:\s][^:]*):\s+(.*)$/s});function Mb(t){return uh[t.trim().toLowerCase()]}function $b(t){let e=t.split(":");if(e.length<2)return{error:`invalid member spec "${t}" \u2014 expected Alias:provider[:model]`};let[n,r]=e,s=e.length>2?e.slice(2).join(":"):void 0;if(n===""||r==="")return{error:`invalid member spec "${t}" \u2014 expected Alias:provider[:model]`};let o=kt({alias:n,provider:r});return o!==void 0?{error:o}:s!==void 0&&s===""?{error:`invalid member spec "${t}" \u2014 empty model`}:{spec:{alias:n,provider:r,...s!==void 0?{model:s}:{}}}}function Db(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function qW(t){return[`_MEMBER_ provider=${t.provider} alias=${Db(t.alias)}`,...t.model!==void 0?[`model=${Db(t.model)}`]:[]].join(" ")}function Sr(t){let{teamName:e,members:n}=t,r=n.map(qW).join(`
2029
+ `,sh={existsSync:wW,statSync:vW,accessSync:TW},AI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Un(),wp)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:mn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:mn(n),sessionId:n.sessionId}},fs=sh,NI=Ni;$W=/^\[([^\]]+)\]\s+(.*)$/s,PW=/^([^:\s][^:]*):\s+(.*)$/s});function MI(t){return uh[t.trim().toLowerCase()]}function $I(t){let e=t.split(":");if(e.length<2)return{error:`invalid member spec "${t}" \u2014 expected Alias:provider[:model]`};let[n,r]=e,s=e.length>2?e.slice(2).join(":"):void 0;if(n===""||r==="")return{error:`invalid member spec "${t}" \u2014 expected Alias:provider[:model]`};let o=kt({alias:n,provider:r});return o!==void 0?{error:o}:s!==void 0&&s===""?{error:`invalid member spec "${t}" \u2014 empty model`}:{spec:{alias:n,provider:r,...s!==void 0?{model:s}:{}}}}function DI(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function qW(t){return[`_MEMBER_ provider=${t.provider} alias=${DI(t.alias)}`,...t.model!==void 0?[`model=${DI(t.model)}`]:[]].join(" ")}function Sr(t){let{teamName:e,members:n}=t,r=n.map(qW).join(`
2028
2030
  `);return`# ${e}
2029
2031
  #
2030
2032
  # This is a starting point, not a finished teamfile -- edit alias/provider/model
@@ -2033,34 +2035,34 @@ possibly work, seed reports it as an error and seeds nothing.
2033
2035
  # Format, and what lint/seed each do: https://lmctl.com/lmctl/docs/manuals/teamfile-format
2034
2036
 
2035
2037
  ${r}
2036
- `}function Ub(t){return t.split(`
2037
- `).map(e=>Pb.test(e)?e.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,"").replace(/^(\s*_MEMBER_)\s+sessionid=(?:"[^"]*"|\S+)\s+/g,"$1 ").replace(/\s+sessiondir=(?:"[^"]*"|\S+)/g,"").replace(/^(\s*_MEMBER_)\s+sessiondir=(?:"[^"]*"|\S+)\s+/g,"$1 "):e).join(`
2038
+ `}function UI(t){return t.split(`
2039
+ `).map(e=>PI.test(e)?e.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,"").replace(/^(\s*_MEMBER_)\s+sessionid=(?:"[^"]*"|\S+)\s+/g,"$1 ").replace(/\s+sessiondir=(?:"[^"]*"|\S+)/g,"").replace(/^(\s*_MEMBER_)\s+sessiondir=(?:"[^"]*"|\S+)\s+/g,"$1 "):e).join(`
2038
2040
  `)}function dh(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function Kc(t){let e=[];for(let n of t.split(`
2039
- `)){if(!Pb.test(n))continue;let r=dh(n,"alias"),s=dh(n,"provider");if(r===void 0||s===void 0)continue;let o=dh(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var uh,Jc,Pb,Yc=x(()=>{"use strict";_n();uh={1:["Lead"],lead:["Lead"],2:["Lead","Reviewer"],"lead-reviewer":["Lead","Reviewer"],3:["Lead","Coder","Reviewer"],"lead-coder-reviewer":["Lead","Coder","Reviewer"]},Jc="1|2|3|lead|lead-reviewer|lead-coder-reviewer";Pb=/^\s*_MEMBER_\s+\S/});var gh={};me(gh,{PROVIDER_NAMES:()=>yo,adoptSession:()=>_h,chooseMember:()=>la,chooseTeamfile:()=>ph,completeTeamfile:()=>Fb,createPromptTeam:()=>hh,field:()=>ho,prepareTeam:()=>aa,setField:()=>Ir});import{existsSync as ia,mkdirSync as fh,readFileSync as zc,readdirSync as GW,statSync as VW,writeFileSync as mh}from"node:fs";import{basename as _o,dirname as Qc,extname as Zc,resolve as go}from"node:path";function ho(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function Ir(t,e,n){if(/["\r\n]/.test(n))throw new Error(`${e} cannot contain quotes or newlines in a teamfile.`);let r=`${e}=${/\s/.test(n)?`"${n}"`:n}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}async function JW(t,e){let n=wr(),r=[...new Set(n?Object.values(n).map(s=>s.provider):[])];for(e.stderr.write(`Providers from lmctl init: ${r.join(", ")||"(none saved)"}; another supported provider may be typed.
2041
+ `)){if(!PI.test(n))continue;let r=dh(n,"alias"),s=dh(n,"provider");if(r===void 0||s===void 0)continue;let o=dh(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var uh,Jc,PI,Yc=x(()=>{"use strict";_n();uh={1:["Lead"],lead:["Lead"],2:["Lead","Reviewer"],"lead-reviewer":["Lead","Reviewer"],3:["Lead","Coder","Reviewer"],"lead-coder-reviewer":["Lead","Coder","Reviewer"]},Jc="1|2|3|lead|lead-reviewer|lead-coder-reviewer";PI=/^\s*_MEMBER_\s+\S/});var gh={};me(gh,{PROVIDER_NAMES:()=>yo,adoptSession:()=>_h,chooseMember:()=>la,chooseTeamfile:()=>ph,completeTeamfile:()=>FI,createPromptTeam:()=>hh,field:()=>ho,prepareTeam:()=>aa,setField:()=>br});import{existsSync as ia,mkdirSync as fh,readFileSync as zc,readdirSync as GW,statSync as VW,writeFileSync as mh}from"node:fs";import{basename as _o,dirname as Qc,extname as Zc,resolve as go}from"node:path";function ho(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function br(t,e,n){if(/["\r\n]/.test(n))throw new Error(`${e} cannot contain quotes or newlines in a teamfile.`);let r=`${e}=${/\s/.test(n)?`"${n}"`:n}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}async function JW(t,e){let n=wr(),r=[...new Set(n?Object.values(n).map(s=>s.provider):[])];for(e.stderr.write(`Providers from lmctl init: ${r.join(", ")||"(none saved)"}; another supported provider may be typed.
2040
2042
  `);;){let s=await t.ask("Provider: ");if(yo.includes(s))return s;e.stderr.write(`Known providers: ${yo.join(", ")}
2041
- `)}}async function Fb(t,e,n,r={},s){let o=ia(t),i=o?zc(t,"utf8"):"",a=i.split(`
2042
- `),l=a.map((m,p)=>/^\s*_MEMBER_(?:\s|$)/.test(m)?p:-1).filter(m=>m>=0);if(!l.length){let m=s?[s]:(await e.ask("Member aliases [Lead] (comma separated): ")||"Lead").split(",").map(p=>p.trim());for(let p of m)l.push(a.length),a.push(Ir("_MEMBER_","alias",p))}let c=new Set;for(let m of l){let p=a[m],_=ho(p,"alias");if(_||(_=await e.ask(`Alias for member on line ${m+1}: `)),!/^[A-Za-z][A-Za-z0-9_-]*$/.test(_)||c.has(_.toLowerCase()))throw new Error(`Invalid or duplicate alias: ${_}`);if(c.add(_.toLowerCase()),p=Ir(p,"alias",_),!ho(p,"teamfile")){let h=ho(p,"provider");h||(h=await JW(e,n));let g=kt({alias:_,provider:h});if(g)throw new Error(g);if(p=Ir(p,"provider",h),!ho(p,"model")&&!ho(p,"sessionid")){let E=await(r.models??co)(h).catch(()=>[]);E.length&&n.stderr.write(`Models for ${h}:
2043
+ `)}}async function FI(t,e,n,r={},s){let o=ia(t),i=o?zc(t,"utf8"):"",a=i.split(`
2044
+ `),l=a.map((m,p)=>/^\s*_MEMBER_(?:\s|$)/.test(m)?p:-1).filter(m=>m>=0);if(!l.length){let m=s?[s]:(await e.ask("Member aliases [Lead] (comma separated): ")||"Lead").split(",").map(p=>p.trim());for(let p of m)l.push(a.length),a.push(br("_MEMBER_","alias",p))}let c=new Set;for(let m of l){let p=a[m],_=ho(p,"alias");if(_||(_=await e.ask(`Alias for member on line ${m+1}: `)),!/^[A-Za-z][A-Za-z0-9_-]*$/.test(_)||c.has(_.toLowerCase()))throw new Error(`Invalid or duplicate alias: ${_}`);if(c.add(_.toLowerCase()),p=br(p,"alias",_),!ho(p,"teamfile")){let h=ho(p,"provider");h||(h=await JW(e,n));let g=kt({alias:_,provider:h});if(g)throw new Error(g);if(p=br(p,"provider",h),!ho(p,"model")&&!ho(p,"sessionid")){let E=await(r.models??co)(h).catch(()=>[]);E.length&&n.stderr.write(`Models for ${h}:
2043
2045
  ${E.map(T=>` ${T}`).join(`
2044
2046
  `)}
2045
- `);let y=await e.ask(`Model for ${_} (blank for provider default): `);y&&(p=Ir(p,"model",y))}}a[m]=p}let d=a.join(`
2047
+ `);let y=await e.ask(`Model for ${_} (blank for provider default): `);y&&(p=br(p,"model",y))}}a[m]=p}let d=a.join(`
2046
2048
  `),u=Cn(d,_o(t)),f=mi(u,Qc(t));if(f.length)throw new Error(f.map(m=>m.message).join(`
2047
2049
  `));if(o||(d=Sr({teamName:_o(t,Zc(t)),members:u.members})),d!==i){if(o&&zc(t,"utf8")!==i)throw new Error("Teamfile changed while completing it; nothing was written.");fh(Qc(t),{recursive:!0}),mh(t,d.endsWith(`
2048
2050
  `)?d:`${d}
2049
2051
  `,o?{encoding:"utf8"}:{encoding:"utf8",flag:"wx"}),n.stderr.write(`Wrote ${t}
2050
- `)}}async function aa(t,e,n,r={},s){if(!xe(t))throw new Error("Expected a .lmctl or .lmc teamfile.");let o=ia(t)?await(r.lint??vr)([t],n):0,i=ia(t)?be(t):null,a=!i||!i.members.length||i.parseErrors.length>0||i.members.some(d=>!d.teamfile&&!d.model&&!d.session);a&&await Fb(t,e,n,r,s);let l=a?await(r.lint??vr)([t],n):o;return l!==0?l:be(t).members.some(d=>!d.teamfile&&!d.session)?r.seed?r.seed([t],n):po(t,n,{guardFile:!0}):0}async function ph(t,e){let n=GW(e).filter(r=>xe(r)&&VW(go(e,r)).isFile()).sort().map(r=>go(e,r));return n.length===1?n[0]:n.length>1?t.choose("Teamfile:",n):go(e,await t.ask("Teamfile path: "))}async function la(t,e,n){let r=be(t).members.map(s=>s.alias);if(e){let s=r.filter(i=>i.toLowerCase()===e.toLowerCase()),o=s.length?s:r.filter(i=>i.toLowerCase().startsWith(e.toLowerCase()));return o.length?n.choose(`Member matching ${e}:`,o):n.choose(`No member matches ${e}. Choose a member:`,r,!0)}return n.choose("Member:",r)}async function hh(t,e,n,r){let s=go(n,await r.ask(`Teamfile [${t}.lmc]: `)||`${t}.lmc`);if(!xe(s))throw new Error("Choose a .lmc or .lmctl teamfile.");if(ia(s))throw new Error(`Teamfile already exists: ${s}. Use its alias to prompt the existing member.`);let o=await r.ask("Alias [Lead]: ")||"Lead",i=kt({alias:o,provider:t});if(i)throw new Error(i);Ir("_MEMBER_","model",e);let a=Sr({teamName:_o(s,Zc(s)),members:[{alias:o,provider:t,model:e}]});return fh(Qc(s),{recursive:!0}),mh(s,a,{encoding:"utf8",flag:"wx"}),{file:s,alias:o}}async function _h(t,e,n,r,s,o,i){if(!s.interactive)return o.stdout.write(`Session is not registered. Run interactively to create a teamfile for it.
2052
+ `)}}async function aa(t,e,n,r={},s){if(!xe(t))throw new Error("Expected a .lmctl or .lmc teamfile.");let o=ia(t)?await(r.lint??vr)([t],n):0,i=ia(t)?Ie(t):null,a=!i||!i.members.length||i.parseErrors.length>0||i.members.some(d=>!d.teamfile&&!d.model&&!d.session);a&&await FI(t,e,n,r,s);let l=a?await(r.lint??vr)([t],n):o;return l!==0?l:Ie(t).members.some(d=>!d.teamfile&&!d.session)?r.seed?r.seed([t],n):po(t,n,{guardFile:!0}):0}async function ph(t,e){let n=GW(e).filter(r=>xe(r)&&VW(go(e,r)).isFile()).sort().map(r=>go(e,r));return n.length===1?n[0]:n.length>1?t.choose("Teamfile:",n):go(e,await t.ask("Teamfile path: "))}async function la(t,e,n){let r=Ie(t).members.map(s=>s.alias);if(e){let s=r.filter(i=>i.toLowerCase()===e.toLowerCase()),o=s.length?s:r.filter(i=>i.toLowerCase().startsWith(e.toLowerCase()));return o.length?n.choose(`Member matching ${e}:`,o):n.choose(`No member matches ${e}. Choose a member:`,r,!0)}return n.choose("Member:",r)}async function hh(t,e,n,r){let s=go(n,await r.ask(`Teamfile [${t}.lmc]: `)||`${t}.lmc`);if(!xe(s))throw new Error("Choose a .lmc or .lmctl teamfile.");if(ia(s))throw new Error(`Teamfile already exists: ${s}. Use its alias to prompt the existing member.`);let o=await r.ask("Alias [Lead]: ")||"Lead",i=kt({alias:o,provider:t});if(i)throw new Error(i);br("_MEMBER_","model",e);let a=Sr({teamName:_o(s,Zc(s)),members:[{alias:o,provider:t,model:e}]});return fh(Qc(s),{recursive:!0}),mh(s,a,{encoding:"utf8",flag:"wx"}),{file:s,alias:o}}async function _h(t,e,n,r,s,o,i){if(!s.interactive)return o.stdout.write(`Session is not registered. Run interactively to create a teamfile for it.
2051
2053
  `),null;if(!await s.confirm("Create a teamfile and alias for this existing session?"))return null;let a=await s.ask(`Teamfile [${e}.lmc]: `)||`${e}.lmc`,l=go(r,a);if(!xe(l))throw new Error("Choose a .lmc or .lmctl teamfile.");let c=ia(l)?zc(l,"utf8"):void 0,d=await s.ask("Alias [Lead]: ")||"Lead",u=kt({alias:d,provider:e});if(u)throw new Error(u);if(c!==void 0&&!await s.confirm(`Overwrite ${l}?`))return null;let f=Sr({teamName:_o(l,Zc(l)),members:[{alias:d,provider:e,...n?{model:n}:{}}]});if(f=f.split(`
2052
- `).map(m=>m.startsWith("_MEMBER_")?Ir(m,"sessionid",t):m).join(`
2054
+ `).map(m=>m.startsWith("_MEMBER_")?br(m,"sessionid",t):m).join(`
2053
2055
  `),i||(i=go(r,await s.ask(`Session directory [${r}]: `)||r)),i&&(f=f.split(`
2054
- `).map(m=>m.startsWith("_MEMBER_")?Ir(m,"sessiondir",i):m).join(`
2056
+ `).map(m=>m.startsWith("_MEMBER_")?br(m,"sessiondir",i):m).join(`
2055
2057
  `)),await W(o,m=>pi(m,l,Cn(f,_o(l)))),c!==void 0&&zc(l,"utf8")!==c)throw new Error("Teamfile changed; adoption cancelled.");return fh(Qc(l),{recursive:!0}),mh(l,f,c===void 0?{encoding:"utf8",flag:"wx"}:{encoding:"utf8"}),await W(o,m=>Vc(m,{teamfilePath:Ne(l),name:_o(l,Zc(l)),rawText:f,now:new Date().toISOString()})),o.stdout.write(`Registered ${l}:${d} -> ${t}
2056
2058
  `),{file:l,alias:d}}var yo,ed=x(()=>{"use strict";rn();Be();us();na();Fc();_n();Yc();le();yo=Object.keys(ds)});var Th={};me(Th,{resolvePromptInput:()=>yh,runChat:()=>Eh});import{readFileSync as KW,openSync as YW}from"node:fs";import{homedir as zW}from"node:os";import{join as QW}from"node:path";import{spawn as ZW}from"node:child_process";function tH(t){let[e,n]=t;if(!e)return t;if(!On(e)){let r=e.indexOf(":");if(r>0&&hi(e.slice(0,r))&&xe(e.slice(r+1)))return[`${e.slice(r+1)}:${e.slice(0,r)}`,...t.slice(1)]}return hi(e)&&n&&xe(n)?[n,e,...t.slice(2)]:t}function nH(t){return QW(zW(),".lmctl",`daemonize-${t}.log`)}function rH(t){let e=process.stdout.isTTY===!0,n=process.stderr.isTTY===!0;if(!e&&!n)return{stdio:["ignore","inherit","inherit"],logPath:null};let r=nH(t),s=YW(r,"a");return{stdio:["ignore",e?s:"inherit",n?s:"inherit"],logPath:r}}function sH(t,e){let{stdio:n,logPath:r}=rH(process.pid),s=ZW(process.argv[0],[process.argv[1],"chat",...t],{detached:!0,stdio:n,env:{...process.env,[td]:"1"}});return s.on("error",o=>{e.stderr.write(`error: --daemonize failed to spawn the detached child: ${o.message}
2057
2059
  `)}),s.unref(),e.stdout.write(`${JSON.stringify({status:"detached",pid:s.pid??null,logPath:r})}
2058
- `),0}async function Eh(t,e={stdout:process.stdout,stderr:process.stderr}){t.includes("--json")&&(e=sl(e));let n=e.env??process.env;if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(`${jb}
2060
+ `),0}async function Eh(t,e={stdout:process.stdout,stderr:process.stderr}){t.includes("--json")&&(e=sl(e));let n=e.env??process.env;if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(`${jI}
2059
2061
  `),0;if(t.includes("--daemonize")&&n[td]!=="1")return sH(t.filter(i=>i!=="--daemonize"),e);n[td]==="1"&&(ol(e),delete process.env[td]);let r=oH(t);if(typeof r=="string")return e.stderr.write(`error: ${r}
2060
- ${jb}
2062
+ ${jI}
2061
2063
  `),2;if(r.provider!==void 0){if(r.promptFile!==void 0){let a=await yh(r.promptFile,e);if(typeof a!="string")return e.stderr.write(`error: ${a.error}
2062
2064
  `),2;r.prompt=a}if(!r.prompt)return e.stderr.write(`error: prompt text is required with --provider (or provide --prompt-file)
2063
- `),2;let{runFreshPrompt:i}=await Promise.resolve().then(()=>(VI(),GI));return i({provider:r.provider,model:r.model,...r.sessiondir!==void 0?{sessiondir:r.sessiondir}:{},prompt:r.prompt,permissionMode:r.permissionMode,...r.json===!0?{json:!0}:{},...r.verbose===!0?{verbose:!0}:{}},e)}let s=new Fn(e);try{let i=On(r.target??"");if(i){if(r.alias&&r.alias!==i.alias)throw new Error("Specify one teamfile and alias.");r.target=i.teamfile,r.alias=i.alias}if(r.target&&!xe(r.target))throw new Error("prompt is teamfile-only: a teamfile and alias are required.");if((!r.target||!r.alias)&&!s.interactive)throw new Error('A teamfile and alias are required. Use: lmctl prompt <teamfile> <alias> "<prompt>"');if(!r.target){let{chooseTeamfile:a}=await Promise.resolve().then(()=>(ed(),gh));r.target=await a(s,e.cwd??process.cwd())}if(!xe(r.target))throw new Error("Choose a .lmctl or .lmc teamfile.");if(!r.alias){let{chooseMember:a}=await Promise.resolve().then(()=>(ed(),gh));r.alias=await a(r.target,void 0,s)}if(!r.promptFile&&!r.prompt){if(!s.interactive)throw new Error(`prompt text is required. Use: lmctl prompt ${r.target} ${r.alias} "<prompt>"`);if(r.prompt=await s.ask(`Prompt for ${r.target} ${r.alias}: `),!r.prompt)throw new Error("prompt text is required")}}catch(i){return e.stderr.write(`error: ${i instanceof Error?i.message:String(i)}
2065
+ `),2;let{runFreshPrompt:i}=await Promise.resolve().then(()=>(Vb(),Gb));return i({provider:r.provider,model:r.model,...r.sessiondir!==void 0?{sessiondir:r.sessiondir}:{},prompt:r.prompt,permissionMode:r.permissionMode,...r.json===!0?{json:!0}:{},...r.verbose===!0?{verbose:!0}:{}},e)}let s=new Fn(e);try{let i=On(r.target??"");if(i){if(r.alias&&r.alias!==i.alias)throw new Error("Specify one teamfile and alias.");r.target=i.teamfile,r.alias=i.alias}if(r.target&&!xe(r.target))throw new Error("prompt is teamfile-only: a teamfile and alias are required.");if((!r.target||!r.alias)&&!s.interactive)throw new Error('A teamfile and alias are required. Use: lmctl prompt <teamfile> <alias> "<prompt>"');if(!r.target){let{chooseTeamfile:a}=await Promise.resolve().then(()=>(ed(),gh));r.target=await a(s,e.cwd??process.cwd())}if(!xe(r.target))throw new Error("Choose a .lmctl or .lmc teamfile.");if(!r.alias){let{chooseMember:a}=await Promise.resolve().then(()=>(ed(),gh));r.alias=await a(r.target,void 0,s)}if(!r.promptFile&&!r.prompt){if(!s.interactive)throw new Error(`prompt text is required. Use: lmctl prompt ${r.target} ${r.alias} "<prompt>"`);if(r.prompt=await s.ask(`Prompt for ${r.target} ${r.alias}: `),!r.prompt)throw new Error("prompt text is required")}}catch(i){return e.stderr.write(`error: ${i instanceof Error?i.message:String(i)}
2064
2066
  `),2}finally{s.close()}if(r.promptFile!==void 0){let i=await yh(r.promptFile,e);if(typeof i!="string")return e.stderr.write(`error: ${i.error}
2065
2067
  `),2;r.prompt=i}let o=sn(eH,{target:r.target,alias:r.alias,flags:{}});if(o.mode==="error")return e.stderr.write(`error: ${o.message}
2066
2068
  `),2;if(o.mode==="managed")return 2;if(o.mode==="ai-team"){if(o.alias===void 0)return e.stderr.write(`error: prompt: alias required (internal)
@@ -2068,7 +2070,7 @@ ${jb}
2068
2070
  `);let i=eT(e,{teamfile:o.teamfile,alias:o.alias}),a=new AbortController,l,c,d=_=>{l===void 0&&(l=_==="SIGINT"?130:_==="SIGTERM"?143:129,a.abort(_),c=setTimeout(()=>process.exit(l),1e3),c.unref())},u=()=>d("SIGINT"),f=()=>d("SIGTERM"),m=()=>d("SIGHUP");process.on("SIGINT",u),process.on("SIGTERM",f),process.on("SIGHUP",m);let p;try{p=await Lc({signal:a.signal,teamfile:o.teamfile,alias:o.alias,prompt:r.prompt,permissionMode:r.permissionMode,idleTimeoutMs:0,...r.rootFlag!==void 0?{rootFlag:r.rootFlag}:{},env:n,io:e,onEvent:_=>{i.poke(_),!(r.json===!0&&_.kind==="delta")&&lH(e,_,r.verbose===!0)},...r.json===!0?{onAccepted:_=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:_})}
2069
2071
  `)}}:{}})}finally{i.stop(),c!==void 0&&clearTimeout(c),process.removeListener("SIGINT",u),process.removeListener("SIGTERM",f),process.removeListener("SIGHUP",m)}return l!==void 0?l:r.json===!0?p.status==="busy"?(e.stdout.write(`${JSON.stringify({status:"busy",message:p.message,teamChatLogId:p.teamChatLogId})}
2070
2072
  `),1):p.status==="error"?(e.stdout.write(`${JSON.stringify({status:"error",errorKind:p.errorKind,message:p.message,teamChatLogId:p.teamChatLogId,...p.messageId===null?{}:{message_id:p.messageId}})}
2071
- `),1):(e.stdout.write(`${JSON.stringify({status:p.status,replyText:p.replyText,teamChatLogId:p.teamChatLogId,...p.messageId===null?{}:{message_id:p.messageId},turn_finished:!0,note:Wb(o.alias)})}
2073
+ `),1):(e.stdout.write(`${JSON.stringify({status:p.status,replyText:p.replyText,teamChatLogId:p.teamChatLogId,...p.messageId===null?{}:{message_id:p.messageId},turn_finished:!0,note:WI(o.alias)})}
2072
2074
  `),p.status==="stalled"||p.status==="empty"?1:0):p.status==="busy"?(e.stderr.write(`error: ${p.message}
2073
2075
  `),1):p.status==="error"?(p.errorKind==="cycle"?e.stderr.write(`${p.message}
2074
2076
  `):e.stderr.write(`error: ${p.message}
@@ -2077,32 +2079,32 @@ ${jb}
2077
2079
  `)||e.stdout.write(`
2078
2080
  `):e.stdout.write(`${p.replyText}${p.replyText.endsWith(`
2079
2081
  `)?"":`
2080
- `}`),e.stderr.write(`note: ${Wb(o.alias)}
2081
- `),p.status==="stalled"?1:0)}return 2}function Wb(t){return`${t}'s turn has finished and exited; resubmit \`lmctl prompt\` to continue (no persistent session is left running)`}function oH(t){let e=[],n="yolo",r,s,o,i,a,l=!1,c=!1;for(let p=0;p<t.length;p+=1){let _=t[p];if(_==="--permission-mode"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --permission-mode";if(h!=="plan"&&h!=="yolo")return`--permission-mode must be one of plan|yolo (got "${h}")`;n=h;continue}if(_==="--from"||_.startsWith("--from="))return EI("prompt");if(_.startsWith("I_am="))return`unknown argument: ${_}`;if(_==="--root"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --root";r=h;continue}if(_==="--prompt-file"){let h=t[++p];if(h===void 0||h!=="-"&&h.startsWith("--"))return"missing value for --prompt-file";s=h;continue}if(_==="--provider"||_==="--model"||_==="--sessiondir"){let h=t[++p];if(h===void 0||h.startsWith("--"))return`missing value for ${_}`;_==="--provider"?o=h:_==="--model"?i=h:a=h;continue}if(_==="--force"||_.startsWith("--force="))return"unknown option --force (a dead holder auto-reclaims; for a live holder use lmctl prompt)";if(_==="--json"){l=!0;continue}if(_==="--verbose"){c=!0;continue}if(_.startsWith("--"))return`unknown flag: ${_}`;e.push(_)}if(o===void 0&&(e=tH(e)),o!==void 0){if(e.length>(s===void 0?1:0))return"--provider fresh mode cannot be combined with a teamfile or alias; provide one prompt or --prompt-file";if(i===void 0)return"--model is required with --provider"}else if(i!==void 0||a!==void 0)return"--model and --sessiondir require --provider";if(o!==void 0){let p={prompt:s===void 0?e[0]??"":"",permissionMode:n};return s!==void 0&&(p.promptFile=s),l&&(p.json=!0),c&&(p.verbose=!0),p.provider=o,p.model=i,a!==void 0&&(p.sessiondir=a),p}let d,u,f="";if(s!==void 0){if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],u=e[1];else return"--prompt-file is mutually exclusive with a positional prompt; pass one or the other";f=""}else if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],xe(d)?u=e[1]:f=e[1];else if(e.length===3)d=e[0],u=e[1],f=e[2];else return`too many positionals (${e.length}); expected at most <teamfile> <alias> <prompt>`;let m={prompt:f,permissionMode:n};return d!==void 0&&(m.target=d),u!==void 0&&(m.alias=u),r!==void 0&&(m.rootFlag=r),s!==void 0&&(m.promptFile=s),l&&(m.json=l),c&&(m.verbose=c),o!==void 0&&(m.provider=o),i!==void 0&&(m.model=i),a!==void 0&&(m.sessiondir=a),m}async function yh(t,e,n=process.stdin){let r;try{r=t==="-"?await iH(n):KW(t,"utf8")}catch(o){let i=o instanceof Error?o.message:String(o);return{error:`--prompt-file ${t}: ${i}`}}let s=r.endsWith(`\r
2082
+ `}`),e.stderr.write(`note: ${WI(o.alias)}
2083
+ `),p.status==="stalled"?1:0)}return 2}function WI(t){return`${t}'s turn has finished and exited; resubmit \`lmctl prompt\` to continue (no persistent session is left running)`}function oH(t){let e=[],n="yolo",r,s,o,i,a,l=!1,c=!1;for(let p=0;p<t.length;p+=1){let _=t[p];if(_==="--permission-mode"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --permission-mode";if(h!=="plan"&&h!=="yolo")return`--permission-mode must be one of plan|yolo (got "${h}")`;n=h;continue}if(_==="--from"||_.startsWith("--from="))return Eb("prompt");if(_.startsWith("I_am="))return`unknown argument: ${_}`;if(_==="--root"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --root";r=h;continue}if(_==="--prompt-file"){let h=t[++p];if(h===void 0||h!=="-"&&h.startsWith("--"))return"missing value for --prompt-file";s=h;continue}if(_==="--provider"||_==="--model"||_==="--sessiondir"){let h=t[++p];if(h===void 0||h.startsWith("--"))return`missing value for ${_}`;_==="--provider"?o=h:_==="--model"?i=h:a=h;continue}if(_==="--force"||_.startsWith("--force="))return"unknown option --force (a dead holder auto-reclaims; for a live holder use lmctl prompt)";if(_==="--json"){l=!0;continue}if(_==="--verbose"){c=!0;continue}if(_.startsWith("--"))return`unknown flag: ${_}`;e.push(_)}if(o===void 0&&(e=tH(e)),o!==void 0){if(e.length>(s===void 0?1:0))return"--provider fresh mode cannot be combined with a teamfile or alias; provide one prompt or --prompt-file";if(i===void 0)return"--model is required with --provider"}else if(i!==void 0||a!==void 0)return"--model and --sessiondir require --provider";if(o!==void 0){let p={prompt:s===void 0?e[0]??"":"",permissionMode:n};return s!==void 0&&(p.promptFile=s),l&&(p.json=!0),c&&(p.verbose=!0),p.provider=o,p.model=i,a!==void 0&&(p.sessiondir=a),p}let d,u,f="";if(s!==void 0){if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],u=e[1];else return"--prompt-file is mutually exclusive with a positional prompt; pass one or the other";f=""}else if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],xe(d)?u=e[1]:f=e[1];else if(e.length===3)d=e[0],u=e[1],f=e[2];else return`too many positionals (${e.length}); expected at most <teamfile> <alias> <prompt>`;let m={prompt:f,permissionMode:n};return d!==void 0&&(m.target=d),u!==void 0&&(m.alias=u),r!==void 0&&(m.rootFlag=r),s!==void 0&&(m.promptFile=s),l&&(m.json=l),c&&(m.verbose=c),o!==void 0&&(m.provider=o),i!==void 0&&(m.model=i),a!==void 0&&(m.sessiondir=a),m}async function yh(t,e,n=process.stdin){let r;try{r=t==="-"?await iH(n):KW(t,"utf8")}catch(o){let i=o instanceof Error?o.message:String(o);return{error:`--prompt-file ${t}: ${i}`}}let s=r.endsWith(`\r
2082
2084
  `)?r.slice(0,-2):r.endsWith(`
2083
2085
  `)?r.slice(0,-1):r;return s.length===0?{error:`--prompt-file ${t}: file is empty; a prompt is required`}:s}async function iH(t){let e=[];for await(let n of t)e.push(typeof n=="string"?Buffer.from(n,"utf8"):n);return Buffer.concat(e).toString("utf8")}function aH(t,e,n,r=!1){if(n.kind!=="tool_use"&&n.kind!=="tool_result"&&n.kind!=="api_retry")return;let s=n.kind==="tool_use"?`[${e}] tool_use ${n.tool??"tool"}${n.summary?`: ${n.summary}`:""}`:n.kind==="tool_result"?`[${e}] tool_result${n.status?` ${n.status}`:""}${n.summary?`: ${n.summary}`:""}`:`[${e}] api_retry${n.summary?`: ${n.summary}`:""}`;U({event:"chat_progress",alias:e,progress_kind:n.kind,line:s}),r&&t.stderr.write(`${s}
2084
- `)}function lH(t,e,n=!1){e.kind==="delta"?t.stdout.write(e.chunk):e.kind==="progress"?aH(t,e.alias,e.event,n):t.stderr.write(e.message)}var eH,jb,td,nd=x(()=>{"use strict";Cc();nt();Be();nt();le();nt();xp();Gi();re();le();eH={name:"prompt",allowsBareTeamfile:!1,supportsRaw:!1},jb=`usage: lmctl prompt <teamfile> <alias> "<prompt>" [--json] [--verbose]
2086
+ `)}function lH(t,e,n=!1){e.kind==="delta"?t.stdout.write(e.chunk):e.kind==="progress"?aH(t,e.alias,e.event,n):t.stderr.write(e.message)}var eH,jI,td,nd=x(()=>{"use strict";Cc();nt();Be();nt();le();nt();xp();Gi();re();le();eH={name:"prompt",allowsBareTeamfile:!1,supportsRaw:!1},jI=`usage: lmctl prompt <teamfile> <alias> "<prompt>" [--json] [--verbose]
2085
2087
  lmctl prompt <teamfile> <alias> --prompt-file <file-path> [--json] [--verbose]
2086
2088
 
2087
2089
  lmctl prompt --provider <name> --model <model> "<prompt>" [--sessiondir <dir>] [--json] [--verbose]
2088
2090
  lmctl prompt --provider <name> --model <model> --prompt-file <file-path> [--sessiondir <dir>] [--json] [--verbose]
2089
2091
 
2090
2092
  --json Emit JSON results.
2091
- --verbose Show provider progress on stderr.`;td="LMCTL_CHAT_DAEMONIZED"});import{spawn as cH}from"node:child_process";import{accessSync as Xb,closeSync as dH,constants as qb,lstatSync as uH,openSync as fH,readFileSync as mH,readSync as pH,realpathSync as hH,statSync as Gb}from"node:fs";import{basename as wh,dirname as ps,delimiter as _H,resolve as rd,join as Eo}from"node:path";import{fileURLToPath as gH}from"node:url";import{constants as Hb}from"node:os";import*as Vb from"node:path";function vh(t){if(Xb(t,qb.X_OK),!Gb(t).isFile())throw Error("not a file");return hH(t)}function Jb(t){try{let e=fH(t,"r");try{let n=Buffer.alloc(2048);return n.subarray(0,pH(e,n,0,n.length,0)).toString("utf8").match(/lmscript-shim-protocol\s+(\d+)/)?.[1]}finally{dH(e)}}catch{return}}function Bb(t){return Jb(t)===EH.split(" ").at(-1)}function TH(t,e=rd(ps(gH(import.meta.url)),"../../bin"),n=process.cwd(),r=process.argv[1]){if(t.LMSCRIPT_BIN){let _=rd(n,t.LMSCRIPT_BIN),h;try{h=vh(_)}catch{throw Error(`LMSCRIPT_BIN is set to ${_}, which is not an executable file; correct it, or unset it to use the sibling binary`)}let g=Jb(h);if(g!==void 0&&g!=="2")throw Error(`LMSCRIPT_BIN ${_} declares protocol ${g}; this shim requires protocol 2`);return h}let s=[],o=ps(e),i=ps(o),a;try{let _=JSON.parse(mH(Eo(i,"package.json"),"utf8"));a=Array.isArray(_.workspaces)?_.workspaces:_.workspaces?.packages}catch{}let l=_=>Array.isArray(a)&&a.some(h=>typeof h=="string"&&yH(_,h.replace(/^\.\//,"").replace(/\/$/,""))),c=l(wh(o))&&l("lmscript"),d=_=>{try{return uH(_),!0}catch(h){if(h.code==="ENOENT")return!1;throw h}},u=_=>{let h;try{h=vh(_)}catch{throw Error(`Standalone lmscript sibling ${_} is not an executable file; repair the sibling instead of falling through to another copy`)}if(!Bb(h))throw Error(`Standalone lmscript sibling ${_} is not a compatible lmscript (requires protocol 2)`);return h};if(c){let _=Eo(i,"lmscript","bin","lmscript"),h=`npm run build --prefix ${i}`;if(!d(_))throw Error(`Standalone lmscript workspace sibling ${_} is missing; run ${h}`);let g;try{g=u(_)}catch(y){throw Error(`${y instanceof Error?y.message:String(y)}; run ${h}`)}let E=Eo(i,"lmscript","dist","runner.js");try{if(Xb(E,qb.R_OK),!Gb(E).isFile())throw Error("not a file")}catch{throw Error(`Standalone lmscript sibling found but ${E} is missing or not a readable file; run ${h}`)}return g}let f=ps(o),m=wh(f)==="node_modules"?f:wh(ps(f))==="node_modules"?ps(f):void 0,p=[Eo(e,"lmscript"),...m?[Eo(m,"lmscript","bin","lmscript")]:[],...r?[Eo(ps(rd(n,r)),"lmscript")]:[]];for(let _ of new Set(p)){if(d(_))return u(_);s.push(_)}for(let _ of new Set((t.PATH??"").split(_H).filter(Boolean).map(h=>rd(n,h,"lmscript")))){let h;try{h=vh(_)}catch{s.push(_);continue}if(Bb(h))return h;s.push(_+" (not a compatible lmscript)")}throw Error("Standalone lmscript not found; set LMSCRIPT_BIN or install the sibling binary. Tried: "+s.join(", "))}async function hs(t,e){let n={...process.env,...e.env},r=e.cwd??process.cwd(),s;try{s=TH(n,void 0,r)}catch(o){return e.stderr.write("error: "+String(o.message)+`
2093
+ --verbose Show provider progress on stderr.`;td="LMCTL_CHAT_DAEMONIZED"});import{spawn as cH}from"node:child_process";import{accessSync as XI,closeSync as dH,constants as qI,lstatSync as uH,openSync as fH,readFileSync as mH,readSync as pH,realpathSync as hH,statSync as GI}from"node:fs";import{basename as wh,dirname as ps,delimiter as _H,resolve as rd,join as Eo}from"node:path";import{fileURLToPath as gH}from"node:url";import{constants as HI}from"node:os";import*as VI from"node:path";function vh(t){if(XI(t,qI.X_OK),!GI(t).isFile())throw Error("not a file");return hH(t)}function JI(t){try{let e=fH(t,"r");try{let n=Buffer.alloc(2048);return n.subarray(0,pH(e,n,0,n.length,0)).toString("utf8").match(/lmscript-shim-protocol\s+(\d+)/)?.[1]}finally{dH(e)}}catch{return}}function BI(t){return JI(t)===EH.split(" ").at(-1)}function TH(t,e=rd(ps(gH(import.meta.url)),"../../bin"),n=process.cwd(),r=process.argv[1]){if(t.LMSCRIPT_BIN){let _=rd(n,t.LMSCRIPT_BIN),h;try{h=vh(_)}catch{throw Error(`LMSCRIPT_BIN is set to ${_}, which is not an executable file; correct it, or unset it to use the sibling binary`)}let g=JI(h);if(g!==void 0&&g!=="2")throw Error(`LMSCRIPT_BIN ${_} declares protocol ${g}; this shim requires protocol 2`);return h}let s=[],o=ps(e),i=ps(o),a;try{let _=JSON.parse(mH(Eo(i,"package.json"),"utf8"));a=Array.isArray(_.workspaces)?_.workspaces:_.workspaces?.packages}catch{}let l=_=>Array.isArray(a)&&a.some(h=>typeof h=="string"&&yH(_,h.replace(/^\.\//,"").replace(/\/$/,""))),c=l(wh(o))&&l("lmscript"),d=_=>{try{return uH(_),!0}catch(h){if(h.code==="ENOENT")return!1;throw h}},u=_=>{let h;try{h=vh(_)}catch{throw Error(`Standalone lmscript sibling ${_} is not an executable file; repair the sibling instead of falling through to another copy`)}if(!BI(h))throw Error(`Standalone lmscript sibling ${_} is not a compatible lmscript (requires protocol 2)`);return h};if(c){let _=Eo(i,"lmscript","bin","lmscript"),h=`npm run build --prefix ${i}`;if(!d(_))throw Error(`Standalone lmscript workspace sibling ${_} is missing; run ${h}`);let g;try{g=u(_)}catch(y){throw Error(`${y instanceof Error?y.message:String(y)}; run ${h}`)}let E=Eo(i,"lmscript","dist","runner.js");try{if(XI(E,qI.R_OK),!GI(E).isFile())throw Error("not a file")}catch{throw Error(`Standalone lmscript sibling found but ${E} is missing or not a readable file; run ${h}`)}return g}let f=ps(o),m=wh(f)==="node_modules"?f:wh(ps(f))==="node_modules"?ps(f):void 0,p=[Eo(e,"lmscript"),...m?[Eo(m,"lmscript","bin","lmscript")]:[],...r?[Eo(ps(rd(n,r)),"lmscript")]:[]];for(let _ of new Set(p)){if(d(_))return u(_);s.push(_)}for(let _ of new Set((t.PATH??"").split(_H).filter(Boolean).map(h=>rd(n,h,"lmscript")))){let h;try{h=vh(_)}catch{s.push(_);continue}if(BI(h))return h;s.push(_+" (not a compatible lmscript)")}throw Error("Standalone lmscript not found; set LMSCRIPT_BIN or install the sibling binary. Tried: "+s.join(", "))}async function hs(t,e){let n={...process.env,...e.env},r=e.cwd??process.cwd(),s;try{s=TH(n,void 0,r)}catch(o){return e.stderr.write("error: "+String(o.message)+`
2092
2094
  `),1}return new Promise(o=>{let i=!e.stdin||e.stdin===process.stdin,a=e.stdout===process.stdout,l=e.stderr===process.stderr,c=cH(process.execPath,[s,...t],{cwd:r,env:{...n,LMSCRIPT_LIFELINE_FD:"3"},detached:process.platform!=="win32",stdio:[i?"inherit":"pipe",a?"inherit":"pipe",l?"inherit":"pipe","pipe"]});c.stdio[3]?.on("error",()=>{});let d=!1,u=g=>{d||(d=!0,process.removeListener("SIGINT",m),process.removeListener("SIGTERM",p),process.removeListener("SIGHUP",_),process.removeListener("SIGWINCH",h),o(g))},f=g=>{try{c.pid&&process.platform!=="win32"?process.kill(-c.pid,g):c.kill(g)}catch(E){E.code!=="ESRCH"&&e.stderr.write("error: signal forwarding failed: "+String(E)+`
2093
2095
  `)}},m=()=>f("SIGINT"),p=()=>f("SIGTERM"),_=()=>f("SIGHUP");process.on("SIGINT",m),process.on("SIGTERM",p),process.on("SIGHUP",_);let h=()=>f("SIGWINCH");process.on("SIGWINCH",h),c.stdout?.on("data",g=>e.stdout.write(String(g))),c.stderr?.on("data",g=>e.stderr.write(String(g))),i||(e.stdin.pipe(c.stdin),c.stdin.on("error",E=>{E.code!=="EPIPE"&&e.stderr.write("error: child stdin: "+E.message+`
2094
2096
  `)})),c.once("error",g=>{e.stderr.write(`error: could not start ${s}: ${g.message}
2095
- `),u(1)}),c.once("close",(g,E)=>u(g??(E&&Hb.signals[E]?128+Hb.signals[E]:1)))})}var yH,EH,sd=x(()=>{"use strict";yH=Vb.matchesGlob,EH="lmscript-shim-protocol 2"});var Yb={};me(Yb,{runScript:()=>Sh});async function Sh(t,e={stdout:process.stdout,stderr:process.stderr}){if(ol(e),!t.length)return D(e,Kb);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await hs(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2096
- `);a<0||(e.stdout.write(n.slice(0,a+1).startsWith("Usage: lmscript ")?"Usage: "+Kb.slice(7)+`
2097
- `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return hs(t,e)}var Kb,Ih=x(()=>{"use strict";sd();le();Kb="usage: lmctl script [--check|--dry-run|--lint] [--no-preflight] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] [--pref FILE] [--module SPEC=FILE]... <file>|-| -e <code> [args...]"});import{execFileSync as bh}from"node:child_process";import{dirname as zb,resolve as wH}from"node:path";function Qb(t){return(0,kh.formatCount)(t)}async function Ah(t,e){return W(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2097
+ `),u(1)}),c.once("close",(g,E)=>u(g??(E&&HI.signals[E]?128+HI.signals[E]:1)))})}var yH,EH,sd=x(()=>{"use strict";yH=VI.matchesGlob,EH="lmscript-shim-protocol 2"});var YI={};me(YI,{runScript:()=>Sh});async function Sh(t,e={stdout:process.stdout,stderr:process.stderr}){if(ol(e),!t.length)return D(e,KI);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await hs(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2098
+ `);a<0||(e.stdout.write(n.slice(0,a+1).startsWith("Usage: lmscript ")?"Usage: "+KI.slice(7)+`
2099
+ `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return hs(t,e)}var KI,bh=x(()=>{"use strict";sd();le();KI="usage: lmctl script [--check|--dry-run|--lint] [--no-preflight] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] [--pref FILE] [--module SPEC=FILE]... <file>|-| -e <code> [args...]"});import{execFileSync as Ih}from"node:child_process";import{dirname as zI,resolve as wH}from"node:path";function QI(t){return(0,kh.formatCount)(t)}async function Ah(t,e){return W(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2098
2100
  WHERE target_teamfile = ? AND target_alias = ? AND config_warnings IS NOT NULL
2099
- ORDER BY started_at DESC LIMIT 1`,e.teamfile,e.alias);if(r.length!==0)try{let s=JSON.parse(r[0].config_warnings);if(!Array.isArray(s))return;let o=s.filter(i=>typeof i=="string"&&i.length>0);return o.length>0?o:void 0}catch{return}})}function ca(t,e,n,r){let s=Ne(t,e);if(n.has(s))return[];n.add(s);let o=nn(s,e);if(o.parseErrors.length>0)throw new Error(`${s}: ${o.parseErrors.join("; ")}`);let i=[];for(let a of o.members){if(a.teamfile!==void 0){i.push(...ca(wH(zb(s),a.teamfile),e,n,[...r,a.alias]));continue}i.push({teamfile:s,alias:a.alias,reportPath:[...r,a.alias].join("/"),provider:a.provider,sessionid:a.session!==void 0&&a.session.length>0?a.session:null,model:a.model??null})}return i}async function da(t,e){try{let n=await W(t,r=>e.map(s=>{let o=Zt(r,s.teamfile,s.alias);return[To(s.teamfile,s.alias),vH(o)]}));return new Map(n)}catch{return new Map}}function To(t,e){return`${t}\0${e.toLowerCase()}`}function vH(t){return t.busy?t.reason==="terminal-held"?t.source==="terminal-invocation"?{state:"busy",reason:"terminal-held",inFlight:null,terminalLock:null,terminalInvocation:{id:t.terminalInvocation.id,startedAt:t.terminalInvocation.started_at,lastHeartbeat:t.terminalInvocation.last_heartbeat_at,holderPid:t.terminalInvocation.holder_pid,holderHost:t.terminalInvocation.holder_host},reclaimable:null}:{state:"busy",reason:"terminal-held",inFlight:null,terminalLock:{startedAt:t.terminalLock.started_at,lastHeartbeat:t.terminalLock.last_heartbeat,holderPid:t.terminalLock.holder_pid,holderHost:t.terminalLock.holder_host},terminalInvocation:null,reclaimable:null}:{state:"busy",reason:"in-flight",inFlight:{senderTeamfile:t.inFlight.sender_teamfile,senderAlias:t.inFlight.sender_alias,startedAt:t.inFlight.started_at,activeCount:t.inFlight.active_count,holderPid:t.inFlight.holder_pid},terminalLock:null,terminalInvocation:null,reclaimable:null}:od(t.reclaimable===void 0?null:{source:t.reclaimable.source,holderPid:t.reclaimable.holder_pid,holderHost:t.reclaimable.holder_host,reason:t.reclaimable.reason})}function od(t=null){return{state:"idle",reason:null,inFlight:null,terminalLock:null,terminalInvocation:null,reclaimable:t}}function id(t){if(t.state!=="idle")return`busy (${t.reason})`;if(t.reclaimable!==null){let{holderPid:e,holderHost:n,reason:r}=t.reclaimable;return`idle (reclaimable lock: ${e!==null?`pid ${e}${n!==null?` on ${n}`:""}`:"holder"} ${r==="dead-pid"?"appears dead -- the provider process ended before the turn completed":"stale"})`}return"idle"}function Nh(t){return t.resets_at!==null?t.resets_at:t.timezone!==null?`${t.reset_time} (${t.timezone})`:t.reset_time}function $t(t){return t==null?"unknown":(0,kh.formatCount)(t)}function Zb(t){return t==="n/a"?t:$t(t)}function ek(t,e,n=String){return t!==void 0?n(t):e?"n/a":"unknown"}function Rh(t){let e=zb(t),n;try{bh("git",["-C",e,"rev-parse","--is-inside-work-tree"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]})}catch{return{kind:"unavailable",reason:"no-repo",teamDir:e}}try{n=bh("git",["-C",e,"log","-2","--format=%ct"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]})}catch{return{kind:"unavailable",reason:"no-commits",teamDir:e}}let r=n.split(/\r?\n/).map(o=>Number.parseInt(o.trim(),10)).filter(o=>Number.isFinite(o)&&o>0);if(r.length===0)return{kind:"unavailable",reason:"no-commits",teamDir:e};let s=r.slice(0,2).map((o,i)=>({ref:i===0?"HEAD":`HEAD~${i}`,timestamp:new Date(o*1e3)}));return{kind:"repo",teamDir:e,since:s[0].timestamp,commits:s,working:SH(e)}}function SH(t){let e;try{e=bh("git",["-C",t,"status","--porcelain"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]})}catch{return{uncommittedTracked:null,untracked:null}}let n=0,r=0;for(let s of e.split(/\r?\n/))s.trim().length!==0&&(s.startsWith("??")?r+=1:n+=1);return{uncommittedTracked:n,untracked:r}}function Lh(t,e){let n=e.getTime();return t.messages.filter(r=>(r.role==="user"||r.role==="assistant")&&Number.isFinite(r.timestamp.getTime())&&r.timestamp.getTime()>n).length}function xh(t){if(t===null)return null;let e=[t.totalInputTokens,t.totalCachedInputTokens,t.totalCacheWriteInputTokens,t.totalOutputTokens,t.totalReasoningOutputTokens].filter(n=>typeof n=="number"&&Number.isFinite(n));return e.length===0?null:e.reduce((n,r)=>n+r,0)}var kh,Ch=x(()=>{"use strict";kh=Ft(Ct(),1);Wt();le();rn()});async function tk(t,e){return W(e,n=>{let r=[];for(let s of n.listRootTeams())try{for(let o of be(s.teamfile_path).members)!o.teamfile&&o.session===t&&r.push({file:s.teamfile_path,member:o})}catch{}return r})}async function ad(t,e){let n=await je(e,t).catch(()=>null),r=n?.createdAt?.getTime();return{provider:t,sessiondir:n?.cwd,sessionid:e,model:n?.model??null,running:n?.turnStatus==="in_progress"?"busy":"unregistered",ageMs:r!==void 0&&Number.isFinite(r)?Math.max(0,Date.now()-r):null,context:n?.lastInputTokens??null}}async function Oh(t,e,n){let r=await W(e,i=>ca(t,i,new Set,[])),s=n?r.filter(i=>i.alias.toLowerCase()===n.toLowerCase()||i.reportPath.toLowerCase()===n.toLowerCase()):r;if(n&&!s.length)throw new Error(`No member "${n}" in ${t}`);let o=await da(e,s);return Promise.all(s.map(async i=>{let a=i.sessionid?await ad(i.provider,i.sessionid):{provider:i.provider,sessionid:null,model:null,running:"not seeded",ageMs:null,context:null};return{...a,file:i.teamfile,alias:i.alias,model:i.model??a.model,running:i.sessionid?a.running==="busy"?"busy":o.get(To(i.teamfile,i.alias))?.state??"unknown":"not seeded"}}))}function ld(t,e){let n=t.map(r=>[r.alias??"-",r.provider,r.model??"n/a",r.running,r.ageMs===null?"n/a":(0,br.formatDuration)(r.ageMs),r.context===null?"n/a":(0,br.formatCount)(r.context),r.sessionid??"-"].map(br.escapeCell));e.stdout.write(`${(0,br.formatTable)(n,{headers:["ALIAS","PROVIDER","MODEL","RUNNING","AGE","CONTEXT","SESSION"],margin:2})}
2101
+ ORDER BY started_at DESC LIMIT 1`,e.teamfile,e.alias);if(r.length!==0)try{let s=JSON.parse(r[0].config_warnings);if(!Array.isArray(s))return;let o=s.filter(i=>typeof i=="string"&&i.length>0);return o.length>0?o:void 0}catch{return}})}function ca(t,e,n,r){let s=Ne(t,e);if(n.has(s))return[];n.add(s);let o=nn(s,e);if(o.parseErrors.length>0)throw new Error(`${s}: ${o.parseErrors.join("; ")}`);let i=[];for(let a of o.members){if(a.teamfile!==void 0){i.push(...ca(wH(zI(s),a.teamfile),e,n,[...r,a.alias]));continue}i.push({teamfile:s,alias:a.alias,reportPath:[...r,a.alias].join("/"),provider:a.provider,sessionid:a.session!==void 0&&a.session.length>0?a.session:null,model:a.model??null})}return i}async function da(t,e){try{let n=await W(t,r=>e.map(s=>{let o=Zt(r,s.teamfile,s.alias);return[To(s.teamfile,s.alias),vH(o)]}));return new Map(n)}catch{return new Map}}function To(t,e){return`${t}\0${e.toLowerCase()}`}function vH(t){return t.busy?t.reason==="terminal-held"?t.source==="terminal-invocation"?{state:"busy",reason:"terminal-held",inFlight:null,terminalLock:null,terminalInvocation:{id:t.terminalInvocation.id,startedAt:t.terminalInvocation.started_at,lastHeartbeat:t.terminalInvocation.last_heartbeat_at,holderPid:t.terminalInvocation.holder_pid,holderHost:t.terminalInvocation.holder_host},reclaimable:null}:{state:"busy",reason:"terminal-held",inFlight:null,terminalLock:{startedAt:t.terminalLock.started_at,lastHeartbeat:t.terminalLock.last_heartbeat,holderPid:t.terminalLock.holder_pid,holderHost:t.terminalLock.holder_host},terminalInvocation:null,reclaimable:null}:{state:"busy",reason:"in-flight",inFlight:{senderTeamfile:t.inFlight.sender_teamfile,senderAlias:t.inFlight.sender_alias,startedAt:t.inFlight.started_at,activeCount:t.inFlight.active_count,holderPid:t.inFlight.holder_pid},terminalLock:null,terminalInvocation:null,reclaimable:null}:od(t.reclaimable===void 0?null:{source:t.reclaimable.source,holderPid:t.reclaimable.holder_pid,holderHost:t.reclaimable.holder_host,reason:t.reclaimable.reason})}function od(t=null){return{state:"idle",reason:null,inFlight:null,terminalLock:null,terminalInvocation:null,reclaimable:t}}function id(t){if(t.state!=="idle")return`busy (${t.reason})`;if(t.reclaimable!==null){let{holderPid:e,holderHost:n,reason:r}=t.reclaimable;return`idle (reclaimable lock: ${e!==null?`pid ${e}${n!==null?` on ${n}`:""}`:"holder"} ${r==="dead-pid"?"appears dead -- the provider process ended before the turn completed":"stale"})`}return"idle"}function Nh(t){return t.resets_at!==null?t.resets_at:t.timezone!==null?`${t.reset_time} (${t.timezone})`:t.reset_time}function $t(t){return t==null?"unknown":(0,kh.formatCount)(t)}function ZI(t){return t==="n/a"?t:$t(t)}function ek(t,e,n=String){return t!==void 0?n(t):e?"n/a":"unknown"}function Rh(t){let e=zI(t),n;try{Ih("git",["-C",e,"rev-parse","--is-inside-work-tree"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]})}catch{return{kind:"unavailable",reason:"no-repo",teamDir:e}}try{n=Ih("git",["-C",e,"log","-2","--format=%ct"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]})}catch{return{kind:"unavailable",reason:"no-commits",teamDir:e}}let r=n.split(/\r?\n/).map(o=>Number.parseInt(o.trim(),10)).filter(o=>Number.isFinite(o)&&o>0);if(r.length===0)return{kind:"unavailable",reason:"no-commits",teamDir:e};let s=r.slice(0,2).map((o,i)=>({ref:i===0?"HEAD":`HEAD~${i}`,timestamp:new Date(o*1e3)}));return{kind:"repo",teamDir:e,since:s[0].timestamp,commits:s,working:SH(e)}}function SH(t){let e;try{e=Ih("git",["-C",t,"status","--porcelain"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]})}catch{return{uncommittedTracked:null,untracked:null}}let n=0,r=0;for(let s of e.split(/\r?\n/))s.trim().length!==0&&(s.startsWith("??")?r+=1:n+=1);return{uncommittedTracked:n,untracked:r}}function Lh(t,e){let n=e.getTime();return t.messages.filter(r=>(r.role==="user"||r.role==="assistant")&&Number.isFinite(r.timestamp.getTime())&&r.timestamp.getTime()>n).length}function xh(t){if(t===null)return null;let e=[t.totalInputTokens,t.totalCachedInputTokens,t.totalCacheWriteInputTokens,t.totalOutputTokens,t.totalReasoningOutputTokens].filter(n=>typeof n=="number"&&Number.isFinite(n));return e.length===0?null:e.reduce((n,r)=>n+r,0)}var kh,Ch=x(()=>{"use strict";kh=Ft(Ct(),1);Wt();le();rn()});async function tk(t,e){return W(e,n=>{let r=[];for(let s of n.listRootTeams())try{for(let o of Ie(s.teamfile_path).members)!o.teamfile&&o.session===t&&r.push({file:s.teamfile_path,member:o})}catch{}return r})}async function ad(t,e){let n=await je(e,t).catch(()=>null),r=n?.createdAt?.getTime();return{provider:t,sessiondir:n?.cwd,sessionid:e,model:n?.model??null,running:n?.turnStatus==="in_progress"?"busy":"unregistered",ageMs:r!==void 0&&Number.isFinite(r)?Math.max(0,Date.now()-r):null,context:n?.lastInputTokens??null}}async function Oh(t,e,n){let r=await W(e,i=>ca(t,i,new Set,[])),s=n?r.filter(i=>i.alias.toLowerCase()===n.toLowerCase()||i.reportPath.toLowerCase()===n.toLowerCase()):r;if(n&&!s.length)throw new Error(`No member "${n}" in ${t}`);let o=await da(e,s);return Promise.all(s.map(async i=>{let a=i.sessionid?await ad(i.provider,i.sessionid):{provider:i.provider,sessionid:null,model:null,running:"not seeded",ageMs:null,context:null};return{...a,file:i.teamfile,alias:i.alias,model:i.model??a.model,running:i.sessionid?a.running==="busy"?"busy":o.get(To(i.teamfile,i.alias))?.state??"unknown":"not seeded"}}))}function ld(t,e){let n=t.map(r=>[r.alias??"-",r.provider,r.model??"n/a",r.running,r.ageMs===null?"n/a":(0,Ir.formatDuration)(r.ageMs),r.context===null?"n/a":(0,Ir.formatCount)(r.context),r.sessionid??"-"].map(Ir.escapeCell));e.stdout.write(`${(0,Ir.formatTable)(n,{headers:["ALIAS","PROVIDER","MODEL","RUNNING","AGE","CONTEXT","SESSION"],margin:2})}
2100
2102
  `),e.stdout.write(`Context is the last completed turn; unavailable values are n/a.
2101
- `)}function nk(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function rk(t,e,n,r){return W(r,async s=>{if(Zt(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=tr(s,{receiver_teamfile:t,receiver_alias:e,sender_teamfile:t,sender_alias:e,ttlMs:8*60*60*1e3});if(!o.acquired)throw new Error(`${e} is busy; its session was not replaced.`);try{let i=be(t).members.find(a=>a.alias.toLowerCase()===e.toLowerCase());if(!i||i.session!==n)throw new Error("Session binding changed; refresh cancelled.");if((await ad(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await po(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var br,sk=x(()=>{"use strict";Be();fn();Ch();le();br=Ft(Ct(),1);Wt();_n()});var Dh={};me(Dh,{runInferred:()=>LH,runInferredBatch:()=>ck,sendInferredPrompt:()=>wo});import{existsSync as ak,mkdtempSync as IH,readFileSync as bH,rmSync as kH,writeFileSync as AH}from"node:fs";import{tmpdir as NH}from"node:os";import{resolve as cd,join as ok}from"node:path";async function wo(t,e,n,r={}){let s=IH(ok(NH(),"lmctl-intent-prompt-")),o=ok(s,"prompt.txt");try{return AH(o,`${e}\r
2103
+ `)}function nk(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function rk(t,e,n,r){return W(r,async s=>{if(Zt(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=tr(s,{receiver_teamfile:t,receiver_alias:e,sender_teamfile:t,sender_alias:e,ttlMs:8*60*60*1e3});if(!o.acquired)throw new Error(`${e} is busy; its session was not replaced.`);try{let i=Ie(t).members.find(a=>a.alias.toLowerCase()===e.toLowerCase());if(!i||i.session!==n)throw new Error("Session binding changed; refresh cancelled.");if((await ad(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await po(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var Ir,sk=x(()=>{"use strict";Be();fn();Ch();le();Ir=Ft(Ct(),1);Wt();_n()});var Dh={};me(Dh,{runInferred:()=>LH,runInferredBatch:()=>ck,sendInferredPrompt:()=>wo});import{existsSync as ak,mkdtempSync as bH,readFileSync as IH,rmSync as kH,writeFileSync as AH}from"node:fs";import{tmpdir as NH}from"node:os";import{resolve as cd,join as ok}from"node:path";async function wo(t,e,n,r={}){let s=bH(ok(NH(),"lmctl-intent-prompt-")),o=ok(s,"prompt.txt");try{return AH(o,`${e}\r
2102
2104
  `,{encoding:"utf8",mode:384}),await(r.chat??Eh)([...t,"--prompt-file",o],n)}finally{kH(s,{recursive:!0,force:!0})}}async function ik(t,e,n,r,s){let o=await(s.rows??Oh)(t,r,e);ld(o,r);for(let i of o)if(!(!i.file||!i.alias||!i.sessionid||!nk(i))&&(r.stdout.write(`${i.alias}: old and large (at least 7 days and 100,000 context tokens). A refresh starts a new context; the old transcript remains.
2103
- `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??rk)(i.file,i.alias,i.sessionid,r);if(a)return a;ld(await(s.rows??Oh)(t,r,e),r)}return 0}async function lk(t,e){if(t.startsWith("-"))throw new Error("Use an explicit command for options; no inferred action was taken.");return await e.confirm(`Is ${JSON.stringify(t)} the prompt to send?`)?t:null}async function RH(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=Dc(a,yo),c=[];if(l.length){let p=await n.choose("Provider:",l);if(i<0&&e===void 0&&o===void 0)return(s.model??Uc)([],r,{selections:[{provider:p}]});let _=await(s.models??co)(p).catch(()=>[]),h;if(i>0){let g=t.slice(i+1);if(!g)throw new Error("A model name is required after provider/.");let E=Dc(g,_);E.length?c.push(...E.map(y=>({provider:p,model:y}))):c.push({provider:p,model:g})}else{if(_.length?h=await n.choose("Model:",_):h=await n.ask(`Model for ${p}: `),!h)throw new Error("A model name is required.");c.push({provider:p,model:h})}}else{let p=await Promise.all(jn.map(async h=>({provider:h,names:await(s.models??co)(h).catch(()=>[])}))),_=p.flatMap(({provider:h,names:g})=>g.filter(E=>E.toLowerCase()===t.toLowerCase()).map(E=>({provider:h,model:E})));if(c.push(..._.length?_:p.flatMap(({provider:h,names:g})=>Dc(t,g).map(E=>({provider:h,model:E})))),!c.length)return null}if(o!==void 0){let p=await lk(o,n);if(p===null)return 0;e=p}if(e===void 0){let p=[...new Set(c.map(_=>_.provider))].map(_=>({provider:_,models:c.filter(h=>h.provider===_).map(h=>h.model)}));return(s.model??Uc)([],r,{selections:p})}let d=await n.choose("Prompt destination:",c.map(p=>`${p.provider}/${p.model}`)),u=c.find(p=>`${p.provider}/${p.model}`===d),f=await hh(u.provider,u.model,r.cwd??process.cwd(),n),m=await aa(f.file,n,r,s,f.alias);return m||wo([f.file,f.alias],e,r,s)}async function ck(t,e,n,r={}){let s=new Fn(n,r.ask);try{let o=cd(n.cwd??process.cwd(),t);if(!ak(o))throw new Error(`Batch file not found: ${o}`);if(!bH(o,"utf8").trim())throw new Error(`Batch file has no prompts: ${o}`);if(e.length>2||e.some(c=>c.startsWith("-")))throw new Error("Expected .lmb [teamfile [alias]]; force/yes flags are not allowed in inferred mode.");let i=e[0]?cd(n.cwd??process.cwd(),e[0]):await ph(s,n.cwd??process.cwd()),a=await aa(i,s,n,r,e[1]);if(a)return a;let l=await la(i,e[1],s);return(r.batch??$h)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2104
- `),2}finally{s.close()}}async function LH(t,e,n={}){let r=new Fn(e,n.ask);try{let s=LI(t);if(!s)return null;if(s.kind==="script")return await Sh([cd(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),ck(s.file,s.rest,e,n);if(s.kind==="models")return await RH(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await lk(s.pendingPrompt,r);if(d===null)return 0;s.prompt=d}if(s.kind==="team"){let d=cd(e.cwd??process.cwd(),s.file),u=s.alias;if(ak(d)&&(u!==void 0||s.prompt!==void 0)){let m=be(d);if(!m.parseErrors.length&&m.members.length){u=await la(d,u,r);let p=m.members.find(_=>_.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await wo([d,u],s.prompt,e,n)}}let f=await aa(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await la(d,u,r):void 0,s.prompt!==void 0?await wo([d,u],s.prompt,e,n):await ik(d,u,r,e,n))}let o=await(n.registrations??tk)(s.id,e);if(o.length){let d=await r.choose("Registered session:",o.map(f=>`${f.file}:${f.member.alias}`)),u=o.find(f=>`${f.file}:${f.member.alias}`===d);return s.prompt!==void 0?await wo([u.file,u.member.alias],s.prompt,e,n):await ik(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??Er)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",yo),l=await(n.summary??ad)(a,s.id);ld([l],e);let c=await _h(s.id,a,l.model,e.cwd??process.cwd(),r,e,l.sessiondir);if(s.prompt!==void 0){if(!c)throw new Error("A teamfile and alias are required before sending a prompt.");return wo([c.file,c.alias],s.prompt,e,n)}return 0}catch(s){return e.stderr.write(`error: ${s instanceof Error?s.message:String(s)}
2105
- `),2}finally{r.close()}}var Mh=x(()=>{"use strict";Be();Cc();xI();Fc();nd();Ih();Ph();fn();ed();sk()});var fk={};me(fk,{runBatch:()=>$h});import{readFileSync as xH}from"node:fs";async function $h(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(dk),0;let n=ae(t,[],["--legacy","--single"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length===1&&/\.lmb$/i.test(n.positionals[0])&&Object.keys(n.flags).length===0){let{runInferredBatch:E}=await Promise.resolve().then(()=>(Mh(),Dh));return E(n.positionals[0],[],e)}if(n.positionals.length!==3)return D(e,dk.trimEnd());let[r,s,o]=n.positionals,i=n.flags["--legacy"]===!0,a=n.flags["--single"]===!0,l,c;try{let E=xH(o,"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2105
+ `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??rk)(i.file,i.alias,i.sessionid,r);if(a)return a;ld(await(s.rows??Oh)(t,r,e),r)}return 0}async function lk(t,e){if(t.startsWith("-"))throw new Error("Use an explicit command for options; no inferred action was taken.");return await e.confirm(`Is ${JSON.stringify(t)} the prompt to send?`)?t:null}async function RH(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=Dc(a,yo),c=[];if(l.length){let p=await n.choose("Provider:",l);if(i<0&&e===void 0&&o===void 0)return(s.model??Uc)([],r,{selections:[{provider:p}]});let _=await(s.models??co)(p).catch(()=>[]),h;if(i>0){let g=t.slice(i+1);if(!g)throw new Error("A model name is required after provider/.");let E=Dc(g,_);E.length?c.push(...E.map(y=>({provider:p,model:y}))):c.push({provider:p,model:g})}else{if(_.length?h=await n.choose("Model:",_):h=await n.ask(`Model for ${p}: `),!h)throw new Error("A model name is required.");c.push({provider:p,model:h})}}else{let p=await Promise.all(jn.map(async h=>({provider:h,names:await(s.models??co)(h).catch(()=>[])}))),_=p.flatMap(({provider:h,names:g})=>g.filter(E=>E.toLowerCase()===t.toLowerCase()).map(E=>({provider:h,model:E})));if(c.push(..._.length?_:p.flatMap(({provider:h,names:g})=>Dc(t,g).map(E=>({provider:h,model:E})))),!c.length)return null}if(o!==void 0){let p=await lk(o,n);if(p===null)return 0;e=p}if(e===void 0){let p=[...new Set(c.map(_=>_.provider))].map(_=>({provider:_,models:c.filter(h=>h.provider===_).map(h=>h.model)}));return(s.model??Uc)([],r,{selections:p})}let d=await n.choose("Prompt destination:",c.map(p=>`${p.provider}/${p.model}`)),u=c.find(p=>`${p.provider}/${p.model}`===d),f=await hh(u.provider,u.model,r.cwd??process.cwd(),n),m=await aa(f.file,n,r,s,f.alias);return m||wo([f.file,f.alias],e,r,s)}async function ck(t,e,n,r={}){let s=new Fn(n,r.ask);try{let o=cd(n.cwd??process.cwd(),t);if(!ak(o))throw new Error(`Batch file not found: ${o}`);if(!IH(o,"utf8").trim())throw new Error(`Batch file has no prompts: ${o}`);if(e.length>2||e.some(c=>c.startsWith("-")))throw new Error("Expected .lmb [teamfile [alias]]; force/yes flags are not allowed in inferred mode.");let i=e[0]?cd(n.cwd??process.cwd(),e[0]):await ph(s,n.cwd??process.cwd()),a=await aa(i,s,n,r,e[1]);if(a)return a;let l=await la(i,e[1],s);return(r.batch??$h)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2106
+ `),2}finally{s.close()}}async function LH(t,e,n={}){let r=new Fn(e,n.ask);try{let s=Lb(t);if(!s)return null;if(s.kind==="script")return await Sh([cd(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),ck(s.file,s.rest,e,n);if(s.kind==="models")return await RH(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await lk(s.pendingPrompt,r);if(d===null)return 0;s.prompt=d}if(s.kind==="team"){let d=cd(e.cwd??process.cwd(),s.file),u=s.alias;if(ak(d)&&(u!==void 0||s.prompt!==void 0)){let m=Ie(d);if(!m.parseErrors.length&&m.members.length){u=await la(d,u,r);let p=m.members.find(_=>_.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await wo([d,u],s.prompt,e,n)}}let f=await aa(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await la(d,u,r):void 0,s.prompt!==void 0?await wo([d,u],s.prompt,e,n):await ik(d,u,r,e,n))}let o=await(n.registrations??tk)(s.id,e);if(o.length){let d=await r.choose("Registered session:",o.map(f=>`${f.file}:${f.member.alias}`)),u=o.find(f=>`${f.file}:${f.member.alias}`===d);return s.prompt!==void 0?await wo([u.file,u.member.alias],s.prompt,e,n):await ik(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??Er)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",yo),l=await(n.summary??ad)(a,s.id);ld([l],e);let c=await _h(s.id,a,l.model,e.cwd??process.cwd(),r,e,l.sessiondir);if(s.prompt!==void 0){if(!c)throw new Error("A teamfile and alias are required before sending a prompt.");return wo([c.file,c.alias],s.prompt,e,n)}return 0}catch(s){return e.stderr.write(`error: ${s instanceof Error?s.message:String(s)}
2107
+ `),2}finally{r.close()}}var Mh=x(()=>{"use strict";Be();Cc();xb();Fc();nd();bh();Ph();fn();ed();sk()});var fk={};me(fk,{runBatch:()=>$h});import{readFileSync as xH}from"node:fs";async function $h(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(dk),0;let n=ae(t,[],["--legacy","--single"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length===1&&/\.lmb$/i.test(n.positionals[0])&&Object.keys(n.flags).length===0){let{runInferredBatch:E}=await Promise.resolve().then(()=>(Mh(),Dh));return E(n.positionals[0],[],e)}if(n.positionals.length!==3)return D(e,dk.trimEnd());let[r,s,o]=n.positionals,i=n.flags["--legacy"]===!0,a=n.flags["--single"]===!0,l,c;try{let E=xH(o,"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2106
2108
  `);if(l=a?[E.trim()].filter(y=>y.length>0):E.split(/\n\s*\n/u).map(y=>y.trim()).filter(Boolean),l.length===0)return D(e,`batch: ${o}: no prompts found`);c=Xe(r,s,e.dal)}catch(E){return D(e,`batch: ${E instanceof Error?E.message:String(E)}`)}let d=!i&&l.length>1&&await DH(c),u={...e.env??process.env},f=await MH(e,{member:c,batchfile:o,promptCount:l.length,parentInvocationId:$s(u.LMCTL_INVOCATION_ID)}),m={status:"error",error:"batch exited without a terminal outcome"},p=E=>{m=E},_=E=>{f!==null&&(PH(e,f,{status:"cancelled",signal:E,error:`batch interrupted by ${E}`}),process.exit(E==="SIGINT"?130:143))},h=()=>_("SIGINT"),g=()=>_("SIGTERM");f!==null&&(u.LMCTL_INVOCATION_ID=String(f),process.once("SIGINT",h),process.once("SIGTERM",g)),e.stderr.write(`batch ${Vr()}: starting ${l.length} prompt${l.length===1?"":"s"} -> ${c.alias} (teamfile=${r} input=${o})
2107
2109
  `);try{return d?await CH(e,{member:c,prompts:l,env:u,setRootFinish:p,teamfile:r,batchfile:o}):await Uh(e,{member:c,prompts:l,env:u,setRootFinish:p,teamfile:r,batchfile:o})}finally{f!==null&&(process.removeListener("SIGINT",h),process.removeListener("SIGTERM",g),await $H(e,f,m))}}async function Uh(t,e){let{member:n,prompts:r,env:s}=e;for(let[o,i]of r.entries()){t.stderr.write(`
2108
2110
  batch ${Vr()}: prompt ${o+1}/${r.length} -> ${n.alias}
@@ -2116,11 +2118,11 @@ ${i}${i.endsWith(`
2116
2118
  `)?"":`
2117
2119
  `}
2118
2120
  `)),l.status!=="ok"){let c=l.status==="stalled"?"provider stalled":l.status==="empty"?"provider returned no content and no observed activity for this turn":l.message,d=`batch: stopped at prompt ${o+1}/${r.length} (${o} completed): ${c}; later prompts were not sent`;return e.setRootFinish({status:l.status==="busy"?"busy":"error",exit_code:1,error:d,result_summary:`${o}/${r.length} prompts completed`}),D(t,d)}}catch(l){let c=`batch: stopped at prompt ${o+1}/${r.length} (${o} completed): ${l instanceof Error?l.message:String(l)}; later prompts were not sent`;return e.setRootFinish({status:"error",exit_code:1,error:c,result_summary:`${o}/${r.length} prompts completed`}),D(t,c)}finally{a.stop()}}return t.stderr.write(`batch ${Vr()}: completed ${r.length}/${r.length} prompts
2119
- `),e.setRootFinish({status:"done",exit_code:0,result_summary:`batch completed ${r.length}/${r.length} prompts`}),0}async function CH(t,e){let{member:n,prompts:r,env:s}=e,o=await W(t,f=>(bl(f,n.teamfile,n.alias),Zt(f,n.teamfile,n.alias)));if(o.busy){let f=o.reason==="in-flight"?`${n.alias} is servicing ${o.inFlight.sender_alias} (${o.inFlight.sender_teamfile}) since ${o.inFlight.started_at} \u2014 wait and retry`:o.source==="terminal-lock"?qi(o.terminalLock):`${n.alias} is busy (interactive terminal); wait and retry`;return e.setRootFinish({status:"busy",exit_code:1,error:f,result_summary:"0 prompts completed"}),D(t,`batch: cannot start bundle: ${f}`)}let i=await W(t,f=>OH(s,f)),a=await W(t,f=>tr(f,{receiver_teamfile:n.teamfile,receiver_alias:n.alias,sender_teamfile:i?.teamfile??n.teamfile,sender_alias:i?.alias??"operator",ttlMs:ar()}));if(!a.acquired){let f=`${n.alias} is servicing ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} \u2014 wait and retry`;return e.setRootFinish({status:"busy",exit_code:1,error:f,result_summary:"0 prompts completed"}),D(t,`batch: cannot start bundle: ${f}`)}let l={row:a.lease,leaseId:a.leaseId},c=Qa(f=>W(t,m=>m.heartbeatAgentInflight(l.row,l.leaseId,f))),d,u=si(t,f=>`batch ${Vr()}: opening provider session (${f}s elapsed)
2121
+ `),e.setRootFinish({status:"done",exit_code:0,result_summary:`batch completed ${r.length}/${r.length} prompts`}),0}async function CH(t,e){let{member:n,prompts:r,env:s}=e,o=await W(t,f=>(Il(f,n.teamfile,n.alias),Zt(f,n.teamfile,n.alias)));if(o.busy){let f=o.reason==="in-flight"?`${n.alias} is servicing ${o.inFlight.sender_alias} (${o.inFlight.sender_teamfile}) since ${o.inFlight.started_at} \u2014 wait and retry`:o.source==="terminal-lock"?qi(o.terminalLock):`${n.alias} is busy (interactive terminal); wait and retry`;return e.setRootFinish({status:"busy",exit_code:1,error:f,result_summary:"0 prompts completed"}),D(t,`batch: cannot start bundle: ${f}`)}let i=await W(t,f=>OH(s,f)),a=await W(t,f=>tr(f,{receiver_teamfile:n.teamfile,receiver_alias:n.alias,sender_teamfile:i?.teamfile??n.teamfile,sender_alias:i?.alias??"operator",ttlMs:ar()}));if(!a.acquired){let f=`${n.alias} is servicing ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} \u2014 wait and retry`;return e.setRootFinish({status:"busy",exit_code:1,error:f,result_summary:"0 prompts completed"}),D(t,`batch: cannot start bundle: ${f}`)}let l={row:a.lease,leaseId:a.leaseId},c=Qa(f=>W(t,m=>m.heartbeatAgentInflight(l.row,l.leaseId,f))),d,u=si(t,f=>`batch ${Vr()}: opening provider session (${f}s elapsed)
2120
2122
  `);try{let f={...s};try{let m=await W(t,p=>p.getRootTeam(n.teamfile)?.name??null);m!==null&&(f.LMBEE_TEAM_NAME=m)}catch{}d=await Ep({provider:n.provider,sessionId:n.sessionid,cwd:n.sessiondir,env:f,...n.model!==void 0?{model:n.model}:{},...n.effort!==void 0?{effort:n.effort}:{},alias:n.alias,isLead:n.isLead,permissionMode:"yolo",holdOpen:Np(t,{teamfile:n.teamfile,alias:n.alias},f)})}catch(f){return U({event:"persistent_session_open_failed",provider:n.provider,session_id:n.sessionid,error_message:f instanceof Error?f.message:String(f)}),clearInterval(c),await uk(t,l),Uh(t,{member:n,prompts:r,env:s,setRootFinish:e.setRootFinish,teamfile:e.teamfile,batchfile:e.batchfile})}finally{u.stop()}try{return await Uh(t,{member:n,prompts:r,env:s,setRootFinish:e.setRootFinish,teamfile:e.teamfile,batchfile:e.batchfile,heldLease:l,bundleSession:d})}finally{await d.close(),clearInterval(c),await uk(t,l)}}async function uk(t,e){try{await W(t,n=>{n.releaseAgentInflight(e.row,e.leaseId)})}catch(n){t.stderr.write(`warning: failed to release batch bundle lease: ${n instanceof Error?n.message:String(n)}
2121
2123
  `)}}function OH(t,e){let n=Nc(t,e);if(n.ok)return rs(n.identity);if(n.reason==="unset")return null;throw new Error(ns("batch",t,e))}async function DH(t){let e=t.provider.trim().toLowerCase();return Al(e,Ll(),Bi())}async function MH(t,e){try{let{member:n}=e;return await W(t,r=>r.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:n.teamfile,from_identity:`${n.teamfile}:batch`,target_teamfile:n.teamfile,target_alias:n.alias,root_teamfile:n.teamfile,cwd:n.sessiondir,command:`lmctl batch ${n.teamfile} ${n.alias} ${e.batchfile}`,holder_pid:process.pid,launch_source:"exec",parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({batchfile:e.batchfile,prompt_count:e.promptCount,provider:n.provider,sessionid:n.sessionid,...n.model!==void 0?{model:n.model}:{}})}).id)}catch(n){return t.stderr.write(`warning: failed to start batch root invocation: ${n instanceof Error?n.message:String(n)}
2122
2124
  `),null}}async function $H(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){t.stderr.write(`warning: failed to finish batch root invocation: ${r instanceof Error?r.message:String(r)}
2123
- `)}}function PH(t,e,n){try{if(t.dal!==void 0){t.dal.finishTrackedInvocation(e,n);return}let r=$e({path:Je()});try{r.finishTrackedInvocation(e,n)}finally{r.close()}}catch{}}var dk,Ph=x(()=>{"use strict";re();xp();le();Nn();nt();vt();Wt();kl();Il();Ac();Gi();Rc();xl();Rp();Un();dk=`usage: lmctl batch <teamfile> <alias> <batchfile> [--legacy] [--single]
2125
+ `)}}function PH(t,e,n){try{if(t.dal!==void 0){t.dal.finishTrackedInvocation(e,n);return}let r=$e({path:Je()});try{r.finishTrackedInvocation(e,n)}finally{r.close()}}catch{}}var dk,Ph=x(()=>{"use strict";re();xp();le();Nn();nt();vt();Wt();kl();bl();Ac();Gi();Rc();xl();Rp();Un();dk=`usage: lmctl batch <teamfile> <alias> <batchfile> [--legacy] [--single]
2124
2126
  lmctl batch <file.lmb> (infer or ask for teamfile and member)
2125
2127
 
2126
2128
  Send blank-line-separated paragraphs as prompts, one completed turn at a
@@ -2148,29 +2150,29 @@ lease) -- the pre-bundle behavior -- as an opt-out while bundle is new.
2148
2150
  --single sends the WHOLE file as ONE prompt: blank lines are content, not
2149
2151
  separators. A single prompt (one paragraph, or --single) never bundles and
2150
2152
  never takes a batch-level lease -- one plain turn.
2151
- `});import{mkdtempSync as UH,readFileSync as FH,rmSync as jH,writeFileSync as WH}from"node:fs";import{tmpdir as HH}from"node:os";import{spawnSync as BH}from"node:child_process";import{basename as dd,extname as Fh,join as jh,resolve as Wh}from"node:path";import*as mk from"node:readline";function XH(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";BH(n,[e],{stdio:"inherit"})}}async function pk(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=mk.createInterface({input:t.input,output:e.stdout,terminal:!1}),i=[],a=[];o.on("line",u=>{let f=a.shift();f!==void 0?f(u):i.push(u)});let l=!1;o.on("close",()=>{for(l=!0;a.length>0;)a.shift()("")});let c=async u=>{e.stdout.write(u);let f=i.shift();return f!==void 0?f.trim():l?"":new Promise(m=>a.push(p=>m(p.trim())))},d=()=>o.close();try{let u,f;if(s.output!==void 0)u=Wh(n,s.output),f=dd(u,Fh(u));else{let g=Wh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:Wh(n,E),T=`${dd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),S=w===""?T:w,I=Fh(S)?S:`${S}.lmctl`;u=jh(y,I),f=dd(I,Fh(I))}let m;if(s.members!==void 0&&s.members.length>0)m=s.members.map(g=>({...g,model:g.model??s.model}));else{let g=wr(Mt(e.env??process.env,t.initConfigPath)),E=[...new Set(g===null?[]:Object.values(g).map(b=>b.provider))];e.stdout.write(`Providers from lmctl init: ${E.length>0?E.join(", "):"(none saved; run lmctl init to save suggestions)"}
2153
+ `});import{mkdtempSync as UH,readFileSync as FH,rmSync as jH,writeFileSync as WH}from"node:fs";import{tmpdir as HH}from"node:os";import{spawnSync as BH}from"node:child_process";import{basename as dd,extname as Fh,join as jh,resolve as Wh}from"node:path";import*as mk from"node:readline";function XH(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";BH(n,[e],{stdio:"inherit"})}}async function pk(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=mk.createInterface({input:t.input,output:e.stdout,terminal:!1}),i=[],a=[];o.on("line",u=>{let f=a.shift();f!==void 0?f(u):i.push(u)});let l=!1;o.on("close",()=>{for(l=!0;a.length>0;)a.shift()("")});let c=async u=>{e.stdout.write(u);let f=i.shift();return f!==void 0?f.trim():l?"":new Promise(m=>a.push(p=>m(p.trim())))},d=()=>o.close();try{let u,f;if(s.output!==void 0)u=Wh(n,s.output),f=dd(u,Fh(u));else{let g=Wh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:Wh(n,E),T=`${dd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),S=w===""?T:w,b=Fh(S)?S:`${S}.lmctl`;u=jh(y,b),f=dd(b,Fh(b))}let m;if(s.members!==void 0&&s.members.length>0)m=s.members.map(g=>({...g,model:g.model??s.model}));else{let g=wr(Mt(e.env??process.env,t.initConfigPath)),E=[...new Set(g===null?[]:Object.values(g).map(I=>I.provider))];e.stdout.write(`Providers from lmctl init: ${E.length>0?E.join(", "):"(none saved; run lmctl init to save suggestions)"}
2152
2154
  `),e.stdout.write(`You can type another provider.
2153
- `);let y=s.provider??g?.provider1.provider,T=s.provider??(E.length===1?E[0]:void 0);for(;T===void 0;){let b=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),L=b===""?y:b;if(L===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2155
+ `);let y=s.provider??g?.provider1.provider,T=s.provider??(E.length===1?E[0]:void 0);for(;T===void 0;){let I=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),L=I===""?y:I;if(L===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2154
2156
  `),d(),null;continue}if(kt({alias:"Probe",provider:L})!==void 0){e.stdout.write(`unknown provider "${L}" (known: ${Object.keys(ds).join(", ")})
2155
2157
  `),y=void 0;continue}T=L}let w=s.pattern??"3",S;for(;S===void 0;){e.stdout.write(`Patterns: 1) Lead 2) Lead+Reviewer 3) Lead+Coder+Reviewer c) custom
2156
- `);let b=(await c(`Pattern [${w}]: `)).toLowerCase(),L=b===""?w:b;if(L==="c"||L==="custom"){S=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
2158
+ `);let I=(await c(`Pattern [${w}]: `)).toLowerCase(),L=I===""?w:I;if(L==="c"||L==="custom"){S=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
2157
2159
  `);;){let k=await c(`Member ${S.length+1} alias: `);if(k===""){if(S.length===0){if(l)return e.stderr.write(`error: stdin closed (EOF) before any member alias was entered
2158
2160
  `),d(),null;e.stdout.write(`at least one member is required
2159
2161
  `);continue}break}let v=kt({alias:k,provider:T});if(v!==void 0){e.stdout.write(`${v}
2160
2162
  `);continue}if(S.length===0&&k.toLowerCase()!=="lead"){e.stdout.write(`the first member must be Lead
2161
2163
  `);continue}let A=k.toLowerCase();if(O.has(A)){e.stdout.write(`duplicate member alias "${k}"
2162
2164
  `);continue}O.add(A),S.push(k)}}else S=uh[L],S===void 0&&e.stdout.write(`unknown pattern "${L}"
2163
- `)}m=[];let I=new Map;for(let b of S){let L;for(;;){let R=await c(`Provider for ${b} [${T}]: `);L=R===""?T:R;let C=kt({alias:b,provider:L});if(C===void 0)break;if(e.stdout.write(`error: ${C}. Enter a provider name, not a model; press Enter to use ${T}.
2165
+ `)}m=[];let b=new Map;for(let I of S){let L;for(;;){let R=await c(`Provider for ${I} [${T}]: `);L=R===""?T:R;let C=kt({alias:I,provider:L});if(C===void 0)break;if(e.stdout.write(`error: ${C}. Enter a provider name, not a model; press Enter to use ${T}.
2164
2166
  `),l&&i.length===0)return e.stderr.write(`error: stdin closed (EOF) before a valid member provider was entered
2165
- `),d(),null}if(!I.has(L)){e.stdout.write(`Loading model suggestions for ${L}...
2166
- `);try{I.set(L,await(t.loadModels??Pc)(L))}catch{I.set(L,[])}}let O=I.get(L),k=$c(L)?"some OpenAI, Anthropic, and Google Gemini models only; not a complete list":"suggestions; availability may vary";e.stdout.write(`Models for ${L} (${k}):
2167
+ `),d(),null}if(!b.has(L)){e.stdout.write(`Loading model suggestions for ${L}...
2168
+ `);try{b.set(L,await(t.loadModels??Pc)(L))}catch{b.set(L,[])}}let O=b.get(L),k=$c(L)?"some OpenAI, Anthropic, and Google Gemini models only; not a complete list":"suggestions; availability may vary";e.stdout.write(`Models for ${L} (${k}):
2167
2169
  `),O.length===0&&e.stdout.write(` No model suggestions available.
2168
2170
  `);for(let R of O)e.stdout.write(` ${R}
2169
2171
  `);e.stdout.write(`Type a model name, including one not listed, or leave blank to ${s.model!==void 0?"keep the default":"omit"}.
2170
- `);let v=s.model,A=await c(`Model for ${b}${v!==void 0?` [${v}]`:" (blank to omit)"}: `),N=A===""?v:A;m.push({alias:b,provider:L,...N!==void 0?{model:N}:{}})}}let p=Sr({teamName:f,members:m}),_=t.editFile??XH(r),h=s.seed??!0;for(;;){e.stdout.write(`
2172
+ `);let v=s.model,A=await c(`Model for ${I}${v!==void 0?` [${v}]`:" (blank to omit)"}: `),N=A===""?v:A;m.push({alias:I,provider:L,...N!==void 0?{model:N}:{}})}}let p=Sr({teamName:f,members:m}),_=t.editFile??XH(r),h=s.seed??!0;for(;;){e.stdout.write(`
2171
2173
  --- ${u} ---
2172
2174
  ${p}---
2173
- `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=UH(jh(HH(),"lmctl-plan-edit-"));try{let T=jh(y,dd(u));WH(T,p,"utf8"),_(T),p=FH(T,"utf8")}finally{jH(y,{recursive:!0,force:!0})}continue}if(g==="q"||g==="quit"||g==="abort")return d(),null;let E=g===""?h:g!=="n"&&g!=="no";return d(),{destPath:u,text:p,seed:E}}}catch(u){throw d(),u}}function hk(t){return Kc(t)}var _k=x(()=>{"use strict";na();us();jp();_n();Yc()});var Ik={};me(Ik,{readPlanSource:()=>kr,runPlan:()=>QH});import{existsSync as Ek,mkdirSync as qH,readdirSync as GH,readFileSync as gk,statSync as VH,writeFileSync as JH}from"node:fs";import{basename as Tk,dirname as KH,extname as YH,join as wk,resolve as Bh}from"node:path";async function QH(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(zH),0;let r=[],s=[];for(let k=0;k<t.length;k+=1){let v=t[k];if(v==="--member"){let A=t[k+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2175
+ `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=UH(jh(HH(),"lmctl-plan-edit-"));try{let T=jh(y,dd(u));WH(T,p,"utf8"),_(T),p=FH(T,"utf8")}finally{jH(y,{recursive:!0,force:!0})}continue}if(g==="q"||g==="quit"||g==="abort")return d(),null;let E=g===""?h:g!=="n"&&g!=="no";return d(),{destPath:u,text:p,seed:E}}}catch(u){throw d(),u}}function hk(t){return Kc(t)}var _k=x(()=>{"use strict";na();us();jp();_n();Yc()});var bk={};me(bk,{readPlanSource:()=>kr,runPlan:()=>QH});import{existsSync as Ek,mkdirSync as qH,readdirSync as GH,readFileSync as gk,statSync as VH,writeFileSync as JH}from"node:fs";import{basename as Tk,dirname as KH,extname as YH,join as wk,resolve as Bh}from"node:path";async function QH(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(zH),0;let r=[],s=[];for(let k=0;k<t.length;k+=1){let v=t[k];if(v==="--member"){let A=t[k+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2174
2176
  `),2;r.push(A),k+=1;continue}s.push(v)}let o=ae(s,["--pattern","--provider","--model","--from","--output"],["--json","--stdout","--force","--seed","--no-seed","--wizard","--non-interactive","--no-interactive"]);if(o.error!==void 0)return e.stderr.write(`error: ${o.error}
2175
2177
  `),e.stderr.write(`usage: lmctl plan [directory] [options]
2176
2178
  `),2;if(o.positionals.length>1)return e.stderr.write(`usage: lmctl plan [directory] [options]
@@ -2180,13 +2182,13 @@ ${p}---
2180
2182
  `),2;if(E&&p)return e.stderr.write(`error: --wizard cannot be combined with --stdout
2181
2183
  `),2;if(E&&m)return e.stderr.write(`error: --wizard cannot be combined with --json
2182
2184
  `),2;if(E&&y)return e.stderr.write(`error: --wizard requires interactive mode
2183
- `),2;let T=l!==void 0||c!==void 0||d!==void 0||u!==void 0||r.length>0,w=e.stdin??process.stdin,S=n.stdinIsTTY??(e.stdin===void 0?process.stdin.isTTY===!0:w.isTTY===!0),I=!T||u===void 0&&r.length===0&&(l===void 0||c===void 0),b=E||!y&&I&&!p&&!m&&S,L;if(b){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2185
+ `),2;let T=l!==void 0||c!==void 0||d!==void 0||u!==void 0||r.length>0,w=e.stdin??process.stdin,S=n.stdinIsTTY??(e.stdin===void 0?process.stdin.isTTY===!0:w.isTTY===!0),b=!T||u===void 0&&r.length===0&&(l===void 0||c===void 0),I=E||!y&&b&&!p&&!m&&S,L;if(I){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2184
2186
  `),2;if(l!==void 0&&r.length>0)return e.stderr.write(`error: --pattern and --member are mutually exclusive
2185
2187
  `),2;let k=Sk(r,d,v=>{e.stderr.write(`error: ${v}
2186
2188
  `)});if(k.error!==void 0)return 1;L=await ZH(e,w,i,a,{provider:c,model:d,pattern:l,members:k.members,seed:!g,output:f},n)}else{if(!T)return e.stderr.write(`error: ${vk}
2187
2189
  `),2;let k=await eB({pattern:l,provider:c,model:d,from:u,memberRaws:r,output:f,directory:a,cwd:i,seedFlag:h,deps:{...n,initConfigPath:Mt(e.env??process.env,n.initConfigPath)}},v=>{e.stderr.write(`error: ${v}
2188
2190
  `)});if(typeof k=="number")return k;L=k}if(L===null)return e.stderr.write(`aborted
2189
- `),1;if(p)return e.stdout.write(L.text),0;let O=L.destPath;return nB(L,O,{asJson:m,force:_,seed:L.seed},e)}async function ZH(t,e,n,r,s,o){let i=await pk({io:t,input:e,cwd:n,...r!==void 0?{directory:r}:{},initial:s,...o.initConfigPath!==void 0?{initConfigPath:o.initConfigPath}:{},...o.loadModels!==void 0?{loadModels:o.loadModels}:{},...o.editFile!==void 0?{editFile:o.editFile}:{},...t.env!==void 0?{env:t.env}:{}});return i===null?null:{text:i.text,destPath:i.destPath,members:hk(i.text),seed:i.seed}}async function eB(t,e){let{pattern:n,provider:r,model:s,from:o,memberRaws:i,output:a,directory:l,cwd:c,seedFlag:d,deps:u}=t,f=[n!==void 0,i.length>0,o!==void 0].filter(Boolean).length;if(f===0)return e(vk),2;if(f>1)return e("--pattern, --member and --from are mutually exclusive"),2;if(o!==void 0&&(r!==void 0||s!==void 0))return e("--from cannot be combined with --provider or --model (the source teamfile defines the roster)"),2;let m=tB(a,l,c);if(o!==void 0){let h;try{h=await kr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=Ub(h),E=Kc(g);return E.length===0?(e(`--from source "${o}" has no parseable _MEMBER_ lines`),1):{text:g,destPath:m,members:E,seed:d}}let p;if(i.length>0){let h=Sk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=Mb(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${Jc})`),2;if(r!==void 0){let g=kt({alias:"Lead",provider:r});if(g!==void 0)return e(g),1;p=h.map(E=>({alias:E,provider:r,...s!==void 0?{model:s}:{}}))}else{let g=wr(u.initConfigPath);if(g===null)return e("missing --provider, and no ~/.lmctl/init.toml found. Run `lmctl init` first, or pass --provider explicitly."),2;let E=[g.provider1,g.provider2,g.provider3];p=h.map((y,T)=>{let w=E[T%E.length];return{alias:y,provider:w.provider,model:s??w.model1}})}}let _=Tk(m,YH(m));return{text:Sr({teamName:_,members:p}),destPath:m,members:p,seed:d}}function Sk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=$b(o);if(i.error!==void 0)return n(i.error),{error:i.error};let a=i.spec,l=a.alias.toLowerCase();if(s.has(l))return n(`duplicate member alias "${a.alias}"`),{error:l};s.add(l),r.push({...a,model:a.model??e})}return r[0].alias.toLowerCase()!=="lead"?(n(`the first member must be Lead (got "${r[0].alias}")`),{error:"lead-not-first"}):{members:r}}function tB(t,e,n){if(t!==void 0)return Bh(n,t);let r=Bh(n,e??".");return wk(r,`${Tk(r)}.lmctl`)}async function nB(t,e,n,r){if(Ek(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2191
+ `),1;if(p)return e.stdout.write(L.text),0;let O=L.destPath;return nB(L,O,{asJson:m,force:_,seed:L.seed},e)}async function ZH(t,e,n,r,s,o){let i=await pk({io:t,input:e,cwd:n,...r!==void 0?{directory:r}:{},initial:s,...o.initConfigPath!==void 0?{initConfigPath:o.initConfigPath}:{},...o.loadModels!==void 0?{loadModels:o.loadModels}:{},...o.editFile!==void 0?{editFile:o.editFile}:{},...t.env!==void 0?{env:t.env}:{}});return i===null?null:{text:i.text,destPath:i.destPath,members:hk(i.text),seed:i.seed}}async function eB(t,e){let{pattern:n,provider:r,model:s,from:o,memberRaws:i,output:a,directory:l,cwd:c,seedFlag:d,deps:u}=t,f=[n!==void 0,i.length>0,o!==void 0].filter(Boolean).length;if(f===0)return e(vk),2;if(f>1)return e("--pattern, --member and --from are mutually exclusive"),2;if(o!==void 0&&(r!==void 0||s!==void 0))return e("--from cannot be combined with --provider or --model (the source teamfile defines the roster)"),2;let m=tB(a,l,c);if(o!==void 0){let h;try{h=await kr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=UI(h),E=Kc(g);return E.length===0?(e(`--from source "${o}" has no parseable _MEMBER_ lines`),1):{text:g,destPath:m,members:E,seed:d}}let p;if(i.length>0){let h=Sk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=MI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${Jc})`),2;if(r!==void 0){let g=kt({alias:"Lead",provider:r});if(g!==void 0)return e(g),1;p=h.map(E=>({alias:E,provider:r,...s!==void 0?{model:s}:{}}))}else{let g=wr(u.initConfigPath);if(g===null)return e("missing --provider, and no ~/.lmctl/init.toml found. Run `lmctl init` first, or pass --provider explicitly."),2;let E=[g.provider1,g.provider2,g.provider3];p=h.map((y,T)=>{let w=E[T%E.length];return{alias:y,provider:w.provider,model:s??w.model1}})}}let _=Tk(m,YH(m));return{text:Sr({teamName:_,members:p}),destPath:m,members:p,seed:d}}function Sk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=$I(o);if(i.error!==void 0)return n(i.error),{error:i.error};let a=i.spec,l=a.alias.toLowerCase();if(s.has(l))return n(`duplicate member alias "${a.alias}"`),{error:l};s.add(l),r.push({...a,model:a.model??e})}return r[0].alias.toLowerCase()!=="lead"?(n(`the first member must be Lead (got "${r[0].alias}")`),{error:"lead-not-first"}):{members:r}}function tB(t,e,n){if(t!==void 0)return Bh(n,t);let r=Bh(n,e??".");return wk(r,`${Tk(r)}.lmctl`)}async function nB(t,e,n,r){if(Ek(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2190
2192
  `),1;qH(KH(e),{recursive:!0}),JH(e,t.text,"utf8");let s=n.asJson?{...r,stdout:{write:()=>{}}}:r;if(!(await vr([e],s)===0))return n.seed&&r.stderr.write(`error: refusing to seed \u2014 lint failed
2191
2193
  `),n.asJson&&te(r,Hh(e,!1,!1,t.members)),1;let a=!1;if(n.seed){let l=await oa([e],s);return a=l===0,n.asJson&&te(r,Hh(e,!0,a,t.members)),l}return n.asJson?(te(r,Hh(e,!0,!1,t.members)),0):(r.stdout.write(`Created ${e}
2192
2194
  `),r.stdout.write(`This is a starting point, not a finished teamfile -- edit it freely.
@@ -2235,7 +2237,7 @@ Examples:
2235
2237
  lmctl plan ./backend --pattern 3 --provider claude --seed
2236
2238
  `,vk=`missing required flags for non-interactive plan:
2237
2239
  one of: --pattern <${Jc}>, --member <Alias:provider[:model]>, or --from <file|dir|url>
2238
- plus: --provider <name> (required with --pattern)`;rB=new Set([301,302,303,307,308]),yk=10});var ud={};me(ud,{extractSaveScriptFlags:()=>kk,performSaveScript:()=>Ak,runWithSaveScript:()=>pB});import{existsSync as oB,mkdirSync as iB,renameSync as aB,writeFileSync as lB}from"node:fs";import{dirname as cB,extname as dB,join as uB}from"node:path";function kk(t,e,n={}){let r=[],s,o,i=!1;for(let c=0;c<t.length;c+=1){let d=t[c];if(d==="--save-script"){let u=t[c+1];if(u===void 0)return{rest:r,error:"--save-script requires a file path"};s=u,c+=1;continue}if(d==="--script"){let u=t[c+1];if(u===void 0)return{rest:r,error:"--script requires a name"};o=u,c+=1;continue}if(d==="--force"&&!n.ownsForce){i=!0;continue}r.push(d)}if(n.ownsForce&&(i=t.includes("--force")),s===void 0)return o!==void 0?{rest:r,error:"--script requires --save-script"}:{rest:r};let a=o??e;if(!bk.test(a))return{rest:r,error:`--script "${a}" must match ${bk} (letters, digits, ., _, -)`};let l=n.extension??".lms";return{rest:r,request:{destPath:s,slug:a,extension:l,force:i}}}function mB(t){let e=t.slice(0,512).trimStart().toLowerCase();return e.startsWith("<!doctype html")||e.startsWith("<html")}async function Ak(t,e,n=fetch){let{destPath:r,slug:s,extension:o,force:i}=e;if(oB(r)&&!i)return t.stderr.write(`error: --save-script: ${r} already exists (use --force to overwrite)
2240
+ plus: --provider <name> (required with --pattern)`;rB=new Set([301,302,303,307,308]),yk=10});var ud={};me(ud,{extractSaveScriptFlags:()=>kk,performSaveScript:()=>Ak,runWithSaveScript:()=>pB});import{existsSync as oB,mkdirSync as iB,renameSync as aB,writeFileSync as lB}from"node:fs";import{dirname as cB,extname as dB,join as uB}from"node:path";function kk(t,e,n={}){let r=[],s,o,i=!1;for(let c=0;c<t.length;c+=1){let d=t[c];if(d==="--save-script"){let u=t[c+1];if(u===void 0)return{rest:r,error:"--save-script requires a file path"};s=u,c+=1;continue}if(d==="--script"){let u=t[c+1];if(u===void 0)return{rest:r,error:"--script requires a name"};o=u,c+=1;continue}if(d==="--force"&&!n.ownsForce){i=!0;continue}r.push(d)}if(n.ownsForce&&(i=t.includes("--force")),s===void 0)return o!==void 0?{rest:r,error:"--script requires --save-script"}:{rest:r};let a=o??e;if(!Ik.test(a))return{rest:r,error:`--script "${a}" must match ${Ik} (letters, digits, ., _, -)`};let l=n.extension??".lms";return{rest:r,request:{destPath:s,slug:a,extension:l,force:i}}}function mB(t){let e=t.slice(0,512).trimStart().toLowerCase();return e.startsWith("<!doctype html")||e.startsWith("<html")}async function Ak(t,e,n=fetch){let{destPath:r,slug:s,extension:o,force:i}=e;if(oB(r)&&!i)return t.stderr.write(`error: --save-script: ${r} already exists (use --force to overwrite)
2239
2241
  `),1;let a=`${fB}/${s}${o}`,l;try{l=await kr(a,n,process.cwd())}catch(u){let f=u instanceof Error?u.message:String(u);return f==="HTTP 404"?t.stderr.write(`error: --save-script: no script is published at ${a} for this command
2240
2242
  `):t.stderr.write(`error: --save-script: could not fetch ${a}: ${f}
2241
2243
  `),1}if(dB(r).toLowerCase()!==o.toLowerCase()&&t.stderr.write(`warning: --save-script: ${r} does not end in "${o}", the extension lmctl.com actually serves for this command
@@ -2243,12 +2245,12 @@ Examples:
2243
2245
  `),1;if(mB(l))return t.stderr.write(`error: --save-script: ${a} did not return a script (looks like an HTML page, not lmscript)
2244
2246
  `),1;let c=cB(r);iB(c,{recursive:!0});let d=uB(c,`.save-script-${process.pid}-${Date.now()}.tmp`);return lB(d,l,"utf8"),aB(d,r),t.stdout.write(`Saved ${a} to ${r}
2245
2247
  `),0}async function pB(t,e,n,r,s={}){let o=kk(n,e,s);if(o.error!==void 0)return t.stderr.write(`error: ${o.error}
2246
- `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:Ak(t,o.request)}var fB,bk,fd=x(()=>{"use strict";ua();fB="https://lmctl.com/lmscript/commands",bk=/^[A-Za-z0-9._-]+$/});var fa,Vte,Xh=x(()=>{"use strict";fa=[{name:"lmctl_chat",description:"Synchronous/blocking backup: send one prompt to a member of an AI-managed .lmctl team \u2014 addressed by teamfile path (team) and alias \u2014 and return the reply. This is the only MCP tool lmctl exposes. Prefer the CLI for normal delegation. For async or long-running work, use the provider or host runtime background/task surface around the blocking command.",inputSchema:{type:"object",properties:{team:{type:"string",description:"Path to .lmctl teamfile"},alias:{type:"string",description:"Target alias; omitted means Lead"},prompt:{type:"string",description:"Prompt text to send"}},required:["team","prompt"]},local:!0}],Vte=fa.length});import{spawn as hB}from"node:child_process";async function Rk(t,e,n){let r=gB.get(t);if(r===void 0)return{status:"error",code:404,message:`unknown tool: ${t}`};let s=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{};for(let o of r.inputSchema.required??[])if(s[o]===void 0)return{status:"error",code:400,message:`missing required parameter: ${o}`};return yB(r.name,s)}function yB(t,e){return t==="lmctl_chat"?EB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function EB(t){let e=typeof t.prompt=="string"?t.prompt:"";if(e.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: prompt"});let n=typeof t.team=="string"?t.team:"";if(n.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: team"});let r=typeof t.alias=="string"&&t.alias.length>0?t.alias:"Lead",s=["prompt",n,r,e];return ye()&&Ke(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),TB(s,process.cwd())}function TB(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=hB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=wB(process.env);s=setTimeout(()=>{try{i.kill("SIGTERM")}catch{}o({status:"error",code:124,message:`lmctl prompt timed out after ${a}ms`})},a),s.unref?.();let l="",c="";i.stdout?.on("data",d=>{l+=d.toString("utf8")}),i.stderr?.on("data",d=>{c+=d.toString("utf8")}),i.on("error",d=>{o({status:"error",code:1,message:`failed to spawn lmctl prompt: ${d.message}`})}),i.on("exit",d=>{if(d===0){ye()&&Ke(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2247
- `).length})),o({status:"ok",data:{text:l.trim()||"(empty response)"}});return}o({status:"error",code:d??1,message:c.trim()||`lmctl prompt exited with code ${d}`})})})}function wB(t){let e=t.LMCTL_MCP_CHAT_TIMEOUT_MS;if(e===void 0||e.trim().length===0)return Nk;let n=Number(e);return!Number.isFinite(n)||n<=0?Nk:n}function qh(t,e=process.env){let r=t.getConfig("api.url")??(e.LMCTL_API_URL!==void 0&&e.LMCTL_API_URL.length>0?e.LMCTL_API_URL:_B),s=t.getConfig("api.token"),o=e.LMCTL_API_TOKEN!==void 0&&e.LMCTL_API_TOKEN.length>0?e.LMCTL_API_TOKEN:s;return{baseUrl:r,token:o}}var _B,Nk,gB,Gh=x(()=>{"use strict";Xh();re();_B="http://127.0.0.1:8787",Nk=30*60*1e3,gB=new Map(fa.map(t=>[t.name,t]))});async function bB(t,e){let n=t.id===void 0,r=t.id??null;if(t.method==="exit")return n||e.io.write(Vh({jsonrpc:"2.0",id:r,result:null})),{kind:"exit"};if(t.method==="initialize")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{protocolVersion:vB,capabilities:{tools:{listChanged:!1}},serverInfo:{name:SB,version:IB}}}};if(t.method==="notifications/initialized")return{kind:"notification"};if(t.method==="shutdown")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:null}};if(t.method==="tools/list")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{tools:fa.map(s=>({name:s.name,description:s.description,inputSchema:s.inputSchema}))}}};if(t.method==="tools/call"){let s=t.params!==null&&typeof t.params=="object"?t.params:{},o=typeof s.name=="string"?s.name:"",i=s.arguments,a=await Rk(o,i,e.dispatch),l=o==="lmctl_chat"&&a.status==="ok"&&a.data!==null&&typeof a.data=="object"&&typeof a.data.text=="string"?a.data.text:JSON.stringify(a);return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{isError:a.status==="error",content:[{type:"text",text:l}]}}}}return n?{kind:"notification"}:{kind:"response",message:{jsonrpc:"2.0",id:r,error:{code:-32601,message:`method not found: ${t.method}`}}}}function Vh(t){return`${JSON.stringify(t)}
2248
- `}async function Lk(t,e){let n=!1,r="",s=!1,o=async i=>{let a=i.trim();if(a.length===0)return;let l;try{l=JSON.parse(a)}catch(d){t.io.write(Vh({jsonrpc:"2.0",id:null,error:{code:-32700,message:`parse error: ${d instanceof Error?d.message:String(d)}`}}));return}l.method==="shutdown"&&(n=!0);let c=await bB(l,t);c.kind==="response"?t.io.write(Vh(c.message)):c.kind==="exit"&&(s=!0)};return new Promise(i=>{let a=Promise.resolve(),l=!1,c=u=>{l||(l=!0,i(u))},d=()=>{let u=r.indexOf(`
2248
+ `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:Ak(t,o.request)}var fB,Ik,fd=x(()=>{"use strict";ua();fB="https://lmctl.com/lmscript/commands",Ik=/^[A-Za-z0-9._-]+$/});var fa,Vte,Xh=x(()=>{"use strict";fa=[{name:"lmctl_chat",description:"Synchronous/blocking backup: send one prompt to a member of an AI-managed .lmctl team \u2014 addressed by teamfile path (team) and alias \u2014 and return the reply. This is the only MCP tool lmctl exposes. Prefer the CLI for normal delegation. For async or long-running work, use the provider or host runtime background/task surface around the blocking command.",inputSchema:{type:"object",properties:{team:{type:"string",description:"Path to .lmctl teamfile"},alias:{type:"string",description:"Target alias; omitted means Lead"},prompt:{type:"string",description:"Prompt text to send"}},required:["team","prompt"]},local:!0}],Vte=fa.length});import{spawn as hB}from"node:child_process";async function Rk(t,e,n){let r=gB.get(t);if(r===void 0)return{status:"error",code:404,message:`unknown tool: ${t}`};let s=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{};for(let o of r.inputSchema.required??[])if(s[o]===void 0)return{status:"error",code:400,message:`missing required parameter: ${o}`};return yB(r.name,s)}function yB(t,e){return t==="lmctl_chat"?EB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function EB(t){let e=typeof t.prompt=="string"?t.prompt:"";if(e.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: prompt"});let n=typeof t.team=="string"?t.team:"";if(n.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: team"});let r=typeof t.alias=="string"&&t.alias.length>0?t.alias:"Lead",s=["prompt",n,r,e];return ye()&&Ke(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),TB(s,process.cwd())}function TB(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=hB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=wB(process.env);s=setTimeout(()=>{try{i.kill("SIGTERM")}catch{}o({status:"error",code:124,message:`lmctl prompt timed out after ${a}ms`})},a),s.unref?.();let l="",c="";i.stdout?.on("data",d=>{l+=d.toString("utf8")}),i.stderr?.on("data",d=>{c+=d.toString("utf8")}),i.on("error",d=>{o({status:"error",code:1,message:`failed to spawn lmctl prompt: ${d.message}`})}),i.on("exit",d=>{if(d===0){ye()&&Ke(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2249
+ `).length})),o({status:"ok",data:{text:l.trim()||"(empty response)"}});return}o({status:"error",code:d??1,message:c.trim()||`lmctl prompt exited with code ${d}`})})})}function wB(t){let e=t.LMCTL_MCP_CHAT_TIMEOUT_MS;if(e===void 0||e.trim().length===0)return Nk;let n=Number(e);return!Number.isFinite(n)||n<=0?Nk:n}function qh(t,e=process.env){let r=t.getConfig("api.url")??(e.LMCTL_API_URL!==void 0&&e.LMCTL_API_URL.length>0?e.LMCTL_API_URL:_B),s=t.getConfig("api.token"),o=e.LMCTL_API_TOKEN!==void 0&&e.LMCTL_API_TOKEN.length>0?e.LMCTL_API_TOKEN:s;return{baseUrl:r,token:o}}var _B,Nk,gB,Gh=x(()=>{"use strict";Xh();re();_B="http://127.0.0.1:8787",Nk=30*60*1e3,gB=new Map(fa.map(t=>[t.name,t]))});async function IB(t,e){let n=t.id===void 0,r=t.id??null;if(t.method==="exit")return n||e.io.write(Vh({jsonrpc:"2.0",id:r,result:null})),{kind:"exit"};if(t.method==="initialize")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{protocolVersion:vB,capabilities:{tools:{listChanged:!1}},serverInfo:{name:SB,version:bB}}}};if(t.method==="notifications/initialized")return{kind:"notification"};if(t.method==="shutdown")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:null}};if(t.method==="tools/list")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{tools:fa.map(s=>({name:s.name,description:s.description,inputSchema:s.inputSchema}))}}};if(t.method==="tools/call"){let s=t.params!==null&&typeof t.params=="object"?t.params:{},o=typeof s.name=="string"?s.name:"",i=s.arguments,a=await Rk(o,i,e.dispatch),l=o==="lmctl_chat"&&a.status==="ok"&&a.data!==null&&typeof a.data=="object"&&typeof a.data.text=="string"?a.data.text:JSON.stringify(a);return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{isError:a.status==="error",content:[{type:"text",text:l}]}}}}return n?{kind:"notification"}:{kind:"response",message:{jsonrpc:"2.0",id:r,error:{code:-32601,message:`method not found: ${t.method}`}}}}function Vh(t){return`${JSON.stringify(t)}
2250
+ `}async function Lk(t,e){let n=!1,r="",s=!1,o=async i=>{let a=i.trim();if(a.length===0)return;let l;try{l=JSON.parse(a)}catch(d){t.io.write(Vh({jsonrpc:"2.0",id:null,error:{code:-32700,message:`parse error: ${d instanceof Error?d.message:String(d)}`}}));return}l.method==="shutdown"&&(n=!0);let c=await IB(l,t);c.kind==="response"?t.io.write(Vh(c.message)):c.kind==="exit"&&(s=!0)};return new Promise(i=>{let a=Promise.resolve(),l=!1,c=u=>{l||(l=!0,i(u))},d=()=>{let u=r.indexOf(`
2249
2251
  `);for(;u!==-1;){let f=r.slice(0,u);r=r.slice(u+1),a=a.then(()=>o(f)).then(()=>{s&&c(0)}),u=r.indexOf(`
2250
2252
  `)}};e.setEncoding("utf8"),e.on("data",u=>{r+=u,d()}),e.on("end",()=>{r.trim().length>0&&(a=a.then(()=>o(r))),a.finally(()=>c(0))}),e.on("error",u=>{t.io.log?.(`mcp: stdin error: ${u.message}
2251
- `),a.finally(()=>c(1))})})}var vB,SB,IB,xk=x(()=>{"use strict";Xh();Gh();vB="2025-06-18",SB="lmctl",IB="0.0.1"});var Ok={};me(Ok,{runMcp:()=>AB});async function AB(t,e={stdout:process.stdout,stderr:process.stderr},n=process.stdin){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(kB),0;if(t.length>0)return e.stderr.write(`usage: lmctl mcp
2253
+ `),a.finally(()=>c(1))})})}var vB,SB,bB,xk=x(()=>{"use strict";Xh();Gh();vB="2025-06-18",SB="lmctl",bB="0.0.1"});var Ok={};me(Ok,{runMcp:()=>AB});async function AB(t,e={stdout:process.stdout,stderr:process.stderr},n=process.stdin){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(kB),0;if(t.length>0)return e.stderr.write(`usage: lmctl mcp
2252
2254
  `),2;U({event:"mcp_bridge_start",pid:process.pid});let r=e.dal===void 0,s=e.dal??NB(),o=1;try{let i=s===void 0?qh({getConfig:()=>null},process.env):qh(s,process.env);return o=await Lk({io:{write:l=>e.stdout.write(l),log:l=>e.stderr.write(l)},dispatch:{config:i,...s!==void 0?{dal:s}:{}}},n),o}finally{U({event:"mcp_bridge_exit",pid:process.pid,exit_code:o}),r&&s!==void 0&&s.close()}}function NB(){let t=Je(),e=3;for(let n=1;n<=e;n+=1)try{return $e({path:t})}catch(r){let s=r instanceof Error?r.message:String(r);if(U({event:"mcp_bridge_db_open_failed",pid:process.pid,attempt:n,db_path:t,error_message:s}),n<e&&Ck(s))RB(50*n);else if(!Ck(s))break}}function Ck(t){return/SQLITE_BUSY|database is locked|database is busy/i.test(t)}function RB(t){let e=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(e,0,0,t)}var kB,Dk=x(()=>{"use strict";vt();Gh();xk();re();Nn();kB=`usage: lmctl mcp
2253
2255
 
2254
2256
  Start the stdio MCP bridge. The bridge resolves api.url and api.token from
@@ -2258,7 +2260,7 @@ local config, then uses stdin/stdout for JSON-RPC frames.
2258
2260
  `),2;let s=V(n,"--since"),o=Xk(s);if("error"in o)return D(e,o.error);let i=o.date,a=V(n,"--lines"),l=V(n,"--max-bytes");if(r&&l!==void 0)return e.stderr.write(`usage: --json cannot be combined with --max-bytes; use --lines
2259
2261
  `),2;if(a!==void 0&&l!==void 0)return D(e,"--lines and --max-bytes are mutually exclusive (choose one)");let c;if(a!==void 0){let g=Number.parseInt(a,10);if(!Number.isFinite(g)||g<1||String(g)!==a)return D(e,`invalid --lines "${a}" (expected a positive integer)`);c={kind:"lines",lines:g}}else{let g=l===void 0?xB:Number.parseInt(l,10);if(!Number.isFinite(g)||g<0||l!==void 0&&String(g)!==l)return D(e,`invalid --max-bytes "${l}" (expected a non-negative integer)`);c={kind:"bytes",maxBytes:g}}let d=z(n,"--watch"),u=V(n,"--watch-interval");if(u!==void 0&&!d)return e.stderr.write(`usage: --watch-interval requires --watch
2260
2262
  `),2;let f=u===void 0?CB:Number.parseInt(u.replace(/s$/,""),10);if(!Number.isSafeInteger(f)||f<1||f>2147483||u!==void 0&&!/^[1-9][0-9]*s?$/.test(u))return D(e,`invalid --watch-interval "${u}" (expected <N>s, N\u22651)`);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected [target] [alias]`);let m=V(n,"--run");if(m!==void 0){if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional [target] [alias]");if(V(n,"--session")!==void 0)return D(e,"--run is mutually exclusive with --session");if(V(n,"--provider")!==void 0)return D(e,"--run is mutually exclusive with --provider");let g=Number.parseInt(m,10);if(!Number.isFinite(g)||g<=0||String(g)!==m)return D(e,`invalid --run "${m}" (expected a positive integer run id)`);try{return await W(e,async E=>MB(e,E,g,c,d,f,i,r))}catch(E){return Ot(e,E)}}let p=sn(LB,{target:n.positionals[0],alias:n.positionals[1],flags:{session:V(n,"--session"),provider:V(n,"--provider")}});if(p.mode==="error")return D(e,p.message);if(p.mode==="managed")return D(e,"tail managed mode requires --run <id>");let _;if(p.mode==="ai-team"){if(V(n,"--provider")!==void 0)return e.stderr.write(`usage: --provider applies only to raw sessions; teamfiles declare their provider
2261
- `),2;if(p.alias===void 0){let g;try{g=await W(e,T=>Ne(p.teamfile,T))}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let E;try{E=be(g)}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let y=Hs(E);if(y===void 0)return D(e,`tail: ${p.teamfile} has no Lead member; pass <tf>:<alias>`);try{let T=await W(e,w=>Xe(p.teamfile,y.alias,w));_={provider:T.provider,sessionId:T.sessionid,cwd:T.sessiondir}}catch(T){return T instanceof ge?D(e,T.message):Ot(e,T)}}else try{let g=await W(e,E=>Xe(p.teamfile,p.alias,E));_={provider:g.provider,sessionId:g.sessionid,cwd:g.sessiondir}}catch(g){return g instanceof ge?D(e,g.message):Ot(e,g)}}else{let g=p.sessionid,E=p.provider;if(E===void 0){let y=await Er(g);if(y.length===0)return D(e,`tail: session "${g}" not found in any provider store`);if(y.length>1)return D(e,`tail: session "${g}" matches multiple providers (${y.join(", ")}); pass --provider`);E=y[0]}_={provider:E,sessionId:g}}let h=await Pk(e,_.provider,_.sessionId,c,-1,i,r);return h===pd?1:d?await new Promise(g=>{let E=async()=>{try{let w=await Pk(e,_.provider,_.sessionId,c,h,i,r);w!==pd&&(h=w)}catch(w){e.stderr.write(`tail: ${w instanceof Error?w.message:String(w)}
2263
+ `),2;if(p.alias===void 0){let g;try{g=await W(e,T=>Ne(p.teamfile,T))}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let E;try{E=Ie(g)}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let y=Hs(E);if(y===void 0)return D(e,`tail: ${p.teamfile} has no Lead member; pass <tf>:<alias>`);try{let T=await W(e,w=>Xe(p.teamfile,y.alias,w));_={provider:T.provider,sessionId:T.sessionid,cwd:T.sessiondir}}catch(T){return T instanceof ge?D(e,T.message):Ot(e,T)}}else try{let g=await W(e,E=>Xe(p.teamfile,p.alias,E));_={provider:g.provider,sessionId:g.sessionid,cwd:g.sessiondir}}catch(g){return g instanceof ge?D(e,g.message):Ot(e,g)}}else{let g=p.sessionid,E=p.provider;if(E===void 0){let y=await Er(g);if(y.length===0)return D(e,`tail: session "${g}" not found in any provider store`);if(y.length>1)return D(e,`tail: session "${g}" matches multiple providers (${y.join(", ")}); pass --provider`);E=y[0]}_={provider:E,sessionId:g}}let h=await Pk(e,_.provider,_.sessionId,c,-1,i,r);return h===pd?1:d?await new Promise(g=>{let E=async()=>{try{let w=await Pk(e,_.provider,_.sessionId,c,h,i,r);w!==pd&&(h=w)}catch(w){e.stderr.write(`tail: ${w instanceof Error?w.message:String(w)}
2262
2264
  `)}},y=setInterval(()=>{E()},f*1e3),T=()=>{clearInterval(y),g(0)};process.once("SIGINT",T),process.once("SIGTERM",T)}):0}async function Pk(t,e,n,r,s,o,i){let a;try{a=await je(n,e)}catch(f){return t.stderr.write(`tail: failed to load session: ${f instanceof Error?f.message:String(f)}
2263
2265
  `),pd}if(a===null)return t.stderr.write(`tail: session not found: ${n} (provider=${e})
2264
2266
  `),pd;let l=a.messages??[],c=s<0&&r.kind==="lines"?Math.max(0,l.length-r.lines):s+1;if(s<0&&o!==void 0){let f=o.getTime(),m=l.length;for(let p=0;p<l.length;p+=1){let _=l[p].timestamp,h=_===void 0?NaN:(_ instanceof Date?_:new Date(_)).getTime();if(!Number.isNaN(h)&&h>=f){m=p;break}}c=Math.max(c,m)}let d=s<0&&c>0;if(c>=l.length)return i===!0&&s<0&&te(t,{schema_version:md,provider:e,sessionId:n,messages:[],truncated:d}),l.length-1;if(i===!0){let f=l.slice(c).map(p=>({role:p.role,content:p.content,model:p.model??null,timestamp:(p.timestamp instanceof Date?p.timestamp:new Date(p.timestamp)).toISOString()}));return te(t,{schema_version:md,provider:e,sessionId:n,messages:f,truncated:d}),l.length-1}let u="";for(let f=c;f<l.length;f+=1)u+=`${Bk(l[f])}
@@ -2335,7 +2337,7 @@ Model keys use reported names first; alias-like keys mean the model was not repo
2335
2337
  SUM(cost_usd) AS costUsd,
2336
2338
  100.0*SUM(CASE WHEN usage_source IS NOT NULL THEN COALESCE(tok_cache_read,0) ELSE 0 END)
2337
2339
  /NULLIF(SUM(CASE WHEN usage_source IS NOT NULL THEN COALESCE(tok_input_uncached,0)+COALESCE(tok_cache_read,0)+COALESCE(tok_cache_write,0) ELSE 0 END),0) AS cacheHitPercent,
2338
- COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var lA={};me(lA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>iA,buildCostPayload:()=>aA,normalizeModelId:()=>gd,runCost:()=>qB});function gd(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function HB(t,e,n,r){let s=new Set,o=[];for(let i of e){let a=n===null?null:Ga(t,i,n,r),l=a?.kind==="priced"||a?.kind==="estimated"?`id:${a.model.normalizedId}`:a?.kind==="known-unpriced"?`id:${a.id}`:`raw:${i.trim().toLowerCase()}`;s.has(l)||(s.add(l),o.push(i))}return o}async function aA(t,e,n){let r=[...new Set([...n.messages.map(k=>k.model),...(n.responses??[]).map(k=>k.model??void 0)].filter(k=>k!==void 0&&k!=="<synthetic>"))],s=[...n.messages].reverse().find(k=>k.model!==void 0&&k.model!=="<synthetic>")?.model,o=n.model??s??null,i=Xn(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?i.input_uncached:n.totalInputTokens??null,output:n.responses?i.output:a,cachedInput:n.responses?i.input_cached:n.totalCachedInputTokens??null},c=await Tt(),d=HB(t,r,c.catalog,c.aliases),u=n.responses===void 0&&d.length>1,f="unavailable",m=null,p=null,_=null,h=null,g=!1,E=null,y=null;if(o!==null&&c.catalog!==null){let k=wt(t,o,c.catalog,c.aliases);if(f=k.state.kind,k.offer!==null)y=k.offer.pricing,m=k.offer.route,p=k.offer.source,_=k.offer.sourceModelId,h=k.provenance,g=k.offer.estimated;else switch(k.state.kind){case"unresolved":E=`alias "${k.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":E=`"${k.state.id}" is a known model with no published price row`;break;case"unknown":E=`model "${o}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":E=`model "${o}" is not offered by provider "${t}" (found under: ${k.state.otherProviders.join(", ")})`;break;default:E=`no lmprice catalog coverage for provider "${t}"`;break}}else o!==null&&(E="lmprice catalog unavailable");let T=y===null?null:{inputPer1m:y.input_per_1m_tokens,outputPer1m:y.output_per_1m_tokens,cachedInputPer1m:y.input_cache_read_per_1m_tokens},w=l.cachedInput??0,S=n.totalCacheWriteInputTokens??0,I=["claude","codex","gemini","qwen","copilot"].includes(t),b=l.input===null?null:Math.max(0,l.input-(I?w:0)-(t==="claude"||t==="copilot"?S:0)),L=l.input===null||l.output===null?null:Vo({input:b,output:l.output,cachedInput:w,...S>0?{cacheWrite:S,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},y);if(L===null&&w>0&&y!==null&&y.input_cache_read_per_1m_tokens==null&&(E="no applicable cache-read price rate"),n.responses)if(L=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(k=>k.response_id)).size!==n.responses.length)E="session accounting coverage is incomplete";else if(!c.catalog)E="lmprice catalog unavailable";else{let k=0,v=null;for(let A of n.responses){let N=A.tokens;if(!A.model){v="a response lacks a model";break}let R=n.turns?.flatMap(Rr=>Rr.rawUsage??[]).find(Rr=>Rr.responseId===A.response_id)?.values,C=R?.promptTokens??R?.prompt_tokens,$=R?.input_tokens,P=R?.cache_read_tokens??R?.input_cache_read_tokens,q=R?.cache_write_tokens??R?.input_cache_write_tokens;if(typeof $=="number"&&typeof P=="number"&&P>$||typeof C=="number"&&typeof P=="number"&&P>C||typeof C=="number"&&typeof q=="number"&&q>C||typeof C=="number"&&typeof P=="number"&&typeof q=="number"&&P+q>C){v=`${t} reported contradictory token counters`;break}if(N.output===null){v=`${t} does not record output tokens`;break}if(N.input_cached===null){v=`${t} does not record cached input tokens`;break}let M=A.model_provider??t,ue=gd(A.model??""),H=(M==="deepseek"||A.model_provider==="deepseek")&&(A.model_provider===void 0||A.model_provider==="deepseek")&&iA.has(ue),ne=N.input_cache_write;if(ne===null&&!H){v=`${t} does not record cache-write input tokens`;break}if(t==="agy"&&(ne??0)>0){v="cache-write inclusion in input is not verified";break}let fe=["kimi","opencode","miniplayer"].includes(t),ze=wt(M,A.model,c.catalog,c.aliases),Qe=ze.offer??wt(t,A.model,c.catalog,c.aliases).offer;if(Qe===null){switch(ze.state.kind){case"no-catalog":v=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":v=`alias "${ze.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":v=`"${ze.state.id}" is a known model with no published price row`;break;case"unknown":v=`model "${A.model}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":v=`model "${A.model}" is not offered by provider "${t}" (found under: ${ze.state.otherProviders.join(", ")})`;break;default:v=`no applicable price for response model "${A.model}"`;break}break}if(ne===null){let Rr=(Qe.route??"").toLowerCase(),F=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(Rr),j=gd(Qe.sourceModelId??""),he=Qe.provider==="deepseek"&&Qe.source!=="openrouter"&&!F&&j===ue;if(H&&he)ne=0;else{v=`${t} does not record cache-write input tokens`;break}}if(N.input_uncached===null){v=`${t} does not record uncached input tokens`;break}let Ao=Vo({input:Math.max(0,N.input_uncached-(fe?ne:0)),cachedInput:N.input_cached,cacheWrite:ne,output:N.output},Qe?.pricing??null);if(Ao===null){v=`no applicable price for response model "${A.model}"`;break}k+=Ao,!m&&Qe&&(m=Qe.route,f="priced")}L=v?null:k,E=v}return L===null&&(!n.responses&&l.input===null&&l.output===null?E=`${t} does not record token usage`:!n.responses&&l.input===null&&!E?E=`${t} does not record input tokens`:!n.responses&&l.output===null&&!E?E=`${t} does not record output tokens`:E||(E=`no lmprice entry for "${o??"unknown"}"`),(f==="priced"||f==="estimated")&&(f="unavailable",m=null,p=null,_=null,h=null,T=null)),{schema_version:BB,provider:t,sessionId:e,model:o,modelsUsed:d,approximate:u,tokens:l,pricePerModel:T,costUsd:L,priceResolution:f,priceRoute:m,priceSource:p,priceSourceModelId:_,priceProvenance:h,priceEstimated:g,costUnavailableReason:E,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}async function qB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${XB}
2340
+ COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var lA={};me(lA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>iA,buildCostPayload:()=>aA,normalizeModelId:()=>gd,runCost:()=>qB});function gd(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function HB(t,e,n,r){let s=new Set,o=[];for(let i of e){let a=n===null?null:Ga(t,i,n,r),l=a?.kind==="priced"||a?.kind==="estimated"?`id:${a.model.normalizedId}`:a?.kind==="known-unpriced"?`id:${a.id}`:`raw:${i.trim().toLowerCase()}`;s.has(l)||(s.add(l),o.push(i))}return o}async function aA(t,e,n){let r=[...new Set([...n.messages.map(k=>k.model),...(n.responses??[]).map(k=>k.model??void 0)].filter(k=>k!==void 0&&k!=="<synthetic>"))],s=[...n.messages].reverse().find(k=>k.model!==void 0&&k.model!=="<synthetic>")?.model,o=n.model??s??null,i=Xn(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?i.input_uncached:n.totalInputTokens??null,output:n.responses?i.output:a,cachedInput:n.responses?i.input_cached:n.totalCachedInputTokens??null},c=await Tt(),d=HB(t,r,c.catalog,c.aliases),u=n.responses===void 0&&d.length>1,f="unavailable",m=null,p=null,_=null,h=null,g=!1,E=null,y=null;if(o!==null&&c.catalog!==null){let k=wt(t,o,c.catalog,c.aliases);if(f=k.state.kind,k.offer!==null)y=k.offer.pricing,m=k.offer.route,p=k.offer.source,_=k.offer.sourceModelId,h=k.provenance,g=k.offer.estimated;else switch(k.state.kind){case"unresolved":E=`alias "${k.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":E=`"${k.state.id}" is a known model with no published price row`;break;case"unknown":E=`model "${o}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":E=`model "${o}" is not offered by provider "${t}" (found under: ${k.state.otherProviders.join(", ")})`;break;default:E=`no lmprice catalog coverage for provider "${t}"`;break}}else o!==null&&(E="lmprice catalog unavailable");let T=y===null?null:{inputPer1m:y.input_per_1m_tokens,outputPer1m:y.output_per_1m_tokens,cachedInputPer1m:y.input_cache_read_per_1m_tokens},w=l.cachedInput??0,S=n.totalCacheWriteInputTokens??0,b=["claude","codex","gemini","qwen","copilot"].includes(t),I=l.input===null?null:Math.max(0,l.input-(b?w:0)-(t==="claude"||t==="copilot"?S:0)),L=l.input===null||l.output===null?null:Vo({input:I,output:l.output,cachedInput:w,...S>0?{cacheWrite:S,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},y);if(L===null&&w>0&&y!==null&&y.input_cache_read_per_1m_tokens==null&&(E="no applicable cache-read price rate"),n.responses)if(L=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(k=>k.response_id)).size!==n.responses.length)E="session accounting coverage is incomplete";else if(!c.catalog)E="lmprice catalog unavailable";else{let k=0,v=null;for(let A of n.responses){let N=A.tokens;if(!A.model){v="a response lacks a model";break}let R=n.turns?.flatMap(Rr=>Rr.rawUsage??[]).find(Rr=>Rr.responseId===A.response_id)?.values,C=R?.promptTokens??R?.prompt_tokens,$=R?.input_tokens,P=R?.cache_read_tokens??R?.input_cache_read_tokens,q=R?.cache_write_tokens??R?.input_cache_write_tokens;if(typeof $=="number"&&typeof P=="number"&&P>$||typeof C=="number"&&typeof P=="number"&&P>C||typeof C=="number"&&typeof q=="number"&&q>C||typeof C=="number"&&typeof P=="number"&&typeof q=="number"&&P+q>C){v=`${t} reported contradictory token counters`;break}if(N.output===null){v=`${t} does not record output tokens`;break}if(N.input_cached===null){v=`${t} does not record cached input tokens`;break}let M=A.model_provider??t,ue=gd(A.model??""),H=(M==="deepseek"||A.model_provider==="deepseek")&&(A.model_provider===void 0||A.model_provider==="deepseek")&&iA.has(ue),ne=N.input_cache_write;if(ne===null&&!H){v=`${t} does not record cache-write input tokens`;break}if(t==="agy"&&(ne??0)>0){v="cache-write inclusion in input is not verified";break}let fe=["kimi","opencode","miniplayer"].includes(t),ze=wt(M,A.model,c.catalog,c.aliases),Qe=ze.offer??wt(t,A.model,c.catalog,c.aliases).offer;if(Qe===null){switch(ze.state.kind){case"no-catalog":v=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":v=`alias "${ze.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":v=`"${ze.state.id}" is a known model with no published price row`;break;case"unknown":v=`model "${A.model}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":v=`model "${A.model}" is not offered by provider "${t}" (found under: ${ze.state.otherProviders.join(", ")})`;break;default:v=`no applicable price for response model "${A.model}"`;break}break}if(ne===null){let Rr=(Qe.route??"").toLowerCase(),F=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(Rr),j=gd(Qe.sourceModelId??""),he=Qe.provider==="deepseek"&&Qe.source!=="openrouter"&&!F&&j===ue;if(H&&he)ne=0;else{v=`${t} does not record cache-write input tokens`;break}}if(N.input_uncached===null){v=`${t} does not record uncached input tokens`;break}let Ao=Vo({input:Math.max(0,N.input_uncached-(fe?ne:0)),cachedInput:N.input_cached,cacheWrite:ne,output:N.output},Qe?.pricing??null);if(Ao===null){v=`no applicable price for response model "${A.model}"`;break}k+=Ao,!m&&Qe&&(m=Qe.route,f="priced")}L=v?null:k,E=v}return L===null&&(!n.responses&&l.input===null&&l.output===null?E=`${t} does not record token usage`:!n.responses&&l.input===null&&!E?E=`${t} does not record input tokens`:!n.responses&&l.output===null&&!E?E=`${t} does not record output tokens`:E||(E=`no lmprice entry for "${o??"unknown"}"`),(f==="priced"||f==="estimated")&&(f="unavailable",m=null,p=null,_=null,h=null,T=null)),{schema_version:BB,provider:t,sessionId:e,model:o,modelsUsed:d,approximate:u,tokens:l,pricePerModel:T,costUsd:L,priceResolution:f,priceRoute:m,priceSource:p,priceSourceModelId:_,priceProvenance:h,priceEstimated:g,costUnavailableReason:E,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}async function qB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${XB}
2339
2341
  `),0;let n=ae(t,["--provider"],["--json"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <target> [alias]`);let r=z(n,"--json"),s=sn(WB,{target:n.positionals[0],alias:n.positionals[1],flags:{provider:V(n,"--provider")}});if(s.mode==="error")return D(e,s.message);if(s.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let o,i;if(s.mode==="ai-team")try{let E=await W(e,y=>Xe(s.teamfile,s.alias,y));o=E.provider,i=E.sessionid}catch(E){if(E instanceof ge)return D(e,E.message);throw E}else if(i=s.sessionid,s.provider!==void 0)o=s.provider;else{let E=await Er(i);if(E.length===0)return D(e,`cost: session "${i}" not found in any provider store`);if(E.length>1)return D(e,`cost: session "${i}" matches multiple providers (${E.join(", ")}); pass --provider`);o=E[0]}let a;try{a=await je(i,o)}catch(E){return D(e,`cost: failed to load session: ${E instanceof Error?E.message:String(E)}`)}if(a===null)return D(e,`cost: session not found: ${i} (provider=${o})`);let l=await aA(o,i,a),{model:c,modelsUsed:d,approximate:u,tokens:f,costUsd:m,priceEstimated:p,priceRoute:_,costUnavailableReason:h}=l,g={source:l.priceDataSource,generatedAt:l.priceDataGeneratedAt};return r?(te(e,l),0):(e.stdout.write(`Session: ${i}
2340
2342
  `),e.stdout.write(` Provider: ${o}
2341
2343
  `),e.stdout.write(` Model: ${c??"(unknown)"}
@@ -2377,13 +2379,13 @@ copy, in that order.`});function dA(t,e={}){return t.query("SELECT * FROM run OR
2377
2379
  lmctl ls --runs [--limit N] [--format table|json] [--json]
2378
2380
 
2379
2381
  List native provider sessions in scope, or list recent managed runs with --runs.`,VB=50,fA=500});import{closeSync as hA,openSync as QB,writeFileSync as _A,fsyncSync as ZB,renameSync as eX,unlinkSync as tX,lstatSync as Kh,readFileSync as nX}from"node:fs";import{randomUUID as rX}from"node:crypto";import{dirname as sX,join as oX}from"node:path";function yd(t,e,n){let r=()=>n===null?(()=>{try{return Kh(t),!0}catch(a){if(a.code==="ENOENT")return!1;throw a}})():!nX(t).equals(Buffer.from(n,"utf8")),s=384;if(n!==null){let a=Kh(t);if(!a.isFile())throw new Error("Profile path must be a regular file: "+t);if(s=a.mode&511,!(s&146))throw new Error("Profile is read-only: "+t)}let o=oX(sX(t),".init-"+rX()+".tmp"),i;try{if(i=QB(o,"wx",s),_A(i,e,"utf8"),ZB(i),hA(i),i=void 0,r())throw new Error("Profile changed concurrently: "+t);if(n!==null){let a=t+".bak";try{if(!Kh(a).isFile())throw new Error("Backup path is not a regular file: "+a)}catch(l){if(l.code!=="ENOENT")throw l}if(_A(a,n,{encoding:"utf8",flag:"w",mode:s}),r())throw new Error("Profile changed concurrently: "+t)}eX(o,t)}finally{i!==void 0&&hA(i);try{tX(o)}catch(a){if(a.code!=="ENOENT")throw a}}}var gA=x(()=>{"use strict"});var yA={};me(yA,{runInit:()=>uX});import{mkdirSync as iX,readFileSync as aX}from"node:fs";import{dirname as lX}from"node:path";function dX(t){try{return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(aX(t))}catch(e){if(e.code==="ENOENT")return null;throw new qe(t,"read",e.message)}}async function uX(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(cX),0;let r=t.includes("--force"),s=t.find(i=>i!=="--force"&&i!=="--help"&&i!=="-h");if(s!==void 0)return e.stderr.write(`error: unknown argument: ${s}
2380
- `),2;let o=Mt(e.env??process.env,n.configPath);try{let i=pb((n.detectProviders??gb)()),a=dX(o);if(i.length===0)return e.stderr.write(`error: no supported provider is installed -- looked for ${fo.join(", ")} on PATH (each must run \`<name> --version\`). ${a===null?"Nothing was written":`${o} was left unchanged`}; install a provider CLI, then run this again.
2381
- `),1;let l=[],c={},d=[];for(let p of i)try{let _=await(n.modelsForProvider??hb)(p);if(_.length===0)throw new Error(`No model ids are available for detected provider "${p}"`);l.push(p),c[p]=_}catch(_){let h=_ instanceof Error?_.message:String(_),g=`${p}: ${h}`;d.push(g),e.stderr.write(`warning: ${p} model catalog unavailable (${h}); skipping this provider.
2382
+ `),2;let o=Mt(e.env??process.env,n.configPath);try{let i=pI((n.detectProviders??gI)()),a=dX(o);if(i.length===0)return e.stderr.write(`error: no supported provider is installed -- looked for ${fo.join(", ")} on PATH (each must run \`<name> --version\`). ${a===null?"Nothing was written":`${o} was left unchanged`}; install a provider CLI, then run this again.
2383
+ `),1;let l=[],c={},d=[];for(let p of i)try{let _=await(n.modelsForProvider??hI)(p);if(_.length===0)throw new Error(`No model ids are available for detected provider "${p}"`);l.push(p),c[p]=_}catch(_){let h=_ instanceof Error?_.message:String(_),g=`${p}: ${h}`;d.push(g),e.stderr.write(`warning: ${p} model catalog unavailable (${h}); skipping this provider.
2382
2384
  `)}if(l.length===0)return e.stderr.write(`error: no detected provider returned model ids (${d.join("; ")}). Nothing was written.
2383
- `),1;let u=_b(l,c);e.stderr.write(`notice: installed: ${i.join(", ")} -- provider slots use order (${fo.join(", ")}); model1 uses each provider's first reported id
2385
+ `),1;let u=_I(l,c);e.stderr.write(`notice: installed: ${i.join(", ")} -- provider slots use order (${fo.join(", ")}); model1 uses each provider's first reported id
2384
2386
  `);let f=()=>{l.length<3&&e.stderr.write(`notice: only ${l.length} provider${l.length===1?" was":"s were"} available for slots (${l.join(", ")}) -- ${l.length===1?"Provider2 and Provider3 repeat Provider1":"Provider3 repeats Provider1"}.
2385
2387
  `)},m=p=>{p.length>0&&e.stdout.write(`${p.map(_=>`[${_}]`).join(", ")} ${p.length===1?"is":"are"} not in ${o} -- left as you have them (init refreshes only the example slots present; add one to have it filled).
2386
- `)};if(a!==null&&!r){let p=yb(a,u);if(!p.ok)return e.stderr.write(`error: ${o}${p.line!==void 0?`:${p.line}`:""}: ${p.error}
2388
+ `)};if(a!==null&&!r){let p=yI(a,u);if(!p.ok)return e.stderr.write(`error: ${o}${p.line!==void 0?`:${p.line}`:""}: ${p.error}
2387
2389
  `),e.stderr.write("The file was left unchanged. Fix it by hand, or run `lmctl init --force` to regenerate it from scratch.\n"),1;if(p.changes.length===0)return e.stdout.write(`${o} is up to date -- detected provider/model values already match.
2388
2390
  `),m(p.absent),e.stdout.write(`
2389
2391
  `),e.stdout.write(ra(u)),e.stdout.write(`
@@ -2442,11 +2444,11 @@ it is expected.
2442
2444
  --force Regenerate the whole example file from detection (previous file
2443
2445
  saved as init.toml.bak). Slots you added are NOT kept by --force.
2444
2446
  -h, --help display help for command
2445
- `});function TA(t){let e=Object.create(null),n=Object.create(null),r=(s,o,i=!0)=>{if(Array.isArray(s)){let a=s.map((l,c)=>r(l,o+"."+c,!1));return i&&(n[o]=a),a}if(s&&typeof s=="object"&&!(s instanceof Date)){let a=Object.create(null);for(let[l,c]of Object.entries(s)){let u=/^Provider[123]$/.test(o)&&["provider","model1"].includes(l)?l[0].toUpperCase()+l.slice(1):l;if(Object.hasOwn(a,u))throw Error(`Ambiguous property '${o}.${u}'`);a[u]=r(c,o?o+"."+u:u,i&&/^[_a-zA-Z]\w*$/.test(u))}return a}return i&&(n[o]=s),s};for(let[s,o]of Object.entries(t))e[s]=r(o,s,/^[_a-zA-Z]\w*$/.test(s));return{properties:e,flat:n}}var wA=x(()=>{"use strict"});import{execFileSync as fX}from"node:child_process";import{resolve as vA}from"node:path";function mX(t){return t.filter(e=>e.state!=="retired")}function SA(t,e,n){if(n!==void 0){let a=e.findProjectByName(n);return a===null?D(t,`project not found: ${n}`):a}let r=t.cwd??process.cwd(),s;try{s=fX("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return D(t,"terminal cannot infer a member from cwd because this directory is not in a git repo; use `lmctl terminal <teamfile> <alias>`")}let o=vA(s),i=e.listProjects().find(a=>vA(a.local_path)===o);return i===void 0?D(t,`terminal cannot infer a member from cwd ${o}; use \`lmctl terminal <teamfile> <alias>\``):i}function IA(t,e,n,r){if(r!==void 0){let o=e.findTeamByName(r);return o===null?D(t,`team not found: ${r}`):o}let s=e.getTeam(n.team_id);return s===null?D(t,`project ${n.name} has no assigned team; use --team <name>`):s}function bA(t,e,n,r){if(r!==void 0){let o=e.findTeamMemberByAlias(n.id,r);return o===null||o.state==="retired"?D(t,`member not found: ${r}`):o}let s=mX(e.listTeamMembers(n.id)).find(o=>o.role==="agent");return s===void 0?D(t,`team ${n.name} has no active agent member`):s}var kA=x(()=>{"use strict";le()});function AA(t,e,n){let r=t.getRun(e);if(r===null)return{err:`run ${e}: not found`};if(n!==void 0){let l=t.findTeamMemberByAlias(r.team_id,n);return l===null?{err:`run ${e}: team has no member alias "${n}"`}:l.sessionid===null||l.sessionid.length===0?{err:`run ${e}: member "${l.alias}" has no sessionid yet (seed first)`}:{ok:{provider:l.provider,sessionid:l.sessionid,sessiondir:l.sessiondir,alias:l.alias,...l.model!==null&&l.model!==void 0?{model:l.model}:{}}}}let s=t.latestAgentCall(e);if(s!==null){let l=t.findTeamMemberByAlias(r.team_id,s.alias);return l===null?{err:`run ${e}: team has no member alias "${s.alias}" (latest agent_call references a member that has been removed)`}:l.sessionid===null||l.sessionid.length===0?{err:`run ${e}: member "${l.alias}" has no sessionid yet (seed first)`}:{ok:{provider:l.provider,sessionid:l.sessionid,sessiondir:l.sessiondir,alias:l.alias,...l.model!==null&&l.model!==void 0?{model:l.model}:{}}}}let i=t.listTeamMembers(r.team_id).filter(l=>l.state!=="retired"&&l.sessionid!==null&&l.sessionid.length>0);if(i.length===0)return{err:`run ${e}: cannot resolve an agent session (no agent_call yet, no seeded member)`};if(i.length>1){let l=i.map(c=>c.alias).join(", ");return{err:`run ${e}: cannot resolve an agent session (no agent_call yet; team has multiple members [${l}] \u2014 pass --alias)`}}let a=i[0];return{ok:{provider:a.provider,sessionid:a.sessionid,sessiondir:a.sessiondir,alias:a.alias,...a.model!==null&&a.model!==void 0?{model:a.model}:{}}}}var NA=x(()=>{"use strict"});var CA={};me(CA,{SIZE_WARN_EST_TOKENS:()=>ma,estimateTokens:()=>xA,runTeamTerminal:()=>yX,runTerminal:()=>zh});import{constants as pX}from"node:os";import{spawn as hX}from"node:child_process";import{statSync as _X}from"node:fs";async function zh(t,e){if(t.includes("--help")||t.includes("-h"))return SX(e);let n=ae(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(Rn(e)&&!z(n,"--size"))return D(e,"terminal opens an interactive TUI; non-interactive mode is enabled");let r=V(n,"--run");if(r!==void 0){let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<=0||String(s)!==r)return D(e,`invalid --run "${r}" (expected a positive integer run id)`);if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional <teamfile>[:alias]");let o=["--team","--project","--size","--json"];for(let i of o)if(i==="--size"||i==="--json"?z(n,i):V(n,i)!==void 0)return D(e,`--run is mutually exclusive with ${i}`);try{return await W(e,async i=>{let a=V(n,"--alias"),l=AA(i,s,a);return"err"in l?D(e,l.err):Qh(e,{provider:l.ok.provider,sessionid:l.ok.sessionid,sessiondir:l.ok.sessiondir,...l.ok.model!==void 0?{model:l.ok.model}:{}})})}catch(i){return Ot(e,i)}}if(n.positionals.length>0){let s=["--team","--project","--size","--alias"];for(let l of s)if(l==="--size"?z(n,l):V(n,l)!==void 0)return D(e,`positional <teamfile>[:alias] is mutually exclusive with ${l} (alias is the SECOND POSITIONAL: \`terminal <teamfile> <alias>\`).`);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <teamfile>[:alias] [alias]`);let o=n.positionals[0],i=n.positionals[1],a=sn(gX,{target:o,alias:i,flags:{}});return a.mode==="error"?D(e,a.message):a.mode!=="ai-team"?D(e,`internal: terminal positional yielded unexpected mode "${a.mode}"`):a.alias===void 0?D(e,"terminal: alias required for the teamfile target"):await W(e,l=>LA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await W(e,async s=>{let o=TX(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?vX(e,s,o,i,z(n,"--json")):wX(e,s,o,i)})}catch(s){return Ot(e,s)}}async function yX(t,e,n,r,s){let o=await LA(t,e,n,r,!1,s);return{code:s.signalObserved?null:o,signal:s.signalObserved??null}}async function LA(t,e,n,r,s,o){let i;try{i=Xe(e,n,r)}catch(A){return A instanceof ge?D(t,A.message):Ot(t,A)}let a=tr(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:ar(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,N=A===null?null:et(A)?"live":"dead",R=`${i.alias} is busy/held by ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} `+(A===null?"(holder_pid=unavailable)":`(holder_pid=${A}, ${N})`);return s?(te(t,{status:"error",errorKind:"busy",message:R,holder_pid:A,holder_liveness:N}),1):D(t,R)}let l=_I({teamfile:i.teamfile,alias:i.alias,pid:o?.pid}),c=null,d=null,u=null,f=[],m={...o?.env??t.env??process.env},p=!1,_=null,h=!1,g,E,y,T=A=>{c!==null&&(clearInterval(c),c=null);try{let N=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&N!==null&&A.push("terminal lock release was not acknowledged")}catch(N){A.push(`terminal lock release: ${N instanceof Error?N.message:String(N)}`)}try{let N=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&N!==null&&A.push("inflight release was not acknowledged")}catch(N){A.push(`inflight release: ${N instanceof Error?N.message:String(N)}`)}},w=(A,N)=>{let R=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(N)}finally{try{r.db.pragma(`busy_timeout=${R}`)}catch(C){N.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},S=(A,N)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let C=r.getTrackedInvocation(d);C==null||C.status==="running"?N.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(R){N.push(`tracked terminal finish: ${R instanceof Error?R.message:String(R)}`)}},I=A=>{if(p)return;p=!0;let N=[];try{w(R=>{T(R),S({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},R)},N)}catch(R){N.push(R instanceof Error?R.message:String(R))}N.length>0&&(_=Error(N.join("; ")))},b=!o,L=b?new AbortController:void 0,O=()=>L?.abort("SIGINT"),k=()=>L?.abort("SIGTERM");b&&(process.once("SIGINT",O),process.once("SIGTERM",k));let v=o??{env:m,signal:L?.signal};v.env=m;try{if(v.cancel=I,v.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let R,C;E=new Promise((P,q)=>{R=P,C=q});let $=performance.now();return(async()=>{if(I("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let P=5e3-(performance.now()-$),q;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise((M,ue)=>{q=setTimeout(()=>ue(Error("terminal close deadline exceeded")),P)})])}catch(M){throw _=M instanceof Error?M:Error(String(M)),_}finally{clearTimeout(q)}}})().then(R,C),E},finalizeSync(R){if(I(R),o.stop?.(R),_)throw _}}),p||v.signal?.aborted){let R=v.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return I(R),R==="SIGINT"?130:143}r.setTerminalLock(l),d=EX(r,i,m,o?.pid),d!==null&&(m.LMCTL_INVOCATION_ID=String(d));let A=r.getRootTeam(i.teamfile)?.name??null;A!==null&&(m.LMBEE_TEAM_NAME=A),c=setInterval(()=>{try{let R=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,R);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,R),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},gI(m)),c.unref?.();try{Xs(t,be(i.teamfile),i.teamfile)}catch{}let N=v;return g=Qh(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},R=>{f.push(`${R.provider} terminal ignored model=${R.model}: ${R.reason}`)},N),u=await g,u}catch(A){throw y=A,A}finally{if(b&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",k)),!p){p=!0;let A=[];try{w(N=>{T(N),S({status:u===0?"done":"error",exit_code:u,result_summary:u===0?"terminal session ended":null,error:u===0?null:`terminal exited with code ${u??"unknown"}`,...f.length>0?{config_warnings:JSON.stringify(f)}:{}},N)},A)}catch(N){A.push(N instanceof Error?N.message:String(N))}A.length>0&&(_=Error(A.join("; ")))}if(_){if(y===void 0)throw _;try{t.stderr.write("error: terminal cleanup: "+_.message+`
2446
- `)}catch{}}}}function EX(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:$s(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 Qh(t,e,n,r){let{provider:s,sessionid:o,sessiondir:i,model:a}=e;if(!kc(s))return D(t,`no resume incantation for provider "${s}"`);if(!iI.test(o))return D(t,"refusing to resume: malformed sessionid");let l=Sp(s,o,{isLead:e.isLead,model:a,onModelIgnored:p=>{let _=`warning: ${p.provider} terminal ignored model=${p.model}: ${p.reason}`;t.stderr.write(`${_}
2447
- `),He({event:"model_ignored",provider:p.provider,model:p.model,reason:p.reason}),n?.(p)}});if(l===null||l.length===0)return D(t,`no resume incantation for provider "${s}"`);let c=Ce(r?.env??t.env??process.env,i,o,"terminal"),d=await aI(s,{binary:l[0],cwd:i,env:c,signal:r?.signal});if(r?.signal?.aborted){let p=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(p),p==="SIGINT"?130:143}let[u,...f]=l,m=d.kind==="use-binary"?d.binary:u;return d.message&&t.stderr.write(d.message+`
2448
- `),await new Promise(p=>{if(r?.signal?.aborted){let b=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(b),p(b==="SIGINT"?130:143)}let _=r?.streams,h=_?[_.stdin,_.stdout,_.stderr].map(b=>b.fd):void 0,g=h?.every(b=>typeof b=="number"),E=hX(m,f,{stdio:_?g?h:["pipe","pipe","pipe"]:"inherit",cwd:i,env:c}),y=_?.stdin?.readableFlowing;_&&!g&&(_.stdin.pipe(E.stdin),E.stdout?.pipe(_.stdout,{end:!1}),E.stderr?.pipe(_.stderr,{end:!1}));let T=!1,w=b=>{if(!T){T=!0;try{r?.cancel?.(b)}catch{}{try{E.kill(b)}catch{}de(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},S=()=>w(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=w);let I=()=>{r?.signal?.removeEventListener("abort",S),_&&!g&&(_.stdin.unpipe(E.stdin),y||_.stdin.pause(),E.stdout?.unpipe(_.stdout),E.stderr?.unpipe(_.stderr))};r?.signal?.addEventListener("abort",S,{once:!0}),r?.signal?.aborted&&S(),E.stdin?.on("error",()=>{}),E.on("error",b=>{I(),p(D(t,`failed to launch ${m}: ${b.message}`))}),E.on("exit",(b,L)=>{I(),r&&(r.signalObserved=L);let O=b??(L?128+(pX.signals[L]??1):1),k=lI(s);k&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+k+`
2449
- `),p(O)})})}function TX(t,e,n){let r=V(n,"--team");if(r!==void 0){let i=e.findTeamByName(r);return i===null?D(t,`team not found: ${r}`):i}let s=SA(t,e,V(n,"--project"));return typeof s=="number"?s:IA(t,e,s,void 0)}async function wX(t,e,n,r){let s=bA(t,e,n,r);if(typeof s=="number")return s;let o=s.sessionid;if(o===null||o.trim().length===0)return D(t,`member ${s.alias} has no session yet \u2014 seed it first: lmctl seed <teamfile> (check with lmctl status <teamfile>)`);let i=new AbortController,a=()=>i.abort("SIGINT"),l=()=>i.abort("SIGTERM");process.once("SIGINT",a),process.once("SIGTERM",l);try{return await Qh(t,{provider:ju(s),sessionid:o,sessiondir:s.sessiondir,...s.model!==null&&s.model!==void 0?{model:s.model}:{}},void 0,{env:t.env??process.env,signal:i.signal})}finally{process.removeListener("SIGINT",a),process.removeListener("SIGTERM",l)}}function xA(t){if(t&&Array.isArray(t.messages)&&t.messages.length>0){let n=t.messages.reduce((r,s)=>r+(s.content?.length??0),0);return{chars:n,est:Math.ceil(n/4),messages:t.messages.length,bytes:null}}let e=t?.filePath;if(e!==void 0)try{let n=_X(e).size;return{chars:n,est:Math.ceil(n/4),messages:t?.messages?.length??null,bytes:n}}catch{}return{chars:0,est:0,messages:null,bytes:null}}async function vX(t,e,n,r,s){let o;if(r!==void 0){let a=e.findTeamMemberByAlias(n.id,r);if(a===null||a.state==="retired")return D(t,`member not found: ${r}`);o=[a]}else o=e.listTeamMembers(n.id).filter(a=>a.state!=="retired"&&a.sessionid!==null);let i=[];for(let a of o){let l=a.sessionid;if(l===null)continue;let c=ju(a),d=a.model??null,u=null;kc(c)&&(u=await je(l,c));let f=xA(u),m=f.est>ma;i.push({alias:a.alias,provider:c,sessionid:l,messages:f.messages,bytes:f.bytes,est_tokens:f.est,estimate:!0,over_guide:m,model:d,resume_incantation:m?cI(c,l,d!==null?{model:d}:{}):null})}if(s)return te(t,{estimate:!0,legend:RA,guide_tokens:ma,members:i}),0;t.stdout.write(`session size \u2014 ESTIMATE only (nothing is changed automatically)
2447
+ `});function TA(t){let e=Object.create(null),n=Object.create(null),r=(s,o,i=!0)=>{if(Array.isArray(s)){let a=s.map((l,c)=>r(l,o+"."+c,!1));return i&&(n[o]=a),a}if(s&&typeof s=="object"&&!(s instanceof Date)){let a=Object.create(null);for(let[l,c]of Object.entries(s)){let u=/^Provider[123]$/.test(o)&&["provider","model1"].includes(l)?l[0].toUpperCase()+l.slice(1):l;if(Object.hasOwn(a,u))throw Error(`Ambiguous property '${o}.${u}'`);a[u]=r(c,o?o+"."+u:u,i&&/^[_a-zA-Z]\w*$/.test(u))}return a}return i&&(n[o]=s),s};for(let[s,o]of Object.entries(t))e[s]=r(o,s,/^[_a-zA-Z]\w*$/.test(s));return{properties:e,flat:n}}var wA=x(()=>{"use strict"});import{execFileSync as fX}from"node:child_process";import{resolve as vA}from"node:path";function mX(t){return t.filter(e=>e.state!=="retired")}function SA(t,e,n){if(n!==void 0){let a=e.findProjectByName(n);return a===null?D(t,`project not found: ${n}`):a}let r=t.cwd??process.cwd(),s;try{s=fX("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return D(t,"terminal cannot infer a member from cwd because this directory is not in a git repo; use `lmctl terminal <teamfile> <alias>`")}let o=vA(s),i=e.listProjects().find(a=>vA(a.local_path)===o);return i===void 0?D(t,`terminal cannot infer a member from cwd ${o}; use \`lmctl terminal <teamfile> <alias>\``):i}function bA(t,e,n,r){if(r!==void 0){let o=e.findTeamByName(r);return o===null?D(t,`team not found: ${r}`):o}let s=e.getTeam(n.team_id);return s===null?D(t,`project ${n.name} has no assigned team; use --team <name>`):s}function IA(t,e,n,r){if(r!==void 0){let o=e.findTeamMemberByAlias(n.id,r);return o===null||o.state==="retired"?D(t,`member not found: ${r}`):o}let s=mX(e.listTeamMembers(n.id)).find(o=>o.role==="agent");return s===void 0?D(t,`team ${n.name} has no active agent member`):s}var kA=x(()=>{"use strict";le()});function AA(t,e,n){let r=t.getRun(e);if(r===null)return{err:`run ${e}: not found`};if(n!==void 0){let l=t.findTeamMemberByAlias(r.team_id,n);return l===null?{err:`run ${e}: team has no member alias "${n}"`}:l.sessionid===null||l.sessionid.length===0?{err:`run ${e}: member "${l.alias}" has no sessionid yet (seed first)`}:{ok:{provider:l.provider,sessionid:l.sessionid,sessiondir:l.sessiondir,alias:l.alias,...l.model!==null&&l.model!==void 0?{model:l.model}:{}}}}let s=t.latestAgentCall(e);if(s!==null){let l=t.findTeamMemberByAlias(r.team_id,s.alias);return l===null?{err:`run ${e}: team has no member alias "${s.alias}" (latest agent_call references a member that has been removed)`}:l.sessionid===null||l.sessionid.length===0?{err:`run ${e}: member "${l.alias}" has no sessionid yet (seed first)`}:{ok:{provider:l.provider,sessionid:l.sessionid,sessiondir:l.sessiondir,alias:l.alias,...l.model!==null&&l.model!==void 0?{model:l.model}:{}}}}let i=t.listTeamMembers(r.team_id).filter(l=>l.state!=="retired"&&l.sessionid!==null&&l.sessionid.length>0);if(i.length===0)return{err:`run ${e}: cannot resolve an agent session (no agent_call yet, no seeded member)`};if(i.length>1){let l=i.map(c=>c.alias).join(", ");return{err:`run ${e}: cannot resolve an agent session (no agent_call yet; team has multiple members [${l}] \u2014 pass --alias)`}}let a=i[0];return{ok:{provider:a.provider,sessionid:a.sessionid,sessiondir:a.sessiondir,alias:a.alias,...a.model!==null&&a.model!==void 0?{model:a.model}:{}}}}var NA=x(()=>{"use strict"});var CA={};me(CA,{SIZE_WARN_EST_TOKENS:()=>ma,estimateTokens:()=>xA,runTeamTerminal:()=>yX,runTerminal:()=>zh});import{constants as pX}from"node:os";import{spawn as hX}from"node:child_process";import{statSync as _X}from"node:fs";async function zh(t,e){if(t.includes("--help")||t.includes("-h"))return SX(e);let n=ae(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(Rn(e)&&!z(n,"--size"))return D(e,"terminal opens an interactive TUI; non-interactive mode is enabled");let r=V(n,"--run");if(r!==void 0){let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<=0||String(s)!==r)return D(e,`invalid --run "${r}" (expected a positive integer run id)`);if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional <teamfile>[:alias]");let o=["--team","--project","--size","--json"];for(let i of o)if(i==="--size"||i==="--json"?z(n,i):V(n,i)!==void 0)return D(e,`--run is mutually exclusive with ${i}`);try{return await W(e,async i=>{let a=V(n,"--alias"),l=AA(i,s,a);return"err"in l?D(e,l.err):Qh(e,{provider:l.ok.provider,sessionid:l.ok.sessionid,sessiondir:l.ok.sessiondir,...l.ok.model!==void 0?{model:l.ok.model}:{}})})}catch(i){return Ot(e,i)}}if(n.positionals.length>0){let s=["--team","--project","--size","--alias"];for(let l of s)if(l==="--size"?z(n,l):V(n,l)!==void 0)return D(e,`positional <teamfile>[:alias] is mutually exclusive with ${l} (alias is the SECOND POSITIONAL: \`terminal <teamfile> <alias>\`).`);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <teamfile>[:alias] [alias]`);let o=n.positionals[0],i=n.positionals[1],a=sn(gX,{target:o,alias:i,flags:{}});return a.mode==="error"?D(e,a.message):a.mode!=="ai-team"?D(e,`internal: terminal positional yielded unexpected mode "${a.mode}"`):a.alias===void 0?D(e,"terminal: alias required for the teamfile target"):await W(e,l=>LA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await W(e,async s=>{let o=TX(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?vX(e,s,o,i,z(n,"--json")):wX(e,s,o,i)})}catch(s){return Ot(e,s)}}async function yX(t,e,n,r,s){let o=await LA(t,e,n,r,!1,s);return{code:s.signalObserved?null:o,signal:s.signalObserved??null}}async function LA(t,e,n,r,s,o){let i;try{i=Xe(e,n,r)}catch(A){return A instanceof ge?D(t,A.message):Ot(t,A)}let a=tr(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:ar(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,N=A===null?null:et(A)?"live":"dead",R=`${i.alias} is busy/held by ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} `+(A===null?"(holder_pid=unavailable)":`(holder_pid=${A}, ${N})`);return s?(te(t,{status:"error",errorKind:"busy",message:R,holder_pid:A,holder_liveness:N}),1):D(t,R)}let l=_b({teamfile:i.teamfile,alias:i.alias,pid:o?.pid}),c=null,d=null,u=null,f=[],m={...o?.env??t.env??process.env},p=!1,_=null,h=!1,g,E,y,T=A=>{c!==null&&(clearInterval(c),c=null);try{let N=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&N!==null&&A.push("terminal lock release was not acknowledged")}catch(N){A.push(`terminal lock release: ${N instanceof Error?N.message:String(N)}`)}try{let N=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&N!==null&&A.push("inflight release was not acknowledged")}catch(N){A.push(`inflight release: ${N instanceof Error?N.message:String(N)}`)}},w=(A,N)=>{let R=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(N)}finally{try{r.db.pragma(`busy_timeout=${R}`)}catch(C){N.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},S=(A,N)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let C=r.getTrackedInvocation(d);C==null||C.status==="running"?N.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(R){N.push(`tracked terminal finish: ${R instanceof Error?R.message:String(R)}`)}},b=A=>{if(p)return;p=!0;let N=[];try{w(R=>{T(R),S({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},R)},N)}catch(R){N.push(R instanceof Error?R.message:String(R))}N.length>0&&(_=Error(N.join("; ")))},I=!o,L=I?new AbortController:void 0,O=()=>L?.abort("SIGINT"),k=()=>L?.abort("SIGTERM");I&&(process.once("SIGINT",O),process.once("SIGTERM",k));let v=o??{env:m,signal:L?.signal};v.env=m;try{if(v.cancel=b,v.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let R,C;E=new Promise((P,q)=>{R=P,C=q});let $=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let P=5e3-(performance.now()-$),q;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise((M,ue)=>{q=setTimeout(()=>ue(Error("terminal close deadline exceeded")),P)})])}catch(M){throw _=M instanceof Error?M:Error(String(M)),_}finally{clearTimeout(q)}}})().then(R,C),E},finalizeSync(R){if(b(R),o.stop?.(R),_)throw _}}),p||v.signal?.aborted){let R=v.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(R),R==="SIGINT"?130:143}r.setTerminalLock(l),d=EX(r,i,m,o?.pid),d!==null&&(m.LMCTL_INVOCATION_ID=String(d));let A=r.getRootTeam(i.teamfile)?.name??null;A!==null&&(m.LMBEE_TEAM_NAME=A),c=setInterval(()=>{try{let R=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,R);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,R),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},gb(m)),c.unref?.();try{Xs(t,Ie(i.teamfile),i.teamfile)}catch{}let N=v;return g=Qh(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},R=>{f.push(`${R.provider} terminal ignored model=${R.model}: ${R.reason}`)},N),u=await g,u}catch(A){throw y=A,A}finally{if(I&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",k)),!p){p=!0;let A=[];try{w(N=>{T(N),S({status:u===0?"done":"error",exit_code:u,result_summary:u===0?"terminal session ended":null,error:u===0?null:`terminal exited with code ${u??"unknown"}`,...f.length>0?{config_warnings:JSON.stringify(f)}:{}},N)},A)}catch(N){A.push(N instanceof Error?N.message:String(N))}A.length>0&&(_=Error(A.join("; ")))}if(_){if(y===void 0)throw _;try{t.stderr.write("error: terminal cleanup: "+_.message+`
2448
+ `)}catch{}}}}function EX(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:$s(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 Qh(t,e,n,r){let{provider:s,sessionid:o,sessiondir:i,model:a}=e;if(!kc(s))return D(t,`no resume incantation for provider "${s}"`);if(!ib.test(o))return D(t,"refusing to resume: malformed sessionid");let l=Sp(s,o,{isLead:e.isLead,model:a,onModelIgnored:p=>{let _=`warning: ${p.provider} terminal ignored model=${p.model}: ${p.reason}`;t.stderr.write(`${_}
2449
+ `),He({event:"model_ignored",provider:p.provider,model:p.model,reason:p.reason}),n?.(p)}});if(l===null||l.length===0)return D(t,`no resume incantation for provider "${s}"`);let c=Ce(r?.env??t.env??process.env,i,o,"terminal"),d=await ab(s,{binary:l[0],cwd:i,env:c,signal:r?.signal});if(r?.signal?.aborted){let p=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(p),p==="SIGINT"?130:143}let[u,...f]=l,m=d.kind==="use-binary"?d.binary:u;return d.message&&t.stderr.write(d.message+`
2450
+ `),await new Promise(p=>{if(r?.signal?.aborted){let I=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(I),p(I==="SIGINT"?130:143)}let _=r?.streams,h=_?[_.stdin,_.stdout,_.stderr].map(I=>I.fd):void 0,g=h?.every(I=>typeof I=="number"),E=hX(m,f,{stdio:_?g?h:["pipe","pipe","pipe"]:"inherit",cwd:i,env:c}),y=_?.stdin?.readableFlowing;_&&!g&&(_.stdin.pipe(E.stdin),E.stdout?.pipe(_.stdout,{end:!1}),E.stderr?.pipe(_.stderr,{end:!1}));let T=!1,w=I=>{if(!T){T=!0;try{r?.cancel?.(I)}catch{}{try{E.kill(I)}catch{}de(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},S=()=>w(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=w);let b=()=>{r?.signal?.removeEventListener("abort",S),_&&!g&&(_.stdin.unpipe(E.stdin),y||_.stdin.pause(),E.stdout?.unpipe(_.stdout),E.stderr?.unpipe(_.stderr))};r?.signal?.addEventListener("abort",S,{once:!0}),r?.signal?.aborted&&S(),E.stdin?.on("error",()=>{}),E.on("error",I=>{b(),p(D(t,`failed to launch ${m}: ${I.message}`))}),E.on("exit",(I,L)=>{b(),r&&(r.signalObserved=L);let O=I??(L?128+(pX.signals[L]??1):1),k=lb(s);k&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+k+`
2451
+ `),p(O)})})}function TX(t,e,n){let r=V(n,"--team");if(r!==void 0){let i=e.findTeamByName(r);return i===null?D(t,`team not found: ${r}`):i}let s=SA(t,e,V(n,"--project"));return typeof s=="number"?s:bA(t,e,s,void 0)}async function wX(t,e,n,r){let s=IA(t,e,n,r);if(typeof s=="number")return s;let o=s.sessionid;if(o===null||o.trim().length===0)return D(t,`member ${s.alias} has no session yet \u2014 seed it first: lmctl seed <teamfile> (check with lmctl status <teamfile>)`);let i=new AbortController,a=()=>i.abort("SIGINT"),l=()=>i.abort("SIGTERM");process.once("SIGINT",a),process.once("SIGTERM",l);try{return await Qh(t,{provider:ju(s),sessionid:o,sessiondir:s.sessiondir,...s.model!==null&&s.model!==void 0?{model:s.model}:{}},void 0,{env:t.env??process.env,signal:i.signal})}finally{process.removeListener("SIGINT",a),process.removeListener("SIGTERM",l)}}function xA(t){if(t&&Array.isArray(t.messages)&&t.messages.length>0){let n=t.messages.reduce((r,s)=>r+(s.content?.length??0),0);return{chars:n,est:Math.ceil(n/4),messages:t.messages.length,bytes:null}}let e=t?.filePath;if(e!==void 0)try{let n=_X(e).size;return{chars:n,est:Math.ceil(n/4),messages:t?.messages?.length??null,bytes:n}}catch{}return{chars:0,est:0,messages:null,bytes:null}}async function vX(t,e,n,r,s){let o;if(r!==void 0){let a=e.findTeamMemberByAlias(n.id,r);if(a===null||a.state==="retired")return D(t,`member not found: ${r}`);o=[a]}else o=e.listTeamMembers(n.id).filter(a=>a.state!=="retired"&&a.sessionid!==null);let i=[];for(let a of o){let l=a.sessionid;if(l===null)continue;let c=ju(a),d=a.model??null,u=null;kc(c)&&(u=await je(l,c));let f=xA(u),m=f.est>ma;i.push({alias:a.alias,provider:c,sessionid:l,messages:f.messages,bytes:f.bytes,est_tokens:f.est,estimate:!0,over_guide:m,model:d,resume_incantation:m?cb(c,l,d!==null?{model:d}:{}):null})}if(s)return te(t,{estimate:!0,legend:RA,guide_tokens:ma,members:i}),0;t.stdout.write(`session size \u2014 ESTIMATE only (nothing is changed automatically)
2450
2452
  `),t.stdout.write(`${RA}
2451
2453
  `);for(let a of i){let l=a.messages===null?"?":String(a.messages),c=a.bytes===null?"?":String(a.bytes);t.stdout.write(`${a.alias} ${a.provider} msgs=${l} bytes=${c} ~${a.est_tokens} tok (rough estimate)
2452
2454
  `),a.over_guide&&t.stdout.write(` \u26A0 ${a.alias}: estimated ~${a.est_tokens} tokens \u2014 ESTIMATE only, exceeds the 200K guide.
@@ -2487,18 +2489,18 @@ it is expected.
2487
2489
  tokens it surfaces the resume incantation so YOU can
2488
2490
  open & self-compact. Nothing is ever changed
2489
2491
  automatically; ${ma} is a guide, not a gate.
2490
- `),0}var gX,ma,RA,Zh=x(()=>{"use strict";zr();vt();fn();le();kA();nt();Be();Ht();Sl();Wt();Il();Ac();NA();re();qr();gX={name:"terminal",allowsBareTeamfile:!1,supportsRaw:!1},ma=2e5,RA="est = rough local heuristic (~4 chars/token), NOT an exact provider token count \u2014 open the session to verify before acting."});var PA={};me(PA,{runQuickrun:()=>OX});import{mkdtempSync as IX,rmSync as bX}from"node:fs";import{tmpdir as kX}from"node:os";import{existsSync as t_,mkdirSync as AX,readFileSync as NX,statSync as RX,writeFileSync as DA}from"node:fs";import{basename as LX,dirname as MA,join as Td,resolve as Ed}from"node:path";async function OA(t,e){let n=await e(t,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status} fetching ${t}`);return n.text()}function xX(t){let e=LX(t),n=Td(t,`${e}.lmctl`),r=2;for(;t_(n);)n=Td(t,`${e}${r}.lmctl`),r+=1;return n}async function CX(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write($A),0;let r=t.includes("--no-seed");if(Rn(e)&&!r&&!t.includes("--no-terminal"))return e.stderr.write(`error: quickrun opens a TUI; use --no-terminal in non-interactive mode
2492
+ `),0}var gX,ma,RA,Zh=x(()=>{"use strict";zr();vt();fn();le();kA();nt();Be();Ht();Sl();Wt();bl();Ac();NA();re();qr();gX={name:"terminal",allowsBareTeamfile:!1,supportsRaw:!1},ma=2e5,RA="est = rough local heuristic (~4 chars/token), NOT an exact provider token count \u2014 open the session to verify before acting."});var PA={};me(PA,{runQuickrun:()=>OX});import{mkdtempSync as bX,rmSync as IX}from"node:fs";import{tmpdir as kX}from"node:os";import{existsSync as t_,mkdirSync as AX,readFileSync as NX,statSync as RX,writeFileSync as DA}from"node:fs";import{basename as LX,dirname as MA,join as Td,resolve as Ed}from"node:path";async function OA(t,e){let n=await e(t,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status} fetching ${t}`);return n.text()}function xX(t){let e=LX(t),n=Td(t,`${e}.lmctl`),r=2;for(;t_(n);)n=Td(t,`${e}${r}.lmctl`),r+=1;return n}async function CX(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write($A),0;let r=t.includes("--no-seed");if(Rn(e)&&!r&&!t.includes("--no-terminal"))return e.stderr.write(`error: quickrun opens a TUI; use --no-terminal in non-interactive mode
2491
2493
  `),2;let s=t.includes("--no-terminal"),o=t.filter(h=>h!=="--no-seed"&&h!=="--no-terminal"&&h!=="--help"&&h!=="-h");if(o.length!==1)return e.stderr.write(`usage: lmctl quickrun <url-or-path>
2492
2494
  `),2;let i=o[0],a=n.cwd??process.cwd(),l=n.fetchFn??fetch,c;try{c=ta(Mt(e.env??process.env,n.initConfigPath))}catch(h){return e.stderr.write(h instanceof qe&&h.kind==="missing"?"error: no ~/.lmctl/init.toml found. Run `lmctl init` first, then try quickrun again.\n":"error: "+(h instanceof Error?h.message:String(h))+`
2493
2495
  `),1}let d;try{d=await kr(i,l,a)}catch(h){return e.stderr.write(`error: could not fetch ${i}: ${h instanceof Error?h.message:String(h)}
2494
- `),1}let u;try{let h=TA(c.document).properties;for(let g of["Directory","NonInteractive"])if(Object.hasOwn(h,g))throw Error("Property '"+g+"' conflicts with an invocation fact in "+c.path+"; fix the file or run lmctl init");Object.assign(h,{Directory:a,NonInteractive:Rn(e)}),u=Eb(d,c.config,{properties:h,path:c.path,argv:[]})}catch(h){return e.stderr.write("error: "+(h instanceof Error?h.message:String(h))+`
2496
+ `),1}let u;try{let h=TA(c.document).properties;for(let g of["Directory","NonInteractive"])if(Object.hasOwn(h,g))throw Error("Property '"+g+"' conflicts with an invocation fact in "+c.path+"; fix the file or run lmctl init");Object.assign(h,{Directory:a,NonInteractive:Rn(e)}),u=EI(d,c.config,{properties:h,path:c.path,argv:[]})}catch(h){return e.stderr.write("error: "+(h instanceof Error?h.message:String(h))+`
2495
2497
  `),1}let f=xX(a);if(AX(MA(f),{recursive:!0}),DA(f,u,"utf8"),e.stdout.write(`Wrote ${f}
2496
2498
  `),await vr([f],e)!==0)return e.stderr.write(`error: ${f} failed lint after substitution -- check the values in ~/.lmctl/init.toml.
2497
2499
  `),1;if(r)return e.stdout.write(`Edit ${f} if needed, then run: lmctl seed ${f}
2498
2500
  `),0;let p=await oa([f],e);return p!==0?p:s?0:(n.openTerminal??zh)([f,"Lead"],e)}async function OX(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t[0]==="--help"||t[0]==="-h")return e.stdout.write($A),0;let r=n.fetchFn??fetch,s=n.cwd??e.cwd??process.cwd();try{if(t.length===0){let m=await OA(`${e_}/index.txt`,r);return e.stdout.write(m.endsWith(`
2499
2501
  `)?m:`${m}
2500
2502
  `),0}let o=/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(t[0]??""),i=t.find(m=>m!=="--no-seed"&&m!=="--no-terminal")??"",a=/^https?:\/\//i.test(i)?new URL(i).pathname:i;if(/\.(lmctl|lmc)$/i.test(a)||!o&&t_(Ed(s,i))&&RX(Ed(s,i)).isDirectory())return CX(t,e,{...n,cwd:s});let[l,...c]=t;if(!l||l.startsWith("-"))throw new Error(`unknown quickrun option: ${l}`);let d,u;if(o)d=`${e_}/${l}.lms`;else if(/^https?:\/\//i.test(l))d=l;else if(t_(Ed(s,l))||l.includes("/")||l.includes("\\"))u=Ed(s,l);else if(/^[a-zA-Z0-9][a-zA-Z0-9_-]*(?:\.lms)?$/.test(l))d=`${e_}/${l.replace(/\.lms$/,"")}.lms`;else throw new Error("Expected a sample name, script URL, or local .lms file.");let f=d?await OA(d,r):NX(u,"utf8");e.stderr.write(`Running ${d??u}
2501
- `);{let m=n.launch??hs,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:MA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let _=IX(Td(kX(),"lmctl-quickrun-"));try{let h=Td(_,"download.lms");return DA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{bX(_,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2503
+ `);{let m=n.launch??hs,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:MA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let _=bX(Td(kX(),"lmctl-quickrun-"));try{let h=Td(_,"download.lms");return DA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{IX(_,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2502
2504
  `),1}}var e_,$A,UA=x(()=>{"use strict";wA();sd();le();us();ua();_n();Zh();e_="https://lmctl.com/quickrun",$A=`usage: lmctl quickrun
2503
2505
  lmctl quickrun <sample|url|file.lms> [script arguments...]
2504
2506
 
@@ -2521,8 +2523,8 @@ Legacy .lmctl templates still accept --no-seed and --no-terminal.
2521
2523
  `),2}finally{a.close()}let l=n.cwd??e.cwd??process.cwd(),c=n.fetchFn??fetch,d=`${XA}/${r}.lmctl`,u;try{u=await kr(d,c,l)}catch(T){return e.stderr.write(`error: could not fetch ${d}: ${T instanceof Error?T.message:String(T)}
2522
2524
  `),1}if(o!==void 0)try{u=FX(u,r,o)}catch(T){return e.stderr.write(`error: ${T instanceof Error?T.message:String(T)}
2523
2525
  `),1}let f=HA(l,`${r}_hello.lmctl`);for(let T=2;DX(f);T++)f=HA(l,`${r}_hello${T}.lmctl`);if(MX(f,u,{encoding:"utf8",flag:"wx"}),e.stdout.write(`Wrote ${f}
2524
- `),o!==void 0){let T={write:()=>!0},w=await lh(f,{...e,stdout:T,stderr:T,env:{...process.env,...e.env}});if(w.status==="error")return WA(f,{force:!0}),e.stderr.write(`error: hello model override failed lint: ${w.errors.map(I=>I.message).join("; ")}
2525
- `),1;let S=w.warnings.find(({message:I})=>(r==="codex"||r==="agy")&&I.includes(`model="${o}" is not in ${r}'s live model catalog`));if(S)return WA(f,{force:!0}),e.stderr.write(`error: hello model override refused: ${S.message}
2526
+ `),o!==void 0){let T={write:()=>!0},w=await lh(f,{...e,stdout:T,stderr:T,env:{...process.env,...e.env}});if(w.status==="error")return WA(f,{force:!0}),e.stderr.write(`error: hello model override failed lint: ${w.errors.map(b=>b.message).join("; ")}
2527
+ `),1;let S=w.warnings.find(({message:b})=>(r==="codex"||r==="agy")&&b.includes(`model="${o}" is not in ${r}'s live model catalog`));if(S)return WA(f,{force:!0}),e.stderr.write(`error: hello model override refused: ${S.message}
2526
2528
  `),1}let m=`s=lm_seed(args[0]);if(s.status!="ok"){lm_exit(${BA});}r=lm_prompt(args[0],"Lead",args[1]);if(r.status!="ok"){lm_error(r.error);lm_exit(1);}println(r.reply);`,p="",_=new Set,h=(T=!1)=>{let w;for(;(w=p.indexOf(`
2527
2529
  `))>=0;){let S=p.slice(0,w);if(p=p.slice(w+1),S.startsWith("error: ")){if(_.has(S))continue;_.add(S)}e.stderr.write(S+`
2528
2530
  `)}T&&p&&(e.stderr.write(p),p="")},g={...e,cwd:l,stderr:{write:T=>{p+=T,h()}}},E=await(n.launch??hs)(["-e",m,f,s],g);if(h(!0),E===BA)return 1;let y=FA(f);return e.stdout.write(`
@@ -2558,7 +2560,7 @@ Example:
2558
2560
  AND holder_pid IS ?
2559
2561
  ORDER BY started_at DESC, id DESC
2560
2562
  LIMIT 5
2561
- `).all(e,n,s,r.holder_pid).find(a=>a.request_payload!==null);return i?.request_payload===void 0||i.request_payload===null?null:{tracked_invocation_id:i.id,from_identity:i.from_identity,started_at:i.started_at,request_payload:i.request_payload,request_preview:b2(i.request_payload)}}function vd(t,e={}){let n=[],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.target_teamfile!==void 0&&(n.push("target_teamfile = ?"),r.push(e.target_teamfile)),e.target_alias!==void 0&&(n.push("target_alias = ?"),r.push(e.target_alias));let s=n.length===0?"":` WHERE ${n.join(" AND ")}`;return t.db.prepare(`
2563
+ `).all(e,n,s,r.holder_pid).find(a=>a.request_payload!==null);return i?.request_payload===void 0||i.request_payload===null?null:{tracked_invocation_id:i.id,from_identity:i.from_identity,started_at:i.started_at,request_payload:i.request_payload,request_preview:I2(i.request_payload)}}function vd(t,e={}){let n=[],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.target_teamfile!==void 0&&(n.push("target_teamfile = ?"),r.push(e.target_teamfile)),e.target_alias!==void 0&&(n.push("target_alias = ?"),r.push(e.target_alias));let s=n.length===0?"":` WHERE ${n.join(" AND ")}`;return t.db.prepare(`
2562
2564
  SELECT * FROM tracked_invocation
2563
2565
  ${s}
2564
2566
  ORDER BY started_at DESC, id DESC
@@ -2566,10 +2568,10 @@ Example:
2566
2568
 
2567
2569
  `),assistantTimestamp:_2(s[s.length-1]?.timestamp)}}function _2(t){if(t===void 0)return null;let e=t.getTime();return Number.isFinite(e)?t.toISOString():null}function g2(t){if(!(t===null||t.trim()===""))try{let e=JSON.parse(t);if(!Array.isArray(e))return;let n=e.filter(r=>typeof r=="string"&&r.length>0);return n.length>0?n:void 0}catch{return}}function a_(t){let e=g2(t.config_warnings),n={id:t.id,kind:t.kind,origin:t.origin,status:t.status,holder_liveness:nr(t),from_identity:t.from_identity,target:t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,started_at:t.started_at,ended_at:t.ended_at,result:QA(t.result_summary),error:QA(t.error),...e!==void 0?{config_warnings:e}:{}};return t.error!==null&&oN.set(n,t.error),n}function y2(t,e){return t.scope==="self"?T2(t,e):w2(t,e)}function E2(t){if(t===null)return"idle";let e=t.holder_pid!==null?`pid ${t.holder_pid}${t.holder_host!==null?` on ${t.holder_host}`:""}`:"holder",n=t.reason==="dead-pid"?"appears dead -- the provider process ended before the turn completed":"stale";return`idle (reclaimable lock: ${e} ${n})`}function T2(t,e){let n=[];n.push(`identity: ${t.identity}`),n.push(`team: ${t.team.name}`),n.push(`teamfile: ${t.team.teamfile}`),n.push(""),n.push("members:"),t.members.length===0&&n.push(" none");for(let r of t.members){let s=r.model===null?"":` model=${r.model}`,o=r.sessionid===null?"":` session=${r.sessionid}`,i=r.state==="idle"?E2(r.reclaimable):`busy (${r.reason})`,a=r.handling===null?"":` handling="${r.handling.request_preview}"`;n.push(` ${r.alias}: ${i} provider=${r.provider}${s}${o}${a}`)}return n.push(""),n.push("transcript harvest:"),sN(n,t.transcript_harvest,"self"),n.push(""),n.push("activity from me:"),l_(n,c_(t.activity.from_me,e.sinceIso),"from-me"),n.push(""),n.push("activity to me:"),l_(n,c_(t.activity.to_me,e.sinceIso),"to-me"),n.push(""),n.push(rN(t)),n.join(`
2568
2570
  `)}function w2(t,e){let n=[];n.push("scope: db"),n.push("identity: none"),n.push(""),n.push("teams:"),t.teams.length===0&&n.push(" none");for(let r of t.teams){let s=r.name===null?"(unnamed)":r.name;n.push(` ${s}: ${r.teamfile} (${r.member_count} members)`)}return n.push(""),n.push("transcript harvest:"),sN(n,t.transcript_harvest,"db"),n.push(""),n.push("recent activity:"),l_(n,c_(t.activity,e.sinceIso),"db"),n.push(""),n.push(rN(t)),n.join(`
2569
- `)}function rN(t){return ri(t.db_path)}function l_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,wd))v2(t,r,n);iN(t,e.length,wd,"older")}function sN(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,wd)){let s=n==="db"?` from ${gn(r.from_identity)} -> ${gn(r.target)}`:` -> ${gn(r.target)}`;if(r.state==="completed"){let o=r.result_preview===null?"":` "${r.result_preview}"`;t.push(` #${r.tracked_invocation_id} completed in transcript; lmctl DB not finalized${s} since ${r.started_at}${o}`)}else t.push(` #${r.tracked_invocation_id} unreconciled${s} since ${r.started_at} (${r.reason??"unknown"})`);r.tail_hint.length>0&&t.push(` inspect: ${r.tail_hint}`)}iN(t,e.length,wd,"more transcript harvest rows")}function c_(t,e){let n=Date.parse(e);return Number.isFinite(n)?t.filter(r=>{let s=Date.parse(r.ended_at??r.started_at);return Number.isFinite(s)&&s>=n}):t}function v2(t,e,n){let r=I2(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=al(oN.get(e)??"",r_),a=o===null?"":` "${i??aN(o)}"`;if(t.push(` #${e.id} ${S2(e)} ${e.kind}${r} ${s}${a}`),e.config_warnings!==void 0)for(let l of e.config_warnings)t.push(` config not applied: ${l}`)}function S2(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.status.toUpperCase()}function I2(t,e){if(e==="from-me")return t.target===null?"":` -> ${gn(t.target)}`;if(e==="to-me")return` from ${gn(t.from_identity)}`;let n=t.target===null?"":` -> ${gn(t.target)}`;return` from ${gn(t.from_identity)}${n}`}function iN(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function QA(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function aN(t){let e=sT(t).replace(/\s+/g," ").trim();return e.length<=r_?e:`${e.slice(0,r_-3)}...`}function b2(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=YA?e:`${e.slice(0,YA-3)}...`}function Sd(t){return(0,it.formatDuration)(t)}function pa(t){return(0,it.formatRelativeTime)(t)}function gn(t){if(t==="operator")return t;try{let e=rs(t);return`${QX(e.teamfile)}:${e.alias}`}catch{return t}}function k2(t){if(t===void 0)return{iso:new Date(Date.now()-r2).toISOString()};let e=/^(\d+)([smhd])$/.exec(t);if(e!==null){let r=Number(e[1]),s=e[2],o=s==="s"?r:s==="m"?r*60:s==="h"?r*3600:r*86400;return{iso:new Date(Date.now()-o*1e3).toISOString()}}let n=Date.parse(t);return Number.isFinite(n)?{iso:new Date(n).toISOString()}:{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`}}async function A2(t,e,n,r){let s=await W(t,d=>{let u=Ne(e,d),f=nn(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:ca(u,d,new Set,[])}}),o=Rh(s.teamfile),i=o.kind==="repo"?o:null,a=await da(t,s.targets),l=[],c=0;for(let d of s.targets){let u={alias:d.alias,reportPath:d.reportPath,teamfile:d.teamfile,provider:d.provider,sessionid:d.sessionid,declaredModel:d.model,liveness:a.get(To(d.teamfile,d.alias))??od(),probed:!1,detailLoaded:!1},f=await Ah(t,{teamfile:d.teamfile,alias:d.alias});if(f!==void 0&&(u.configWarnings=f),r&&d.sessionid!==null){u.probed=!0;let m=null;try{m=await je(d.sessionid,d.provider)}catch(p){t.stderr.write(`warning: failed to load session "${d.sessionid}" for ${d.reportPath} (${d.provider}): ${p instanceof Error?p.message:String(p)}
2571
+ `)}function rN(t){return ri(t.db_path)}function l_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,wd))v2(t,r,n);iN(t,e.length,wd,"older")}function sN(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,wd)){let s=n==="db"?` from ${gn(r.from_identity)} -> ${gn(r.target)}`:` -> ${gn(r.target)}`;if(r.state==="completed"){let o=r.result_preview===null?"":` "${r.result_preview}"`;t.push(` #${r.tracked_invocation_id} completed in transcript; lmctl DB not finalized${s} since ${r.started_at}${o}`)}else t.push(` #${r.tracked_invocation_id} unreconciled${s} since ${r.started_at} (${r.reason??"unknown"})`);r.tail_hint.length>0&&t.push(` inspect: ${r.tail_hint}`)}iN(t,e.length,wd,"more transcript harvest rows")}function c_(t,e){let n=Date.parse(e);return Number.isFinite(n)?t.filter(r=>{let s=Date.parse(r.ended_at??r.started_at);return Number.isFinite(s)&&s>=n}):t}function v2(t,e,n){let r=b2(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=al(oN.get(e)??"",r_),a=o===null?"":` "${i??aN(o)}"`;if(t.push(` #${e.id} ${S2(e)} ${e.kind}${r} ${s}${a}`),e.config_warnings!==void 0)for(let l of e.config_warnings)t.push(` config not applied: ${l}`)}function S2(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.status.toUpperCase()}function b2(t,e){if(e==="from-me")return t.target===null?"":` -> ${gn(t.target)}`;if(e==="to-me")return` from ${gn(t.from_identity)}`;let n=t.target===null?"":` -> ${gn(t.target)}`;return` from ${gn(t.from_identity)}${n}`}function iN(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function QA(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function aN(t){let e=sT(t).replace(/\s+/g," ").trim();return e.length<=r_?e:`${e.slice(0,r_-3)}...`}function I2(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=YA?e:`${e.slice(0,YA-3)}...`}function Sd(t){return(0,it.formatDuration)(t)}function pa(t){return(0,it.formatRelativeTime)(t)}function gn(t){if(t==="operator")return t;try{let e=rs(t);return`${QX(e.teamfile)}:${e.alias}`}catch{return t}}function k2(t){if(t===void 0)return{iso:new Date(Date.now()-r2).toISOString()};let e=/^(\d+)([smhd])$/.exec(t);if(e!==null){let r=Number(e[1]),s=e[2],o=s==="s"?r:s==="m"?r*60:s==="h"?r*3600:r*86400;return{iso:new Date(Date.now()-o*1e3).toISOString()}}let n=Date.parse(t);return Number.isFinite(n)?{iso:new Date(n).toISOString()}:{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`}}async function A2(t,e,n,r){let s=await W(t,d=>{let u=Ne(e,d),f=nn(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:ca(u,d,new Set,[])}}),o=Rh(s.teamfile),i=o.kind==="repo"?o:null,a=await da(t,s.targets),l=[],c=0;for(let d of s.targets){let u={alias:d.alias,reportPath:d.reportPath,teamfile:d.teamfile,provider:d.provider,sessionid:d.sessionid,declaredModel:d.model,liveness:a.get(To(d.teamfile,d.alias))??od(),probed:!1,detailLoaded:!1},f=await Ah(t,{teamfile:d.teamfile,alias:d.alias});if(f!==void 0&&(u.configWarnings=f),r&&d.sessionid!==null){u.probed=!0;let m=null;try{m=await je(d.sessionid,d.provider)}catch(p){t.stderr.write(`warning: failed to load session "${d.sessionid}" for ${d.reportPath} (${d.provider}): ${p instanceof Error?p.message:String(p)}
2570
2572
  `)}u.detailLoaded=m!==null,u.messageCount=m?.messageCount??null,u.observedModel=m?.model??"(unknown)",u.lastContext=m?.lastInputTokens??null,u.totalInputTokens=m?.totalInputTokens??null,u.totalOutputTokens=m?.totalOutputTokens??null,m?.totalCachedInputTokens!==void 0&&(u.totalCachedInputTokens=m.totalCachedInputTokens),u.sessionLimit=m===null?null:n_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:Lh(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:xh(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(te(t,{schema_version:d_,scope:"team",team:s.teamName,teamfile:s.teamfile,details:r,git:i===null?null:{teamDir:i.teamDir,commits:i.commits.map(d=>({ref:d.ref,timestamp:d.timestamp.toISOString()})),since:i.since.toISOString(),working:i.working},members:l.map(d=>{let u={alias:d.alias,reportPath:d.reportPath,teamfile:d.teamfile,provider:d.provider,sessionid:d.sessionid,seeded:d.sessionid!==null,model:d.declaredModel,liveness:d.liveness};return d.configWarnings!==void 0&&(u.config_warnings=d.configWarnings),d.probed&&(u.messageCount=d.messageCount??null,u.observed_model=d.observedModel,u.lastContext=d.lastContext??null,u.totalInputTokens=d.totalInputTokens??null,u.totalOutputTokens=d.totalOutputTokens??null,d.totalCachedInputTokens!==void 0&&(u.totalCachedInputTokens=d.totalCachedInputTokens),u.sessionLimit=d.sessionLimit??null,d.activitySinceLastCommit!==void 0&&(u.activitySinceLastCommit=d.activitySinceLastCommit),d.cumulativeTokens!==void 0&&(u.cumulativeTokens=d.cumulativeTokens==="n/a"?null:d.cumulativeTokens)),u}),...r?{total:{messageCount:c??null}}:{}}),0):(t.stdout.write(L2(s.teamName,s.teamfile,o,l,r,c)),0)}function N2(t){return t.sessionid??"(not seeded)"}function R2(t){return t.sessionid===null?"not seeded":id(t.liveness)}function L2(t,e,n,r,s,o){let i=[],a=n.kind==="repo"?n:null;if(i.push(`TEAM: ${t}`),i.push(`teamfile: ${e}`),n.kind==="repo"){i.push("Git progress:");for(let _ of n.commits)i.push(` ${_.ref}: ${_.timestamp.toISOString()}`);i.push(` Uncommitted: ${$t(n.working.uncommittedTracked)} changed (tracked), ${$t(n.working.untracked)} untracked`)}else n.reason==="no-commits"?i.push(`Git progress: git repository in ${n.teamDir} has no commits (no commit-based progress to report)`):i.push(`Git progress: no git repository in ${n.teamDir} (no commit-based progress to report)`);if(!s){i.push("members:"),r.length===0&&i.push(" none");for(let _ of r){let h=_.declaredModel===null?"":` model=${_.declaredModel}`;if(_.sessionid===null?i.push(` ${_.reportPath}: not seeded provider=${_.provider}${h} (run: lmctl seed "${_.teamfile}")`):i.push(` ${_.reportPath}: ${id(_.liveness)} provider=${_.provider}${h} session=${_.sessionid}`),_.configWarnings!==void 0)for(let g of _.configWarnings)i.push(` config not applied: ${g}`)}return i.push(""),i.push("session detail (observed model, messages, tokens, limits) not probed -- use --details"),`${i.join(`
2571
2573
  `)}
2572
- `}let l=a!==null?["SESSION","ALIAS","PROVIDER","OBSERVED MODEL","LIVE","MSGS","LAST CONTEXT","MSGS SINCE COMMIT","TOKENS SINCE COMMIT","TOKENS (cumulative)"]:["SESSION","ALIAS","PROVIDER","OBSERVED MODEL","LIVE","MSGS","LAST CONTEXT"],c=l.map((_,h)=>h>=5?"right":"left"),d=!1,u=r.filter(_=>_.sessionLimit!=null),f=[];for(let _ of r){let h=ek(_.lastContext??void 0,_.detailLoaded,Qb);(h==="n/a"||_.cumulativeTokens==="n/a")&&(d=!0);let g=[(0,it.escapeCell)(N2(_)),(0,it.escapeCell)(_.reportPath),(0,it.escapeCell)(_.provider),(0,it.escapeCell)(_.observedModel??"(unknown)"),R2(_),$t(_.messageCount),h];a!==null&&g.push($t(_.activitySinceLastCommit?.messageCount),$t(_.activitySinceLastCommit?.tokens),Zb(_.cumulativeTokens)),f.push(g)}let m=["TOTAL","","","","",$t(o)];a!==null&&m.push("",$t(x2(r)),$t(null),$t(C2(r))),f.push(m);let p=(0,it.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2574
+ `}let l=a!==null?["SESSION","ALIAS","PROVIDER","OBSERVED MODEL","LIVE","MSGS","LAST CONTEXT","MSGS SINCE COMMIT","TOKENS SINCE COMMIT","TOKENS (cumulative)"]:["SESSION","ALIAS","PROVIDER","OBSERVED MODEL","LIVE","MSGS","LAST CONTEXT"],c=l.map((_,h)=>h>=5?"right":"left"),d=!1,u=r.filter(_=>_.sessionLimit!=null),f=[];for(let _ of r){let h=ek(_.lastContext??void 0,_.detailLoaded,QI);(h==="n/a"||_.cumulativeTokens==="n/a")&&(d=!0);let g=[(0,it.escapeCell)(N2(_)),(0,it.escapeCell)(_.reportPath),(0,it.escapeCell)(_.provider),(0,it.escapeCell)(_.observedModel??"(unknown)"),R2(_),$t(_.messageCount),h];a!==null&&g.push($t(_.activitySinceLastCommit?.messageCount),$t(_.activitySinceLastCommit?.tokens),ZI(_.cumulativeTokens)),f.push(g)}let m=["TOTAL","","","","",$t(o)];a!==null&&m.push("",$t(x2(r)),$t(null),$t(C2(r))),f.push(m);let p=(0,it.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2573
2575
  `);if(i.push(p[0]),r.forEach((_,h)=>{if(i.push(p[h+1]),_.configWarnings!==void 0)for(let g of _.configWarnings)i.push(` config not applied: ${g}`)}),i.push(p[p.length-1]),d&&i.push("n/a = this provider does not expose a context/token total; absence is not a health signal."),i.push(`LAST CONTEXT = prompt size of the LAST COMPLETED turn, so it LAGS BY ONE TURN.
2574
2576
  Right after a compaction the last completed turn IS the summarisation request, which carried the
2575
2577
  full pre-compaction prompt \u2014 so this reads the OLD large number while the live context is already
@@ -2597,7 +2599,7 @@ With a teamfile and an alias: single-member deep view (session detail, token
2597
2599
  breakdown, liveness with terminal-lock/in-flight holder info).
2598
2600
 
2599
2601
  --json emits { schema_version: 2, scope: 'self'|'db'|'team'|'member', ... }.
2600
- `,d_=2,wd=5,r2=24*60*60*1e3,r_=72,YA=80;o2={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};oN=new WeakMap});import{isAbsolute as D2,resolve as cN,join as dN}from"node:path";function fN(t){let e=uN.get(t);if(!e)throw Error("Unknown context");return e.dal()}function pN(t){return t!==null&&typeof t=="object"&&mN.has(t)}function hN(t){try{if(!t||typeof t!="object"||Array.isArray(t))return pt("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(_=>!n.includes(_)))return pt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!D2(e.cwd))return pt("invalid_argument","Context needs an explicit env and absolute cwd");let r=Object.freeze({...e.env});if(Object.values(r).some(_=>_!==void 0&&typeof _!="string"))return pt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return pt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return pt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return pt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return pt("invalid_argument","pid must be a positive integer");let s=cN(e.cwd),o=r.LMCTL_HOME||(r.HOME?dN(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?dN(o,"state.db"):void 0)))return pt("invalid_argument","Context needs dbPath, LMCTL_DB, LMCTL_HOME or HOME");let a=!1,l,c,d,u=new AbortController,f=new Set,m=_=>{if(l){try{l.close()}catch(h){_.push(Tr(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:cN(s,Je(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 _;return c=new Promise(h=>{_=h}),a=!0,u.abort(),(async()=>{let h=[],g=0;for(let E of[...f])try{await E.close(),g++,f.delete(E)}catch(y){h.push(Tr(y))}h.length||m(h),_({released:g,errors:h})})(),c},finalizeSync(_){if(d)return d;a=!0;let h=[],g={released:0,errors:h};d=g,c??=Promise.resolve(g);let E=[];for(let y of[...f])try{let T=y.finalizeSync(_);T instanceof Promise?E.push(T.then(()=>{g.released++,f.delete(y)}).catch(w=>{h.push(Tr(w))})):(g.released++,f.delete(y))}catch(T){h.push(Tr(T))}return u.abort(_),E.length?c=Promise.all(E).then(()=>(h.length||m(h),g)):h.length||m(h),g}});return uN.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=$e({path:p.dbPath})}}),mN.add(p),M2.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return pt("invalid_argument","Invalid context: "+Tr(e))}}var uN,M2,mN,Id=x(()=>{"use strict";vt();Nn();jc();uN=new WeakMap;M2=new WeakMap,mN=new WeakSet});var Nr,wN,rse,sse,ose,ise,ase,se,f_,yn,bd,Ar,kd,Nd,vo,_N,gN,yN,So,Ad,$2,EN,TN,vN,m_=x(()=>{"use strict";Nr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Nr(e);Object.freeze(t)}return t},wN=Nr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),rse=Nr({status:"string",error:"string|null",code:"ErrorCode?"}),sse=Nr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),ose=Nr(["Provider1.Provider","Provider1.Model1","Provider2.Provider","Provider2.Model1","Provider3.Provider","Provider3.Model1"]),ise=Nr(["Provider1","Provider2","Provider3"]),ase=Nr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),se={name:"ctx",type:"context"},f_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},yn={name:"teamfile",type:"string"},bd={name:"alias",type:"string"},Ar={name:"prompt",type:"string"},kd={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"}]},Nd=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],vo={name:"options",type:"map",optional:!0,keys:Nd},_N={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},gN={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},yN={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},So={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},Ad={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"}]},$2=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],EN={name:"options",type:"map",optional:!0,keys:$2},TN={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},vN=Nr([{name:"resolveProfilePath",implemented:!0,params:[se,f_],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[se,f_],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:[se,{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:[se,yn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[yn]}},{name:"resolveMember",implemented:!0,params:[se,yn,bd],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:[yn,bd]}},{name:"lintTeam",implemented:!0,params:[se,yn],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:[yn]}},{name:"seedTeam",implemented:!0,params:[se,yn,_N],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:[yn,_N]}},{name:"promptAgent",implemented:!0,params:[se,kd,Ar,vo],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...TN,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[kd,Ar,vo]}},{name:"promptMember",implemented:!0,params:[se,{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"},...Nd]}],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:[yn,bd,Ar,{name:"options",type:"map",optional:!0,keys:[...Nd,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[se,{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:[se,So,yN],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:[kd,{...yN,optional:!0}]}},{name:"getSession",implemented:!0,params:[se,So],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:[So]}},{name:"reserveSession",implemented:!0,params:[se,So],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:[se,So,{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:[se,{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"},...Nd]}],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:[se,{name:"batch",type:"BatchRef"},Ar,{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:[se,{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:[se,gN],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:[gN]}},{name:"openTerminal",implemented:!0,params:[se,{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:[yn,bd]}},{name:"sessionAdmission",implemented:!0,params:[se,So],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:[se,{name:"reservation",type:"SessionReservation"},kd,Ar,vo],statuses:["ok","busy","stalled","empty","error"],results:{...TN,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[se,{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:[se,{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:[se,{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"}]},vo],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:[se,{name:"session",type:"NativeSessionRef"},Ar],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:[se,{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:[se,{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:[se,Ad,Ar,vo],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:[Ad,Ar,vo]}},{name:"nativeSessionClose",implemented:!0,params:[se,Ad],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:[Ad]}},{name:"loadProperties",implemented:!0,params:[se,f_],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:[se,EN],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:[EN]}}])});function SN(t){if(!pN(t))return pt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return pt("cancelled","Context is closed")}function IN(t){return vN.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var bN=x(()=>{"use strict";m_();Id();jc()});import{isAbsolute as P2,resolve as U2}from"node:path";function Ld(t){return Number.isFinite(t)&&Math.abs(t)<=F2}function j2(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(wN.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 __(t,e=Date.now()){if(t===void 0)return{windowMs:kN};let n=/^(\d+)([smhd])$/.exec(t);if(n!==null){let o=Number(n[1]),i=n[2],l=(i==="s"?o:i==="m"?o*60:i==="h"?o*3600:o*86400)*1e3;return!Number.isFinite(l)||l<0||!Ld(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!Ld(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return Ld(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function Rd(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function h_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return p_;let s=e.get(n);if(s===void 0){try{s=be(n)}catch{s=null}e.set(n,s)}return s===null?p_:_l(s,r)?.model??p_}async function AN(t,e={}){let n=SN(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 o=IN("listRunning");if(o.length>0){for(let i of Object.keys(e))if(!o.includes(i))return{status:"error",error:`Unknown option: ${i}`,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=kN;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!Ld(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 o=__(e.since,r);if("error"in o)return{status:"error",error:o.error,code:"invalid_argument",running:[],dead:[],idle:[]};s=o.windowMs}else return{status:"error",error:"since must be a duration string or number",code:"invalid_argument",running:[],dead:[],idle:[]};try{let o=fN(t),i=e?.teamfile!==void 0?P2(e.teamfile)?e.teamfile:U2(t.cwd,e.teamfile):void 0,a=i!==void 0?Ne(i,o):void 0,l=e?.member!==void 0?e.member.toLowerCase():void 0,c=y=>!(a!==void 0&&y.target_teamfile!==a||l!==void 0&&(y.target_alias??"").toLowerCase()!==l),d=o.listAllRunningTrackedInvocations().filter(c),u=new Map,f=[],m=[];for(let y of d){let T=nr(y),w=r-new Date(y.started_at).getTime(),S={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:Rd(y),model:h_(y,u),started_at:y.started_at,parent_invocation_id:y.parent_invocation_id};if(T==="dead"){if(_f(o,y)!==null)continue;m.push({...S,stale_for_ms:w})}else f.push({...S,running_for_ms:w,holder_liveness:T??"unknown"})}let p=new Set(d.map(Rd).filter(y=>y!==null)),_=new Date(r-s).toISOString(),h=o.listRecentlyFinishedTrackedInvocations(_).filter(c),g=new Set,E=[];for(let y of h){let T=Rd(y);T===null||p.has(T)||g.has(T)||(g.add(T),E.push({id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:T,model:h_(y,u),status:y.status,started_at:y.started_at,ended_at:y.ended_at,idle_ms:r-new Date(y.ended_at).getTime(),ran_ms:new Date(y.ended_at).getTime()-new Date(y.started_at).getTime(),error:y.error,parent_invocation_id:y.parent_invocation_id}))}if(e?.tree===!0){let y=new Set([...f.map(w=>w.id),...m.map(w=>w.id),...E.map(w=>w.id)]),T=[...y];for(;T.length>0;){let w=o.listFinishedTrackedInvocationChildren(T,_).filter(S=>!y.has(S.id)&&c(S));if(w.length===0)break;T=[];for(let S of w){y.add(S.id),T.push(S.id);let I=Rd(S);E.push({id:S.id,kind:S.kind,origin:S.origin,from_identity:S.from_identity,target:I,model:h_(S,u),status:S.status,started_at:S.started_at,ended_at:S.ended_at,idle_ms:r-new Date(S.ended_at).getTime(),ran_ms:new Date(S.ended_at).getTime()-new Date(S.started_at).getTime(),error:S.error,parent_invocation_id:S.parent_invocation_id})}}}return{status:"ok",error:null,running:f,dead:m,idle:E}}catch(o){return{status:"error",error:o instanceof Error?o.message:String(o),code:j2(o),running:[],dead:[],idle:[]}}}var kN,F2,p_,NN=x(()=>{"use strict";Id();bN();m_();Wt();kl();Be();rn();kN=24*60*60*1e3,F2=864e13;p_="default"});var DN={};me(DN,{_setRunningWatchMaxTicksForTests:()=>B2,runRunning:()=>Q2});import{resolve as W2}from"node:path";function B2(t){y_=t??void 0}function q2(t){let e=t.split(`
2602
+ `,d_=2,wd=5,r2=24*60*60*1e3,r_=72,YA=80;o2={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};oN=new WeakMap});import{isAbsolute as D2,resolve as cN,join as dN}from"node:path";function fN(t){let e=uN.get(t);if(!e)throw Error("Unknown context");return e.dal()}function pN(t){return t!==null&&typeof t=="object"&&mN.has(t)}function hN(t){try{if(!t||typeof t!="object"||Array.isArray(t))return pt("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(_=>!n.includes(_)))return pt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!D2(e.cwd))return pt("invalid_argument","Context needs an explicit env and absolute cwd");let r=Object.freeze({...e.env});if(Object.values(r).some(_=>_!==void 0&&typeof _!="string"))return pt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return pt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return pt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return pt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return pt("invalid_argument","pid must be a positive integer");let s=cN(e.cwd),o=r.LMCTL_HOME||(r.HOME?dN(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?dN(o,"state.db"):void 0)))return pt("invalid_argument","Context needs dbPath, LMCTL_DB, LMCTL_HOME or HOME");let a=!1,l,c,d,u=new AbortController,f=new Set,m=_=>{if(l){try{l.close()}catch(h){_.push(Tr(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:cN(s,Je(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 _;return c=new Promise(h=>{_=h}),a=!0,u.abort(),(async()=>{let h=[],g=0;for(let E of[...f])try{await E.close(),g++,f.delete(E)}catch(y){h.push(Tr(y))}h.length||m(h),_({released:g,errors:h})})(),c},finalizeSync(_){if(d)return d;a=!0;let h=[],g={released:0,errors:h};d=g,c??=Promise.resolve(g);let E=[];for(let y of[...f])try{let T=y.finalizeSync(_);T instanceof Promise?E.push(T.then(()=>{g.released++,f.delete(y)}).catch(w=>{h.push(Tr(w))})):(g.released++,f.delete(y))}catch(T){h.push(Tr(T))}return u.abort(_),E.length?c=Promise.all(E).then(()=>(h.length||m(h),g)):h.length||m(h),g}});return uN.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=$e({path:p.dbPath})}}),mN.add(p),M2.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return pt("invalid_argument","Invalid context: "+Tr(e))}}var uN,M2,mN,bd=x(()=>{"use strict";vt();Nn();jc();uN=new WeakMap;M2=new WeakMap,mN=new WeakSet});var Nr,wN,rse,sse,ose,ise,ase,se,f_,yn,Id,Ar,kd,Nd,vo,_N,gN,yN,So,Ad,$2,EN,TN,vN,m_=x(()=>{"use strict";Nr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Nr(e);Object.freeze(t)}return t},wN=Nr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),rse=Nr({status:"string",error:"string|null",code:"ErrorCode?"}),sse=Nr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),ose=Nr(["Provider1.Provider","Provider1.Model1","Provider2.Provider","Provider2.Model1","Provider3.Provider","Provider3.Model1"]),ise=Nr(["Provider1","Provider2","Provider3"]),ase=Nr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),se={name:"ctx",type:"context"},f_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},yn={name:"teamfile",type:"string"},Id={name:"alias",type:"string"},Ar={name:"prompt",type:"string"},kd={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"}]},Nd=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],vo={name:"options",type:"map",optional:!0,keys:Nd},_N={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},gN={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},yN={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},So={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},Ad={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"}]},$2=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],EN={name:"options",type:"map",optional:!0,keys:$2},TN={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},vN=Nr([{name:"resolveProfilePath",implemented:!0,params:[se,f_],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[se,f_],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:[se,{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:[se,yn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[yn]}},{name:"resolveMember",implemented:!0,params:[se,yn,Id],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:[yn,Id]}},{name:"lintTeam",implemented:!0,params:[se,yn],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:[yn]}},{name:"seedTeam",implemented:!0,params:[se,yn,_N],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:[yn,_N]}},{name:"promptAgent",implemented:!0,params:[se,kd,Ar,vo],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...TN,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[kd,Ar,vo]}},{name:"promptMember",implemented:!0,params:[se,{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"},...Nd]}],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:[yn,Id,Ar,{name:"options",type:"map",optional:!0,keys:[...Nd,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[se,{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:[se,So,yN],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:[kd,{...yN,optional:!0}]}},{name:"getSession",implemented:!0,params:[se,So],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:[So]}},{name:"reserveSession",implemented:!0,params:[se,So],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:[se,So,{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:[se,{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"},...Nd]}],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:[se,{name:"batch",type:"BatchRef"},Ar,{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:[se,{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:[se,gN],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:[gN]}},{name:"openTerminal",implemented:!0,params:[se,{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:[yn,Id]}},{name:"sessionAdmission",implemented:!0,params:[se,So],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:[se,{name:"reservation",type:"SessionReservation"},kd,Ar,vo],statuses:["ok","busy","stalled","empty","error"],results:{...TN,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[se,{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:[se,{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:[se,{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"}]},vo],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:[se,{name:"session",type:"NativeSessionRef"},Ar],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:[se,{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:[se,{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:[se,Ad,Ar,vo],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:[Ad,Ar,vo]}},{name:"nativeSessionClose",implemented:!0,params:[se,Ad],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:[Ad]}},{name:"loadProperties",implemented:!0,params:[se,f_],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:[se,EN],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:[EN]}}])});function SN(t){if(!pN(t))return pt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return pt("cancelled","Context is closed")}function bN(t){return vN.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var IN=x(()=>{"use strict";m_();bd();jc()});import{isAbsolute as P2,resolve as U2}from"node:path";function Ld(t){return Number.isFinite(t)&&Math.abs(t)<=F2}function j2(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(wN.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 __(t,e=Date.now()){if(t===void 0)return{windowMs:kN};let n=/^(\d+)([smhd])$/.exec(t);if(n!==null){let o=Number(n[1]),i=n[2],l=(i==="s"?o:i==="m"?o*60:i==="h"?o*3600:o*86400)*1e3;return!Number.isFinite(l)||l<0||!Ld(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!Ld(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return Ld(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function Rd(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function h_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return p_;let s=e.get(n);if(s===void 0){try{s=Ie(n)}catch{s=null}e.set(n,s)}return s===null?p_:_l(s,r)?.model??p_}async function AN(t,e={}){let n=SN(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 o=bN("listRunning");if(o.length>0){for(let i of Object.keys(e))if(!o.includes(i))return{status:"error",error:`Unknown option: ${i}`,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=kN;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!Ld(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 o=__(e.since,r);if("error"in o)return{status:"error",error:o.error,code:"invalid_argument",running:[],dead:[],idle:[]};s=o.windowMs}else return{status:"error",error:"since must be a duration string or number",code:"invalid_argument",running:[],dead:[],idle:[]};try{let o=fN(t),i=e?.teamfile!==void 0?P2(e.teamfile)?e.teamfile:U2(t.cwd,e.teamfile):void 0,a=i!==void 0?Ne(i,o):void 0,l=e?.member!==void 0?e.member.toLowerCase():void 0,c=y=>!(a!==void 0&&y.target_teamfile!==a||l!==void 0&&(y.target_alias??"").toLowerCase()!==l),d=o.listAllRunningTrackedInvocations().filter(c),u=new Map,f=[],m=[];for(let y of d){let T=nr(y),w=r-new Date(y.started_at).getTime(),S={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:Rd(y),model:h_(y,u),started_at:y.started_at,parent_invocation_id:y.parent_invocation_id};if(T==="dead"){if(_f(o,y)!==null)continue;m.push({...S,stale_for_ms:w})}else f.push({...S,running_for_ms:w,holder_liveness:T??"unknown"})}let p=new Set(d.map(Rd).filter(y=>y!==null)),_=new Date(r-s).toISOString(),h=o.listRecentlyFinishedTrackedInvocations(_).filter(c),g=new Set,E=[];for(let y of h){let T=Rd(y);T===null||p.has(T)||g.has(T)||(g.add(T),E.push({id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:T,model:h_(y,u),status:y.status,started_at:y.started_at,ended_at:y.ended_at,idle_ms:r-new Date(y.ended_at).getTime(),ran_ms:new Date(y.ended_at).getTime()-new Date(y.started_at).getTime(),error:y.error,parent_invocation_id:y.parent_invocation_id}))}if(e?.tree===!0){let y=new Set([...f.map(w=>w.id),...m.map(w=>w.id),...E.map(w=>w.id)]),T=[...y];for(;T.length>0;){let w=o.listFinishedTrackedInvocationChildren(T,_).filter(S=>!y.has(S.id)&&c(S));if(w.length===0)break;T=[];for(let S of w){y.add(S.id),T.push(S.id);let b=Rd(S);E.push({id:S.id,kind:S.kind,origin:S.origin,from_identity:S.from_identity,target:b,model:h_(S,u),status:S.status,started_at:S.started_at,ended_at:S.ended_at,idle_ms:r-new Date(S.ended_at).getTime(),ran_ms:new Date(S.ended_at).getTime()-new Date(S.started_at).getTime(),error:S.error,parent_invocation_id:S.parent_invocation_id})}}}return{status:"ok",error:null,running:f,dead:m,idle:E}}catch(o){return{status:"error",error:o instanceof Error?o.message:String(o),code:j2(o),running:[],dead:[],idle:[]}}}var kN,F2,p_,NN=x(()=>{"use strict";bd();IN();m_();Wt();kl();Be();rn();kN=24*60*60*1e3,F2=864e13;p_="default"});var DN={};me(DN,{_setRunningWatchMaxTicksForTests:()=>B2,runRunning:()=>Q2});import{resolve as W2}from"node:path";function B2(t){y_=t??void 0}function q2(t){let e=t.split(`
2601
2603
  `,1)[0];return e.length<=E_?e:`${e.slice(0,E_)}\u2026`}function T_(t){return t.target!==null?gn(t.target):t.from_identity}function LN(t){return[(0,Pt.escapeCell)(T_(t)),t.kind,"running",t.holder_liveness,(0,Pt.escapeCell)(t.model),pa(t.started_at)]}function xN(t){return[(0,Pt.escapeCell)(T_(t)),t.kind,"DEAD","",(0,Pt.escapeCell)(t.model),`stale ${pa(t.started_at)}, holder process confirmed dead`]}function CN(t){let e=`ran ${Sd(t.ran_ms)}, idle ${pa(t.ended_at)}`;return t.status==="error"&&t.error!==null&&t.error!==""&&(e+=` \u2014 ${(0,Pt.escapeCell)(al(t.error,E_)??q2(t.error))}`),[(0,Pt.escapeCell)(T_(t)),t.kind,t.status,"",(0,Pt.escapeCell)(t.model),e]}function g_(t){return t.filter(e=>e!=="").join(" ")}function ON(t){let e=new Map(t.map(o=>[o.id,o])),n=new Map,r=[];for(let o of t){let i=o.parent_invocation_id;if(i!==null&&e.has(i)){let a=n.get(i)??[];a.push(o),n.set(i,a)}else r.push(o)}let s=(o,i)=>i.started_at.localeCompare(o.started_at);r.sort(s);for(let o of n.values())o.sort(s);return{roots:r,childrenByParent:n}}function V2(t){let{roots:e,childrenByParent:n}=ON(t),r=[],s=(o,i)=>{r.push(`${" ".repeat(i+1)}${o.line}`);for(let a of n.get(o.id)??[])s(a,i+1)};for(let o of e)s(o,0);return r}function J2(t,e,n){let r=[...t.map(a=>({state:"running",...a})),...e.map(a=>({state:"dead",...a})),...n.map(a=>({state:"idle",...a}))],{roots:s,childrenByParent:o}=ON(r),i=a=>({...a,children:(o.get(a.id)??[]).map(i)});return s.map(i)}function K2(t,e){return e?{schema_version:RN,tree:J2(t.running,t.dead,t.idle)}:{schema_version:RN,running:t.running,dead:t.dead,idle:t.idle}}function Y2(t){let e=[...t.running.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:g_(LN(r))})),...t.dead.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:g_(xN(r))})),...t.idle.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:g_(CN(r))}))],n=V2(e);return`${n.length>0?n.join(`
2602
2604
  `):" none"}
2603
2605
  `}function z2(t,e){let n=[{title:`Running (${t.running.length}):`,rows:t.running.map(LN)},{title:`Dead (reclaimable) (${t.dead.length}):`,rows:t.dead.map(xN)},{title:`Idle, finished in the last ${Sd(e)} (${t.idle.length}):`,rows:t.idle.map(CN)}],r=["MEMBER","KIND","STATE","LIVENESS","MODEL","TIMING"],s=(0,Pt.measureColumns)([{rows:[],headers:r},...n.map(a=>a.rows)],{max:G2}),o=!1,i=[];return n.forEach((a,l)=>{if(l>0&&i.push(""),i.push(a.title),a.rows.length===0){i.push(" none");return}let c=!o;o=!0,i.push((0,Pt.renderGrid)(a.rows,{widths:s,margin:2,...c?{headers:r}:{}}))}),`${i.join(`
@@ -2605,7 +2607,7 @@ breakdown, liveness with terminal-lock/in-flight holder info).
2605
2607
  `}async function Q2(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${X2}
2606
2608
  `),0;let n=ae(t,["--team","--member","--since","--watch-interval"],["--json","--tree","--watch"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json"),s=z(n,"--tree"),o=z(n,"--watch"),i=V(n,"--team"),a=V(n,"--member"),l=__(V(n,"--since"));if("error"in l)return D(e,l.error);let c=V(n,"--watch-interval"),d=c===void 0?H2:Number.parseInt(c.replace(/s$/,""),10);if(!Number.isFinite(d)||d<1)return D(e,`invalid --watch-interval "${c}" (expected <N>s, N\u22651)`);let u=()=>W(e,async f=>{let m=hN({cwd:W2(e.cwd??process.cwd()),env:e.env??process.env,dal:f,dbPath:Pe(e)});if(m.status!=="ok")return D(e,m.error);let p=await AN(m,{teamfile:i,member:a,since:V(n,"--since"),tree:s});if(p.status!=="ok")return D(e,p.error??"listRunning failed");if(r){let _=K2(p,s);return o?e.stdout.write(`${JSON.stringify(_)}
2607
2609
  `):te(e,_),0}return e.stdout.write(s?Y2(p):z2(p,l.windowMs)),0});return o?await new Promise(f=>{let m=0,p=!1,_=E=>{clearInterval(E),f(0)},h=async E=>{if(!p){p=!0;try{await u()}catch(y){e.stderr.write(`running: ${y instanceof Error?y.message:String(y)}
2608
- `)}finally{p=!1}m+=1,y_!==void 0&&m>=y_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var Pt,RN,H2,y_,X2,E_,G2,MN=x(()=>{"use strict";Pt=Ft(Ct(),1);Id();NN();le();u_();St();RN=3,H2=2;X2=["usage: lmctl running [--team <file>] [--member <alias>] [--since <duration|ISO8601>]"," [--tree] [--watch] [--watch-interval Ns] [--json]","","Shows tracked_invocation activity DB-wide across the whole fleet, split","into three sections (flat mode, the default):",' - Running: status="running" with a live (or unverifiable cross-host)'," holder -- genuinely in-flight work.",' - Dead (reclaimable): status="running" but the holder process is'," confirmed dead -- an orphaned record, not active work. Its elapsed",' time is reported as staleness, not as "running", so a dead worker'," is never mistaken for one that is genuinely still building."," - Idle: targets with nothing running or dead, showing their most"," recent finish from the last 24 hours and how long they've been"," idle since.",' A finish that failed ends with " \u2014 " and one line of the failure:'," for a provider failure the end of the provider's own output, for"," any other error its first line. It is a pointer, not the full"," error: --json has the complete text.","","--team <file> narrows the view to one teamfile (path is canonicalized","before matching); --member <alias> narrows it to one member alias","(case-insensitive; combinable with --team). --since sets the lookback","window for the Idle section -- a relative duration (<n>s|m|h|d, e.g. 7d)","or an absolute ISO8601 timestamp (default 24h). Running and Dead are","point-in-time current state and are not time-filtered.","","--watch re-renders the full snapshot every --watch-interval (default 2s)","until interrupted (SIGINT/SIGTERM). With --json, each snapshot is emitted","as ONE compact JSON object per line (NDJSON).","","--tree shows the same rows as one hierarchical dispatch-lineage view","instead: no section headers (each row already carries its own status),","indented under the session that dispatched it (who woke whom), sorted","by the most recent root session first. A node is a specific turn at a","specific time, not a team:alias identity -- the same member can appear","as multiple nodes for its different turns. Lineage is only known for","turns dispatched by a NESTED `lmctl prompt`/`lmctl terminal` call made","from within another turn's own tool calls; anything else (a human's","direct dispatch, or a turn from before this feature existed) has no","recorded parent and shows as its own root. Unlike the flat Idle section,","--tree does NOT collapse finished rows to one per target: every finished","descendant of a node in view (within the --since window) is rendered, so","a `lmctl batch` run shows as its batch root with ALL of its per-prompt","turns nested underneath.","","Every row also carries `model`: the target member's declared `model=`",'read straight from its teamfile (no session/provider query) -- "default"',"when the teamfile has no model= attribute, the alias/file can't be","resolved, or there is no target at all. This is the DECLARED value only,","not necessarily what actually ran (see the MODEL column in `lmctl status","<teamfile> --details`).","","--json emits { schema_version, running, dead, idle } (flat, one array","per section, matching the three flat-mode sections -- each row carries","its own status/timing/error fields). --tree --json instead emits","{ schema_version, tree } -- an array of root nodes, each row's full",'fields plus a "state" discriminant ("running"/"dead"/"idle") and a','"children" array of the same shape, nested per the dispatch lineage.',"","Queries lmctl's own database only -- never touches native provider","session files."].join(`
2610
+ `)}finally{p=!1}m+=1,y_!==void 0&&m>=y_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var Pt,RN,H2,y_,X2,E_,G2,MN=x(()=>{"use strict";Pt=Ft(Ct(),1);bd();NN();le();u_();St();RN=3,H2=2;X2=["usage: lmctl running [--team <file>] [--member <alias>] [--since <duration|ISO8601>]"," [--tree] [--watch] [--watch-interval Ns] [--json]","","Shows tracked_invocation activity DB-wide across the whole fleet, split","into three sections (flat mode, the default):",' - Running: status="running" with a live (or unverifiable cross-host)'," holder -- genuinely in-flight work.",' - Dead (reclaimable): status="running" but the holder process is'," confirmed dead -- an orphaned record, not active work. Its elapsed",' time is reported as staleness, not as "running", so a dead worker'," is never mistaken for one that is genuinely still building."," - Idle: targets with nothing running or dead, showing their most"," recent finish from the last 24 hours and how long they've been"," idle since.",' A finish that failed ends with " \u2014 " and one line of the failure:'," for a provider failure the end of the provider's own output, for"," any other error its first line. It is a pointer, not the full"," error: --json has the complete text.","","--team <file> narrows the view to one teamfile (path is canonicalized","before matching); --member <alias> narrows it to one member alias","(case-insensitive; combinable with --team). --since sets the lookback","window for the Idle section -- a relative duration (<n>s|m|h|d, e.g. 7d)","or an absolute ISO8601 timestamp (default 24h). Running and Dead are","point-in-time current state and are not time-filtered.","","--watch re-renders the full snapshot every --watch-interval (default 2s)","until interrupted (SIGINT/SIGTERM). With --json, each snapshot is emitted","as ONE compact JSON object per line (NDJSON).","","--tree shows the same rows as one hierarchical dispatch-lineage view","instead: no section headers (each row already carries its own status),","indented under the session that dispatched it (who woke whom), sorted","by the most recent root session first. A node is a specific turn at a","specific time, not a team:alias identity -- the same member can appear","as multiple nodes for its different turns. Lineage is only known for","turns dispatched by a NESTED `lmctl prompt`/`lmctl terminal` call made","from within another turn's own tool calls; anything else (a human's","direct dispatch, or a turn from before this feature existed) has no","recorded parent and shows as its own root. Unlike the flat Idle section,","--tree does NOT collapse finished rows to one per target: every finished","descendant of a node in view (within the --since window) is rendered, so","a `lmctl batch` run shows as its batch root with ALL of its per-prompt","turns nested underneath.","","Every row also carries `model`: the target member's declared `model=`",'read straight from its teamfile (no session/provider query) -- "default"',"when the teamfile has no model= attribute, the alias/file can't be","resolved, or there is no target at all. This is the DECLARED value only,","not necessarily what actually ran (see the MODEL column in `lmctl status","<teamfile> --details`).","","--json emits { schema_version, running, dead, idle } (flat, one array","per section, matching the three flat-mode sections -- each row carries","its own status/timing/error fields). --tree --json instead emits","{ schema_version, tree } -- an array of root nodes, each row's full",'fields plus a "state" discriminant ("running"/"dead"/"idle") and a','"children" array of the same shape, nested per the dispatch lineage.',"","Queries lmctl's own database only -- never touches native provider","session files."].join(`
2609
2611
  `),E_=120;G2=[26,void 0,void 0,void 0,24,void 0]});var UN={};me(UN,{runPrices:()=>nq});import{existsSync as Z2}from"node:fs";import{resolve as $N}from"node:path";function xd(t,e,n="price snapshot unavailable"){return e?te(t,{schema_version:1,status:"unavailable",reason:n}):t.stdout.write(`unavailable: ${n}
2610
2612
  `),0}function eq(t){let e=t?.code;return typeof e=="string"&&/SQLITE_(BUSY|LOCKED|READONLY|CANTOPEN)/.test(e)}function PN(t){return t.dal!==void 0?{db:t.dal,owned:!1}:{db:$e({path:Pe(t),recover:!1}),owned:!0}}function tq(t){if(t.owned)try{t.db.close()}catch{}}async function nq(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Cd),0;let n=t[0];return n!=="update"&&n!=="show"?(e.stderr.write(`error: expected update or show
2611
2613
  ${Cd}`),2):n==="update"?rq(t.slice(1),e):sq(t.slice(1),e)}async function rq(t,e){let n=ae(t,["--aliases"],["--json"]);if(n.error||n.positionals.length>1)return e.stderr.write(`error: ${n.error??"update accepts at most one FILE"}
@@ -2639,9 +2641,9 @@ cache write: ${String(y.rates.input_cache_write_per_1m_tokens??"n/a")}
2639
2641
  show [MODEL] [--provider PROVIDER] [--json]
2640
2642
  Read the stored snapshot without files/network, or show its source and age.
2641
2643
  Rates are base-tier USD per million; 1-hour write blends need turn counters.
2642
- `});function at(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 En(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return at(e==="percent"?n/100:n)}function jN(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 WN(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function HN(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 BN(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 Io(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 iq)n=n.replace(r,"***REDACTED***");return n}function At(t){let e=at(t.used_fraction),n=at(t.remaining_fraction),r=t.resets_at==null?WN(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?jN(r):jN(WN(t.resets_at_iso)),o={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:at(1-n)),remaining_fraction:n??(e===null?null:at(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 i of["raw_value","raw_scale","limit_name","metered_feature","allowed","limit_reached"])t[i]!=null&&(o[i]=t[i]);return o}function Ge(t,e,n={}){let r={$schema:oq,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 ht(t,e,n,r,s,o=[],i){return Ge(t,e,{source:s??null,reason:n,...r==null?{}:{detail:Io(r,o)},...i==null?{}:{retry_after_seconds:i}})}function XN(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 Nt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=Io(n,[...r].filter(i=>typeof i=="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:o}),t.debug?.(`[debug] ${e}${s===void 0?"":` HTTP ${s}`} raw response:
2643
- ${o}`)}function bo(t,e,n=[]){let r;try{let o=JSON.parse(e);r=typeof o?.error=="string"?o.error:o?.error?.message??o?.message??o?.detail}catch{/^\s*[<{[]/.test(e)||(r=e.trim())}if(typeof r!="string"||!r.trim())return t;let s=Io(r,n);return{...t,detail:s,provider_message:s}}var oq,iq,Hn=x(()=>{"use strict";oq="https://lmctl.com/schemas/lmratelimit-v1.json";iq=[/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 aq}from"node:child_process";import{readdirSync as lq,readFileSync as cq}from"node:fs";import{join as dq}from"node:path";function Eq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function Tq(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 wq(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 vq(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 o=wq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=at(i/100);n.push(At({bucket_id:`${Tq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:at(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:i,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 ha(t,e,n){return ht("agy","provider_unavailable",t,e,"agy_cli_print")}function Sq(t,e,n={}){try{let r=_q(Math.max(t,60)*1e3,Eq(e));if(Nt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return ha("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return ha("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return ha("cli_failed",r.error.message,t);let s=vq(r.stdout??"");return s.length===0?ha("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ge("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return ha("cli_failed",r instanceof Error?r.message:String(r),t)}}function VN(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 o=Number(n.port);return!Number.isInteger(o)||o<1||o>65535||n.port!==String(o)?null:`${r==="::1"||r==="[::1]"?"[::1]":r}:${o}`}function Iq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=VN(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[qN],t[GN],-1);try{for(let s of lq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of cq(dq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[qN],o[GN],Number(s))}catch{}}catch{}return e}function bq(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 o=s,i=typeof o.displayName=="string"?o.displayName:null;if(Array.isArray(o.buckets))for(let a of o.buckets){if(typeof a!="object"||a===null)continue;let l=a,c=En(l.remainingFraction,"fraction");r.push(At({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:BN(l.window),used_fraction:c===null?null:at(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,o)=>String(s.group_name??"").localeCompare(String(o.group_name??""))||String(s.bucket_id??"").localeCompare(String(o.bucket_id??""))),Ge("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function kq(t,e,n={}){try{let s=yq(e).map(([a,l,c])=>[VN(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ht("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let o=[],i=Date.now()+t*1e3;for(let[a,l,c]of s){let d=i-Date.now();if(d<=0){o.push("overall connect deadline exceeded");break}try{let u=await gq(`http://${a}${uq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(Nt(n,"agy_connect_rpc",u.body,[l],u.status),u.status===200){let f;try{f=JSON.parse(u.body)}catch{o.push(`pid=${c}: unparseable response`);continue}let m=bq(f);if(m)return m;o.push(`pid=${c}: response had no quota groups`)}else u.status===401||u.status===403?o.push(`pid=${c}: HTTP ${u.status} unauthorized`):o.push(`pid=${c}: HTTP ${u.status}`)}catch(u){o.push(`pid=${c}: ${u instanceof Error?u.message:String(u)}`)}}return ht("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${o.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return ht("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function JN(t){let e=await kq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Sq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ht("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 qN,GN,uq,fq,mq,pq,hq,_q,gq,yq,KN=x(()=>{"use strict";Hn();Hn();qN="ANTIGRAVITY_LS_ADDRESS",GN="ANTIGRAVITY_CSRF_TOKEN",uq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",fq=["-p","/usage"],mq=(t,e)=>{let n=aq("agy",fq,{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}},pq=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()}},hq=t=>Iq(t),_q=mq,gq=pq,yq=hq});import{randomUUID as QN}from"node:crypto";import{mkdirSync as Aq,readFileSync as v_,realpathSync as Nq,renameSync as Rq,rmSync as S_,statSync as YN,writeFileSync as ZN}from"node:fs";import{homedir as Lq}from"node:os";import{join as I_}from"node:path";import{setTimeout as xq}from"node:timers/promises";function A_(t){return I_(t.CLAUDE_CONFIG_DIR??I_(t.HOME??Lq(),".claude"),".credentials.json")}function b_(t){let e=JSON.parse(v_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function k_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function eR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=A_(t);try{let n=k_(b_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Nq(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 Od(t){return typeof t.expiresAt=="number"&&Date.now()+Dq>=t.expiresAt}function zN(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Mq(t,e){let n=`${t}.lmctl-refresh.lock`,r=I_(n,"owner.json"),s=QN();for(;;){e.throwIfAborted();try{Aq(n,{mode:448});try{ZN(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw S_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(v_(r,"utf8")).token===s&&S_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(v_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-YN(n).mtimeMs>6e4}catch{try{i=Date.now()-YN(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await xq(50,void 0,{signal:e})}}}async function tR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Mq(t.path,e);try{let r=k_(b_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!zN(r,t.oauth)&&!Od(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Oq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:Cq})});if(!s.ok)throw new Error(`refresh_http_${s.status}`);let o=await s.json();if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||typeof o.expires_in!="number"||!Number.isFinite(o.expires_in)||o.expires_in<=0||o.refresh_token!==void 0&&(typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token)))throw new Error("invalid_refresh_response");let i=Math.floor(Date.now()+o.expires_in*1e3);if(!Number.isSafeInteger(i)||i<=Date.now())throw new Error("invalid_refresh_response");let a=b_(t.path),l=k_(a);if(!l||!zN(r,l)){if(l&&typeof l.accessToken=="string"&&!Od(l))return l;throw new Error("credentials_changed")}let c={...l,accessToken:o.access_token,refreshToken:o.refresh_token??r.refreshToken,expiresAt:i,...typeof o.scope=="string"?{scopes:o.scope.split(/\s+/).filter(Boolean)}:{}},d=`${t.path}.${QN()}.tmp`;try{ZN(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Rq(d,t.path)}finally{S_(d,{force:!0})}return c}finally{n()}}var Cq,Oq,Dq,nR=x(()=>{"use strict";Cq="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Oq="https://console.anthropic.com/v1/oauth/token",Dq=3e5});import{spawnSync as oR}from"node:child_process";function Uq(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 iR(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Fq(t){try{let e=oR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:iR(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Vt(t,e,n,r="claude_oauth_api",s){return ht("claude",t,e,n,r,void 0,s)}function jq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function Wq(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 o=new Date(Date.UTC(new Date().getUTCFullYear(),n,Number(e[2]),r,s));return Number.isFinite(o.getTime())?Math.floor(o.getTime()/1e3):void 0}function Bq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=Hq.exec(n.trim());if(!r)continue;let s=r[1].trim(),i=s.toLowerCase()==="session",a=/\(([^)]+)\)/.exec(s)?.[1]?.trim()??s,l=i?"session":a.toLowerCase()==="all models"?"week-all-models":`week-scoped-${a}`,c=i?"five_hour":"weekly";e.push(At({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:En(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:Wq(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 Xq(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 o=/^\s+(\d+)%\s+of your usage\s+(.+?)\s*$/.exec(r);if(!o||!n)continue;let i=o[2].toLowerCase(),a=i.includes(">150k context")?"pct_high_context":i.includes("active for 8+ hours")?"pct_long_sessions":i.includes("subagent-heavy")?"pct_subagent_heavy":i.includes("ran in parallel")?"pct_parallel_sessions":void 0;a&&(n[a]=Number(o[1]))}return e}function qq(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 o=s&&n?.limit&&typeof n.limit=="object"?n.limit:{},i=s&&n?.used&&typeof n.used=="object"?n.used:{},a=g=>{let E=typeof g=="number"?g:typeof g=="string"&&g.trim()!==""?Number(g):NaN;return Number.isSafeInteger(E)&&E>=0&&E<=9?E:void 0},l=g=>{let E=typeof g=="number"?g:typeof g=="string"&&g.trim()!==""?Number(g):NaN;return Number.isFinite(E)?E:void 0},c=a(o.exponent??r?.decimal_places??2),d=a(i.exponent??r?.decimal_places??2),u=s?o.amount_minor:r?.monthly_limit,f=s?i.amount_minor:r?.used_credits,m=(g,E,y)=>E===void 0||y!==void 0&&y!=="USD"||l(g)===void 0?void 0:(l(g)/10**E).toFixed(2),p=En(s?n?.percent:r?.utilization,"percent"),_=s?n?.spend_limit_reached??r?.spend_limit_reached:r?.spend_limit_reached,h={limit_usd:m(u,c,o.currency??r?.currency),used_usd:m(f,d,i.currency??r?.currency),remaining_fraction:p==null?void 0:Math.max(0,1-p),resets_at_iso:s?n?.resets_at:void 0,...typeof _=="boolean"?{reached:_}:{}};return Object.values(h).every(g=>g==null)?void 0:h}async function sR(t,e,n,r={}){try{let s=oR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:iR(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";Nt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Bq(o);if(!i.length)return;let a=Xq(o);return Ge("claude",Ve.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:i,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function aR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=eR(e);if(s.error==="not_claude_ai_subscriber")return Vt(Ve.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Vt(Ve.unavailable,"credentials_missing",`credentials file not found: ${A_(e)}`);if(s.error)return Vt(Ve.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(rR))return Vt(Ve.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${rR} scope required by the usage endpoint`);let a=new AbortController,l=setTimeout(()=>a.abort(),t*1e3),c,d;try{let g=!1,E=async()=>{try{o=await tR({...s,oauth:o},a.signal),g=!0}catch(T){let w=T instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(T.message)?T.message:"refresh_failed";if(w==="refresh_http_429")return Vt(Ve.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Vt(Ve.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 S=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Vt(S?Ve.expired:Ve.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${S?"; renew Claude login":"; try again later"}`)}};if(Od(o)){let T=await E();if(T)return T}let y=()=>fetch(`${$q}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":Pq,"Content-Type":"application/json","User-Agent":Fq(e)},signal:a.signal});if(c=await y(),d=await c.text(),Nt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status),c.status===401&&!g&&s.path&&o.refreshToken){let T=await E();if(T)return T;c=await y(),d=await c.text(),Nt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await sR(o,e,t,{debug:n,onRawResponse:r});return E||Vt(Ve.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>bo(Vt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ve.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ve.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=jq(c.headers),E=await sR(o,e,t,{debug:n,onRawResponse:r});return E||u(Ve.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Ve.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Vt(Ve.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Vt(Ve.unavailable,"malformed_response","response was not an object");let m=f,p=Array.isArray(m.limits)?m.limits:[],_=p.length?p.flatMap(g=>{if(!g||typeof g!="object")return[];let E=g.kind,y=Uq(E==="session"?"session":E),T=g.scope?.model?.display_name,w=E==="session"?"session":E==="weekly_all"?"week-all-models":`week-scoped-${T||E}`;return[At({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:En(g.percent,"percent"),resets_at_iso:g.resets_at,raw_value:g.percent,raw_scale:"used_percent"})]}):["five_hour","seven_day"].flatMap(g=>{let E=m[g];return!E||typeof E!="object"?[]:[At({bucket_id:g==="five_hour"?"session":"week-all-models",group_name:g==="five_hour"?"session":"weekly",window_type:g==="five_hour"?"five_hour":"weekly",used_fraction:En(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=qq(m.spend,m.extra_usage);return Ge("claude",Ve.ok,{source:"claude_oauth_api",account_id:null,plan_type:o.subscriptionType??o.rateLimitTier??null,ordinary_usage_allowed:null,buckets:_.sort((g,E)=>String(g.window_type).localeCompare(String(E.window_type))||String(g.bucket_id).localeCompare(String(E.bucket_id))),...h?{spend_control:h}:{}})}var $q,Pq,rR,Ve,Hq,lR=x(()=>{"use strict";Hn();nR();Hn();$q="https://api.anthropic.com",Pq="oauth-2025-04-20",rR="user:profile";Ve={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};Hq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as uR}from"node:crypto";import{mkdirSync as Gq,readFileSync as N_,realpathSync as Vq,renameSync as Jq,rmSync as R_,statSync as cR,writeFileSync as fR}from"node:fs";import{homedir as Kq}from"node:os";import{join as L_}from"node:path";import{setTimeout as Yq}from"node:timers/promises";function _a(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function C_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||L_(t.HOME||Kq(),".codex");return L_(e,"auth.json")}function x_(t){let e=_a(JSON.parse(N_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function mR(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=C_(t);try{let n=_a(x_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:Vq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function dR(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 Zq(t,e){let n=`${t}.lmctl-refresh.lock`,r=L_(n,"owner.json"),s=uR();for(;;){e.throwIfAborted();try{Gq(n,{mode:448});try{fR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw R_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(N_(r,"utf8")).token===s&&R_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(N_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-cR(n).mtimeMs>6e4}catch{try{i=Date.now()-cR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Yq(50,void 0,{signal:e})}}}async function pR(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await Zq(t.path,e);try{let r=x_(t.path),s=_a(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!dR(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 o=await fetch(zq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:Qq})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=_a(await o.json());if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||i.refresh_token!==void 0&&(typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token))||i.id_token!==void 0&&(typeof i.id_token!="string"||!/^\S+$/.test(i.id_token)))throw new Error("invalid_refresh_response");let a=x_(t.path),l=_a(a.tokens);if(!l||!dR(s,l)){if(l&&typeof l.access_token=="string")return l;throw new Error("credentials_changed")}let c={...l,access_token:i.access_token,...i.refresh_token===void 0?{}:{refresh_token:i.refresh_token},...i.id_token===void 0?{}:{id_token:i.id_token}},d={...a,tokens:c,last_refresh:new Date().toISOString()},u=`${t.path}.${uR()}.tmp`;try{fR(u,JSON.stringify(d),{flag:"wx",mode:384}),Jq(u,t.path)}finally{R_(u,{force:!0})}return c}finally{n()}}var zq,Qq,hR=x(()=>{"use strict";zq="https://auth.openai.com/oauth/token",Qq="app_EMoamEEZ73f0CkXaXp7hrann"});function Tn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _R(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 gR(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function nG(t){if(Tn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function rG(t){let e=[],n=Tn(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 i of["primary_window","secondary_window"]){let a=Tn(n[i])?n[i]:void 0;if(!a)continue;let l=_R(a.limit_window_seconds);e.push(At({bucket_id:`codex-${gR(l)}`,group_name:"codex",window_type:l,used_fraction:En(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 o=Array.isArray(t.additional_rate_limits)?t.additional_rate_limits:[];for(let i of o){if(!Tn(i))continue;let a=Tn(i.rate_limit)?i.rate_limit:{},l=typeof i.limit_name=="string"?i.limit_name:void 0,c=typeof i.metered_feature=="string"?i.metered_feature:void 0,d=c||l||"additional",u=typeof a.allowed=="boolean"?a.allowed:void 0,f=typeof a.limit_reached=="boolean"?a.limit_reached:void 0;for(let m of["primary_window","secondary_window"]){let p=Tn(a[m])?a[m]:void 0;if(!p)continue;let _=_R(p.limit_window_seconds);e.push(At({bucket_id:`${d}-${gR(_)}`,group_name:l||d,window_type:_,used_fraction:En(p.used_percent,"percent"),resets_at:p.reset_at,raw_value:p.used_percent,raw_scale:"used_percent",...l===void 0?{}:{limit_name:l},...c===void 0?{}:{metered_feature:c},...u===void 0?{}:{allowed:u},...f===void 0?{}:{limit_reached:f}}))}}return e.sort((i,a)=>String(i.group_name??"").localeCompare(String(a.group_name??""))||String(i.bucket_id).localeCompare(String(a.bucket_id)))}function sG(t){let e=Tn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Tn(t.spend_control)?t.spend_control:void 0,s=Tn(t.credits)?t.credits:void 0;return Ge("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:rG(t),...s?{credits:nG(s)}:{},...r?{spend_control:r}:{}})}async function yR(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=mR(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Ge("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${C_(n)} (or $CODEX_ACCESS_TOKEN)`});let a=new AbortController,l=setTimeout(()=>a.abort(),Math.ceil(e*1e3)),c=i.access_token,d=new Set([i.access_token,i.refresh_token,i.id_token].filter(u=>typeof u=="string"&&!!u));try{let u=typeof i.account_id=="string"?i.account_id:void 0,f=typeof i.refresh_token=="string"?i.refresh_token:void 0,m=typeof i.id_token=="string"?i.id_token:void 0,p="",_=()=>[...d],h=(S,I)=>bo(Ge("codex",S,I),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let S=await pR({...o,tokens:{...i,refresh_token:f}},a.signal);typeof S.access_token=="string"&&(d.add(S.access_token),c=S.access_token),u=typeof S.account_id=="string"?S.account_id:u,typeof S.refresh_token=="string"&&(d.add(S.refresh_token),f=S.refresh_token),typeof S.id_token=="string"&&(d.add(S.id_token),m=S.id_token),g=!0;return}catch(S){let I=S instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(S.message)?S.message:"refresh_failed",b=I==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(I);return Ge("codex",b?"auth_expired":"provider_unavailable",{source:"codex_http",reason:b?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${I})${b?"; renew Codex login":"; try again later"}`})}},y=()=>{let S={Authorization:`Bearer ${c}`,"User-Agent":tG,"Content-Type":"application/json",Accept:"application/json"};u&&(S["ChatGPT-Account-Id"]=u);let I=(n.CODEX_BASE_URL||eG).replace(/\/$/,"");return fetch(`${I}/wham/usage`,{headers:S,signal:a.signal})},T=await y();if(p=await T.text(),Nt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status),T.status===401&&o.path&&f){let S=await E();if(S)return S;T=await y(),p=await T.text(),Nt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status)}if(T.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(T.status===429){let S=T.headers.get("retry-after"),I=S===null?void 0:Number.parseInt(S,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...I!==void 0&&Number.isFinite(I)&&I>=0?{retry_after_seconds:I}:{}})}if(!T.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${T.status}`,detail:"codex usage endpoint returned an unexpected status"});let w;try{w=JSON.parse(p)}catch(S){return Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:Io(String(S),d)})}return Tn(w)?sG(w):Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(u){let f=u instanceof Error?`${u.name}: ${u.message}`:String(u);return Ge("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:Io(f,d)})}finally{clearTimeout(l)}}var eG,tG,ER=x(()=>{"use strict";Hn();hR();Hn();eG="https://chatgpt.com/backend-api",tG="codex-cli"});import{createHash as oG,randomUUID as iG}from"node:crypto";import{readFileSync as IR,openSync as aG,fsyncSync as lG,closeSync as cG,mkdirSync as TR,writeFileSync as bR,renameSync as dG,rmSync as uG,rmdirSync as fG,statSync as O_,utimesSync as mG}from"node:fs";import{homedir as pG}from"node:os";import{basename as hG,dirname as _G,join as Dd}from"node:path";import{setTimeout as kR}from"node:timers/promises";function yG(t){let e;try{e=IR(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 o=/^\s*\[providers\.(?:"managed:kimi-code"|'managed:kimi-code')(\.oauth)?\]\s*(?:#.*)?$/.exec(s);if(o){r=o[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 i=/^\s*(base_url|oauth_host|storage|key)\s*=\s*("(?:[^"\\]|\\.)*"|'[^']*')\s*(?:#.*)?$/.exec(s);if(!i&&/^\s*(base_url|oauth_host|storage|key)\s*=/.test(s))throw new Error("config_malformed");if(i)try{n[r+i[1]]=i[2].startsWith('"')?JSON.parse(i[2]):i[2].slice(1,-1)}catch{throw new Error("config_malformed")}}return n}function Md(t){let e;try{e=JSON.parse(IR(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 AR(t){let e=t.KIMI_CODE_HOME??Dd(t.HOME??pG(),".kimi-code"),n=yG(t.KIMI_CODE_CONFIG_PATH??Dd(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=vR(t.KIMI_CODE_BASE_URL??n.base_url??wR),o=vR(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?D_:n["oauth.oauth_host"]??D_)),i=s===wR&&o===D_?"kimi-code":`kimi-code-env-${oG("sha256").update(JSON.stringify({oauthHost:o,baseUrl:s})).digest("hex").slice(0,16)}`;if(!t.KIMI_CREDENTIALS_PATH&&!r&&n["oauth.key"]===`oauth/${i}`&&n["oauth.storage"]&&n["oauth.storage"]!=="file")throw new Error("credential_storage_unsupported");let a=t.KIMI_CREDENTIALS_PATH??Dd(e,"credentials",`${i}.json`),l=Md(a),c=a,d=hG(a,".json");return{home:e,path:c,lockTarget:Dd(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function $d(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 SR(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 EG(t,e){TR(_G(t),{recursive:!0}),bR(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{TR(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-O_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await kR(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=O_(n),s=()=>{let i;try{i=O_(n)}catch{throw new Error("refresh_lock_lost")}if(i.ino!==r.ino||i.dev!==r.dev)throw new Error("refresh_lock_lost")},o=setInterval(()=>{try{s();let i=new Date;mG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),fG(n)}catch{}}}}async function NR(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await EG(t.lockTarget,e);try{let r=Md(t.path);if(!SR(r,t.token)&&!$d(r))return r;if(typeof r.refresh_token!="string"||!r.refresh_token)throw new Error("no_refresh_token");let s;for(let u=0;u<3;u++){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:gG,grant_type:"refresh_token",refresh_token:r.refresh_token})}),![429,500,502,503,504].includes(s.status)||u===2)break;await s.body?.cancel()}catch{if(e.aborted||u===2)throw new Error("refresh_request_failed")}await kR(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Md(t.path);if(u.refresh_token!==r.refresh_token)return u}catch{}throw new Error(`refresh_http_${s.status}`)}let o=await s.json(),i=Number(o?.expires_in);if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token)||!Number.isFinite(i)||i<=0)throw new Error("invalid_refresh_response");let a=Math.floor(Date.now()/1e3)+i;if(!Number.isSafeInteger(a))throw new Error("invalid_refresh_response");n.assertOwned();let l=Md(t.path);if(!SR(l,r)){if(!$d(l))return l;throw new Error("credentials_changed")}let c={...l,access_token:o.access_token,refresh_token:o.refresh_token,expires_at:a,expires_in:i,...typeof o.scope=="string"?{scope:o.scope}:{},...typeof o.token_type=="string"?{token_type:o.token_type}:{}},d=`${t.path}.${iG()}.tmp`;try{let u=aG(d,"wx",384);try{bR(u,JSON.stringify(c,null,2)+`
2644
- `),lG(u)}finally{cG(u)}n.assertOwned(),dG(d,t.path)}finally{uG(d,{force:!0})}return c}finally{n.release()}}var wR,D_,gG,vR,RR=x(()=>{"use strict";wR="https://api.kimi.com/coding/v1",D_="https://auth.kimi.com",gG="17e5f671-d194-4dfb-9706-5516cb48c098",vR=t=>t.trim().replace(/\/+$/,"")});function LR(t){let e=i=>{if(typeof i!="number"&&typeof i!="string"||typeof i=="string"&&i.trim()==="")return;let a=Number(i);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 o=r??n-s;return{used:o,limit:n,remaining:Math.max(0,n-o)}}async function xR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=AR(e)}catch(_){let h=_ instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(_.message)?_.message:"credentials_unreadable";return ht("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let o=s.token,i=new AbortController,a=setTimeout(()=>i.abort(),t*1e3),l,c;try{let _=!1,h=async()=>{o=await NR({...s,token:o},i.signal),_=!0};$d(o)&&await h();let g=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${o.access_token}`,Accept:"application/json"},signal:i.signal});l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status),l.status===401&&!_&&o.refresh_token&&(await h(),l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status))}catch(_){let h=_ 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(_.message)?_.message:"request_failed",g=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),E=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":g?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return ht("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>bo(ht("kimi",_,h,h,"kimi_http",[],g),c,[o.access_token]);if(l.status===401)return d("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return d("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let _=XN(l.headers);return d("reader_throttled","HTTP 429 from Kimi usage endpoint",_)}if(l.status!==200)return d("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let u;try{u=JSON.parse(c)}catch{return ht("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ht("kimi","provider_unavailable","malformed_response","response was not an object");let f=[],m=new Set;function p(_){let h=String(_.bucket_id),g=h,E=2;for(;m.has(h);)h=`${g}-${E}`,E++;m.add(h),_.bucket_id=h,f.push(At(_))}if(Array.isArray(u.limits))for(let _ of u.limits){if(!_||typeof _!="object")continue;let h=_.window,g=_.detail;if(!h||typeof h!="object"||!g||typeof g!="object")continue;let E=0;if(h.timeUnit==="TIME_UNIT_MINUTE")E=Number(h.duration);else if(h.timeUnit==="TIME_UNIT_HOUR")E=Number(h.duration)*60;else if(h.timeUnit==="TIME_UNIT_DAY")E=Number(h.duration)*1440;else if(h.timeUnit==="TIME_UNIT_WEEK")E=Number(h.duration)*10080;else if(h.timeUnit==="TIME_UNIT_MONTH")E=Number(h.duration)*43200;else continue;let y=HN(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=LR(g);if(!w)continue;let{used:S,limit:I,remaining:b}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:at(S/I),remaining_fraction:at(b/I),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=LR(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:at(_.used/_.limit),remaining_fraction:at(_.remaining/_.limit),resets_at_iso:u.usage.resetTime,raw_value:_.used,raw_scale:"count"})}if(u.usages&&typeof u.usages=="object"){let _=[{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:g,type:E}of _){let y=u.usages[h];if(!y||typeof y!="object"||y.used_ratio==null||y.used_ratio===""||typeof y.used_ratio=="boolean")continue;let T=Number(y.used_ratio);!Number.isFinite(T)||T<0||m.has(g)||(m.add(g),f.push(At({bucket_id:g,window_type:E,used_fraction:at(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Ge("kimi","ok",{source:"kimi_http",buckets:f})}var CR=x(()=>{"use strict";Hn();RR();Hn()});async function OR(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(d=>typeof d!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let d of e)if(!Pd.includes(d))return{status:"error",error:`unknown provider: ${d} (valid targets: ${Pd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??TG;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 i=Object.entries({codex:yR,agy:JN,claude:aR,kimi:xR}).filter(([d])=>s.has(d)).map(async([,d])=>{let u=[],f=await d({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:p=>u.push(p)}:{}}),m=t.includeRaw?{...f,raw_responses:u}:f;return m&&t.onReading?.(m),m}),a=await Promise.allSettled(i),l=a.find(d=>d.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(d=>d.status==="fulfilled").map(d=>d.value).filter(Boolean)}}var Pd,TG,DR=x(()=>{"use strict";KN();lR();ER();CR();Pd=["all","codex","agy","claude","kimi"],TG=15});var UR={};me(UR,{runRatelimit:()=>AG});function M_(t){return typeof t=="object"&&t!==null}function wG(t){return(0,We.formatPercent)(typeof t=="number"?t:null)}function vG(t,e){let n=typeof e.bucket_id=="string"&&e.bucket_id!==""?e.bucket_id:"unknown-bucket";return n==="session"?n="5h":n==="week-all-models"?n="weekly":n.startsWith("week-scoped-")&&(n=`weekly-${n.slice(12)}`),t!==""&&!n.startsWith(`${t}-`)&&(n=`${t}-${n}`),(0,We.escapeCell)(n)}function IG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,We.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,We.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=SG[typeof e.window_type=="string"?e.window_type:""],s!==void 0&&(r=Math.min(1,Math.max(0,1-o/s))))}r!==null&&(n=`${(0,We.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,We.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,We.formatDuration)(f,{maxUnit:"d",style:"compact"})}`}}let a=[];e.is_exhausted===!0&&a.push("[EXHAUSTED]"),e.allowed===!1&&a.push("allowed=false"),e.limit_reached===!0&&a.push("limit_reached");let l=[vG(t,e),`${(0,We.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${wG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function bG(t){let e=typeof t.provider=="string"&&t.provider!==""?t.provider:"unknown",n=typeof t.status=="string"?t.status:"unknown",r=typeof t.source=="string"&&t.source!==""?t.source:"unknown source",s=typeof t.reason=="string"?t.reason:"",o=`${e}: ${n} (${r})`;n!=="ok"&&typeof t.provider_message=="string"&&t.provider_message.trim()?o=`${e}: ${(0,We.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&PR.has(s)?(o=`${e}: not installed/configured (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n!=="ok"&&(o+=` -- ${s!==""?s:"no reason given"}`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`),n==="provider_unavailable"&&s!=="oauth_refresh_failed"&&!/^(credentials_|config_|credential_storage_|refresh_)/.test(s)&&(o+=` (${e} server-side, not lmctl \u2014 try again later)`));let i=typeof t.plan_type=="string"?t.plan_type.trim():"";i&&!["?","unknown","null","n/a"].includes(i.toLowerCase())&&(o+=` (${(0,We.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(M_).map(d=>IG(a,d)):[],c=[];if(M_(t.credits)){let d=t.credits,u=[];typeof d.has_credits=="boolean"&&u.push(`has_credits=${d.has_credits}`),d.unlimited===!0&&u.push("unlimited"),d.balance!==void 0&&d.balance!==null&&u.push(`balance=${String(d.balance)}`),c.push(` credits: ${u.length>0?u.join(" "):"present"}`)}if(M_(t.spend_control)){let d=t.spend_control,u=` spend control: reached=${d.reached===!0}`;d.used_usd!==void 0&&d.used_usd!==null&&(u+=` used=$${String(d.used_usd)}`),d.limit_usd!==void 0&&d.limit_usd!==null&&(u+=` limit=$${String(d.limit_usd)}`),d.individual_limit!==void 0&&d.individual_limit!==null&&(u+=` individual_limit=${String(d.individual_limit)}`),c.push(u)}return{head:o,bucketRows:l,footers:c}}function kG(t){let e=bG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,We.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,We.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2644
+ `});function at(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 En(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return at(e==="percent"?n/100:n)}function jN(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 WN(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function HN(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 BN(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 bo(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 iq)n=n.replace(r,"***REDACTED***");return n}function At(t){let e=at(t.used_fraction),n=at(t.remaining_fraction),r=t.resets_at==null?WN(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?jN(r):jN(WN(t.resets_at_iso)),o={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:at(1-n)),remaining_fraction:n??(e===null?null:at(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 i of["raw_value","raw_scale","limit_name","metered_feature","allowed","limit_reached"])t[i]!=null&&(o[i]=t[i]);return o}function Ge(t,e,n={}){let r={$schema:oq,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 ht(t,e,n,r,s,o=[],i){return Ge(t,e,{source:s??null,reason:n,...r==null?{}:{detail:bo(r,o)},...i==null?{}:{retry_after_seconds:i}})}function XN(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 Nt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=bo(n,[...r].filter(i=>typeof i=="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:o}),t.debug?.(`[debug] ${e}${s===void 0?"":` HTTP ${s}`} raw response:
2645
+ ${o}`)}function Io(t,e,n=[]){let r;try{let o=JSON.parse(e);r=typeof o?.error=="string"?o.error:o?.error?.message??o?.message??o?.detail}catch{/^\s*[<{[]/.test(e)||(r=e.trim())}if(typeof r!="string"||!r.trim())return t;let s=bo(r,n);return{...t,detail:s,provider_message:s}}var oq,iq,Hn=x(()=>{"use strict";oq="https://lmctl.com/schemas/lmratelimit-v1.json";iq=[/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 aq}from"node:child_process";import{readdirSync as lq,readFileSync as cq}from"node:fs";import{join as dq}from"node:path";function Eq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function Tq(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 wq(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 vq(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 o=wq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=at(i/100);n.push(At({bucket_id:`${Tq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:at(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:i,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 ha(t,e,n){return ht("agy","provider_unavailable",t,e,"agy_cli_print")}function Sq(t,e,n={}){try{let r=_q(Math.max(t,60)*1e3,Eq(e));if(Nt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return ha("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return ha("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return ha("cli_failed",r.error.message,t);let s=vq(r.stdout??"");return s.length===0?ha("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ge("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return ha("cli_failed",r instanceof Error?r.message:String(r),t)}}function VN(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 o=Number(n.port);return!Number.isInteger(o)||o<1||o>65535||n.port!==String(o)?null:`${r==="::1"||r==="[::1]"?"[::1]":r}:${o}`}function bq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=VN(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[qN],t[GN],-1);try{for(let s of lq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of cq(dq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[qN],o[GN],Number(s))}catch{}}catch{}return e}function Iq(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 o=s,i=typeof o.displayName=="string"?o.displayName:null;if(Array.isArray(o.buckets))for(let a of o.buckets){if(typeof a!="object"||a===null)continue;let l=a,c=En(l.remainingFraction,"fraction");r.push(At({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:BN(l.window),used_fraction:c===null?null:at(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,o)=>String(s.group_name??"").localeCompare(String(o.group_name??""))||String(s.bucket_id??"").localeCompare(String(o.bucket_id??""))),Ge("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function kq(t,e,n={}){try{let s=yq(e).map(([a,l,c])=>[VN(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ht("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let o=[],i=Date.now()+t*1e3;for(let[a,l,c]of s){let d=i-Date.now();if(d<=0){o.push("overall connect deadline exceeded");break}try{let u=await gq(`http://${a}${uq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(Nt(n,"agy_connect_rpc",u.body,[l],u.status),u.status===200){let f;try{f=JSON.parse(u.body)}catch{o.push(`pid=${c}: unparseable response`);continue}let m=Iq(f);if(m)return m;o.push(`pid=${c}: response had no quota groups`)}else u.status===401||u.status===403?o.push(`pid=${c}: HTTP ${u.status} unauthorized`):o.push(`pid=${c}: HTTP ${u.status}`)}catch(u){o.push(`pid=${c}: ${u instanceof Error?u.message:String(u)}`)}}return ht("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${o.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return ht("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function JN(t){let e=await kq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Sq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ht("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 qN,GN,uq,fq,mq,pq,hq,_q,gq,yq,KN=x(()=>{"use strict";Hn();Hn();qN="ANTIGRAVITY_LS_ADDRESS",GN="ANTIGRAVITY_CSRF_TOKEN",uq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",fq=["-p","/usage"],mq=(t,e)=>{let n=aq("agy",fq,{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}},pq=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()}},hq=t=>bq(t),_q=mq,gq=pq,yq=hq});import{randomUUID as QN}from"node:crypto";import{mkdirSync as Aq,readFileSync as v_,realpathSync as Nq,renameSync as Rq,rmSync as S_,statSync as YN,writeFileSync as ZN}from"node:fs";import{homedir as Lq}from"node:os";import{join as b_}from"node:path";import{setTimeout as xq}from"node:timers/promises";function A_(t){return b_(t.CLAUDE_CONFIG_DIR??b_(t.HOME??Lq(),".claude"),".credentials.json")}function I_(t){let e=JSON.parse(v_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function k_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function eR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=A_(t);try{let n=k_(I_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Nq(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 Od(t){return typeof t.expiresAt=="number"&&Date.now()+Dq>=t.expiresAt}function zN(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Mq(t,e){let n=`${t}.lmctl-refresh.lock`,r=b_(n,"owner.json"),s=QN();for(;;){e.throwIfAborted();try{Aq(n,{mode:448});try{ZN(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw S_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(v_(r,"utf8")).token===s&&S_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(v_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-YN(n).mtimeMs>6e4}catch{try{i=Date.now()-YN(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await xq(50,void 0,{signal:e})}}}async function tR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Mq(t.path,e);try{let r=k_(I_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!zN(r,t.oauth)&&!Od(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Oq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:Cq})});if(!s.ok)throw new Error(`refresh_http_${s.status}`);let o=await s.json();if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||typeof o.expires_in!="number"||!Number.isFinite(o.expires_in)||o.expires_in<=0||o.refresh_token!==void 0&&(typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token)))throw new Error("invalid_refresh_response");let i=Math.floor(Date.now()+o.expires_in*1e3);if(!Number.isSafeInteger(i)||i<=Date.now())throw new Error("invalid_refresh_response");let a=I_(t.path),l=k_(a);if(!l||!zN(r,l)){if(l&&typeof l.accessToken=="string"&&!Od(l))return l;throw new Error("credentials_changed")}let c={...l,accessToken:o.access_token,refreshToken:o.refresh_token??r.refreshToken,expiresAt:i,...typeof o.scope=="string"?{scopes:o.scope.split(/\s+/).filter(Boolean)}:{}},d=`${t.path}.${QN()}.tmp`;try{ZN(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Rq(d,t.path)}finally{S_(d,{force:!0})}return c}finally{n()}}var Cq,Oq,Dq,nR=x(()=>{"use strict";Cq="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Oq="https://console.anthropic.com/v1/oauth/token",Dq=3e5});import{spawnSync as oR}from"node:child_process";function Uq(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 iR(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Fq(t){try{let e=oR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:iR(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Vt(t,e,n,r="claude_oauth_api",s){return ht("claude",t,e,n,r,void 0,s)}function jq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function Wq(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 o=new Date(Date.UTC(new Date().getUTCFullYear(),n,Number(e[2]),r,s));return Number.isFinite(o.getTime())?Math.floor(o.getTime()/1e3):void 0}function Bq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=Hq.exec(n.trim());if(!r)continue;let s=r[1].trim(),i=s.toLowerCase()==="session",a=/\(([^)]+)\)/.exec(s)?.[1]?.trim()??s,l=i?"session":a.toLowerCase()==="all models"?"week-all-models":`week-scoped-${a}`,c=i?"five_hour":"weekly";e.push(At({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:En(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:Wq(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 Xq(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 o=/^\s+(\d+)%\s+of your usage\s+(.+?)\s*$/.exec(r);if(!o||!n)continue;let i=o[2].toLowerCase(),a=i.includes(">150k context")?"pct_high_context":i.includes("active for 8+ hours")?"pct_long_sessions":i.includes("subagent-heavy")?"pct_subagent_heavy":i.includes("ran in parallel")?"pct_parallel_sessions":void 0;a&&(n[a]=Number(o[1]))}return e}function qq(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 o=s&&n?.limit&&typeof n.limit=="object"?n.limit:{},i=s&&n?.used&&typeof n.used=="object"?n.used:{},a=g=>{let E=typeof g=="number"?g:typeof g=="string"&&g.trim()!==""?Number(g):NaN;return Number.isSafeInteger(E)&&E>=0&&E<=9?E:void 0},l=g=>{let E=typeof g=="number"?g:typeof g=="string"&&g.trim()!==""?Number(g):NaN;return Number.isFinite(E)?E:void 0},c=a(o.exponent??r?.decimal_places??2),d=a(i.exponent??r?.decimal_places??2),u=s?o.amount_minor:r?.monthly_limit,f=s?i.amount_minor:r?.used_credits,m=(g,E,y)=>E===void 0||y!==void 0&&y!=="USD"||l(g)===void 0?void 0:(l(g)/10**E).toFixed(2),p=En(s?n?.percent:r?.utilization,"percent"),_=s?n?.spend_limit_reached??r?.spend_limit_reached:r?.spend_limit_reached,h={limit_usd:m(u,c,o.currency??r?.currency),used_usd:m(f,d,i.currency??r?.currency),remaining_fraction:p==null?void 0:Math.max(0,1-p),resets_at_iso:s?n?.resets_at:void 0,...typeof _=="boolean"?{reached:_}:{}};return Object.values(h).every(g=>g==null)?void 0:h}async function sR(t,e,n,r={}){try{let s=oR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:iR(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";Nt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Bq(o);if(!i.length)return;let a=Xq(o);return Ge("claude",Ve.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:i,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function aR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=eR(e);if(s.error==="not_claude_ai_subscriber")return Vt(Ve.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Vt(Ve.unavailable,"credentials_missing",`credentials file not found: ${A_(e)}`);if(s.error)return Vt(Ve.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(rR))return Vt(Ve.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${rR} scope required by the usage endpoint`);let a=new AbortController,l=setTimeout(()=>a.abort(),t*1e3),c,d;try{let g=!1,E=async()=>{try{o=await tR({...s,oauth:o},a.signal),g=!0}catch(T){let w=T instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(T.message)?T.message:"refresh_failed";if(w==="refresh_http_429")return Vt(Ve.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Vt(Ve.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 S=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Vt(S?Ve.expired:Ve.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${S?"; renew Claude login":"; try again later"}`)}};if(Od(o)){let T=await E();if(T)return T}let y=()=>fetch(`${$q}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":Pq,"Content-Type":"application/json","User-Agent":Fq(e)},signal:a.signal});if(c=await y(),d=await c.text(),Nt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status),c.status===401&&!g&&s.path&&o.refreshToken){let T=await E();if(T)return T;c=await y(),d=await c.text(),Nt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await sR(o,e,t,{debug:n,onRawResponse:r});return E||Vt(Ve.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>Io(Vt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ve.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ve.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=jq(c.headers),E=await sR(o,e,t,{debug:n,onRawResponse:r});return E||u(Ve.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Ve.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Vt(Ve.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Vt(Ve.unavailable,"malformed_response","response was not an object");let m=f,p=Array.isArray(m.limits)?m.limits:[],_=p.length?p.flatMap(g=>{if(!g||typeof g!="object")return[];let E=g.kind,y=Uq(E==="session"?"session":E),T=g.scope?.model?.display_name,w=E==="session"?"session":E==="weekly_all"?"week-all-models":`week-scoped-${T||E}`;return[At({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:En(g.percent,"percent"),resets_at_iso:g.resets_at,raw_value:g.percent,raw_scale:"used_percent"})]}):["five_hour","seven_day"].flatMap(g=>{let E=m[g];return!E||typeof E!="object"?[]:[At({bucket_id:g==="five_hour"?"session":"week-all-models",group_name:g==="five_hour"?"session":"weekly",window_type:g==="five_hour"?"five_hour":"weekly",used_fraction:En(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=qq(m.spend,m.extra_usage);return Ge("claude",Ve.ok,{source:"claude_oauth_api",account_id:null,plan_type:o.subscriptionType??o.rateLimitTier??null,ordinary_usage_allowed:null,buckets:_.sort((g,E)=>String(g.window_type).localeCompare(String(E.window_type))||String(g.bucket_id).localeCompare(String(E.bucket_id))),...h?{spend_control:h}:{}})}var $q,Pq,rR,Ve,Hq,lR=x(()=>{"use strict";Hn();nR();Hn();$q="https://api.anthropic.com",Pq="oauth-2025-04-20",rR="user:profile";Ve={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};Hq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as uR}from"node:crypto";import{mkdirSync as Gq,readFileSync as N_,realpathSync as Vq,renameSync as Jq,rmSync as R_,statSync as cR,writeFileSync as fR}from"node:fs";import{homedir as Kq}from"node:os";import{join as L_}from"node:path";import{setTimeout as Yq}from"node:timers/promises";function _a(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function C_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||L_(t.HOME||Kq(),".codex");return L_(e,"auth.json")}function x_(t){let e=_a(JSON.parse(N_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function mR(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=C_(t);try{let n=_a(x_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:Vq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function dR(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 Zq(t,e){let n=`${t}.lmctl-refresh.lock`,r=L_(n,"owner.json"),s=uR();for(;;){e.throwIfAborted();try{Gq(n,{mode:448});try{fR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw R_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(N_(r,"utf8")).token===s&&R_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(N_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-cR(n).mtimeMs>6e4}catch{try{i=Date.now()-cR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Yq(50,void 0,{signal:e})}}}async function pR(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await Zq(t.path,e);try{let r=x_(t.path),s=_a(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!dR(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 o=await fetch(zq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:Qq})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=_a(await o.json());if(!i||typeof i.access_token!="string"||!/^\S+$/.test(i.access_token)||i.refresh_token!==void 0&&(typeof i.refresh_token!="string"||!/^\S+$/.test(i.refresh_token))||i.id_token!==void 0&&(typeof i.id_token!="string"||!/^\S+$/.test(i.id_token)))throw new Error("invalid_refresh_response");let a=x_(t.path),l=_a(a.tokens);if(!l||!dR(s,l)){if(l&&typeof l.access_token=="string")return l;throw new Error("credentials_changed")}let c={...l,access_token:i.access_token,...i.refresh_token===void 0?{}:{refresh_token:i.refresh_token},...i.id_token===void 0?{}:{id_token:i.id_token}},d={...a,tokens:c,last_refresh:new Date().toISOString()},u=`${t.path}.${uR()}.tmp`;try{fR(u,JSON.stringify(d),{flag:"wx",mode:384}),Jq(u,t.path)}finally{R_(u,{force:!0})}return c}finally{n()}}var zq,Qq,hR=x(()=>{"use strict";zq="https://auth.openai.com/oauth/token",Qq="app_EMoamEEZ73f0CkXaXp7hrann"});function Tn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _R(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 gR(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function nG(t){if(Tn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function rG(t){let e=[],n=Tn(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 i of["primary_window","secondary_window"]){let a=Tn(n[i])?n[i]:void 0;if(!a)continue;let l=_R(a.limit_window_seconds);e.push(At({bucket_id:`codex-${gR(l)}`,group_name:"codex",window_type:l,used_fraction:En(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 o=Array.isArray(t.additional_rate_limits)?t.additional_rate_limits:[];for(let i of o){if(!Tn(i))continue;let a=Tn(i.rate_limit)?i.rate_limit:{},l=typeof i.limit_name=="string"?i.limit_name:void 0,c=typeof i.metered_feature=="string"?i.metered_feature:void 0,d=c||l||"additional",u=typeof a.allowed=="boolean"?a.allowed:void 0,f=typeof a.limit_reached=="boolean"?a.limit_reached:void 0;for(let m of["primary_window","secondary_window"]){let p=Tn(a[m])?a[m]:void 0;if(!p)continue;let _=_R(p.limit_window_seconds);e.push(At({bucket_id:`${d}-${gR(_)}`,group_name:l||d,window_type:_,used_fraction:En(p.used_percent,"percent"),resets_at:p.reset_at,raw_value:p.used_percent,raw_scale:"used_percent",...l===void 0?{}:{limit_name:l},...c===void 0?{}:{metered_feature:c},...u===void 0?{}:{allowed:u},...f===void 0?{}:{limit_reached:f}}))}}return e.sort((i,a)=>String(i.group_name??"").localeCompare(String(a.group_name??""))||String(i.bucket_id).localeCompare(String(a.bucket_id)))}function sG(t){let e=Tn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Tn(t.spend_control)?t.spend_control:void 0,s=Tn(t.credits)?t.credits:void 0;return Ge("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:rG(t),...s?{credits:nG(s)}:{},...r?{spend_control:r}:{}})}async function yR(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=mR(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Ge("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${C_(n)} (or $CODEX_ACCESS_TOKEN)`});let a=new AbortController,l=setTimeout(()=>a.abort(),Math.ceil(e*1e3)),c=i.access_token,d=new Set([i.access_token,i.refresh_token,i.id_token].filter(u=>typeof u=="string"&&!!u));try{let u=typeof i.account_id=="string"?i.account_id:void 0,f=typeof i.refresh_token=="string"?i.refresh_token:void 0,m=typeof i.id_token=="string"?i.id_token:void 0,p="",_=()=>[...d],h=(S,b)=>Io(Ge("codex",S,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let S=await pR({...o,tokens:{...i,refresh_token:f}},a.signal);typeof S.access_token=="string"&&(d.add(S.access_token),c=S.access_token),u=typeof S.account_id=="string"?S.account_id:u,typeof S.refresh_token=="string"&&(d.add(S.refresh_token),f=S.refresh_token),typeof S.id_token=="string"&&(d.add(S.id_token),m=S.id_token),g=!0;return}catch(S){let b=S instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(S.message)?S.message:"refresh_failed",I=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return Ge("codex",I?"auth_expired":"provider_unavailable",{source:"codex_http",reason:I?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${b})${I?"; renew Codex login":"; try again later"}`})}},y=()=>{let S={Authorization:`Bearer ${c}`,"User-Agent":tG,"Content-Type":"application/json",Accept:"application/json"};u&&(S["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||eG).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:S,signal:a.signal})},T=await y();if(p=await T.text(),Nt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status),T.status===401&&o.path&&f){let S=await E();if(S)return S;T=await y(),p=await T.text(),Nt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status)}if(T.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(T.status===429){let S=T.headers.get("retry-after"),b=S===null?void 0:Number.parseInt(S,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...b!==void 0&&Number.isFinite(b)&&b>=0?{retry_after_seconds:b}:{}})}if(!T.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${T.status}`,detail:"codex usage endpoint returned an unexpected status"});let w;try{w=JSON.parse(p)}catch(S){return Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:bo(String(S),d)})}return Tn(w)?sG(w):Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(u){let f=u instanceof Error?`${u.name}: ${u.message}`:String(u);return Ge("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:bo(f,d)})}finally{clearTimeout(l)}}var eG,tG,ER=x(()=>{"use strict";Hn();hR();Hn();eG="https://chatgpt.com/backend-api",tG="codex-cli"});import{createHash as oG,randomUUID as iG}from"node:crypto";import{readFileSync as bR,openSync as aG,fsyncSync as lG,closeSync as cG,mkdirSync as TR,writeFileSync as IR,renameSync as dG,rmSync as uG,rmdirSync as fG,statSync as O_,utimesSync as mG}from"node:fs";import{homedir as pG}from"node:os";import{basename as hG,dirname as _G,join as Dd}from"node:path";import{setTimeout as kR}from"node:timers/promises";function yG(t){let e;try{e=bR(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 o=/^\s*\[providers\.(?:"managed:kimi-code"|'managed:kimi-code')(\.oauth)?\]\s*(?:#.*)?$/.exec(s);if(o){r=o[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 i=/^\s*(base_url|oauth_host|storage|key)\s*=\s*("(?:[^"\\]|\\.)*"|'[^']*')\s*(?:#.*)?$/.exec(s);if(!i&&/^\s*(base_url|oauth_host|storage|key)\s*=/.test(s))throw new Error("config_malformed");if(i)try{n[r+i[1]]=i[2].startsWith('"')?JSON.parse(i[2]):i[2].slice(1,-1)}catch{throw new Error("config_malformed")}}return n}function Md(t){let e;try{e=JSON.parse(bR(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 AR(t){let e=t.KIMI_CODE_HOME??Dd(t.HOME??pG(),".kimi-code"),n=yG(t.KIMI_CODE_CONFIG_PATH??Dd(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=vR(t.KIMI_CODE_BASE_URL??n.base_url??wR),o=vR(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?D_:n["oauth.oauth_host"]??D_)),i=s===wR&&o===D_?"kimi-code":`kimi-code-env-${oG("sha256").update(JSON.stringify({oauthHost:o,baseUrl:s})).digest("hex").slice(0,16)}`;if(!t.KIMI_CREDENTIALS_PATH&&!r&&n["oauth.key"]===`oauth/${i}`&&n["oauth.storage"]&&n["oauth.storage"]!=="file")throw new Error("credential_storage_unsupported");let a=t.KIMI_CREDENTIALS_PATH??Dd(e,"credentials",`${i}.json`),l=Md(a),c=a,d=hG(a,".json");return{home:e,path:c,lockTarget:Dd(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function $d(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 SR(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 EG(t,e){TR(_G(t),{recursive:!0}),IR(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{TR(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-O_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await kR(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=O_(n),s=()=>{let i;try{i=O_(n)}catch{throw new Error("refresh_lock_lost")}if(i.ino!==r.ino||i.dev!==r.dev)throw new Error("refresh_lock_lost")},o=setInterval(()=>{try{s();let i=new Date;mG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),fG(n)}catch{}}}}async function NR(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await EG(t.lockTarget,e);try{let r=Md(t.path);if(!SR(r,t.token)&&!$d(r))return r;if(typeof r.refresh_token!="string"||!r.refresh_token)throw new Error("no_refresh_token");let s;for(let u=0;u<3;u++){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:gG,grant_type:"refresh_token",refresh_token:r.refresh_token})}),![429,500,502,503,504].includes(s.status)||u===2)break;await s.body?.cancel()}catch{if(e.aborted||u===2)throw new Error("refresh_request_failed")}await kR(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Md(t.path);if(u.refresh_token!==r.refresh_token)return u}catch{}throw new Error(`refresh_http_${s.status}`)}let o=await s.json(),i=Number(o?.expires_in);if(!o||typeof o.access_token!="string"||!/^\S+$/.test(o.access_token)||typeof o.refresh_token!="string"||!/^\S+$/.test(o.refresh_token)||!Number.isFinite(i)||i<=0)throw new Error("invalid_refresh_response");let a=Math.floor(Date.now()/1e3)+i;if(!Number.isSafeInteger(a))throw new Error("invalid_refresh_response");n.assertOwned();let l=Md(t.path);if(!SR(l,r)){if(!$d(l))return l;throw new Error("credentials_changed")}let c={...l,access_token:o.access_token,refresh_token:o.refresh_token,expires_at:a,expires_in:i,...typeof o.scope=="string"?{scope:o.scope}:{},...typeof o.token_type=="string"?{token_type:o.token_type}:{}},d=`${t.path}.${iG()}.tmp`;try{let u=aG(d,"wx",384);try{IR(u,JSON.stringify(c,null,2)+`
2646
+ `),lG(u)}finally{cG(u)}n.assertOwned(),dG(d,t.path)}finally{uG(d,{force:!0})}return c}finally{n.release()}}var wR,D_,gG,vR,RR=x(()=>{"use strict";wR="https://api.kimi.com/coding/v1",D_="https://auth.kimi.com",gG="17e5f671-d194-4dfb-9706-5516cb48c098",vR=t=>t.trim().replace(/\/+$/,"")});function LR(t){let e=i=>{if(typeof i!="number"&&typeof i!="string"||typeof i=="string"&&i.trim()==="")return;let a=Number(i);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 o=r??n-s;return{used:o,limit:n,remaining:Math.max(0,n-o)}}async function xR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=AR(e)}catch(_){let h=_ instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(_.message)?_.message:"credentials_unreadable";return ht("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let o=s.token,i=new AbortController,a=setTimeout(()=>i.abort(),t*1e3),l,c;try{let _=!1,h=async()=>{o=await NR({...s,token:o},i.signal),_=!0};$d(o)&&await h();let g=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${o.access_token}`,Accept:"application/json"},signal:i.signal});l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status),l.status===401&&!_&&o.refresh_token&&(await h(),l=await g(),c=await l.text(),Nt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status))}catch(_){let h=_ 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(_.message)?_.message:"request_failed",g=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),E=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":g?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return ht("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Io(ht("kimi",_,h,h,"kimi_http",[],g),c,[o.access_token]);if(l.status===401)return d("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return d("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let _=XN(l.headers);return d("reader_throttled","HTTP 429 from Kimi usage endpoint",_)}if(l.status!==200)return d("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let u;try{u=JSON.parse(c)}catch{return ht("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ht("kimi","provider_unavailable","malformed_response","response was not an object");let f=[],m=new Set;function p(_){let h=String(_.bucket_id),g=h,E=2;for(;m.has(h);)h=`${g}-${E}`,E++;m.add(h),_.bucket_id=h,f.push(At(_))}if(Array.isArray(u.limits))for(let _ of u.limits){if(!_||typeof _!="object")continue;let h=_.window,g=_.detail;if(!h||typeof h!="object"||!g||typeof g!="object")continue;let E=0;if(h.timeUnit==="TIME_UNIT_MINUTE")E=Number(h.duration);else if(h.timeUnit==="TIME_UNIT_HOUR")E=Number(h.duration)*60;else if(h.timeUnit==="TIME_UNIT_DAY")E=Number(h.duration)*1440;else if(h.timeUnit==="TIME_UNIT_WEEK")E=Number(h.duration)*10080;else if(h.timeUnit==="TIME_UNIT_MONTH")E=Number(h.duration)*43200;else continue;let y=HN(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=LR(g);if(!w)continue;let{used:S,limit:b,remaining:I}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:at(S/b),remaining_fraction:at(I/b),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=LR(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:at(_.used/_.limit),remaining_fraction:at(_.remaining/_.limit),resets_at_iso:u.usage.resetTime,raw_value:_.used,raw_scale:"count"})}if(u.usages&&typeof u.usages=="object"){let _=[{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:g,type:E}of _){let y=u.usages[h];if(!y||typeof y!="object"||y.used_ratio==null||y.used_ratio===""||typeof y.used_ratio=="boolean")continue;let T=Number(y.used_ratio);!Number.isFinite(T)||T<0||m.has(g)||(m.add(g),f.push(At({bucket_id:g,window_type:E,used_fraction:at(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Ge("kimi","ok",{source:"kimi_http",buckets:f})}var CR=x(()=>{"use strict";Hn();RR();Hn()});async function OR(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(d=>typeof d!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let d of e)if(!Pd.includes(d))return{status:"error",error:`unknown provider: ${d} (valid targets: ${Pd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??TG;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 i=Object.entries({codex:yR,agy:JN,claude:aR,kimi:xR}).filter(([d])=>s.has(d)).map(async([,d])=>{let u=[],f=await d({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:p=>u.push(p)}:{}}),m=t.includeRaw?{...f,raw_responses:u}:f;return m&&t.onReading?.(m),m}),a=await Promise.allSettled(i),l=a.find(d=>d.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(d=>d.status==="fulfilled").map(d=>d.value).filter(Boolean)}}var Pd,TG,DR=x(()=>{"use strict";KN();lR();ER();CR();Pd=["all","codex","agy","claude","kimi"],TG=15});var UR={};me(UR,{runRatelimit:()=>AG});function M_(t){return typeof t=="object"&&t!==null}function wG(t){return(0,We.formatPercent)(typeof t=="number"?t:null)}function vG(t,e){let n=typeof e.bucket_id=="string"&&e.bucket_id!==""?e.bucket_id:"unknown-bucket";return n==="session"?n="5h":n==="week-all-models"?n="weekly":n.startsWith("week-scoped-")&&(n=`weekly-${n.slice(12)}`),t!==""&&!n.startsWith(`${t}-`)&&(n=`${t}-${n}`),(0,We.escapeCell)(n)}function bG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,We.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,We.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=SG[typeof e.window_type=="string"?e.window_type:""],s!==void 0&&(r=Math.min(1,Math.max(0,1-o/s))))}r!==null&&(n=`${(0,We.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,We.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,We.formatDuration)(f,{maxUnit:"d",style:"compact"})}`}}let a=[];e.is_exhausted===!0&&a.push("[EXHAUSTED]"),e.allowed===!1&&a.push("allowed=false"),e.limit_reached===!0&&a.push("limit_reached");let l=[vG(t,e),`${(0,We.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${wG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function IG(t){let e=typeof t.provider=="string"&&t.provider!==""?t.provider:"unknown",n=typeof t.status=="string"?t.status:"unknown",r=typeof t.source=="string"&&t.source!==""?t.source:"unknown source",s=typeof t.reason=="string"?t.reason:"",o=`${e}: ${n} (${r})`;n!=="ok"&&typeof t.provider_message=="string"&&t.provider_message.trim()?o=`${e}: ${(0,We.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&PR.has(s)?(o=`${e}: not installed/configured (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n!=="ok"&&(o+=` -- ${s!==""?s:"no reason given"}`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`),n==="provider_unavailable"&&s!=="oauth_refresh_failed"&&!/^(credentials_|config_|credential_storage_|refresh_)/.test(s)&&(o+=` (${e} server-side, not lmctl \u2014 try again later)`));let i=typeof t.plan_type=="string"?t.plan_type.trim():"";i&&!["?","unknown","null","n/a"].includes(i.toLowerCase())&&(o+=` (${(0,We.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(M_).map(d=>bG(a,d)):[],c=[];if(M_(t.credits)){let d=t.credits,u=[];typeof d.has_credits=="boolean"&&u.push(`has_credits=${d.has_credits}`),d.unlimited===!0&&u.push("unlimited"),d.balance!==void 0&&d.balance!==null&&u.push(`balance=${String(d.balance)}`),c.push(` credits: ${u.length>0?u.join(" "):"present"}`)}if(M_(t.spend_control)){let d=t.spend_control,u=` spend control: reached=${d.reached===!0}`;d.used_usd!==void 0&&d.used_usd!==null&&(u+=` used=$${String(d.used_usd)}`),d.limit_usd!==void 0&&d.limit_usd!==null&&(u+=` limit=$${String(d.limit_usd)}`),d.individual_limit!==void 0&&d.individual_limit!==null&&(u+=` individual_limit=${String(d.individual_limit)}`),c.push(u)}return{head:o,bucketRows:l,footers:c}}function kG(t){let e=IG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,We.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,We.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2645
2647
  `)}function $_(t,e){return t.stderr.write(`error: ${e}
2646
2648
  ${$R}
2647
2649
  `),2}async function AG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${$R}
@@ -2652,8 +2654,8 @@ ${$R}
2652
2654
  `)}:{}});if(d.status==="error")return e.stderr.write(`error: ${d.error}
2653
2655
  `),1;let u=d.readings;return r?(te(e,{readings:u}),0):(l===0&&e.stdout.write(`rate-limit: no readings returned.
2654
2656
  `),0)}var We,$R,PR,MR,SG,FR=x(()=>{"use strict";re();We=Ft(Ct(),1);le();DR();$R=["usage: lmctl ratelimit [provider ...] [--json] [--debug] [--timeout <seconds>]",""," Queries provider subscription rate limits in REAL TIME via the TypeScript"," provider readers -- stateless: nothing is read from or written to any"," database.",""," Providers: all (default), codex, agy, claude, kimi. Multiple allowed.",""," --debug Print raw quota responses to stderr before parsing."," Credentials are redacted; JSON stdout stays clean."," --timeout <seconds> Per-provider reader timeout (default 15).",' --json Emit {"readings": [...]} in the lmratelimit-v1 schema'," with every raw field preserved verbatim -- the same"," shape lmbee's collector parses. raw_responses carries"," source, HTTP status and original response text"," (credentials redacted). Unknown future"," fields pass through.","",' Prints a "querying ..." note on stderr before the readers run.'].join(`
2655
- `),PR=new Set(["agy_not_found","credentials_missing"]),MR=Pd;SG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});le();Nn();import{pathToFileURL as NG}from"node:url";import{execFileSync as kD}from"node:child_process";import{readFileSync as AD}from"node:fs";import{join as ND}from"node:path";import{fileURLToPath as RD}from"node:url";function tT(){return RD(new URL("../..",import.meta.url))}function qu(t=tT()){try{let e=JSON.parse(AD(ND(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function oi(t,e){try{return kD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function ii(t=tT()){let e=qu(t);if(oi(t,["rev-parse","--is-inside-work-tree"])!=="true"||oi(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=oi(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=oi(t,["describe","--tags","--exact-match","HEAD"]),s=oi(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}re();import{mkdirSync as dM,readFileSync as uM,renameSync as fM,writeFileSync as mM}from"node:fs";import{homedir as pM}from"node:os";import{dirname as hM,join as _M}from"node:path";function fT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function lM(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function cM(t,e){return!lM(t)||fT(t)?null:`${e} must use https://: ${t}`}async function mT(t,e){let n=cM(t,e.description);if(n!==null||!fT(t))throw new Error(n??`${e.description} must use https://: ${t}`);let r=e.timeoutMs??15e3,s=new AbortController,o=setTimeout(()=>s.abort(),r);try{let i;try{i=await fetch(t,{signal:s.signal,redirect:"manual"})}catch(a){throw uT(t,e.description,r,a)}if(i.type==="opaqueredirect"||i.status>=300&&i.status<400)throw new Error(`refusing to follow redirect from ${e.description} ${t} (https-only: the URL must serve the content directly, not redirect)`);if(!i.ok)throw new Error(`failed to fetch ${e.description} ${t}: HTTP ${i.status}${i.statusText?` ${i.statusText}`:""}`);try{return Buffer.from(await i.arrayBuffer())}catch(a){throw uT(t,e.description,r,a)}}finally{clearTimeout(o)}}function uT(t,e,n,r){let o=r instanceof Error&&r.name==="AbortError"?`timed out after ${n}ms`:r instanceof Error?r.message:String(r);return new Error(`failed to fetch ${e} ${t}: ${o}`)}var gM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",yM=60*60*1e3,EM=1500;function TM(){let t=process.env.HOME??pM();return _M(t,".lmctl",".update-check.json")}function wM(t){return t.isTTY===!0}function vM(t,e){let n=o=>{let i=/^(\d+)\.(\d+)\.(\d+)(?:$|[-+])/.exec(o.trim());if(i===null)return null;let a=i.slice(1).map(l=>Number(l));return a.some(l=>!Number.isSafeInteger(l)||l<0)?null:a},r=n(t),s=n(e);if(r===null||s===null)return 0;for(let o=0;o<3;o+=1){if(r[o]>s[o])return 1;if(r[o]<s[o])return-1}return 0}function Yu(t,e){return!!(process.env.LMCTL_NO_UPDATE_NOTIFIER==="1"||!wM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function SM(t,e){try{let n=JSON.parse(uM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<yM)return n.latest}catch{}return null}function IM(t,e){dM(hM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;mM(n,`${JSON.stringify(e)}
2656
- `,"utf8"),fM(n,t)}async function bM(){let t=await mT(gM,{description:"lmctl npm metadata",timeoutMs:EM}),e=JSON.parse(t.toString("utf8"));if(typeof e.version!="string"||e.version.trim()==="")throw new Error("registry response missing version");return e.version}async function pT(t,e=[],n={}){try{if(Yu(e,t)||(n.displayVersion?.()??ii()).includes("+"))return;let r=n.now?.()??Date.now(),s=n.cachePath??TM();if(SM(s,r)!==null)return;let i=await(n.fetchLatest??bM)();try{IM(s,{checkedAt:r,latest:i})}catch{return}let a=n.currentVersion?.()??qu();vM(i,a)>0&&t.stderr.write(`update available: ${a} \u2192 ${i} run: npm i -g @lmctl-ai/lmctl@latest
2657
+ `),PR=new Set(["agy_not_found","credentials_missing"]),MR=Pd;SG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});le();Nn();import{pathToFileURL as NG}from"node:url";import{execFileSync as kD}from"node:child_process";import{readFileSync as AD}from"node:fs";import{join as ND}from"node:path";import{fileURLToPath as RD}from"node:url";function tT(){return RD(new URL("../..",import.meta.url))}function qu(t=tT()){try{let e=JSON.parse(AD(ND(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function oi(t,e){try{return kD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function ii(t=tT()){let e=qu(t);if(oi(t,["rev-parse","--is-inside-work-tree"])!=="true"||oi(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=oi(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=oi(t,["describe","--tags","--exact-match","HEAD"]),s=oi(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}re();import{mkdirSync as dM,readFileSync as uM,renameSync as fM,writeFileSync as mM}from"node:fs";import{homedir as pM}from"node:os";import{dirname as hM,join as _M}from"node:path";function fT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function lM(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function cM(t,e){return!lM(t)||fT(t)?null:`${e} must use https://: ${t}`}async function mT(t,e){let n=cM(t,e.description);if(n!==null||!fT(t))throw new Error(n??`${e.description} must use https://: ${t}`);let r=e.timeoutMs??15e3,s=new AbortController,o=setTimeout(()=>s.abort(),r);try{let i;try{i=await fetch(t,{signal:s.signal,redirect:"manual"})}catch(a){throw uT(t,e.description,r,a)}if(i.type==="opaqueredirect"||i.status>=300&&i.status<400)throw new Error(`refusing to follow redirect from ${e.description} ${t} (https-only: the URL must serve the content directly, not redirect)`);if(!i.ok)throw new Error(`failed to fetch ${e.description} ${t}: HTTP ${i.status}${i.statusText?` ${i.statusText}`:""}`);try{return Buffer.from(await i.arrayBuffer())}catch(a){throw uT(t,e.description,r,a)}}finally{clearTimeout(o)}}function uT(t,e,n,r){let o=r instanceof Error&&r.name==="AbortError"?`timed out after ${n}ms`:r instanceof Error?r.message:String(r);return new Error(`failed to fetch ${e} ${t}: ${o}`)}var gM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",yM=60*60*1e3,EM=1500;function TM(){let t=process.env.HOME??pM();return _M(t,".lmctl",".update-check.json")}function wM(t){return t.isTTY===!0}function vM(t,e){let n=o=>{let i=/^(\d+)\.(\d+)\.(\d+)(?:$|[-+])/.exec(o.trim());if(i===null)return null;let a=i.slice(1).map(l=>Number(l));return a.some(l=>!Number.isSafeInteger(l)||l<0)?null:a},r=n(t),s=n(e);if(r===null||s===null)return 0;for(let o=0;o<3;o+=1){if(r[o]>s[o])return 1;if(r[o]<s[o])return-1}return 0}function Yu(t,e){return!!(process.env.LMCTL_NO_UPDATE_NOTIFIER==="1"||!wM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function SM(t,e){try{let n=JSON.parse(uM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<yM)return n.latest}catch{}return null}function bM(t,e){dM(hM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;mM(n,`${JSON.stringify(e)}
2658
+ `,"utf8"),fM(n,t)}async function IM(){let t=await mT(gM,{description:"lmctl npm metadata",timeoutMs:EM}),e=JSON.parse(t.toString("utf8"));if(typeof e.version!="string"||e.version.trim()==="")throw new Error("registry response missing version");return e.version}async function pT(t,e=[],n={}){try{if(Yu(e,t)||(n.displayVersion?.()??ii()).includes("+"))return;let r=n.now?.()??Date.now(),s=n.cachePath??TM();if(SM(s,r)!==null)return;let i=await(n.fetchLatest??IM)();try{bM(s,{checkedAt:r,latest:i})}catch{return}let a=n.currentVersion?.()??qu();vM(i,a)>0&&t.stderr.write(`update available: ${a} \u2192 ${i} run: npm i -g @lmctl-ai/lmctl@latest
2657
2659
  `)}catch{}}za();var ko=`usage: lmctl [--db PATH] [--debug] [--non-interactive] <command|target> [args]
2658
2660
  `,P_=`${ko}
2659
2661
  Missing information is requested interactively. --non-interactive disables questions.
@@ -2727,8 +2729,8 @@ ${ko}Run 'lmctl help' for usage.
2727
2729
  `),1):(r.stderr.write(`error: ${s.message}
2728
2730
  `),s instanceof jt?1:ci()?(r.stderr.write(`(debug details written to ~/.lmctl/debug-*.log)
2729
2731
  `),1):(r.stderr.write(`(re-run with --debug for the full stack trace and context in ~/.lmctl/debug-*.log)
2730
- `),1))}function OG(t){let e=[],n=t.cause,r=0;for(;n!=null&&r<8;){let s=n instanceof Error?n:new Error(String(n));e.push({error_class:s.name,error_message:s.message,error_stack:s.stack??null}),n=s.cause,r+=1}return e}async function WR(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Ph(),fk));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(Ih(),Yb));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(nd(),Th)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(fd(),ud));return s(n,"prompt",e,o=>r(o,n))}case"chat":{process.stderr.write(`warning: 'lmctl chat' is being phased out -- use 'lmctl prompt' (same behaviour; a prompt is answered, it is not a conversation)
2731
- `);let{runChat:r}=await Promise.resolve().then(()=>(nd(),Th));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Dk(),Ok));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(Vk(),Gk));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(zk(),Yk));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(oA(),sA));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(cA(),lA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(pA(),mA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(_n(),ch));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(_n(),ch)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(fd(),ud));return s(n,"seed",e,o=>r(o,n))}case"plan":{let{runPlan:r}=await Promise.resolve().then(()=>(ua(),Ik)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(fd(),ud));return s(n,"plan",e,o=>r(o,n),{ownsForce:!0,extension:".txt"})}case"init":{let{runInit:r}=await Promise.resolve().then(()=>(EA(),yA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(UA(),PA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(GA(),qA));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(Zh(),CA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(u_(),lN));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(MN(),DN));return r(e,n)}case"models":{let{runModels:r}=await Promise.resolve().then(()=>(Fc(),qI));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(FN(),UN));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(FR(),UR));return r(e,n)}case"db":return DG(e,n);default:if(t==="model")return HR(n,"command 'model' is retired; use 'models'");if(!RG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(Mh(),Dh)),s=await r([t,...e],n);if(s!==null)return s}return BR(n,t)}}async function DG(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2732
+ `),1))}function OG(t){let e=[],n=t.cause,r=0;for(;n!=null&&r<8;){let s=n instanceof Error?n:new Error(String(n));e.push({error_class:s.name,error_message:s.message,error_stack:s.stack??null}),n=s.cause,r+=1}return e}async function WR(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Ph(),fk));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(bh(),YI));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(nd(),Th)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(fd(),ud));return s(n,"prompt",e,o=>r(o,n))}case"chat":{process.stderr.write(`warning: 'lmctl chat' is being phased out -- use 'lmctl prompt' (same behaviour; a prompt is answered, it is not a conversation)
2733
+ `);let{runChat:r}=await Promise.resolve().then(()=>(nd(),Th));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Dk(),Ok));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(Vk(),Gk));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(zk(),Yk));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(oA(),sA));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(cA(),lA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(pA(),mA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(_n(),ch));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(_n(),ch)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(fd(),ud));return s(n,"seed",e,o=>r(o,n))}case"plan":{let{runPlan:r}=await Promise.resolve().then(()=>(ua(),bk)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(fd(),ud));return s(n,"plan",e,o=>r(o,n),{ownsForce:!0,extension:".txt"})}case"init":{let{runInit:r}=await Promise.resolve().then(()=>(EA(),yA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(UA(),PA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(GA(),qA));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(Zh(),CA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(u_(),lN));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(MN(),DN));return r(e,n)}case"models":{let{runModels:r}=await Promise.resolve().then(()=>(Fc(),qb));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(FN(),UN));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(FR(),UR));return r(e,n)}case"db":return DG(e,n);default:if(t==="model")return HR(n,"command 'model' is retired; use 'models'");if(!RG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(Mh(),Dh)),s=await r([t,...e],n);if(s!==null)return s}return BR(n,t)}}async function DG(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2732
2734
 
2733
2735
  backfill-events Replay the legacy tables into the event-log
2734
2736
  (with --db <copy>) substrate and rebuild projections. Idempotent;