@lmctl-ai/lmctl 0.2.353 → 0.2.355

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 iR=Object.create;var Jd=Object.defineProperty;var aR=Object.getOwnPropertyDescriptor;var lR=Object.getOwnPropertyNames;var cR=Object.getPrototypeOf,dR=Object.prototype.hasOwnProperty;var L=(t,e)=>()=>(t&&(e=t(t=0)),e);var uR=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),me=(t,e)=>{for(var n in e)Jd(t,n,{get:e[n],enumerable:!0})},fR=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of lR(e))!dR.call(t,s)&&s!==n&&Jd(t,s,{get:()=>e[s],enumerable:!(r=aR(e,s))||r.enumerable});return t};var Ft=(t,e,n)=>(n=t!=null?iR(cR(t)):{},fR(e||!t||!t.__esModule?Jd(n,"default",{value:t,enumerable:!0}):n,t));function Q_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?Do:z_}var z_,Do,Kd=L(()=>{"use strict";z_="root_teamfile <> '(direct)'",Do=z_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as mR}from"node:fs";import{createRequire as pR}from"node:module";function hR(){return Yd===null&&(Yd=pR(import.meta.url)("node:sqlite").DatabaseSync),Yd}function yR(t){let e=gR[t];if(e!==void 0)return e;let n=_R[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function Pr(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=yR(t.errcode)),t}function ER(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function TR(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function zd(t){return t.length===1&&wR(t[0])?[t[0]]:t}function wR(t){if(!eu(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function eu(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Yd,_R,gR,Qd,Ur,Zd,Mo=L(()=>{"use strict";Yd=null;_R={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"},gR={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"};Qd=class{name;handle;savepointId=0;constructor(e,n={}){if(n.fileMustExist===!0&&e!==":memory:"&&!mR(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(hR())(e,{readOnly:n.readonly===!0})}catch(r){Pr(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Zd(this.handle.prepare(e))}catch(n){Pr(n)}}exec(e){try{this.handle.exec(e)}catch(n){Pr(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){Pr(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(!ER(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(!TR(i))throw i}throw o}}};Ur=Qd,Zd=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){try{let n=this.handle.get(...zd(e));return this.normalizeRow(n)}catch(n){Pr(n)}}all(...e){try{return this.handle.all(...zd(e)).map(n=>this.normalizeRow(n))}catch(n){Pr(n)}}run(...e){try{let n=this.handle.run(...zd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Pr(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&eu(e)?Object.values(e):eu(e)?{...e}:e}}});function bn(t){return new Ur(t,{readonly:!0,fileMustExist:!0})}var $o=L(()=>{"use strict";Mo()});import{createHash as vR}from"node:crypto";import{lstat as SR,readFile as bR,realpath as Z_,stat as eg}from"node:fs/promises";import{isAbsolute as tg,relative as IR,resolve as kR,sep as AR}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 Po(t){return K(t)}function Tt(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 nt(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 Kt(t,e,n){let r={},s=Po(t.cacheWrite5m),o=Po(t.cacheWrite1h),i=Po(t.reasoning),a=Po(t.webSearch),l=Po(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 Jn(t){return typeof t=="string"&&RR.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 Ss(t){let e=B(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Ue(t,e){if(!tg(t))return null;let n=await SR(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await Z_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await Z_(s).catch(()=>kR(s)),i=IR(o,r);if(i===""||!i.startsWith(`..${AR}`)&&i!==".."&&!tg(i))return r}return null}async function ft(t,e){oe(e);let n=await eg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await bR(t,{signal:e.signal});e.signal.throwIfAborted();let s=await eg(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Uo}:sha256:${vR("sha256").update(r).digest("hex")}`,data:r}}function ba(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
- `),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 Uo,ut,yt,NR,Et,RR,In=L(()=>{"use strict";Uo="bx3",ut={input_uncached:null,input_cached:null,input_cache_write:null,output:null};yt=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}},NR=0,Et=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${NR++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};RR=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as xR}from"node:fs/promises";import{join as ng,sep as rg}from"node:path";var bs,tu=L(()=>{"use strict";In();bs=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 xR(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>ng(l,f.name)+(f.isDirectory()?rg:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=ng(l,f.name),p=f.isDirectory()&&r?.startsWith(m+rg);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 Ue(e.source_id,[this.format.root]);if(!r)return null;let s=await ft(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 Kn(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 Fo=L(()=>{"use strict"});import{createReadStream as sg}from"node:fs";import{createInterface as og}from"node:readline";import{stat as LR}from"node:fs/promises";import{homedir as CR}from"node:os";function ig(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=sg(t,{encoding:"utf-8"}),r=og({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=ig(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function wt(t,e){let n=[],r=sg(t,{encoding:"utf-8"}),s=og({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=ig(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 LR(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,xe=L(()=>{"use strict";Q=CR()});import{readdir as OR}from"node:fs/promises";import{join as Is,resolve as DR}from"node:path";function ka(t){return DR(t||process.env.XDG_DATA_HOME||Is(Q,".local","share"))}function MR(t){return Is(ka(t),"muse","sessions")}function $R(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 cg(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 $ 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[$];typeof ue=="number"&&Number.isSafeInteger(ue)&&ue>=0&&(q[$]=ue)}Object.keys(q).length>0&&(S.turn.rawUsage=[...S.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,$R(b,y,w.model,q))}if(!w.usage)return;let k={},N=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,I=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 N=="number"&&typeof O=="number"&&O>N||typeof v=="number"&&typeof O=="number"&&O>v||typeof v=="number"&&typeof I=="number"&&I>v||typeof v=="number"&&typeof O=="number"&&typeof I=="number"&&O+I>v,R=A?void 0:typeof O=="number"?O:void 0,x=A?void 0:typeof I=="number"?I:void 0,C;A||(typeof w.usage.input_uncached_tokens=="number"?C=w.usage.input_uncached_tokens:typeof v=="number"&&typeof O=="number"&&typeof I=="number"&&v>=O+I&&(C=v-O-I)),C!==void 0&&C<0&&(C=void 0);let M=w.usage.output_tokens,P=w.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(k.inputTokens=C),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(k.cachedInputTokens=R),typeof x=="number"&&Number.isSafeInteger(x)&&x>=0&&(k.cacheWriteInputTokens=x),typeof M=="number"&&Number.isSafeInteger(M)&&M>=0&&(k.outputTokens=M),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(k.reasoningOutputTokens=P),u=k}};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=Kn(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 PR(t,e,n){let r=cg(e,n);for(let s of t)r.visit(s);return r.finish()}function UR(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=PR(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function dg(t){return{provider:"muse",root:MR(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:UR}}async function lg(t,e){let n=cg(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var ag,Ia,nu=L(()=>{"use strict";Fo();xe();ag=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Ia=class{name="muse";dataHome;constructor(e={}){this.dataHome=ka(e.museDataHome)}get root(){return Is(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await OR(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(Is(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(Is(e,o.name),n+1));return s}async resolveSessionPath(e){return ag.test(e)?(await this.files()).find(n=>n.endsWith(Is(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?lg(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!ag.test(r))continue;let s=await lg(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as ug,readdir as FR,rm as jR,stat as fg}from"node:fs/promises";import{basename as WR,join as ks,resolve as HR}from"node:path";function Ra(t){return HR(t||process.env.MINIPLAYER_HOME||ks(process.env.XDG_DATA_HOME||ks(Q,".local","share"),"miniplayer"))}function Aa(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function ru(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function mg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function pg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function hg(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 _g(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 yg(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 k=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!w&&!k){let A=h.usage??{},R=_g({...h,usage:A});Object.keys(R.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:R.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:R.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:R.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 N=new Map,O=new Map,I=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 R=A,x=v.length;v.push({response:R,index:x,filesRead:[],filesWritten:[],io:[]}),b.push(A.responseId),_.has(A.responseId)&&(d=!0),_.add(A.responseId),R.toolCalls!==void 0&&!Array.isArray(R.toolCalls)&&(d=!0,v[x].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(R.toolCalls)?R.toolCalls:[]){let M=mg(C),P=ru(C);if(M)N.set(M,x),O.set(M,P);else{d=!0;let q=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",$=P==="write_file"||P==="shell"||P==="tool";q&&v[x].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),$&&v[x].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 R=A&&typeof A=="object"?A:{},x=mg(R),C=x?N.get(x):void 0,M=ru(R),P=pg(R.result),q=R.status==="failed"||R.error!==void 0;if(R.type==="tool_call"?a.push({role:"tool_use",timestamp:s(R?.timestamp)??g,content:Aa(R?.input??R?.args),toolName:M,toolInput:Aa(R?.input??R?.args),toolInputData:pg(R?.input??R?.args)??void 0,...x?{toolCallId:x}:{}}):a.push({role:"tool_result",timestamp:s(R?.timestamp)??E??g,content:Aa(q?R?.error:R?.result),toolName:M,...x?{toolCallId:x}:{}}),C===void 0){d=!0;continue}let $=v[C];(R.type==="tool_result"||q||R.result!==void 0)&&I.add(x);let ue=P?.path,H=K(P?.bytesRead??P?.bytesWritten);R.type!=="tool_call"&&(M==="read_file"&&!q&&typeof ue=="string"&&H!==null?$.filesRead.push({path:ue,bytes:H}):M==="write_file"&&!q&&typeof ue=="string"&&H!==null?$.filesWritten.push({path:ue,bytes:H}):M==="webget"&&!q&&H!==null?$.io.push({direction:"read",kind:"web",id:x,ref:hg(P?.finalUrl??P?.url),bytes:H,basis:"certified_counter"}):M==="shell"||q?(M!=="write_file"&&$.io.push({direction:"read",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}),(M==="shell"||M==="write_file")&&$.io.push({direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"})):M==="list_directory"||M==="read_file"||M==="webget"?$.io.push({direction:"read",kind:M==="webget"?"web":"unattributed",id:x,ref:M==="webget"?hg(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):M==="write_file"?$.io.push({direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}):$.io.push({direction:"read",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}))}for(let[A,R]of O)if(!I.has(A)){let x=v[N.get(A)],C=R==="list_directory"||R==="read_file"||R==="webget"||R==="shell",M=R==="write_file"||R==="shell";C&&x.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),M&&x.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of v){let R=A.response,x=_g(R),C=s(R.completedAt??R.startedAt)??E??g;new Set((Array.isArray(R.toolCalls)?R.toolCalls:[]).map($=>ru($))).has("shell")&&!A.io.some($=>$.kind==="unattributed"&&$.direction==="read")&&A.io.push({direction:"read",kind:"unattributed",id:R.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:R.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($=>$.direction==="read"&&$.bytes===null),q=A.io.some($=>$.direction==="write"&&$.bytes===null);if(c.push({response_id:R.responseId,timestamp:C.toISOString(),model:typeof R.model=="string"?R.model:null,model_provider:typeof R.provider=="string"?R.provider:typeof h.provider=="string"?h.provider:null,tokens:x.tokens,files_read:P?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:P?null:A.filesRead.reduce(($,ue)=>$+(ue.bytes??0),0)+A.io.filter($=>$.direction==="read").reduce(($,ue)=>$+(ue.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce(($,ue)=>$+(ue.bytes??0),0)+A.io.filter($=>$.direction==="write").reduce(($,ue)=>$+(ue.bytes??0),0),external_io:A.io,pricing_facts:x.pricingFacts}),Object.keys(x.rawUsage).length){let $=l.at(-1);$.rawUsage=[...$.rawUsage??[],{responseId:R.responseId,values:x.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=Kn(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 xa(t){return{provider:"miniplayer",root:ks(Ra(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=WR(e,".json");return e.endsWith(".json")&&gg.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:yg(o,n,r)}catch{return null}}}}var gg,Na,La=L(()=>{"use strict";Fo();xe();In();gg=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;Na=class{name="miniplayer";home;constructor(e={}){this.home=Ra(e.miniplayerHome)}getWatchPaths(){return[{directory:ks(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await FR(ks(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(!gg.test(e))return null;let n=ks(this.home,"sessions",`${e}.json`);try{return(await fg(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=yg(JSON.parse(await ug(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await ug(`${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 fg(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await jR(n),!0}}});import{createHash as BR}from"node:crypto";import{createRequire as XR}from"node:module";import{readdir as qR,realpath as GR}from"node:fs/promises";import{basename as Eg,dirname as VR,join as Tg,resolve as wg}from"node:path";function KR(){return JR("node:sqlite").DatabaseSync}function YR(){return process.env.HOME||process.env.USERPROFILE||""}function Fr(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 Yt(t,e){return t.find(n=>n.field===e)}function zR(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=Fr(n.bytes),s=Yt(r,1)?.bytes,o=Yt(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 QR(t){let e=Yt(Fr(t),5)?.bytes;if(e===void 0)return null;let n=Yt(Fr(e),1)?.bytes;if(n===void 0)return null;let r=Fr(n),s=Yt(r,1)?.varint;if(s===void 0)return null;let o=Yt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function ZR(t){let e=Yt(t,4)?.bytes,n=e!==void 0?Fr(e):[],r=s=>{let o=Yt(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 ex(t){let e=Yt(Fr(t),1)?.bytes;if(e===void 0)return null;let n=Fr(e),r=zR(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=Yt(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}=ZR(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function vg(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=BR("sha256");o.update("rev:").update(Ca).update(`
1
+ var iR=Object.create;var Jd=Object.defineProperty;var aR=Object.getOwnPropertyDescriptor;var lR=Object.getOwnPropertyNames;var cR=Object.getPrototypeOf,dR=Object.prototype.hasOwnProperty;var L=(t,e)=>()=>(t&&(e=t(t=0)),e);var uR=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),me=(t,e)=>{for(var n in e)Jd(t,n,{get:e[n],enumerable:!0})},fR=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of lR(e))!dR.call(t,s)&&s!==n&&Jd(t,s,{get:()=>e[s],enumerable:!(r=aR(e,s))||r.enumerable});return t};var Ft=(t,e,n)=>(n=t!=null?iR(cR(t)):{},fR(e||!t||!t.__esModule?Jd(n,"default",{value:t,enumerable:!0}):n,t));function Q_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?Do:z_}var z_,Do,Kd=L(()=>{"use strict";z_="root_teamfile <> '(direct)'",Do=z_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as mR}from"node:fs";import{createRequire as pR}from"node:module";function hR(){return Yd===null&&(Yd=pR(import.meta.url)("node:sqlite").DatabaseSync),Yd}function yR(t){let e=gR[t];if(e!==void 0)return e;let n=_R[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function Pr(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=yR(t.errcode)),t}function ER(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function wR(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function zd(t){return t.length===1&&TR(t[0])?[t[0]]:t}function TR(t){if(!eu(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function eu(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Yd,_R,gR,Qd,Ur,Zd,Mo=L(()=>{"use strict";Yd=null;_R={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"},gR={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"};Qd=class{name;handle;savepointId=0;constructor(e,n={}){if(n.fileMustExist===!0&&e!==":memory:"&&!mR(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(hR())(e,{readOnly:n.readonly===!0})}catch(r){Pr(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Zd(this.handle.prepare(e))}catch(n){Pr(n)}}exec(e){try{this.handle.exec(e)}catch(n){Pr(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){Pr(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(!ER(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(!wR(i))throw i}throw o}}};Ur=Qd,Zd=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){try{let n=this.handle.get(...zd(e));return this.normalizeRow(n)}catch(n){Pr(n)}}all(...e){try{return this.handle.all(...zd(e)).map(n=>this.normalizeRow(n))}catch(n){Pr(n)}}run(...e){try{let n=this.handle.run(...zd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Pr(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&eu(e)?Object.values(e):eu(e)?{...e}:e}}});function bn(t){return new Ur(t,{readonly:!0,fileMustExist:!0})}var $o=L(()=>{"use strict";Mo()});import{createHash as vR}from"node:crypto";import{lstat as SR,readFile as bR,realpath as Z_,stat as eg}from"node:fs/promises";import{isAbsolute as tg,relative as IR,resolve as kR,sep as AR}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 Po(t){return K(t)}function wt(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 nt(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 Kt(t,e,n){let r={},s=Po(t.cacheWrite5m),o=Po(t.cacheWrite1h),i=Po(t.reasoning),a=Po(t.webSearch),l=Po(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 Jn(t){return typeof t=="string"&&RR.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 Ss(t){let e=B(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Ue(t,e){if(!tg(t))return null;let n=await SR(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await Z_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await Z_(s).catch(()=>kR(s)),i=IR(o,r);if(i===""||!i.startsWith(`..${AR}`)&&i!==".."&&!tg(i))return r}return null}async function ft(t,e){oe(e);let n=await eg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await bR(t,{signal:e.signal});e.signal.throwIfAborted();let s=await eg(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Uo}:sha256:${vR("sha256").update(r).digest("hex")}`,data:r}}function ba(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
+ `),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 Uo,ut,yt,NR,Et,RR,In=L(()=>{"use strict";Uo="bx3",ut={input_uncached:null,input_cached:null,input_cache_write:null,output:null};yt=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}},NR=0,Et=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${NR++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};RR=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as xR}from"node:fs/promises";import{join as ng,sep as rg}from"node:path";var bs,tu=L(()=>{"use strict";In();bs=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 xR(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>ng(l,f.name)+(f.isDirectory()?rg:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=ng(l,f.name),p=f.isDirectory()&&r?.startsWith(m+rg);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 Ue(e.source_id,[this.format.root]);if(!r)return null;let s=await ft(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 Kn(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 Fo=L(()=>{"use strict"});import{createReadStream as sg}from"node:fs";import{createInterface as og}from"node:readline";import{stat as LR}from"node:fs/promises";import{homedir as CR}from"node:os";function ig(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=sg(t,{encoding:"utf-8"}),r=og({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=ig(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function Tt(t,e){let n=[],r=sg(t,{encoding:"utf-8"}),s=og({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=ig(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 LR(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,xe=L(()=>{"use strict";Q=CR()});import{readdir as OR}from"node:fs/promises";import{join as Is,resolve as DR}from"node:path";function ka(t){return DR(t||process.env.XDG_DATA_HOME||Is(Q,".local","share"))}function MR(t){return Is(ka(t),"muse","sessions")}function $R(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 cg(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 w=g.payload;if(g.payload_type==="runtime.session.metadata"&&(typeof w?.record?.workspace_root=="string"&&(n=w.record.workspace_root),typeof w?.record?.model_id=="string"&&(r=w.record.model_id)),g.payload_type!=="runtime.session"||w?.kind!=="run")return;let T=w.event,S=p(w.run_id);if(!T||!y||!S){T||m();return}if(T.kind==="started"&&typeof T.prompt=="string")a.push({role:"user",content:T.prompt,timestamp:y}),S.turn.startedAt=y,S.turn.prompt=T.prompt,S.turn.status="in_progress",i="in_progress";else if(T.kind==="assistant_message_committed"&&typeof T.text=="string")a.push({role:"assistant",content:T.text,timestamp:y});else if(T.kind==="terminal")S.turn.completedAt=y,S.turn.status=T.terminal==="completed"?"complete":"aborted",i=S.turn.status;else if(T.kind==="model_completed"){typeof T.model=="string"&&T.model.length>0&&(r=T.model,S.turn.model=T.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(T.usage&&typeof T.usage=="object")for(let $ 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=T.usage[$];typeof ue=="number"&&Number.isSafeInteger(ue)&&ue>=0&&(q[$]=ue)}Object.keys(q).length>0&&(S.turn.rawUsage=[...S.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,$R(b,y,T.model,q))}if(!T.usage)return;let k={},N=T.usage.input_tokens,O=T.usage.cache_read_tokens??T.usage.input_cache_read_tokens,I=T.usage.cache_write_tokens??T.usage.input_cache_write_tokens,v=typeof T.usage.promptTokens=="number"?T.usage.promptTokens:typeof T.usage.prompt_tokens=="number"?T.usage.prompt_tokens:void 0,A=typeof N=="number"&&typeof O=="number"&&O>N||typeof v=="number"&&typeof O=="number"&&O>v||typeof v=="number"&&typeof I=="number"&&I>v||typeof v=="number"&&typeof O=="number"&&typeof I=="number"&&O+I>v,R=A?void 0:typeof O=="number"?O:void 0,x=A?void 0:typeof I=="number"?I:void 0,C;A||(typeof T.usage.input_uncached_tokens=="number"?C=T.usage.input_uncached_tokens:typeof v=="number"&&typeof O=="number"&&typeof I=="number"&&v>=O+I&&(C=v-O-I)),C!==void 0&&C<0&&(C=void 0);let M=T.usage.output_tokens,P=T.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(k.inputTokens=C),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(k.cachedInputTokens=R),typeof x=="number"&&Number.isSafeInteger(x)&&x>=0&&(k.cacheWriteInputTokens=x),typeof M=="number"&&Number.isSafeInteger(M)&&M>=0&&(k.outputTokens=M),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(k.reasoningOutputTokens=P),u=k}};return{visit:_,finish:()=>{if(!n||!s||!o)return null;let g=a.filter(T=>T.role==="user").map(T=>T.content),E=[...l.values()].map(T=>({...T.turn,...T.responseIds.length>0?{responseIds:[...T.responseIds]}:{}})),y=[...c.values()],w=Kn(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:w.input_uncached??void 0,totalCachedInputTokens:w.input_cached??void 0,totalCacheWriteInputTokens:w.input_cache_write??void 0,totalOutputTokens:w.output??void 0,lastTokenUsage:u,turns:E,responses:y,...f?{captureStatus:f}:{}}},markPartial:m}}function PR(t,e,n){let r=cg(e,n);for(let s of t)r.visit(s);return r.finish()}function UR(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=PR(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function dg(t){return{provider:"muse",root:MR(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:UR}}async function lg(t,e){let n=cg(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var ag,Ia,nu=L(()=>{"use strict";Fo();xe();ag=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Ia=class{name="muse";dataHome;constructor(e={}){this.dataHome=ka(e.museDataHome)}get root(){return Is(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await OR(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(Is(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(Is(e,o.name),n+1));return s}async resolveSessionPath(e){return ag.test(e)?(await this.files()).find(n=>n.endsWith(Is(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?lg(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!ag.test(r))continue;let s=await lg(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as ug,readdir as FR,rm as jR,stat as fg}from"node:fs/promises";import{basename as WR,join as ks,resolve as HR}from"node:path";function Ra(t){return HR(t||process.env.MINIPLAYER_HOME||ks(process.env.XDG_DATA_HOME||ks(Q,".local","share"),"miniplayer"))}function Aa(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function ru(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function mg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function pg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function hg(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 _g(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 yg(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 w=h.status==="complete"?"complete":h.status==="running"?"in_progress":h.status==="failed"?"failed":h.status==="aborted"?"aborted":"unknown";u=w==="failed"||w==="unknown"?"aborted":w,(w!=="complete"||h.partial===!0)&&(d=!0);let T=Array.isArray(h.modelResponses),S=T?h.modelResponses:[],b=[];l.push({id:h.responseId,startedAt:g,completedAt:E,model:y,prompt:h.input.text,status:w,responseIds:b}),a.push({role:"user",timestamp:g,content:h.input.text});let k=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!T&&!k){let A=h.usage??{},R=_g({...h,usage:A});Object.keys(R.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:R.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:R.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:R.pricingFacts}),w!=="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 N=new Map,O=new Map,I=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 R=A,x=v.length;v.push({response:R,index:x,filesRead:[],filesWritten:[],io:[]}),b.push(A.responseId),_.has(A.responseId)&&(d=!0),_.add(A.responseId),R.toolCalls!==void 0&&!Array.isArray(R.toolCalls)&&(d=!0,v[x].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(R.toolCalls)?R.toolCalls:[]){let M=mg(C),P=ru(C);if(M)N.set(M,x),O.set(M,P);else{d=!0;let q=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",$=P==="write_file"||P==="shell"||P==="tool";q&&v[x].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),$&&v[x].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 R=A&&typeof A=="object"?A:{},x=mg(R),C=x?N.get(x):void 0,M=ru(R),P=pg(R.result),q=R.status==="failed"||R.error!==void 0;if(R.type==="tool_call"?a.push({role:"tool_use",timestamp:s(R?.timestamp)??g,content:Aa(R?.input??R?.args),toolName:M,toolInput:Aa(R?.input??R?.args),toolInputData:pg(R?.input??R?.args)??void 0,...x?{toolCallId:x}:{}}):a.push({role:"tool_result",timestamp:s(R?.timestamp)??E??g,content:Aa(q?R?.error:R?.result),toolName:M,...x?{toolCallId:x}:{}}),C===void 0){d=!0;continue}let $=v[C];(R.type==="tool_result"||q||R.result!==void 0)&&I.add(x);let ue=P?.path,H=K(P?.bytesRead??P?.bytesWritten);R.type!=="tool_call"&&(M==="read_file"&&!q&&typeof ue=="string"&&H!==null?$.filesRead.push({path:ue,bytes:H}):M==="write_file"&&!q&&typeof ue=="string"&&H!==null?$.filesWritten.push({path:ue,bytes:H}):M==="webget"&&!q&&H!==null?$.io.push({direction:"read",kind:"web",id:x,ref:hg(P?.finalUrl??P?.url),bytes:H,basis:"certified_counter"}):M==="shell"||q?(M!=="write_file"&&$.io.push({direction:"read",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}),(M==="shell"||M==="write_file")&&$.io.push({direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"})):M==="list_directory"||M==="read_file"||M==="webget"?$.io.push({direction:"read",kind:M==="webget"?"web":"unattributed",id:x,ref:M==="webget"?hg(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):M==="write_file"?$.io.push({direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}):$.io.push({direction:"read",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:x,ref:null,bytes:null,basis:"unknown"}))}for(let[A,R]of O)if(!I.has(A)){let x=v[N.get(A)],C=R==="list_directory"||R==="read_file"||R==="webget"||R==="shell",M=R==="write_file"||R==="shell";C&&x.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),M&&x.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of v){let R=A.response,x=_g(R),C=s(R.completedAt??R.startedAt)??E??g;new Set((Array.isArray(R.toolCalls)?R.toolCalls:[]).map($=>ru($))).has("shell")&&!A.io.some($=>$.kind==="unattributed"&&$.direction==="read")&&A.io.push({direction:"read",kind:"unattributed",id:R.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:R.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($=>$.direction==="read"&&$.bytes===null),q=A.io.some($=>$.direction==="write"&&$.bytes===null);if(c.push({response_id:R.responseId,timestamp:C.toISOString(),model:typeof R.model=="string"?R.model:null,model_provider:typeof R.provider=="string"?R.provider:typeof h.provider=="string"?h.provider:null,tokens:x.tokens,files_read:P?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:P?null:A.filesRead.reduce(($,ue)=>$+(ue.bytes??0),0)+A.io.filter($=>$.direction==="read").reduce(($,ue)=>$+(ue.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce(($,ue)=>$+(ue.bytes??0),0)+A.io.filter($=>$.direction==="write").reduce(($,ue)=>$+(ue.bytes??0),0),external_io:A.io,pricing_facts:x.pricingFacts}),Object.keys(x.rawUsage).length){let $=l.at(-1);$.rawUsage=[...$.rawUsage??[],{responseId:R.responseId,values:x.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=Kn(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 xa(t){return{provider:"miniplayer",root:ks(Ra(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=WR(e,".json");return e.endsWith(".json")&&gg.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:yg(o,n,r)}catch{return null}}}}var gg,Na,La=L(()=>{"use strict";Fo();xe();In();gg=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;Na=class{name="miniplayer";home;constructor(e={}){this.home=Ra(e.miniplayerHome)}getWatchPaths(){return[{directory:ks(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await FR(ks(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(!gg.test(e))return null;let n=ks(this.home,"sessions",`${e}.json`);try{return(await fg(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=yg(JSON.parse(await ug(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await ug(`${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 fg(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await jR(n),!0}}});import{createHash as BR}from"node:crypto";import{createRequire as XR}from"node:module";import{readdir as qR,realpath as GR}from"node:fs/promises";import{basename as Eg,dirname as VR,join as wg,resolve as Tg}from"node:path";function KR(){return JR("node:sqlite").DatabaseSync}function YR(){return process.env.HOME||process.env.USERPROFILE||""}function Fr(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 Yt(t,e){return t.find(n=>n.field===e)}function zR(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=Fr(n.bytes),s=Yt(r,1)?.bytes,o=Yt(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 QR(t){let e=Yt(Fr(t),5)?.bytes;if(e===void 0)return null;let n=Yt(Fr(e),1)?.bytes;if(n===void 0)return null;let r=Fr(n),s=Yt(r,1)?.varint;if(s===void 0)return null;let o=Yt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function ZR(t){let e=Yt(t,4)?.bytes,n=e!==void 0?Fr(e):[],r=s=>{let o=Yt(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 ex(t){let e=Yt(Fr(t),1)?.bytes;if(e===void 0)return null;let n=Fr(e),r=zR(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=Yt(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}=ZR(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function vg(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=BR("sha256");o.update("rev:").update(Ca).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=ex(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
- `);let _=QR(p);_!==null&&c.set(u,_)}return{revision:`${Uo}+${Ca}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function tx(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:Kt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function Sg(t={}){return new jo(t)}var Yn,Ca,JR,jo,su=L(()=>{"use strict";In();Yn="agy",Ca="agy-tokens-v1",JR=XR(import.meta.url);jo=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=wg(e.agyConversationsDir??Tg(YR(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){oe(e);let s=await qR(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 GR(Tg(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:Yn,sessionid:Eg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await Ue(e.source_id,[this.conversationsDir]);if(n===null||Eg(n,".db")!==e.sessionid||wg(VR(n))!==this.conversationsDir)return null;try{let r=new(KR())(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!==Yn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=vg(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!==Yn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=vg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=tx(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 nx from"node:zlib";function ux(t,e){return t[e]===sx&&t[e+1]===ox&&t[e+2]===ix&&t[e+3]===ax}function bg(t,e){return(t[e]&240)===80&&t[e+1]===lx&&t[e+2]===cx&&t[e+3]===dx}function fx(t,e){if(bg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!ux(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 Wo(t){let e=[],n=0;for(;n+4<=t.length;){let r=fx(t,n);if(r===void 0||r<=0)break;e.push(t.subarray(n,n+r)),n+=r}return e}function Oa(t){let e=[];for(let n of Wo(t))bg(n,0)||e.push(rx(n).toString("utf8"));return e.join("")}var rx,sx,ox,ix,ax,lx,cx,dx,Da=L(()=>{"use strict";rx=nx.zstdDecompressSync,sx=40,ox=181,ix=47,ax=253,lx=42,cx=77,dx=24});import{readdir as mx,realpath as px}from"node:fs/promises";import{basename as ou,dirname as Ig,join as Ng,resolve as Rg}from"node:path";import hx from"node:zlib";function xg(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function wx(t){return Tx.has(t)||Jn(t)}function vx(){return process.env.HOME||process.env.USERPROFILE||""}function Sx(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 kg(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 bx(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function Ix(t,e){let n=Wo(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(),bx(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=_x(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 kx(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 Ax(t){if(typeof t=="string")try{return B(JSON.parse(t))}catch{return null}return B(t)}function Ag(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function Nx(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=Ag(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:Sx(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=Ag(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=kg(B(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:Tt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,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=Ax(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);yx.has(h)?E!==null?p.obs.record(_??"","read",E,null):be(p.io,_):Ex.has(h)?E!==null?p.obs.record(_??"","written",E,Ss(g)):be(p.io,_):wx(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=kg(_),E=new Et;be(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:Tt(typeof h=="number"?h:null),model:c,tokens:g??{...ut},files_read:[],files_written:[]},obs:new yt,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:nt(g,y,"read"),write_bytes:nt(E,y,"written"),model_provider:l??h,pricing_facts:Kt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function Rx(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await mx(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=Ng(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()&&xg(f.name)){let p=await px(m).catch(()=>Rg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function Lg(t={}){return new iu(t)}var zn,_x,gx,yx,Ex,Tx,iu,Cg=L(()=>{"use strict";In();Da();zn="dsh",_x=hx.zstdDecompressSync;gx=5e5,yx=new Set(["read","read_image"]),Ex=new Set(["write","edit"]),Tx=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"]);iu=class{sessionsDir;maxDiscoveryTraversalVisits;constructor(e={}){let n=e.dshHome??process.env.DSH_HOME??Ng(vx(),".dsh");this.sessionsDir=Rg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):gx}async discover(e,n,r=null){oe(e);let{paths:s,truncated:o}=await Rx(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:zn,sessionid:ou(Ig(i)),source_id:i})),truncated:o}}matches(e,n){return xg(ou(n))&&ou(Ig(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==zn)return{status:"unsupported"};let r=await Ue(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==zn)return{status:"unsupported"};let s=await Ue(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ft(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=Ix(o.data,r);return a?{status:"partial"}:Nx(kx(i),e,n,r)}}});import{readdir as xx,realpath as Lx}from"node:fs/promises";import{basename as Ma,dirname as Cx,join as au,resolve as Og}from"node:path";function Ux(){return process.env.HOME||process.env.USERPROFILE||""}function Fx(){let t=Ux();return[au(t,".qwen","projects"),au(t,".qwen.bk1","projects")]}function jx(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:B(B(t.systemPayload)?.uiEvent)}function Wx(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function Hx(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 Bx(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 Xx(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=Bx(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 qx(t,e,n,r){let{promptBytes:s,resolve:o}=Xx(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=jx(d);if(u===null)continue;let f=Wx(u);if(f===Ox){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=Hx(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:Tt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,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 k=s.get(b.uuid)??null;T.io.record({direction:"read",kind:"prompt",id:b.uuid,ref:null,bytes:k,basis:k===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!==Dx)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(Mx.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($x.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,Ss(h)):be(p.io,g)}else Jn(_)||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:nt(p,h,"read"),write_bytes:nt(_,h,"written"),model_provider:null,pricing_facts:Kt({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 Gx(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await xx(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=au(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")&&Ma(c)===Dg){let m=await Lx(f).catch(()=>Og(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function Vx(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 Mg(t={}){return new lu(t)}var Qn,Ox,Dx,Dg,Mx,$x,Px,lu,$g=L(()=>{"use strict";In();Qn="qwen",Ox="qwen-code.api_response",Dx="qwen-code.tool_call",Dg="chats",Mx=new Set(["read_file"]),$x=new Set(["write_file"]),Px=5e5;lu=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??Fx()).map(n=>Og(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):Px}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 Gx(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:Qn,sessionid:Ma(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Ma(n,".jsonl")===e.sessionid&&Ma(Cx(n))===Dg}async inspect(e,n){if(oe(n),e.provider!==Qn)return{status:"unsupported"};let r=await Ue(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Qn)return{status:"unsupported"};let s=await Ue(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ft(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ba(o.data,r);return i?Vx(i,e.sessionid)?qx(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as Jx}from"node:crypto";import{createRequire as Kx}from"node:module";import{join as Ho,resolve as cu}from"node:path";function zx(){return Yx("node:sqlite").DatabaseSync}function Pg(){return process.env.HOME||process.env.USERPROFILE||""}function Qx(){let t=process.env.XDG_DATA_HOME||Ho(Pg(),".local","share"),e=process.env.XDG_CONFIG_HOME||Ho(Pg(),".config");return[Ho(t,"opencode","opencode.db"),Ho(t,"opencode","opencode-local.db"),Ho(e,"opencode","opencode.db")]}function rL(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Zx.includes(e)?"read":eL.includes(e)?"written":null}function Ug(t,e=tL){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 sL(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 oL(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(`
6
+ `);let _=QR(p);_!==null&&c.set(u,_)}return{revision:`${Uo}+${Ca}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function tx(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:Kt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function Sg(t={}){return new jo(t)}var Yn,Ca,JR,jo,su=L(()=>{"use strict";In();Yn="agy",Ca="agy-tokens-v1",JR=XR(import.meta.url);jo=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=Tg(e.agyConversationsDir??wg(YR(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){oe(e);let s=await qR(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 GR(wg(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:Yn,sessionid:Eg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await Ue(e.source_id,[this.conversationsDir]);if(n===null||Eg(n,".db")!==e.sessionid||Tg(VR(n))!==this.conversationsDir)return null;try{let r=new(KR())(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!==Yn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=vg(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!==Yn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=vg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=tx(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 nx from"node:zlib";function ux(t,e){return t[e]===sx&&t[e+1]===ox&&t[e+2]===ix&&t[e+3]===ax}function bg(t,e){return(t[e]&240)===80&&t[e+1]===lx&&t[e+2]===cx&&t[e+3]===dx}function fx(t,e){if(bg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!ux(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 Wo(t){let e=[],n=0;for(;n+4<=t.length;){let r=fx(t,n);if(r===void 0||r<=0)break;e.push(t.subarray(n,n+r)),n+=r}return e}function Oa(t){let e=[];for(let n of Wo(t))bg(n,0)||e.push(rx(n).toString("utf8"));return e.join("")}var rx,sx,ox,ix,ax,lx,cx,dx,Da=L(()=>{"use strict";rx=nx.zstdDecompressSync,sx=40,ox=181,ix=47,ax=253,lx=42,cx=77,dx=24});import{readdir as mx,realpath as px}from"node:fs/promises";import{basename as ou,dirname as Ig,join as Ng,resolve as Rg}from"node:path";import hx from"node:zlib";function xg(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function Tx(t){return wx.has(t)||Jn(t)}function vx(){return process.env.HOME||process.env.USERPROFILE||""}function Sx(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 kg(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 bx(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function Ix(t,e){let n=Wo(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(),bx(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=_x(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 kx(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 Ax(t){if(typeof t=="string")try{return B(JSON.parse(t))}catch{return null}return B(t)}function Ag(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function Nx(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=Ag(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:Sx(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=Ag(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=kg(B(m?.usage)),w=s.get(E);if(!w){if(w={meta:{response_id:E,timestamp:wt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,reasoning:null,provider:typeof _?.provider=="string"&&_.provider?_.provider:null},s.set(E,w),s.size>r.maxRows)return{status:"partial"};for(let T of o)w.io.record({direction:"read",kind:"prompt",id:T.id,ref:null,bytes:T.bytes,basis:T.bytes===null?"unknown":"input_text"});o.length=0}if(y){w.meta.tokens=y;let T=K(B(m?.usage)?.reasoningTokens);T!==null&&(w.reasoning=T)}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=Ax(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);yx.has(h)?E!==null?p.obs.record(_??"","read",E,null):be(p.io,_):Ex.has(h)?E!==null?p.obs.record(_??"","written",E,Ss(g)):be(p.io,_):Tx(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=kg(_),E=new Et;be(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:wt(typeof h=="number"?h:null),model:c,tokens:g??{...ut},files_read:[],files_written:[]},obs:new yt,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:nt(g,y,"read"),write_bytes:nt(E,y,"written"),model_provider:l??h,pricing_facts:Kt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function Rx(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await mx(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=Ng(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()&&xg(f.name)){let p=await px(m).catch(()=>Rg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function Lg(t={}){return new iu(t)}var zn,_x,gx,yx,Ex,wx,iu,Cg=L(()=>{"use strict";In();Da();zn="dsh",_x=hx.zstdDecompressSync;gx=5e5,yx=new Set(["read","read_image"]),Ex=new Set(["write","edit"]),wx=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"]);iu=class{sessionsDir;maxDiscoveryTraversalVisits;constructor(e={}){let n=e.dshHome??process.env.DSH_HOME??Ng(vx(),".dsh");this.sessionsDir=Rg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):gx}async discover(e,n,r=null){oe(e);let{paths:s,truncated:o}=await Rx(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:zn,sessionid:ou(Ig(i)),source_id:i})),truncated:o}}matches(e,n){return xg(ou(n))&&ou(Ig(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==zn)return{status:"unsupported"};let r=await Ue(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==zn)return{status:"unsupported"};let s=await Ue(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ft(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=Ix(o.data,r);return a?{status:"partial"}:Nx(kx(i),e,n,r)}}});import{readdir as xx,realpath as Lx}from"node:fs/promises";import{basename as Ma,dirname as Cx,join as au,resolve as Og}from"node:path";function Ux(){return process.env.HOME||process.env.USERPROFILE||""}function Fx(){let t=Ux();return[au(t,".qwen","projects"),au(t,".qwen.bk1","projects")]}function jx(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:B(B(t.systemPayload)?.uiEvent)}function Wx(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function Hx(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 Bx(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 Xx(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=Bx(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 qx(t,e,n,r){let{promptBytes:s,resolve:o}=Xx(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=jx(d);if(u===null)continue;let f=Wx(u);if(f===Ox){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=Hx(u);if(y===null)return{status:"partial"};let w=a.get(E);if(!w){if(w={meta:{response_id:E,timestamp:wt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,thoughts:null},a.set(E,w),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")w.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 k=s.get(b.uuid)??null;w.io.record({direction:"read",kind:"prompt",id:b.uuid,ref:null,bytes:k,basis:k===null?"unknown":"input_text"})}}w.meta.tokens=y,typeof u.model=="string"&&u.model&&(w.meta.model=u.model);let T=K(u.thoughts_token_count);T!==null&&(w.thoughts=T);continue}if(f!==Dx)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(Mx.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($x.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,Ss(h)):be(p.io,g)}else Jn(_)||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:nt(p,h,"read"),write_bytes:nt(_,h,"written"),model_provider:null,pricing_facts:Kt({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 Gx(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await xx(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=au(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")&&Ma(c)===Dg){let m=await Lx(f).catch(()=>Og(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function Vx(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 Mg(t={}){return new lu(t)}var Qn,Ox,Dx,Dg,Mx,$x,Px,lu,$g=L(()=>{"use strict";In();Qn="qwen",Ox="qwen-code.api_response",Dx="qwen-code.tool_call",Dg="chats",Mx=new Set(["read_file"]),$x=new Set(["write_file"]),Px=5e5;lu=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??Fx()).map(n=>Og(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):Px}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 Gx(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:Qn,sessionid:Ma(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Ma(n,".jsonl")===e.sessionid&&Ma(Cx(n))===Dg}async inspect(e,n){if(oe(n),e.provider!==Qn)return{status:"unsupported"};let r=await Ue(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Qn)return{status:"unsupported"};let s=await Ue(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ft(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ba(o.data,r);return i?Vx(i,e.sessionid)?qx(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as Jx}from"node:crypto";import{createRequire as Kx}from"node:module";import{join as Ho,resolve as cu}from"node:path";function zx(){return Yx("node:sqlite").DatabaseSync}function Pg(){return process.env.HOME||process.env.USERPROFILE||""}function Qx(){let t=process.env.XDG_DATA_HOME||Ho(Pg(),".local","share"),e=process.env.XDG_CONFIG_HOME||Ho(Pg(),".config");return[Ho(t,"opencode","opencode.db"),Ho(t,"opencode","opencode-local.db"),Ho(e,"opencode","opencode.db")]}function rL(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Zx.includes(e)?"read":eL.includes(e)?"written":null}function Ug(t,e=tL){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 sL(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 oL(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 iL(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 aL(t,e=!1){let n=B(t);if(!n)return{...ut};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?{...ut}: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?{...ut}:r+s+o+a+l===0?{...ut}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function Fg(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=Jx("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:`${Uo}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function lL(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&&!nL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function cL(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=lL(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 yt,f=new Et,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 k;try{k=B(JSON.parse(b.data))}catch{return{status:"partial"}}if(k?.type!=="tool")continue;let N=typeof k.tool=="string"?k.tool.toLowerCase():"",O=rL(k.tool),I=B(k.state),v=B(I?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof I?.callID=="string"&&I.callID?I.callID:b.id;if(O==="written")u.record(A,"written",Ug(v),sL(v));else if(O==="apply_patch"){let R=v?.patchText;if(typeof R=="string")for(let x of oL(R))u.record(A,"written",x.path,x.bytes);else be(f,A)}else if(O==="read"){let R=Ug(v,["filePath","path","file","file_path"]);if(R===null)continue;let x=null;if(I?.status==="completed"){let C=B(B(I.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(x=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",R,x)}else if(N==="webfetch"){m+=1;let R=I?.status==="completed"?I.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:iL(v?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else Jn(k.tool)||be(f,A)}let _=B(d.time),h=B(d.model)?.modelID??d.modelID,g=aL(d.tokens,r.requireBillingCounters),E=B(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=Kt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:Tt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:nt(y,w,"read"),write_bytes:nt(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 jg(t={}){return new Bo(t)}var jr,Yx,Zx,eL,tL,nL,Bo,du=L(()=>{"use strict";In();jr="opencode",Yx=Kx(import.meta.url);Zx=["read","read_file","view","view_file","view_image"],eL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],tL=["filePath","path","file","file_path","filepath","notebook_path","paths"],nL=new Set(["session-job-notification"]);Bo=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??Qx()).map(n=>cu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(cu(e)))return null;try{let n=new(zx())(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 Ue(i,[cu(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:jr,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!==jr)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=Fg(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!==jr)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=Fg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=cL(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as dL,realpath as uL,stat as fL}from"node:fs/promises";import{basename as Wg,dirname as mL,join as Hg,resolve as Bg}from"node:path";function _L(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 gL(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function yL(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 EL(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=gL(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=Tt(u.timestamp),{entry:y,incomplete:T}=yL(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:Tt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,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,k=typeof S?.file_text=="string"?Buffer.byteLength(S.file_text,"utf8"):null;b!==null?_.obs.record(T??m,"written",b,k):be(_.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let S=_L(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(hL.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 pL.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:nt(p,h,"read"),write_bytes:nt(_,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 TL(){return process.env.HOME||process.env.USERPROFILE||""}function qg(t={}){return new uu(t)}var Zn,Xg,pL,hL,uu,Gg=L(()=>{"use strict";In();Zn="copilot",Xg="events.jsonl",pL=new Set(["report_intent"]),hL=new Set(["view"]);uu=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Bg(e.copilotSessionStateDir??Hg(TL(),".copilot","session-state"))}async discover(e,n,r=null){oe(e);let s;try{s=await dL(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Hg(this.sessionStateDir,i,Xg);if(!(await fL(a).catch(()=>null))?.isFile())continue;let c=await uL(a).catch(()=>Bg(a)),d={provider:Zn,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 Wg(n)===Xg&&Wg(mL(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Zn)return{status:"unsupported"};let r=await Ue(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(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!==Zn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await Ue(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ft(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ba(o.data,r);return i?EL(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Vg,readFile as wL,realpath as fu,stat as Jg}from"node:fs/promises";import{basename as qo,dirname as Ns,isAbsolute as pu,join as As,relative as zg,resolve as Xo,sep as Qg}from"node:path";function NL(t){return AL.has(t)||Jn(t)}function RL(){return process.env.HOME||process.env.USERPROFILE||""}function xL(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 Kg(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 LL(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 OL(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&&!vL.has(o))return{status:"unsupported"};let i=DL(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:Tt(typeof y=="number"?y:null),model:null,tokens:{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,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&&CL.has(w))continue;if(S!==null){if(d.has(S))continue;d.add(S)}w==="user"?c.push({bytes:LL(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=Kg(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=Kg(y.usage);S&&(w.meta.tokens=S),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=Tt(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,k=B(y.args),N=typeof k?.path=="string"&&k.path?k.path:typeof k?.file_path=="string"&&k.file_path?k.file_path:null;IL.has(S)?N!==null?w.obs.record(b??"","read",N,null):be(w.io,b):kL.has(S)?N!==null?w.obs.record(b??"","written",N,Ss(k)):be(w.io,b):NL(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"),k=T.entries();g.push({...E,files_read:S,files_written:b,external_io:k,read_bytes:nt(S,k,"read"),write_bytes:nt(b,k,"written"),model_provider:null,pricing_facts:Kt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function mu(t){return qo(t)===hu&&qo(Ns(Ns(t)))===Zg}function Yg(t){return qo(Ns(Ns(Ns(t))))}function DL(t){return qo(Ns(t))}function ML(t,e){let n=zg(e,t);return n===""||!n.startsWith(`..${Qg}`)&&n!==".."&&!pu(n)}function $L(t){if(t instanceof Error&&t.name==="AbortError")throw t}function ey(t={}){return new Go(t)}var er,hu,Zg,vL,SL,bL,IL,kL,AL,CL,Go,_u=L(()=>{"use strict";In();er="kimi",hu="wire.jsonl",Zg="agents",vL=new Set(["1.4","1.5"]),SL=5e5,bL=8*1024*1024,IL=new Set(["read"]),kL=new Set(["write","edit"]),AL=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);CL=new Set(["system_trigger","cron_job","task"]);Go=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Xo(e.kimiHome??process.env.KIMI_CODE_HOME??As(RL(),".kimi-code")),this.sessionsDir=As(this.home,"sessions"),this.indexPath=As(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):SL}async discover(e,n,r=null){oe(e);let s=new Set,o=!1,i=await fu(this.sessionsDir).catch(()=>Xo(this.sessionsDir)),a=f=>{mu(f)&&ML(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Vg(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=As(f,_.name);if(_.isDirectory()&&!_.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else _.isFile()&&_.name===hu&&mu(h)&&a(await fu(h).catch(()=>Xo(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){$L(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:er,sessionid:Yg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Jg(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>bL)return;let s=await wL(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||!pu(l)||qo(l)!==a)continue;let c=zg(this.sessionsDir,Xo(l));if(c.startsWith(`..${Qg}`)||c===".."||pu(c))continue;let d=As(l,Zg),u=await Vg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=As(d,f.name,hu);(await Jg(m).catch(()=>null))?.isFile()&&e(await fu(m).catch(()=>Xo(m)))}}}matches(e,n){return mu(n)&&Yg(n)===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==er)return{status:"unsupported"};let r=await Ue(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==er)return{status:"unsupported"};let s=await Ue(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ft(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=xL(o.data,r);return i?OL(i,e,n,r):{status:"partial"}}}});import{createHash as vu}from"node:crypto";import{createRequire as PL}from"node:module";import{lstat as UL,readFile as FL,readdir as jL,realpath as Tu,stat as ty}from"node:fs/promises";import{basename as $a,dirname as WL,isAbsolute as ny,join as Wr,relative as HL,resolve as kn,sep as BL}from"node:path";function Su(t){return typeof t=="string"&&qL.has(t.toLowerCase())}function Ko(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 ly(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 Ls(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 xs(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function bu(t,e,n){let r={},s=xs(t.cacheWrite5m),o=xs(t.cacheWrite1h),i=xs(t.reasoning),a=xs(t.webSearch),l=xs(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 Pa(){return process.env.HOME||process.env.USERPROFILE||""}function JL(){if(process.env.OPENCODE_DB)return[kn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Wr(Pa(),".local","share");return[Wr(t,"lmplayer","opencode-local.db"),Wr(t,"lmplayer","opencode-dev.db")]}function KL(){return VL("node:sqlite").DatabaseSync}function Y(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function mt(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function ku(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function Jo(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 Ua(t){return`${t.source_id}\0${t.sessionid}`}function rr(t,e){return t<e?-1:t>e?1:0}function gu(t,e){return rr(Ua(t),Ua(e))}function YL(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function ry(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 zL(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>=yu.length)throw new Error("invalid passive session discovery cursor");let i=o,a=ry({source_id:e.source_id,sessionid:e.sessionid}),l=new Map([[yu[i],a]]),c=new Set(yu.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,ry(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 cy(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":QL.includes(e)?"read":ZL.includes(e)?"written":null}function tC(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Fa(t,e=eC){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 dy(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 ja(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:`${Uo}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function lL(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&&!nL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function cL(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=lL(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 yt,f=new Et,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 k;try{k=B(JSON.parse(b.data))}catch{return{status:"partial"}}if(k?.type!=="tool")continue;let N=typeof k.tool=="string"?k.tool.toLowerCase():"",O=rL(k.tool),I=B(k.state),v=B(I?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof I?.callID=="string"&&I.callID?I.callID:b.id;if(O==="written")u.record(A,"written",Ug(v),sL(v));else if(O==="apply_patch"){let R=v?.patchText;if(typeof R=="string")for(let x of oL(R))u.record(A,"written",x.path,x.bytes);else be(f,A)}else if(O==="read"){let R=Ug(v,["filePath","path","file","file_path"]);if(R===null)continue;let x=null;if(I?.status==="completed"){let C=B(B(I.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(x=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",R,x)}else if(N==="webfetch"){m+=1;let R=I?.status==="completed"?I.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:iL(v?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else Jn(k.tool)||be(f,A)}let _=B(d.time),h=B(d.model)?.modelID??d.modelID,g=aL(d.tokens,r.requireBillingCounters),E=B(d.tokens),y=u.files("read"),w=u.files("written"),T=f.entries(),S=Kt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:wt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:w,external_io:T,read_bytes:nt(y,T,"read"),write_bytes:nt(w,T,"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 jg(t={}){return new Bo(t)}var jr,Yx,Zx,eL,tL,nL,Bo,du=L(()=>{"use strict";In();jr="opencode",Yx=Kx(import.meta.url);Zx=["read","read_file","view","view_file","view_image"],eL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],tL=["filePath","path","file","file_path","filepath","notebook_path","paths"],nL=new Set(["session-job-notification"]);Bo=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??Qx()).map(n=>cu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(cu(e)))return null;try{let n=new(zx())(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 Ue(i,[cu(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:jr,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!==jr)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=Fg(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!==jr)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=Fg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=cL(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as dL,realpath as uL,stat as fL}from"node:fs/promises";import{basename as Wg,dirname as mL,join as Hg,resolve as Bg}from"node:path";function _L(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 gL(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function yL(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 EL(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=gL(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=wt(u.timestamp),{entry:y,incomplete:w}=yL(B(u.data)?.modelMetrics,g,E);if(w&&(l=!0),y){let T=a.get(y.native_id);if(T&&JSON.stringify(T)!==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:wt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,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():"",w=typeof E.toolCallId=="string"&&E.toolCallId?E.toolCallId:null,T=E.arguments;if(y==="create"){let S=B(T),b=typeof S?.path=="string"?S.path:null,k=typeof S?.file_text=="string"?Buffer.byteLength(S.file_text,"utf8"):null;b!==null?_.obs.record(w??m,"written",b,k):be(_.io,w)}else if(y==="apply_patch")if(typeof T=="string"){let S=_L(T);if(S.length>0)for(let b of S)_.obs.record(w??m,"written",b.path,b.bytes);else be(_.io,w)}else be(_.io,w);else if(hL.has(y)){let S=B(T),b=typeof S?.path=="string"?S.path:null;b!==null?_.obs.record(w??m,"read",b,null):be(_.io,w)}else pL.has(y)||be(_.io,w)}}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:nt(p,h,"read"),write_bytes:nt(_,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 wL(){return process.env.HOME||process.env.USERPROFILE||""}function qg(t={}){return new uu(t)}var Zn,Xg,pL,hL,uu,Gg=L(()=>{"use strict";In();Zn="copilot",Xg="events.jsonl",pL=new Set(["report_intent"]),hL=new Set(["view"]);uu=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Bg(e.copilotSessionStateDir??Hg(wL(),".copilot","session-state"))}async discover(e,n,r=null){oe(e);let s;try{s=await dL(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Hg(this.sessionStateDir,i,Xg);if(!(await fL(a).catch(()=>null))?.isFile())continue;let c=await uL(a).catch(()=>Bg(a)),d={provider:Zn,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 Wg(n)===Xg&&Wg(mL(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Zn)return{status:"unsupported"};let r=await Ue(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(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!==Zn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await Ue(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ft(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ba(o.data,r);return i?EL(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Vg,readFile as TL,realpath as fu,stat as Jg}from"node:fs/promises";import{basename as qo,dirname as Ns,isAbsolute as pu,join as As,relative as zg,resolve as Xo,sep as Qg}from"node:path";function NL(t){return AL.has(t)||Jn(t)}function RL(){return process.env.HOME||process.env.USERPROFILE||""}function xL(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 Kg(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 LL(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 OL(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&&!vL.has(o))return{status:"unsupported"};let i=DL(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 w=p(E),T=a.get(w);return T||(T={meta:{response_id:w,timestamp:wt(typeof y=="number"?y:null),model:null,tokens:{...ut},files_read:[],files_written:[]},obs:new yt,io:new Et,turnStepKey:null,tokensSource:"none"},a.set(w,T)),T},h=(E,y)=>{if(E.turnStepKey!==null)return;let w=y.turnId===void 0?null:String(y.turnId),T=y.step===void 0?null:String(y.step);w!==null&&T!==null&&(E.turnStepKey=`${w}.${T}`)};for(let E of t){if(r.signal.throwIfAborted(),E.type==="turn.prompt"){let w=B(E.origin),T=typeof w?.kind=="string"?w.kind:null,S=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(T!==null&&CL.has(T))continue;if(S!==null){if(d.has(S))continue;d.add(S)}T==="user"?c.push({bytes:LL(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[w]=u,T=a.get(p(w));if(!T){m=!0;continue}if(T.tokensSource==="record"){m=!0;continue}let S=Kg(E.usage);S&&(T.meta.tokens=S,T.tokensSource="record");continue}if(E.type==="llm.request"){let w=typeof E.turnStep=="string"?E.turnStep:null,T=(typeof E.modelAlias=="string"&&E.modelAlias?E.modelAlias:null)??(typeof E.model=="string"&&E.model?E.model:null);w!==null&&T!==null&&(l.has(w)?l.get(w)!==T&&l.set(w,null):l.set(w,T));continue}if(E.type!=="context.append_loop_event")continue;let y=B(E.event);if(y){if(y.type==="step.begin"){let w=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(w===null)continue;let T=_(w,E.time);if(a.size>r.maxRows)return{status:"partial"};if(u.add(w),h(T,y),c.length>0){for(let S of c)T.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 w=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(w===null)continue;let T=_(w,E.time);if(a.size>r.maxRows)return{status:"partial"};u.delete(w),f=w,h(T,y);let S=Kg(y.usage);S&&(T.meta.tokens=S),T.tokensSource="end",T.meta.timestamp===null&&(T.meta.timestamp=wt(typeof E.time=="number"?E.time:null));continue}if(y.type==="tool.call"){let w=typeof y.stepUuid=="string"&&y.stepUuid?y.stepUuid:null;if(w===null)continue;let T=_(w,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,k=B(y.args),N=typeof k?.path=="string"&&k.path?k.path:typeof k?.file_path=="string"&&k.file_path?k.file_path:null;IL.has(S)?N!==null?T.obs.record(b??"","read",N,null):be(T.io,b):kL.has(S)?N!==null?T.obs.record(b??"","written",N,Ss(k)):be(T.io,b):NL(S)||be(T.io,b);continue}}}let g=[];for(let{meta:E,obs:y,io:w,turnStepKey:T}of a.values()){E.model===null&&T!==null&&(E.model=l.get(T)??null);let S=y.files("read"),b=y.files("written"),k=w.entries();g.push({...E,files_read:S,files_written:b,external_io:k,read_bytes:nt(S,k,"read"),write_bytes:nt(b,k,"written"),model_provider:null,pricing_facts:Kt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function mu(t){return qo(t)===hu&&qo(Ns(Ns(t)))===Zg}function Yg(t){return qo(Ns(Ns(Ns(t))))}function DL(t){return qo(Ns(t))}function ML(t,e){let n=zg(e,t);return n===""||!n.startsWith(`..${Qg}`)&&n!==".."&&!pu(n)}function $L(t){if(t instanceof Error&&t.name==="AbortError")throw t}function ey(t={}){return new Go(t)}var er,hu,Zg,vL,SL,bL,IL,kL,AL,CL,Go,_u=L(()=>{"use strict";In();er="kimi",hu="wire.jsonl",Zg="agents",vL=new Set(["1.4","1.5"]),SL=5e5,bL=8*1024*1024,IL=new Set(["read"]),kL=new Set(["write","edit"]),AL=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);CL=new Set(["system_trigger","cron_job","task"]);Go=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Xo(e.kimiHome??process.env.KIMI_CODE_HOME??As(RL(),".kimi-code")),this.sessionsDir=As(this.home,"sessions"),this.indexPath=As(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):SL}async discover(e,n,r=null){oe(e);let s=new Set,o=!1,i=await fu(this.sessionsDir).catch(()=>Xo(this.sessionsDir)),a=f=>{mu(f)&&ML(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Vg(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=As(f,_.name);if(_.isDirectory()&&!_.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else _.isFile()&&_.name===hu&&mu(h)&&a(await fu(h).catch(()=>Xo(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){$L(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:er,sessionid:Yg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Jg(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>bL)return;let s=await TL(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||!pu(l)||qo(l)!==a)continue;let c=zg(this.sessionsDir,Xo(l));if(c.startsWith(`..${Qg}`)||c===".."||pu(c))continue;let d=As(l,Zg),u=await Vg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=As(d,f.name,hu);(await Jg(m).catch(()=>null))?.isFile()&&e(await fu(m).catch(()=>Xo(m)))}}}matches(e,n){return mu(n)&&Yg(n)===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==er)return{status:"unsupported"};let r=await Ue(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ft(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==er)return{status:"unsupported"};let s=await Ue(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ft(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=xL(o.data,r);return i?OL(i,e,n,r):{status:"partial"}}}});import{createHash as vu}from"node:crypto";import{createRequire as PL}from"node:module";import{lstat as UL,readFile as FL,readdir as jL,realpath as wu,stat as ty}from"node:fs/promises";import{basename as $a,dirname as WL,isAbsolute as ny,join as Wr,relative as HL,resolve as kn,sep as BL}from"node:path";function Su(t){return typeof t=="string"&&qL.has(t.toLowerCase())}function Ko(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 ly(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 Ls(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 xs(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function bu(t,e,n){let r={},s=xs(t.cacheWrite5m),o=xs(t.cacheWrite1h),i=xs(t.reasoning),a=xs(t.webSearch),l=xs(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 Pa(){return process.env.HOME||process.env.USERPROFILE||""}function JL(){if(process.env.OPENCODE_DB)return[kn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Wr(Pa(),".local","share");return[Wr(t,"lmplayer","opencode-local.db"),Wr(t,"lmplayer","opencode-dev.db")]}function KL(){return VL("node:sqlite").DatabaseSync}function z(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function mt(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function ku(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function Jo(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 Ua(t){return`${t.source_id}\0${t.sessionid}`}function rr(t,e){return t<e?-1:t>e?1:0}function gu(t,e){return rr(Ua(t),Ua(e))}function YL(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function ry(t){let e=z(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 zL(t){if(t===void 0)return null;let e;try{e=z(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>=yu.length)throw new Error("invalid passive session discovery cursor");let i=o,a=ry({source_id:e.source_id,sessionid:e.sessionid}),l=new Map([[yu[i],a]]),c=new Set(yu.slice(0,i));return{pos:l,done:c,rr:0}}if(e.version!==2)throw new Error("invalid passive session discovery cursor");let n=z(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,ry(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 cy(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":QL.includes(e)?"read":ZL.includes(e)?"written":null}function tC(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Fa(t,e=eC){let n=z(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 dy(t){let e=z(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=z(r),o=s?.new_string??s?.newString;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function ja(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 rC(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 nC)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 sy(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 oy(t,e){Jo(e);let n=await ty(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await FL(t,{signal:e.signal});e.signal.throwIfAborted();let s=await ty(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Iu}:sha256:${vu("sha256").update(r).digest("hex")}`,data:r}}function sC(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 oC(t){return $a(WL(t))==="subagents"}function iC(t){let e=Y(t);if(!e)return null;let n=mt(e.input_tokens),r=mt(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:mt(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:mt(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 aC(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=sy(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=sy(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 lC(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 cC(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 dC(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),cC(i))){n.add(a);let l=lC(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 uC(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=xs(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 fC(t,e,n,r,s=!1){let o=aC(t,r),{promptBytes:i,parent:a,resolve:l}=dC(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:ku(p.timestamp),model:null,tokens:{...Vo},files_read:[],files_written:[]},obs:new tr,io:new nr,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 k=l(b);w=k.kind==="found"?k.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=iC(g);E&&(h.meta.tokens=E),uC(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=cy(y.name),S=tC(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let k=Fa(S,["file_path","filePath","path","file"]);if(k===null)continue;let N=o.get(T),O=N===void 0||N.cleanPath!==null&&N.cleanPath!==k?null:N.bytes;h.obs.record(T,"read",k,O)}else if(w==="written")h.obs.record(T,"written",Fa(S),dy(S));else if(w==="apply_patch"){let k=typeof S=="string"?S:Y(S)?.input;if(typeof k=="string")for(let N of ja(k))h.obs.record(T,"written",N.path,N.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:ly(Y(S)?.url),bytes:null,basis:"unknown"}):Su(y.name)||Ko(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:Ls(E,T,"read"),write_bytes:Ls(y,T,"written"),model_provider:null,pricing_facts:bu(g,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function mC(t){let e=Y(t);if(!e)return null;let n=mt(e.input_tokens),r=mt(e.cached_input_tokens),s=mt(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:mt(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 pC(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 ja(o))e.record(r,"written",i.path,i.bytes);return}if(typeof o=="string"){let i=rC(o);if(i!==null){if(r!==null)for(let a of ja(i))e.record(r,"written",a.path,a.bytes);return}}Su(s)||Ko(n,r)}function hC(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 _C(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new tr,c=new nr,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")pC(h,l,c);else if(h.type==="local_shell_call")Ko(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=hC(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 tr,c=new nr,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=mC(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 tr,io:new nr,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=ku(_.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 tr,c=new nr,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),k=bu({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:Ls(T,S,"read"),write_bytes:Ls(w,S,"written"),model_provider:a,pricing_facts:k})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function gC(t,e=!1){let n=Y(t);if(!n)return{...Vo};let r=n.input===void 0?e?null:0:mt(n.input),s=n.output===void 0?e?null:0:mt(n.output),o=n.reasoning===void 0?e?null:0:mt(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:mt(i.read),l=i?.write===void 0?e?null:0:mt(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...Vo}: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?{...Vo}:r+s+o+a+l===0?{...Vo}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function iy(t,e,n){Jo(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=mt(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=vu("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:`${Iu}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function EC(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&&!yC.has(i)&&(r=!0))}return n?e:r?"unknown":null}function TC(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=EC(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 tr,f=new nr,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 k;try{k=Y(JSON.parse(b.data))}catch{return{status:"partial"}}if(k?.type!=="tool")continue;let N=typeof k.tool=="string"?k.tool.toLowerCase():"",O=cy(k.tool),I=Y(k.state),v=Y(I?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof I?.callID=="string"&&I.callID?I.callID:b.id;if(O==="written")u.record(A,"written",Fa(v),dy(v));else if(O==="apply_patch"){let R=v?.patchText;if(typeof R=="string")for(let x of ja(R))u.record(A,"written",x.path,x.bytes);else Ko(f,A)}else if(O==="read"){let R=Fa(v,["filePath","path","file","file_path"]);if(R===null)continue;let x=null;if(I?.status==="completed"){let C=Y(Y(I.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(x=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",R,x)}else if(N==="webfetch"){m+=1;let R=I?.status==="completed"?I.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:ly(v?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else Su(k.tool)||Ko(f,A)}let _=Y(d.time),h=Y(d.model)?.modelID??d.modelID,g=gC(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=bu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:ku(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Ls(y,w,"read"),write_bytes:Ls(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 Eu(t,e){if(!ny(t))return null;let n=await UL(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await Tu(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await Tu(s).catch(()=>kn(s)),i=HL(o,r);if(i===""||!i.startsWith(`..${BL}`)&&i!==".."&&!ny(i))return r}return null}async function ay(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await jL(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>rr(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=Wr(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 Tu(f).catch(()=>kn(f));(s===null||rr(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(rr),truncated:a}}function wC(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 uy(t={}){return new wu(t)}var tr,XL,nr,qL,Rs,Vo,GL,Iu,VL,yu,QL,ZL,eC,nC,yC,wu,fy=L(()=>{"use strict";tu();nu();La();su();Cg();$g();du();Gg();_u();tr=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)}},XL=0,nr=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${XL++}`,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)}},qL=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);Rs=["claude","codex","lmplayer",Yn,zn,jr,Zn,Qn,er,"muse","miniplayer"],Vo={input_uncached:null,input_cached:null,input_cache_write:null,output:null},GL=5e5,Iu="bx3",VL=PL(import.meta.url);yu=["claude","codex","lmplayer"];QL=["read","read_file","view","view_file","view_image"],ZL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],eC=["filePath","path","file","file_path","filepath","notebook_path","paths"];nC=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];yC=new Set(["session-job-notification"]);wu=class{claudeProjectsDir;codexSessionDirs;lmplayerDbPaths;sqliteBusyTimeoutMs;maxDiscoveryTraversalVisits;agyReader;dshReader;qwenReader;opencodeReader;copilotReader;kimiReader;sessionDataReaders;constructor(e={}){this.sessionDataReaders=Object.fromEntries([dg(e.museDataHome),xa(e.miniplayerHome)].map(n=>[n.provider,new bs(n)])),this.claudeProjectsDir=kn(e.claudeProjectsDir??Wr(Pa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Wr(Pa(),".codex","sessions"),Wr(Pa(),".code","sessions")]).map(n=>kn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??JL()).map(n=>kn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):GL,this.agyReader=Sg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=Lg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=Mg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=jg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=qg(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=ey(e.kimiHome?{kimiHome:e.kimiHome}:{})}capabilities(){let e=vu("sha256").update(JSON.stringify({claudeProjectsDir:this.claudeProjectsDir,codexSessionDirs:this.codexSessionDirs,lmplayerDbPaths:this.lmplayerDbPaths,agyExtractionRevisionTag:Ca,sessionData:Object.values(this.sessionDataReaders).map(({format:n})=>[n.provider,n.root,n.revision])})).digest("hex");return{scope:"account",revision:`${Iu}:${e}`,providers:[...Rs],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Qn]:"per_response",[zn]:"per_response",[Yn]:"partial",[Zn]:"partial",[er]:"per_response"}}}async discover(e){if(Jo(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=zL(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=Rs.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(Rs.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?Ua({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,w=T===null?E:E.filter(S=>rr(Ua(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 Rs.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:YL({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Jo(n),!Rs.includes(e.provider))return{status:"unsupported"};if(e.provider==="claude"||e.provider==="codex"){let r=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,s=await Eu(e.source_id,r);if(!s||!this.jsonlSourceMatches(e,s))return{status:"unavailable"};let o=await oy(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===Yn?this.agyReader.inspect(e,n):e.provider===zn?this.dshReader.inspect(e,n):e.provider===jr?this.opencodeReader.inspect(e,n):e.provider===Zn?this.copilotReader.inspect(e,n):e.provider===Qn?this.qwenReader.inspect(e,n):e.provider===er?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Jo(r),e.provider==="claude"||e.provider==="codex"){let s=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,o=await Eu(e.source_id,s);if(!o||!this.jsonlSourceMatches(e,o))return{status:"unavailable"};let i=await oy(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=sC(i.data,r);return a?e.provider==="claude"?fC(a,e,n,r,oC(o)):_C(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===Yn)return this.agyReader.read(e,n,r);if(e.provider===zn)return this.dshReader.read(e,n,r);if(e.provider===jr)return this.opencodeReader.read(e,n,r);if(e.provider===Qn)return this.qwenReader.read(e,n,r);if(e.provider===Zn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===er?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 ay(this.claudeProjectsDir,r,this.maxDiscoveryTraversalVisits,n,o);return{sources:i.map(l=>({provider:"claude",sessionid:$a(l,".jsonl"),source_id:l})).sort(gu),truncated:a}}if(e===1){let i=[],a=!1;for(let l of[...this.codexSessionDirs].sort(rr)){let c=await ay(l,r,this.maxDiscoveryTraversalVisits,n,o);c.truncated&&(a=!0);for(let d of c.paths){let u=$a(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(gu).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[Rs[e]].discover(n,r,o)}jsonlSourceMatches(e,n){let r=$a(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(kn(e)))return null;try{let n=new(KL())(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=>kn(a)))].sort(rr);for(let a of o){e.signal.throwIfAborted();let l=await Eu(a,[kn(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&&rr(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:wC(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(gu).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=iy(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=iy(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=TC(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Yo(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 Hr(t){let e=Yo(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 oy(t,e){Jo(e);let n=await ty(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await FL(t,{signal:e.signal});e.signal.throwIfAborted();let s=await ty(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Iu}:sha256:${vu("sha256").update(r).digest("hex")}`,data:r}}function sC(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=z(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function oC(t){return $a(WL(t))==="subagents"}function iC(t){let e=z(t);if(!e)return null;let n=mt(e.input_tokens),r=mt(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:mt(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:mt(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 aC(t,e){let n=new Map;for(let r of t){if(e.signal.throwIfAborted(),r.type!=="user")continue;let s=z(r.message),o=Array.isArray(s?.content)?s.content:null;if(!o)continue;let i=o.map(z).filter(d=>d?.type==="tool_result"),a=i.length===1,l=z(r.toolUseResult),c=l?.type==="text"?z(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=sy(d.content);u=m!==null?Buffer.byteLength(m,"utf8"):null}else if(Array.isArray(d.content)){let m=d.content.map(z).filter(p=>p?.type==="text"&&typeof p.text=="string").map(p=>p.text);if(m.length===1){let p=sy(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 lC(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=z(s);o?.type==="text"&&typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}if(r)return n}return null}function cC(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=z(t.message)?.content;return!(Array.isArray(e)&&e.some(n=>z(n)?.type==="tool_result"))}function dC(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),cC(i))){n.add(a);let l=lC(z(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 uC(t,e){let n=z(e.cache_creation),r=z(e.output_tokens_details),s=z(e.server_tool_use),o=(i,a)=>{let l=xs(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 fC(t,e,n,r,s=!1){let o=aC(t,r),{promptBytes:i,parent:a,resolve:l}=dC(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 _=z(p.message);if(!_||typeof _.id!="string"||_.id.length===0)continue;let h=f.get(_.id);if(!h){if(h={meta:{response_id:_.id,timestamp:ku(p.timestamp),model:null,tokens:{...Vo},files_read:[],files_written:[]},obs:new tr,io:new nr,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 w=[],T=y.uuid;for(;T!==null&&!c.has(T);){let S=T;c.add(S),w.push(S);let b=a.get(S)??null;if(b===null){T=null;continue}let k=l(b);T=k.kind==="found"?k.uuid:null}for(let S=w.length-1;S>=0;S-=1)d(h.io,w[S])}}}let g=z(_.usage);if(g){let E=iC(g);E&&(h.meta.tokens=E),uC(h.pricingRaw,g)}if(typeof _.model=="string"&&_.model&&(h.meta.model=_.model),Array.isArray(_.content))for(let E of _.content){let y=z(E);if(y?.type!=="tool_use")continue;let w=typeof y.id=="string"&&y.id?y.id:_.id,T=cy(y.name),S=tC(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(T==="read"){let k=Fa(S,["file_path","filePath","path","file"]);if(k===null)continue;let N=o.get(w),O=N===void 0||N.cleanPath!==null&&N.cleanPath!==k?null:N.bytes;h.obs.record(w,"read",k,O)}else if(T==="written")h.obs.record(w,"written",Fa(S),dy(S));else if(T==="apply_patch"){let k=typeof S=="string"?S:z(S)?.input;if(typeof k=="string")for(let N of ja(k))h.obs.record(w,"written",N.path,N.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:w,ref:ly(z(S)?.url),bytes:null,basis:"unknown"}):Su(y.name)||Ko(h.io,w)}}let m=[];for(let{meta:p,obs:_,io:h,pricingRaw:g}of f.values()){let E=_.files("read"),y=_.files("written"),w=h.entries();m.push({...p,files_read:E,files_written:y,external_io:w,read_bytes:Ls(E,w,"read"),write_bytes:Ls(y,w,"written"),model_provider:null,pricing_facts:bu(g,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function mC(t){let e=z(t);if(!e)return null;let n=mt(e.input_tokens),r=mt(e.cached_input_tokens),s=mt(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:mt(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 pC(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 ja(o))e.record(r,"written",i.path,i.bytes);return}if(typeof o=="string"){let i=rC(o);if(i!==null){if(r!==null)for(let a of ja(i))e.record(r,"written",a.path,a.bytes);return}}Su(s)||Ko(n,r)}function hC(t){let n=z(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=z(r[i]);a&&typeof a.text=="string"&&(s+=Buffer.byteLength(a.text,"utf8"),o=!0)}return o?{bytes:s}:"injected"}function _C(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new tr,c=new nr,d=0,u=!1,f=!0,m=new Set;for(let _ of t){r.signal.throwIfAborted();let h=z(_.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 w=typeof h.model=="string"&&h.model?h.model:null;w&&(i=w),w&&typeof h.turn_id=="string"&&o.set(h.turn_id,w);continue}if(_.type==="response_item"&&h){if(h.type==="function_call"||h.type==="custom_tool_call")pC(h,l,c);else if(h.type==="local_shell_call")Ko(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 w=hC(h),T=typeof h.id=="string"&&h.id?h.id:null;w==="unknown"?c.record({direction:"read",kind:"prompt",id:T,ref:null,bytes:null,basis:"unknown"}):w!=="injected"&&(T===null?c.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"}):m.has(T)||(m.add(T),c.record({direction:"read",kind:"prompt",id:T,ref:null,bytes:w.bytes,basis:"input_text"})))}continue}if(_.type==="event_msg"&&h?.type==="token_count"){u=!0,f&&(l=new tr,c=new nr,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=mC(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 tr,io:new nr,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=ku(_.timestamp),y.meta.model=E??null,y.meta.tokens=g,y.rawUsage=z(h.usage),y.obs.absorb(l),y.io.absorb(c),y.webSearch+=d,l=new tr,c=new nr,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 w=h.files("read"),T=h.files("written"),S=g.entries(),b=z(E),k=bu({reasoning:b?.reasoning_output_tokens,webSearch:y>0?y:void 0},_.tokens.output,_.tokens.input_cache_write);p.push({..._,files_read:w,files_written:T,external_io:S,read_bytes:Ls(w,S,"read"),write_bytes:Ls(T,S,"written"),model_provider:a,pricing_facts:k})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function gC(t,e=!1){let n=z(t);if(!n)return{...Vo};let r=n.input===void 0?e?null:0:mt(n.input),s=n.output===void 0?e?null:0:mt(n.output),o=n.reasoning===void 0?e?null:0:mt(n.reasoning),i=z(n.cache),a=i?.read===void 0?e?null:0:mt(i.read),l=i?.write===void 0?e?null:0:mt(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...Vo}: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?{...Vo}:r+s+o+a+l===0?{...Vo}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function iy(t,e,n){Jo(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=mt(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=vu("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:`${Iu}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function EC(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=z(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&&!yC.has(i)&&(r=!0))}return n?e:r?"unknown":null}function wC(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=z(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=EC(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=z(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=z(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 tr,f=new nr,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 k;try{k=z(JSON.parse(b.data))}catch{return{status:"partial"}}if(k?.type!=="tool")continue;let N=typeof k.tool=="string"?k.tool.toLowerCase():"",O=cy(k.tool),I=z(k.state),v=z(I?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof I?.callID=="string"&&I.callID?I.callID:b.id;if(O==="written")u.record(A,"written",Fa(v),dy(v));else if(O==="apply_patch"){let R=v?.patchText;if(typeof R=="string")for(let x of ja(R))u.record(A,"written",x.path,x.bytes);else Ko(f,A)}else if(O==="read"){let R=Fa(v,["filePath","path","file","file_path"]);if(R===null)continue;let x=null;if(I?.status==="completed"){let C=z(z(I.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(x=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",R,x)}else if(N==="webfetch"){m+=1;let R=I?.status==="completed"?I.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:ly(v?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else Su(k.tool)||Ko(f,A)}let _=z(d.time),h=z(d.model)?.modelID??d.modelID,g=gC(d.tokens,r.requireBillingCounters),E=z(d.tokens),y=u.files("read"),w=u.files("written"),T=f.entries(),S=bu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:ku(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:w,external_io:T,read_bytes:Ls(y,T,"read"),write_bytes:Ls(w,T,"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 Eu(t,e){if(!ny(t))return null;let n=await UL(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await wu(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await wu(s).catch(()=>kn(s)),i=HL(o,r);if(i===""||!i.startsWith(`..${BL}`)&&i!==".."&&!ny(i))return r}return null}async function ay(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await jL(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>rr(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=Wr(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 wu(f).catch(()=>kn(f));(s===null||rr(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(rr),truncated:a}}function TC(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 uy(t={}){return new Tu(t)}var tr,XL,nr,qL,Rs,Vo,GL,Iu,VL,yu,QL,ZL,eC,nC,yC,Tu,fy=L(()=>{"use strict";tu();nu();La();su();Cg();$g();du();Gg();_u();tr=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)}},XL=0,nr=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${XL++}`,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)}},qL=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);Rs=["claude","codex","lmplayer",Yn,zn,jr,Zn,Qn,er,"muse","miniplayer"],Vo={input_uncached:null,input_cached:null,input_cache_write:null,output:null},GL=5e5,Iu="bx3",VL=PL(import.meta.url);yu=["claude","codex","lmplayer"];QL=["read","read_file","view","view_file","view_image"],ZL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],eC=["filePath","path","file","file_path","filepath","notebook_path","paths"];nC=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];yC=new Set(["session-job-notification"]);Tu=class{claudeProjectsDir;codexSessionDirs;lmplayerDbPaths;sqliteBusyTimeoutMs;maxDiscoveryTraversalVisits;agyReader;dshReader;qwenReader;opencodeReader;copilotReader;kimiReader;sessionDataReaders;constructor(e={}){this.sessionDataReaders=Object.fromEntries([dg(e.museDataHome),xa(e.miniplayerHome)].map(n=>[n.provider,new bs(n)])),this.claudeProjectsDir=kn(e.claudeProjectsDir??Wr(Pa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Wr(Pa(),".codex","sessions"),Wr(Pa(),".code","sessions")]).map(n=>kn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??JL()).map(n=>kn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):GL,this.agyReader=Sg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=Lg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=Mg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=jg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=qg(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=ey(e.kimiHome?{kimiHome:e.kimiHome}:{})}capabilities(){let e=vu("sha256").update(JSON.stringify({claudeProjectsDir:this.claudeProjectsDir,codexSessionDirs:this.codexSessionDirs,lmplayerDbPaths:this.lmplayerDbPaths,agyExtractionRevisionTag:Ca,sessionData:Object.values(this.sessionDataReaders).map(({format:n})=>[n.provider,n.root,n.revision])})).digest("hex");return{scope:"account",revision:`${Iu}:${e}`,providers:[...Rs],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Qn]:"per_response",[zn]:"per_response",[Yn]:"partial",[Zn]:"partial",[er]:"per_response"}}}async discover(e){if(Jo(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=zL(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=Rs.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(Rs.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 w=g?Ua({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,T=w===null?E:E.filter(S=>rr(Ua(S),w)>0);l.set(h,T.length>e.maxSources),a.set(h,T.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 w=g[E-1];p[h]={source_id:w.source_id,sessionid:w.sessionid}}else{let w=r.get(h);w&&(p[h]=w)}}return Rs.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:YL({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Jo(n),!Rs.includes(e.provider))return{status:"unsupported"};if(e.provider==="claude"||e.provider==="codex"){let r=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,s=await Eu(e.source_id,r);if(!s||!this.jsonlSourceMatches(e,s))return{status:"unavailable"};let o=await oy(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===Yn?this.agyReader.inspect(e,n):e.provider===zn?this.dshReader.inspect(e,n):e.provider===jr?this.opencodeReader.inspect(e,n):e.provider===Zn?this.copilotReader.inspect(e,n):e.provider===Qn?this.qwenReader.inspect(e,n):e.provider===er?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Jo(r),e.provider==="claude"||e.provider==="codex"){let s=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,o=await Eu(e.source_id,s);if(!o||!this.jsonlSourceMatches(e,o))return{status:"unavailable"};let i=await oy(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=sC(i.data,r);return a?e.provider==="claude"?fC(a,e,n,r,oC(o)):_C(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===Yn)return this.agyReader.read(e,n,r);if(e.provider===zn)return this.dshReader.read(e,n,r);if(e.provider===jr)return this.opencodeReader.read(e,n,r);if(e.provider===Qn)return this.qwenReader.read(e,n,r);if(e.provider===Zn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===er?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 ay(this.claudeProjectsDir,r,this.maxDiscoveryTraversalVisits,n,o);return{sources:i.map(l=>({provider:"claude",sessionid:$a(l,".jsonl"),source_id:l})).sort(gu),truncated:a}}if(e===1){let i=[],a=!1;for(let l of[...this.codexSessionDirs].sort(rr)){let c=await ay(l,r,this.maxDiscoveryTraversalVisits,n,o);c.truncated&&(a=!0);for(let d of c.paths){let u=$a(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(gu).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[Rs[e]].discover(n,r,o)}jsonlSourceMatches(e,n){let r=$a(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(kn(e)))return null;try{let n=new(KL())(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=>kn(a)))].sort(rr);for(let a of o){e.signal.throwIfAborted();let l=await Eu(a,[kn(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&&rr(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:TC(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(gu).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=iy(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=iy(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=wC(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Yo(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 Hr(t){let e=Yo(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?vC(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 vC(t,e){for(let[n,r]of Object.entries(e))if(r!==void 0){if(n==="tokens"&&my(t.tokens)&&my(r)){t.tokens={...t.tokens,...r};continue}t[n]=r}}function my(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function py(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 Wa=L(()=>{"use strict"});import{createHash as hy}from"node:crypto";import{opendir as SC,open as bC,realpath as _y}from"node:fs/promises";import{constants as Au}from"node:fs";import{join as IC,relative as kC,isAbsolute as AC,basename as NC,dirname as RC}from"node:path";function LC(t,e,n){try{if(t==="pi"){let d=e.split(`
@@ -21,7 +21,7 @@ var iR=Object.create;var Jd=Object.defineProperty;var aR=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=Hr(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=An(u.input),m=An(u.cached),p=An(u.output),_=An(u.thoughts),h=gy(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 Nu(t,e){let n=async(s,o)=>{o.signal.throwIfAborted();let i=await _y(s),a=await _y(e),l=kC(a,i);if(l===".."||l.startsWith("../")||l.startsWith("..\\")||AC(l))throw Error("outside native root");let c=await bC(i,Au.O_RDONLY|Au.O_NOFOLLOW|Au.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:Hr(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 SC(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=IC(c,f.name);if(f.isDirectory())await l(m,d+1);else if(f.isFile()&&/\.jsonl?$/.test(f.name)&&(t!=="gemini"||NC(RC(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:hy("sha256").update(i).digest("hex")}},async read(s,o,i){let a=await n(s.source_id,i);if(hy("sha256").update(a).digest("hex")!==o)return{status:"partial"};if(a.split(`
24
- `).length>i.maxRows)return{status:"partial"};let l=LC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var An,xC,gy,yy=L(()=>{"use strict";Wa();An=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,xC=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},gy=(t,e,n)=>({response_id:t,timestamp:xC(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 CC,realpath as OC}from"node:fs/promises";import{join as pt,resolve as Ty}from"node:path";import{homedir as DC}from"node:os";function MC(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&&Ru(_)===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=Kn(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=>Ru(f)===null))return n=!0,null;let u=d.reduce((f,m)=>f+m,0);return Ru(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 Ey(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=Ty(i),l;try{if(!(await CC(a)).isFile())return{sources:s,complete:!1};let c=await OC(a);if(o.has(c))continue;o.add(c),l=bn(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 $C(t,e,n){let r=e.HOME||e.USERPROFILE||DC(),s=e.XDG_DATA_HOME||pt(r,".local","share"),o=e.XDG_CONFIG_HOME||pt(r,".config");if(t==="pi")return Nu("pi",e.PI_CODING_AGENT_DIR?pt(e.PI_CODING_AGENT_DIR,"sessions"):pt(r,".pi","agent","sessions"));if(t==="gemini")return Nu("gemini",pt(e.GEMINI_CLI_HOME||pt(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new bs(xa(e.MINIPLAYER_HOME||pt(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=[pt(s,"opencode","opencode.db"),pt(s,"opencode","opencode-local.db"),pt(o,"opencode","opencode.db")].map(d=>Ty(d)),c=new Bo({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>Ey(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 Go({kimiHome:e.KIMI_CODE_HOME||pt(r,".kimi-code")}):new jo({agyConversationsDir:pt(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]:[pt(s,"lmplayer","opencode-local.db"),pt(s,"lmplayer","opencode-dev.db")],a=uy({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>Ey(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function wy(t,e,n,r){if(!Ha.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=bn(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??$C(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 k=new Date(b.timestamp).toISOString();if(S.get(t.attempt_key,t.provider,e,k,k))return}}finally{l.pragma("busy_timeout = "+w)}m=T}return m?MC(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 Ha,Ru,vy=L(()=>{"use strict";$o();fy();_u();du();su();tu();La();Fo();yy();Ha=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],Ru=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function zt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var zo=L(()=>{"use strict"});var Ba,Sy,xu=L(()=>{"use strict";Ba={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"},Sy=`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=LC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var An,xC,gy,yy=L(()=>{"use strict";Wa();An=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,xC=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},gy=(t,e,n)=>({response_id:t,timestamp:xC(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 CC,realpath as OC}from"node:fs/promises";import{join as pt,resolve as wy}from"node:path";import{homedir as DC}from"node:os";function MC(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&&Ru(_)===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=Kn(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=>Ru(f)===null))return n=!0,null;let u=d.reduce((f,m)=>f+m,0);return Ru(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 Ey(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=wy(i),l;try{if(!(await CC(a)).isFile())return{sources:s,complete:!1};let c=await OC(a);if(o.has(c))continue;o.add(c),l=bn(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 $C(t,e,n){let r=e.HOME||e.USERPROFILE||DC(),s=e.XDG_DATA_HOME||pt(r,".local","share"),o=e.XDG_CONFIG_HOME||pt(r,".config");if(t==="pi")return Nu("pi",e.PI_CODING_AGENT_DIR?pt(e.PI_CODING_AGENT_DIR,"sessions"):pt(r,".pi","agent","sessions"));if(t==="gemini")return Nu("gemini",pt(e.GEMINI_CLI_HOME||pt(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new bs(xa(e.MINIPLAYER_HOME||pt(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=[pt(s,"opencode","opencode.db"),pt(s,"opencode","opencode-local.db"),pt(o,"opencode","opencode.db")].map(d=>wy(d)),c=new Bo({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>Ey(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 Go({kimiHome:e.KIMI_CODE_HOME||pt(r,".kimi-code")}):new jo({agyConversationsDir:pt(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]:[pt(s,"lmplayer","opencode-local.db"),pt(s,"lmplayer","opencode-dev.db")],a=uy({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>Ey(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function Ty(t,e,n,r){if(!Ha.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=bn(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??$C(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 w=y.filter(S=>Date.parse(S.timestamp)>=g&&Date.parse(S.timestamp)<=E);if(!w.length)continue;if(m)return;let T=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 w){let k=new Date(b.timestamp).toISOString();if(S.get(t.attempt_key,t.provider,e,k,k))return}}finally{l.pragma("busy_timeout = "+T)}m=w}return m?MC(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 Ha,Ru,vy=L(()=>{"use strict";$o();fy();_u();du();su();tu();La();Fo();yy();Ha=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],Ru=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function zt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var zo=L(()=>{"use strict"});var Ba,Sy,xu=L(()=>{"use strict";Ba={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"},Sy=`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 Cy}from"node:crypto";import{mkdirSync as Oy,readFileSync as PC,renameSync as UC,writeFileSync as FC,existsSync as Dy}from"node:fs";import{homedir as jC}from"node:os";import{dirname as My,join as Va,resolve as Ja}from"node:path";import{fileURLToPath as WC}from"node:url";function GC(){return Va(jC(),".lmctl","cache","lmprice")}function Ds(t,e){return Va(t,e)}function Ka(t,e){if(!t||!e)return null;let n=Qo.get(t),r=Qo.get(e);return n===void 0||r===void 0?null:Cy("sha256").update(n).update(r).digest("hex")}function Br(t){try{let e=PC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&Qo.set(n,e),n}catch{return null}}function Py(t,e){let n=`${t}.tmp-${process.pid}`;FC(n,e),UC(n,t)}function Lu(t){return t===null||typeof t=="number"}function Xr(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 Lu(s.input_per_1m_tokens)&&Lu(s.output_per_1m_tokens)&&Lu(s.input_cache_read_per_1m_tokens)})}function qr(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"&&JC.has(o.evidence)});return n&&r}function KC(t){let e=Br(Ds(t,$y)),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=Br(Ds(t,VC));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 YC(t){let e=KC(t),n=Br(Ds(t,qa)),r=Br(Ds(t,Ga));return e.pair_sha256&&Ka(Xr(n)?n:null,qr(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{...Iy},aliases:{...Iy}}}:{catalog:Xr(n)?n:null,aliases:qr(r)?r:null,meta:e}}function ky(t,e){try{return Oy(t,{recursive:!0}),Py(Ds(t,$y),JSON.stringify(e)),!0}catch{return!1}}function Cu(t){return(t&&typeof t=="object"?Qo.get(t):void 0)??JSON.stringify(t)}function Xa(t,e,n){try{Oy(t,{recursive:!0}),Py(Ds(t,e),Cu(n))}catch{}}function zC(t,e){let n=QC(t),r=n?[Ja(n,"data",e)]:[Ja(t,"..","..","data",e)];for(let s of r)if(Dy(s))return s;return null}function QC(t){let e=Ja(t);for(;;){if(Dy(Ja(e,"package.json")))return e;let n=My(e);if(n===e)return null;e=n}}function Ay(t,e,n){let r=n!==void 0?n:zC(t,e);return r===null?null:Br(r)}function Ms(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return by;let n=Number(e);return!Number.isFinite(n)||n<0?by:n*1e3}function ZC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function Ny(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout(XC)});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(qC)});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 vt(t={}){return Object.keys(t).length===0?(Ry??=xy(t),Ry):xy(t)}async function xy(t){let e=My(WC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:ZC();if(n!==null&&n!==""){let _=Br(Va(n,qa)),h=Br(Va(n,Ga));if(Xr(_)&&qr(h)){let g={sha256:Ka(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return Ou=g.generatedAt,g}return Ly(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??GC(),o=t.now??Date.now(),i=t.ttlMs??Ms(),a=YC(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 Ny(r,HC,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"&&(Xr(_.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 Ny(r,BC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(qr(_.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 _=Cy("sha256").update(Cu(c)).update(Cu(d)).digest("hex");ky(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Xa(s,qa,c),Xa(s,Ga,d))}else c!==a.catalog&&c!==null&&Xa(s,qa,c),d!==a.aliases&&d!==null&&Xa(s,Ga,d),ky(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ka(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return Ou=_.generatedAt,_}return{...Ly(t,e),refreshFailed:f}}function Ly(t,e){let n=Ay(e,"price-data.json",t.bundledPath),r=Ay(e,"price-aliases.json",t.bundledAliasesPath),s=Xr(n)?n:null,o=qr(r)?r:null,i={catalog:s,aliases:o,sha256:Ka(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return Ou=i.generatedAt,i}function Uy(t){if(t.cacheWrite!==void 0)return Os(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=Os(t.cacheWrite5m),n=Os(t.cacheWrite1h);return e===null||n===null?null:Os(e+n)}function Du(t,e){let n=Os(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=Os(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 Zo(t,e){let n=Cs(e.input_per_1m_tokens),r=Cs(e.output_per_1m_tokens),s=Cs(e.input_cache_read_per_1m_tokens),o=Cs(e.source_cost_fields?.cache_creation_input_token_cost),i=Cs(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=Cs(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Uy(t),d=Du(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 ei(t,e){if(e===null)return null;let n=Zo(t,e),r=Uy(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 HC,BC,XC,qC,by,qa,Ga,$y,VC,Qo,JC,Iy,Ou,Ry,Cs,Os,Qt=L(()=>{"use strict";HC="https://lmctl.com/dataset/model_list.json",BC="https://lmctl.com/dataset/aliases.json",XC=1e3,qC=1e4,by=6*60*60*1e3;qa="model_list.json",Ga="aliases.json",$y="meta.json",VC="model_list.meta.json";Qo=new WeakMap;JC=new Set(["established","asserted","unresolved"]);Iy={etag:null,last_checked:null};Ou=null,Ry=null;Cs=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,Os=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function sr(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function Gr(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return sr(n)}function eO(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(sr(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function tO(t,e){let n=new Set,r=l=>{n.add(sr(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 Vr(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=>tO(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=eO(r);return s.some(i=>o.has(i))}}}function sO(t,e,n){let r=e.trim().toLowerCase(),s=sr(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 oO(t,e,n){let r=[];for(let[s,o]of Object.entries(Zt))s!==n&&sO(o,t,e)&&r.push(s);return r}function Ya(t){return t==="moonshot"?0:t==="litellm"?1:t==="openrouter"?2:t==="manual"?3:4}function iO(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 aO(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}${sr(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!iO(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 Vy(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 Jy(t,e){return t.map(Vy).sort((n,r)=>{let s=Ya(n.source)-Ya(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 za(t){return t.pricing.input_per_1m_tokens!==null&&t.pricing.output_per_1m_tokens!==null}function lO(t,e,n){let r=aO(t),s=Jy(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 Mu(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=lO(t,e,n);if(r!==void 0){let i=t.map(Vy),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||!za(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(za);return o===void 0?{kind:"known-unpriced",id:e}:o.estimated?{kind:"estimated",model:s}:{kind:"priced",model:s}}function cO(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function dO(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=Gr(l),d=n.records.filter(u=>Gr(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:Mu(d,c,$u)}function Ky(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=cO(r,h.standard_slug);return{state:dO(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=Zt[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=sr(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=Gr(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&Gr(g)===_);return a(Mu(h.length>0?h:c,_,Fy[t]??$u,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=oO(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=Gr(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=Fy[t]??$u,m=null,p=null;for(let _ of u.values()){let h=Jy(_,f);(p===null||uO(h[0],p[0],f)<0)&&(m=_,p=h)}return a(Mu(m,Gr(m[0]),f,t==="codex"?"openai":void 0))}function Qa(t,e,n,r){return Ky(t,e,n,r).state}function St(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=Ky(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&&za(c))return{state:s,offer:c,provenance:"alias-pin"}}let l=a.find(za)??null;return{state:s,offer:l,provenance:o&&i!==null?"alias-pin":"route-preference"}}function Yy(t,e){let n=Zt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(Gr(s));return r.size}function uO(t,e,n){let r=Ya(t.source)-Ya(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 jy,Wy,Hy,By,Xy,qy,nO,rO,Gy,Zt,Fy,$u,Jr=L(()=>{"use strict";jy=Vr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),Wy=Vr({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)(-|$)/}),Hy=Vr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),By=Vr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),Xy=Vr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),qy=Vr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),nO=["gemini","google","vertex_ai-language-models","anthropic"],rO={normalize(t){let n=t.trim().toLowerCase().replace(/-(low|medium|high)$/,"");return[sr(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(sr(t.native.agy)):!1}},Gy=Vr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),Zt={claude:jy,codex:Wy,gemini:Hy,agy:rO,kimi:By,qwen:Xy,hermes:qy,deepseek:Gy},Fy={claude:jy.firstPartyProviders,codex:Wy.firstPartyProviders,gemini:Hy.firstPartyProviders,agy:nO,kimi:By.firstPartyProviders,qwen:Xy.firstPartyProviders,hermes:qy.firstPartyProviders,deepseek:Gy.firstPartyProviders};$u=[]});import{randomUUID as fO}from"node:crypto";function Za(t){return{startedAt:new Date().toISOString(),attempt_key:fO(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function $s(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function ti(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)||Ha.includes(t.provider)&&e.usage?.source==="wire"?e.usage:r&&Ha.includes(t.provider)?await wy(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:Nn(o.inputUncached),tok_cache_read:Nn(o.cacheRead),tok_cache_write:Nn(o.cacheWrite),tok_output:Nn(o.output),tok_reasoning:Nn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:mO(o.providerCostUsd)}),o.invalidCounters||zt([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=St(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:Nn(o.inputUncached)??0,output:Nn(o.output)??0,cachedInput:Nn(o.cacheRead)??0,cacheWrite:Nn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=Zo(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=ei(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Kr(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Ba,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 Nn,mO,ni=L(()=>{"use strict";vy();zo();xu();Qt();Jr();Nn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,mO=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var zy,Qy=L(()=>{"use strict";zy=`
43
+ `});import{createHash as Cy}from"node:crypto";import{mkdirSync as Oy,readFileSync as PC,renameSync as UC,writeFileSync as FC,existsSync as Dy}from"node:fs";import{homedir as jC}from"node:os";import{dirname as My,join as Va,resolve as Ja}from"node:path";import{fileURLToPath as WC}from"node:url";function GC(){return Va(jC(),".lmctl","cache","lmprice")}function Ds(t,e){return Va(t,e)}function Ka(t,e){if(!t||!e)return null;let n=Qo.get(t),r=Qo.get(e);return n===void 0||r===void 0?null:Cy("sha256").update(n).update(r).digest("hex")}function Br(t){try{let e=PC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&Qo.set(n,e),n}catch{return null}}function Py(t,e){let n=`${t}.tmp-${process.pid}`;FC(n,e),UC(n,t)}function Lu(t){return t===null||typeof t=="number"}function Xr(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 Lu(s.input_per_1m_tokens)&&Lu(s.output_per_1m_tokens)&&Lu(s.input_cache_read_per_1m_tokens)})}function qr(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"&&JC.has(o.evidence)});return n&&r}function KC(t){let e=Br(Ds(t,$y)),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=Br(Ds(t,VC));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 YC(t){let e=KC(t),n=Br(Ds(t,qa)),r=Br(Ds(t,Ga));return e.pair_sha256&&Ka(Xr(n)?n:null,qr(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{...Iy},aliases:{...Iy}}}:{catalog:Xr(n)?n:null,aliases:qr(r)?r:null,meta:e}}function ky(t,e){try{return Oy(t,{recursive:!0}),Py(Ds(t,$y),JSON.stringify(e)),!0}catch{return!1}}function Cu(t){return(t&&typeof t=="object"?Qo.get(t):void 0)??JSON.stringify(t)}function Xa(t,e,n){try{Oy(t,{recursive:!0}),Py(Ds(t,e),Cu(n))}catch{}}function zC(t,e){let n=QC(t),r=n?[Ja(n,"data",e)]:[Ja(t,"..","..","data",e)];for(let s of r)if(Dy(s))return s;return null}function QC(t){let e=Ja(t);for(;;){if(Dy(Ja(e,"package.json")))return e;let n=My(e);if(n===e)return null;e=n}}function Ay(t,e,n){let r=n!==void 0?n:zC(t,e);return r===null?null:Br(r)}function Ms(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return by;let n=Number(e);return!Number.isFinite(n)||n<0?by:n*1e3}function ZC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function Ny(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout(XC)});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(qC)});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 vt(t={}){return Object.keys(t).length===0?(Ry??=xy(t),Ry):xy(t)}async function xy(t){let e=My(WC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:ZC();if(n!==null&&n!==""){let _=Br(Va(n,qa)),h=Br(Va(n,Ga));if(Xr(_)&&qr(h)){let g={sha256:Ka(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return Ou=g.generatedAt,g}return Ly(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??GC(),o=t.now??Date.now(),i=t.ttlMs??Ms(),a=YC(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 Ny(r,HC,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"&&(Xr(_.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 Ny(r,BC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(qr(_.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 _=Cy("sha256").update(Cu(c)).update(Cu(d)).digest("hex");ky(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Xa(s,qa,c),Xa(s,Ga,d))}else c!==a.catalog&&c!==null&&Xa(s,qa,c),d!==a.aliases&&d!==null&&Xa(s,Ga,d),ky(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ka(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return Ou=_.generatedAt,_}return{...Ly(t,e),refreshFailed:f}}function Ly(t,e){let n=Ay(e,"price-data.json",t.bundledPath),r=Ay(e,"price-aliases.json",t.bundledAliasesPath),s=Xr(n)?n:null,o=qr(r)?r:null,i={catalog:s,aliases:o,sha256:Ka(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return Ou=i.generatedAt,i}function Uy(t){if(t.cacheWrite!==void 0)return Os(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=Os(t.cacheWrite5m),n=Os(t.cacheWrite1h);return e===null||n===null?null:Os(e+n)}function Du(t,e){let n=Os(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=Os(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 Zo(t,e){let n=Cs(e.input_per_1m_tokens),r=Cs(e.output_per_1m_tokens),s=Cs(e.input_cache_read_per_1m_tokens),o=Cs(e.source_cost_fields?.cache_creation_input_token_cost),i=Cs(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=Cs(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Uy(t),d=Du(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 ei(t,e){if(e===null)return null;let n=Zo(t,e),r=Uy(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 HC,BC,XC,qC,by,qa,Ga,$y,VC,Qo,JC,Iy,Ou,Ry,Cs,Os,Qt=L(()=>{"use strict";HC="https://lmctl.com/dataset/model_list.json",BC="https://lmctl.com/dataset/aliases.json",XC=1e3,qC=1e4,by=6*60*60*1e3;qa="model_list.json",Ga="aliases.json",$y="meta.json",VC="model_list.meta.json";Qo=new WeakMap;JC=new Set(["established","asserted","unresolved"]);Iy={etag:null,last_checked:null};Ou=null,Ry=null;Cs=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,Os=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function sr(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function Gr(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return sr(n)}function eO(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(sr(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function tO(t,e){let n=new Set,r=l=>{n.add(sr(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 Vr(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=>tO(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=eO(r);return s.some(i=>o.has(i))}}}function sO(t,e,n){let r=e.trim().toLowerCase(),s=sr(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 oO(t,e,n){let r=[];for(let[s,o]of Object.entries(Zt))s!==n&&sO(o,t,e)&&r.push(s);return r}function Ya(t){return t==="moonshot"?0:t==="litellm"?1:t==="openrouter"?2:t==="manual"?3:4}function iO(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 aO(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}${sr(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!iO(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 Vy(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 Jy(t,e){return t.map(Vy).sort((n,r)=>{let s=Ya(n.source)-Ya(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 za(t){return t.pricing.input_per_1m_tokens!==null&&t.pricing.output_per_1m_tokens!==null}function lO(t,e,n){let r=aO(t),s=Jy(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 Mu(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=lO(t,e,n);if(r!==void 0){let i=t.map(Vy),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||!za(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(za);return o===void 0?{kind:"known-unpriced",id:e}:o.estimated?{kind:"estimated",model:s}:{kind:"priced",model:s}}function cO(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function dO(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=Gr(l),d=n.records.filter(u=>Gr(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:Mu(d,c,$u)}function Ky(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=cO(r,h.standard_slug);return{state:dO(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=Zt[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=sr(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=Gr(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&Gr(g)===_);return a(Mu(h.length>0?h:c,_,Fy[t]??$u,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=oO(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=Gr(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=Fy[t]??$u,m=null,p=null;for(let _ of u.values()){let h=Jy(_,f);(p===null||uO(h[0],p[0],f)<0)&&(m=_,p=h)}return a(Mu(m,Gr(m[0]),f,t==="codex"?"openai":void 0))}function Qa(t,e,n,r){return Ky(t,e,n,r).state}function St(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=Ky(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&&za(c))return{state:s,offer:c,provenance:"alias-pin"}}let l=a.find(za)??null;return{state:s,offer:l,provenance:o&&i!==null?"alias-pin":"route-preference"}}function Yy(t,e){let n=Zt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(Gr(s));return r.size}function uO(t,e,n){let r=Ya(t.source)-Ya(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 jy,Wy,Hy,By,Xy,qy,nO,rO,Gy,Zt,Fy,$u,Jr=L(()=>{"use strict";jy=Vr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),Wy=Vr({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)(-|$)/}),Hy=Vr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),By=Vr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),Xy=Vr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),qy=Vr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),nO=["gemini","google","vertex_ai-language-models","anthropic"],rO={normalize(t){let n=t.trim().toLowerCase().replace(/-(low|medium|high)$/,"");return[sr(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(sr(t.native.agy)):!1}},Gy=Vr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),Zt={claude:jy,codex:Wy,gemini:Hy,agy:rO,kimi:By,qwen:Xy,hermes:qy,deepseek:Gy},Fy={claude:jy.firstPartyProviders,codex:Wy.firstPartyProviders,gemini:Hy.firstPartyProviders,agy:nO,kimi:By.firstPartyProviders,qwen:Xy.firstPartyProviders,hermes:qy.firstPartyProviders,deepseek:Gy.firstPartyProviders};$u=[]});import{randomUUID as fO}from"node:crypto";function Za(t){return{startedAt:new Date().toISOString(),attempt_key:fO(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function $s(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function ti(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)||Ha.includes(t.provider)&&e.usage?.source==="wire"?e.usage:r&&Ha.includes(t.provider)?await Ty(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:Nn(o.inputUncached),tok_cache_read:Nn(o.cacheRead),tok_cache_write:Nn(o.cacheWrite),tok_output:Nn(o.output),tok_reasoning:Nn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:mO(o.providerCostUsd)}),o.invalidCounters||zt([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=St(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:Nn(o.inputUncached)??0,output:Nn(o.output)??0,cachedInput:Nn(o.cacheRead)??0,cacheWrite:Nn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=Zo(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=ei(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Kr(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Ba,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 Nn,mO,ni=L(()=>{"use strict";vy();zo();xu();Qt();Jr();Nn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,mO=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var zy,Qy=L(()=>{"use strict";zy=`
44
44
  CREATE TABLE IF NOT EXISTS price_snapshot (
45
45
  sha256 TEXT PRIMARY KEY,
46
46
  generated_at TEXT,
@@ -78,7 +78,7 @@ CREATE TABLE IF NOT EXISTS price_alias (
78
78
  );
79
79
  `});import{createHash as pO}from"node:crypto";function hO(t,e,n){return pO("sha256").update(`${t}\0${e}\0${n}`).digest("hex")}function ht(t,e,n){let r=hO(e.stream_id,e.intentKey??e.event_type,e.observedLastSeq),s=t.prepare(`INSERT INTO message_event (event_id, ts, stream_id, event_type, payload)
80
80
  VALUES (?, ?, ?, ?, ?)
81
- ON CONFLICT(event_id) DO NOTHING`),o=t.prepare("SELECT seq FROM message_event WHERE event_id = ?");return t.transaction(()=>{let a=s.run(r,e.ts??new Date().toISOString(),e.stream_id,e.event_type,JSON.stringify(e.payload));if(a.changes===0)return{appended:!1,seq:o.get(r).seq,event_id:r};let l=Number(a.lastInsertRowid);return n(l),{appended:!0,seq:l,event_id:r}})()}var el=L(()=>{"use strict"});var eE={};me(eE,{backfillEventLog:()=>Pu,rebuildProjections:()=>Zy});import{createHash as _O}from"node:crypto";function Yr(t,e){return t==null?null:{teamfile:t,alias:e??""}}function gO(t,e,n){return`lease_${_O("sha256").update(`${t}\0${e}\0${n}`).digest("hex").slice(0,16)}`}function tl(t,e,n,r){n.forEach((s,o)=>{ht(t,{stream_id:e,event_type:s.event_type,payload:s.payload,observedLastSeq:o,ts:s.ts},()=>{}).appended?r.appended+=1:r.skipped+=1})}function yO(t){let e=`msg_tcl_${t.id}`,n=Yr(t.sender_teamfile,t.sender_alias),r=Yr(t.receiver_teamfile,t.receiver_alias),s={table:"team_chat_log",id:t.id},o={message_id:e,sender:n,receiver:r,root_teamfile:t.root_teamfile,legacy:s},i=[{event_type:ie.CREATE,ts:t.created_at,payload:{...o,message_type:"request",content:t.message,origin:t.origin,correlation_status:"legacy-unavailable"}}];return t.status!=="running"&&i.push({event_type:ie.HANDLED,ts:t.created_at,payload:{...o,outcome:t.status,receipt:t.response,error:t.error_detail,truncated:t.truncated===1}}),{streamId:e,events:i}}function EO(t){let e=`msg_mbx_${t.id}`,n=Yr(t.sender_teamfile,t.sender_alias),r=Yr(t.receiver_teamfile,t.receiver_alias),s={table:"agent_mailbox",id:t.id},o={message_id:e,sender:n,receiver:r,root_teamfile:t.root_teamfile,legacy:s},i=[];if(t.message_type==="response"){let a=t.request_mailbox_id!==null?`msg_mbx_${t.request_mailbox_id}`:null;return i.push({event_type:ie.RESPONSE_CREATE,ts:t.created_at,payload:{...o,message_type:"response",content:t.payload,in_reply_to_message_id:a,correlation_status:"legacy-unavailable"}}),i.push({event_type:ie.RESPONSE_ENQUEUE,ts:t.created_at,payload:{...o,message_type:"response",in_reply_to_message_id:a}}),t.delivered_at!==null&&i.push({event_type:ie.RESPONSE_DELIVERED,ts:t.delivered_at,payload:{...o,message_type:"response",receipt:t.receipt}}),{streamId:e,events:i}}return i.push({event_type:ie.CREATE,ts:t.created_at,payload:{...o,message_type:"request",content:t.payload,correlation_status:"legacy-unavailable"}}),i.push({event_type:ie.ENQUEUE,ts:t.created_at,payload:{...o,message_type:"request"}}),t.waited_at!==null&&i.push({event_type:ie.WAIT_REGISTER,ts:t.waited_at,payload:{...o,waited_by:t.waited_by}}),(t.delivering_at!==null||t.delivery_holder_pid!==null)&&i.push({event_type:ie.DELIVER_CLAIM,ts:t.delivering_at??t.created_at,payload:{...o,pid:t.delivery_holder_pid,host:t.delivery_holder_host}}),t.delivered_at!==null&&i.push({event_type:ie.DELIVERED,ts:t.delivered_at,payload:{...o,receipt:t.receipt}}),{streamId:e,events:i}}function TO(t){let e=`inv_${t.id}`,n=Yr(t.target_teamfile,t.target_alias),r={table:"tracked_invocation",id:t.id},s=[{event_type:ie.INVOCATION_START,ts:t.started_at,payload:{invocation_id:e,kind:t.kind,origin:t.origin,launch_source:t.launch_source,from_identity:t.from_identity,target:n,root_teamfile:t.root_teamfile,scope_teamfile:t.scope_teamfile,cwd:t.cwd,command:t.command,request_payload:t.request_payload,started_at:t.started_at,request_message_id:t.team_chat_log_id!==null?`msg_tcl_${t.team_chat_log_id}`:null,holder_pid:t.holder_pid,holder_host:t.holder_host,legacy:r}}];return t.notified_by!==null&&s.push({event_type:ie.INVOCATION_NOTIFY_CLAIM,ts:t.notified_at??t.started_at,payload:{invocation_id:e,notified_by:t.notified_by,notified_at:t.notified_at,legacy:r}}),t.status!=="running"&&s.push({event_type:ie.INVOCATION_FINISH,ts:t.ended_at??t.started_at,payload:{invocation_id:e,status:t.status,ended_at:t.ended_at,exit_code:t.exit_code,signal:t.signal,result_summary:t.result_summary,error:t.error,legacy:r}}),{streamId:e,events:s}}function wO(t){let e=gO(t.receiver_teamfile,t.receiver_alias,t.started_at),n=Yr(t.receiver_teamfile,t.receiver_alias),r=Yr(t.sender_teamfile,t.sender_alias);return{streamId:e,events:[{event_type:ie.INFLIGHT_TAKE,ts:t.started_at,payload:{lease_id:e,receiver:n,sender:r,holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at,legacy:{table:"agent_inflight",receiver_teamfile:t.receiver_teamfile,receiver_alias:t.receiver_alias}}}]}}function nl(t,e){return t.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function Pu(t){let e={appended:0,skipped:0},n={team_chat_log:0,agent_mailbox:0,tracked_invocation:0,agent_inflight:0};t.transaction(()=>{if(nl(t,"team_chat_log"))for(let o of t.prepare("SELECT * FROM team_chat_log WHERE "+Q_(t)+" ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=yO(o);tl(t,a,l,e),n.team_chat_log+=e.appended+e.skipped-i}if(nl(t,"agent_mailbox"))for(let o of t.prepare("SELECT * FROM agent_mailbox ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=EO(o);tl(t,a,l,e),n.agent_mailbox+=e.appended+e.skipped-i}if(nl(t,"tracked_invocation"))for(let o of t.prepare("SELECT * FROM tracked_invocation ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=TO(o);tl(t,a,l,e),n.tracked_invocation+=e.appended+e.skipped-i}if(nl(t,"agent_inflight"))for(let o of t.prepare("SELECT * FROM agent_inflight ORDER BY receiver_teamfile, receiver_alias").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=wO(o);tl(t,a,l,e),n.agent_inflight+=e.appended+e.skipped-i}Zy(t)})();let s=o=>t.prepare(`SELECT count(*) AS n FROM ${o}`).get().n;return{appended:e.appended,skipped:e.skipped,bySource:n,projections:{agent_state:s("agent_state"),message_pending:s("message_pending"),invocation_state:s("invocation_state")}}}function Zy(t){t.exec("DELETE FROM agent_state"),t.exec("DELETE FROM message_pending"),t.exec("DELETE FROM invocation_state");let e=t.prepare("SELECT seq, stream_id, event_type, payload FROM message_event ORDER BY seq").all();for(let n of e){let r=JSON.parse(n.payload);vO(t,n.seq,n.stream_id,n.event_type,r)}}function Le(t,e,n){let r=t[e];return r!=null?r[n]??null:null}function vO(t,e,n,r,s){switch(r){case ie.ENQUEUE:case ie.RESPONSE_ENQUEUE:{let o=r===ie.RESPONSE_ENQUEUE;t.prepare(`INSERT INTO message_pending
81
+ ON CONFLICT(event_id) DO NOTHING`),o=t.prepare("SELECT seq FROM message_event WHERE event_id = ?");return t.transaction(()=>{let a=s.run(r,e.ts??new Date().toISOString(),e.stream_id,e.event_type,JSON.stringify(e.payload));if(a.changes===0)return{appended:!1,seq:o.get(r).seq,event_id:r};let l=Number(a.lastInsertRowid);return n(l),{appended:!0,seq:l,event_id:r}})()}var el=L(()=>{"use strict"});var eE={};me(eE,{backfillEventLog:()=>Pu,rebuildProjections:()=>Zy});import{createHash as _O}from"node:crypto";function Yr(t,e){return t==null?null:{teamfile:t,alias:e??""}}function gO(t,e,n){return`lease_${_O("sha256").update(`${t}\0${e}\0${n}`).digest("hex").slice(0,16)}`}function tl(t,e,n,r){n.forEach((s,o)=>{ht(t,{stream_id:e,event_type:s.event_type,payload:s.payload,observedLastSeq:o,ts:s.ts},()=>{}).appended?r.appended+=1:r.skipped+=1})}function yO(t){let e=`msg_tcl_${t.id}`,n=Yr(t.sender_teamfile,t.sender_alias),r=Yr(t.receiver_teamfile,t.receiver_alias),s={table:"team_chat_log",id:t.id},o={message_id:e,sender:n,receiver:r,root_teamfile:t.root_teamfile,legacy:s},i=[{event_type:ie.CREATE,ts:t.created_at,payload:{...o,message_type:"request",content:t.message,origin:t.origin,correlation_status:"legacy-unavailable"}}];return t.status!=="running"&&i.push({event_type:ie.HANDLED,ts:t.created_at,payload:{...o,outcome:t.status,receipt:t.response,error:t.error_detail,truncated:t.truncated===1}}),{streamId:e,events:i}}function EO(t){let e=`msg_mbx_${t.id}`,n=Yr(t.sender_teamfile,t.sender_alias),r=Yr(t.receiver_teamfile,t.receiver_alias),s={table:"agent_mailbox",id:t.id},o={message_id:e,sender:n,receiver:r,root_teamfile:t.root_teamfile,legacy:s},i=[];if(t.message_type==="response"){let a=t.request_mailbox_id!==null?`msg_mbx_${t.request_mailbox_id}`:null;return i.push({event_type:ie.RESPONSE_CREATE,ts:t.created_at,payload:{...o,message_type:"response",content:t.payload,in_reply_to_message_id:a,correlation_status:"legacy-unavailable"}}),i.push({event_type:ie.RESPONSE_ENQUEUE,ts:t.created_at,payload:{...o,message_type:"response",in_reply_to_message_id:a}}),t.delivered_at!==null&&i.push({event_type:ie.RESPONSE_DELIVERED,ts:t.delivered_at,payload:{...o,message_type:"response",receipt:t.receipt}}),{streamId:e,events:i}}return i.push({event_type:ie.CREATE,ts:t.created_at,payload:{...o,message_type:"request",content:t.payload,correlation_status:"legacy-unavailable"}}),i.push({event_type:ie.ENQUEUE,ts:t.created_at,payload:{...o,message_type:"request"}}),t.waited_at!==null&&i.push({event_type:ie.WAIT_REGISTER,ts:t.waited_at,payload:{...o,waited_by:t.waited_by}}),(t.delivering_at!==null||t.delivery_holder_pid!==null)&&i.push({event_type:ie.DELIVER_CLAIM,ts:t.delivering_at??t.created_at,payload:{...o,pid:t.delivery_holder_pid,host:t.delivery_holder_host}}),t.delivered_at!==null&&i.push({event_type:ie.DELIVERED,ts:t.delivered_at,payload:{...o,receipt:t.receipt}}),{streamId:e,events:i}}function wO(t){let e=`inv_${t.id}`,n=Yr(t.target_teamfile,t.target_alias),r={table:"tracked_invocation",id:t.id},s=[{event_type:ie.INVOCATION_START,ts:t.started_at,payload:{invocation_id:e,kind:t.kind,origin:t.origin,launch_source:t.launch_source,from_identity:t.from_identity,target:n,root_teamfile:t.root_teamfile,scope_teamfile:t.scope_teamfile,cwd:t.cwd,command:t.command,request_payload:t.request_payload,started_at:t.started_at,request_message_id:t.team_chat_log_id!==null?`msg_tcl_${t.team_chat_log_id}`:null,holder_pid:t.holder_pid,holder_host:t.holder_host,legacy:r}}];return t.notified_by!==null&&s.push({event_type:ie.INVOCATION_NOTIFY_CLAIM,ts:t.notified_at??t.started_at,payload:{invocation_id:e,notified_by:t.notified_by,notified_at:t.notified_at,legacy:r}}),t.status!=="running"&&s.push({event_type:ie.INVOCATION_FINISH,ts:t.ended_at??t.started_at,payload:{invocation_id:e,status:t.status,ended_at:t.ended_at,exit_code:t.exit_code,signal:t.signal,result_summary:t.result_summary,error:t.error,legacy:r}}),{streamId:e,events:s}}function TO(t){let e=gO(t.receiver_teamfile,t.receiver_alias,t.started_at),n=Yr(t.receiver_teamfile,t.receiver_alias),r=Yr(t.sender_teamfile,t.sender_alias);return{streamId:e,events:[{event_type:ie.INFLIGHT_TAKE,ts:t.started_at,payload:{lease_id:e,receiver:n,sender:r,holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at,legacy:{table:"agent_inflight",receiver_teamfile:t.receiver_teamfile,receiver_alias:t.receiver_alias}}}]}}function nl(t,e){return t.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function Pu(t){let e={appended:0,skipped:0},n={team_chat_log:0,agent_mailbox:0,tracked_invocation:0,agent_inflight:0};t.transaction(()=>{if(nl(t,"team_chat_log"))for(let o of t.prepare("SELECT * FROM team_chat_log WHERE "+Q_(t)+" ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=yO(o);tl(t,a,l,e),n.team_chat_log+=e.appended+e.skipped-i}if(nl(t,"agent_mailbox"))for(let o of t.prepare("SELECT * FROM agent_mailbox ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=EO(o);tl(t,a,l,e),n.agent_mailbox+=e.appended+e.skipped-i}if(nl(t,"tracked_invocation"))for(let o of t.prepare("SELECT * FROM tracked_invocation ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=wO(o);tl(t,a,l,e),n.tracked_invocation+=e.appended+e.skipped-i}if(nl(t,"agent_inflight"))for(let o of t.prepare("SELECT * FROM agent_inflight ORDER BY receiver_teamfile, receiver_alias").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=TO(o);tl(t,a,l,e),n.agent_inflight+=e.appended+e.skipped-i}Zy(t)})();let s=o=>t.prepare(`SELECT count(*) AS n FROM ${o}`).get().n;return{appended:e.appended,skipped:e.skipped,bySource:n,projections:{agent_state:s("agent_state"),message_pending:s("message_pending"),invocation_state:s("invocation_state")}}}function Zy(t){t.exec("DELETE FROM agent_state"),t.exec("DELETE FROM message_pending"),t.exec("DELETE FROM invocation_state");let e=t.prepare("SELECT seq, stream_id, event_type, payload FROM message_event ORDER BY seq").all();for(let n of e){let r=JSON.parse(n.payload);vO(t,n.seq,n.stream_id,n.event_type,r)}}function Le(t,e,n){let r=t[e];return r!=null?r[n]??null:null}function vO(t,e,n,r,s){switch(r){case ie.ENQUEUE:case ie.RESPONSE_ENQUEUE:{let o=r===ie.RESPONSE_ENQUEUE;t.prepare(`INSERT INTO message_pending
82
82
  (message_id, message_type, in_reply_to, sender_teamfile, sender_alias,
83
83
  receiver_teamfile, receiver_alias, lifecycle_state, created_seq, last_seq)
84
84
  VALUES (?, ?, ?, ?, ?, ?, ?, 'queued', ?, ?)
@@ -1232,12 +1232,12 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1232
1232
  SET currently_handling_message_id = NULL,
1233
1233
  currently_handling_since = NULL
1234
1234
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1235
- AND currently_handling_message_id = ?`).run(e,n,r).changes===1}function JO(t,e){let n=e??new Date(Date.now()-Us()).toISOString();return ol({holder_pid:t.holder_pid,started_at:t.started_at??""},n)}function KO(t,e,n){return e==="force"||e==="session-idle"?e:n?"force":t.holder_pid!==null&&!rt(t.holder_pid)?"dead-pid":"stale"}function YO(t){return{sender:Wu(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:t.holder_host,started_at:t.started_at}}function js(t,e){if(t!==1)throw new Error(`event projection CAS failed during ${e}`)}function Xu(t,e,n){let r=xn(e),s=Wu(n.sender_teamfile,n.sender_alias),o=EE(n.receiver_teamfile,n.receiver_alias,{provider:n.receiver_provider,sessionId:n.receiver_session_id}),i={message_id:r,message_type:"request",sender:s,receiver:o,root_teamfile:n.root_teamfile,legacy:{table:"team_chat_log",id:e}};return ht(t,{stream_id:r,event_type:"CREATE",observedLastSeq:0,ts:n.created_at,payload:{...i,content:n.message,provider_prompt:n.provider_prompt??n.message,origin:n.origin,...VO(t,n.sender_teamfile,n.sender_alias)}},()=>{Hu(t,n.receiver_teamfile,n.receiver_alias,r,n.created_at)}),r}function il(t,e,n){let r=xn(e),s={message_id:r,message_type:"request",sender:Wu(n.sender_teamfile,n.sender_alias),receiver:EE(n.receiver_teamfile,n.receiver_alias,{provider:n.receiver_provider,sessionId:n.receiver_session_id}),root_teamfile:n.root_teamfile,legacy:{table:"team_chat_log",id:e}};return ht(t,{stream_id:r,event_type:"HANDLED",observedLastSeq:1,ts:n.created_at,payload:{...s,outcome:n.status,...n.usage?{usage:n.usage}:{},receipt:n.response,error:n.error_detail,truncated:n.truncated===1}},()=>{Bu(t,n.receiver_teamfile,n.receiver_alias,r)}),r}function zO(t){return{sender:lr(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at}}function TE(t,e,n,r){let s=t.prepare(`UPDATE agent_state
1235
+ AND currently_handling_message_id = ?`).run(e,n,r).changes===1}function JO(t,e){let n=e??new Date(Date.now()-Us()).toISOString();return ol({holder_pid:t.holder_pid,started_at:t.started_at??""},n)}function KO(t,e,n){return e==="force"||e==="session-idle"?e:n?"force":t.holder_pid!==null&&!rt(t.holder_pid)?"dead-pid":"stale"}function YO(t){return{sender:Wu(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:t.holder_host,started_at:t.started_at}}function js(t,e){if(t!==1)throw new Error(`event projection CAS failed during ${e}`)}function Xu(t,e,n){let r=xn(e),s=Wu(n.sender_teamfile,n.sender_alias),o=EE(n.receiver_teamfile,n.receiver_alias,{provider:n.receiver_provider,sessionId:n.receiver_session_id}),i={message_id:r,message_type:"request",sender:s,receiver:o,root_teamfile:n.root_teamfile,legacy:{table:"team_chat_log",id:e}};return ht(t,{stream_id:r,event_type:"CREATE",observedLastSeq:0,ts:n.created_at,payload:{...i,content:n.message,provider_prompt:n.provider_prompt??n.message,origin:n.origin,...VO(t,n.sender_teamfile,n.sender_alias)}},()=>{Hu(t,n.receiver_teamfile,n.receiver_alias,r,n.created_at)}),r}function il(t,e,n){let r=xn(e),s={message_id:r,message_type:"request",sender:Wu(n.sender_teamfile,n.sender_alias),receiver:EE(n.receiver_teamfile,n.receiver_alias,{provider:n.receiver_provider,sessionId:n.receiver_session_id}),root_teamfile:n.root_teamfile,legacy:{table:"team_chat_log",id:e}};return ht(t,{stream_id:r,event_type:"HANDLED",observedLastSeq:1,ts:n.created_at,payload:{...s,outcome:n.status,...n.usage?{usage:n.usage}:{},receipt:n.response,error:n.error_detail,truncated:n.truncated===1}},()=>{Bu(t,n.receiver_teamfile,n.receiver_alias,r)}),r}function zO(t){return{sender:lr(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at}}function wE(t,e,n,r){let s=t.prepare(`UPDATE agent_state
1236
1236
  SET lease_id = NULL, sender_teamfile = NULL, sender_alias = NULL,
1237
1237
  holder_pid = NULL, holder_host = NULL, started_at = NULL,
1238
1238
  last_heartbeat_at = NULL, last_seq = ?
1239
1239
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1240
- AND lease_id IS ? AND last_seq = ?`).run(n,e.receiver_teamfile,e.receiver_alias,e.lease_id,e.last_seq);js(s.changes,r)}function wE(t,e,n,r,s=null,o=!1){let i=XO();if(n!==null&&r===null)throw new Error("agent inflight takeover is missing a reclaim reason");let a=Fs(t,e.receiver_teamfile,e.receiver_alias);if(a!==null&&a.lease_id!==null){if(!(o||JO(a,s)))throw new Error("event projection rejected INFLIGHT_TAKE: receiver already holds a live lease");let u=KO(a,r,o),f=YO(a),m=a.lease_id;ht(t,{stream_id:m,event_type:"INFLIGHT_RECLAIM",observedLastSeq:a.last_seq,ts:e.started_at,payload:{receiver:lr(e.receiver_teamfile,e.receiver_alias),reason:u,previous_holder:f}},p=>TE(t,a,p,"INFLIGHT_RECLAIM")),a=Fs(t,e.receiver_teamfile,e.receiver_alias)}let l=a?.last_seq??0,c=`lease_${BO()}`;return ht(t,{stream_id:c,event_type:"INFLIGHT_TAKE",observedLastSeq:l,ts:e.started_at,payload:{lease_id:c,receiver:lr(e.receiver_teamfile,e.receiver_alias),sender:lr(e.sender_teamfile,e.sender_alias),holder_pid:e.holder_pid,holder_host:i,started_at:e.started_at}},d=>{if(a===null){t.prepare(`INSERT INTO agent_state
1240
+ AND lease_id IS ? AND last_seq = ?`).run(n,e.receiver_teamfile,e.receiver_alias,e.lease_id,e.last_seq);js(s.changes,r)}function TE(t,e,n,r,s=null,o=!1){let i=XO();if(n!==null&&r===null)throw new Error("agent inflight takeover is missing a reclaim reason");let a=Fs(t,e.receiver_teamfile,e.receiver_alias);if(a!==null&&a.lease_id!==null){if(!(o||JO(a,s)))throw new Error("event projection rejected INFLIGHT_TAKE: receiver already holds a live lease");let u=KO(a,r,o),f=YO(a),m=a.lease_id;ht(t,{stream_id:m,event_type:"INFLIGHT_RECLAIM",observedLastSeq:a.last_seq,ts:e.started_at,payload:{receiver:lr(e.receiver_teamfile,e.receiver_alias),reason:u,previous_holder:f}},p=>wE(t,a,p,"INFLIGHT_RECLAIM")),a=Fs(t,e.receiver_teamfile,e.receiver_alias)}let l=a?.last_seq??0,c=`lease_${BO()}`;return ht(t,{stream_id:c,event_type:"INFLIGHT_TAKE",observedLastSeq:l,ts:e.started_at,payload:{lease_id:c,receiver:lr(e.receiver_teamfile,e.receiver_alias),sender:lr(e.sender_teamfile,e.sender_alias),holder_pid:e.holder_pid,holder_host:i,started_at:e.started_at}},d=>{if(a===null){t.prepare(`INSERT INTO agent_state
1241
1241
  (receiver_teamfile, receiver_alias, lease_id, sender_teamfile,
1242
1242
  sender_alias, holder_pid, holder_host, started_at,
1243
1243
  last_heartbeat_at, last_seq)
@@ -1251,7 +1251,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1251
1251
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1252
1252
  AND lease_id = ?
1253
1253
  AND sender_teamfile = ? AND sender_alias = ?
1254
- AND started_at = ? AND holder_pid IS ?`).run(r,e.receiver_teamfile,e.receiver_alias,n,e.sender_teamfile,e.sender_alias,e.started_at,e.holder_pid).changes===1}function li(t,e,n,r){let s=Fs(t,e.receiver_teamfile,e.receiver_alias);s===null||s.lease_id===null||ht(t,{stream_id:s.lease_id,event_type:n,observedLastSeq:s.last_seq,payload:{receiver:lr(e.receiver_teamfile,e.receiver_alias),...n==="INFLIGHT_RECLAIM"?{reason:r??"stale",previous_holder:zO(e)}:{lease_id:s.lease_id}}},o=>TE(t,s,o,n))}function SE(t,e){let n=Fs(t,e.teamfile,e.alias),r=n?.last_seq??0;ht(t,{stream_id:e.lock_id,event_type:"TERMINAL_LOCK_TAKE",observedLastSeq:r,ts:e.started_at,payload:{receiver:lr(e.teamfile,e.alias),lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at}},s=>{if(n===null){t.prepare(`INSERT INTO agent_state
1254
+ AND started_at = ? AND holder_pid IS ?`).run(r,e.receiver_teamfile,e.receiver_alias,n,e.sender_teamfile,e.sender_alias,e.started_at,e.holder_pid).changes===1}function li(t,e,n,r){let s=Fs(t,e.receiver_teamfile,e.receiver_alias);s===null||s.lease_id===null||ht(t,{stream_id:s.lease_id,event_type:n,observedLastSeq:s.last_seq,payload:{receiver:lr(e.receiver_teamfile,e.receiver_alias),...n==="INFLIGHT_RECLAIM"?{reason:r??"stale",previous_holder:zO(e)}:{lease_id:s.lease_id}}},o=>wE(t,s,o,n))}function SE(t,e){let n=Fs(t,e.teamfile,e.alias),r=n?.last_seq??0;ht(t,{stream_id:e.lock_id,event_type:"TERMINAL_LOCK_TAKE",observedLastSeq:r,ts:e.started_at,payload:{receiver:lr(e.teamfile,e.alias),lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at}},s=>{if(n===null){t.prepare(`INSERT INTO agent_state
1255
1255
  (receiver_teamfile, receiver_alias, terminal_lock_id, last_seq)
1256
1256
  VALUES (?, ?, ?, ?)`).run(e.teamfile,e.alias,e.lock_id,s);return}let o=t.prepare(`UPDATE agent_state SET terminal_lock_id = ?, last_seq = ?
1257
1257
  WHERE receiver_teamfile = ? AND receiver_alias = ?
@@ -1690,104 +1690,104 @@ 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
- `),...mE(t),...dE(t)}}function ED(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var lD,BE,cD,dD,ci,bt=L(()=>{"use strict";Kd();ni();Mo();rl();uE();pE();_E();zr();al();OE();PE();lD=3,BE=".recovery.lock",cD=20,dD=50;ci=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=yD(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)=>ED("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!==$E)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!==DE&&!a.includes(r))return{resumed:!1,reason:ME};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=wE(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){jE(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){jE(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=UE(),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&&Kr(this.db,r,e.usage),Xu(this.db,r,e),e.usage&&Kr(this.db,r,e.usage),il(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&&Kr(this.db,r,e.usage),Xu(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&&Kr(this.db,e,n.usage),il(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),Kr(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}`);Kr(this.db,e,n)})()}setCurrentlyHandlingMessage(e,n,r){this.db.transaction(()=>{Hu(this.db,e,n,r)})()}clearCurrentlyHandlingMessage(e,n,r){return this.db.transaction(()=>Bu(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??Ju(),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,Lt(e.command),n,e.holder_pid??null,r,s,Lt(e.meta),e.launch_source??e.kind,e.request_payload??null,e.parent_invocation_id??null),i=this.getTrackedInvocation(Number(o.lastInsertRowid));return NE(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
+ `),...mE(t),...dE(t)}}function ED(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var lD,BE,cD,dD,ci,bt=L(()=>{"use strict";Kd();ni();Mo();rl();uE();pE();_E();zr();al();OE();PE();lD=3,BE=".recovery.lock",cD=20,dD=50;ci=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=yD(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)=>ED("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!==$E)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!==DE&&!a.includes(r))return{resumed:!1,reason:ME};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=TE(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){jE(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){jE(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=UE(),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&&Kr(this.db,r,e.usage),Xu(this.db,r,e),e.usage&&Kr(this.db,r,e.usage),il(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&&Kr(this.db,r,e.usage),Xu(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&&Kr(this.db,e,n.usage),il(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),Kr(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}`);Kr(this.db,e,n)})()}setCurrentlyHandlingMessage(e,n,r){this.db.transaction(()=>{Hu(this.db,e,n,r)})()}clearCurrentlyHandlingMessage(e,n,r){return this.db.transaction(()=>Bu(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??Ju(),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,Lt(e.command),n,e.holder_pid??null,r,s,Lt(e.meta),e.launch_source??e.kind,e.request_payload??null,e.parent_invocation_id??null),i=this.getTrackedInvocation(Number(o.lastInsertRowid));return NE(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,Lt(n.result_summary),Lt(n.error),n.team_chat_log_id??null,Lt(n.meta),Lt(n.config_warnings),r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return ll(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,Lt(r.result_summary),Lt(r.error),r.team_chat_log_id??null,Lt(r.meta),Lt(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 ll(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 xE(this.db,s,n),s})()}updateTrackedInvocationRequestPayload(e,n){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(n,e).changes!==1?null:(LE(this.db,e,n),this.getTrackedInvocation(e)))()}linkTrackedInvocationMessage(e,n){return this.db.transaction(()=>this.stmts.linkTrackedInvocationChatLog.run(n,e).changes!==1?null:(CE(this.db,e,xn(n)),this.getTrackedInvocation(e)))()}abortTrackedInvocationAndTerminalizeMessage(e,n,r){return this.db.transaction(()=>{let s=X();if(this.stmts.abortTrackedInvocationIfUnchanged.run(s,Lt(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 ll(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||il(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 RE(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:vE(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&&li(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&&li(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&&li(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&&(li(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(oi,ai(e,n),ii);return r===void 0?null:hE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&qu(this.db,r,!0),this.stmts.upsertRuntimeState.run(oi,ai(e.teamfile,e.alias),ii,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&SE(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(oi,ai(e,n),ii,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(oi,ai(e,n),ii);return o.changes===1&&qu(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:_D(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&&!gD(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:UE(),holder_pid:process.pid,holder_host:Ju(),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=uR(st=>{"use strict";function Ws(t){if(!Array.isArray(t))throw new TypeError("Each row and headers must be an array of cells");return Array.from(t,e=>{let n=e==null?"":String(e);if(/[\x00-\x1f\x7f-\x9f]/u.test(n))throw new TypeError("Cells must be single-line text without terminal control characters");return n})}function qE(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError('align must be an array of "left", "right", or "decimal" per column');return t.map(e=>{if(e!=="left"&&e!=="right"&&e!=="decimal")throw new TypeError('align entries must be "left", "right", or "decimal"');return e})}function Ln(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 Yu(t,e,n){let r=" ".repeat(Math.max(0,e-Ln(t)));return n?r+t:t+r}function GE(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 TD(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 wD(t,e,n="\u2026"){if(Ln(t)<=e)return t;let r=Ln(n)>e?"\u2026":n,s=Ln(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=Ln(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function vD(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 VE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function SD(t){if(t!==void 0){if(!Array.isArray(t)||t.some(e=>!Number.isInteger(e)||e<0))throw new TypeError("decimalPlaces must be an array of nonnegative integers");return t}}function JE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=GE(n);r.headers!==void 0&&Ws(r.headers);for(let s of r.rows.map(Ws))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,VE(o)?.places??0)})}return e}st.measureDecimalPlaces=JE;function KE(t,e,n){let r=SD(n)??[],s=e.includes("decimal")?JE(t):[];return Array.from({length:Math.max(r.length,s.length)},(o,i)=>Math.max(r[i]??0,s[i]??0))}function YE(t,e){let n=VE(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 zE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=vD(e),o=qE(n),i=KE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=GE(c);d.headers!==void 0&&Ws(d.headers).forEach((u,f)=>{l(f,Ln(u))});for(let u of d.rows.map(Ws))u.forEach((f,m)=>{let p=o[m]==="decimal"?YE(f,i[m]??0)??f:f;l(m,Ln(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}st.measureColumns=zE;function bD(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 QE(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=bD(i),u=qE(r),f=TD(l),m=KE([t],u,c),p=e??zE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Ws);n!==void 0&&_.unshift(Ws(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)?wD(T,S,f):T;if(u[w]==="decimal"){let k=n!==void 0&&E===0?null:YE(T,m[w]??0),N=Yu(k!==null&&Ln(k)<=S?k:b,S,!0);return w===y&&k!==null?N.trimEnd():N}return u[w]==="right"?Yu(b,S,!0):w===y?b:Yu(b,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&&li(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&&(li(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(oi,ai(e,n),ii);return r===void 0?null:hE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&qu(this.db,r,!0),this.stmts.upsertRuntimeState.run(oi,ai(e.teamfile,e.alias),ii,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&SE(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(oi,ai(e,n),ii,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(oi,ai(e,n),ii);return o.changes===1&&qu(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:_D(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&&!gD(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:UE(),holder_pid:process.pid,holder_host:Ju(),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=uR(st=>{"use strict";function Ws(t){if(!Array.isArray(t))throw new TypeError("Each row and headers must be an array of cells");return Array.from(t,e=>{let n=e==null?"":String(e);if(/[\x00-\x1f\x7f-\x9f]/u.test(n))throw new TypeError("Cells must be single-line text without terminal control characters");return n})}function qE(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError('align must be an array of "left", "right", or "decimal" per column');return t.map(e=>{if(e!=="left"&&e!=="right"&&e!=="decimal")throw new TypeError('align entries must be "left", "right", or "decimal"');return e})}function Ln(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 Yu(t,e,n){let r=" ".repeat(Math.max(0,e-Ln(t)));return n?r+t:t+r}function GE(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 wD(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 TD(t,e,n="\u2026"){if(Ln(t)<=e)return t;let r=Ln(n)>e?"\u2026":n,s=Ln(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=Ln(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function vD(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 VE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function SD(t){if(t!==void 0){if(!Array.isArray(t)||t.some(e=>!Number.isInteger(e)||e<0))throw new TypeError("decimalPlaces must be an array of nonnegative integers");return t}}function JE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=GE(n);r.headers!==void 0&&Ws(r.headers);for(let s of r.rows.map(Ws))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,VE(o)?.places??0)})}return e}st.measureDecimalPlaces=JE;function KE(t,e,n){let r=SD(n)??[],s=e.includes("decimal")?JE(t):[];return Array.from({length:Math.max(r.length,s.length)},(o,i)=>Math.max(r[i]??0,s[i]??0))}function YE(t,e){let n=VE(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 zE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=vD(e),o=qE(n),i=KE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=GE(c);d.headers!==void 0&&Ws(d.headers).forEach((u,f)=>{l(f,Ln(u))});for(let u of d.rows.map(Ws))u.forEach((f,m)=>{let p=o[m]==="decimal"?YE(f,i[m]??0)??f:f;l(m,Ln(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}st.measureColumns=zE;function bD(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 QE(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=bD(i),u=qE(r),f=wD(l),m=KE([t],u,c),p=e??zE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Ws);n!==void 0&&_.unshift(Ws(n));let h=_.map((g,E)=>{let y=g.length-1;for(;y>=0&&g[y]==="";)y--;return g.slice(0,y+1).map((w,T)=>{let S=p[T]||0,b=s&&S>0&&(T!==y||o)?TD(w,S,f):w;if(u[T]==="decimal"){let k=n!==void 0&&E===0?null:YE(w,m[T]??0),N=Yu(k!==null&&Ln(k)<=S?k:b,S,!0);return T===y&&k!==null?N.trimEnd():N}return u[T]==="right"?Yu(b,S,!0):T===y?b:Yu(b,S,!1)}).join(" ")}).join(`
1701
1701
  `);return h===""||d===""?h:`${d}${h.split(`
1702
1702
  `).join(`
1703
1703
  ${d}`)}`}st.renderGrid=QE;function ZE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l}={}){return QE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l})}function ID(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l,stream:c=process.stdout}={}){let d=ZE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l});d&&c.write(`${d}
1704
- `)}st.formatTable=ZE;st.printTable=ID;function XE(t){return t instanceof Date?t.getTime():typeof t=="number"?t:typeof t=="string"&&t.trim()?Date.parse(t):NaN}function kD(t,{now:e=Date.now()}={}){let n=XE(e);if(!Number.isFinite(n))throw new TypeError("now must be a valid timestamp");let r=XE(t);if(!Number.isFinite(r))return"unknown";let s=r-n,o=Math.floor(Math.abs(s)/1e3);if(o===0)return"now";for(let[i,a]of[["w",604800],["d",86400],["h",3600],["m",60],["s",1]])if(o>=a)return`${Math.floor(o/a)}${i}${s<0?" ago":""}`}st.formatRelativeTime=kD;function AD(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=t<0?"-":"",n=Math.abs(t);if(n<1e3)return String(t);let r=Math.round(n/1e3);return r<1e3?`${e}${r}K`:`${e}${(n/1e6).toFixed(1)}M`}st.formatCount=AD;var zu=[["w",604800],["d",86400],["h",3600],["m",60],["s",1]];function ND(t,{maxUnit:e="w",style:n="spaced"}={}){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let r=zu.findIndex(([a])=>a===e);if(r===-1)throw new TypeError('maxUnit must be one of "w", "d", "h", "m", "s"');if(n!=="spaced"&&n!=="compact")throw new TypeError('style must be "spaced" or "compact"');let s=Math.floor(Math.max(0,t)/1e3);if(n==="compact"){let a=zu.slice(r).filter(([u])=>u!=="s");if(a.length===0||s<60)return"<1m";let l=[],c=s,d=!1;for(let[u,f]of a){let m=Math.floor(c/f);if(c-=m*f,m>0&&!d){let p=u==="d"||u==="w"?`${m}${u}`:`${tn(m)}${u}`;l.push({text:p,zero:!1}),d=!0}else d&&l.push({text:`${tn(m)}${u}`,zero:m===0})}for(;l.length>0&&l[l.length-1].zero;)l.pop();return l.map(u=>u.text).join("")}let o=s,i=[];for(let[a,l]of zu.slice(r))if(o>=l||a==="s"&&i.length===0){let c=Math.floor(o/l);if(o-=c*l,i.push(`${c}${a}`),i.length===2)break}return i.join(" ")}st.formatDuration=ND;function eT(t){return t===void 0?new Date:t instanceof Date?t:typeof t=="number"||typeof t=="string"?new Date(t):new Date(NaN)}function tn(t){return String(t).padStart(2,"0")}function tT(t){let e=eT(t);return Number.isNaN(e.getTime())?"unknown":`${tn(e.getHours())}:${tn(e.getMinutes())}:${tn(e.getSeconds())}`}st.formatClock=tT;function RD(t){let e=eT(t);return Number.isNaN(e.getTime())?"unknown":`${`${e.getFullYear()}-${tn(e.getMonth()+1)}-${tn(e.getDate())}`} ${tT(e)}`}st.formatLocalTimestamp=RD;function xD(t){return typeof t=="number"&&Number.isFinite(t)?`${Math.round(t*100)}%`:"?%"}st.formatPercent=xD;function LD(t,{width:e=10,fill:n="#",empty:r=" ",unknown:s="?"}={}){if(typeof e!="number"||!Number.isInteger(e)||e<1)throw new TypeError("width must be a positive integer");for(let[i,a]of[["fill",n],["empty",r],["unknown",s]])if(typeof a!="string"||[...a].length!==1||/[\x00-\x1f\x7f-\x9f]/u.test(a)||Ln(a)!==1)throw new TypeError(`${i} must be a single character with terminal display width 1`);if(typeof t!="number"||!Number.isFinite(t))return s.repeat(e);let o=Math.min(e,Math.max(0,Math.round(t*e)));return`${n.repeat(o)}${r.repeat(e-o)}`}st.formatBar=LD;function CD(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=Math.floor(Math.max(0,t)/1e3),n=Math.floor(e/86400);e-=n*86400;let r=Math.floor(e/3600);e-=r*3600;let s=Math.floor(e/60);e-=s*60;let o=`${tn(r)}:${tn(s)}:${tn(e)}`;return n>0?`${n}d ${o}`:o}st.formatTimer=CD;function OD(t){return(t==null?"":String(t)).replace(/[\x00-\x1f\x7f-\x9f]/gu,n=>n===`
1705
- `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}st.escapeCell=OD});var iT={};me(iT,{defaultDbPath:()=>Qu,describeStateLocation:()=>di,isSlowWslMount:()=>oT,lmctlNextHome:()=>sT,resolveDbPath:()=>Ye,warnIfSlowDbPath:()=>Zu});import{platform as nT}from"node:os";import{homedir as DD}from"node:os";import{join as rT}from"node:path";function sT(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:rT(t.HOME||DD(),MD)}function Qu(t=process.env){return rT(sT(t),$D)}function Ye(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:Qu(e)}function di(t,e=process.env){return e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0&&e.LMCTL_DB!==Qu(e)?`db: ${t} (overridden by --db/LMCTL_DB)`:`db: ${t}`}function oT(t,e=nT()){return e!=="linux"?!1:t.startsWith("/mnt/c/")||t==="/mnt/c"}function Zu(t,e=process.stderr,n=nT()){oT(t,n)&&e.write(`warning: DB on /mnt/c is slow; consider moving to ~/.lmctl/state.db (set LMCTL_DB or use --db)
1706
- `)}var MD,$D,Cn=L(()=>{"use strict";MD=".lmctl",$D="state.db"});function On(t){return(t.env??process.env).LMCTL_NON_INTERACTIVE==="1"}function dl(t){return{...t,env:{...t.env??process.env,LMCTL_NON_INTERACTIVE:"1"}}}function Ce(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:Ye(void 0,{...process.env,...t.env})}async function W(t,e){if(t.dal!==void 0)return e(t.dal);let n=Fe({path:Ce(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=Array.from(new Set([...e,...n])),i=[],a={},l=new Map;for(let u of o){if(!u.startsWith("--"))continue;let f=u.slice(2).split(/[-_]/);if(!(f.length<2||f.some(m=>!/^[a-z0-9]+$/.test(m))))for(let m of["","_","-"]){let p=`--${f.join(m)}`,_=l.get(p)??[];_.push(u),l.set(p,_)}}function c(u){if(s.has(u)&&r.has(u))return null;if(s.has(u)||r.has(u))return u;let f=l.get(u);if(f!==void 0&&f.length===1){let m=f[0];return s.has(m)&&r.has(m)?null:m}return null}let d=u=>o.length>0?`unknown flag: ${u} (supported flags: ${o.join(", ")})`:`unknown flag: ${u}`;for(let u=0;u<t.length;u+=1){let f=t[u];if(!f.startsWith("--")){i.push(f);continue}let m=c(f);if(m===null)return{positionals:i,flags:a,error:d(f)};if(s.has(m)){a[m]=!0;continue}if(!r.has(m))return{positionals:i,flags:a,error:d(f)};let p=t[u+1];if(p===void 0||p.startsWith("--"))return{positionals:i,flags:a,error:`missing value for ${m}`};a[m]=p,u+=1}return{positionals:i,flags:a}}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 Z(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
1704
+ `)}st.formatTable=ZE;st.printTable=ID;function XE(t){return t instanceof Date?t.getTime():typeof t=="number"?t:typeof t=="string"&&t.trim()?Date.parse(t):NaN}function kD(t,{now:e=Date.now()}={}){let n=XE(e);if(!Number.isFinite(n))throw new TypeError("now must be a valid timestamp");let r=XE(t);if(!Number.isFinite(r))return"unknown";let s=r-n,o=Math.floor(Math.abs(s)/1e3);if(o===0)return"now";for(let[i,a]of[["w",604800],["d",86400],["h",3600],["m",60],["s",1]])if(o>=a)return`${Math.floor(o/a)}${i}${s<0?" ago":""}`}st.formatRelativeTime=kD;function AD(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=t<0?"-":"",n=Math.abs(t);if(n<1e3)return String(t);let r=Math.round(n/1e3);return r<1e3?`${e}${r}K`:`${e}${(n/1e6).toFixed(1)}M`}st.formatCount=AD;var zu=[["w",604800],["d",86400],["h",3600],["m",60],["s",1]];function ND(t,{maxUnit:e="w",style:n="spaced"}={}){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let r=zu.findIndex(([a])=>a===e);if(r===-1)throw new TypeError('maxUnit must be one of "w", "d", "h", "m", "s"');if(n!=="spaced"&&n!=="compact")throw new TypeError('style must be "spaced" or "compact"');let s=Math.floor(Math.max(0,t)/1e3);if(n==="compact"){let a=zu.slice(r).filter(([u])=>u!=="s");if(a.length===0||s<60)return"<1m";let l=[],c=s,d=!1;for(let[u,f]of a){let m=Math.floor(c/f);if(c-=m*f,m>0&&!d){let p=u==="d"||u==="w"?`${m}${u}`:`${tn(m)}${u}`;l.push({text:p,zero:!1}),d=!0}else d&&l.push({text:`${tn(m)}${u}`,zero:m===0})}for(;l.length>0&&l[l.length-1].zero;)l.pop();return l.map(u=>u.text).join("")}let o=s,i=[];for(let[a,l]of zu.slice(r))if(o>=l||a==="s"&&i.length===0){let c=Math.floor(o/l);if(o-=c*l,i.push(`${c}${a}`),i.length===2)break}return i.join(" ")}st.formatDuration=ND;function ew(t){return t===void 0?new Date:t instanceof Date?t:typeof t=="number"||typeof t=="string"?new Date(t):new Date(NaN)}function tn(t){return String(t).padStart(2,"0")}function tw(t){let e=ew(t);return Number.isNaN(e.getTime())?"unknown":`${tn(e.getHours())}:${tn(e.getMinutes())}:${tn(e.getSeconds())}`}st.formatClock=tw;function RD(t){let e=ew(t);return Number.isNaN(e.getTime())?"unknown":`${`${e.getFullYear()}-${tn(e.getMonth()+1)}-${tn(e.getDate())}`} ${tw(e)}`}st.formatLocalTimestamp=RD;function xD(t){return typeof t=="number"&&Number.isFinite(t)?`${Math.round(t*100)}%`:"?%"}st.formatPercent=xD;function LD(t,{width:e=10,fill:n="#",empty:r=" ",unknown:s="?"}={}){if(typeof e!="number"||!Number.isInteger(e)||e<1)throw new TypeError("width must be a positive integer");for(let[i,a]of[["fill",n],["empty",r],["unknown",s]])if(typeof a!="string"||[...a].length!==1||/[\x00-\x1f\x7f-\x9f]/u.test(a)||Ln(a)!==1)throw new TypeError(`${i} must be a single character with terminal display width 1`);if(typeof t!="number"||!Number.isFinite(t))return s.repeat(e);let o=Math.min(e,Math.max(0,Math.round(t*e)));return`${n.repeat(o)}${r.repeat(e-o)}`}st.formatBar=LD;function CD(t){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let e=Math.floor(Math.max(0,t)/1e3),n=Math.floor(e/86400);e-=n*86400;let r=Math.floor(e/3600);e-=r*3600;let s=Math.floor(e/60);e-=s*60;let o=`${tn(r)}:${tn(s)}:${tn(e)}`;return n>0?`${n}d ${o}`:o}st.formatTimer=CD;function OD(t){return(t==null?"":String(t)).replace(/[\x00-\x1f\x7f-\x9f]/gu,n=>n===`
1705
+ `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}st.escapeCell=OD});var iw={};me(iw,{defaultDbPath:()=>Qu,describeStateLocation:()=>di,isSlowWslMount:()=>ow,lmctlNextHome:()=>sw,resolveDbPath:()=>Ye,warnIfSlowDbPath:()=>Zu});import{platform as nw}from"node:os";import{homedir as DD}from"node:os";import{join as rw}from"node:path";function sw(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:rw(t.HOME||DD(),MD)}function Qu(t=process.env){return rw(sw(t),$D)}function Ye(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:Qu(e)}function di(t,e=process.env){return e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0&&e.LMCTL_DB!==Qu(e)?`db: ${t} (overridden by --db/LMCTL_DB)`:`db: ${t}`}function ow(t,e=nw()){return e!=="linux"?!1:t.startsWith("/mnt/c/")||t==="/mnt/c"}function Zu(t,e=process.stderr,n=nw()){ow(t,n)&&e.write(`warning: DB on /mnt/c is slow; consider moving to ~/.lmctl/state.db (set LMCTL_DB or use --db)
1706
+ `)}var MD,$D,Cn=L(()=>{"use strict";MD=".lmctl",$D="state.db"});function On(t){return(t.env??process.env).LMCTL_NON_INTERACTIVE==="1"}function dl(t){return{...t,env:{...t.env??process.env,LMCTL_NON_INTERACTIVE:"1"}}}function Ce(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:Ye(void 0,{...process.env,...t.env})}async function W(t,e){if(t.dal!==void 0)return e(t.dal);let n=Fe({path:Ce(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=Array.from(new Set([...e,...n])),i=[],a={},l=new Map;for(let u of o){if(!u.startsWith("--"))continue;let f=u.slice(2).split(/[-_]/);if(!(f.length<2||f.some(m=>!/^[a-z0-9]+$/.test(m))))for(let m of["","_","-"]){let p=`--${f.join(m)}`,_=l.get(p)??[];_.push(u),l.set(p,_)}}function c(u){if(s.has(u)&&r.has(u))return null;if(s.has(u)||r.has(u))return u;let f=l.get(u);if(f!==void 0&&f.length===1){let m=f[0];return s.has(m)&&r.has(m)?null:m}return null}let d=u=>o.length>0?`unknown flag: ${u} (supported flags: ${o.join(", ")})`:`unknown flag: ${u}`;for(let u=0;u<t.length;u+=1){let f=t[u];if(!f.startsWith("--")){i.push(f);continue}let m=c(f);if(m===null)return{positionals:i,flags:a,error:d(f)};if(s.has(m)){a[m]=!0;continue}if(!r.has(m))return{positionals:i,flags:a,error:d(f)};let p=t[u+1];if(p===void 0||p.startsWith("--"))return{positionals:i,flags:a,error:`missing value for ${m}`};a[m]=p,u+=1}return{positionals:i,flags:a}}function V(t,e){let n=t.flags[e];return typeof n=="string"?n:void 0}function Y(t,e){return t.flags[e]===!0}function Z(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 Zr(){return(0,cT.formatClock)()}function ui(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 PD(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 UD(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:!PD(e)}function FD(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"?aT(e.event):aT(e)}function aT(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 dT(t,e){if(UD(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 Zr(){return(0,cw.formatClock)()}function ui(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 PD(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 UD(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:!PD(e)}function FD(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"?aw(e.event):aw(e)}function aw(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 dw(t,e){if(UD(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
1710
  `;t.stderr.write(u)}},s);return a.unref(),{poke:l=>{FD(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
- `),2}function Hs(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}function ul(t){if(t.stdout!==process.stdout||lT)return;lT=!0;let e=n=>{throw n.code==="EPIPE"&&process.exit(0),process.stdout.off("error",e),n};process.stdout.on("error",e)}var cT,lT,le=L(()=>{"use strict";bt();cT=Ft(Ct(),1);Cn();lT=!1});function es(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var fl=L(()=>{"use strict"});import{randomUUID as XD}from"node:crypto";import{chmodSync as fT,mkdirSync as qD,readdirSync as GD,statSync as VD,unlinkSync as JD,writeFileSync as KD}from"node:fs";import{homedir as YD,tmpdir as zD}from"node:os";import{join as pi}from"node:path";function tf(t){return es(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function hi(t){return tf(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(rM,"$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 sM(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?pi(zD(),`lmctl-test-${process.pid}`,".lmctl"):pi(process.env.HOME||YD(),".lmctl"));return pi(t,"provider-errors")}function oM(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)}
1711
+ `),2}function Hs(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}function ul(t){if(t.stdout!==process.stdout||lw)return;lw=!0;let e=n=>{throw n.code==="EPIPE"&&process.exit(0),process.stdout.off("error",e),n};process.stdout.on("error",e)}var cw,lw,le=L(()=>{"use strict";bt();cw=Ft(Ct(),1);Cn();lw=!1});function es(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var fl=L(()=>{"use strict"});import{randomUUID as XD}from"node:crypto";import{chmodSync as fw,mkdirSync as qD,readdirSync as GD,statSync as VD,unlinkSync as JD,writeFileSync as KD}from"node:fs";import{homedir as YD,tmpdir as zD}from"node:os";import{join as pi}from"node:path";function tf(t){return es(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function hi(t){return tf(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(rM,"$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 sM(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?pi(zD(),`lmctl-test-${process.pid}`,".lmctl"):pi(process.env.HOME||YD(),".lmctl"));return pi(t,"provider-errors")}function oM(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
- ${t.slice(-s)}`}function iM(t,e){try{let n=GD(t).filter(s=>nM.test(s)).sort().map(s=>{let o=pi(t,s);return{path:o,size:VD(o).size}}),r=n.reduce((s,o)=>s+o.size,0);for(let s=0;s<n.length&&(n.length-s>eM||r>tM);s++){let o=n[s];o.path!==e&&(JD(o.path),r-=o.size)}}catch{}}function aM(t,e){let n=sM(),r=pi(n,`stderr-${Date.now()}-${process.pid}-${XD()}.log`);try{qD(n,{recursive:!0,mode:448}),fT(n,448);let s=`[${new Date().toISOString()}] provider=${e}
1713
+ ${t.slice(-s)}`}function iM(t,e){try{let n=GD(t).filter(s=>nM.test(s)).sort().map(s=>{let o=pi(t,s);return{path:o,size:VD(o).size}}),r=n.reduce((s,o)=>s+o.size,0);for(let s=0;s<n.length&&(n.length-s>eM||r>tM);s++){let o=n[s];o.path!==e&&(JD(o.path),r-=o.size)}}catch{}}function aM(t,e){let n=sM(),r=pi(n,`stderr-${Date.now()}-${process.pid}-${XD()}.log`);try{qD(n,{recursive:!0,mode:448}),fw(n,448);let s=`[${new Date().toISOString()}] provider=${e}
1714
1714
  ${oM(t,ZD,"provider output not saved")}
1715
- `;return KD(r,s,{encoding:"utf8",flag:"wx",mode:384}),fT(r,384),iM(n,r),{path:r,saved:!0}}catch{return{path:r,saved:!1}}}function lM(t){let e=new Map,n=new Map;t.forEach((o,i)=>{o.trim()!==""&&(e.set(o,(e.get(o)??0)+1),n.set(o,i))});let r=[],s=0;return t.forEach((o,i)=>{let a=e.get(o);if(a===void 0||a===1){r.push(o);return}n.get(o)===i&&(s+=a-1,r.push(`${o} (repeated ${a} times)`))}),{lines:r,duplicates:s}}function Dn(t){return Array.from(t)}function cM(t,e){let n=Dn(t),r=`\u2026[${n.length} characters clipped]\u2026`,s=Math.max(2,e-Dn(r).length),o=Math.max(1,Math.floor(s*.4)),i=Math.max(1,s-o),a=n.slice(0,o).join("").replace(/[\u200d\ufe0f\u0300-\u036f]+$/u,""),l=n.slice(-i).join("").replace(/^[\u200d\ufe0f\u0300-\u036f]+/u,""),c=n.length-Dn(a).length-Dn(l).length;return`${a}\u2026[${c} characters clipped]\u2026${l}`}function dM(t,e){let n=t.join(`
1715
+ `;return KD(r,s,{encoding:"utf8",flag:"wx",mode:384}),fw(r,384),iM(n,r),{path:r,saved:!0}}catch{return{path:r,saved:!1}}}function lM(t){let e=new Map,n=new Map;t.forEach((o,i)=>{o.trim()!==""&&(e.set(o,(e.get(o)??0)+1),n.set(o,i))});let r=[],s=0;return t.forEach((o,i)=>{let a=e.get(o);if(a===void 0||a===1){r.push(o);return}n.get(o)===i&&(s+=a-1,r.push(`${o} (repeated ${a} times)`))}),{lines:r,duplicates:s}}function Dn(t){return Array.from(t)}function cM(t,e){let n=Dn(t),r=`\u2026[${n.length} characters clipped]\u2026`,s=Math.max(2,e-Dn(r).length),o=Math.max(1,Math.floor(s*.4)),i=Math.max(1,s-o),a=n.slice(0,o).join("").replace(/[\u200d\ufe0f\u0300-\u036f]+$/u,""),l=n.slice(-i).join("").replace(/^[\u200d\ufe0f\u0300-\u036f]+/u,""),c=n.length-Dn(a).length-Dn(l).length;return`${a}\u2026[${c} characters clipped]\u2026${l}`}function dM(t,e){let n=t.join(`
1716
1716
  `);if(Dn(n).length<=e)return{text:n,omittedLines:0,truncatedLine:!1};let r=Math.max(24,Math.floor(e*.68)),s=[],o=0,i=!1;for(let u=t.length-1;u>=0;u--){let f=t[u],m=Dn(f).length+(s.length>0?1:0);if(o+m<=r){s.unshift({index:u,line:f}),o+=m;continue}s.length===0&&(s.unshift({index:u,line:cM(f,t.length===1?e:r)}),i=!0);break}let a=s[0]?.index??t.length,l=[],c="",d=u=>{let f=t.length-u.length-s.length,m=[...u];return f>0&&m.push(`\u2026 ${f} lines omitted \u2026`),m.push(...s.map(p=>p.line)),m.join(`
1717
- `)};for(let u=0;u<a;u++){let f=[...l,t[u]],m=d(f);if(Dn(m).length>e)break;l=f,c=m}return l.length===0&&(c=d(l)),Dn(c).length>e&&(c=Dn(c).slice(-e).join(""),i=!0),{text:c,omittedLines:Math.max(0,t.length-l.length-s.length),truncatedLine:i}}function we(t,e){let n=hi(t),r=e.fullOutput===void 0?n:hi(e.fullOutput),{lines:s,duplicates:o}=lM(n.trim().split(/\r\n|\r|\n/)),i=dM(s,Math.max(64,e.maxChars??QD)),a=[];if(i.omittedLines>0&&a.push(`${i.omittedLines} lines omitted from summary`),i.truncatedLine&&a.push("a long line was clipped"),o>0&&a.push(`${o} duplicate lines collapsed`),e.fullOutput!==void 0&&r.trim()!==n.trim()&&a.push("filtered provider output is retained in the full log"),a.length===0)return i.text;let l=aM(r,e.provider),c=l.saved?`full redacted output: ${l.path}`:`full redacted output could not be written; attempted path: ${l.path}`;return`${i.text}
1717
+ `)};for(let u=0;u<a;u++){let f=[...l,t[u]],m=d(f);if(Dn(m).length>e)break;l=f,c=m}return l.length===0&&(c=d(l)),Dn(c).length>e&&(c=Dn(c).slice(-e).join(""),i=!0),{text:c,omittedLines:Math.max(0,t.length-l.length-s.length),truncatedLine:i}}function Te(t,e){let n=hi(t),r=e.fullOutput===void 0?n:hi(e.fullOutput),{lines:s,duplicates:o}=lM(n.trim().split(/\r\n|\r|\n/)),i=dM(s,Math.max(64,e.maxChars??QD)),a=[];if(i.omittedLines>0&&a.push(`${i.omittedLines} lines omitted from summary`),i.truncatedLine&&a.push("a long line was clipped"),o>0&&a.push(`${o} duplicate lines collapsed`),e.fullOutput!==void 0&&r.trim()!==n.trim()&&a.push("filtered provider output is retained in the full log"),a.length===0)return i.text;let l=aM(r,e.provider),c=l.saved?`full redacted output: ${l.path}`:`full redacted output could not be written; attempted path: ${l.path}`;return`${i.text}
1718
1718
 
1719
- [provider stderr: ${a.join("; ")}; ${c}]`}function mT(t,e=500){let n=t.indexOf(`
1719
+ [provider stderr: ${a.join("; ")}; ${c}]`}function mw(t,e=500){let n=t.indexOf(`
1720
1720
 
1721
1721
  [provider stderr:`),r=a=>a.replace(/\s+/gu," ").trim(),s=r(t),o=Array.from(s);if(o.length<=e)return s;if(n<0)return`${o.slice(0,e-3).join("")}...`;let i=Array.from(r(t.slice(0,n)));return i.length<=e?i.join(""):`...${i.slice(-(e-3)).join("")}`}function ml(t,e){let r=(tf(t).replace(/\r\n?/g,`
1722
1722
  `).split(/\n[ \t]*\n/,1)[0]??"").split(`
1723
- `).map(o=>o.replace(/\s+/gu," ").trim()).filter(o=>o!=="");if(r.length<2||!r[0].endsWith(":"))return null;let s=Array.from(r.slice(1).join(" "));return s.length<=e?s.join(""):`\u2026${s.slice(-(e-1)).join("").replace(/^[\u200d\ufe0f\u0300-\u036f]+/u,"")}`}function pT(t){return tf(t)}function hT(t=1e6){let e=Math.floor(t*.1),n="",r="",s=0;return{append(o){if(n.length<e&&s===0&&r===""){let a=o.slice(0,e-n.length);if(n+=a,o=o.slice(a.length),o==="")return}r+=o;let i=r.length-(t-e);i>0&&(r=r.slice(i),s+=i)},text(){return s===0?n+r:`${n}
1723
+ `).map(o=>o.replace(/\s+/gu," ").trim()).filter(o=>o!=="");if(r.length<2||!r[0].endsWith(":"))return null;let s=Array.from(r.slice(1).join(" "));return s.length<=e?s.join(""):`\u2026${s.slice(-(e-1)).join("").replace(/^[\u200d\ufe0f\u0300-\u036f]+/u,"")}`}function pw(t){return tf(t)}function hw(t=1e6){let e=Math.floor(t*.1),n="",r="",s=0;return{append(o){if(n.length<e&&s===0&&r===""){let a=o.slice(0,e-n.length);if(n+=a,o=o.slice(a.length),o==="")return}r+=o;let i=r.length-(t-e);i>0&&(r=r.slice(i),s+=i)},text(){return s===0?n+r:`${n}
1724
1724
  \u2026 ${s} characters of provider stderr dropped \u2026
1725
1725
  ${r}`}}}function Bs(t,e){return e===""?t:`${t}:${e.includes(`
1726
1726
  `)?`
1727
- `:" "}${e}`}var QD,ZD,eM,tM,nM,rM,It=L(()=>{"use strict";fl();QD=500,ZD=1e6,eM=50,tM=20*1024*1024,nM=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,rM=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as yT,appendFileSync as uM,mkdirSync as fM,existsSync as w6,readdirSync as v6,unlinkSync as S6}from"node:fs";import{join as hl,dirname as mM}from"node:path";import{homedir as pM}from"node:os";function rf(){return hl(pM(),".lmctl")}function sf(){Xs=!0,process.env.LMCTL_DEBUG="1"}function ET(){return{cliDebug:Xs,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function TT(t){Xs=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ye(){if(Xs||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-gT>=hM&&(_T=EM(),gT=t),_T}function _i(){return Xs||process.env.LMCTL_DEBUG==="1"}function _M(){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 nf(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 hi(t);if(Array.isArray(t))return t.map(r=>nf(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]=nf(o,s,n);return n.delete(t),r}return t}function gM(t){return nf(t)}function qe(t,e){if(e?.verbose){if(!Xs)return}else if(!e?.always&&!ye())return;try{yM();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,...gM(t)};uM(pl,JSON.stringify(n)+`
1728
- `)}catch{}}function yM(){if(!pl){let e=_M().slice(0,13).replace("T","-");pl=hl(rf(),`debug-${e}.log`)}fM(mM(pl),{recursive:!0})}function ze(...t){qe({event:"legacy",msg:t.join(" ")})}function je(...t){qe({event:"legacy",msg:t.join(" ")},{verbose:!0})}function U(t){qe(t,{always:!0})}function EM(){return TM()||wM()}function TM(){try{let t=yT(hl(rf(),"config.toml"),"utf-8");for(let e of t.split(`
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 wM(){try{let t=yT(hl(rf(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var Xs,_T,gT,hM,pl,re=L(()=>{"use strict";It();Xs=!1,_T=!1,gT=0,hM=5e3;pl=null});function jM(t,e){if(!e||t.includes(e))return!1;let n=0;for(let r of t.split(`
1730
- `))/^\s{2,}\S.*\([A-Za-z]+\)\s*$/.test(r)&&n++;return n>=3}function Mn(t,e={}){if(typeof t!="string"||t==="")return e.status==="busy"?{class:"receiver_busy",rule:"status-busy"}:e.status==="empty"?{class:"upstream_undisclosed",rule:"status-empty"}:e.status==="stalled"?{class:"transport_interrupted",rule:"status-stalled"}:{class:"unknown",rule:null};for(let n of WM)if(n.test(t,e))return{class:n.class,rule:n.rule};return{class:"unknown",rule:null}}var Ht,WM,_l=L(()=>{"use strict";Ht=t=>e=>t.test(e);WM=[{rule:"usage-limit",class:"quota_exhausted",test:Ht(/usage limit|out of usage credits|quota (has been )?(reached|exhausted)|Insufficient Balance/i)},{rule:"spawn-enoent",class:"binary_missing",test:Ht(/spawn \S+ ENOENT/i)},{rule:"auth-message",class:"auth_required",test:Ht(/Unauthorized|Incorrect API key|invalid api key|not logged in|Authentication required|login required/i)},{rule:"no-content-no-activity",class:"upstream_undisclosed",test:Ht(/no content and no observed activity/i)},{rule:"throttled",class:"upstream_throttled",test:Ht(/rate.?limit|too many requests|at capacity|(?:\bhttp\b[^\n]{0,20}|\bstatus(?: code)?\W{0,3}|\berror\W{0,3}|\bcode\W{0,3})429\b/i)},{rule:"connection-interrupted",class:"transport_interrupted",test:Ht(/connection to the agent was interrupted|stalled for \d+s|provider stalled after/i)},{rule:"context-window",class:"context_exhausted",test:Ht(/ran out of room in the model's context window|context (length|window) (exceeded|full)/i)},{rule:"receiver-held",class:"receiver_busy",test:Ht(/is held by a terminal|is servicing /i)},{rule:"holder-dead",class:"holder_died",test:Ht(/holder process verified not alive|holder_pid confirmed dead|received SIGTERM/i)},{rule:"model-list",class:"model_not_offered",test:(t,e)=>jM(t,e.model)},{rule:"model-message",class:"model_not_offered",test:Ht(/model is not supported|model .{0,60}(does not exist|not found|unavailable)|unknown model|invalid model/i)},{rule:"conversation-gone",class:"stale_session",test:Ht(/No conversation found with session ID|conversation \S+ not found/i)}]});import{openSync as HM,closeSync as BM,fstatSync as XM,readSync as qM,constants as IT}from"node:fs";import{dirname as GM,join as gl}from"node:path";import{createHash as VM}from"node:crypto";function lf(t){if(!Xr(t.catalog)||!qr(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=RT(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(!kT(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&&!kT(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 AT(t){let e=HM(t,IT.O_RDONLY|IT.O_NONBLOCK);try{let n=XM(e);if(!n.isFile()||n.size>JM)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=qM(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{BM(e)}}function cf(t,e=gl(GM(t),"aliases.json")){let n=AT(t),r=AT(e),s;try{s=NT(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=NT(r),i={catalog:s,aliases:o,source:"pinned",generatedAt:s?.generated_at||null,sha256:VM("sha256").update(n).update(r).digest("hex")};return lf(i),i}function qs(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 lf(o),o})():null}finally{t.pragma("busy_timeout = "+e)}}function df(t,e,n={}){lf(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(RT(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 uf(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=qs(t),o=af.get(t),i=o&&o.hash===s?.sha256?o.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=i&&n-i<Ms(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(cf(gl(r.LMCTL_PRICE_DATA,"model_list.json"))):vt({cacheDir:r.LMCTL_HOME?gl(r.LMCTL_HOME,"cache","lmprice"):r.HOME?gl(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:Ms(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(af.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=df(t,c,{now:n}),u=qs(t);return af.set(t,{hash:u?.sha256??null,at:n}),{status:d,snapshot:u}}async function yl(t,e){try{return(await uf(t,{env:e,budgetMs:900})).snapshot??gi}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return gi;try{return qs(t)??gi}catch{return gi}}}async function ff(t){if(t.dal)return yl(t.dal.db,t.env);let e;try{return e=Fe({path:Ce(t),recover:!1}),await yl(e.db,t.env)}catch{return gi}finally{try{e?.close()}catch{}}}var gi,RT,kT,JM,NT,af,El=L(()=>{"use strict";Qt();bt();le();gi={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},RT=t=>t.record_id??t.source+":"+t.source_model_id,kT=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;JM=64*1024*1024;NT=t=>JSON.parse(t.replace(/^\uFEFF/,""));af=new WeakMap});function $n(t){return t!=="gemini"}function Tl(t){if(!$n(t))throw new Error(cr)}var cr,Gs=L(()=>{"use strict";cr="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function xT(t){if(t.length===0||!t.startsWith("---"))throw new nn("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
1731
- `);if(e[0]!=="---")throw new nn("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 nn(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!KM.has(c))throw new nn(`unknown frontmatter key "${c}" \u2014 allowed keys: ${wl.join(", ")}`);n[c]=d}if(r===-1)throw new nn("frontmatter not closed (missing trailing `---` on its own line)");for(let i of wl)if(n[i]===void 0)throw new nn(`missing required frontmatter key "${i}" \u2014 required: ${wl.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 wl,KM,nn,LT=L(()=>{"use strict";wl=["title","description","members"],KM=new Set(wl),nn=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function ts(t){return mf.has(t)}var mf,yi=L(()=>{"use strict";mf=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as YM,writeFileSync as J6,renameSync as K6,existsSync as OT}from"node:fs";import{basename as zM,resolve as Vs,dirname as pf}from"node:path";function QM(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 ZM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function e$(t){return/^\s*_SESSION_\s+\S/.test(t)}function t$(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Oe(t){return/\.(?:lmctl|lmc)$/i.test(t)}function Ei(t){return zM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ie(t){let e=YM(t,"utf-8"),n=pf(Vs(t)),r=Pn(e,Ei(t),{baseDir:n,sourcePath:Vs(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Vs(n,s.sessiondir));return r}function Pn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1732
- `);o=l>=0?o.slice(l+1):""}let i=null;if(o.startsWith("---"))try{i=xT(o)}catch(l){if(l instanceof nn)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
1733
- `);for(let l=0;l<a.length;l++){let c=a[l],d=l+1;if(e$(c))throw new Error(`line ${d}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(t$(c)||!ZM(c))continue;let u=QM(c);for(let m of Object.keys(u))if(!CT.includes(m))throw new Error(`line ${d}: unknown key "${m}" on _MEMBER_ line: ${c.trim()}
1734
- allowed keys: ${CT.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 Ti(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()===hf.toLowerCase());r.length>1&&n.push({field:hf,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?Vs(e,o.teamfile):Vs(o.teamfile);if(!OT(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=Ie(a),c=Js(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 mf.has(o.provider)?$n(o.provider)||n.push({field:o.alias,message:cr}):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 Js(t){return t.members.find(e=>e.alias.toLowerCase()===hf.toLowerCase())}function _f(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=Vs(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),!OT(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=Ie(o),l=Js(a);if(!l)throw new Error(`Team at ${o} has no lead session`);if(l.teamfile)return _f(l,pf(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||pf(o),alias:t.alias,resolvedFrom:o,model:l.model,effort:l.effort}}function vl(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var hf,CT,Ge=L(()=>{"use strict";Gs();LT();yi();hf="Lead";CT=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as n$}from"node:crypto";import{existsSync as DT,readFileSync as MT,realpathSync as r$}from"node:fs";import{dirname as s$,resolve as $T}from"node:path";function Ne(t,e){let n=$T(t);if(DT(n))return r$(n);if(e!==void 0){let r=i$(t,n,e);if(r!==null)return r}return n}function bl(t,e){let n=s$(e),r=Pn(t,Ei(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=$T(n,s.sessiondir));return r}function rn(t,e,n=r=>{process.stderr.write(`warning: ${r}
1735
- `)}){let r=Ne(t,o$(e)?e:void 0);if(DT(r)){let o=MT(r,"utf8"),i=bl(o,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&a$(i)&&c$(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 o$(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function i$(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function a$(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=gf)}function wi(t,e,n){let r=Ne(e),s=n.members.filter(o=>o.teamfile===void 0&&o.session!==void 0&&o.session.length>=gf);if(s.length!==0)for(let o of t.listRootTeams()){let i,a;try{if(i=Ne(o.teamfile_path),i===r)continue;a=MT(i,"utf8")}catch(c){if(l$(c))continue;throw c}let l=bl(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)>=gf);if(d!==void 0)throw new Sl(`sessionid ownership conflict: ${r}:${c.alias} and ${i}:${d.alias} both use sessionid "${c.session}"`)}}}function l$(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function c$(t,e,n,r,s){try{wi(t,e,n)}catch(i){if(!(i instanceof Sl))throw i;s(`${i.message}; skipping automatic registration`);return}let o={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:n$("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(o)}var gf,Sl,sn=L(()=>{"use strict";Ge();gf=5,Sl=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as d$}from"node:crypto";import{closeSync as u$,openSync as f$,readFileSync as UT,statSync as m$,unlinkSync as yf,writeFileSync as p$}from"node:fs";function FT(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function jT(t){let e;try{e=JSON.parse(UT(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:PT(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 PT(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function PT(t){try{return Date.now()-m$(t).mtimeMs<3e5}catch{return!1}}function Ef(t,e){return jT(FT(t,e))}function WT(t,e){let n=FT(t,e),r=JSON.stringify({pid:process.pid,token:d$()});for(let s=0;s<2;s+=1)try{let o=f$(n,"wx");try{p$(o,r)}catch(i){throw yf(n),i}finally{u$(o)}return()=>{try{UT(n,"utf8")===r&&yf(n)}catch(i){if(i.code!=="ENOENT")throw i}}}catch(o){if(o.code!=="EEXIST")throw o;if(jT(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{yf(n)}catch(i){if(i.code!=="ENOENT")throw i}}throw new Error(`${e}: could not acquire seed marker`)}var Tf=L(()=>{"use strict"});import{existsSync as h$}from"node:fs";import{dirname as HT}from"node:path";function wf(t){return _$.test(t)||g$.test(t)||y$.test(t)}function vi(t){return Il.test(t)}function Un(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!Oe(n)||!Il.test(r)?null:{teamfile:n,alias:r}}function Ve(t,e,n){if(!Oe(t))throw new ge(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!vi(e))throw new ge(`lmctl: "${e}" is not a valid alias (must match ${Il.source}).`);let r=Ne(t,n);if(n===void 0&&!h$(r))throw new ge(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=rn(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=vl(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}.
1736
- Known aliases: ${i}`,"not_found")}if(o.teamfile!==void 0){let i=_f(o,HT(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(Ef(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=>Ef(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.
1737
- Run: lmctl seed ${t}`);return{teamfile:r,alias:o.alias,provider:o.provider,sessionid:o.session,sessiondir:o.sessiondir??HT(r),isLead:Js(s)?.alias===o.alias,...o.model!==void 0?{model:o.model}:{},...o.effort!==void 0?{effort:o.effort}:{}}}function on(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=Un(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(Oe(n))return r!==void 0?vi(r)?{mode:"ai-team",teamfile:n,alias:r}:{mode:"error",message:`lmctl ${t.name}: "${r}" is not a valid alias (must match ${Il.source}).`}:t.allowsBareTeamfile?{mode:"ai-team",teamfile:n}:{mode:"error",message:`lmctl ${t.name}: alias required.
1738
- Use: lmctl ${t.name} ${n}:<alias> or lmctl ${t.name} ${n} <alias>`};if(wf(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.
1727
+ `:" "}${e}`}var QD,ZD,eM,tM,nM,rM,It=L(()=>{"use strict";fl();QD=500,ZD=1e6,eM=50,tM=20*1024*1024,nM=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,rM=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as yw,appendFileSync as uM,mkdirSync as fM,existsSync as T6,readdirSync as v6,unlinkSync as S6}from"node:fs";import{join as hl,dirname as mM}from"node:path";import{homedir as pM}from"node:os";function rf(){return hl(pM(),".lmctl")}function sf(){Xs=!0,process.env.LMCTL_DEBUG="1"}function Ew(){return{cliDebug:Xs,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function ww(t){Xs=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ye(){if(Xs||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-gw>=hM&&(_w=EM(),gw=t),_w}function _i(){return Xs||process.env.LMCTL_DEBUG==="1"}function _M(){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 nf(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 hi(t);if(Array.isArray(t))return t.map(r=>nf(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]=nf(o,s,n);return n.delete(t),r}return t}function gM(t){return nf(t)}function qe(t,e){if(e?.verbose){if(!Xs)return}else if(!e?.always&&!ye())return;try{yM();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,...gM(t)};uM(pl,JSON.stringify(n)+`
1728
+ `)}catch{}}function yM(){if(!pl){let e=_M().slice(0,13).replace("T","-");pl=hl(rf(),`debug-${e}.log`)}fM(mM(pl),{recursive:!0})}function ze(...t){qe({event:"legacy",msg:t.join(" ")})}function je(...t){qe({event:"legacy",msg:t.join(" ")},{verbose:!0})}function U(t){qe(t,{always:!0})}function EM(){return wM()||TM()}function wM(){try{let t=yw(hl(rf(),"config.toml"),"utf-8");for(let e of t.split(`
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 TM(){try{let t=yw(hl(rf(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var Xs,_w,gw,hM,pl,re=L(()=>{"use strict";It();Xs=!1,_w=!1,gw=0,hM=5e3;pl=null});function jM(t,e){if(!e||t.includes(e))return!1;let n=0;for(let r of t.split(`
1730
+ `))/^\s{2,}\S.*\([A-Za-z]+\)\s*$/.test(r)&&n++;return n>=3}function Mn(t,e={}){if(typeof t!="string"||t==="")return e.status==="busy"?{class:"receiver_busy",rule:"status-busy"}:e.status==="empty"?{class:"upstream_undisclosed",rule:"status-empty"}:e.status==="stalled"?{class:"transport_interrupted",rule:"status-stalled"}:{class:"unknown",rule:null};for(let n of WM)if(n.test(t,e))return{class:n.class,rule:n.rule};return{class:"unknown",rule:null}}var Ht,WM,_l=L(()=>{"use strict";Ht=t=>e=>t.test(e);WM=[{rule:"usage-limit",class:"quota_exhausted",test:Ht(/usage limit|out of usage credits|quota (has been )?(reached|exhausted)|Insufficient Balance/i)},{rule:"spawn-enoent",class:"binary_missing",test:Ht(/spawn \S+ ENOENT/i)},{rule:"auth-message",class:"auth_required",test:Ht(/Unauthorized|Incorrect API key|invalid api key|not logged in|Authentication required|login required/i)},{rule:"no-content-no-activity",class:"upstream_undisclosed",test:Ht(/no content and no observed activity/i)},{rule:"throttled",class:"upstream_throttled",test:Ht(/rate.?limit|too many requests|at capacity|(?:\bhttp\b[^\n]{0,20}|\bstatus(?: code)?\W{0,3}|\berror\W{0,3}|\bcode\W{0,3})429\b/i)},{rule:"connection-interrupted",class:"transport_interrupted",test:Ht(/connection to the agent was interrupted|stalled for \d+s|provider stalled after/i)},{rule:"context-window",class:"context_exhausted",test:Ht(/ran out of room in the model's context window|context (length|window) (exceeded|full)/i)},{rule:"receiver-held",class:"receiver_busy",test:Ht(/is held by a terminal|is servicing /i)},{rule:"holder-dead",class:"holder_died",test:Ht(/holder process verified not alive|holder_pid confirmed dead|received SIGTERM/i)},{rule:"model-list",class:"model_not_offered",test:(t,e)=>jM(t,e.model)},{rule:"model-message",class:"model_not_offered",test:Ht(/model is not supported|model .{0,60}(does not exist|not found|unavailable)|unknown model|invalid model/i)},{rule:"conversation-gone",class:"stale_session",test:Ht(/No conversation found with session ID|conversation \S+ not found/i)}]});import{openSync as HM,closeSync as BM,fstatSync as XM,readSync as qM,constants as Iw}from"node:fs";import{dirname as GM,join as gl}from"node:path";import{createHash as VM}from"node:crypto";function lf(t){if(!Xr(t.catalog)||!qr(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=Rw(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(!kw(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&&!kw(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 Aw(t){let e=HM(t,Iw.O_RDONLY|Iw.O_NONBLOCK);try{let n=XM(e);if(!n.isFile()||n.size>JM)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=qM(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{BM(e)}}function cf(t,e=gl(GM(t),"aliases.json")){let n=Aw(t),r=Aw(e),s;try{s=Nw(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=Nw(r),i={catalog:s,aliases:o,source:"pinned",generatedAt:s?.generated_at||null,sha256:VM("sha256").update(n).update(r).digest("hex")};return lf(i),i}function qs(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 lf(o),o})():null}finally{t.pragma("busy_timeout = "+e)}}function df(t,e,n={}){lf(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(Rw(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 uf(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=qs(t),o=af.get(t),i=o&&o.hash===s?.sha256?o.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=i&&n-i<Ms(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(cf(gl(r.LMCTL_PRICE_DATA,"model_list.json"))):vt({cacheDir:r.LMCTL_HOME?gl(r.LMCTL_HOME,"cache","lmprice"):r.HOME?gl(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:Ms(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(af.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=df(t,c,{now:n}),u=qs(t);return af.set(t,{hash:u?.sha256??null,at:n}),{status:d,snapshot:u}}async function yl(t,e){try{return(await uf(t,{env:e,budgetMs:900})).snapshot??gi}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return gi;try{return qs(t)??gi}catch{return gi}}}async function ff(t){if(t.dal)return yl(t.dal.db,t.env);let e;try{return e=Fe({path:Ce(t),recover:!1}),await yl(e.db,t.env)}catch{return gi}finally{try{e?.close()}catch{}}}var gi,Rw,kw,JM,Nw,af,El=L(()=>{"use strict";Qt();bt();le();gi={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},Rw=t=>t.record_id??t.source+":"+t.source_model_id,kw=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;JM=64*1024*1024;Nw=t=>JSON.parse(t.replace(/^\uFEFF/,""));af=new WeakMap});function $n(t){return t!=="gemini"}function wl(t){if(!$n(t))throw new Error(cr)}var cr,Gs=L(()=>{"use strict";cr="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function xw(t){if(t.length===0||!t.startsWith("---"))throw new nn("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
1731
+ `);if(e[0]!=="---")throw new nn("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 nn(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!KM.has(c))throw new nn(`unknown frontmatter key "${c}" \u2014 allowed keys: ${Tl.join(", ")}`);n[c]=d}if(r===-1)throw new nn("frontmatter not closed (missing trailing `---` on its own line)");for(let i of Tl)if(n[i]===void 0)throw new nn(`missing required frontmatter key "${i}" \u2014 required: ${Tl.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 Tl,KM,nn,Lw=L(()=>{"use strict";Tl=["title","description","members"],KM=new Set(Tl),nn=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function ts(t){return mf.has(t)}var mf,yi=L(()=>{"use strict";mf=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as YM,writeFileSync as J6,renameSync as K6,existsSync as Ow}from"node:fs";import{basename as zM,resolve as Vs,dirname as pf}from"node:path";function QM(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 ZM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function e$(t){return/^\s*_SESSION_\s+\S/.test(t)}function t$(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Oe(t){return/\.(?:lmctl|lmc)$/i.test(t)}function Ei(t){return zM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ie(t){let e=YM(t,"utf-8"),n=pf(Vs(t)),r=Pn(e,Ei(t),{baseDir:n,sourcePath:Vs(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Vs(n,s.sessiondir));return r}function Pn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1732
+ `);o=l>=0?o.slice(l+1):""}let i=null;if(o.startsWith("---"))try{i=xw(o)}catch(l){if(l instanceof nn)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
1733
+ `);for(let l=0;l<a.length;l++){let c=a[l],d=l+1;if(e$(c))throw new Error(`line ${d}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(t$(c)||!ZM(c))continue;let u=QM(c);for(let m of Object.keys(u))if(!Cw.includes(m))throw new Error(`line ${d}: unknown key "${m}" on _MEMBER_ line: ${c.trim()}
1734
+ allowed keys: ${Cw.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 wi(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()===hf.toLowerCase());r.length>1&&n.push({field:hf,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?Vs(e,o.teamfile):Vs(o.teamfile);if(!Ow(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=Ie(a),c=Js(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 mf.has(o.provider)?$n(o.provider)||n.push({field:o.alias,message:cr}):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 Js(t){return t.members.find(e=>e.alias.toLowerCase()===hf.toLowerCase())}function _f(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=Vs(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),!Ow(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=Ie(o),l=Js(a);if(!l)throw new Error(`Team at ${o} has no lead session`);if(l.teamfile)return _f(l,pf(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||pf(o),alias:t.alias,resolvedFrom:o,model:l.model,effort:l.effort}}function vl(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var hf,Cw,Ge=L(()=>{"use strict";Gs();Lw();yi();hf="Lead";Cw=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as n$}from"node:crypto";import{existsSync as Dw,readFileSync as Mw,realpathSync as r$}from"node:fs";import{dirname as s$,resolve as $w}from"node:path";function Ne(t,e){let n=$w(t);if(Dw(n))return r$(n);if(e!==void 0){let r=i$(t,n,e);if(r!==null)return r}return n}function bl(t,e){let n=s$(e),r=Pn(t,Ei(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=$w(n,s.sessiondir));return r}function rn(t,e,n=r=>{process.stderr.write(`warning: ${r}
1735
+ `)}){let r=Ne(t,o$(e)?e:void 0);if(Dw(r)){let o=Mw(r,"utf8"),i=bl(o,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&a$(i)&&c$(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 o$(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function i$(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function a$(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=gf)}function Ti(t,e,n){let r=Ne(e),s=n.members.filter(o=>o.teamfile===void 0&&o.session!==void 0&&o.session.length>=gf);if(s.length!==0)for(let o of t.listRootTeams()){let i,a;try{if(i=Ne(o.teamfile_path),i===r)continue;a=Mw(i,"utf8")}catch(c){if(l$(c))continue;throw c}let l=bl(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)>=gf);if(d!==void 0)throw new Sl(`sessionid ownership conflict: ${r}:${c.alias} and ${i}:${d.alias} both use sessionid "${c.session}"`)}}}function l$(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function c$(t,e,n,r,s){try{Ti(t,e,n)}catch(i){if(!(i instanceof Sl))throw i;s(`${i.message}; skipping automatic registration`);return}let o={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:n$("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(o)}var gf,Sl,sn=L(()=>{"use strict";Ge();gf=5,Sl=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as d$}from"node:crypto";import{closeSync as u$,openSync as f$,readFileSync as Uw,statSync as m$,unlinkSync as yf,writeFileSync as p$}from"node:fs";function Fw(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function jw(t){let e;try{e=JSON.parse(Uw(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:Pw(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 Pw(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function Pw(t){try{return Date.now()-m$(t).mtimeMs<3e5}catch{return!1}}function Ef(t,e){return jw(Fw(t,e))}function Ww(t,e){let n=Fw(t,e),r=JSON.stringify({pid:process.pid,token:d$()});for(let s=0;s<2;s+=1)try{let o=f$(n,"wx");try{p$(o,r)}catch(i){throw yf(n),i}finally{u$(o)}return()=>{try{Uw(n,"utf8")===r&&yf(n)}catch(i){if(i.code!=="ENOENT")throw i}}}catch(o){if(o.code!=="EEXIST")throw o;if(jw(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{yf(n)}catch(i){if(i.code!=="ENOENT")throw i}}throw new Error(`${e}: could not acquire seed marker`)}var wf=L(()=>{"use strict"});import{existsSync as h$}from"node:fs";import{dirname as Hw}from"node:path";function Tf(t){return _$.test(t)||g$.test(t)||y$.test(t)}function vi(t){return Il.test(t)}function Un(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!Oe(n)||!Il.test(r)?null:{teamfile:n,alias:r}}function Ve(t,e,n){if(!Oe(t))throw new ge(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!vi(e))throw new ge(`lmctl: "${e}" is not a valid alias (must match ${Il.source}).`);let r=Ne(t,n);if(n===void 0&&!h$(r))throw new ge(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=rn(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=vl(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}.
1736
+ Known aliases: ${i}`,"not_found")}if(o.teamfile!==void 0){let i=_f(o,Hw(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(Ef(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=>Ef(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.
1737
+ Run: lmctl seed ${t}`);return{teamfile:r,alias:o.alias,provider:o.provider,sessionid:o.session,sessiondir:o.sessiondir??Hw(r),isLead:Js(s)?.alias===o.alias,...o.model!==void 0?{model:o.model}:{},...o.effort!==void 0?{effort:o.effort}:{}}}function on(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=Un(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(Oe(n))return r!==void 0?vi(r)?{mode:"ai-team",teamfile:n,alias:r}:{mode:"error",message:`lmctl ${t.name}: "${r}" is not a valid alias (must match ${Il.source}).`}:t.allowsBareTeamfile?{mode:"ai-team",teamfile:n}:{mode:"error",message:`lmctl ${t.name}: alias required.
1738
+ Use: lmctl ${t.name} ${n}:<alias> or lmctl ${t.name} ${n} <alias>`};if(Tf(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
1739
  Either drop the second arg, or pass <teamfile>.lmctl as the first arg.`}:{mode:"error",message:`lmctl ${t.name}: can't infer target type from "${n}".
1740
1740
  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.
1741
- Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var ge,_$,g$,y$,Il,ot=L(()=>{"use strict";Ge();Ge();sn();Tf();ge=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},_$=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,g$=/^ses_[A-Za-z0-9_-]+$/,y$=/^session_[A-Za-z0-9_-]+$/,Il=/^[A-Za-z][A-Za-z0-9_-]*$/});import{existsSync as E$,mkdirSync as T$,readFileSync as w$,renameSync as v$,unlinkSync as S$,writeFileSync as b$}from"node:fs";import{homedir as XT}from"node:os";import{dirname as Si,join as it,resolve as I$}from"node:path";function Ys(t,e,n){let r=Si(I$(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())an(it(i,".mcp.json"),"mcpServers",[dr(),ur()]),a.has("opencode")&&an(it(i,".opencode","opencode.json"),"mcp",[qT(),GT()]),a.has("kimi")&&an(it(i,".kimi-code","mcp.json"),"mcpServers",[dr(),ur()]);for(let i of s)x$(i)}function A$(t=vf??XT()){return it(t,".copilot","mcp-config.json")}function N$(t,e){Dt.mkdirSync(Si(t),{recursive:!0});let n=it(Si(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Dt.writeFileSync(n,`${JSON.stringify(e,null,2)}
1742
- `,"utf8"),Dt.renameSync(n,t)}catch(r){try{Dt.unlinkSync(n)}catch{}throw r}}function R$(t,e){Dt.mkdirSync(Si(t),{recursive:!0});let n=it(Si(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 an(t,e,n){try{if(!Dt.existsSync(t))return;let r=JSON.parse(Dt.readFileSync(t,"utf8"));if(!Ks(r)||!Ks(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,N$(t,r),U({event:"mcp_cleanup",path:t,removed:o})}catch{}}function dr(){return{name:Al,shouldRemove:U$}}function qT(){return{name:Al,shouldRemove:F$}}function ur(){return{name:kl,shouldRemove:$$}}function GT(){return{name:kl,shouldRemove:P$}}function x$(t){let e=vf??XT();switch(t){case"copilot":an(A$(e),"mcpServers",[dr(),ur()]);return;case"claude":an(it(e,".claude.json"),"mcpServers",[dr(),ur()]);return;case"gemini":an(it(e,".gemini","settings.json"),"mcpServers",[dr(),ur()]);return;case"qwen":an(it(e,".qwen","settings.json"),"mcpServers",[dr(),ur()]);return;case"agy":an(it(e,".gemini","antigravity-cli","settings.json"),"mcpServers",[dr(),ur()]);return;case"opencode":an(it(e,".config","opencode","opencode.json"),"mcp",[qT(),GT()]);return;case"kimi":an(it(vf===void 0?process.env.KIMI_CODE_HOME??it(e,".kimi-code"):it(e,".kimi-code"),"mcp.json"),"mcpServers",[dr(),ur()]);return;case"codex":L$(it(e,".codex","config.toml"));return;default:return}}function L$(t){try{if(!Dt.existsSync(t))return;let e=Dt.readFileSync(t,"utf8"),n=C$(e);if(n===null)return;let r=e.split(/\n/),s=[],o=new Set,i=!1,a;for(let l of r){let c=VT(l);if(c===null)return;if(c!==void 0){if(BT(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=D$(l);if(d===null)return;if(d!==void 0&&BT(d,n)){o.add(d[1]);continue}s.push(l)}if(o.size===0)return;R$(t,s.join(`
1743
- `)),U({event:"mcp_cleanup",path:t,removed:[...o]})}catch{}}function BT(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function C$(t){let e=new Map,n;for(let s of t.split(/\n/)){let o=VT(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=O$(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==kl&&c[1]!==Al)continue;let d=e.get(c[1])??{};if(c[2]==="command"){let u=JT(l);if(u===null)return null;d.command=u}else if(c[2]==="args"){let u=M$(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===kl&&YT(o.command,o.args)&&r.add(s),s===Al&&zT(o.command,o.args)&&r.add(s);return r}function O$(t,e){if(t.startsWith("mcp_servers"))return Nl(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=Nl(t);return n===null?null:[...e,...n]}function VT(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:Nl(e[1])}function D$(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 Nl(n)}function Nl(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 JT(t){let e=KT(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 M$(t){let e=KT(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=>JT(s.trim()));return r.some(s=>s===null)?null:r}function KT(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){return Ks(t)?t.type==="stdio"&&typeof t.command=="string"&&YT(t.command,t.args):!1}function P$(t){return!Ks(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&ZT(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"&&QT(t.command[0],[t.command[1],t.command[2]])}function U$(t){return Ks(t)?t.type==="stdio"&&zT(t.command,t.args):!1}function F$(t){return!Ks(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&ew(t.command[0])&&t.command[1]==="mcp"}function YT(t,e){return ZT(t)&&tw(e)||QT(t,e)}function zT(t,e){return ew(t)&&tw(e)}function QT(t,e){return j$(t)&&Array.isArray(e)&&e.length===2&&W$(e[0])&&e[1]==="mcp"}function ZT(t){return typeof t=="string"&&Sf(t)==="lmctl"}function ew(t){return typeof t=="string"&&Sf(t)==="lmctl0"}function j$(t){if(typeof t!="string")return!1;let e=Sf(t).toLowerCase();return e==="node"||e==="node.exe"}function W$(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 Sf(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function tw(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Ks(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var kl,Al,k$,Dt,vf,Rl=L(()=>{"use strict";re();kl="lmctl",Al="lmctl0",k$={existsSync:E$,mkdirSync:T$,readFileSync:w$,writeFileSync:b$,renameSync:v$,unlinkSync:S$},Dt=k$});import{basename as H$}from"node:path";function sw(t,e){let n=new Date(e.now.getTime()-fr()).toISOString(),r=aw(t,n).filter(m=>!m.sender.teamfile.startsWith("prompt:")),s=G$(e.sender,r),o=V$(e.sender,r);o!==null&&o.teamfile===e.root&&!rw(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=>rw(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<B$,u=bf(e.sender,r).length;return{stop:l.length>=1&&d&&u>=X$,chain:J$(a)}}function ow(t,e){let n=new Date(e.now.getTime()-fr()).toISOString(),r=aw(t,n),s=bf(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 fr(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return nw;let n=Number(e);return!Number.isFinite(n)||n<=0?nw:n}function iw(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function q$(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 aw(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(q$).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function G$(t,e,n={}){let r=new Map;for(let a of e)r.set(ns(a.receiver),a);let s=[{...t,at:null}],o=t,i=new Set([ns(t)]);for(let a=0;a<64;a+=1){let l=r.get(ns(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=ns(l.sender);if(i.has(d))break;s.unshift(c),i.add(d),o=l.sender}return s}function bf(t,e){let n=ns(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=ns(l.sender),d=ns(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 V$(t,e){let n=bf(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function rw(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function ns(t){return`${t.teamfile}\0${t.alias}`}function J$(t){return t.map(e=>`${H$(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var B$,X$,nw,xl=L(()=>{"use strict";B$=6e4,X$=2,nw=8*60*60*1e3});function If(t,e){if(ar(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 Ll(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
1741
+ Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var ge,_$,g$,y$,Il,ot=L(()=>{"use strict";Ge();Ge();sn();wf();ge=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},_$=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,g$=/^ses_[A-Za-z0-9_-]+$/,y$=/^session_[A-Za-z0-9_-]+$/,Il=/^[A-Za-z][A-Za-z0-9_-]*$/});import{existsSync as E$,mkdirSync as w$,readFileSync as T$,renameSync as v$,unlinkSync as S$,writeFileSync as b$}from"node:fs";import{homedir as Xw}from"node:os";import{dirname as Si,join as it,resolve as I$}from"node:path";function Ys(t,e,n){let r=Si(I$(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())an(it(i,".mcp.json"),"mcpServers",[dr(),ur()]),a.has("opencode")&&an(it(i,".opencode","opencode.json"),"mcp",[qw(),Gw()]),a.has("kimi")&&an(it(i,".kimi-code","mcp.json"),"mcpServers",[dr(),ur()]);for(let i of s)x$(i)}function A$(t=vf??Xw()){return it(t,".copilot","mcp-config.json")}function N$(t,e){Dt.mkdirSync(Si(t),{recursive:!0});let n=it(Si(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Dt.writeFileSync(n,`${JSON.stringify(e,null,2)}
1742
+ `,"utf8"),Dt.renameSync(n,t)}catch(r){try{Dt.unlinkSync(n)}catch{}throw r}}function R$(t,e){Dt.mkdirSync(Si(t),{recursive:!0});let n=it(Si(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 an(t,e,n){try{if(!Dt.existsSync(t))return;let r=JSON.parse(Dt.readFileSync(t,"utf8"));if(!Ks(r)||!Ks(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,N$(t,r),U({event:"mcp_cleanup",path:t,removed:o})}catch{}}function dr(){return{name:Al,shouldRemove:U$}}function qw(){return{name:Al,shouldRemove:F$}}function ur(){return{name:kl,shouldRemove:$$}}function Gw(){return{name:kl,shouldRemove:P$}}function x$(t){let e=vf??Xw();switch(t){case"copilot":an(A$(e),"mcpServers",[dr(),ur()]);return;case"claude":an(it(e,".claude.json"),"mcpServers",[dr(),ur()]);return;case"gemini":an(it(e,".gemini","settings.json"),"mcpServers",[dr(),ur()]);return;case"qwen":an(it(e,".qwen","settings.json"),"mcpServers",[dr(),ur()]);return;case"agy":an(it(e,".gemini","antigravity-cli","settings.json"),"mcpServers",[dr(),ur()]);return;case"opencode":an(it(e,".config","opencode","opencode.json"),"mcp",[qw(),Gw()]);return;case"kimi":an(it(vf===void 0?process.env.KIMI_CODE_HOME??it(e,".kimi-code"):it(e,".kimi-code"),"mcp.json"),"mcpServers",[dr(),ur()]);return;case"codex":L$(it(e,".codex","config.toml"));return;default:return}}function L$(t){try{if(!Dt.existsSync(t))return;let e=Dt.readFileSync(t,"utf8"),n=C$(e);if(n===null)return;let r=e.split(/\n/),s=[],o=new Set,i=!1,a;for(let l of r){let c=Vw(l);if(c===null)return;if(c!==void 0){if(Bw(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=D$(l);if(d===null)return;if(d!==void 0&&Bw(d,n)){o.add(d[1]);continue}s.push(l)}if(o.size===0)return;R$(t,s.join(`
1743
+ `)),U({event:"mcp_cleanup",path:t,removed:[...o]})}catch{}}function Bw(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function C$(t){let e=new Map,n;for(let s of t.split(/\n/)){let o=Vw(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=O$(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==kl&&c[1]!==Al)continue;let d=e.get(c[1])??{};if(c[2]==="command"){let u=Jw(l);if(u===null)return null;d.command=u}else if(c[2]==="args"){let u=M$(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===kl&&Yw(o.command,o.args)&&r.add(s),s===Al&&zw(o.command,o.args)&&r.add(s);return r}function O$(t,e){if(t.startsWith("mcp_servers"))return Nl(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=Nl(t);return n===null?null:[...e,...n]}function Vw(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:Nl(e[1])}function D$(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 Nl(n)}function Nl(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 Jw(t){let e=Kw(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 M$(t){let e=Kw(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=>Jw(s.trim()));return r.some(s=>s===null)?null:r}function Kw(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){return Ks(t)?t.type==="stdio"&&typeof t.command=="string"&&Yw(t.command,t.args):!1}function P$(t){return!Ks(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&Zw(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"&&Qw(t.command[0],[t.command[1],t.command[2]])}function U$(t){return Ks(t)?t.type==="stdio"&&zw(t.command,t.args):!1}function F$(t){return!Ks(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&eT(t.command[0])&&t.command[1]==="mcp"}function Yw(t,e){return Zw(t)&&tT(e)||Qw(t,e)}function zw(t,e){return eT(t)&&tT(e)}function Qw(t,e){return j$(t)&&Array.isArray(e)&&e.length===2&&W$(e[0])&&e[1]==="mcp"}function Zw(t){return typeof t=="string"&&Sf(t)==="lmctl"}function eT(t){return typeof t=="string"&&Sf(t)==="lmctl0"}function j$(t){if(typeof t!="string")return!1;let e=Sf(t).toLowerCase();return e==="node"||e==="node.exe"}function W$(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 Sf(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function tT(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Ks(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var kl,Al,k$,Dt,vf,Rl=L(()=>{"use strict";re();kl="lmctl",Al="lmctl0",k$={existsSync:E$,mkdirSync:w$,readFileSync:T$,writeFileSync:b$,renameSync:v$,unlinkSync:S$},Dt=k$});import{basename as H$}from"node:path";function sT(t,e){let n=new Date(e.now.getTime()-fr()).toISOString(),r=aT(t,n).filter(m=>!m.sender.teamfile.startsWith("prompt:")),s=G$(e.sender,r),o=V$(e.sender,r);o!==null&&o.teamfile===e.root&&!rT(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=>rT(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<B$,u=bf(e.sender,r).length;return{stop:l.length>=1&&d&&u>=X$,chain:J$(a)}}function oT(t,e){let n=new Date(e.now.getTime()-fr()).toISOString(),r=aT(t,n),s=bf(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 fr(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return nT;let n=Number(e);return!Number.isFinite(n)||n<=0?nT:n}function iT(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function q$(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 aT(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(q$).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function G$(t,e,n={}){let r=new Map;for(let a of e)r.set(ns(a.receiver),a);let s=[{...t,at:null}],o=t,i=new Set([ns(t)]);for(let a=0;a<64;a+=1){let l=r.get(ns(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=ns(l.sender);if(i.has(d))break;s.unshift(c),i.add(d),o=l.sender}return s}function bf(t,e){let n=ns(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=ns(l.sender),d=ns(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 V$(t,e){let n=bf(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function rT(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function ns(t){return`${t.teamfile}\0${t.alias}`}function J$(t){return t.map(e=>`${H$(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var B$,X$,nT,xl=L(()=>{"use strict";B$=6e4,X$=2,nT=8*60*60*1e3});function If(t,e){if(ar(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 Ll(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
1744
1744
  FROM tracked_invocation
1745
1745
  WHERE target_teamfile = ?
1746
1746
  AND target_alias = ?
1747
- AND status = 'running'`,e,n),s=0;for(let o of r)If(t,o)!==null&&(s+=1);return s}var Cl=L(()=>{"use strict";ot();bt();Wt()});function Ol(t,e,n){return $n(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function Fn(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 zs(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new zs(`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 Dl(t,e){Tl(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 Fn(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 zs(`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 zs&&(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 zs,Qs=L(()=>{"use strict";Gs();zs=class extends Error{}});import{realpathSync as K$}from"node:fs";import{resolve as Y$}from"node:path";function kf(t){let e=Y$(t);try{return K$(e)}catch{return e}}var lw=L(()=>{"use strict"});import{platform as cw}from"node:os";function Zs(t){let e=new bi;for(let n of t)e.registerAdapter(n);return e}var bi,Af=L(()=>{"use strict";lw();bi=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=kf(e.workspace);o=o.filter(a=>kf(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=cw()==="darwin"||cw()==="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 Lf(){return new Rf}function Cf(t){let e=!1;for(let n of t.split(`
1747
+ AND status = 'running'`,e,n),s=0;for(let o of r)If(t,o)!==null&&(s+=1);return s}var Cl=L(()=>{"use strict";ot();bt();Wt()});function Ol(t,e,n){return $n(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function Fn(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 zs(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new zs(`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 Dl(t,e){wl(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 Fn(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 zs(`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 zs&&(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 zs,Qs=L(()=>{"use strict";Gs();zs=class extends Error{}});import{realpathSync as K$}from"node:fs";import{resolve as Y$}from"node:path";function kf(t){let e=Y$(t);try{return K$(e)}catch{return e}}var lT=L(()=>{"use strict"});import{platform as cT}from"node:os";function Zs(t){let e=new bi;for(let n of t)e.registerAdapter(n);return e}var bi,Af=L(()=>{"use strict";lT();bi=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=kf(e.workspace);o=o.filter(a=>kf(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=cT()==="darwin"||cT()==="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 Lf(){return new Rf}function Cf(t){let e=!1;for(let n of t.split(`
1748
1748
  `)){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 Of(t){let e=t.trimEnd().split(`
1749
- `).at(-1)?.trimStart()??"";if(!e.startsWith("{"))return!1;try{return JSON.parse(e),!1}catch{return!0}}function dw(t){let e,n=!1,r=!1,s;for(let o of t.split(`
1750
- `)){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=at(a.input_tokens),c=at(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:at(a.output_tokens),reasoning:at(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:zt([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(Of(t)||Cf(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 at,z$,Nf,Rf,xf,Df=L(()=>{"use strict";zo();at=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,z$=(t,e)=>t===null||e===null?null:at(t+e),Nf=(t,e)=>JSON.stringify([t,e]),Rf=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(Nf(e,n))}turn(e,n=""){return new xf(this,e,n)}};xf=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(Nf(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(Nf(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=>at(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=at(e.emittedAtMs)??d,f=at(e.ordinal)??at(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=at(_.inputTokens),g=at(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:at(_.cacheWriteInputTokens??0),output:at(_.outputTokens),reasoning:at(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:zt([_.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&&at(S+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=z$(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 Q$,writeFileSync as PY,mkdirSync as UY}from"node:fs";import{join as Z$,dirname as jY}from"node:path";import{homedir as eP}from"node:os";function nP(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function rP(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=nP(t.slice(e+1).trim());return n?{key:n,value:r}:null}function sP(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Ml(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function oP(){return Z$(eP(),".lmctl","config.toml")}function $l(t){let e=t??oP(),n;try{n=Q$(e,"utf-8")}catch{return{tools:{}}}return iP(n)}function uw(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 iP(t){let e={},n={},r=t.split(`
1751
- `),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=uw(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=uw(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=sP(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=rP(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 fw(t){return t.site_name??null}function aP(t,e,n){if(!n)return"";let r=t.tools[e]??Mf[e],s=r?.profiles?.[n]?.flags??Mf[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 mw(t,e){return!!t.tools[e]}function pw(t,e,n,r,s){let o=t.tools[e]??Mf[e],i;if(o?.agent){let l=Ml(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=tP[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(Ml).join(" ");i=`printf '%s\\n' ${Ml(r)} | ${d}`}else i=c.map(Ml).join(" ")}let a=aP(t,e,s);return a&&(i+=" "+a),i}var Mf,tP,Pl=L(()=>{"use strict";Mf={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:""}}}},tP={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 hw(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 _w=L(()=>{"use strict"});function Fl(t){let e=t?.prompt??ee;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${ee}${yw}${t.teamfile}:
1749
+ `).at(-1)?.trimStart()??"";if(!e.startsWith("{"))return!1;try{return JSON.parse(e),!1}catch{return!0}}function dT(t){let e,n=!1,r=!1,s;for(let o of t.split(`
1750
+ `)){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=at(a.input_tokens),c=at(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:at(a.output_tokens),reasoning:at(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:zt([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(Of(t)||Cf(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 at,z$,Nf,Rf,xf,Df=L(()=>{"use strict";zo();at=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,z$=(t,e)=>t===null||e===null?null:at(t+e),Nf=(t,e)=>JSON.stringify([t,e]),Rf=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(Nf(e,n))}turn(e,n=""){return new xf(this,e,n)}};xf=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(Nf(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(Nf(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(T=>T==null))return!0;let l=T=>["inputTokens","cachedInputTokens","cacheWriteInputTokens","outputTokens","reasoningOutputTokens","totalTokens"].map(S=>T[S]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(T=>at(a.total[T])!==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=at(e.emittedAtMs)??d,f=at(e.ordinal)??at(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=at(_.inputTokens),g=at(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:at(_.cacheWriteInputTokens??0),output:at(_.outputTokens),reasoning:at(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:zt([_.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 w=r.model??_.model;if(typeof w=="string"&&w&&w!=="<synthetic>"&&this.reported.add(w),!this.value)this.value=y;else{for(let T of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let S=this.value[T],b=y[T];S!==null&&b!==null&&at(S+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[T]=z$(this.value[T],y[T])}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 Q$,writeFileSync as PY,mkdirSync as UY}from"node:fs";import{join as Z$,dirname as jY}from"node:path";import{homedir as eP}from"node:os";function nP(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function rP(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=nP(t.slice(e+1).trim());return n?{key:n,value:r}:null}function sP(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Ml(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function oP(){return Z$(eP(),".lmctl","config.toml")}function $l(t){let e=t??oP(),n;try{n=Q$(e,"utf-8")}catch{return{tools:{}}}return iP(n)}function uT(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 iP(t){let e={},n={},r=t.split(`
1751
+ `),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=uT(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=uT(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=sP(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=rP(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 fT(t){return t.site_name??null}function aP(t,e,n){if(!n)return"";let r=t.tools[e]??Mf[e],s=r?.profiles?.[n]?.flags??Mf[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 mT(t,e){return!!t.tools[e]}function pT(t,e,n,r,s){let o=t.tools[e]??Mf[e],i;if(o?.agent){let l=Ml(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=tP[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(Ml).join(" ");i=`printf '%s\\n' ${Ml(r)} | ${d}`}else i=c.map(Ml).join(" ")}let a=aP(t,e,s);return a&&(i+=" "+a),i}var Mf,tP,Pl=L(()=>{"use strict";Mf={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:""}}}},tP={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 hT(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 _T=L(()=>{"use strict"});function Fl(t){let e=t?.prompt??ee;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${ee}${yT}${t.teamfile}:
1752
1752
  ${n}${Pf}${JSON.stringify(t.teamfile)}${Uf}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
1753
- ${e}`),e}function gw(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===ee)return!0;let r=`${ee}${yw}`;if(!e.startsWith(r)||!e.endsWith(Uf))return!1;let s=e.slice(r.length),o=s.slice(0,-Uf.length),i=o.lastIndexOf(Pf);if(i===-1)return!1;let a=o.slice(i+Pf.length),l;try{if(l=JSON.parse(a),typeof l!="string")return!1}catch{return!1}let c=`${l}:
1753
+ ${e}`),e}function gT(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===ee)return!0;let r=`${ee}${yT}`;if(!e.startsWith(r)||!e.endsWith(Uf))return!1;let s=e.slice(r.length),o=s.slice(0,-Uf.length),i=o.lastIndexOf(Pf);if(i===-1)return!1;let a=o.slice(i+Pf.length),l;try{if(l=JSON.parse(a),typeof l!="string")return!1}catch{return!1}let c=`${l}:
1754
1754
  `;return!(!s.startsWith(c)||c.length>i)}function Ii(t){if(typeof t!="string")return!1;let e=t.trim().replace(/\r\n/g,`
1755
- `);if(gw(e))return!0;if(e.length>=2&&e.startsWith('"')&&e.endsWith('"')){let r=e.slice(1,-1).replace(/\\"/g,'"');if(gw(r))return!0}return!1}function Ff(t){if(typeof t!="string")return!1;let e=t.trim();return(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")||e.startsWith("`")&&e.endsWith("`"))&&(e=e.slice(1,-1).trim()),e===$f||e===$f.replace(/\.$/,"")}var $f,ee,Ul,yw,Pf,Uf,We=L(()=>{"use strict";$f="ACK: waiting for explicit lmctl task.",ee=`lmctl seed initial connection only. Create or pin this provider session, then stop. Do not inspect files, run commands, infer a task, delegate, or edit. Reply exactly: ${$f}`,Ul=`send this exact lmctl seed instruction: "${ee}"`,yw=`
1755
+ `);if(gT(e))return!0;if(e.length>=2&&e.startsWith('"')&&e.endsWith('"')){let r=e.slice(1,-1).replace(/\\"/g,'"');if(gT(r))return!0}return!1}function Ff(t){if(typeof t!="string")return!1;let e=t.trim();return(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")||e.startsWith("`")&&e.endsWith("`"))&&(e=e.slice(1,-1).trim()),e===$f||e===$f.replace(/\.$/,"")}var $f,ee,Ul,yT,Pf,Uf,We=L(()=>{"use strict";$f="ACK: waiting for explicit lmctl task.",ee=`lmctl seed initial connection only. Create or pin this provider session, then stop. Do not inspect files, run commands, infer a task, delegate, or edit. Reply exactly: ${$f}`,Ul=`send this exact lmctl seed instruction: "${ee}"`,yT=`
1756
1756
 
1757
1757
  Teamfile `,Pf=`
1758
1758
 
1759
- After this seed finishes, use \`lmctl prompt `,Uf=' <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 lP}from"node:fs";function Ew(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&&!lP(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 eo(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function dP(t,e){return e===void 0||e.length===0?t:{...t??process.env,[jf]:e}}function De(t,e,n,r="chat"){return{...dP(eo(t,e),n),[cP]:r}}var jf,cP,Bt=L(()=>{"use strict";re();jf="LMCTL_SELF_SESSIONID",cP="LMCTL_LAUNCH_SOURCE"});function Ai(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new ki(t,n,e)}var mr,Te,ve,jl,ki,pr=L(()=>{"use strict";mr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},Te=class extends mr{},ve=class extends mr{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},jl=class extends mr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},ki=class extends mr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{spawn as Tw}from"node:child_process";import{mkdirSync as uP}from"node:fs";var rs,ce,Qe=L(()=>{"use strict";Df();Pl();_w();We();Bt();fl();It();pr();rs=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===ee?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"}):(uP(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=Tw(this.binary,this.seedArgsFor(n),{cwd:e,env:eo(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}
1760
- `: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=es(i).trim(),u=es(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:Ul,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&&mw(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 rs("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=pw(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:hw(n.env),c=Tw(s,{shell:!0,cwd:n.cwd,env:De(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(()=>{!Of(y)&&!Cf(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 k=Date.now()-o,N=this.name==="codex"?dw(y):{};N.usage&&n.onUsage?.(N.usage),N.sessionId&&n.onSessionId?.(N.sessionId);let O=I=>Object.assign(I,{usage:N.usage,sessionId:N.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new rs("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:N.sessionId??n.sessionId,durationMs:k,...N.usage?{usage:N.usage}:{}});else{let I=T.trim();a(O(new ve(I?we(I,{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 vw(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&&Me(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Me(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 Me,hr,ww,Wl,to,Hl=L(()=>{"use strict";zo();Me=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,hr=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,ww=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});Wl=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=hr(r?.first?.id),o=hr(r?.last?.id),i=hr(r?.stream?.id),a=hr(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):hr(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=Me(e.promptTokens),u=Me(c.outputTokens),f=Me(c.cacheReadTokens),m=Me(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={...ww(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:Me(c.reasoningTokens),modelReported:hr(e.modelId),invalidCounters:zt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||Me(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Me(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return vw(this.parts)}},to=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=>Me(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=>Me(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=Me(c.turn)!==null&&Me(c.step)!==null?["step",c.turn,c.step]:hr(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,{...ww(),inputUncached:Me(f.inputTokens),cacheRead:Me(f.cacheReadTokens),output:Me(f.outputTokens),reasoning:Me(f.reasoningTokens),modelReported:hr(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Me(m)===null)||zt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Me(f.reasoningTokens)!==null&&Me(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=vw([...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 fP}from"node:readline";function _r(t,e){let n=e.protocol??"acp",r=fP({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=mP++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});qe({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1759
+ After this seed finishes, use \`lmctl prompt `,Uf=' <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 lP}from"node:fs";function ET(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&&!lP(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 eo(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function dP(t,e){return e===void 0||e.length===0?t:{...t??process.env,[jf]:e}}function De(t,e,n,r="chat"){return{...dP(eo(t,e),n),[cP]:r}}var jf,cP,Bt=L(()=>{"use strict";re();jf="LMCTL_SELF_SESSIONID",cP="LMCTL_LAUNCH_SOURCE"});function Ai(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new ki(t,n,e)}var mr,we,ve,jl,ki,pr=L(()=>{"use strict";mr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},we=class extends mr{},ve=class extends mr{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},jl=class extends mr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},ki=class extends mr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{spawn as wT}from"node:child_process";import{mkdirSync as uP}from"node:fs";var rs,ce,Qe=L(()=>{"use strict";Df();Pl();_T();We();Bt();fl();It();pr();rs=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===ee?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"}):(uP(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=wT(this.binary,this.seedArgsFor(n),{cwd:e,env:eo(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}
1760
+ `: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=es(i).trim(),u=es(o).trim(),f=d||u;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:f?Te(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:Ul,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&&mT(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 rs("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=pT(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:hT(n.env),c=wT(s,{shell:!0,cwd:n.cwd,env:De(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(()=>{!Of(y)&&!Cf(y)&&T(_,h)},100)},E=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&T(null)},l):void 0,y="",w="";if(c.stdout?.on("data",S=>{let b=S.toString();y+=b,n.onDelta?.(b),p&&!d&&g()}),c.stderr?.on("data",S=>{w+=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 T=(S,b=null)=>{if(d)return;d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let k=Date.now()-o,N=this.name==="codex"?dT(y):{};N.usage&&n.onUsage?.(N.usage),N.sessionId&&n.onSessionId?.(N.sessionId);let O=I=>Object.assign(I,{usage:N.usage,sessionId:N.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new rs("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:N.sessionId??n.sessionId,durationMs:k,...N.usage?{usage:N.usage}:{}});else{let I=w.trim();a(O(new ve(I?Te(I,{provider:this.name}):b?`Agent command terminated by ${b}`:`Agent command exited with code ${S}`,S,b,w)))}};this.name==="codex"?(c.on("close",(S,b)=>T(S,b)),c.on("exit",(S,b)=>{d||(p=!0,_=S,h=b,g(),m=setTimeout(()=>T(S,b),5e3))})):c.on("exit",(S,b)=>T(S,b)),c.on("error",S=>{d||(d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),a(S))})})}}});function vT(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&&Me(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Me(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 Me,hr,TT,Wl,to,Hl=L(()=>{"use strict";zo();Me=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,hr=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,TT=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});Wl=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=hr(r?.first?.id),o=hr(r?.last?.id),i=hr(r?.stream?.id),a=hr(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):hr(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=Me(e.promptTokens),u=Me(c.outputTokens),f=Me(c.cacheReadTokens),m=Me(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={...TT(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:Me(c.reasoningTokens),modelReported:hr(e.modelId),invalidCounters:zt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||Me(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Me(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return vT(this.parts)}},to=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=>Me(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=>Me(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=Me(c.turn)!==null&&Me(c.step)!==null?["step",c.turn,c.step]:hr(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,{...TT(),inputUncached:Me(f.inputTokens),cacheRead:Me(f.cacheReadTokens),output:Me(f.outputTokens),reasoning:Me(f.reasoningTokens),modelReported:hr(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Me(m)===null)||zt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Me(f.reasoningTokens)!==null&&Me(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=vT([...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 fP}from"node:readline";function _r(t,e){let n=e.protocol??"acp",r=fP({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=mP++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});qe({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1761
1761
  `)}),i=(a,l={})=>{t.stdin?.write(`${JSON.stringify({jsonrpc:"2.0",method:a,params:l})}
1762
1762
  `)};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(qe({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(Ai(`${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)`}});qe({event:`${n}_send`,direction:"SEND",provider:e.provider,replyTo:c.id,error:"method not found"}),t.stdin?.write(`${u}
1763
- `);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 mP,Wf=L(()=>{"use strict";re();pr();mP=1});import*as Bf from"node:child_process";function hP(t){if(typeof Bf.spawnSync=="function")try{Bf.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function Sw(t){return t.exitCode!==null||t.signalCode!==null}function Hf(t,e){return Sw(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??hP;if(Sw(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await Hf(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 Hf(t,o))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(i!=="win32")try{t.kill("SIGKILL")}catch{}return await Hf(t,pP)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var pP,ss=L(()=>{"use strict";pP=1e3});async function Xl(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(o=>{r=setTimeout(()=>o(Xf),e),r.unref?.(),n!==void 0&&(s=()=>o(Xf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function ln(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();TP(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function TP(t,e,n,r){let s=t.pollMs??_P,o=t.maxHoldMs??Bl,i=t.settleMs??gP,a=t.backgroundGraceMs??yP,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 Xl(t.hasOutstandingWork(),u,e.signal)}catch{return d("check-error")}if(f===Xf)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,EP,_))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),je(`${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?.(),je(`${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 _P,Bl,gP,yP,EP,Xf,Ni=L(()=>{"use strict";re();_P=2e3,Bl=8*60*60*1e3,gP=5e3,yP=1e3,EP=50,Xf=Symbol("check-timed-out")});function bw(t){ye()&&qe({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function gr(t,e){let n=vP[t];if(n)return n[e]??n.yolo}function bP(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 $e(t,e,n="yolo"){if(SP.has(t)){bw(`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"?gr(t,"plan"):wP[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(!bP(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)}bw(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var wP,vP,SP,cn=L(()=>{"use strict";pr();re();wP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},vP={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"]}};SP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as IP}from"node:child_process";import{randomBytes as kP}from"node:crypto";import{realpath as ql}from"node:fs/promises";function Ri(){let t=kP(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 Gl(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]:[]];$e("muse",n,t.permissionMode??"yolo");let r=IP(t.progPath??"muse",n,{cwd:t.cwd,env:De(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=hT(),_=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",v=>{p.append(v)});let g=(v,A,R)=>{if(s===v){if(s=void 0,v.id&&i.add(v.id),A){let x=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:x?{...x,outcome:v.outcome}:void 0,sessionId:h})}else R&&(R.usage=v.usage.usage());v.cleanup(),v.drained(),v.settled||(v.settled=!0,A?v.reject(A):(m++,v.resolve(R)))}},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 R=A.params;if(!R||R.sessionId!==h)return;let x=A.method;if(x==="view/gap"||x==="session/closed"){E(new Error(`Muse ${x}: the conversation cannot continue without reopening`));return}if(x==="turn/unqueued"&&R.turnId===v.id){v.outcome="cancelled",g(v,new rs("Muse queued turn cancelled","external"));return}x==="turn/started"&&R.turnId===v.id&&(v.queued=!1);let C=R.item,M=R.turnId??C?.turnId;if(M&&M!==v.id||x==="session/tokenUsage"&&(v.settled||R.turnId!==v.id||!v.usage.event(R,v.id)))return;v.opts.onEvent?.(A);let P={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(x)&&C?.turnId===v.id&&typeof C.itemId=="string"){let $=v.items.get(C.itemId);if($&&typeof C.revision=="number"&&C.revision<=$.revision)return;v.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&x!=="item/updated"?P={kind:x==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...x==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:A}:C.kind==="reasoning"?P={kind:"thinking",raw:A}:C.kind==="agentMessage"&&(P={kind:"text",raw:A})}else if(x==="item/delta"&&typeof R.itemId=="string"&&typeof R.delta=="string"){let $=v.items.get(R.itemId);if(!$)return;$.kind==="agentMessage"&&(R.field===void 0||R.field==="text")?($.text=($.text??"")+R.delta,v.cancelled||v.opts.onDelta?.(R.delta),P={kind:"text",raw:A}):$.kind==="reasoning"&&(P={kind:"thinking",raw:A})}if(v.cancelled||v.opts.onProgress?.(P),x!=="turn/completed"||R.turnId!==v.id)return;if(!["completed","failed","cancelled"].includes(R.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(R.terminal)}`));return}if(v.cancelled||R.terminal==="cancelled"){v.outcome="cancelled",g(v,new rs("Muse turn cancelled",v.cancelled?"external":"provider"));return}if(R.terminal!=="completed"){v.outcome="error",g(v,new Error(R.error?.message??R.reason??`Muse turn ended with ${String(R.terminal)}`));return}let q=[...v.items.values()].filter($=>$.kind==="agentMessage");g(v,void 0,{text:q.map($=>typeof $.text=="string"?$.text:"").join(`
1764
- `),sessionId:h,durationMs:typeof R.durationMs=="number"?R.durationMs:Date.now()-v.started,stopReason:R.terminal,...q.some($=>$.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=_r(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,R=Ri())=>(await T.sendRpc(v,{...A,commandId:R})).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 R=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(R)?(v.queued=!1,S(v)):s===v&&E(A instanceof Error?A:new Error(R))}))},k=v=>{v.queued?b(v):S(v)};r.on("error",v=>E(new Error(`Unable to start Muse: ${v.message}`)));let N=()=>{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",N),r.stdout.on("end",N),r.on("exit",()=>{f=!0}),r.on("close",(v,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(Bs(`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,k(s)),l=(async()=>{f||(await new Promise(A=>ln(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},I=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",I,{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 ql(v.museHome)!==await ql(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",x=(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(x?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof x.workspaceRoot!="string"||await ql(x.workspaceRoot)!==await ql(t.cwd))throw new Error("Muse session belongs to a different working directory");if(x.activeTurnId||x.status!=="idle")throw new Error(`Muse session is not idle (${String(x.status)})`);if((await 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&&x.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...x.providerId?{providerId:x.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(v){throw await O(),a??v}finally{t.signal?.removeEventListener("abort",I)}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((R,x)=>{let C,M=new Promise($=>{C=$}),P={usage:new Wl(h,o),commandId:Ri(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:R,reject:x,drain:M,drained:C,cleanup:()=>{}};s=P;let q=()=>{P.cancelled=!0,P.settled=!0,x(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),k(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($=>{if(s===P){if($?.commandId!==P.commandId||$.status!=="accepted"||!["started","queued"].includes($.disposition)||typeof $.turnId!="string"||$.turnId.length===0||i.has($.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=$.turnId,P.queued=$.disposition==="queued",P.cancelled&&k(P);for(let ue of P.events)s===P&&y(P,ue);P.events=[]}},$=>{s===P&&g(P,$ instanceof Error?$:new Error(String($)))})})}}}var Iw=L(()=>{"use strict";Hl();Qe();Wf();ss();Bt();Ni();cn();It()});import{join as qf}from"node:path";import{mkdir as AP}from"node:fs/promises";function Gf(t={}){let e=ka(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Fn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||Ri(),a=await Gl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:qf(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends ce{constructor(){super({provider:new Ia({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 Gl({...s,env:n(s.env),expectedHome:qf(e,"muse")})}async seed(s,o){await AP(s,{recursive:!0});let i=Ri(),a,l;try{a=await Gl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:qf(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??ee,{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 Vf=L(()=>{"use strict";Qe();nu();Iw();Qs();We()});function Aw(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
+ `);return}e.onNotification?.(c)}),{sendRpc:o,sendNotification:i,close(a=new we(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var mP,Wf=L(()=>{"use strict";re();pr();mP=1});import*as Bf from"node:child_process";function hP(t){if(typeof Bf.spawnSync=="function")try{Bf.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function ST(t){return t.exitCode!==null||t.signalCode!==null}function Hf(t,e){return ST(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??hP;if(ST(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await Hf(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 Hf(t,o))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(i!=="win32")try{t.kill("SIGKILL")}catch{}return await Hf(t,pP)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var pP,ss=L(()=>{"use strict";pP=1e3});async function Xl(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(o=>{r=setTimeout(()=>o(Xf),e),r.unref?.(),n!==void 0&&(s=()=>o(Xf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function ln(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();wP(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function wP(t,e,n,r){let s=t.pollMs??_P,o=t.maxHoldMs??Bl,i=t.settleMs??gP,a=t.backgroundGraceMs??yP,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 Xl(t.hasOutstandingWork(),u,e.signal)}catch{return d("check-error")}if(f===Xf)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,EP,_))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),je(`${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?.(),je(`${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 _P,Bl,gP,yP,EP,Xf,Ni=L(()=>{"use strict";re();_P=2e3,Bl=8*60*60*1e3,gP=5e3,yP=1e3,EP=50,Xf=Symbol("check-timed-out")});function bT(t){ye()&&qe({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function gr(t,e){let n=vP[t];if(n)return n[e]??n.yolo}function bP(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 $e(t,e,n="yolo"){if(SP.has(t)){bT(`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"?gr(t,"plan"):TP[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 we(s)}if(!bP(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 we(o)}bT(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var TP,vP,SP,cn=L(()=>{"use strict";pr();re();TP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},vP={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"]}};SP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as IP}from"node:child_process";import{randomBytes as kP}from"node:crypto";import{realpath as ql}from"node:fs/promises";function Ri(){let t=kP(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 Gl(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]:[]];$e("muse",n,t.permissionMode??"yolo");let r=IP(t.progPath??"muse",n,{cwd:t.cwd,env:De(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=hw(),_=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",v=>{p.append(v)});let g=(v,A,R)=>{if(s===v){if(s=void 0,v.id&&i.add(v.id),A){let x=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:x?{...x,outcome:v.outcome}:void 0,sessionId:h})}else R&&(R.usage=v.usage.usage());v.cleanup(),v.drained(),v.settled||(v.settled=!0,A?v.reject(A):(m++,v.resolve(R)))}},E=v=>{a||(a=v,s&&g(s,a),w.close(a),!f&&!c&&de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},y=(v,A)=>{let R=A.params;if(!R||R.sessionId!==h)return;let x=A.method;if(x==="view/gap"||x==="session/closed"){E(new Error(`Muse ${x}: the conversation cannot continue without reopening`));return}if(x==="turn/unqueued"&&R.turnId===v.id){v.outcome="cancelled",g(v,new rs("Muse queued turn cancelled","external"));return}x==="turn/started"&&R.turnId===v.id&&(v.queued=!1);let C=R.item,M=R.turnId??C?.turnId;if(M&&M!==v.id||x==="session/tokenUsage"&&(v.settled||R.turnId!==v.id||!v.usage.event(R,v.id)))return;v.opts.onEvent?.(A);let P={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(x)&&C?.turnId===v.id&&typeof C.itemId=="string"){let $=v.items.get(C.itemId);if($&&typeof C.revision=="number"&&C.revision<=$.revision)return;v.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&x!=="item/updated"?P={kind:x==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...x==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:A}:C.kind==="reasoning"?P={kind:"thinking",raw:A}:C.kind==="agentMessage"&&(P={kind:"text",raw:A})}else if(x==="item/delta"&&typeof R.itemId=="string"&&typeof R.delta=="string"){let $=v.items.get(R.itemId);if(!$)return;$.kind==="agentMessage"&&(R.field===void 0||R.field==="text")?($.text=($.text??"")+R.delta,v.cancelled||v.opts.onDelta?.(R.delta),P={kind:"text",raw:A}):$.kind==="reasoning"&&(P={kind:"thinking",raw:A})}if(v.cancelled||v.opts.onProgress?.(P),x!=="turn/completed"||R.turnId!==v.id)return;if(!["completed","failed","cancelled"].includes(R.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(R.terminal)}`));return}if(v.cancelled||R.terminal==="cancelled"){v.outcome="cancelled",g(v,new rs("Muse turn cancelled",v.cancelled?"external":"provider"));return}if(R.terminal!=="completed"){v.outcome="error",g(v,new Error(R.error?.message??R.reason??`Muse turn ended with ${String(R.terminal)}`));return}let q=[...v.items.values()].filter($=>$.kind==="agentMessage");g(v,void 0,{text:q.map($=>typeof $.text=="string"?$.text:"").join(`
1764
+ `),sessionId:h,durationMs:typeof R.durationMs=="number"?R.durationMs:Date.now()-v.started,stopReason:R.terminal,...q.some($=>$.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},w=_r(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))}}),T=async(v,A,R=Ri())=>(await w.sendRpc(v,{...A,commandId:R})).result,S=v=>{!v.id||v.interruptSent||s!==v||(v.interruptSent=!0,T("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,T("turn/unqueue",{sessionId:h,turnId:v.id}).catch(A=>{let R=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(R)?(v.queued=!1,S(v)):s===v&&E(A instanceof Error?A:new Error(R))}))},k=v=>{v.queued?b(v):S(v)};r.on("error",v=>E(new Error(`Unable to start Muse: ${v.message}`)));let N=()=>{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",N),r.stdout.on("end",N),r.on("exit",()=>{f=!0}),r.on("close",(v,A)=>{f=!0,c?w.close(new Error("Muse session closed")):E(new Error(Bs(`Muse exited (${A??v}) after ${m} completed prompt(s)`,p.text().trim()?Te(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,k(s)),l=(async()=>{f||(await new Promise(A=>ln(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")),w.close(new Error("Muse session closed"))})(),l},I=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",I,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let v=(await w.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 ql(v.museHome)!==await ql(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");w.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",x=(t.create?await T("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:A,...t.model?{modelId:t.model}:{}}):await T("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(x?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof x.workspaceRoot!="string"||await ql(x.workspaceRoot)!==await ql(t.cwd))throw new Error("Muse session belongs to a different working directory");if(x.activeTurnId||x.status!=="idle")throw new Error(`Muse session is not idle (${String(x.status)})`);if((await T("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&&x.modelId!==t.model&&(await T("session/setModel",{sessionId:h,model:{modelId:t.model,...x.providerId?{providerId:x.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(v){throw await O(),a??v}finally{t.signal?.removeEventListener("abort",I)}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((R,x)=>{let C,M=new Promise($=>{C=$}),P={usage:new Wl(h,o),commandId:Ri(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:R,reject:x,drain:M,drained:C,cleanup:()=>{}};s=P;let q=()=>{P.cancelled=!0,P.settled=!0,x(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),k(P)};P.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),T("turn/start",{sessionId:h,input:[{type:"text",text:v}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then($=>{if(s===P){if($?.commandId!==P.commandId||$.status!=="accepted"||!["started","queued"].includes($.disposition)||typeof $.turnId!="string"||$.turnId.length===0||i.has($.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=$.turnId,P.queued=$.disposition==="queued",P.cancelled&&k(P);for(let ue of P.events)s===P&&y(P,ue);P.events=[]}},$=>{s===P&&g(P,$ instanceof Error?$:new Error(String($)))})})}}}var IT=L(()=>{"use strict";Hl();Qe();Wf();ss();Bt();Ni();cn();It()});import{join as qf}from"node:path";import{mkdir as AP}from"node:fs/promises";function Gf(t={}){let e=ka(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Fn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||Ri(),a=await Gl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:qf(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends ce{constructor(){super({provider:new Ia({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 Gl({...s,env:n(s.env),expectedHome:qf(e,"muse")})}async seed(s,o){await AP(s,{recursive:!0});let i=Ri(),a,l;try{a=await Gl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:qf(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??ee,{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 Vf=L(()=>{"use strict";Qe();nu();IT();Qs();We()});function AT(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(`
1765
1765
 
1766
1766
  --- additional response (turn ${n+1} of ${t.length}; likely an injected mid-call notification) ---
1767
1767
 
1768
- `+t[n]);return e.join("")}function Vl(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=Kf(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&&(kw(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)){kw(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=Du({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:zt([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 k of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])o[k]=c(o[k]??null,b[k]??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=Nw(e),u=Aw(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 Nw(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 Jf(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function kw(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Kf(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 Yf=L(()=>{"use strict";zo();Qt()});import{spawn as xw}from"node:child_process";import{existsSync as Lw}from"node:fs";import{join as Jl}from"node:path";import{readdir as NP}from"node:fs/promises";function Cw(){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 Ow(){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 Dw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function xP(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
+ `+t[n]);return e.join("")}function Vl(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=Kf(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&&(kT(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)){kT(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,w=l(p.cache_creation_input_tokens),T=Du({cacheWrite5m:y?.ephemeral_5m_input_tokens,cacheWrite1h:y?.ephemeral_1h_input_tokens},w),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:T?.five??null,cacheWrite1h:T?.one??null,invalidCounters:zt([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 k of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])o[k]=c(o[k]??null,b[k]??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=NT(e),u=AT(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 NT(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 Jf(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function kT(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Kf(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 Yf=L(()=>{"use strict";zo();Qt()});import{spawn as xT}from"node:child_process";import{existsSync as LT}from"node:fs";import{join as Jl}from"node:path";import{readdir as NP}from"node:fs/promises";function CT(){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 OT(){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 DT(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function xP(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.
1769
1769
  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:
1770
- ${we(e,{provider:t.tool})}
1771
-
1772
- ${r}`:r}function Mw(t){let e=t.tool||"claude",n=t.binaryPath||RP[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=gr(e,s)??LP[e]??["--dangerously-skip-permissions"];if(r.push(...o),$e(e,r,s),t.cwd&&!Lw(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=De(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?Ew(i):i}}function $w(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=Mw(e))}catch(H){return r(H instanceof Error?H:new Error(String(H)))}let c=xw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",H=>{je(`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:M.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,T=null,w=null,S=!1,b=!1,k=Cw(),N=Ow();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function I(){y!==void 0&&(clearTimeout(y),y=void 0)}let v=null;function A(){return f||d||M.sawResult()}function R(H){return H==="text_done"?k:N}async function x(H){if(H==="text_done"?E=void 0:y=void 0,A()||T!==null)return;v??=Date.now();let ne=R(H);if(e.holdOpen){let et=(e.holdOpen.maxHoldMs??Bl)-(Date.now()-v),tt=et>0?await Xl(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),et,e.signal):!1;if(A()||(H==="text_done"?E!==void 0:y!==void 0))return;if(tt===!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(()=>{x(H)},R(H));ne.unref?.(),H==="text_done"?(O(),E=ne):(I(),y=ne)}let M=Vl({usageState:o==="claude"?Jf(!!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=!Dw(H),b=S&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(S=!1,b=!1),O(),o==="claude"&&S&&!b&&!M.sawResult()&&C("text_done"),I(),o==="claude"&&!M.sawResult()&&C("tool_use_silence"),e.onEvent?.(H)},onText:H=>{h+=H,e.onText?.(H)}});function P(){m||(m=!0,ln(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=M.sawResult();M.processLine(H);let fe=M.usage();fe&&e.onUsage?.(fe),!ne&&M.sawResult()&&P()}c.stdout?.on("data",H=>{u+=H.toString();let ne=u.split(`
1773
- `);u=ne.pop()||"";for(let fe of ne)q(fe)});let $="";c.stderr?.on("data",H=>{$+=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(),I(),d)return;u.trim()&&q(u);let fe=M.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)je(`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 et=$.trim()?`
1774
- ${we($,{provider:o})}`:"",tt=`${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})`:"")+et;U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:H,signal:ne,stderr_summary:tt}),r(new ve(tt,H,ne,$))}else{let et=T!==null?`${T} \u2014 and produced no usable content to fall back on`+(e.sessionId?` (session=${e.sessionId})`:"")+($.trim()?`
1775
- ${we($,{provider:o})}`:""):xP({tool:o,exitCode:H,signal:ne,stderr:$});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:et}),r(new ve(et,H,ne,$))}});let ue=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(ue+`
1776
- `),je(`stream-json: prompt sent (${t.length} chars)`)})}function CP(t){return t==="qwen"?[Jl(Q,".qwen","projects")]:[Jl(Q,".claude","projects")]}async function Rw(t,e,n){let r=n??CP(t),s=null;for(let a of r){let l;try{l=await NP(a)}catch{continue}for(let c of l){for(let d of[Jl(a,c,`${e}.jsonl`),Jl(a,c,"chats",`${e}.jsonl`)])if(Lw(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 wt(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 Pw(t){let{tool:e,binary:n,args:r,spawnEnv:s}=Mw(t),o=xw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",F=>{je(`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"?Jf(!!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=Cw(),b=Ow(),k=null,N=[],O=()=>a.exited?Promise.resolve():new Promise(F=>{N.push(F)}),I=()=>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 R(){return a.exited||k===null||k.aborted||k.processor.sawResult()}function x(F){return F==="text_done"?S:b}async function C(F){if(F==="text_done"?T=void 0:w=void 0,R()||g!==null)return;y??=Date.now();let j=x(F);if(t.holdOpen){let ke=(t.holdOpen.maxHoldMs??Bl)-(Date.now()-y),Ut=ke>0?await Xl(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),ke,void 0):!1;if(R()||(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"}),M(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 M(F){if(t.serviceHosted)return;let j=setTimeout(()=>{C(F)},x(F));j.unref?.(),F==="text_done"?(v(),T=j):(A(),w=j)}let P=!1,q,$,ue=new Promise((F,j)=>{q=F,$=j});ue.catch(()=>{});let H=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,$(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?$(F):q())}let fe="";function et(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=k?.processor.sawResult()??!0;F.type==="assistant"?(_=!Dw(F),h=_&&F.message?.stop_reason==="pause_turn"):(F.type==="result"||F.type==="user")&&(_=!1,h=!1),v(),e==="claude"&&a.turnActive&&_&&!h&&!j&&M("text_done"),A(),e==="claude"&&a.turnActive&&!j&&M("tool_use_silence")}function tt(){let F=k;if(F===null)return;let j=F.processor.finalize();if(j!==null){if(k=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,je(`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 Oo(F){if(!F.trim())return;let j;try{j=JSON.parse(F)}catch{return}let he=Kf(j,p||l);if(he&&d.has(he))return;let ke=k;if(ke===null&&he&&(d.add(he),c&&(c.cost=null)),et(j),ke!==null){let Ut=ke.processor.sawResult();ke.processor.processLine(F),ke.onEventForward?.(j),!Ut&&ke.processor.sawResult()&&tt()}}o.stdout?.on("data",F=>{fe+=F.toString();let j=fe.split(`
1777
- `);fe=j.pop()||"";for(let he of j)Oo(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),k!==null){let j=k;k=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()&&Oo(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=k;if(he!==null&&(k=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?`
1778
- ${ke}`:""),F,j,f))}else{let ke=I(),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}
1779
- ${Ut}`:ke.message,F,j,f))}for(let ke of N.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 N.splice(0))he()}});try{t.sessionId&&await Rw(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 $r=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 I();if(k!==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 Rw(e,t.sessionId,t.sessionFileRoots),a.exited))throw I();if(j.signal?.aborted)throw he();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((ke,Ut)=>{let K_=Vl({usageState:c,resultIds:d,sessionId:p||l,onText:Y_=>{m+=Y_,j.onText?.(Y_)}}),Vd={processor:K_,resolve:ke,reject:Ut,startMs:Date.now(),aborted:!1,onEventForward:j.onEvent};k=Vd,a.turnActive=!0;let sR=()=>{Vd.aborted=!0,U({event:"transport_abort",provider:e}),a.closed=!0,de(o).catch(()=>{}),k===Vd&&(k=null,a.turnActive=!1),Ut(Object.assign(new Error("Aborted"),{usage:K_.usage()}))};j.signal?.addEventListener("abort",sR,{once:!0});let oR=JSON.stringify({type:"user",message:{role:"user",content:F}});o.stdin?.write(`${oR}
1780
- `),je(`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=>{ln(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(),$r(j)]),a.exited||await de(o,{stdinEnd:!1,softDelayMs:Math.min(1e3,j),killDelayMs:Math.min(1e3,j)}).catch(()=>{})}}})()),a.closing}}}var RP,LP,zf=L(()=>{"use strict";pr();ss();cn();re();Ni();Bt();Yf();xe();It();Yf();RP={claude:"claude",qwen:"qwen"};LP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function Kl(t={}){return[]}var Qf=L(()=>{"use strict"});function Zf(t){return t==="plan"?"read-only":"danger-full-access"}function Uw(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function Yl(){return{agentItems:new Map,resultText:""}}function no(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 zl(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function Fw(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 Ql(){return{pendingCodexError:null}}function Zl(t,e){let n=Fw(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function ec(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 em=L(()=>{"use strict"});import{spawn as jw}from"node:child_process";import{createInterface as Ww}from"node:readline";import{existsSync as OP,readFileSync as DP}from"node:fs";import{fileURLToPath as MP}from"node:url";function Hw(){return Uw($P)}function yr(t,e){je(`[codex:${t}] ${JSON.stringify(e)}`)}function PP(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.
1770
+ ${Te(e,{provider:t.tool})}
1771
+
1772
+ ${r}`:r}function MT(t){let e=t.tool||"claude",n=t.binaryPath||RP[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=gr(e,s)??LP[e]??["--dangerously-skip-permissions"];if(r.push(...o),$e(e,r,s),t.cwd&&!LT(t.cwd))throw U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new we(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=De(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?ET(i):i}}function $T(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=MT(e))}catch(H){return r(H instanceof Error?H:new Error(String(H)))}let c=xT(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",H=>{je(`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:M.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,w=null,T=null,S=!1,b=!1,k=CT(),N=OT();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function I(){y!==void 0&&(clearTimeout(y),y=void 0)}let v=null;function A(){return f||d||M.sawResult()}function R(H){return H==="text_done"?k:N}async function x(H){if(H==="text_done"?E=void 0:y=void 0,A()||w!==null)return;v??=Date.now();let ne=R(H);if(e.holdOpen){let et=(e.holdOpen.maxHoldMs??Bl)-(Date.now()-v),tt=et>0?await Xl(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),et,e.signal):!1;if(A()||(H==="text_done"?E!==void 0:y!==void 0))return;if(tt===!0){U({event:"transport_stall_grace_deferred",provider:o,grace_kind:H,grace_ms:ne,reason:"outstanding_dispatched_work"}),C(H);return}}T=H,w=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(()=>{x(H)},R(H));ne.unref?.(),H==="text_done"?(O(),E=ne):(I(),y=ne)}let M=Vl({usageState:o==="claude"?Jf(!!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=!DT(H),b=S&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(S=!1,b=!1),O(),o==="claude"&&S&&!b&&!M.sawResult()&&C("text_done"),I(),o==="claude"&&!M.sawResult()&&C("tool_use_silence"),e.onEvent?.(H)},onText:H=>{h+=H,e.onText?.(H)}});function P(){m||(m=!0,ln(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=M.sawResult();M.processLine(H);let fe=M.usage();fe&&e.onUsage?.(fe),!ne&&M.sawResult()&&P()}c.stdout?.on("data",H=>{u+=H.toString();let ne=u.split(`
1773
+ `);u=ne.pop()||"";for(let fe of ne)q(fe)});let $="";c.stderr?.on("data",H=>{$+=H.toString()}),c.on("error",H=>{U({event:"transport_error",provider:o,error_class:"TransportConnectionError",error_message:H.message}),r(new we(`Failed to spawn ${i}: ${H.message}`,{cause:H}))}),c.on("exit",(H,ne)=>{if(f=!0,O(),I(),d)return;u.trim()&&q(u);let fe=M.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)je(`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(w!==null&&T==="text_done"&&h.trim().length>0)U({event:"transport_stall_finalized",provider:o,reason:w,text_len:h.length}),n({result:h,sessionId:g||e.sessionId||"",durationMs:Date.now()-s,numTurns:1,exitCode:H,warnings:[w]});else if(w!==null&&T==="tool_use_silence"){let et=$.trim()?`
1774
+ ${Te($,{provider:o})}`:"",tt=`${w} \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})`:"")+et;U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:H,signal:ne,stderr_summary:tt}),r(new ve(tt,H,ne,$))}else{let et=w!==null?`${w} \u2014 and produced no usable content to fall back on`+(e.sessionId?` (session=${e.sessionId})`:"")+($.trim()?`
1775
+ ${Te($,{provider:o})}`:""):xP({tool:o,exitCode:H,signal:ne,stderr:$});U({event:"transport_error",provider:o,error_class:"Error",reason:w!==null?"provider_stalled_no_content":"provider_no_result",exit_code:H,signal:ne,stderr_summary:et}),r(new ve(et,H,ne,$))}});let ue=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(ue+`
1776
+ `),je(`stream-json: prompt sent (${t.length} chars)`)})}function CP(t){return t==="qwen"?[Jl(Q,".qwen","projects")]:[Jl(Q,".claude","projects")]}async function RT(t,e,n){let r=n??CP(t),s=null;for(let a of r){let l;try{l=await NP(a)}catch{continue}for(let c of l){for(let d of[Jl(a,c,`${e}.jsonl`),Jl(a,c,"chats",`${e}.jsonl`)])if(LT(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 Tt(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 PT(t){let{tool:e,binary:n,args:r,spawnEnv:s}=MT(t),o=xT(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",F=>{je(`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"?Jf(!!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,w,T,S=CT(),b=OT(),k=null,N=[],O=()=>a.exited?Promise.resolve():new Promise(F=>{N.push(F)}),I=()=>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(){w!==void 0&&(clearTimeout(w),w=void 0)}function A(){T!==void 0&&(clearTimeout(T),T=void 0)}function R(){return a.exited||k===null||k.aborted||k.processor.sawResult()}function x(F){return F==="text_done"?S:b}async function C(F){if(F==="text_done"?w=void 0:T=void 0,R()||g!==null)return;y??=Date.now();let j=x(F);if(t.holdOpen){let ke=(t.holdOpen.maxHoldMs??Bl)-(Date.now()-y),Ut=ke>0?await Xl(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),ke,void 0):!1;if(R()||(F==="text_done"?w!==void 0:T!==void 0))return;if(Ut===!0){U({event:"transport_stall_grace_deferred",provider:e,grace_kind:F,grace_ms:j,reason:"outstanding_dispatched_work"}),M(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 M(F){if(t.serviceHosted)return;let j=setTimeout(()=>{C(F)},x(F));j.unref?.(),F==="text_done"?(v(),w=j):(A(),T=j)}let P=!1,q,$,ue=new Promise((F,j)=>{q=F,$=j});ue.catch(()=>{});let H=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,$(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?$(F):q())}let fe="";function et(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=k?.processor.sawResult()??!0;F.type==="assistant"?(_=!DT(F),h=_&&F.message?.stop_reason==="pause_turn"):(F.type==="result"||F.type==="user")&&(_=!1,h=!1),v(),e==="claude"&&a.turnActive&&_&&!h&&!j&&M("text_done"),A(),e==="claude"&&a.turnActive&&!j&&M("tool_use_silence")}function tt(){let F=k;if(F===null)return;let j=F.processor.finalize();if(j!==null){if(k=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,je(`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 Oo(F){if(!F.trim())return;let j;try{j=JSON.parse(F)}catch{return}let he=Kf(j,p||l);if(he&&d.has(he))return;let ke=k;if(ke===null&&he&&(d.add(he),c&&(c.cost=null)),et(j),ke!==null){let Ut=ke.processor.sawResult();ke.processor.processLine(F),ke.onEventForward?.(j),!Ut&&ke.processor.sawResult()&&tt()}}o.stdout?.on("data",F=>{fe+=F.toString();let j=fe.split(`
1777
+ `);fe=j.pop()||"";for(let he of j)Oo(he)}),o.on("error",F=>{if(u=new we(`Failed to spawn ${n}: ${F.message}`,{cause:F}),U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:F.message}),ne(u),k!==null){let j=k;k=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()&&Oo(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=k;if(he!==null&&(k=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()?Te(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?`
1778
+ ${ke}`:""),F,j,f))}else{let ke=I(),Ut=f.trim()?Te(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}
1779
+ ${Ut}`:ke.message,F,j,f))}for(let ke of N.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 N.splice(0))he()}});try{t.sessionId&&await RT(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 $r=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 I();if(k!==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 RT(e,t.sessionId,t.sessionFileRoots),a.exited))throw I();if(j.signal?.aborted)throw he();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((ke,Ut)=>{let K_=Vl({usageState:c,resultIds:d,sessionId:p||l,onText:Y_=>{m+=Y_,j.onText?.(Y_)}}),Vd={processor:K_,resolve:ke,reject:Ut,startMs:Date.now(),aborted:!1,onEventForward:j.onEvent};k=Vd,a.turnActive=!0;let sR=()=>{Vd.aborted=!0,U({event:"transport_abort",provider:e}),a.closed=!0,de(o).catch(()=>{}),k===Vd&&(k=null,a.turnActive=!1),Ut(Object.assign(new Error("Aborted"),{usage:K_.usage()}))};j.signal?.addEventListener("abort",sR,{once:!0});let oR=JSON.stringify({type:"user",message:{role:"user",content:F}});o.stdin?.write(`${oR}
1780
+ `),je(`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=>{ln(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(),$r(j)]),a.exited||await de(o,{stdinEnd:!1,softDelayMs:Math.min(1e3,j),killDelayMs:Math.min(1e3,j)}).catch(()=>{})}}})()),a.closing}}}var RP,LP,zf=L(()=>{"use strict";pr();ss();cn();re();Ni();Bt();Yf();xe();It();Yf();RP={claude:"claude",qwen:"qwen"};LP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function Kl(t={}){return[]}var Qf=L(()=>{"use strict"});function Zf(t){return t==="plan"?"read-only":"danger-full-access"}function UT(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function Yl(){return{agentItems:new Map,resultText:""}}function no(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 zl(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function FT(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 Ql(){return{pendingCodexError:null}}function Zl(t,e){let n=FT(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function ec(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 em=L(()=>{"use strict"});import{spawn as jT}from"node:child_process";import{createInterface as WT}from"node:readline";import{existsSync as OP,readFileSync as DP}from"node:fs";import{fileURLToPath as MP}from"node:url";function HT(){return UT($P)}function yr(t,e){je(`[codex:${t}] ${JSON.stringify(e)}`)}function PP(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.
1781
1781
  One possible cause: Codex stopped before delivering a terminal turn/completed event.`;return e?`Original provider error:
1782
- ${we(e,{provider:"codex"})}
1782
+ ${Te(e,{provider:"codex"})}
1783
1783
 
1784
- ${n}`:n}function Bw(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?Kl():[];n.push(...s),ye()&&ze(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let o=t.permissionMode??"yolo",i=Zf(o);if($e("codex",n,o),t.cwd&&!OP(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:De(t.env,t.cwd,t.threadId)}}function Xw(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 qw(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=Bw(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=jw(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:De(e.env,e.cwd,e.threadId)}),l=Lf(),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=Ww({input:a.stdout}),m=new Map,p=1,_=e.threadId||"",h="",g=!1,E=!1,y=Date.now(),T=Yl(),w=Ql();function S(O,I={}){return new Promise((v,A)=>{let R=p++;m.set(R,{resolve:v,reject:A});let x=JSON.stringify({jsonrpc:"2.0",id:R,method:O,params:I});a.stdin?.write(x+`
1784
+ ${n}`:n}function BT(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?Kl():[];n.push(...s),ye()&&ze(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let o=t.permissionMode??"yolo",i=Zf(o);if($e("codex",n,o),t.cwd&&!OP(t.cwd))throw U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new we(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:i,permissionMode:o,spawnEnv:De(t.env,t.cwd,t.threadId)}}function XT(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 qT(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=BT(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=jT(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:De(e.env,e.cwd,e.threadId)}),l=Lf(),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=WT({input:a.stdout}),m=new Map,p=1,_=e.threadId||"",h="",g=!1,E=!1,y=Date.now(),w=Yl(),T=Ql();function S(O,I={}){return new Promise((v,A)=>{let R=p++;m.set(R,{resolve:v,reject:A});let x=JSON.stringify({jsonrpc:"2.0",id:R,method:O,params:I});a.stdin?.write(x+`
1785
1785
  `)})}function b(O,I={}){let v=JSON.stringify({jsonrpc:"2.0",method:O,params:I});a.stdin?.write(v+`
1786
- `)}f.on("line",O=>{let I;try{I=JSON.parse(O)}catch{return}if(typeof I.id=="number"&&m.has(I.id)){Xw(l,I);let x=m.get(I.id);if(m.delete(I.id),I.error){let C=I.error,M=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(I.error);x.reject(Ai(`codex app-server error: ${M}`,C))}else x.resolve(I);e.onEvent?.(I);return}let v=I.method;if(!v){e.onEvent?.(I);return}if(u||!c.event(I))return;let A=c.usage();if(A&&e.onUsage?.(A),v==="thread/started"){let C=I.params?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}let R=ye()?x=>{yr("item.text/buffer-mismatch",{itemId:x.itemId,threadId:x.threadId??null,turnId:x.turnId??null,expectedFromItemText:x.expectedFromItemText,gotFromBuffer:x.gotFromBuffer,expectedLen:x.expectedFromItemText.length,gotLen:x.gotFromBuffer.length})}:void 0;if(v==="turn/started"){let x=I.params,C=x?.turn;C?.id&&(h=C.id),no(I,T,e.onDelta,R),ye()&&yr("turn/started",{params:x??null})}if(ye()&&(v==="item/started"||v==="item/completed")){let x=I.params;x?.item?.type==="agentMessage"&&yr(v,{params:x??null})}if(v==="item/started"||v==="item/agentMessage/delta"||v==="item/completed"){if(v==="item/agentMessage/delta"){let x=I.params;ye()&&yr("agentMessage/delta",{params:x??null})}no(I,T,e.onDelta,R)}if(v==="turn/completed"){c.finish();let x=I.params;if(ye())for(let[M,P]of T.agentItems.entries())P.buffer&&yr("turn/completed/unflushed-item",{itemId:M,phase:P.phase,bufferLen:P.buffer.length});zl(T),ye()&&yr("turn/completed",{params:x??null});let C=ec(I,w);C.shouldReject?(ye()&&yr("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 x=Zl(I,w);if(ye()){let C=I.params,M=C?.error,P=typeof M?.message=="string"?M.message:"(no message)";yr(x.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:x.willRetry,params:C??null})}}e.onEvent?.(I)});let k="";a.stderr?.on("data",O=>{k+=O.toString()});let N=O=>{U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let I=new Te(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let v of m.values())v.reject(d(I));m.clear(),r(d(I))};a.on("error",N),a.stdin?.on("error",N),a.on("exit",(O,I)=>{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=PP({exitCode:O,signal:I,stderr:k});U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:I,stderr_summary:v}),r(d(new ve(v,O,I,k)))}),(async()=>{try{if(await S("initialize",Hw()),b("initialized",{}),e.threadId)try{let O=S("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),I,v=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((A,R)=>{I=setTimeout(()=>R(new Error("resume timeout")),3e4)});try{let R=(await Promise.race([O,v])).result?.thread?.id;if(e.requireResume&&R!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${R??"unknown"}")`)}finally{clearTimeout(I)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1787
- `),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 I=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;I?.id&&(_=I.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 Gw(t){let{binary:e,codexArgs:n,sandbox:r}=Bw(t),s=jw(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:De(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=Lf(),c=null,d="";s.stderr?.on("data",I=>{d+=I.toString()});let u=Ww({input:s.stdout}),f=new Map,m=1;function p(I,v={}){return new Promise((A,R)=>{let x=m++;f.set(x,{resolve:A,reject:R});let C=JSON.stringify({jsonrpc:"2.0",id:x,method:I,params:v});s.stdin?.write(C+`
1786
+ `)}f.on("line",O=>{let I;try{I=JSON.parse(O)}catch{return}if(typeof I.id=="number"&&m.has(I.id)){XT(l,I);let x=m.get(I.id);if(m.delete(I.id),I.error){let C=I.error,M=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(I.error);x.reject(Ai(`codex app-server error: ${M}`,C))}else x.resolve(I);e.onEvent?.(I);return}let v=I.method;if(!v){e.onEvent?.(I);return}if(u||!c.event(I))return;let A=c.usage();if(A&&e.onUsage?.(A),v==="thread/started"){let C=I.params?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}let R=ye()?x=>{yr("item.text/buffer-mismatch",{itemId:x.itemId,threadId:x.threadId??null,turnId:x.turnId??null,expectedFromItemText:x.expectedFromItemText,gotFromBuffer:x.gotFromBuffer,expectedLen:x.expectedFromItemText.length,gotLen:x.gotFromBuffer.length})}:void 0;if(v==="turn/started"){let x=I.params,C=x?.turn;C?.id&&(h=C.id),no(I,w,e.onDelta,R),ye()&&yr("turn/started",{params:x??null})}if(ye()&&(v==="item/started"||v==="item/completed")){let x=I.params;x?.item?.type==="agentMessage"&&yr(v,{params:x??null})}if(v==="item/started"||v==="item/agentMessage/delta"||v==="item/completed"){if(v==="item/agentMessage/delta"){let x=I.params;ye()&&yr("agentMessage/delta",{params:x??null})}no(I,w,e.onDelta,R)}if(v==="turn/completed"){c.finish();let x=I.params;if(ye())for(let[M,P]of w.agentItems.entries())P.buffer&&yr("turn/completed/unflushed-item",{itemId:M,phase:P.phase,bufferLen:P.buffer.length});zl(w),ye()&&yr("turn/completed",{params:x??null});let C=ec(I,T);C.shouldReject?(ye()&&yr("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 x=Zl(I,T);if(ye()){let C=I.params,M=C?.error,P=typeof M?.message=="string"?M.message:"(no message)";yr(x.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:x.willRetry,params:C??null})}}e.onEvent?.(I)});let k="";a.stderr?.on("data",O=>{k+=O.toString()});let N=O=>{U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let I=new we(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let v of m.values())v.reject(d(I));m.clear(),r(d(I))};a.on("error",N),a.stdin?.on("error",N),a.on("exit",(O,I)=>{if(u||E)return;if(g){n({result:w.resultText,usage:c.usage(),threadId:_,turnId:h,durationMs:Date.now()-y,exitCode:O});return}if(T.pendingCodexError){r(d(T.pendingCodexError));return}let v=PP({exitCode:O,signal:I,stderr:k});U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:I,stderr_summary:v}),r(d(new ve(v,O,I,k)))}),(async()=>{try{if(await S("initialize",HT()),b("initialized",{}),e.threadId)try{let O=S("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),I,v=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((A,R)=>{I=setTimeout(()=>R(new Error("resume timeout")),3e4)});try{let R=(await Promise.race([O,v])).result?.thread?.id;if(e.requireResume&&R!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${R??"unknown"}")`)}finally{clearTimeout(I)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1787
+ `),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 I=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;I?.id&&(_=I.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 GT(t){let{binary:e,codexArgs:n,sandbox:r}=BT(t),s=jT(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:De(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=Lf(),c=null,d="";s.stderr?.on("data",I=>{d+=I.toString()});let u=WT({input:s.stdout}),f=new Map,m=1;function p(I,v={}){return new Promise((A,R)=>{let x=m++;f.set(x,{resolve:A,reject:R});let C=JSON.stringify({jsonrpc:"2.0",id:x,method:I,params:v});s.stdin?.write(C+`
1788
1788
  `)})}function _(I,v={}){let A=JSON.stringify({jsonrpc:"2.0",method:I,params:v});s.stdin?.write(A+`
1789
- `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(I=>{h.push(I)}),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=I=>{I.turnId&&p("turn/interrupt",{threadId:a,turnId:I.turnId}).catch(()=>{})};function k(I){let v=y;v===null||v.settled||(v.settled=!0,y=null,v.usage.finish(),I&&v.reject(Object.assign(I,{usage:v.usage.usage(),sessionId:a})))}u.on("line",I=>{let v;try{v=JSON.parse(I)}catch{return}if(typeof v.id=="number"&&f.has(v.id)){Xw(l,v);let P=f.get(v.id);if(f.delete(v.id),v.error){let q=v.error,$=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(v.error);P.reject(Ai(`codex app-server error: ${$}`,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 R=v.params,x=R?.turnId??R?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&x&&(T.usage.bind(x),T.usage.finish(),T.turnId=x,b(T)),A==="turn/completed"&&x===T.turnId&&(l.remember(a,x),T=null,S?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let C=y;if(x&&C?.turnId&&x!==C.turnId||C!==null&&!C.usage.event(v))return;let M=C?.usage.usage();if(M&&C?.onUsage?.(M),A==="turn/started"&&C!==null){let q=v.params?.turn;q?.id&&(C.turnId=q.id),no(v,C.agentState,C.onDelta,void 0)}if(C!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&no(v,C.agentState,C.onDelta,void 0),A==="turn/completed"&&C!==null&&!C.settled){zl(C.agentState);let P=ec(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&&Zl(v,C.turnState),C?.onEvent?.(v)});let N=I=>{c=new Te(`Failed to spawn codex app-server: ${I.message}`,{cause:I}),U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:I.message});for(let v of f.values())v.reject(c);f.clear(),k(c)};s.on("error",N),s.stdin?.on("error",N),s.on("exit",(I,v)=>{i.exited=!0,S?.(),i.exitCode=I,i.signal=v;let A=E();for(let x of f.values())x.reject(A);f.clear();let R=y;if(R!==null&&!R.settled)if(R.settled=!0,R.usage.finish(),y=null,R.turnState.pendingCodexError)R.reject(Object.assign(R.turnState.pendingCodexError,{usage:R.usage.usage(),sessionId:a}));else{let x=d.trim()?we(d,{provider:"codex"}):"";U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:I,signal:v,...x?{stderr_summary:x}:{}}),R.reject(Object.assign(new ve(x?`${A.message}
1790
- ${x}`:A.message,I,v,d),{usage:R.usage.usage(),sessionId:a}))}for(let x of h.splice(0))x()}),s.on("close",(I,v)=>{if(!i.exited){i.exited=!0,i.exitCode=I,i.signal=v;for(let A of h.splice(0))A()}});try{if(await p("initialize",Hw()),_("initialized",{}),t.threadId){let I;try{I=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=I.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(I){let v=c??(I instanceof Error?I:new Error(String(I)));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=I=>new Promise(v=>{setTimeout(v,I).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(I,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,R)=>{let x={usage:l.turn(a),onUsage:v.onUsage,agentState:Yl(),turnState:Ql(),resolve:A,reject:R,startMs:Date.now(),turnId:"",onDelta:v.onDelta,onEvent:v.onEvent,settled:!1};y=x;let C=()=>{x.settled||(x.settled=!0,y=null,T=x,w=new Promise(M=>{S=M}),b(x),v.signal?.removeEventListener("abort",C),x.usage.finish(),R(Object.assign(new Error("Aborted"),{usage:x.usage.usage(),sessionId:a})))};v.signal?.addEventListener("abort",C,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:I}],...t.model?{model:t.model}:{}}).then(M=>{x.usage.bind(M.result?.turn?.id)}).catch(M=>{if(x.settled){T===x&&(T=null,S?.());return}x.settled=!0,y=null,v.signal?.removeEventListener("abort",C),x.usage.finish(),R(Object.assign(i.exited?E():M instanceof Error?M:new Error(String(M)),{usage:x.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(I=>{ln(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),I()},label:"codex"})}):s.stdin?.end(),!i.exited)){let I=t.closeTimeoutMs;if(I===void 0&&t.serviceHosted)await g();else{let v=I??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 $P,Vw=L(()=>{"use strict";Df();re();re();pr();ss();Ni();cn();Qf();re();Bt();It();em();em();$P=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(DP(MP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function tc(t){let e=[...t.matchAll(UP)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return Jw(t.slice(r).trimStart())}return Jw(BP(t.replace(FP,"")))}function BP(t){let e=jP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(WP)];if(r.length<2)return t;let s=r[0],o=(s.index??0)+s[0].length;return n.slice(o).trimStart()}function Jw(t){let e=[...t.matchAll(HP)];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 jn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function Yw(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function nc(t={}){let e="",n="",r="",s=!1,o=!1,i=!1,a=t.isolateResult??(t.tool==="gemini"?tc: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=Yw(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&&XP.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 Kw,UP,FP,jP,WP,HP,XP,xi=L(()=>{"use strict";Kw="(?:png|jpe?g|webp|heic|pdf)",UP=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${Kw}\\s*`,"gi"),FP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${Kw}\\s*`,"i"),jP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,WP=/^STANCE:\s+\S+\s*$/gim,HP=/\[Thought:\s*true\]\s*/gi;XP=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var tm=L(()=>{"use strict";Wf()});var rc,zw=L(()=>{"use strict";rc={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 qP,readdirSync as Qw}from"node:fs";import{join as sc}from"node:path";function Zw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??sc(Q,".gemini"),r=sc(n,"tmp"),s;try{s=Qw(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=sc(r,a,"chats"),c;try{c=Qw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=qP(sc(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 Li,ev=L(()=>{"use strict";xi();xe();cn();Li={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...Li.baseArgs];if(t.permissionMode==="plan"){let n=gr("gemini","plan"),r=gr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:tc,sessionIdentity:{verifyLoadedSession:t=>{Zw(t.requestedSessionId,t.env)},recheckSession:t=>{Zw(t.requestedSessionId,t.env)}}}});import{existsSync as GP,readFileSync as VP}from"node:fs";import{join as nm}from"node:path";function tv(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??nm(Q,".copilot"),r=nm(n,"session-state",t),s=nm(r,"workspace.yaml");if(!GP(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=VP(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 Ci,nv=L(()=>{"use strict";re();xe();Ci={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.
1789
+ `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(I=>{h.push(I)}),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,w=null,T,S,b=I=>{I.turnId&&p("turn/interrupt",{threadId:a,turnId:I.turnId}).catch(()=>{})};function k(I){let v=y;v===null||v.settled||(v.settled=!0,y=null,v.usage.finish(),I&&v.reject(Object.assign(I,{usage:v.usage.usage(),sessionId:a})))}u.on("line",I=>{let v;try{v=JSON.parse(I)}catch{return}if(typeof v.id=="number"&&f.has(v.id)){XT(l,v);let P=f.get(v.id);if(f.delete(v.id),v.error){let q=v.error,$=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(v.error);P.reject(Ai(`codex app-server error: ${$}`,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 R=v.params,x=R?.turnId??R?.turn?.id;if(w&&(A==="turn/started"&&!w.turnId&&x&&(w.usage.bind(x),w.usage.finish(),w.turnId=x,b(w)),A==="turn/completed"&&x===w.turnId&&(l.remember(a,x),w=null,S?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let C=y;if(x&&C?.turnId&&x!==C.turnId||C!==null&&!C.usage.event(v))return;let M=C?.usage.usage();if(M&&C?.onUsage?.(M),A==="turn/started"&&C!==null){let q=v.params?.turn;q?.id&&(C.turnId=q.id),no(v,C.agentState,C.onDelta,void 0)}if(C!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&no(v,C.agentState,C.onDelta,void 0),A==="turn/completed"&&C!==null&&!C.settled){zl(C.agentState);let P=ec(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&&Zl(v,C.turnState),C?.onEvent?.(v)});let N=I=>{c=new we(`Failed to spawn codex app-server: ${I.message}`,{cause:I}),U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:I.message});for(let v of f.values())v.reject(c);f.clear(),k(c)};s.on("error",N),s.stdin?.on("error",N),s.on("exit",(I,v)=>{i.exited=!0,S?.(),i.exitCode=I,i.signal=v;let A=E();for(let x of f.values())x.reject(A);f.clear();let R=y;if(R!==null&&!R.settled)if(R.settled=!0,R.usage.finish(),y=null,R.turnState.pendingCodexError)R.reject(Object.assign(R.turnState.pendingCodexError,{usage:R.usage.usage(),sessionId:a}));else{let x=d.trim()?Te(d,{provider:"codex"}):"";U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:I,signal:v,...x?{stderr_summary:x}:{}}),R.reject(Object.assign(new ve(x?`${A.message}
1790
+ ${x}`:A.message,I,v,d),{usage:R.usage.usage(),sessionId:a}))}for(let x of h.splice(0))x()}),s.on("close",(I,v)=>{if(!i.exited){i.exited=!0,i.exitCode=I,i.signal=v;for(let A of h.splice(0))A()}});try{if(await p("initialize",HT()),_("initialized",{}),t.threadId){let I;try{I=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=I.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(I){let v=c??(I instanceof Error?I:new Error(String(I)));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=I=>new Promise(v=>{setTimeout(v,I).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(I,v={}){if(T&&await T,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,R)=>{let x={usage:l.turn(a),onUsage:v.onUsage,agentState:Yl(),turnState:Ql(),resolve:A,reject:R,startMs:Date.now(),turnId:"",onDelta:v.onDelta,onEvent:v.onEvent,settled:!1};y=x;let C=()=>{x.settled||(x.settled=!0,y=null,w=x,T=new Promise(M=>{S=M}),b(x),v.signal?.removeEventListener("abort",C),x.usage.finish(),R(Object.assign(new Error("Aborted"),{usage:x.usage.usage(),sessionId:a})))};v.signal?.addEventListener("abort",C,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:I}],...t.model?{model:t.model}:{}}).then(M=>{x.usage.bind(M.result?.turn?.id)}).catch(M=>{if(x.settled){w===x&&(w=null,S?.());return}x.settled=!0,y=null,v.signal?.removeEventListener("abort",C),x.usage.finish(),R(Object.assign(i.exited?E():M instanceof Error?M:new Error(String(M)),{usage:x.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(I=>{ln(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),I()},label:"codex"})}):s.stdin?.end(),!i.exited)){let I=t.closeTimeoutMs;if(I===void 0&&t.serviceHosted)await g();else{let v=I??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 $P,VT=L(()=>{"use strict";Df();re();re();pr();ss();Ni();cn();Qf();re();Bt();It();em();em();$P=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(DP(MP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function tc(t){let e=[...t.matchAll(UP)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return JT(t.slice(r).trimStart())}return JT(BP(t.replace(FP,"")))}function BP(t){let e=jP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(WP)];if(r.length<2)return t;let s=r[0],o=(s.index??0)+s[0].length;return n.slice(o).trimStart()}function JT(t){let e=[...t.matchAll(HP)];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 jn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function YT(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function nc(t={}){let e="",n="",r="",s=!1,o=!1,i=!1,a=t.isolateResult??(t.tool==="gemini"?tc: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=YT(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&&XP.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 KT,UP,FP,jP,WP,HP,XP,xi=L(()=>{"use strict";KT="(?:png|jpe?g|webp|heic|pdf)",UP=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${KT}\\s*`,"gi"),FP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${KT}\\s*`,"i"),jP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,WP=/^STANCE:\s+\S+\s*$/gim,HP=/\[Thought:\s*true\]\s*/gi;XP=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var tm=L(()=>{"use strict";Wf()});var rc,zT=L(()=>{"use strict";rc={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 qP,readdirSync as QT}from"node:fs";import{join as sc}from"node:path";function ZT(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??sc(Q,".gemini"),r=sc(n,"tmp"),s;try{s=QT(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=sc(r,a,"chats"),c;try{c=QT(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=qP(sc(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 Li,ev=L(()=>{"use strict";xi();xe();cn();Li={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...Li.baseArgs];if(t.permissionMode==="plan"){let n=gr("gemini","plan"),r=gr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:tc,sessionIdentity:{verifyLoadedSession:t=>{ZT(t.requestedSessionId,t.env)},recheckSession:t=>{ZT(t.requestedSessionId,t.env)}}}});import{existsSync as GP,readFileSync as VP}from"node:fs";import{join as nm}from"node:path";function tv(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??nm(Q,".copilot"),r=nm(n,"session-state",t),s=nm(r,"workspace.yaml");if(!GP(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=VP(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 Ci,nv=L(()=>{"use strict";re();xe();Ci={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.
1791
1791
  `),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.
1792
1792
  `),U({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...Ci.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{tv(t.requestedSessionId,t.env)},recheckSession:t=>{tv(t.requestedSessionId,t.env)}}}});import{existsSync as ov,mkdirSync as JP,readFileSync as iv,writeFileSync as rv}from"node:fs";import{join as Oi,resolve as KP}from"node:path";function av(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 rm(t,e,n={existsSync:ov,readFileSync:iv}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let o=KP(e,s.sessiondir??e);for(let i of YP(o)){let a=zP(i,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(av(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 YP(t){return[Oi(t,".opencode","opencode.jsonc"),Oi(t,"opencode.jsonc"),Oi(t,"opencode.json")]}function zP(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse(QP(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function QP(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]!==`
1793
1793
  `;)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 lv(t,e={}){let n=Oi(t,".opencode"),r=Oi(n,"opencode.json");if(!ov(r)){JP(n,{recursive:!0});let i=JSON.stringify({permission:"allow"},null,2);return rv(r,i+`
@@ -1796,8 +1796,8 @@ ${x}`:A.message,I,v,d),{usage:R.usage.usage(),sessionId:a}))}for(let x of h.spli
1796
1796
  s.time_created, s.time_updated
1797
1797
  FROM session s
1798
1798
  ORDER BY s.time_updated DESC`).all();for(let a of i){let l=s.get(a.project_id),c=a.directory||l?.worktree||"(unknown)",d=r.prepare(`SELECT m.id, m.data, m.time_created FROM message m
1799
- WHERE m.session_id = ? ORDER BY m.time_created ASC`).all(a.id),u=0,f,m,p,_=dv(),h=[];for(let E of d){let y;try{y=JSON.parse(E.data)}catch{continue}p||(p=y.model?.modelID||y.modelID),(y.role==="user"||y.role==="assistant")&&u++,y.role==="user"&&h.push(E.id),y.role==="assistant"&&uv(_,y.tokens)}let g=[...h.length>0?[h[0]]:[],...h.length>1?[h[h.length-1]]:[]];for(let E of g){let y=r.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(E),T=this.extractText(y);T&&(f||(f=G(T,80)),m=G(T,80))}e.push({provider:this.name,sessionId:a.id,slug:a.slug,cwd:c,createdAt:new Date(a.time_created),modifiedAt:new Date(a.time_updated),model:p,startCommand:this.startCommand,firstUserMessage:f,lastUserMessage:m,messageCount:u,filePath:n,...fv(_)})}}catch(s){U({event:"opencode_discover_sessions_failed",provider:this.name,db_path:n,error_message:s instanceof Error?s.message:String(s)})}finally{r.close()}}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=this.findSessionRow(r,e);if(!s)continue;return this.buildSessionDetail(r,s,n)}catch{}finally{r.close()}}return null}buildSessionDetail(e,n,r){let s=e.prepare("SELECT id, worktree, name FROM project WHERE id = ?").get(n.project_id),o=n.directory||s?.worktree||"(unknown)",i=e.prepare(`SELECT id, session_id, time_created, time_updated, data
1800
- FROM message WHERE session_id = ? ORDER BY time_created ASC`).all(n.id),a=[],l=[],c=0,d,u,f,m=dv();for(let p of i){let _;try{_=JSON.parse(p.data)}catch{continue}d||(d=_.model?.modelID||_.modelID);let h=_.model?.modelID||_.modelID,g=new Date(_.time?.created||p.time_created),E=e.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(p.id);if(_.role==="user"){let y=this.extractText(E),T=this.extractText(E,!0);T&&l.push(T),y&&(u||(u=G(y,80)),f=G(y,80)),a.push({role:"user",timestamp:g,content:y||"(empty)"}),c++}else if(_.role==="assistant"){uv(m,_.tokens);for(let y of E){let T;try{T=JSON.parse(y.data)}catch{continue}T.type==="text"&&T.text?a.push({role:"assistant",timestamp:g,content:T.text,model:h}):T.type==="reasoning"&&T.text?a.push({role:"thinking",timestamp:g,content:T.text}):T.type==="tool"&&T.tool&&(a.push({role:"tool_use",timestamp:g,content:`${T.tool}`,toolName:T.tool,toolCallId:T.callID,toolInput:T.state?.input?JSON.stringify(T.state.input):void 0,toolInputData:Rt(T.state?.input)}),T.state&&(T.state.status==="completed"||T.state.status==="error"||T.state.output!==void 0||T.state.error!==void 0)&&a.push({role:"tool_result",timestamp:g,content:T.state.error??T.state.output??"",toolCallId:T.callID}))}c++}}return{provider:this.name,sessionId:n.id,slug:n.slug,cwd:o,createdAt:new Date(n.time_created),modifiedAt:new Date(n.time_updated),model:d,startCommand:this.startCommand,firstUserMessage:u,lastUserMessage:f,messageCount:c,filePath:r,...fv(m),messages:a,userPrompts:l}}extractText(e,n=!1){let r=[];for(let s of e){let o;try{o=JSON.parse(s.data)}catch{continue}n&&(o.synthetic===!0||o.ignored===!0)||o.type==="text"&&o.text&&r.push(o.text)}return r.join(`
1799
+ WHERE m.session_id = ? ORDER BY m.time_created ASC`).all(a.id),u=0,f,m,p,_=dv(),h=[];for(let E of d){let y;try{y=JSON.parse(E.data)}catch{continue}p||(p=y.model?.modelID||y.modelID),(y.role==="user"||y.role==="assistant")&&u++,y.role==="user"&&h.push(E.id),y.role==="assistant"&&uv(_,y.tokens)}let g=[...h.length>0?[h[0]]:[],...h.length>1?[h[h.length-1]]:[]];for(let E of g){let y=r.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(E),w=this.extractText(y);w&&(f||(f=G(w,80)),m=G(w,80))}e.push({provider:this.name,sessionId:a.id,slug:a.slug,cwd:c,createdAt:new Date(a.time_created),modifiedAt:new Date(a.time_updated),model:p,startCommand:this.startCommand,firstUserMessage:f,lastUserMessage:m,messageCount:u,filePath:n,...fv(_)})}}catch(s){U({event:"opencode_discover_sessions_failed",provider:this.name,db_path:n,error_message:s instanceof Error?s.message:String(s)})}finally{r.close()}}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=this.findSessionRow(r,e);if(!s)continue;return this.buildSessionDetail(r,s,n)}catch{}finally{r.close()}}return null}buildSessionDetail(e,n,r){let s=e.prepare("SELECT id, worktree, name FROM project WHERE id = ?").get(n.project_id),o=n.directory||s?.worktree||"(unknown)",i=e.prepare(`SELECT id, session_id, time_created, time_updated, data
1800
+ FROM message WHERE session_id = ? ORDER BY time_created ASC`).all(n.id),a=[],l=[],c=0,d,u,f,m=dv();for(let p of i){let _;try{_=JSON.parse(p.data)}catch{continue}d||(d=_.model?.modelID||_.modelID);let h=_.model?.modelID||_.modelID,g=new Date(_.time?.created||p.time_created),E=e.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(p.id);if(_.role==="user"){let y=this.extractText(E),w=this.extractText(E,!0);w&&l.push(w),y&&(u||(u=G(y,80)),f=G(y,80)),a.push({role:"user",timestamp:g,content:y||"(empty)"}),c++}else if(_.role==="assistant"){uv(m,_.tokens);for(let y of E){let w;try{w=JSON.parse(y.data)}catch{continue}w.type==="text"&&w.text?a.push({role:"assistant",timestamp:g,content:w.text,model:h}):w.type==="reasoning"&&w.text?a.push({role:"thinking",timestamp:g,content:w.text}):w.type==="tool"&&w.tool&&(a.push({role:"tool_use",timestamp:g,content:`${w.tool}`,toolName:w.tool,toolCallId:w.callID,toolInput:w.state?.input?JSON.stringify(w.state.input):void 0,toolInputData:Rt(w.state?.input)}),w.state&&(w.state.status==="completed"||w.state.status==="error"||w.state.output!==void 0||w.state.error!==void 0)&&a.push({role:"tool_result",timestamp:g,content:w.state.error??w.state.output??"",toolCallId:w.callID}))}c++}}return{provider:this.name,sessionId:n.id,slug:n.slug,cwd:o,createdAt:new Date(n.time_created),modifiedAt:new Date(n.time_updated),model:d,startCommand:this.startCommand,firstUserMessage:u,lastUserMessage:f,messageCount:c,filePath:r,...fv(m),messages:a,userPrompts:l}}extractText(e,n=!1){let r=[];for(let s of e){let o;try{o=JSON.parse(s.data)}catch{continue}n&&(o.synthetic===!0||o.ignored===!0)||o.type==="text"&&o.text&&r.push(o.text)}return r.join(`
1801
1801
  `).trim()}async resolveSessionPath(e){for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{if(this.findSessionRow(r,e))return n}catch{}finally{r.close()}}return null}async deleteSession(e){for(let n of this.existingDbPaths()){let r=new(am())(n,{open:!0});try{let s=this.findSessionRow(r,e);if(!s)continue;return r.prepare("DELETE FROM session WHERE id = ?").run(s.id).changes>0}catch{}finally{r.close()}}return!1}findSessionRow(e,n){let r=e.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
1802
1802
  s.time_created, s.time_updated
1803
1803
  FROM session s WHERE s.id = ?`).get(n);if(r)return r;let s=e.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
@@ -1809,56 +1809,56 @@ ${x}`:A.message,I,v,d),{usage:R.usage.usage(),sessionId:a}))}for(let x of h.spli
1809
1809
  `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var cm=L(()=>{"use strict"});import{spawn as s1}from"node:child_process";import{resolve as pv}from"node:path";function Mi(t){let e;try{e=s1(t.binaryPath??os.binary,[...os.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:De(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=_r(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=jn(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 os,dm=L(()=>{"use strict";re();sm();oc();xi();Bt();ss();tm();cm();os={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...os.baseArgs],preSpawn(t){try{lv(t.cwd)}catch(e){U({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[Di({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),Di({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:Mi,sessionIdentity:{verifyLoadedSession:t=>{let e=lm(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(pv(e.directory)!==pv(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(lm(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 o1}from"node:fs";import{readdir as i1}from"node:fs/promises";import{join as um,resolve as a1}from"node:path";function _v(t){let e=l1.exec(t);return e?e[0]:null}function c1(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(`
1810
1810
  `);if(/\bcode:\s*-32601\b/.test(a)&&/Method not found[^]*notifications\/initialized/.test(a)){r=i;continue}}n.push(s)}return n.join(`
1811
1811
  `)}async function hv(t,e){let n=a1(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??um(Q,".kimi-code")),r=um(n,"sessions"),s;try{s=await i1(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()&&o1(um(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 l1,fm,$i,mm=L(()=>{"use strict";re();xe();cm();l1=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;fm=t=>t.permissionMode==="plan"?"plan":"auto";$i={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...$i.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:fm(t)})},describeFailure:(t,e)=>{let n=fm(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=${fm(t)}) ok`},Di({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=_v(t.result);e!==null&&U({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:c1,sessionIdentity:{verifyLoadedSession:async t=>{await hv(t.requestedSessionId,t.env)},recheckSession:async t=>{await hv(t.requestedSessionId,t.env)}}}});var Pi,gv=L(()=>{"use strict";Pi={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...Pi.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}
1812
- `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function Ui(t){return d1[t]}var d1,u1,yv=L(()=>{"use strict";zw();ev();nv();dm();mm();gv();d1={miniplayer:rc,gemini:Li,copilot:Ci,opencode:os,kimi:$i,hermes:Pi};u1={miniplayer:{binary:rc.binary,args:rc.baseArgs},gemini:{binary:Li.binary,args:Li.baseArgs},copilot:{binary:Ci.binary,args:Ci.baseArgs},opencode:{binary:os.binary,args:os.baseArgs},kimi:{binary:$i.binary,args:$i.baseArgs},hermes:{binary:Pi.binary,args:Pi.baseArgs}}});import{spawn as Ev}from"node:child_process";import{existsSync as f1}from"node:fs";function Tv(t,e){let n=Ui(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 m1(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
+ `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function Ui(t){return d1[t]}var d1,u1,yv=L(()=>{"use strict";zT();ev();nv();dm();mm();gv();d1={miniplayer:rc,gemini:Li,copilot:Ci,opencode:os,kimi:$i,hermes:Pi};u1={miniplayer:{binary:rc.binary,args:rc.baseArgs},gemini:{binary:Li.binary,args:Li.baseArgs},copilot:{binary:Ci.binary,args:Ci.baseArgs},opencode:{binary:os.binary,args:os.baseArgs},kimi:{binary:$i.binary,args:$i.baseArgs},hermes:{binary:Pi.binary,args:Pi.baseArgs}}});import{spawn as Ev}from"node:child_process";import{existsSync as f1}from"node:fs";function wv(t,e){let n=Ui(t)?.modeVocabulary;if(!n)throw new we(`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 we(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new we(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function m1(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.
1813
1813
  One possible cause: the provider process failed before a complete ACP response was delivered.`;return e?`Original provider error:
1814
- ${we(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
1814
+ ${Te(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
1815
1815
 
1816
- ${n}`:n}function p1(t,e){return Ui(t)?.filterExpectedStderr?.(e)??e}function wv(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 vv(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&&je(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 Sv(t,e,n){let r=De(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($e(e.tool,o,i),e.cwd&&!f1(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 bv(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
1817
- `),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=jn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=jn(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=jn(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=jn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=jn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function Iv(t,e){let n=Ui(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{Tv(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:k=>{i.push(k)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=Sv(n,e,a))}catch(k){return s(k instanceof Error?k:new Error(String(k)))}let u=Ev(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=nc({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=_r(u,{provider:e.tool,onEvent:k=>{_=Date.now(),wv(k)&&(g=!0),e.onEvent?.(k)},onNotification:k=>{_=Date.now(),y.processMessage(k)}}),{sendRpc:w,sendNotification:S}=T,b="";u.stderr?.on("data",k=>{b+=k.toString()}),u.on("error",k=>{T.close(k),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:k.message,elapsed_ms:Date.now()-f}),s(new Te(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${k.message}`,{cause:k}))}),u.on("exit",(k,N)=>{if(p=!0,T.close(new ve(`ACP process ${N?`terminated by ${N}`:`exited with code ${String(k)}`}`,k,N)),m)return;let O=y.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:k}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-f,stopReason:O.stopReason,exitCode:k,sawActivity:O.sawActivity,...i.length>0?{warnings:i}:{}});else{let I=p1(e.tool,b),v=m1({tool:e.tool,exitCode:k,signal:N,stderr:I,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:k,signal:N,stderr_summary:v,elapsed_ms:Date.now()-f}),s(new ve(v,k,N,b))}}),(async()=>{try{let k=await bv({sendRpc:w,sendNotification:S,opts:e,outputProcessor:y});E=k.sessionId,e.onSessionId?.(E);let N=k.sessionResponse;await vv(n,a,{sessionId:E,response:N},w),y.beginTurn(),h=!0,je(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},I=>{I.error?y.cancelTurn():O=y.completeTurn(I)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,je(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),ln(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(k){de(u).catch(()=>{}),s(k instanceof Error?k:new Error(String(k)))}})()})}async function kv(t){let e=Ui(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&Tv(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:N=>{r.push(N)}}},{binary:i,spawnArgs:a,spawnEnv:l}=Sv(e,t,o),c=Ev(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",N=>{_+=N.toString()});let h,g,E=nc({tool:t.tool,onDelta:N=>h?.(N),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=_r(c,{provider:t.tool,onEvent:N=>{u.lastEventAtMs=Date.now(),wv(N)&&(u.backgroundJobLaunched=!0),g?.(N)},onNotification:N=>{u.lastEventAtMs=Date.now(),E.processMessage(N)}}),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(N=>{w.push(N)}),b=null;c.on("error",N=>{p=new Te(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${N.message}`,{cause:N}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:N.message,elapsed_ms:Date.now()-d}),y.close(N)}),c.on("exit",(N,O)=>{if(u.exited=!0,u.exitCode=N,u.signal=O,y.close(new ve(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(N)}`}`,N,O)),!u.telemetryFired){u.telemetryFired=!0;let I=E.finalize();I!==null&&e.onExitFinalization?.({...o,sessionId:I.sessionId,result:I.result,stopReason:I.stopReason,exitCode:N})}if(b!==null){let I=b;b=null,I(T())}for(let I of w.splice(0))I()}),c.on("close",(N,O)=>{if(!u.exited){u.exited=!0,u.exitCode=N,u.signal=O;for(let I of w.splice(0))I()}});try{let N=await bv({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=N.sessionId,t.onSessionId?.(m),await vv(e,o,{sessionId:N.sessionId,response:N.sessionResponse},y.sendRpc)}catch(N){let O=p??(N instanceof Error?N:new Error(String(N)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await S()):de(c).catch(()=>{}),O}let k=N=>new Promise(O=>{setTimeout(O,N).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(N,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 I=Date.now();try{E.beginTurn(),je(`acp: bundle prompt sent (${N.length} chars)`);let v,A=!1;if(await new Promise((x,C)=>{b=C;let M,P=()=>{A=!0,f=Promise.resolve().then(()=>M).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),C(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",P,{once:!0}),M=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:N}]},$=>{A||($.error?E.cancelTurn():v=E.completeTurn($),h=void 0,g=void 0)}),M.then($=>{q?.removeEventListener("abort",P),x($)},$=>{q?.removeEventListener("abort",P),C($ instanceof Error?$:new Error(String($)))})}),b=null,!v)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,je(`acp: bundle result received (${v.result.length} chars, stopReason=${v.stopReason})`);let R=s&&r.length>0?[...r]:void 0;return s=!1,{result:v.result,sessionId:v.sessionId,stopReason:v.stopReason,durationMs:Date.now()-I,sawActivity:v.sawActivity,...R!==void 0?{warnings:R}:{}}}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=>{ln(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 N=t.closeTimeoutMs;if(N===void 0&&t.serviceHosted)await S();else{let O=N??2e3;await Promise.race([S(),k(O)]),u.exited||await de(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),u.closing}}}var pm=L(()=>{"use strict";re();pr();ss();Ni();cn();re();Bt();It();xi();tm();yv();mm();dm();xi()});function Se(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Av(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=h1){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 Nv(){let t=new Map;return(e,n)=>{_1(e,Av(t,n))}}function _1(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
+ ${n}`:n}function p1(t,e){return Ui(t)?.filterExpectedStderr?.(e)??e}function Tv(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 vv(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&&je(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 Sv(t,e,n){let r=De(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($e(e.tool,o,i),e.cwd&&!f1(e.cwd))throw U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new we(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function bv(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
1817
+ `),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=jn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=jn(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=jn(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=jn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=jn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function Iv(t,e){let n=Ui(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{wv(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:k=>{i.push(k)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=Sv(n,e,a))}catch(k){return s(k instanceof Error?k:new Error(String(k)))}let u=Ev(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=nc({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let w=_r(u,{provider:e.tool,onEvent:k=>{_=Date.now(),Tv(k)&&(g=!0),e.onEvent?.(k)},onNotification:k=>{_=Date.now(),y.processMessage(k)}}),{sendRpc:T,sendNotification:S}=w,b="";u.stderr?.on("data",k=>{b+=k.toString()}),u.on("error",k=>{w.close(k),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:k.message,elapsed_ms:Date.now()-f}),s(new we(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${k.message}`,{cause:k}))}),u.on("exit",(k,N)=>{if(p=!0,w.close(new ve(`ACP process ${N?`terminated by ${N}`:`exited with code ${String(k)}`}`,k,N)),m)return;let O=y.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:k}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-f,stopReason:O.stopReason,exitCode:k,sawActivity:O.sawActivity,...i.length>0?{warnings:i}:{}});else{let I=p1(e.tool,b),v=m1({tool:e.tool,exitCode:k,signal:N,stderr:I,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:k,signal:N,stderr_summary:v,elapsed_ms:Date.now()-f}),s(new ve(v,k,N,b))}}),(async()=>{try{let k=await bv({sendRpc:T,sendNotification:S,opts:e,outputProcessor:y});E=k.sessionId,e.onSessionId?.(E);let N=k.sessionResponse;await vv(n,a,{sessionId:E,response:N},T),y.beginTurn(),h=!0,je(`acp: prompt sent (${t.length} chars)`);let O;if(await T("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},I=>{I.error?y.cancelTurn():O=y.completeTurn(I)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,je(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),ln(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(k){de(u).catch(()=>{}),s(k instanceof Error?k:new Error(String(k)))}})()})}async function kv(t){let e=Ui(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&wv(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:N=>{r.push(N)}}},{binary:i,spawnArgs:a,spawnEnv:l}=Sv(e,t,o),c=Ev(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",N=>{_+=N.toString()});let h,g,E=nc({tool:t.tool,onDelta:N=>h?.(N),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=_r(c,{provider:t.tool,onEvent:N=>{u.lastEventAtMs=Date.now(),Tv(N)&&(u.backgroundJobLaunched=!0),g?.(N)},onNotification:N=>{u.lastEventAtMs=Date.now(),E.processMessage(N)}}),w=()=>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,_),T=[],S=()=>u.exited?Promise.resolve():new Promise(N=>{T.push(N)}),b=null;c.on("error",N=>{p=new we(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${N.message}`,{cause:N}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:N.message,elapsed_ms:Date.now()-d}),y.close(N)}),c.on("exit",(N,O)=>{if(u.exited=!0,u.exitCode=N,u.signal=O,y.close(new ve(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(N)}`}`,N,O)),!u.telemetryFired){u.telemetryFired=!0;let I=E.finalize();I!==null&&e.onExitFinalization?.({...o,sessionId:I.sessionId,result:I.result,stopReason:I.stopReason,exitCode:N})}if(b!==null){let I=b;b=null,I(w())}for(let I of T.splice(0))I()}),c.on("close",(N,O)=>{if(!u.exited){u.exited=!0,u.exitCode=N,u.signal=O;for(let I of T.splice(0))I()}});try{let N=await bv({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=N.sessionId,t.onSessionId?.(m),await vv(e,o,{sessionId:N.sessionId,response:N.sessionResponse},y.sendRpc)}catch(N){let O=p??(N instanceof Error?N:new Error(String(N)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await S()):de(c).catch(()=>{}),O}let k=N=>new Promise(O=>{setTimeout(O,N).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(N,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw w();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 w();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,h=O.onDelta,g=O.onEvent;let I=Date.now();try{E.beginTurn(),je(`acp: bundle prompt sent (${N.length} chars)`);let v,A=!1;if(await new Promise((x,C)=>{b=C;let M,P=()=>{A=!0,f=Promise.resolve().then(()=>M).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),C(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",P,{once:!0}),M=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:N}]},$=>{A||($.error?E.cancelTurn():v=E.completeTurn($),h=void 0,g=void 0)}),M.then($=>{q?.removeEventListener("abort",P),x($)},$=>{q?.removeEventListener("abort",P),C($ instanceof Error?$:new Error(String($)))})}),b=null,!v)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,je(`acp: bundle result received (${v.result.length} chars, stopReason=${v.stopReason})`);let R=s&&r.length>0?[...r]:void 0;return s=!1,{result:v.result,sessionId:v.sessionId,stopReason:v.stopReason,durationMs:Date.now()-I,sawActivity:v.sawActivity,...R!==void 0?{warnings:R}:{}}}catch(v){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?w():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=>{ln(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 N=t.closeTimeoutMs;if(N===void 0&&t.serviceHosted)await S();else{let O=N??2e3;await Promise.race([S(),k(O)]),u.exited||await de(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),u.closing}}}var pm=L(()=>{"use strict";re();pr();ss();Ni();cn();re();Bt();It();xi();tm();yv();mm();dm();xi()});function Se(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Av(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=h1){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 Nv(){let t=new Map;return(e,n)=>{_1(e,Av(t,n))}}function _1(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(`
1818
1818
  `).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(`
1819
- `).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 ic(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?Nv():void 0;if(e.bundleSession!==void 0)return Fn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await $w(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 ac(t){let e=t.binary==="qwen"?"qwen":"claude",n=await Pw({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=Nv(),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 Rv(){let t=new Map;return(e,n)=>{g1(e,Av(t,n))}}function g1(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 xv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function Xt(t,e){let n=e.acpTool||e.binary,r=e.onProgress?Rv():void 0;if(e.bundleSession!==void 0)return Fn(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";qe({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await Iv(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,...xv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function dn(t){let e=t.acpTool||t.binary,n=await kv({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=Rv(),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,...xv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Lv(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
+ `).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 ic(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?Nv():void 0;if(e.bundleSession!==void 0)return Fn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await $T(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 ac(t){let e=t.binary==="qwen"?"qwen":"claude",n=await PT({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=Nv(),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 Rv(){let t=new Map;return(e,n)=>{g1(e,Av(t,n))}}function g1(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 xv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function Xt(t,e){let n=e.acpTool||e.binary,r=e.onProgress?Rv():void 0;if(e.bundleSession!==void 0)return Fn(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";qe({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await Iv(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,...xv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function dn(t){let e=t.acpTool||t.binary,n=await kv({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=Rv(),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,...xv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Lv(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(`
1820
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==="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(`
1821
- `).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 Cv(t,e){if(e.bundleSession!==void 0)return Fn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await qw(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=>Lv(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 Ov(t){let e=await Gw({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&&Lv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var h1,Wn=L(()=>{"use strict";zf();zf();Vw();pm();Qs();re();h1=256});function hm(t={}){let e=Ra(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ce{constructor(){super({provider:new Na({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)=>Xt(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return dn({...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 Xt(s?.prompt??ee,{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 _m=L(()=>{"use strict";Qe();La();Wn();We()});import{readdir as lc,stat as Dv,unlink as y1}from"node:fs/promises";import{join as so,basename as Mv}from"node:path";function E1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function T1(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 w1(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 v1(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 S1(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 $v(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=v1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?w1(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 _=S1(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 b1(t){let e=I1(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 I1(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,Pv=L(()=>{"use strict";xe();cc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||so(Q,".claude"),this.projectsDir=so(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await lc(this.projectsDir)}catch{return e}for(let r of n){let s=so(this.projectsDir,r);if(!(await Dv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await lc(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Mv(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=so(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await wt(e,50),s=await Ae(e),o="",i,a,l,c,d,u;for(let m of r)if(!E1(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 $v(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:T1(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(`
1822
- `):"";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;b1(s);let h=await $v(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 y1(n),!0):!1}async resolveSessionFile(e){let n;try{n=await lc(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=so(this.projectsDir,i);if(!(await Dv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await lc(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Mv(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:so(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 wt(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Uv}from"node:path";function ym(t){return new gm(t)}var gm,Em=L(()=>{"use strict";Pv();Qe();xe();Wn();We();gm=class extends ce{claudeDir;constructor(e){super({provider:new cc(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",ee,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:ic}),this.claudeDir=e?.claudeDir??Uv(Q,".claude")}openSession(e){return ac({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Uv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as k1,stat as Fv,unlink as A1}from"node:fs/promises";import{join as Fi,basename as N1}from"node:path";function Tm(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&R1.has(n)}function x1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function ji(t,e,n){let r=x1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function jv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function L1(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 oo(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 oo(n)}).filter(n=>n.length>0).join(`
1823
- `);try{return JSON.stringify(t)}catch{return String(t)}}function C1(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 O1(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 Wv(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];Tm(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=L1(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 R1,dc,Hv=L(()=>{"use strict";xe();R1=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"]);dc=class{name="codex";codexDirs;constructor(e={}){let n=[Fi(Q,".codex"),Fi(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:Fi(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=Fi(n,"sessions");try{await Fv(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 k1(e)}catch{return n}for(let s of r){let o=Fi(e,s),i=await Fv(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=N1(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 wt(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];Tm(_,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 Wv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:jv(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(k=>!k.mirrored&&k.source!==S&&k.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=jv(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 k=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(k)){let N=b.content.filter((O,I)=>k[I]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1824
- `);k.includes("user.text")&&N&&(!b.id||!h.has(b.id))&&(E(N,"metadata"),b.id&&h.add(b.id))}for(let N=0;N<b.content.length;N++){let O=b.content[N];if(!Tm(k,N)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let I=O.text.trim();c||(c=G(I,80)),d=G(I,80),ji(s,p,{role:"user",timestamp:S,content:_e(I)})}}continue}if(b.role==="assistant"&&b.content){for(let k of b.content)k.type==="output_text"&&typeof k.text=="string"&&k.text&&ji(s,p,{role:"assistant",timestamp:S,content:_e(k.text),model:a});continue}if(b.role!=="user"&&b.role!=="assistant"&&b.content){for(let k of b.content)(k.type==="input_text"||k.type==="output_text")&&typeof k.text=="string"&&k.text&&ji(s,p,{role:"system",timestamp:S,content:_e(k.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(oo(b.arguments)):void 0,toolInputData:C1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(oo(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(oo(b.input)):void 0,toolInputData:O1(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(oo(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let k=b.summary.map(N=>oo(N.text)).join(`
1825
- `);k.trim()&&ji(s,p,{role:"thinking",timestamp:S,content:_e(k)});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&&ji(s,p,{role:"thinking",timestamp:S,content:_e(b)})}}if(!o)return null;y();let T=await Wv(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 A1(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 wt(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 D1}from"node:child_process";import{realpathSync as Bv,readdirSync as M1}from"node:fs";import{homedir as $1}from"node:os";import{join as uc,resolve as Xv,sep as P1}from"node:path";function Sm(t){return new vm(t)}var wm,vm,bm=L(()=>{"use strict";Hv();Qe();Wn();We();wm="gpt-5.6-sol",vm=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 dc(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:`${ee}
1826
- `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:Cv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(N,O)=>new Promise(I=>{let v=Math.ceil(n-performance.now());if(v<=0){I(void 0);return}let A,R=()=>{try{A?.kill("SIGKILL")}catch{}},x=()=>{R()},C=()=>{R()},M=()=>{R()};process.once("exit",x),process.once("SIGINT",C),process.once("SIGTERM",M);let P=()=>{process.removeListener("exit",x),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",M)};A=D1(N,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:v,killSignal:"SIGKILL",maxBuffer:65536},(q,$)=>{P(),I(q?void 0:$)})}),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 N=s.match(/\{[\s\S]*\}/);if(N)try{o=JSON.parse(N[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=N=>typeof N=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(N)&&N.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=Xv(e.cwd,e.env.CODEX_HOME||uc(e.env.HOME||$1(),".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=N=>N.replace(/\+.*$/,""),b=S(d),k=process.arch==="arm64"?"aarch64":"x86_64";for(let N of["app-server-daemon","standalone"]){let O=uc(g,"packages",N,"releases");try{y.push(Bv(O)+P1);let I=M1(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+"-"));I.sort((v,A)=>{let R=v.includes(k)?0:1,x=A.includes(k)?0:1;return R!==x?R-x:v.localeCompare(A)});for(let v of I)E.push(uc(O,v,"bin",T)),E.push(uc(O,v,T))}catch{}}for(let N of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Bv(Xv(e.cwd,N)),!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 Ov({...e,model:e.model??wm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??wm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:wm}}}});import{createHash as U1}from"node:crypto";import{readdir as Wi,readFile as qv,stat as fc,unlink as F1}from"node:fs/promises";import{join as kt,basename as j1,dirname as W1}from"node:path";import{cwd as H1}from"node:process";function Im(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Gv(t){return t==="user"}function km(t){return t==="gemini"||t==="assistant"}function is(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function B1(t){return`${t.sessionId}\0${t.cwd}`}function X1(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 mc(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function Vv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!km(a.type)||!a.tokens)continue;let l=mc(a.tokens.input),c=mc(a.tokens.cached),d=Math.max(l-c,0),u=mc(a.tokens.output),f=mc(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 q1(t){return U1("sha256").update(t).digest("hex")}function Hi(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=W1(n);if(r===n)break;n=r}}var pc,Jv=L(()=>{"use strict";xe();Wa();re();pc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||kt(Q,".gemini");this.geminiProjectsFile=kt(n,"projects.json"),this.geminiTmpDir=kt(n,"tmp");let r=e.claudeDir||kt(Q,".claude");this.claudeProjectsDir=kt(r,"projects");let s=[kt(Q,".codex"),kt(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=>kt(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=B1(s),i=n.get(o);n.set(o,i?X1(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=is(g.timestamp),y=g.type,T=_e(Im(g.content));if(Gv(y)){let S=Im(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(km(y)){g.model&&(m=g.model);for(let S of g.thoughts||[]){let b=[S.subject,S.description].filter(Boolean).join(`
1827
- `).trim();b&&o.push({role:"thinking",timestamp:is(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=is(r.startTime,s.createdAt),_=is(r.lastUpdated,s.modifiedAt),h=Vv(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(Gv(m.type)){u++;let p=Im(m.content).trim();p&&(l||(l=G(_e(p),80)),c=G(_e(p),80))}else km(m.type)&&(u++,m.model&&(d=m.model));let f=Vv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:is(n.startTime,r.createdAt),modifiedAt:is(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 qv(e,"utf-8");if(Yo(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 Hr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=j1(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 Wi(this.geminiTmpDir)}catch{return e}for(let r of n){let s=kt(this.geminiTmpDir,r,"chats");if(!(await fc(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Wi(s)}catch{continue}for(let a of i)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(kt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await F1(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:is(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;Hi(e,H1());for(let r of this.extraWorkspacePaths)Hi(e,r);for(let r of await this.collectGeminiProjectPaths())Hi(e,r);for(let r of await this.collectCodexCwds())Hi(e,r);for(let r of await this.collectClaudeCwds())Hi(e,r);let n=new Map;for(let r of e)n.set(q1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await qv(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 wt(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Wi(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=kt(this.claudeProjectsDir,r);if(!(await fc(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Wi(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=kt(s,a),d=(await wt(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await fc(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Wi(e)}catch{return n}for(let o of s){let i=kt(e,o),a=await fc(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 G1,writeFileSync as V1,mkdirSync as J1}from"node:fs";import{join as K1,dirname as Y1}from"node:path";import{randomUUID as z1}from"node:crypto";function Nm(t){return new Am(t)}var Am,Rm=L(()=>{"use strict";Gs();Jv();Qe();We();Wa();Am=class extends ce{constructor(e){super({provider:new pc(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",ee,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(cr))})}seed(e,n){return Promise.resolve({success:!1,error:cr})}sendTurn(e,n){return Promise.reject(new Error(cr))}openSession(e){return Promise.reject(new Error(cr))}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(`
1821
+ `).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 Cv(t,e){if(e.bundleSession!==void 0)return Fn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await qT(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=>Lv(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 Ov(t){let e=await GT({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&&Lv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var h1,Wn=L(()=>{"use strict";zf();zf();VT();pm();Qs();re();h1=256});function hm(t={}){let e=Ra(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ce{constructor(){super({provider:new Na({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)=>Xt(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return dn({...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 Xt(s?.prompt??ee,{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 _m=L(()=>{"use strict";Qe();La();Wn();We()});import{readdir as lc,stat as Dv,unlink as y1}from"node:fs/promises";import{join as so,basename as Mv}from"node:path";function E1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function w1(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 T1(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 v1(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 S1(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 $v(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=v1(h),E=p.message.id?.trim();if(E){let w=c.get(E);w?T1(w,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 _=S1(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 b1(t){let e=I1(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 I1(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,Pv=L(()=>{"use strict";xe();cc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||so(Q,".claude"),this.projectsDir=so(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await lc(this.projectsDir)}catch{return e}for(let r of n){let s=so(this.projectsDir,r);if(!(await Dv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await lc(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Mv(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=so(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await Tt(e,50),s=await Ae(e),o="",i,a,l,c,d,u;for(let m of r)if(!E1(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 $v(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:w1(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(w=>w.type==="tool_result"))){let w=typeof y=="string"?y:Array.isArray(y)?y.filter(T=>T.type==="text"&&typeof T.text=="string").map(T=>T.text).join(`
1822
+ `):"";w&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(w.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(w.trim())&&!w.trimStart().startsWith("lmctl seed initial connection only.")&&_.push(w)}if(typeof y=="string"){let w=y.trim();if(w.includes("<command-name>")||w.includes("<local-command-")||/^<task-notification>\s*</u.test(w)||w.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(w))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 w of y)if(w.type==="tool_result"){let T=typeof w.content=="string"?_e(w.content):JSON.stringify(w.content);s.push({role:"tool_result",timestamp:E,content:T,toolCallId:w.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 w of y)w.type==="text"&&w.text?s.push({role:"assistant",timestamp:E,content:_e(w.text),model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):w.type==="tool_use"?s.push({role:"tool_use",timestamp:E,content:w.name||"unknown tool",toolName:w.name,toolInput:JSON.stringify(w.input,null,2),toolInputData:w.input,toolCallId:w.id,model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):w.type==="thinking"&&w.thinking&&s.push({role:"thinking",timestamp:E,content:w.thinking})}}if(!o)return null;b1(s);let h=await $v(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 y1(n),!0):!1}async resolveSessionFile(e){let n;try{n=await lc(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=so(this.projectsDir,i);if(!(await Dv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await lc(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Mv(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:so(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 Tt(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Uv}from"node:path";function ym(t){return new gm(t)}var gm,Em=L(()=>{"use strict";Pv();Qe();xe();Wn();We();gm=class extends ce{claudeDir;constructor(e){super({provider:new cc(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",ee,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:ic}),this.claudeDir=e?.claudeDir??Uv(Q,".claude")}openSession(e){return ac({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Uv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as k1,stat as Fv,unlink as A1}from"node:fs/promises";import{join as Fi,basename as N1}from"node:path";function wm(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&R1.has(n)}function x1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function ji(t,e,n){let r=x1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function jv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function L1(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 oo(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 oo(n)}).filter(n=>n.length>0).join(`
1823
+ `);try{return JSON.stringify(t)}catch{return String(t)}}function C1(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 O1(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 Wv(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];wm(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=L1(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 R1,dc,Hv=L(()=>{"use strict";xe();R1=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"]);dc=class{name="codex";codexDirs;constructor(e={}){let n=[Fi(Q,".codex"),Fi(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:Fi(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=Fi(n,"sessions");try{await Fv(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 k1(e)}catch{return n}for(let s of r){let o=Fi(e,s),i=await Fv(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=N1(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 Tt(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];wm(_,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 Wv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:jv(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=(T,S)=>{let b=g.find(k=>!k.mirrored&&k.source!==S&&k.text===T);b?b.mirrored=!0:g.push({text:T,source:S,mirrored:!1})},y=()=>{_.push(...g.map(T=>T.text)),g=[]};for await(let T of Ee(n)){let S=T.timestamp?new Date(T.timestamp):new Date;if(T.type==="session_meta"&&T.payload){T.payload.id&&(u=T.payload.id),T.payload.cwd&&(o=T.payload.cwd),T.payload.cli_version&&(i=T.payload.cli_version),T.payload.timestamp&&(l=new Date(T.payload.timestamp)),f=jv(T.payload.originator,T.payload.source);continue}if(T.type==="turn_context"&&T.payload){T.payload.model&&(a=T.payload.model),!o&&T.payload.cwd&&(o=T.payload.cwd);continue}if(T.type==="response_item"&&T.payload){let b=T.payload;if(b.type==="message"){if(b.role==="user"&&b.content){let k=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(k)){let N=b.content.filter((O,I)=>k[I]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1824
+ `);k.includes("user.text")&&N&&(!b.id||!h.has(b.id))&&(E(N,"metadata"),b.id&&h.add(b.id))}for(let N=0;N<b.content.length;N++){let O=b.content[N];if(!wm(k,N)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let I=O.text.trim();c||(c=G(I,80)),d=G(I,80),ji(s,p,{role:"user",timestamp:S,content:_e(I)})}}continue}if(b.role==="assistant"&&b.content){for(let k of b.content)k.type==="output_text"&&typeof k.text=="string"&&k.text&&ji(s,p,{role:"assistant",timestamp:S,content:_e(k.text),model:a});continue}if(b.role!=="user"&&b.role!=="assistant"&&b.content){for(let k of b.content)(k.type==="input_text"||k.type==="output_text")&&typeof k.text=="string"&&k.text&&ji(s,p,{role:"system",timestamp:S,content:_e(k.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(oo(b.arguments)):void 0,toolInputData:C1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(oo(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(oo(b.input)):void 0,toolInputData:O1(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(oo(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let k=b.summary.map(N=>oo(N.text)).join(`
1825
+ `);k.trim()&&ji(s,p,{role:"thinking",timestamp:S,content:_e(k)});continue}}if(T.type==="event_msg"&&T.payload&&(T.payload.type==="task_started"?(y(),m="in_progress"):T.payload.type==="task_complete"?m="complete":T.payload.type==="turn_aborted"&&(m="aborted"),T.payload.type==="user_message"&&typeof T.payload.message=="string"&&E(T.payload.message,"event"),T.payload.type==="agent_reasoning")){let b=T.payload.message||T.payload.text;b&&ji(s,p,{role:"thinking",timestamp:S,content:_e(b)})}}if(!o)return null;y();let w=await Wv(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:w.messageCount,filePath:n,totalInputTokens:w.totalInputTokens||void 0,totalCachedInputTokens:w.totalCachedInputTokens||void 0,totalOutputTokens:w.totalOutputTokens||void 0,totalReasoningOutputTokens:w.totalReasoningOutputTokens||void 0,lastInputTokens:w.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:w.lastTokenUsage,modelContextWindow:w.modelContextWindow,messages:s,userPrompts:_}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await A1(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 Tt(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 D1}from"node:child_process";import{realpathSync as Bv,readdirSync as M1}from"node:fs";import{homedir as $1}from"node:os";import{join as uc,resolve as Xv,sep as P1}from"node:path";function Sm(t){return new vm(t)}var Tm,vm,bm=L(()=>{"use strict";Hv();Qe();Wn();We();Tm="gpt-5.6-sol",vm=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 dc(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:`${ee}
1826
+ `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:Cv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(N,O)=>new Promise(I=>{let v=Math.ceil(n-performance.now());if(v<=0){I(void 0);return}let A,R=()=>{try{A?.kill("SIGKILL")}catch{}},x=()=>{R()},C=()=>{R()},M=()=>{R()};process.once("exit",x),process.once("SIGINT",C),process.once("SIGTERM",M);let P=()=>{process.removeListener("exit",x),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",M)};A=D1(N,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:v,killSignal:"SIGKILL",maxBuffer:65536},(q,$)=>{P(),I(q?void 0:$)})}),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 N=s.match(/\{[\s\S]*\}/);if(N)try{o=JSON.parse(N[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=N=>typeof N=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(N)&&N.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=Xv(e.cwd,e.env.CODEX_HOME||uc(e.env.HOME||$1(),".codex")),E=[],y=[],w=process.platform==="win32"?"codex.exe":"codex",T=o.managedCodexPath??o.managed_codex_path;typeof T=="string"&&T.trim().length>0&&E.push(T.trim());let S=N=>N.replace(/\+.*$/,""),b=S(d),k=process.arch==="arm64"?"aarch64":"x86_64";for(let N of["app-server-daemon","standalone"]){let O=uc(g,"packages",N,"releases");try{y.push(Bv(O)+P1);let I=M1(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+"-"));I.sort((v,A)=>{let R=v.includes(k)?0:1,x=A.includes(k)?0:1;return R!==x?R-x:v.localeCompare(A)});for(let v of I)E.push(uc(O,v,"bin",w)),E.push(uc(O,v,w))}catch{}}for(let N of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Bv(Xv(e.cwd,N)),!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 Ov({...e,model:e.model??Tm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??Tm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:Tm}}}});import{createHash as U1}from"node:crypto";import{readdir as Wi,readFile as qv,stat as fc,unlink as F1}from"node:fs/promises";import{join as kt,basename as j1,dirname as W1}from"node:path";import{cwd as H1}from"node:process";function Im(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Gv(t){return t==="user"}function km(t){return t==="gemini"||t==="assistant"}function is(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function B1(t){return`${t.sessionId}\0${t.cwd}`}function X1(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 mc(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function Vv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!km(a.type)||!a.tokens)continue;let l=mc(a.tokens.input),c=mc(a.tokens.cached),d=Math.max(l-c,0),u=mc(a.tokens.output),f=mc(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 q1(t){return U1("sha256").update(t).digest("hex")}function Hi(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=W1(n);if(r===n)break;n=r}}var pc,Jv=L(()=>{"use strict";xe();Wa();re();pc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||kt(Q,".gemini");this.geminiProjectsFile=kt(n,"projects.json"),this.geminiTmpDir=kt(n,"tmp");let r=e.claudeDir||kt(Q,".claude");this.claudeProjectsDir=kt(r,"projects");let s=[kt(Q,".codex"),kt(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=>kt(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=B1(s),i=n.get(o);n.set(o,i?X1(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=is(g.timestamp),y=g.type,w=_e(Im(g.content));if(Gv(y)){let S=Im(g.content);S&&i.push(S);let b=w.trim();b&&(u||(u=G(b,80)),f=G(b,80)),o.push({role:"user",timestamp:E,content:b||w});continue}if(km(y)){g.model&&(m=g.model);for(let S of g.thoughts||[]){let b=[S.subject,S.description].filter(Boolean).join(`
1827
+ `).trim();b&&o.push({role:"thinking",timestamp:is(S.timestamp,E),content:_e(b)})}o.push({role:"assistant",timestamp:E,content:w,model:g.model});continue}let T=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${T}${w}`.trim()})}let p=is(r.startTime,s.createdAt),_=is(r.lastUpdated,s.modifiedAt),h=Vv(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(Gv(m.type)){u++;let p=Im(m.content).trim();p&&(l||(l=G(_e(p),80)),c=G(_e(p),80))}else km(m.type)&&(u++,m.model&&(d=m.model));let f=Vv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:is(n.startTime,r.createdAt),modifiedAt:is(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 qv(e,"utf-8");if(Yo(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 Hr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=j1(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 Wi(this.geminiTmpDir)}catch{return e}for(let r of n){let s=kt(this.geminiTmpDir,r,"chats");if(!(await fc(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Wi(s)}catch{continue}for(let a of i)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(kt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await F1(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:is(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;Hi(e,H1());for(let r of this.extraWorkspacePaths)Hi(e,r);for(let r of await this.collectGeminiProjectPaths())Hi(e,r);for(let r of await this.collectCodexCwds())Hi(e,r);for(let r of await this.collectClaudeCwds())Hi(e,r);let n=new Map;for(let r of e)n.set(q1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await qv(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 Tt(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Wi(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=kt(this.claudeProjectsDir,r);if(!(await fc(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Wi(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=kt(s,a),d=(await Tt(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await fc(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Wi(e)}catch{return n}for(let o of s){let i=kt(e,o),a=await fc(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 G1,writeFileSync as V1,mkdirSync as J1}from"node:fs";import{join as K1,dirname as Y1}from"node:path";import{randomUUID as z1}from"node:crypto";function Nm(t){return new Am(t)}var Am,Rm=L(()=>{"use strict";Gs();Jv();Qe();We();Wa();Am=class extends ce{constructor(e){super({provider:new pc(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",ee,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(cr))})}seed(e,n){return Promise.resolve({success:!1,error:cr})}sendTurn(e,n){return Promise.reject(new Error(cr))}openSession(e){return Promise.reject(new Error(cr))}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(`
1828
1828
  `)}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:Ul,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=G1(r,"utf-8"),o=Yo(s),i=Hr(s),a=z1();i.sessionId=a,i.kind="main";let l=Y1(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=K1(l,u);return J1(l,{recursive:!0}),V1(f,py(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 Kv,readFile as Q1,rm as Z1,stat as io}from"node:fs/promises";import{basename as eU,join as qt}from"node:path";function tU(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 xm(){return{shutdownTotals:null,assistantOutputSum:0}}function zv(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=tU(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function Yv(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 nU(t){let e={};for(let n of t.split(`
1829
1829
  `)){let r=n.match(/^(\w+):\s*(.*)$/);r&&(e[r[1]]=r[2].trim())}return{id:e.id,cwd:e.cwd,summary_count:e.summary_count?parseInt(e.summary_count,10):void 0,created_at:e.created_at,updated_at:e.updated_at,summary:e.summary}}function as(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function rU(t){let e=0,n=xm(),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++;zv(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function sU(t){let e=oU(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(`
1830
- `).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 oU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var hc,Qv=L(()=>{"use strict";xe();hc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||qt(Q,".copilot");this.sessionStateDir=qt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Kv(this.sessionStateDir)}catch{return e}for(let r of n){let s=qt(this.sessionStateDir,r);if((await io(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=qt(n,"events.jsonl"),o=await io(s).catch(()=>null),i=o?s:qt(n,"workspace.yaml"),a=await Ae(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||eU(n)||e,E=xm();if(o)for await(let y of Ee(s)){let T=as(y.timestamp)||a.modifiedAt;if(zv(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=as(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 sU(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??as(r?.created_at)??a.createdAt,modifiedAt:as(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,...Yv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=qt(e,"events.jsonl"),o=await io(s).catch(()=>null),i=o?s:qt(e,"workspace.yaml"),a=await Ae(o?s:e),l=o?await wt(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=as(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 rU(s):{messageCount:0,tokens:xm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??as(r?.created_at)??a.createdAt,modifiedAt:as(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...Yv(h.tokens)}}async readWorkspaceYaml(e){let n=qt(e,"workspace.yaml");try{let r=await Q1(n,"utf-8");return nU(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await Z1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Kv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=qt(this.sessionStateDir,e);if((await io(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=qt(this.sessionStateDir,s);(await io(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=qt(this.sessionStateDir,s);if(!(await io(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 Cm(t){return new Lm(t)}var Lm,Om=L(()=>{"use strict";Qv();Qe();Wn();re();We();Lm=class extends ce{copilotDir;constructor(e){super({provider:new hc(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",ee,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>Xt(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return dn({...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 qe({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function Mm(t){return new Dm(t)}var Dm,$m=L(()=>{"use strict";oc();Qe();Wn();We();Dm=class extends ce{constructor(e){super({provider:new ro(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",ee],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>Xt(n,{...r,acpTool:"opencode"})})}openSession(e){return dn({...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??ee),n}}});import{appendFile as iU,mkdir as aU,readFile as Zv,readdir as eS,rm as lU,stat as tS}from"node:fs/promises";import{basename as cU,dirname as dU,isAbsolute as nS,join as ls,relative as uU,resolve as Pm}from"node:path";function Um(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function hU(t){return typeof t=="number"?new Date(t):Um(t)??new Date(0)}function rS(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
+ `).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 oU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var hc,Qv=L(()=>{"use strict";xe();hc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||qt(Q,".copilot");this.sessionStateDir=qt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Kv(this.sessionStateDir)}catch{return e}for(let r of n){let s=qt(this.sessionStateDir,r);if((await io(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=qt(n,"events.jsonl"),o=await io(s).catch(()=>null),i=o?s:qt(n,"workspace.yaml"),a=await Ae(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||eU(n)||e,E=xm();if(o)for await(let y of Ee(s)){let w=as(y.timestamp)||a.modifiedAt;if(zv(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=as(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 T=y.data.content||"";T&&c.push(T);let S=T.trim();S&&(p||(p=G(S,80)),_=G(S,80)),l.push({role:"user",timestamp:w,content:_e(S||T)});continue}if(y.type==="assistant.message"&&y.data){let T=(y.data.content||"").trim();if(T&&l.push({role:"assistant",timestamp:w,content:_e(T),model:u}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:w,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 T=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:w,content:_e(T),toolDetailedContent:S?_e(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:w,content:_e(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let T=y.data?.message||"";T.trim()&&l.push({role:"system",timestamp:w,content:_e(T)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return sU(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??as(r?.created_at)??a.createdAt,modifiedAt:as(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,...Yv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=qt(e,"events.jsonl"),o=await io(s).catch(()=>null),i=o?s:qt(e,"workspace.yaml"),a=await Ae(o?s:e),l=o?await Tt(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=as(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 rU(s):{messageCount:0,tokens:xm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??as(r?.created_at)??a.createdAt,modifiedAt:as(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...Yv(h.tokens)}}async readWorkspaceYaml(e){let n=qt(e,"workspace.yaml");try{let r=await Q1(n,"utf-8");return nU(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await Z1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Kv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=qt(this.sessionStateDir,e);if((await io(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=qt(this.sessionStateDir,s);(await io(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=qt(this.sessionStateDir,s);if(!(await io(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 Cm(t){return new Lm(t)}var Lm,Om=L(()=>{"use strict";Qv();Qe();Wn();re();We();Lm=class extends ce{copilotDir;constructor(e){super({provider:new hc(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",ee,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>Xt(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return dn({...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 qe({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function Mm(t){return new Dm(t)}var Dm,$m=L(()=>{"use strict";oc();Qe();Wn();We();Dm=class extends ce{constructor(e){super({provider:new ro(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",ee],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>Xt(n,{...r,acpTool:"opencode"})})}openSession(e){return dn({...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??ee),n}}});import{appendFile as iU,mkdir as aU,readFile as Zv,readdir as eS,rm as lU,stat as tS}from"node:fs/promises";import{basename as cU,dirname as dU,isAbsolute as nS,join as ls,relative as uU,resolve as Pm}from"node:path";function Um(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function hU(t){return typeof t=="number"?new Date(t):Um(t)??new Date(0)}function rS(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(`
1831
1831
  `).trim():""}function sS(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function _U(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:sS(t)??""}function gU(t){let e=yU(t),n=new Set;for(let r of t){if(r.role!=="tool_use"||r.toolName!=="Bash"||r.toolInputData?.run_in_background!==!0||r.toolCallId===void 0)continue;let s=e.get(r.toolCallId);if(s===void 0)continue;let 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 yU(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var fU,mU,pU,_c,oS=L(()=>{"use strict";xe();fU="1.4",mU="1.5",pU=new Set([fU,mU]),_c=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Pm(e?.kimiHome??process.env.KIMI_CODE_HOME??ls(Q,".kimi-code")),this.sessionsDir=ls(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 lU(n.sessionDir,{recursive:!0,force:!0}),await aU(dU(this.indexPath()),{recursive:!0,mode:448}),await iU(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1832
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return ls(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 eS(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=ls(this.sessionsDir,s.name),i;try{i=await eS(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=ls(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await Zv(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:Pm(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:ls(n,"state.json"),wirePath:ls(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!nS(e)||cU(e)!==n)return!1;let r=uU(this.sessionsDir,Pm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!nS(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 Zv(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 tS(e.wirePath)}catch{return null}let s=await tS(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Um(n.createdAt)??s.birthtime,a=Um(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=hU(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!pU.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=rS(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=rS(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:sS(y.args),toolInputData:Rt(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:_U(y.result),toolCallId:y.toolCallId,model:i})}return gU(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 jm(t){return new Fm(t)}var Fm,Wm=L(()=>{"use strict";oS();Qe();Wn();We();Fm=class extends ce{kimiHome;constructor(e){super({provider:new _c(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",ee,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Xt(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return dn({...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??ee,"--output-format","stream-json"),n}}});import{spawn as EU}from"node:child_process";import{mkdirSync as TU}from"node:fs";function Bm(t){return new Hm(t)}async function wU(t,e){let n=Date.now(),r=iS({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});$e("lmplayer",r,e.permissionMode??"yolo");let s=await lS(e.binary,r,{cwd:e.cwd,env:De(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(aS(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function iS(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(...gr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function aS(t){let n=[es(t.stderr).trim(),t.error].filter(Boolean).join(`
1833
- `);return n?we(n,{provider:"lmplayer"}):`exit code ${t.code}`}function lS(t,e,n){return new Promise((r,s)=>{let o;try{o=EU(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(!ao(g))return;let E=gc(g,!1);c===void 0&&E!==void 0&&(c=E),d=gc(g,!0)??d;let y=vU(g);y!==void 0&&(u=y);let T=cS(g);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",_=>{let h=_.toString("utf8");i+=h,l+=h;let g=l.indexOf(`
1832
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return ls(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 eS(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=ls(this.sessionsDir,s.name),i;try{i=await eS(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=ls(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await Zv(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:Pm(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:ls(n,"state.json"),wirePath:ls(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!nS(e)||cU(e)!==n)return!1;let r=uU(this.sessionsDir,Pm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!nS(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 Zv(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 tS(e.wirePath)}catch{return null}let s=await tS(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Um(n.createdAt)??s.birthtime,a=Um(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=hU(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!pU.has(g.protocol_version))){let w=`Kimi transcript wire protocol version ${JSON.stringify(g.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:E,content:w}],userPrompts:[],messageCount:1,firstUserMessage:w,lastUserMessage:w}}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 w=g.usage?.inputOther??0,T=g.usage?.inputCacheRead??0,S=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=w,d+=T,u+=S,f+=b,g.usageScope==="turn"&&(_=w+T+S,h={inputTokens:w,cachedInputTokens:T,cacheWriteInputTokens:S,outputTokens:b,totalTokens:_+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let w=rS(g.input);w&&((!g.promptId||!s.has(g.promptId))&&(r.push(w),g.promptId&&s.add(g.promptId)),a??=G(w,80),l=G(w,80),n.push({role:"user",timestamp:E,content:w}),p++);continue}if(g.type==="turn.steer"){let w=rS(g.input);w&&(n.push({role:"system",timestamp:E,content:w}),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:sS(y.args),toolInputData:Rt(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:_U(y.result),toolCallId:y.toolCallId,model:i})}return gU(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 jm(t){return new Fm(t)}var Fm,Wm=L(()=>{"use strict";oS();Qe();Wn();We();Fm=class extends ce{kimiHome;constructor(e){super({provider:new _c(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",ee,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Xt(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return dn({...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??ee,"--output-format","stream-json"),n}}});import{spawn as EU}from"node:child_process";import{mkdirSync as wU}from"node:fs";function Bm(t){return new Hm(t)}async function TU(t,e){let n=Date.now(),r=iS({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});$e("lmplayer",r,e.permissionMode??"yolo");let s=await lS(e.binary,r,{cwd:e.cwd,env:De(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(aS(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function iS(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(...gr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function aS(t){let n=[es(t.stderr).trim(),t.error].filter(Boolean).join(`
1833
+ `);return n?Te(n,{provider:"lmplayer"}):`exit code ${t.code}`}function lS(t,e,n){return new Promise((r,s)=>{let o;try{o=EU(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(!ao(g))return;let E=gc(g,!1);c===void 0&&E!==void 0&&(c=E),d=gc(g,!0)??d;let y=vU(g);y!==void 0&&(u=y);let w=cS(g);w&&(f.push(w),n.onText?.(w))};o.stdout?.on("data",_=>{let h=_.toString("utf8");i+=h,l+=h;let g=l.indexOf(`
1834
1834
  `);for(;g>=0;){let E=l.slice(0,g);l=l.slice(g+1),p(E),g=l.indexOf(`
1835
- `)}}),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 vU(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(ao(e)){let n=e.data;if(ao(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 cS(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(ao(n)){let r=cS(n);if(r)return r}}}function gc(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(ao(n)){let r=gc(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(ao(s)){let o=gc(s,e);if(o!==void 0)return o}}}function ao(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Hm,Xm=L(()=>{"use strict";oc();Qe();We();cn();Bt();fl();It();Hm=class extends ce{constructor(e){super({provider:new ro({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",ee],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:wU})}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 iS({prompt:e?.prompt??ee,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){TU(e,{recursive:!0});let r=this.seedArgsFor(n);$e("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await lS(this.binary,r,{cwd:e,env:eo(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:aS(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 "${ee}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as yc,readFile as SU,rm as bU}from"node:fs/promises";import{basename as dS,join as Tr}from"node:path";function IU(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function Bi(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function kU(t,e){if(!e)return;t.observed=!0;let n=Bi(e.promptTokenCount),r=Bi(e.cachedContentTokenCount),s=Bi(e.candidatesTokenCount),o=Bi(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:Bi(e.totalTokenCount)||n+s}}function AU(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 uS(t){return t.type==="user"||t.message?.role==="user"}function fS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function mS(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
+ `)}}),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 vU(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(ao(e)){let n=e.data;if(ao(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 cS(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(ao(n)){let r=cS(n);if(r)return r}}}function gc(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(ao(n)){let r=gc(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(ao(s)){let o=gc(s,e);if(o!==void 0)return o}}}function ao(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Hm,Xm=L(()=>{"use strict";oc();Qe();We();cn();Bt();fl();It();Hm=class extends ce{constructor(e){super({provider:new ro({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",ee],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:TU})}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 iS({prompt:e?.prompt??ee,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){wU(e,{recursive:!0});let r=this.seedArgsFor(n);$e("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await lS(this.binary,r,{cwd:e,env:eo(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:aS(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 "${ee}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as yc,readFile as SU,rm as bU}from"node:fs/promises";import{basename as dS,join as wr}from"node:path";function IU(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function Bi(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function kU(t,e){if(!e)return;t.observed=!0;let n=Bi(e.promptTokenCount),r=Bi(e.cachedContentTokenCount),s=Bi(e.candidatesTokenCount),o=Bi(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:Bi(e.totalTokenCount)||n+s}}function AU(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 uS(t){return t.type==="user"||t.message?.role==="user"}function fS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function mS(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(`
1836
1836
  `):Array.isArray(e.parts)?e.parts.filter(n=>!n.thought&&n.type!=="thinking").map(n=>n.text||"").join(`
1837
- `):"":""}function pS(t){return t.model||t.message?.model}function NU(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:_S(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Xi(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 RU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Xi(e.output??e.error??t)}return Xi(t)}function _S(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function hS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Xi(t.args,!0),toolInputData:Rt(t.args),toolCallId:t.id,model:n}}var Ec,gS=L(()=>{"use strict";xe();Ec=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||Tr(Q,".qwen")}async discoverSessions(){let e=Tr(this.baseDir,"projects"),n;try{n=await yc(e)}catch{return[]}let r=[];for(let s of n){let o=Tr(e,s,"chats"),i;try{i=await yc(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=Tr(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)),uS(u)){let f=mS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(fS(u)){let f=pS(u);f&&(i=f),d+=NU(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=dS(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=IU();for await(let m of Ee(e)){if(kU(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=_S(m).filter(g=>g.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:_,content:Xi(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=RU(E.response),T=Xi(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(uS(m)){let h=mS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(fS(m)){let h=pS(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(hS(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(hS(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,...AU(f),messages:u}}async resolveSessionPath(e){let n=Tr(this.baseDir,"projects");try{let r=await yc(n),s=[];for(let o of r){let i=Tr(n,o,"chats",`${e}.jsonl`);try{return await SU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=Tr(n,o,"chats"),a;try{a=await yc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;dS(l,".jsonl").startsWith(e)&&s.push(Tr(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 bU(n),!0}catch{return!1}}}});function Gm(t){return new qm(t)}var qm,Vm=L(()=>{"use strict";gS();Qe();Wn();We();qm=class extends ce{constructor(e){super({provider:new Ec(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",ee,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:ic})}openSession(e){return ac({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as yS,readFile as ES,rm as TS,stat as wS}from"node:fs/promises";import{basename as Jm,join as un}from"node:path";import{fileURLToPath as xU}from"node:url";async function LU(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 CU(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function vS(t){return t.type==="USER_INPUT"}function SS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function OU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function bS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function IS(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 DU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function MU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=$U(s);if(o)return o}let r=PU(e.content);if(r)return r}return null}function $U(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 PU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function UU(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 FU(t,e){let n=new Set;for(let r of e){let s=jU(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 jU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:XU(n.event.content);if(r!==void 0)return kS(t.filter(o=>!e.has(o)&&qU(o)===r),n.event.step_index);let s=BU(n.event);if(s!==void 0)return kS(t.filter(o=>!e.has(o)&&WU(o.name,n.event.type)&&NS(HU(o))===s),n.event.step_index)}function kS(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 WU(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 HU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function BU(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]),NS(e)}function NS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return xU(e)}catch{return}}function XU(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function qU(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 AS(t){if(t.endsWith(".db"))return Jm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var Tc,RS=L(()=>{"use strict";xe();Tc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||un(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:un(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=un(this.baseDir,"conversations"),n;try{n=await yS(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Jm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return un(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return un(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 wS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await LU([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=IS(u.content);if(f&&(a=f),vS(u)){let m=bS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else SS(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=AS(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=CU(f.created_at,s.modifiedAt),p=IS(f.content);if(p&&(a=p),vS(f)){let _=bS(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=DU(_.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(SS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(OU(f)&&f.content){let _=UU(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 FU(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 wS(n),n}catch{}let r=un(this.baseDir,"conversations");try{let s=[];for(let o of await yS(r)){if(!o.endsWith(".db"))continue;Jm(o,".db").startsWith(e)&&s.push(un(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=AS(n);return r?(await TS(this.conversationPath(r),{force:!0}),await TS(un(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 MU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=un(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await ES(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=un(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([ES(r,"utf8"),Ae(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as GU}from"node:child_process";import{StringDecoder as xS}from"node:string_decoder";function wc(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 VU(t.label,n.binary,s,{cwd:n.cwd,env:De(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 VU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=GU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new xS("utf8"),d=new xS("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(Bs(`${t} failed (${p})`,_?we(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var Km=L(()=>{"use strict";Bt();It()});import{basename as JU}from"node:path";import{randomUUID as KU}from"node:crypto";function zm(t){return new Ym(t)}function zU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Ym,YU,Qm=L(()=>{"use strict";RS();Qe();We();cn();Km();Ym=class extends ce{constructor(e){super({provider:new Tc(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",ee,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:YU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||JU(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=KU(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Fl({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}`}}},YU=wc({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",zU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>$e("agy",t,e.permissionMode??"yolo")})});import{existsSync as qi,readdirSync as QU,statSync as LS}from"node:fs";import{readdir as Zm,rm as ZU}from"node:fs/promises";import CS,{join as fn}from"node:path";function eF(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 tF(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function lo(t,e){let n=e??(process.platform==="win32"?CS.win32:CS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!qi(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=QU(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);LS(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(qi(t)&&LS(t).isFile())return t}catch{}return n.join(r,s)}function ep(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 nF(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 OS(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:ep(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of nF(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:ep(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:ep(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function rF(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 DS(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,...sF(t)}}function sF(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 to("",-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 vc,MS=L(()=>{"use strict";Hl();xe();Da();vc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||fn(Q,".dsh");this.sessionsDir=fn(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Zm(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Zm(fn(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=OS(r),o=DS(r,n.filePath,s);return o?{...o,turnStatus:rF(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 ZU(fn(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=eF(e),s=tF(e),o=r,i=fn(this.sessionsDir,r,n),a=fn(this.sessionsDir,s,n);!qi(i)&&qi(a)&&(o=s);let l=fn(this.sessionsDir,o,n);return lo(l)}async findSessionDir(e){let n;try{n=await Zm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=fn(this.sessionsDir,r,s);try{let i=lo(o);if(qi(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=fn(this.sessionsDir,e,n),o=lo(s),i=await r(o),a=Oa(i),l=[];for(let c of a.split(`
1838
- `))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=fn(this.sessionsDir,e,n),s=lo(r),o=await this.readRecords(e,n);return o.length===0?null:DS(o,s,OS(o))}}});import{spawn as oF}from"node:child_process";import{randomUUID as iF}from"node:crypto";function tp(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=>tp(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]=tp(s,e);return n}return t}function lF(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 PS(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 Sc(t,e=n=>np.spawn(n)){if(wr){let n=await wr.catch(()=>{});if(n?.alive)return n;wr=void 0}return wr=e(t),wr}async function Gi(){if(!wr)return;(await wr.catch(()=>{}))?.shutdown(),wr=void 0}var aF,$S,Hn,np,wr,US=L(()=>{"use strict";It();aF=/dsh web:\s*(https?:\/\/\S+)/,$S=2e4;Hn=class t extends Error{method;detail;constructor(e,n,r=[]){let s=tp(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)}};np=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=lF(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:iF()})}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 Hn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Hn(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 Hn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Hn(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 Hn(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 Hn(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 Hn(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&&PS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=oF("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(),PS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1837
+ `):"":""}function pS(t){return t.model||t.message?.model}function NU(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:_S(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Xi(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 RU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Xi(e.output??e.error??t)}return Xi(t)}function _S(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function hS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Xi(t.args,!0),toolInputData:Rt(t.args),toolCallId:t.id,model:n}}var Ec,gS=L(()=>{"use strict";xe();Ec=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||wr(Q,".qwen")}async discoverSessions(){let e=wr(this.baseDir,"projects"),n;try{n=await yc(e)}catch{return[]}let r=[];for(let s of n){let o=wr(e,s,"chats"),i;try{i=await yc(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=wr(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)),uS(u)){let f=mS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(fS(u)){let f=pS(u);f&&(i=f),d+=NU(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=dS(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=IU();for await(let m of Ee(e)){if(kU(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=_S(m).filter(g=>g.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:_,content:Xi(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=RU(E.response),w=Xi(m.toolCallResult?.resultDisplay);u.push({role:"tool_result",timestamp:_,content:w??y??m.toolCallResult?.status??"tool result",toolName:E.name,toolCallId:m.toolCallResult?.callId??E.id,...y!==void 0?{toolDetailedContent:y}:{}})}}else if(uS(m)){let h=mS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(fS(m)){let h=pS(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(hS(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(hS(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,...AU(f),messages:u}}async resolveSessionPath(e){let n=wr(this.baseDir,"projects");try{let r=await yc(n),s=[];for(let o of r){let i=wr(n,o,"chats",`${e}.jsonl`);try{return await SU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=wr(n,o,"chats"),a;try{a=await yc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;dS(l,".jsonl").startsWith(e)&&s.push(wr(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 bU(n),!0}catch{return!1}}}});function Gm(t){return new qm(t)}var qm,Vm=L(()=>{"use strict";gS();Qe();Wn();We();qm=class extends ce{constructor(e){super({provider:new Ec(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",ee,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:ic})}openSession(e){return ac({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as yS,readFile as ES,rm as wS,stat as TS}from"node:fs/promises";import{basename as Jm,join as un}from"node:path";import{fileURLToPath as xU}from"node:url";async function LU(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 CU(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function vS(t){return t.type==="USER_INPUT"}function SS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function OU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function bS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function IS(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 DU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function MU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=$U(s);if(o)return o}let r=PU(e.content);if(r)return r}return null}function $U(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 PU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function UU(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 FU(t,e){let n=new Set;for(let r of e){let s=jU(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 jU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:XU(n.event.content);if(r!==void 0)return kS(t.filter(o=>!e.has(o)&&qU(o)===r),n.event.step_index);let s=BU(n.event);if(s!==void 0)return kS(t.filter(o=>!e.has(o)&&WU(o.name,n.event.type)&&NS(HU(o))===s),n.event.step_index)}function kS(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 WU(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 HU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function BU(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]),NS(e)}function NS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return xU(e)}catch{return}}function XU(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function qU(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 AS(t){if(t.endsWith(".db"))return Jm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var wc,RS=L(()=>{"use strict";xe();wc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||un(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:un(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=un(this.baseDir,"conversations"),n;try{n=await yS(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Jm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return un(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return un(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 TS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await LU([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=IS(u.content);if(f&&(a=f),vS(u)){let m=bS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else SS(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=AS(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=CU(f.created_at,s.modifiedAt),p=IS(f.content);if(p&&(a=p),vS(f)){let _=bS(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=DU(_.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(SS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(OU(f)&&f.content){let _=UU(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 FU(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 TS(n),n}catch{}let r=un(this.baseDir,"conversations");try{let s=[];for(let o of await yS(r)){if(!o.endsWith(".db"))continue;Jm(o,".db").startsWith(e)&&s.push(un(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=AS(n);return r?(await wS(this.conversationPath(r),{force:!0}),await wS(un(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 MU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=un(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await ES(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=un(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([ES(r,"utf8"),Ae(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as GU}from"node:child_process";import{StringDecoder as xS}from"node:string_decoder";function Tc(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 VU(t.label,n.binary,s,{cwd:n.cwd,env:De(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 VU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=GU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new xS("utf8"),d=new xS("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(Bs(`${t} failed (${p})`,_?Te(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var Km=L(()=>{"use strict";Bt();It()});import{basename as JU}from"node:path";import{randomUUID as KU}from"node:crypto";function zm(t){return new Ym(t)}function zU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Ym,YU,Qm=L(()=>{"use strict";RS();Qe();We();cn();Km();Ym=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:"Antigravity uses one-shot print turns; no streaming events are available."},binary:"agy",seedArgs:["-p",ee,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:YU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||JU(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=KU(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Fl({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}`}}},YU=Tc({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",zU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>$e("agy",t,e.permissionMode??"yolo")})});import{existsSync as qi,readdirSync as QU,statSync as LS}from"node:fs";import{readdir as Zm,rm as ZU}from"node:fs/promises";import CS,{join as fn}from"node:path";function eF(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 tF(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function lo(t,e){let n=e??(process.platform==="win32"?CS.win32:CS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!qi(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=QU(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);LS(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(qi(t)&&LS(t).isFile())return t}catch{}return n.join(r,s)}function ep(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 nF(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 OS(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:ep(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of nF(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:ep(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:ep(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function rF(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 DS(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,...sF(t)}}function sF(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 to("",-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 vc,MS=L(()=>{"use strict";Hl();xe();Da();vc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||fn(Q,".dsh");this.sessionsDir=fn(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Zm(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Zm(fn(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=OS(r),o=DS(r,n.filePath,s);return o?{...o,turnStatus:rF(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 ZU(fn(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=eF(e),s=tF(e),o=r,i=fn(this.sessionsDir,r,n),a=fn(this.sessionsDir,s,n);!qi(i)&&qi(a)&&(o=s);let l=fn(this.sessionsDir,o,n);return lo(l)}async findSessionDir(e){let n;try{n=await Zm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=fn(this.sessionsDir,r,s);try{let i=lo(o);if(qi(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=fn(this.sessionsDir,e,n),o=lo(s),i=await r(o),a=Oa(i),l=[];for(let c of a.split(`
1838
+ `))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=fn(this.sessionsDir,e,n),s=lo(r),o=await this.readRecords(e,n);return o.length===0?null:DS(o,s,OS(o))}}});import{spawn as oF}from"node:child_process";import{randomUUID as iF}from"node:crypto";function tp(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=>tp(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]=tp(s,e);return n}return t}function lF(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 PS(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 Sc(t,e=n=>np.spawn(n)){if(Tr){let n=await Tr.catch(()=>{});if(n?.alive)return n;Tr=void 0}return Tr=e(t),Tr}async function Gi(){if(!Tr)return;(await Tr.catch(()=>{}))?.shutdown(),Tr=void 0}var aF,$S,Hn,np,Tr,US=L(()=>{"use strict";It();aF=/dsh web:\s*(https?:\/\/\S+)/,$S=2e4;Hn=class t extends Error{method;detail;constructor(e,n,r=[]){let s=tp(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)}};np=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=lF(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:iF()})}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 Hn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Hn(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 Hn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Hn(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 Hn(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 Hn(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 Hn(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&&PS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=oF("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(),PS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1839
1839
  ${l}`:"",c?`stderr:
1840
1840
  ${c}`:""].filter(Boolean).join(`
1841
1841
  `);u(new Error(`dsh web sidecar did not report a boot URL within ${$S}ms `+(m?`
1842
- ${we(m,{provider:"dsh"})}`:"(no output captured)")))},$S);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let _=a.split(`
1843
- `);a=_.pop()??"";for(let h of _){let g=aF.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(Bs(`dsh web exited before reporting a boot URL (${_})`,c.trim()?we(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as FS}from"node:crypto";import{existsSync as jS,statSync as cF}from"node:fs";import{readFile as dF,mkdir as uF}from"node:fs/promises";function ap(t){return new ip(t)}function op(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function mF(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 bc(t){return t instanceof Error?t.message:String(t)}async function WS(t,e){let n;try{n=await dF(t)}catch{return e?.(),[]}e&&Wo(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Oa(n),s=[];for(let o of r.split(`
1844
- `))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 pF(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 Ic(t,e){return lo(t,e)}var rp,fF,sp,ip,lp=L(()=>{"use strict";Hl();Qs();Qe();MS();Da();US();We();cn();rp=new Map,fF=500,sp=8*60*60*1e3;ip=class extends ce{dshProvider;usageSeen=new Set;constructor(e){let n=new vc(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 uF(e,{recursive:!0});let r=`session-${FS()}`,s=op(n?.env??process.env);$e("dsh",[],"yolo");try{let o;try{o=await Sc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${bc(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${bc(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: ${bc(a)}`}}let i=n?.prompt??ee;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,sp,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${bc(a)}`}}}finally{await Gi()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Fn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=op(n.env??process.env);$e("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${FS()}`:n.sessionId,a;try{let l=await Sc(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??sp,n.signal)}finally{await Gi()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:i,durationMs:Date.now()-r}}async openSession(e){let n=op(e.env??process.env);$e("dsh",[],e.permissionMode??"yolo");let r=await Sc(n),s=Ic(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=jS(s)&&cF(s).isFile()}catch{o=!1}if(!o)throw await Gi(),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 Gi())};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=Ic(s),!jS(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,sp,_.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=Ic(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await WS(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 to(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),_=rp.get(p)??new Set;if(_.size){m.invalidateOwnership();for(let E of _)E.invalidateOwnership()}_.add(m),rp.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=Ic(c);let y=await WS(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(N=>N.type==="assistant/message"&&(N.seq??-1)>f&&(N.seq??1/0)<=(T.seq??1/0)),b=S?pF(S):"";if(w?.kind!=="completed"&&!b)throw new Error(mF(w));m.finish();let k=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:k?{...k,...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,fF))}}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||rp.delete(p)}}}});import{existsSync as hF}from"node:fs";import{join as GS,resolve as _F}from"node:path";import{createRequire as gF}from"node:module";function yF(){return cp===null&&(cp=gF(import.meta.url)("node:sqlite").DatabaseSync),cp}function dp(t={}){return _F(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||GS(Q,".hermes"))}function EF(t={}){return GS(dp(t),"state.db")}function Vi(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function _t(t){return typeof t=="string"&&t.length>0?t:void 0}function TF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function XS(t){return _t(t.cwd)??_t(TF(t.model_config).cwd)??"(unknown)"}function wF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function vF(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 qS(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 cp,HS,BS,kc,VS=L(()=>{"use strict";xe();re();cp=null;HS="acp";BS=`id, source, model, model_config, started_at,
1842
+ ${Te(m,{provider:"dsh"})}`:"(no output captured)")))},$S);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let _=a.split(`
1843
+ `);a=_.pop()??"";for(let h of _){let g=aF.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(Bs(`dsh web exited before reporting a boot URL (${_})`,c.trim()?Te(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as FS}from"node:crypto";import{existsSync as jS,statSync as cF}from"node:fs";import{readFile as dF,mkdir as uF}from"node:fs/promises";function ap(t){return new ip(t)}function op(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function mF(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 bc(t){return t instanceof Error?t.message:String(t)}async function WS(t,e){let n;try{n=await dF(t)}catch{return e?.(),[]}e&&Wo(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Oa(n),s=[];for(let o of r.split(`
1844
+ `))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 pF(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 Ic(t,e){return lo(t,e)}var rp,fF,sp,ip,lp=L(()=>{"use strict";Hl();Qs();Qe();MS();Da();US();We();cn();rp=new Map,fF=500,sp=8*60*60*1e3;ip=class extends ce{dshProvider;usageSeen=new Set;constructor(e){let n=new vc(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 uF(e,{recursive:!0});let r=`session-${FS()}`,s=op(n?.env??process.env);$e("dsh",[],"yolo");try{let o;try{o=await Sc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${bc(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${bc(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: ${bc(a)}`}}let i=n?.prompt??ee;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,sp,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${bc(a)}`}}}finally{await Gi()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Fn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=op(n.env??process.env);$e("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${FS()}`:n.sessionId,a;try{let l=await Sc(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??sp,n.signal)}finally{await Gi()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:i,durationMs:Date.now()-r}}async openSession(e){let n=op(e.env??process.env);$e("dsh",[],e.permissionMode??"yolo");let r=await Sc(n),s=Ic(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=jS(s)&&cF(s).isFile()}catch{o=!1}if(!o)throw await Gi(),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 Gi())};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=Ic(s),!jS(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,sp,_.signal,S=>{g=S});E.catch(()=>{});let y=()=>{},w=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})}),T;try{T=await Promise.race([E,w])}finally{_.signal?.removeEventListener("abort",y)}return l+=1,{...T,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=Ic(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await WS(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 to(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),_=rp.get(p)??new Set;if(_.size){m.invalidateOwnership();for(let E of _)E.invalidateOwnership()}_.add(m),rp.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=Ic(c);let y=await WS(c),w=y.find(T=>T.type==="turn/end"&&(T.seq??-1)>f);if(y.length&&m.update(y,w?.seq??1/0),a?.(m.usage()),i?.aborted)throw new Error("Aborted");if(w){let T=w.data?.reason;T?.kind!=="completed"&&(g=T?.kind==="aborted"?"cancelled":"error");let S=[...y].reverse().find(N=>N.type==="assistant/message"&&(N.seq??-1)>f&&(N.seq??1/0)<=(w.seq??1/0)),b=S?pF(S):"";if(T?.kind!=="completed"&&!b)throw new Error(mF(T));m.finish();let k=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:k?{...k,...T?.kind==="completed"?{}:{outcome:T?.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(T=>setTimeout(T,fF))}}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||rp.delete(p)}}}});import{existsSync as hF}from"node:fs";import{join as GS,resolve as _F}from"node:path";import{createRequire as gF}from"node:module";function yF(){return cp===null&&(cp=gF(import.meta.url)("node:sqlite").DatabaseSync),cp}function dp(t={}){return _F(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||GS(Q,".hermes"))}function EF(t={}){return GS(dp(t),"state.db")}function Vi(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function _t(t){return typeof t=="string"&&t.length>0?t:void 0}function wF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function XS(t){return _t(t.cwd)??_t(wF(t.model_config).cwd)??"(unknown)"}function TF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function vF(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 qS(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 cp,HS,BS,kc,VS=L(()=>{"use strict";xe();re();cp=null;HS="acp";BS=`id, source, model, model_config, started_at,
1845
1845
  last_activity_at, message_count, input_tokens, output_tokens,
1846
1846
  cache_read_tokens, cache_write_tokens, reasoning_tokens, cwd, title`;kc=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=EF(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!hF(this.dbPath))return null;let e=null;try{return e=new(yF())(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 ${BS} FROM sessions WHERE id = ? AND source = ?`).get(n,HS)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${BS} FROM sessions
1847
1847
  WHERE source = ?
1848
1848
  ORDER BY COALESCE(last_activity_at, started_at) DESC
1849
1849
  LIMIT ?`).all(HS,this.discoverLimit),r=[];for(let s of n){let o=this.previewTexts(e,s.id);r.push({provider:this.name,sessionId:s.id,slug:_t(s.title),cwd:XS(s),createdAt:Vi(s.started_at),modifiedAt:Vi(s.last_activity_at??s.started_at),model:_t(s.model),startCommand:this.name,firstUserMessage:o.first,lastUserMessage:o.last,messageCount:s.message_count??0,filePath:this.dbPath,...qS(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,
1850
1850
  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 = ?
1851
- 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=Vi(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:_t(c.tool_call_id),toolName:_t(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:_t(r.model),stopReason:_t(c.finish_reason)});for(let f of wF(c.tool_calls)){let m=vF(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:_t(f.function?.name)??"tool_call",toolName:_t(f.function?.name),toolCallId:_t(f.call_id)??_t(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:_t(r.title),cwd:XS(r),createdAt:Vi(r.started_at),modifiedAt:Vi(r.last_activity_at??r.started_at),model:_t(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...qS(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 SF}from"node:fs/promises";function IF(t){return bF.test(t)}function JS(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 kF}function fp(t){return new up(t)}var bF,kF,up,mp=L(()=>{"use strict";Qe();VS();Wn();We();re();bF=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;kF="dont_ask";up=class extends ce{hermesProvider;hermesHome;constructor(e){let n=new kc(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)=>Xt(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:JS(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=dp(e)}async openSession(e){return dn({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:JS(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await SF(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??ee,{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 IF(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 KS,rm as AF,stat as NF}from"node:fs/promises";import{join as pp}from"node:path";function hp(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 YS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var Ac,zS=L(()=>{"use strict";xe();Ac=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||pp(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 KS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=pp(this.baseDir,r);try{if(!(await NF(s)).isDirectory())continue;for(let o of await KS(s))o.endsWith(".jsonl")&&n.push(pp(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=hp(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:hp(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:YS(c.arguments),toolName:c.name??"tool",toolInput:YS(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:hp(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 AF(n,{force:!0}),!0):!1}}});function gp(t){return new _p(t)}var _p,RF,yp=L(()=>{"use strict";zS();Qe();We();cn();Km();_p=class extends ce{constructor(e){super({provider:new Ac(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",ee],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:RF})}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}`}}},RF=wc({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)=>$e("pi",t,e.permissionMode??"yolo")})});import{createHash as xF}from"node:crypto";import{existsSync as LF,mkdirSync as Tp,readFileSync as CF,renameSync as OF,rmdirSync as ob,statSync as DF,writeFileSync as MF}from"node:fs";import{dirname as bp,join as QS,resolve as Ep}from"node:path";function $F(t){return xF("sha256").update(t).digest("hex").slice(0,8)}function PF(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function UF(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 ib(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Nc(t){return Math.max(1,Math.ceil(t.length/4))}function uo(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return Ep(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?QS(bp(Ep(n)),".lmctl-claude-mock","sessions.json"):QS(Ep(t),".lmctl-claude-mock","sessions.json")}function ZS(){return{schemaVersion:1,sessions:{}}}function Ji(t){if(!LF(t))return ZS();try{let e=JSON.parse(CF(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=wp(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...o!==void 0?{defaultDelayMs:o}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return ZS()}}function ab(t,e){Tp(bp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;MF(n,`${JSON.stringify(e,null,2)}
1852
- `,"utf8"),OF(n,t)}function WF(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function HF(t){let e=`${t}.lock`;Tp(bp(t),{recursive:!0});let n=Date.now()+eb;for(;;)try{return Tp(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-DF(e).mtimeMs>FF){try{ob(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${eb}ms: ${e}`);WF(jF)}}function BF(t){try{ob(t)}catch{}}function lb(t,e){let n=HF(t);try{return e()}finally{BF(n)}}function XF(t){return{...t,timestamp:t.timestamp.toISOString()}}function qF(t){return{...t,timestamp:new Date(t.timestamp)}}function GF(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(XF)}}function cb(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(qF)}}function Rc(t,e=process.cwd()){let n=co.get(t);if(n!==void 0)return n;let s=Ji(uo(e)).sessions[t];if(s===void 0)return;let o=cb(s);return co.set(o.sessionId,o),o}function tb(t){co.set(t.sessionId,t);let e=uo(t.cwd);lb(e,()=>{let n=Ji(e);n.sessions[t.sessionId]=GF({...t,filePath:e}),ab(e,n)})}function VF(t,e=process.cwd()){let n=uo(e);return lb(n,()=>{let r=Ji(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],ab(n,r)),s})}function JF(){let t=Ji(uo()),e=Object.values(t.sessions).map(cb);for(let n of e)co.set(n.sessionId,n);return e}function wp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function nb(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=wp(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=wp(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function rb(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function KF(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=nb(n[t]??n[ib(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=nb(r[s]);if(o!==void 0)return o}}}function sb(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 Ip(){return new Sp}var co,FF,jF,eb,vp,Sp,kp=L(()=>{"use strict";co=new Map;FF=5e3,jF=15,eb=1e4;vp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of JF())e.set(n.sessionId,n);for(let n of co.values())e.set(n.sessionId,n);return[...e.values()].map(sb)}async loadSession(e){let n=Rc(e);return n===void 0?null:{...sb(n),messages:n.messages.slice()}}async resolveSessionPath(e){return Rc(e)?.filePath??null}async deleteSession(e){let n=co.delete(e),r=VF(e);return n||r}},Sp=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new vp;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=PF(UF(e,n)),s=`mock-${r}-${$F(`${e}:${r}`)}`,o=new Date,i=uo(e),a=Rc(s,e),l=n?.prompt??"ClaudeMock seed",c=Nc(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+=Nc("ACK: ClaudeMock seeded"),tb(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=Rc(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let o=new Date,i=Ji(uo(n.cwd)),a=KF(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await rb(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${ib(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+=Nc(e),s.totalOutputTokens+=Nc(c),tb(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await rb(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function vr(t){let e=[Gf({museDataHome:t?.museDataHome}),hm({miniplayerHome:t?.miniplayerHome}),ym({claudeDir:t?.claudeDir}),Sm({codexDir:t?.codexDir,codeDir:t?.codeDir}),Nm({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),Cm({copilotDir:t?.copilotDir}),Mm({dbPaths:t?.opencodeDbPaths}),jm({kimiHome:t?.kimiHome}),Bm({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Gm({qwenDir:t?.qwenDir}),zm({agyDir:t?.agyDir}),ap({dshHome:t?.dshHome}),fp({hermesHome:t?.hermesHome}),gp({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(Ip()),e}var Ap=L(()=>{"use strict";Vf();Vf();_m();_m();Em();bm();Rm();Om();$m();Wm();Xm();Vm();Qm();lp();mp();yp();kp();Em();bm();Rm();Om();$m();Wm();Xm();Vm();Qm();lp();mp();yp();kp()});var db,ub,fb=L(()=>{"use strict";db=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],ub=["agy","pi","lmplayer"]});var xp={};me(xp,{BUNDLE_CAPABLE_PROVIDERS:()=>db,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>ub,ProviderRegistry:()=>bi,TransportConnectionError:()=>Te,TransportError:()=>mr,TransportJsonError:()=>jl,TransportProcessError:()=>ve,TransportRpcError:()=>ki,_resetDefaultRegistryForTests:()=>ej,bundleSupportedProviders:()=>Yi,canUsePersistentSession:()=>Ol,chat:()=>Ki,countTokens:()=>oj,createAdapterRegistry:()=>Zs,createAllAdapters:()=>vr,deleteSession:()=>sj,listSessions:()=>Rp,openBundleSession:()=>Np,openConversation:()=>tj,seed:()=>nj});import{accessSync as YF,constants as zF,statSync as QF}from"node:fs";import{join as ZF,delimiter as mb}from"node:path";function Sr(){return xc===null&&(xc=Zs(vr())),xc}function ej(){xc=null}function Lc(t,e){Tl(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function Ki(t){let e=t.registry??Sr(),n=Lc(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 Dl(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 Yi(t){return(t??Sr()).getAllAdapters().filter(n=>$n(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function Np(t){let e=t.registry??Sr(),n=Lc(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Yi(e).join(", ")})`);return Dl(n,{...t,execution:"persistent"})}async function tj(t){return Dl(Lc(t.registry??Sr(),t.provider),t)}async function nj(t){let e=t.registry??Sr(),n=Lc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=mb===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(mb).some(p=>{try{return f.some(_=>{try{let h=ZF(p||t.cwd,"agy"+_);return YF(h,zF.X_OK),QF(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 pb(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 pb(e,t.provider,t.cwd),c=rj(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 pb(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 rj(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 Rp(t={}){return(t.registry??Sr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function sj(t,e,n=Sr()){return n.deleteSession(e,t)}async function oj(t){let n=await(t.registry??Sr()).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 xc,Bn=L(()=>{"use strict";Qs();Gs();Af();Ap();Qs();Af();Ap();fb();pr();xc=null});function Cc(t){return $n(t)&&aj.has(t)}function zi(){return Lp===null&&(Lp=Zs(vr())),Lp}function Cp(t,e,n={}){if(!Cc(t))return null;try{let r=zi().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?Kl({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?ij[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,...hb[t]??[]]}catch{return null}}async function gb(t,e){try{let n=zi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function yb(t){try{return zi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function Eb(t,e,n={}){let r=Cp(t,e,n);return r===null?null:r.join(" ")}function He(t,e){return zi().getSession(t,e)}async function br(t){return(await zi().resolveSessions(t)).map(n=>n.provider.name)}var hb,ij,aj,_b,Lp,mn=L(()=>{"use strict";Gs();Bn();Qf();hb={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:[]},ij={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]},aj=new Set(Object.keys(hb)),_b=/^[\w.:-]+$/;Lp=null});function lj(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return Tb;let n=Number(e);return!Number.isFinite(n)||n<=0?Tb:n}async function cj(t,e,n){try{let r=Ve(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 br(s);if(c.length!==1)return null;o=c[0]}let i=await He(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 wb(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??lj(),i=await cj(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 Tb,vb=L(()=>{"use strict";re();mn();ot();Tb=36e5});function dj(t){return t===null?null:rt(t)?"live":"dead"}function Op(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:dj(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function uj(t){return(0,Sb.formatDuration)(t)}function Dp(t){let e=[];return t.idle_ms!==null&&e.push(`active ${uj(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 Sb,bb=L(()=>{"use strict";zr();Sb=Ft(Ct(),1)});import{randomUUID as fj}from"node:crypto";import{hostname as Ib,networkInterfaces as mj}from"node:os";function kb(t){let e=(t.now??new Date).toISOString();return{lock_id:fj(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??Ib(),holder_ips:t.ips??yj(),started_at:e,last_heartbeat:e}}function Ab(t=process.env){return Nb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,pj)}function _j(t=process.env){return Nb(t.LMCTL_TERMINAL_LOCK_STALE_MS,hj)}function Mp(t,e={}){let n=e.now??new Date,r=e.localHost??Ib(),s=e.staleMs??_j();if(t.holder_host===r)return(e.isProcessAlive??gj)(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 Nb(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 gj(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 yj(){let t=new Set;for(let e of Object.values(mj()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var pj,hj,Oc=L(()=>{"use strict";pj=15e3,hj=12e4});function Ej(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1851
+ 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=Vi(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:_t(c.tool_call_id),toolName:_t(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:_t(r.model),stopReason:_t(c.finish_reason)});for(let f of TF(c.tool_calls)){let m=vF(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:_t(f.function?.name)??"tool_call",toolName:_t(f.function?.name),toolCallId:_t(f.call_id)??_t(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:_t(r.title),cwd:XS(r),createdAt:Vi(r.started_at),modifiedAt:Vi(r.last_activity_at??r.started_at),model:_t(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...qS(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 SF}from"node:fs/promises";function IF(t){return bF.test(t)}function JS(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 kF}function fp(t){return new up(t)}var bF,kF,up,mp=L(()=>{"use strict";Qe();VS();Wn();We();re();bF=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;kF="dont_ask";up=class extends ce{hermesProvider;hermesHome;constructor(e){let n=new kc(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)=>Xt(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:JS(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=dp(e)}async openSession(e){return dn({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:JS(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await SF(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??ee,{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 IF(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 KS,rm as AF,stat as NF}from"node:fs/promises";import{join as pp}from"node:path";function hp(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 YS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var Ac,zS=L(()=>{"use strict";xe();Ac=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||pp(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 KS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=pp(this.baseDir,r);try{if(!(await NF(s)).isDirectory())continue;for(let o of await KS(s))o.endsWith(".jsonl")&&n.push(pp(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=hp(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:hp(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:YS(c.arguments),toolName:c.name??"tool",toolInput:YS(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:hp(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 AF(n,{force:!0}),!0):!1}}});function gp(t){return new _p(t)}var _p,RF,yp=L(()=>{"use strict";zS();Qe();We();cn();Km();_p=class extends ce{constructor(e){super({provider:new Ac(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",ee],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:RF})}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}`}}},RF=Tc({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)=>$e("pi",t,e.permissionMode??"yolo")})});import{createHash as xF}from"node:crypto";import{existsSync as LF,mkdirSync as wp,readFileSync as CF,renameSync as OF,rmdirSync as ob,statSync as DF,writeFileSync as MF}from"node:fs";import{dirname as bp,join as QS,resolve as Ep}from"node:path";function $F(t){return xF("sha256").update(t).digest("hex").slice(0,8)}function PF(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function UF(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 ib(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Nc(t){return Math.max(1,Math.ceil(t.length/4))}function uo(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return Ep(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?QS(bp(Ep(n)),".lmctl-claude-mock","sessions.json"):QS(Ep(t),".lmctl-claude-mock","sessions.json")}function ZS(){return{schemaVersion:1,sessions:{}}}function Ji(t){if(!LF(t))return ZS();try{let e=JSON.parse(CF(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=Tp(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...o!==void 0?{defaultDelayMs:o}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return ZS()}}function ab(t,e){wp(bp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;MF(n,`${JSON.stringify(e,null,2)}
1852
+ `,"utf8"),OF(n,t)}function WF(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function HF(t){let e=`${t}.lock`;wp(bp(t),{recursive:!0});let n=Date.now()+eb;for(;;)try{return wp(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-DF(e).mtimeMs>FF){try{ob(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${eb}ms: ${e}`);WF(jF)}}function BF(t){try{ob(t)}catch{}}function lb(t,e){let n=HF(t);try{return e()}finally{BF(n)}}function XF(t){return{...t,timestamp:t.timestamp.toISOString()}}function qF(t){return{...t,timestamp:new Date(t.timestamp)}}function GF(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(XF)}}function cb(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(qF)}}function Rc(t,e=process.cwd()){let n=co.get(t);if(n!==void 0)return n;let s=Ji(uo(e)).sessions[t];if(s===void 0)return;let o=cb(s);return co.set(o.sessionId,o),o}function tb(t){co.set(t.sessionId,t);let e=uo(t.cwd);lb(e,()=>{let n=Ji(e);n.sessions[t.sessionId]=GF({...t,filePath:e}),ab(e,n)})}function VF(t,e=process.cwd()){let n=uo(e);return lb(n,()=>{let r=Ji(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],ab(n,r)),s})}function JF(){let t=Ji(uo()),e=Object.values(t.sessions).map(cb);for(let n of e)co.set(n.sessionId,n);return e}function Tp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function nb(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=Tp(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=Tp(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function rb(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function KF(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=nb(n[t]??n[ib(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=nb(r[s]);if(o!==void 0)return o}}}function sb(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 Ip(){return new Sp}var co,FF,jF,eb,vp,Sp,kp=L(()=>{"use strict";co=new Map;FF=5e3,jF=15,eb=1e4;vp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of JF())e.set(n.sessionId,n);for(let n of co.values())e.set(n.sessionId,n);return[...e.values()].map(sb)}async loadSession(e){let n=Rc(e);return n===void 0?null:{...sb(n),messages:n.messages.slice()}}async resolveSessionPath(e){return Rc(e)?.filePath??null}async deleteSession(e){let n=co.delete(e),r=VF(e);return n||r}},Sp=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new vp;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=PF(UF(e,n)),s=`mock-${r}-${$F(`${e}:${r}`)}`,o=new Date,i=uo(e),a=Rc(s,e),l=n?.prompt??"ClaudeMock seed",c=Nc(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+=Nc("ACK: ClaudeMock seeded"),tb(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=Rc(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let o=new Date,i=Ji(uo(n.cwd)),a=KF(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await rb(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${ib(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+=Nc(e),s.totalOutputTokens+=Nc(c),tb(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await rb(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function vr(t){let e=[Gf({museDataHome:t?.museDataHome}),hm({miniplayerHome:t?.miniplayerHome}),ym({claudeDir:t?.claudeDir}),Sm({codexDir:t?.codexDir,codeDir:t?.codeDir}),Nm({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),Cm({copilotDir:t?.copilotDir}),Mm({dbPaths:t?.opencodeDbPaths}),jm({kimiHome:t?.kimiHome}),Bm({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Gm({qwenDir:t?.qwenDir}),zm({agyDir:t?.agyDir}),ap({dshHome:t?.dshHome}),fp({hermesHome:t?.hermesHome}),gp({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(Ip()),e}var Ap=L(()=>{"use strict";Vf();Vf();_m();_m();Em();bm();Rm();Om();$m();Wm();Xm();Vm();Qm();lp();mp();yp();kp();Em();bm();Rm();Om();$m();Wm();Xm();Vm();Qm();lp();mp();yp();kp()});var db,ub,fb=L(()=>{"use strict";db=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],ub=["agy","pi","lmplayer"]});var xp={};me(xp,{BUNDLE_CAPABLE_PROVIDERS:()=>db,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>ub,ProviderRegistry:()=>bi,TransportConnectionError:()=>we,TransportError:()=>mr,TransportJsonError:()=>jl,TransportProcessError:()=>ve,TransportRpcError:()=>ki,_resetDefaultRegistryForTests:()=>ej,bundleSupportedProviders:()=>Yi,canUsePersistentSession:()=>Ol,chat:()=>Ki,countTokens:()=>oj,createAdapterRegistry:()=>Zs,createAllAdapters:()=>vr,deleteSession:()=>sj,listSessions:()=>Rp,openBundleSession:()=>Np,openConversation:()=>tj,seed:()=>nj});import{accessSync as YF,constants as zF,statSync as QF}from"node:fs";import{join as ZF,delimiter as mb}from"node:path";function Sr(){return xc===null&&(xc=Zs(vr())),xc}function ej(){xc=null}function Lc(t,e){wl(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function Ki(t){let e=t.registry??Sr(),n=Lc(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 Dl(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 Yi(t){return(t??Sr()).getAllAdapters().filter(n=>$n(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function Np(t){let e=t.registry??Sr(),n=Lc(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Yi(e).join(", ")})`);return Dl(n,{...t,execution:"persistent"})}async function tj(t){return Dl(Lc(t.registry??Sr(),t.provider),t)}async function nj(t){let e=t.registry??Sr(),n=Lc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=mb===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(mb).some(p=>{try{return f.some(_=>{try{let h=ZF(p||t.cwd,"agy"+_);return YF(h,zF.X_OK),QF(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 pb(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 pb(e,t.provider,t.cwd),c=rj(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 pb(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 rj(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 Rp(t={}){return(t.registry??Sr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function sj(t,e,n=Sr()){return n.deleteSession(e,t)}async function oj(t){let n=await(t.registry??Sr()).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 xc,Bn=L(()=>{"use strict";Qs();Gs();Af();Ap();Qs();Af();Ap();fb();pr();xc=null});function Cc(t){return $n(t)&&aj.has(t)}function zi(){return Lp===null&&(Lp=Zs(vr())),Lp}function Cp(t,e,n={}){if(!Cc(t))return null;try{let r=zi().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?Kl({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?ij[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,...hb[t]??[]]}catch{return null}}async function gb(t,e){try{let n=zi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function yb(t){try{return zi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function Eb(t,e,n={}){let r=Cp(t,e,n);return r===null?null:r.join(" ")}function He(t,e){return zi().getSession(t,e)}async function br(t){return(await zi().resolveSessions(t)).map(n=>n.provider.name)}var hb,ij,aj,_b,Lp,mn=L(()=>{"use strict";Gs();Bn();Qf();hb={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:[]},ij={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]},aj=new Set(Object.keys(hb)),_b=/^[\w.:-]+$/;Lp=null});function lj(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return wb;let n=Number(e);return!Number.isFinite(n)||n<=0?wb:n}async function cj(t,e,n){try{let r=Ve(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 br(s);if(c.length!==1)return null;o=c[0]}let i=await He(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 Tb(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??lj(),i=await cj(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 wb,vb=L(()=>{"use strict";re();mn();ot();wb=36e5});function dj(t){return t===null?null:rt(t)?"live":"dead"}function Op(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:dj(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function uj(t){return(0,Sb.formatDuration)(t)}function Dp(t){let e=[];return t.idle_ms!==null&&e.push(`active ${uj(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 Sb,bb=L(()=>{"use strict";zr();Sb=Ft(Ct(),1)});import{randomUUID as fj}from"node:crypto";import{hostname as Ib,networkInterfaces as mj}from"node:os";function kb(t){let e=(t.now??new Date).toISOString();return{lock_id:fj(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??Ib(),holder_ips:t.ips??yj(),started_at:e,last_heartbeat:e}}function Ab(t=process.env){return Nb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,pj)}function _j(t=process.env){return Nb(t.LMCTL_TERMINAL_LOCK_STALE_MS,hj)}function Mp(t,e={}){let n=e.now??new Date,r=e.localHost??Ib(),s=e.staleMs??_j();if(t.holder_host===r)return(e.isProcessAlive??gj)(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 Nb(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 gj(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 yj(){let t=new Set;for(let e of Object.values(mj()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var pj,hj,Oc=L(()=>{"use strict";pj=15e3,hj=12e4});function Ej(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1853
1853
  manually, outside a member session that lmctl started. Running lmctl this way is
1854
1854
  not officially supported.
1855
1855
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function cs(t,e=process.env,n){let r=n?.db?.name??Ye(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.
1856
1856
  The session marker may be stale or the team may not be registered in this lmctl database.
1857
1857
  Consulted ${di(r,s)}
1858
1858
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function Rb(t){return`unknown option --from
1859
- ${Ej(t)}`}function Dc(t,e){let n=$p(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function $p(t,e){let n=t[jf];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let o of e.listRootTeams()){let i;try{i=rn(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 Zi=L(()=>{"use strict";bt();Mo();Bt();Cn();sn()});function ds(t){let e=Un(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Mc=L(()=>{"use strict";ot()});function Pp(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=Fe({path:Ce(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&&rt(a.holder_pid)),pollMs:Tj,settleMs:wj,maxHoldMs:Us(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 xb(t){let e=t.literalPrompt?t.newMessage:vj(t.newMessage,{newMessageFrom:t.newMessageFrom??Sj(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=Pp(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await Ki(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&&ze(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 vj(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1860
- `)}function Sj(t){return`${t.teamfile}:${t.alias}`}var a7,Tj,wj,Up=L(()=>{"use strict";Bn();re();le();bt();zr();Wt();a7=60*60*1e3,Tj=2e3,wj=5e3});async function $c(t){let e=t.onEvent??(()=>{}),n=bj(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??Fe({path:Ce(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)}
1861
- `)}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=>Ve(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=>Mj(C,t.env??process.env)),y=E.sender,T=_?"native:"+h.provider+":"+h.sessionid:await $j(n,{explicitRoot:t.rootFlag,sender:y,receiverTeamfile:g,operatorOrigin:E.origin==="operator"}),w=t.env??process.env;if(!_){let C=await W(n,M=>M.getRootTeam(T)?.name??null);C!==null&&(w.LMBEE_TEAM_NAME=C)}if(o=await Nj(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:Hs(w.LMCTL_INVOCATION_ID)}),i=Cj(n,o),t.signal?.aborted)throw m(),Error("Chat turn cancelled");o!==null&&(w.LMCTL_INVOCATION_ID=String(o));try{_||Ys(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 Pb(n,g,h.alias);if(S!==null){let C=Qi(S);return us(o,r,t.prompt,C,"unavailable"),d=Fp(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 us(o,r,t.prompt,P,"unavailable"),d=ea(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await Ij(n,g,h.alias);if(C.busy){let M=await kj(n,g,h.alias);return M+=await Aj(n,g,h.alias),us(o,r,t.prompt,M,"unavailable"),d=Fp(M,null),{status:"busy",message:M,teamChatLogId:null}}b=C.idleReclaim}if(y!==null&&y.teamfile!==g){let C=await W(n,M=>sw(M,{root:T,sender:y,receiverTeamfile:g,receiverAlias:h.alias,now:new Date}));if(C.stop){let M=iw(C.chain);return us(o,r,t.prompt,M,"cycle"),d=ea(M,null),{status:"error",errorKind:"cycle",message:M,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await Pj(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 M=Ub(g,h.alias,C.current);return M+=` ${Dp(Op({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,us(o,r,t.prompt,M,"unavailable"),d=Fp(M,null),{status:"busy",message:M,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=sl(M=>W(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,M)),{intervalMs:Mb,onError:M=>{ye()&&ze(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:M instanceof Error?M.message:String(M)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Za({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=f.startedAt);let k=await xb({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 Fj(n,{...r,message:C,usage:f}),l!==null&&(t.onAccepted?.(xn(l)),o!==null&&await Lj(n,o,l))),o!==null&&await xj(n,o,C)}});u=k.prompt;let N=k.status==="stalled",O=k.status==="empty",I=null,v=N?`provider stalled${k.stalledAfterMs!==void 0?` after ${k.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":k.status==="error"?k.error??k.receipt:null,A=N||O||k.status==="error"?"error":"ok",R=await ti(f,{status:k.status,sessionId:k.sessionId,usage:k.usage},()=>ff(n),{db:n.dal?.db,dbPath:Ce(n),env:n.env});l!==null?(await Ob(n,l,{...r,message:u,response:k.receipt,status:A,error_detail:v,usage:R}),c=!0,I=l):I=await Db(n,{...r,message:u,response:k.receipt,status:A,error_detail:v,usage:R});let x=k.status!=="error"?k.warnings:void 0;if(N||O){let C=v;us(o,r,u,C,"error"),d=ea(C,I,k.receipt,x)}else d=Oj(k.receipt,I,x);return{status:N?"stalled":O?"empty":"ok",replyText:k.receipt,wroteDelta:k.wroteDelta,teamChatLogId:I,messageId:I===null?null:xn(I),durationMs:k.durationMs,usage:R,errorClass:N||O?Mn(v,{model:f.model_requested,status:N?"stalled":"empty"}).class:null}}catch(p){let _=p instanceof Error?p.message:String(p),h=p,g=f?await ti(f,{status:$s(_,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>ff(n),{db:n.dal?.db,dbPath:Ce(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Ob(n,l,{...r,message:u,response:null,status:"error",error_detail:_,usage:g}),c=!0),l===null&&r!==null&&g&&(l=await Db(n,{...r,message:u,response:null,status:"error",error_detail:_,usage:g})),us(o,r,u,_,"error"),d={...ea(_,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:xn(l),usage:g,errorClass:Mn(_,{model:f?.model_requested}).class}}finally{t.signal?.removeEventListener("abort",m),i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await jj(n,r,xn(l)),s!==null&&await Uj(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await Rj(n,o,d??ea("chat turn exited without a terminal outcome",null))}}function bj(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function Ij(t,e,n){let r=await W(t,o=>(Ll(o,e,n),en(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await W(t,o=>wb(o,r,e,n));return{busy:!s,idleReclaim:s}}async function kj(t,e,n){let r=await Pb(t,e,n);if(r!==null)return Qi(r);let s=await W(t,o=>o.getAgentInflight(e,n));return s!==null?Ub(e,n,s):`${n} is busy; wait and retry`}async function Aj(t,e,n){let r=await W(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Dp(Op({holderPid:r.holder_pid,since:r.started_at}))}`}async function Nj(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:Dj(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()&&ze(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function Rj(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ye()&&ze(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function xj(t,e,n){try{await W(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ye()&&ze(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Lj(t,e,n){try{await W(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ye()&&ze(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function Cj(t,e){if(e===null)return;let n=setInterval(()=>{W(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ye()&&ze(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Mb);return n.unref?.(),n}function $b(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function Oj(t,e,n){return{status:"done",result_summary:Pc(t),error:null,team_chat_log_id:e,...$b(n)}}function Fp(t,e){return{status:"busy",result_summary:Pc(t),error:t,team_chat_log_id:e}}function ea(t,e,n,r){return{status:"error",result_summary:n===void 0?mT(t,500):Pc(n),error:t,team_chat_log_id:e,...$b(r)}}function Pc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function Dj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Mj(t,e){let n=Dc(e,t);if(n.ok)return{sender:ds(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(cs("chat",e,t))}async function $j(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=>ow(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function Pj(t,e){return await W(t,n=>{let r=ye(),s=ir(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:fr(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&ze(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:Cb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&ze(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:Cb(s.current)})),{acquired:!1,current:s.current})})}async function Pb(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(Mp(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:Mp(s).live?s:null})}function Cb(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 Uj(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)}
1859
+ ${Ej(t)}`}function Dc(t,e){let n=$p(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function $p(t,e){let n=t[jf];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let o of e.listRootTeams()){let i;try{i=rn(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 Zi=L(()=>{"use strict";bt();Mo();Bt();Cn();sn()});function ds(t){let e=Un(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Mc=L(()=>{"use strict";ot()});function Pp(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=Fe({path:Ce(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&&rt(a.holder_pid)),pollMs:wj,settleMs:Tj,maxHoldMs:Us(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 xb(t){let e=t.literalPrompt?t.newMessage:vj(t.newMessage,{newMessageFrom:t.newMessageFrom??Sj(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=Pp(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await Ki(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&&ze(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 vj(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1860
+ `)}function Sj(t){return`${t.teamfile}:${t.alias}`}var a7,wj,Tj,Up=L(()=>{"use strict";Bn();re();le();bt();zr();Wt();a7=60*60*1e3,wj=2e3,Tj=5e3});async function $c(t){let e=t.onEvent??(()=>{}),n=bj(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??Fe({path:Ce(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)}
1861
+ `)}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=>Ve(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=>Mj(C,t.env??process.env)),y=E.sender,w=_?"native:"+h.provider+":"+h.sessionid:await $j(n,{explicitRoot:t.rootFlag,sender:y,receiverTeamfile:g,operatorOrigin:E.origin==="operator"}),T=t.env??process.env;if(!_){let C=await W(n,M=>M.getRootTeam(w)?.name??null);C!==null&&(T.LMBEE_TEAM_NAME=C)}if(o=await Nj(n,{receiverTeamfile:g,receiverAlias:h.alias,sender:y,rootTeamfile:w,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:E.origin,parentInvocationId:Hs(T.LMCTL_INVOCATION_ID)}),i=Cj(n,o),t.signal?.aborted)throw m(),Error("Chat turn cancelled");o!==null&&(T.LMCTL_INVOCATION_ID=String(o));try{_||Ys(n,Ie(g),g)}catch{}r={root_teamfile:w,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 Pb(n,g,h.alias);if(S!==null){let C=Qi(S);return us(o,r,t.prompt,C,"unavailable"),d=Fp(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 us(o,r,t.prompt,P,"unavailable"),d=ea(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await Ij(n,g,h.alias);if(C.busy){let M=await kj(n,g,h.alias);return M+=await Aj(n,g,h.alias),us(o,r,t.prompt,M,"unavailable"),d=Fp(M,null),{status:"busy",message:M,teamChatLogId:null}}b=C.idleReclaim}if(y!==null&&y.teamfile!==g){let C=await W(n,M=>sT(M,{root:w,sender:y,receiverTeamfile:g,receiverAlias:h.alias,now:new Date}));if(C.stop){let M=iT(C.chain);return us(o,r,t.prompt,M,"cycle"),d=ea(M,null),{status:"error",errorKind:"cycle",message:M,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await Pj(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 M=Ub(g,h.alias,C.current);return M+=` ${Dp(Op({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,us(o,r,t.prompt,M,"unavailable"),d=Fp(M,null),{status:"busy",message:M,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=sl(M=>W(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,M)),{intervalMs:Mb,onError:M=>{ye()&&ze(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:M instanceof Error?M.message:String(M)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Za({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=f.startedAt);let k=await xb({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 Fj(n,{...r,message:C,usage:f}),l!==null&&(t.onAccepted?.(xn(l)),o!==null&&await Lj(n,o,l))),o!==null&&await xj(n,o,C)}});u=k.prompt;let N=k.status==="stalled",O=k.status==="empty",I=null,v=N?`provider stalled${k.stalledAfterMs!==void 0?` after ${k.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":k.status==="error"?k.error??k.receipt:null,A=N||O||k.status==="error"?"error":"ok",R=await ti(f,{status:k.status,sessionId:k.sessionId,usage:k.usage},()=>ff(n),{db:n.dal?.db,dbPath:Ce(n),env:n.env});l!==null?(await Ob(n,l,{...r,message:u,response:k.receipt,status:A,error_detail:v,usage:R}),c=!0,I=l):I=await Db(n,{...r,message:u,response:k.receipt,status:A,error_detail:v,usage:R});let x=k.status!=="error"?k.warnings:void 0;if(N||O){let C=v;us(o,r,u,C,"error"),d=ea(C,I,k.receipt,x)}else d=Oj(k.receipt,I,x);return{status:N?"stalled":O?"empty":"ok",replyText:k.receipt,wroteDelta:k.wroteDelta,teamChatLogId:I,messageId:I===null?null:xn(I),durationMs:k.durationMs,usage:R,errorClass:N||O?Mn(v,{model:f.model_requested,status:N?"stalled":"empty"}).class:null}}catch(p){let _=p instanceof Error?p.message:String(p),h=p,g=f?await ti(f,{status:$s(_,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>ff(n),{db:n.dal?.db,dbPath:Ce(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Ob(n,l,{...r,message:u,response:null,status:"error",error_detail:_,usage:g}),c=!0),l===null&&r!==null&&g&&(l=await Db(n,{...r,message:u,response:null,status:"error",error_detail:_,usage:g})),us(o,r,u,_,"error"),d={...ea(_,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:xn(l),usage:g,errorClass:Mn(_,{model:f?.model_requested}).class}}finally{t.signal?.removeEventListener("abort",m),i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await jj(n,r,xn(l)),s!==null&&await Uj(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await Rj(n,o,d??ea("chat turn exited without a terminal outcome",null))}}function bj(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function Ij(t,e,n){let r=await W(t,o=>(Ll(o,e,n),en(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await W(t,o=>Tb(o,r,e,n));return{busy:!s,idleReclaim:s}}async function kj(t,e,n){let r=await Pb(t,e,n);if(r!==null)return Qi(r);let s=await W(t,o=>o.getAgentInflight(e,n));return s!==null?Ub(e,n,s):`${n} is busy; wait and retry`}async function Aj(t,e,n){let r=await W(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Dp(Op({holderPid:r.holder_pid,since:r.started_at}))}`}async function Nj(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:Dj(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()&&ze(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function Rj(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ye()&&ze(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function xj(t,e,n){try{await W(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ye()&&ze(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Lj(t,e,n){try{await W(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ye()&&ze(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function Cj(t,e){if(e===null)return;let n=setInterval(()=>{W(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ye()&&ze(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Mb);return n.unref?.(),n}function $b(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function Oj(t,e,n){return{status:"done",result_summary:Pc(t),error:null,team_chat_log_id:e,...$b(n)}}function Fp(t,e){return{status:"busy",result_summary:Pc(t),error:t,team_chat_log_id:e}}function ea(t,e,n,r){return{status:"error",result_summary:n===void 0?mw(t,500):Pc(n),error:t,team_chat_log_id:e,...$b(r)}}function Pc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function Dj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Mj(t,e){let n=Dc(e,t);if(n.ok)return{sender:ds(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(cs("chat",e,t))}async function $j(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=>oT(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function Pj(t,e){return await W(t,n=>{let r=ye(),s=ir(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:fr(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&ze(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:Cb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&ze(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:Cb(s.current)})),{acquired:!1,current:s.current})})}async function Pb(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(Mp(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:Mp(s).live?s:null})}function Cb(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 Uj(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)}
1862
1862
  `)}return!1}function Ub(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 Fj(t,e){let n=ta(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)}
1863
1863
  `),null}}async function Ob(t,e,n){let r=ta(n.message),s=n.response===null?null:ta(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)}
1864
1864
  `)}}async function jj(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)}
@@ -1867,9 +1867,9 @@ ${Ej(t)}`}function Dc(t,e){let n=$p(t,e);return n.ok?{ok:!0,identity:n.identity,
1867
1867
  ${n.map((s,o)=>` ${o+1}) ${s}`).join(`
1868
1868
  `)}
1869
1869
  `);;){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.
1870
- `)}}close(){this.rl?.close()}}});function Fc(t){return/\S\s+\S/u.test(t)}function jb(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("-")&&!Fc(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=Un(e)??(e.endsWith(":")&&Oe(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||Oe(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Fc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Fc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Fc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return wf(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function jc(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 Wb=L(()=>{"use strict";Ge();ot()});import{spawnSync as Gp}from"node:child_process";import{existsSync as Bb,readFileSync as Xb}from"node:fs";import{homedir as qb}from"node:os";import{resolve as Xp}from"node:path";function po(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 Bj(){let t=Gp("agy",["models"],{encoding:"utf-8",timeout:Hj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function qj(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 fs(t){if(!t&&Wp)return Wp;let e=o=>(t||(Wp=o),o),n;try{n=(t??Xj??Bj)()}catch(o){return e({available:!1,models:[],reason:o instanceof Error?po("agy models",o):`agy models could not be run: ${String(o)}`})}if(n.error)return e({available:!1,models:[],reason:po("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}=qj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r,displayNames:s})}function Vj(){let t=Gp("codex",["debug","models"],{encoding:"utf-8",timeout:Gj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Kj(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 ms(t){if(!t&&Hp)return Hp;let e=s=>(t||(Hp=s),s),n;try{n=(t??Jj??Vj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?po("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:po("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=Kj(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 zj(t){let e=Gp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:Yj});return{status:e.status,stdout:e.stdout??"",error:e.error}}function Vp(t,e){if(!e&&Bp.has(t))return Bp.get(t);let n=i=>(e||Bp.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??zj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?po(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:po(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 Jp(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=Zj(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=Vp(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=ps(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: ${na(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=fs(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: ${na(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||mo.includes(r.model))continue;fo.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${na(fo)}. 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): ${na(mo)}. 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===Hb&&n.push(`[${r.alias}] model="${Hb}" 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=ms(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: ${na(o.models)}`);continue}r.model&&(Gb.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 Vb(t,e={}){let n=t.filter(i=>i.model!==void 0&&Gb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await vt();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=Qa(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=Yy(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")&&Wj.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 Jb(t,e={}){return(await Vb(t,e)).warnings}async function Kb(t,e={}){return(await Vb(t,e)).errors}function ps(t){let e=process.env.KIMI_CODE_HOME||Xp(qb(),".kimi-code"),n=t??Xp(e,"config.toml");if(!Bb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=Xb(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=Qj(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 Qj(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 Zj(t){let e=t??Xp(qb(),".config","opencode","opencode.json");if(!Bb(e))return{available:!0,models:[]};let n;try{n=JSON.parse(Xb(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:eW(n)}}function eW(t){if(!qp(t))return[];let e=Wc(t.provider)??Wc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!qp(s))continue;let o=Wc(s.models)??Wc(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function Wc(t){return qp(t)?t:null}function qp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function na(t){return t.length>0?t.join(", "):"(none)"}var Gb,Wj,fo,mo,Hb,Hj,Wp,Xj,Gj,Hp,Jj,Yj,Bp,ho=L(()=>{"use strict";Qt();Jr();Gb=new Set(Object.keys(Zt).filter(t=>t!=="codex"&&t!=="kimi")),Wj=/\d\.(?=\d)/,fo=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],mo=["deepseek-flash","deepseek-pro"],Hb="gpt-5.3-codex-spark",Hj=15e3;Wp=null;Gj=5e3;Hp=null;Yj=5e3;Bp=new Map});function Hc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Yb(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 Zt[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 tW(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=Zt[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")||Hc(t)&&!Yb(o)||n.push(o)}return[...new Set(n)].sort()}async function Bc(t){let e;switch(t){case"dsh":e=[...mo,...fo];break;case"codex":e=ms().models;break;case"agy":e=fs().models;break;case"kimi":e=ps().models;break;case"opencode":e=Vp("").models;break;default:{let{catalog:n}=await vt();e=n?tW(t,n):[]}}return[...new Set(e.filter(n=>!Hc(t)||Yb(n)))].sort()}var Kp=L(()=>{"use strict";Qt();Jr();ho()});var tI={};me(tI,{MODEL_PROVIDERS:()=>qn,knownModelNames:()=>_o,runModels:()=>Xc});function Zb(t,e){switch(t){case"codex":return ms();case"agy":return fs();case"kimi":return ps();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 _o(t){if(!qn.includes(t))return Bc(t);let e=t==="claude"?await vt():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return Zb(t,e).models}function Yp(t,e){return t==="agy"?e.replace(/-(low|medium|high)$/i,""):e}function zp(t,e,n){if(!qn.includes(t)||!n.catalog)return;let r=rW[t],s=Yp(t,e);return n.catalog.records.find(o=>o.native?.[r]===s)}function ra(t,e,n){let r=St(t,e,n.catalog,n.aliases).state;return r.kind==="priced"||r.kind==="estimated"||r.kind==="known-unpriced"}function sW(t,e,n){if(zp(t,e,n))return!0;let r=eI(t,e,n)?.state;return r?.kind==="priced"||r?.kind==="estimated"||r?.kind==="known-unpriced"}function oW(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)&&ra("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(Yp("agy",a.native.agy));continue}if(a.mode!=="chat")continue;let l=a.source_model_id.split("/").at(-1);(/^gemini-\d/.test(l)?ra("gemini",l,n):a.provider==="anthropic"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(l)?ra("claude",l,n):/^gpt-oss-\d/.test(l)?ra("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)&&ra("kimi",l,n)&&s.add(l)}}let o=new Set(e);return[...s].filter(i=>!o.has(i)&&sW(t,i,n))}function eI(t,e,n){if(!n.catalog)return null;if(zp(t,e,n)||t!=="agy")return St(t,e,n.catalog,n.aliases);let s=Yp("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 St("agy",s,{...n.catalog,records:o},n.aliases)}function Qb(t,e,n,r,s){let o=zp(t,e,r),i=eI(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 Xc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(zb),0;let r=ae(t,[],["--old","--json"]),s=r.positionals.find(u=>u!=="all"&&!qn.includes(u)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${qn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1870
+ `)}}close(){this.rl?.close()}}});function Fc(t){return/\S\s+\S/u.test(t)}function jb(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("-")&&!Fc(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=Un(e)??(e.endsWith(":")&&Oe(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||Oe(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Fc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Fc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Fc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return Tf(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function jc(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 Wb=L(()=>{"use strict";Ge();ot()});import{spawnSync as Gp}from"node:child_process";import{existsSync as Bb,readFileSync as Xb}from"node:fs";import{homedir as qb}from"node:os";import{resolve as Xp}from"node:path";function po(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 Bj(){let t=Gp("agy",["models"],{encoding:"utf-8",timeout:Hj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function qj(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 fs(t){if(!t&&Wp)return Wp;let e=o=>(t||(Wp=o),o),n;try{n=(t??Xj??Bj)()}catch(o){return e({available:!1,models:[],reason:o instanceof Error?po("agy models",o):`agy models could not be run: ${String(o)}`})}if(n.error)return e({available:!1,models:[],reason:po("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}=qj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r,displayNames:s})}function Vj(){let t=Gp("codex",["debug","models"],{encoding:"utf-8",timeout:Gj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Kj(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 ms(t){if(!t&&Hp)return Hp;let e=s=>(t||(Hp=s),s),n;try{n=(t??Jj??Vj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?po("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:po("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=Kj(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 zj(t){let e=Gp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:Yj});return{status:e.status,stdout:e.stdout??"",error:e.error}}function Vp(t,e){if(!e&&Bp.has(t))return Bp.get(t);let n=i=>(e||Bp.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??zj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?po(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:po(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 Jp(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=Zj(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=Vp(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=ps(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: ${na(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=fs(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: ${na(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||mo.includes(r.model))continue;fo.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${na(fo)}. 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): ${na(mo)}. 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===Hb&&n.push(`[${r.alias}] model="${Hb}" 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=ms(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: ${na(o.models)}`);continue}r.model&&(Gb.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 Vb(t,e={}){let n=t.filter(i=>i.model!==void 0&&Gb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await vt();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=Qa(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=Yy(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")&&Wj.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 Jb(t,e={}){return(await Vb(t,e)).warnings}async function Kb(t,e={}){return(await Vb(t,e)).errors}function ps(t){let e=process.env.KIMI_CODE_HOME||Xp(qb(),".kimi-code"),n=t??Xp(e,"config.toml");if(!Bb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=Xb(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=Qj(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 Qj(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 Zj(t){let e=t??Xp(qb(),".config","opencode","opencode.json");if(!Bb(e))return{available:!0,models:[]};let n;try{n=JSON.parse(Xb(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:eW(n)}}function eW(t){if(!qp(t))return[];let e=Wc(t.provider)??Wc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!qp(s))continue;let o=Wc(s.models)??Wc(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function Wc(t){return qp(t)?t:null}function qp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function na(t){return t.length>0?t.join(", "):"(none)"}var Gb,Wj,fo,mo,Hb,Hj,Wp,Xj,Gj,Hp,Jj,Yj,Bp,ho=L(()=>{"use strict";Qt();Jr();Gb=new Set(Object.keys(Zt).filter(t=>t!=="codex"&&t!=="kimi")),Wj=/\d\.(?=\d)/,fo=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],mo=["deepseek-flash","deepseek-pro"],Hb="gpt-5.3-codex-spark",Hj=15e3;Wp=null;Gj=5e3;Hp=null;Yj=5e3;Bp=new Map});function Hc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Yb(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 Zt[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 tW(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=Zt[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")||Hc(t)&&!Yb(o)||n.push(o)}return[...new Set(n)].sort()}async function Bc(t){let e;switch(t){case"dsh":e=[...mo,...fo];break;case"codex":e=ms().models;break;case"agy":e=fs().models;break;case"kimi":e=ps().models;break;case"opencode":e=Vp("").models;break;default:{let{catalog:n}=await vt();e=n?tW(t,n):[]}}return[...new Set(e.filter(n=>!Hc(t)||Yb(n)))].sort()}var Kp=L(()=>{"use strict";Qt();Jr();ho()});var tI={};me(tI,{MODEL_PROVIDERS:()=>qn,knownModelNames:()=>_o,runModels:()=>Xc});function Zb(t,e){switch(t){case"codex":return ms();case"agy":return fs();case"kimi":return ps();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 _o(t){if(!qn.includes(t))return Bc(t);let e=t==="claude"?await vt():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return Zb(t,e).models}function Yp(t,e){return t==="agy"?e.replace(/-(low|medium|high)$/i,""):e}function zp(t,e,n){if(!qn.includes(t)||!n.catalog)return;let r=rW[t],s=Yp(t,e);return n.catalog.records.find(o=>o.native?.[r]===s)}function ra(t,e,n){let r=St(t,e,n.catalog,n.aliases).state;return r.kind==="priced"||r.kind==="estimated"||r.kind==="known-unpriced"}function sW(t,e,n){if(zp(t,e,n))return!0;let r=eI(t,e,n)?.state;return r?.kind==="priced"||r?.kind==="estimated"||r?.kind==="known-unpriced"}function oW(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)&&ra("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(Yp("agy",a.native.agy));continue}if(a.mode!=="chat")continue;let l=a.source_model_id.split("/").at(-1);(/^gemini-\d/.test(l)?ra("gemini",l,n):a.provider==="anthropic"&&/^claude-[a-z]+-\d+(?:-\d+)?$/.test(l)?ra("claude",l,n):/^gpt-oss-\d/.test(l)?ra("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)&&ra("kimi",l,n)&&s.add(l)}}let o=new Set(e);return[...s].filter(i=>!o.has(i)&&sW(t,i,n))}function eI(t,e,n){if(!n.catalog)return null;if(zp(t,e,n)||t!=="agy")return St(t,e,n.catalog,n.aliases);let s=Yp("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 St("agy",s,{...n.catalog,records:o},n.aliases)}function Qb(t,e,n,r,s){let o=zp(t,e,r),i=eI(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 Xc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(zb),0;let r=ae(t,[],["--old","--json"]),s=r.positionals.find(u=>u!=="all"&&!qn.includes(u)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${qn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1871
1871
  ${zb}`),2;let i=n.selections?.map(u=>u.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...qn]:qn.filter(u=>r.positionals.includes(u)));e.stderr.write(`querying models: ${i.join(", ")} ...
1872
- `);let a=await(n.loadSnapshot??vt)(),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):Zb(u,a)}catch(g){f={available:!1,models:[],reason:g instanceof Error?g.message:String(g)}}let m=nW[u]??"provider model list",p=f.available?[...new Set(f.models)].map(g=>Qb(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?oW(u,f.models,a).map(g=>Qb(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 Z(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
+ `);let a=await(n.loadSnapshot??vt)(),l=Y(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):Zb(u,a)}catch(g){f={available:!1,models:[],reason:g instanceof Error?g.message:String(g)}}let m=nW[u]??"provider model list",p=f.available?[...new Set(f.models)].map(g=>Qb(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?oW(u,f.models,a).map(g=>Qb(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(Y(r,"--json"))return Z(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.
1873
1873
  `),e.stdout.write(`Price catalog: ${a.source}${a.generatedAt?` (${a.generatedAt})`:""}
1874
1874
  `);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(`
1875
1875
  ${u.provider} (${u.source})
@@ -1902,12 +1902,12 @@ Old catalog-known ids are omitted unless --old is used. Claude catalog ids are u
1902
1902
  `))}return s}var J,hs=L(()=>{J=class t extends Error{line;column;codeblock;constructor(e,n){let[r,s]=pW(n.toml,n.ptr),o=hW(n.toml,r,s);super(`Invalid TOML document: ${e}
1903
1903
 
1904
1904
  ${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 Yc(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+=`
1905
- `: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 th=L(()=>{hs();});var _W,sa,nh=L(()=>{_W=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,sa=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(_W);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 At(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function sh(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function ia(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?fI(t):uI(t);return t.d++,s}return r===34||r===39?Yc(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?zc(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?gW(t,r,e):t.s.charCodeAt(t.p+2)===58?yW(t,r,e):zc(t,t.p,r,0,e)}function zc(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||sh(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return rh(t,e,16,s);if(o===98)return rh(t,e,2,s);if(o===111)return rh(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else At(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!sh(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)||(At(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):dI(t,l,10,e)}function rh(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!sh(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):At(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("_","")),dI(t,i,n,e)}function dI(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 gW(t,e,n){let r=t.p++,s;if(!At(e)||!At(t.s.charCodeAt(t.p++))||!At(t.s.charCodeAt(t.p++))||!At(t.s.charCodeAt(t.p++)))return zc(t,t.p=r,e,0,n);if(t.p+=5,At(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,!At(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return oa(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(;At(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 oa(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return oa(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return oa(t,o,2,s,r)}function yW(t,e,n){let r=t.p;if(!At(e)||!At(t.s.charCodeAt(++t.p)))return zc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;At(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return oa(t,s,4,!1,r)}function oa(t,e,n,r,s,o){if(t.ld){let i=new sa(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 oh=L(()=>{th();ih();hs();nh();});function EW(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 Vt(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;EW(t)}}var ah=L(()=>{hs();});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(Yc(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 uI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Vt(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),Vt(t,!0,!0);let d=ia(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Vt(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 fI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Vt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(ia(t,93)),Vt(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 ih=L(()=>{th();oh();ah();hs();});function mI(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 pI(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 go(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++,Vt(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=mI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(pI(n,u,o),i=!0)}else{o=n.p;let c=Qc(n),d=mI(n,c,a,l,0);!d&&!i&&pI(n,d,o),Vt(n,!0,!0);let u=ia(n,void 0);d&&!i&&(d[1][d[0]]=u)}Vt(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),Vt(n)}return r}var hI=L(()=>{ih();oh();ah();hs();});var DZ,_I=L(()=>{DZ=!!"".isWellFormed});var lh=L(()=>{hI();_I();nh();hs();});import{readFileSync as TW}from"node:fs";import{homedir as wW}from"node:os";import{join as gI,resolve as vW}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?vW(e):gI(n||gI(t.HOME||wW(),".lmctl"),"init.toml")}function SW(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function hn(t,e="<init.toml>"){let{document:n}=yI(t,e),r={};for(let o of _s){let i=n[o];if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date)throw new Je(e,"schema","["+o+"] must be a table with provider and model1");let a={};for(let l of aa){let c=i[l];if(typeof c!="string"||!c.trim())throw new Je(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=_s.find(i=>!r[i]);if(o)throw new Je(e,"schema","["+o+"] is not in "+e+"; this needs the example slots ["+_s.join("], [")+"] -- add ["+o+"] with provider and model1");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function yI(t,e="<init.toml>"){let n;try{n=go(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new Je(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 bW(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(TW(t))}catch(n){let r=n;throw new Je(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function la(t=Mt()){return hn(bW(t),t)}var _s,aa,Je,Zc=L(()=>{"use strict";lh();_s=["Provider1","Provider2","Provider3"],aa=["provider","model1"];Je=class extends Error{path;kind;line;column;detail;constructor(e,n,r,s=1,o=1){let i=SW(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 IW(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1905
+ `: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 th=L(()=>{hs();});var _W,sa,nh=L(()=>{_W=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,sa=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(_W);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 At(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function sh(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function ia(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?fI(t):uI(t);return t.d++,s}return r===34||r===39?Yc(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?zc(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?gW(t,r,e):t.s.charCodeAt(t.p+2)===58?yW(t,r,e):zc(t,t.p,r,0,e)}function zc(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||sh(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return rh(t,e,16,s);if(o===98)return rh(t,e,2,s);if(o===111)return rh(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else At(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!sh(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)||(At(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):dI(t,l,10,e)}function rh(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!sh(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):At(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("_","")),dI(t,i,n,e)}function dI(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 gW(t,e,n){let r=t.p++,s;if(!At(e)||!At(t.s.charCodeAt(t.p++))||!At(t.s.charCodeAt(t.p++))||!At(t.s.charCodeAt(t.p++)))return zc(t,t.p=r,e,0,n);if(t.p+=5,At(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,!At(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return oa(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(;At(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 oa(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return oa(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return oa(t,o,2,s,r)}function yW(t,e,n){let r=t.p;if(!At(e)||!At(t.s.charCodeAt(++t.p)))return zc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;At(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return oa(t,s,4,!1,r)}function oa(t,e,n,r,s,o){if(t.ld){let i=new sa(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 oh=L(()=>{th();ih();hs();nh();});function EW(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 Vt(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;EW(t)}}var ah=L(()=>{hs();});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(Yc(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 uI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Vt(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),Vt(t,!0,!0);let d=ia(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Vt(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 fI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Vt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(ia(t,93)),Vt(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 ih=L(()=>{th();oh();ah();hs();});function mI(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 pI(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 go(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++,Vt(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=mI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(pI(n,u,o),i=!0)}else{o=n.p;let c=Qc(n),d=mI(n,c,a,l,0);!d&&!i&&pI(n,d,o),Vt(n,!0,!0);let u=ia(n,void 0);d&&!i&&(d[1][d[0]]=u)}Vt(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),Vt(n)}return r}var hI=L(()=>{ih();oh();ah();hs();});var DZ,_I=L(()=>{DZ=!!"".isWellFormed});var lh=L(()=>{hI();_I();nh();hs();});import{readFileSync as wW}from"node:fs";import{homedir as TW}from"node:os";import{join as gI,resolve as vW}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?vW(e):gI(n||gI(t.HOME||TW(),".lmctl"),"init.toml")}function SW(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function hn(t,e="<init.toml>"){let{document:n}=yI(t,e),r={};for(let o of _s){let i=n[o];if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date)throw new Je(e,"schema","["+o+"] must be a table with provider and model1");let a={};for(let l of aa){let c=i[l];if(typeof c!="string"||!c.trim())throw new Je(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=_s.find(i=>!r[i]);if(o)throw new Je(e,"schema","["+o+"] is not in "+e+"; this needs the example slots ["+_s.join("], [")+"] -- add ["+o+"] with provider and model1");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function yI(t,e="<init.toml>"){let n;try{n=go(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new Je(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 bW(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(wW(t))}catch(n){let r=n;throw new Je(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function la(t=Mt()){return hn(bW(t),t)}var _s,aa,Je,Zc=L(()=>{"use strict";lh();_s=["Provider1","Provider2","Provider3"],aa=["provider","model1"];Je=class extends Error{path;kind;line;column;detail;constructor(e,n,r,s=1,o=1){let i=SW(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 IW(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1906
1906
  `){let o=n;n+=r==="\r"&&t[n+1]===`
1907
1907
  `?2:1,e.push({start:o,end:n,text:`
1908
1908
  `,kind:"newline"});continue}if(/\s/.test(r)){n++;continue}if(r==="#"){for(;n<t.length&&t[n]!=="\r"&&t[n]!==`
1909
1909
  `;)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 kW(t){let e=go(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 AW(t){let e=go(t+`
1910
- __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 ch(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 EI(t,e,n=[]){if(n.length===2&&_s.includes(n[0])&&aa.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=>EI(t[o],e[o],[...n,o]))}function TI(t,e){try{let n=hn(t),r=_s.filter(m=>n.slots[m]),s=_s.filter(m=>!n.slots[m]),o=[];for(let m of r)for(let p of aa){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=IW(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=AW(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=kW(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:ch(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=hn(u);for(let m of r)for(let p of aa)if(f.slots[m]?.[p]!==e[m.toLowerCase()][p])throw new Error("managed-value verification failed");if(!EI(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 Je?n.detail:n.message,line:n.line}}}var wI=L(()=>{"use strict";lh();Zc()});import*as vI from"node:child_process";function RW(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 ed(t,e={}){let n=e.spawnSync===void 0&&process.env[xW]==="1",r=e.spawnSync??vI.spawnSync,s=new Set,o=[];for(let i of t){if(s.has(i))continue;s.add(i);let a=kr[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=RW(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}function SI(t){if(t.binary==="<unknown>")return`unknown provider "${t.provider}" \u2014 no binary mapping (allowed: ${Object.keys(kr).join(", ")})`;let e=NW[t.provider],n=e?` (install via ${e})`:"";return t.failureMode==="runs but failed"?`provider "${t.provider}" binary '${t.binary}' found but \`${t.binary} --version\` failed to run cleanly \u2014 check install integrity${n}`:`provider "${t.provider}" binary '${t.binary}' not installed${n}`}var kr,NW,xW,yo=L(()=>{"use strict";kr={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"},NW={claude:"https://docs.claude.com/code",codex:"https://github.com/openai/codex",copilot:"https://docs.github.com/copilot/cli",gemini:"https://github.com/google-gemini/gemini-cli",opencode:"https://opencode.ai",lmplayer:"Install lmplayer and ensure the lmplayer binary is on PATH.",qwen:"https://github.com/QwenLM/qwen-code",agy:"https://antigravity.google",kimi:"https://github.com/MoonshotAI/kimi-code",dsh:"https://github.com/deepseek-ai/deepseek-harness",hermes:"https://github.com/NousResearch/hermes-agent",pi:"https://github.com/badlogic/pi-mono"};xW="LMCTL_SKIP_BINARY_CHECK"});import{spawnSync as LW}from"node:child_process";function II(t){return Eo.filter(e=>t.includes(e))}function CW(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 kI(t){switch(t){case"codex":{let e=ms();if(!e.available)throw new Error(e.reason??"codex returned no models");return e.models}case"agy":{let e=fs();if(!e.available)throw new Error(e.reason??"agy returned no models");return e.models}case"kimi":{let e=ps();if(!e.available)throw new Error(e.reason??"Kimi config has no models");return e.models}case"claude":{let n=(await vt()).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 AI(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:CW(l,e[l]??[])});return{provider1:a(s),provider2:a(o),provider3:a(i)}}function NI(t=LW){return ed(Eo,{spawnSync:t}).filter(e=>e.found).map(e=>e.provider)}function bI(t){return ch(t)}function ca(t){let e=(n,r)=>[`[${n}]`,`provider = ${bI(r.provider)}`,`model1 = ${bI(r.model1)}`].join(`
1910
+ __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 ch(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 EI(t,e,n=[]){if(n.length===2&&_s.includes(n[0])&&aa.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=>EI(t[o],e[o],[...n,o]))}function wI(t,e){try{let n=hn(t),r=_s.filter(m=>n.slots[m]),s=_s.filter(m=>!n.slots[m]),o=[];for(let m of r)for(let p of aa){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=IW(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=AW(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=kW(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:ch(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=hn(u);for(let m of r)for(let p of aa)if(f.slots[m]?.[p]!==e[m.toLowerCase()][p])throw new Error("managed-value verification failed");if(!EI(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 Je?n.detail:n.message,line:n.line}}}var TI=L(()=>{"use strict";lh();Zc()});import*as vI from"node:child_process";function RW(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 ed(t,e={}){let n=e.spawnSync===void 0&&process.env[xW]==="1",r=e.spawnSync??vI.spawnSync,s=new Set,o=[];for(let i of t){if(s.has(i))continue;s.add(i);let a=kr[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=RW(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}function SI(t){if(t.binary==="<unknown>")return`unknown provider "${t.provider}" \u2014 no binary mapping (allowed: ${Object.keys(kr).join(", ")})`;let e=NW[t.provider],n=e?` (install via ${e})`:"";return t.failureMode==="runs but failed"?`provider "${t.provider}" binary '${t.binary}' found but \`${t.binary} --version\` failed to run cleanly \u2014 check install integrity${n}`:`provider "${t.provider}" binary '${t.binary}' not installed${n}`}var kr,NW,xW,yo=L(()=>{"use strict";kr={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"},NW={claude:"https://docs.claude.com/code",codex:"https://github.com/openai/codex",copilot:"https://docs.github.com/copilot/cli",gemini:"https://github.com/google-gemini/gemini-cli",opencode:"https://opencode.ai",lmplayer:"Install lmplayer and ensure the lmplayer binary is on PATH.",qwen:"https://github.com/QwenLM/qwen-code",agy:"https://antigravity.google",kimi:"https://github.com/MoonshotAI/kimi-code",dsh:"https://github.com/deepseek-ai/deepseek-harness",hermes:"https://github.com/NousResearch/hermes-agent",pi:"https://github.com/badlogic/pi-mono"};xW="LMCTL_SKIP_BINARY_CHECK"});import{spawnSync as LW}from"node:child_process";function II(t){return Eo.filter(e=>t.includes(e))}function CW(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 kI(t){switch(t){case"codex":{let e=ms();if(!e.available)throw new Error(e.reason??"codex returned no models");return e.models}case"agy":{let e=fs();if(!e.available)throw new Error(e.reason??"agy returned no models");return e.models}case"kimi":{let e=ps();if(!e.available)throw new Error(e.reason??"Kimi config has no models");return e.models}case"claude":{let n=(await vt()).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 AI(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:CW(l,e[l]??[])});return{provider1:a(s),provider2:a(o),provider3:a(i)}}function NI(t=LW){return ed(Eo,{spawnSync:t}).filter(e=>e.found).map(e=>e.provider)}function bI(t){return ch(t)}function ca(t){let e=(n,r)=>[`[${n}]`,`provider = ${bI(r.provider)}`,`model1 = ${bI(r.model1)}`].join(`
1911
1911
  `);return`# Generated by \`lmctl init\`. This is a STARTING POINT, not a fixed answer --
1912
1912
  # lmctl properties: hierarchical keys such as Provider1.provider, Provider1.model1,
1913
1913
  # and user-defined top-level Env1. edit any value below to change what \`lmctl plan\`/\`lmctl quickrun\` resolve to.
@@ -1930,37 +1930,37 @@ ${e("Provider1",t.provider1)}
1930
1930
  ${e("Provider2",t.provider2)}
1931
1931
 
1932
1932
  ${e("Provider3",t.provider3)}
1933
- `}function Ar(t){try{return la(Mt(process.env,t)).config}catch(e){if(e instanceof Je&&e.kind==="missing")return null;throw e}}function RI(t,e){return TI(t,e)}function xI(t,e,n={}){let r={...lI(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 iI(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 Eo,gs=L(()=>{"use strict";aI();cI();Zc();Zc();wI();ho();Qt();yo();Eo=["claude","codex","agy","kimi"]});import{homedir as OW}from"node:os";function LI(t,e){let n=new Set;return{text:t.replace(MW,(s,o)=>{let i=o.trim(),a=DW[i];return a===void 0?(n.add(i),s):a(e)}),unknownNames:[...n].sort()}}function CI(t){return{workdir:t.workdir,teamfile:t.teamfile,date:$W(t.date)}}function $W(t){return t.toISOString().slice(0,10)}var DW,MW,OI=L(()=>{"use strict";Ge();DW={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>Ei(t.teamfile),home:()=>OW(),date:t=>t.date},MW=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var Eh={};me(Eh,{_setAgyModelsRunnerForTests:()=>BW,_setCatalogSnapshotForTests:()=>HW,_setCodexModelsRunnerForTests:()=>XW,_setLintOpenCodeConfigProbeForTests:()=>VW,_setLintSessiondirFsOpsForTests:()=>GW,_setTeamfileSeedForTests:()=>qW,buildRootTeamRegistrationRow:()=>qI,lintTeamfileStructured:()=>yh,registerRootTeam:()=>td,runLint:()=>Nr,runSeed:()=>ua,seedTeamfile:()=>wo,sha256Text:()=>XI,validateMemberSpec:()=>Nt});import{createHash as PW}from"node:crypto";import{accessSync as UW,constants as DI,existsSync as FW,readFileSync as fh,realpathSync as mh,statSync as jW,writeFileSync as MI}from"node:fs";import{dirname as Es,resolve as PI}from"node:path";function HW(t){da=t??void 0}function WI(t){return Jb(t,da!==void 0?{snapshot:da}:{})}function HI(t){return Kb(t,da!==void 0?{snapshot:da}:{})}function BW(t){_h=t??void 0}function XW(t){gh=t??void 0}function qW(t){FI=t===null,UI=t??(async e=>{let{seed:n}=await Promise.resolve().then(()=>(Bn(),xp)),r=await n(e);return r.success?{sessionId:r.sessionId,warnings:r.warnings,usage:pn(r)}:{error:r.error??"provider seed failed",errorCode:r.errorCode,usage:pn(r),sessionId:r.sessionId}})}function GW(t){ys=t===null?ph:{...ph,...t}}function VW(t){jI=t??Mi}async function JW(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 jI({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 KW(t,e){let n=Es(e),r=new Set,s=[];for(let o of t){if(o.teamfile!==void 0)continue;let i=o.sessiondir??n,a=PI(i);if(r.has(a))continue;let l=YW(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 YW(t){try{if(ys.existsSync(t)){if(!ys.statSync(t).isDirectory())return"ENOTDIR";ys.accessSync(t,DI.W_OK);return}let e=QW(t);if(e===void 0)return;if(!ys.statSync(e).isDirectory())return"ENOTDIR";ys.accessSync(e,DI.W_OK);return}catch(e){return ZW(e)??"permission check failed"}}function zW(t){let e=PI(t);try{return mh(e)}catch{return e}}function QW(t){let e=t;for(;;){try{if(ys.existsSync(e))return e}catch{return}let n=Es(e);if(n===e)return;e=n}}function ZW(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 BI(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=Ti(r,Es(n));e.stderr.write(`notice: checking teamfile and models ...
1933
+ `}function Ar(t){try{return la(Mt(process.env,t)).config}catch(e){if(e instanceof Je&&e.kind==="missing")return null;throw e}}function RI(t,e){return wI(t,e)}function xI(t,e,n={}){let r={...lI(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 iI(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 Eo,gs=L(()=>{"use strict";aI();cI();Zc();Zc();TI();ho();Qt();yo();Eo=["claude","codex","agy","kimi"]});import{homedir as OW}from"node:os";function LI(t,e){let n=new Set;return{text:t.replace(MW,(s,o)=>{let i=o.trim(),a=DW[i];return a===void 0?(n.add(i),s):a(e)}),unknownNames:[...n].sort()}}function CI(t){return{workdir:t.workdir,teamfile:t.teamfile,date:$W(t.date)}}function $W(t){return t.toISOString().slice(0,10)}var DW,MW,OI=L(()=>{"use strict";Ge();DW={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>Ei(t.teamfile),home:()=>OW(),date:t=>t.date},MW=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var Eh={};me(Eh,{_setAgyModelsRunnerForTests:()=>BW,_setCatalogSnapshotForTests:()=>HW,_setCodexModelsRunnerForTests:()=>XW,_setLintOpenCodeConfigProbeForTests:()=>VW,_setLintSessiondirFsOpsForTests:()=>GW,_setTeamfileSeedForTests:()=>qW,buildRootTeamRegistrationRow:()=>qI,lintTeamfileStructured:()=>yh,registerRootTeam:()=>td,runLint:()=>Nr,runSeed:()=>ua,seedTeamfile:()=>To,sha256Text:()=>XI,validateMemberSpec:()=>Nt});import{createHash as PW}from"node:crypto";import{accessSync as UW,constants as DI,existsSync as FW,readFileSync as fh,realpathSync as mh,statSync as jW,writeFileSync as MI}from"node:fs";import{dirname as Es,resolve as PI}from"node:path";function HW(t){da=t??void 0}function WI(t){return Jb(t,da!==void 0?{snapshot:da}:{})}function HI(t){return Kb(t,da!==void 0?{snapshot:da}:{})}function BW(t){_h=t??void 0}function XW(t){gh=t??void 0}function qW(t){FI=t===null,UI=t??(async e=>{let{seed:n}=await Promise.resolve().then(()=>(Bn(),xp)),r=await n(e);return r.success?{sessionId:r.sessionId,warnings:r.warnings,usage:pn(r)}:{error:r.error??"provider seed failed",errorCode:r.errorCode,usage:pn(r),sessionId:r.sessionId}})}function GW(t){ys=t===null?ph:{...ph,...t}}function VW(t){jI=t??Mi}async function JW(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 jI({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 KW(t,e){let n=Es(e),r=new Set,s=[];for(let o of t){if(o.teamfile!==void 0)continue;let i=o.sessiondir??n,a=PI(i);if(r.has(a))continue;let l=YW(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 YW(t){try{if(ys.existsSync(t)){if(!ys.statSync(t).isDirectory())return"ENOTDIR";ys.accessSync(t,DI.W_OK);return}let e=QW(t);if(e===void 0)return;if(!ys.statSync(e).isDirectory())return"ENOTDIR";ys.accessSync(e,DI.W_OK);return}catch(e){return ZW(e)??"permission check failed"}}function zW(t){let e=PI(t);try{return mh(e)}catch{return e}}function QW(t){let e=t;for(;;){try{if(ys.existsSync(e))return e}catch{return}let n=Es(e);if(n===e)return;e=n}}function ZW(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 BI(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=wi(r,Es(n));e.stderr.write(`notice: checking teamfile and models ...
1934
1934
  `);let o=Jp(r.members,{agyModelsRunner:_h,codexModelsRunner:gh});o.push(...await WI(r.members)),s.push(...await HI(r.members));let i=fh(n,"utf8"),a=LI(i,CI({workdir:Es(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(...rm(r.members,Es(n))),o.push(...KW(r.members,n)),o.push(...await JW(r.members,Es(n),e.env));for(let l of s)e.stderr.write(`error: ${l.field}: ${l.message}
1935
- `);for(let l of r.members)hh([l],e),l.session!==void 0&&l.session.length<To&&o.push(`${l.alias}: sessionid is shorter than ${To} chars; run lmctl seed to refresh it`);return{ok:!0,result:{config:r,absTeamfile:n,errors:s,warnings:o}}}async function Nr(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(WW),0;let n=ae(t,[],[]);if(n.error!==void 0)return e.stderr.write(`error: ${n.error}
1935
+ `);for(let l of r.members)hh([l],e),l.session!==void 0&&l.session.length<wo&&o.push(`${l.alias}: sessionid is shorter than ${wo} chars; run lmctl seed to refresh it`);return{ok:!0,result:{config:r,absTeamfile:n,errors:s,warnings:o}}}async function Nr(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(WW),0;let n=ae(t,[],[]);if(n.error!==void 0)return e.stderr.write(`error: ${n.error}
1936
1936
  `),2;if(n.positionals.length!==1)return e.stderr.write(`usage: lmctl lint <teamfile.lmctl>
1937
1937
  `),2;let r=n.positionals[0],s=await BI(r,e);if(!s.ok)return _n(e,s.message);let{errors:o,warnings:i}=s.result;for(let a of i)e.stderr.write(`warning: ${a}
1938
1938
  `);return e.stderr.write(`notice: ${o.length} error${o.length===1?"":"s"}, ${i.length} warning${i.length===1?"":"s"}
1939
1939
  `),o.length>0?1:(e.stdout.write(`ok
1940
1940
  `),0)}function nH(t,e){let n=eH.exec(t);if(n){let s=e.get(n[1].toLowerCase());if(s!==void 0)return{alias:s,message:n[2]}}let r=tH.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 yh(t,e){let n=await BI(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=>nH(c,i));for(let c of l)e.stderr.write(`warning: ${c.alias?`${c.alias}: `:""}${c.message}
1941
1941
  `);return e.stderr.write(`notice: ${a.length} error${a.length===1?"":"s"}, ${l.length} warning${l.length===1?"":"s"}
1942
- `),{status:a.length>0?"error":"ok",errors:a,warnings:l,counts:{errors:a.length,warnings:l.length}}}async function ua(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(dh),0;let n=ae(t,[],[]);return n.error!==void 0?$I(e,n.error,dh):n.positionals.length!==1?$I(e,"expected <teamfile.lmctl>",dh):wo(n.positionals[0],e)}function rH(t,e,n,r){if(e.preamble===void 0)return t.toLowerCase()!=="lead"?void 0:Fl({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 wo(t,e,n={}){let r;try{r=await W(e,y=>Ne(t,y))}catch(y){return _n(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let s;try{s=mh(r)}catch(y){return _n(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let o=Es(r),i;try{i=Ie(r)}catch(y){return _n(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let a=fh(r,"utf8"),l=a.split(`
1943
- `),c=a,d=sH(l),u=Ti(i,o);if(u.length>0){hh(i.members,e);for(let y of u)e.stderr.write(`error: ${y.field}: ${y.message}
1942
+ `),{status:a.length>0?"error":"ok",errors:a,warnings:l,counts:{errors:a.length,warnings:l.length}}}async function ua(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(dh),0;let n=ae(t,[],[]);return n.error!==void 0?$I(e,n.error,dh):n.positionals.length!==1?$I(e,"expected <teamfile.lmctl>",dh):To(n.positionals[0],e)}function rH(t,e,n,r){if(e.preamble===void 0)return t.toLowerCase()!=="lead"?void 0:Fl({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 To(t,e,n={}){let r;try{r=await W(e,y=>Ne(t,y))}catch(y){return _n(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let s;try{s=mh(r)}catch(y){return _n(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let o=Es(r),i;try{i=Ie(r)}catch(y){return _n(e,`${t}: ${y instanceof Error?y.message:String(y)}`)}let a=fh(r,"utf8"),l=a.split(`
1943
+ `),c=a,d=sH(l),u=wi(i,o);if(u.length>0){hh(i.members,e);for(let y of u)e.stderr.write(`error: ${y.field}: ${y.message}
1944
1944
  `);return 1}try{Ys(e,i,r)}catch{}hh(i.members,e),e.stderr.write(`notice: checking teamfile and models ...
1945
1945
  `);for(let y of Jp(i.members,{agyModelsRunner:_h,codexModelsRunner:gh}))e.stderr.write(`warning: ${y}
1946
1946
  `);for(let y of await WI(i.members))e.stderr.write(`warning: ${y}
1947
1947
  `);for(let y of rm(i.members,o))e.stderr.write(`warning: ${y}
1948
1948
  `);let f=await HI(i.members);if(f.length>0){for(let y of f)e.stderr.write(`error: ${y.field}: ${y.message}
1949
- `);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 _n(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<To);for(let y of _)if(!ts(y.provider))return e.stderr.write(`error: ${y.alias}: invalid provider "${y.provider}"
1950
- `),1;if(FI){let y=new Map(_.map(w=>[w.provider,w.alias])),T=ed(y.keys()).filter(w=>!w.found&&w.failureMode==="not installed"&&w.binary!=="<unknown>");if(T.length>0){for(let w of T)e.stderr.write(`error: ${y.get(w.provider)}: ${SI(w)}
1951
- `);return 1}}for(let y of i.members){if(n.signal?.aborted)return _n(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>=To){e.stderr.write(`warning: ${y.alias}: existing sessionid preserved; skipping
1952
- `);continue}let T=y.sessiondir??o;e.stderr.write(`${y.alias}: launching ${y.provider} seed session; this can take several seconds
1953
- `);let w=ui(e,N=>`${y.alias}: still launching (${N}s elapsed)
1949
+ `);return 1}let m=n.replaceSession;if(m){let y=i.members.find(w=>w.alias.toLowerCase()===m.alias.toLowerCase());if(!y||y.teamfile||y.session!==m.sessionid)return _n(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<wo);for(let y of _)if(!ts(y.provider))return e.stderr.write(`error: ${y.alias}: invalid provider "${y.provider}"
1950
+ `),1;if(FI){let y=new Map(_.map(T=>[T.provider,T.alias])),w=ed(y.keys()).filter(T=>!T.found&&T.failureMode==="not installed"&&T.binary!=="<unknown>");if(w.length>0){for(let T of w)e.stderr.write(`error: ${y.get(T.provider)}: ${SI(T)}
1951
+ `);return 1}}for(let y of i.members){if(n.signal?.aborted)return _n(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>=wo){e.stderr.write(`warning: ${y.alias}: existing sessionid preserved; skipping
1952
+ `);continue}let w=y.sessiondir??o;e.stderr.write(`${y.alias}: launching ${y.provider} seed session; this can take several seconds
1953
+ `);let T=ui(e,N=>`${y.alias}: still launching (${N}s elapsed)
1954
1954
  `),S=m?l.map((N,O)=>O===d.get(y.alias.toLowerCase())?N.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,""):N).join(`
1955
1955
  `):l.join(`
1956
- `),b=rH(y.alias,n,r,S),k;try{k=WT(r,y.alias)}catch(N){return w.stop(),_n(e,N instanceof Error?N.message:String(N))}try{let N,O;try{N=await UI({env:e.env,signal:n.signal,onDispatch:()=>{O??=Jc(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":N.error!==void 0||!N.sessionId||N.sessionId.length<To?$s(N.error??"",N.errorCode==="ABORT_ERR"):"ok",sessionId:N.sessionId,usage:pn(N)})}catch(x){throw await O?.finish(Kc(x,{aborted:n.signal?.aborted||x?.code==="ABORT_ERR"})),x}finally{w.stop()}if(n.signal?.aborted)return _n(e,"Seed cancelled during dispatch.");for(let x of N.warnings??[])e.stderr.write(`warning: ${y.alias}: ${x}
1957
- `);if(N.error!==void 0||N.sessionId===void 0||N.sessionId.length<To){let x=`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${N.error!==void 0?`: ${N.error}`:`; ${x}`}
1956
+ `),b=rH(y.alias,n,r,S),k;try{k=Ww(r,y.alias)}catch(N){return T.stop(),_n(e,N instanceof Error?N.message:String(N))}try{let N,O;try{N=await UI({env:e.env,signal:n.signal,onDispatch:()=>{O??=Jc(e,{provider:y.provider,cwd:w,modelRequested:y.model??null,sessionId:""},"operator",{teamfile:r,alias:y.alias})},provider:y.provider,cwd:w,...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":N.error!==void 0||!N.sessionId||N.sessionId.length<wo?$s(N.error??"",N.errorCode==="ABORT_ERR"):"ok",sessionId:N.sessionId,usage:pn(N)})}catch(x){throw await O?.finish(Kc(x,{aborted:n.signal?.aborted||x?.code==="ABORT_ERR"})),x}finally{T.stop()}if(n.signal?.aborted)return _n(e,"Seed cancelled during dispatch.");for(let x of N.warnings??[])e.stderr.write(`warning: ${y.alias}: ${x}
1957
+ `);if(N.error!==void 0||N.sessionId===void 0||N.sessionId.length<wo){let x=`provider did not report a sessionid; no new session was found for ${w} (possible provider workspace/cwd mismatch)`;return e.stderr.write(`error: ${y.alias}: seed failed${N.error!==void 0?`: ${N.error}`:`; ${x}`}
1958
1958
  `),1}let I=d.get(y.alias.toLowerCase());if(I===void 0)return e.stderr.write(`error: ${y.alias}: could not find matching _MEMBER_ line to update
1959
- `),1;let v=zW(T),A=uh(l[I],"sessionid",N.sessionId);A=uh(A,"sessiondir",v);let R=y.model;if(y.model===void 0){let x;try{x=(await He(N.sessionId,y.provider))?.model}catch{x=void 0}x!==void 0&&x.length>0&&(A=uh(A,"model",x),R=x)}if((m||n.guardFile)&&fh(r,"utf8")!==c)return _n(e,`Teamfile changed during seeding; new session ${N.sessionId} was not attached. Existing bindings preserved.`);l[I]=A,p+=1,c=l.join(`
1959
+ `),1;let v=zW(w),A=uh(l[I],"sessionid",N.sessionId);A=uh(A,"sessiondir",v);let R=y.model;if(y.model===void 0){let x;try{x=(await He(N.sessionId,y.provider))?.model}catch{x=void 0}x!==void 0&&x.length>0&&(A=uh(A,"model",x),R=x)}if((m||n.guardFile)&&fh(r,"utf8")!==c)return _n(e,`Teamfile changed during seeding; new session ${N.sessionId} was not attached. Existing bindings preserved.`);l[I]=A,p+=1,c=l.join(`
1960
1960
  `),MI(r,c,"utf8"),n.onSeeded?.({alias:y.alias,provider:y.provider,sessionid:N.sessionId,sessiondir:v,...R!==void 0?{model:R}:{}}),e.stdout.write(`${y.alias}: seeded ${N.sessionId} provider=${y.provider} sessiondir=${v} model=${R?JSON.stringify(R):"default (not reported)"}
1961
1961
  `)}finally{k()}}let h=l.join(`
1962
1962
  `),g=lH(h,mh(r));g!==h&&MI(r,g,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1963
- `);let E=new Date().toISOString();try{await W(e,y=>{td(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return _n(e,y instanceof Error?y.message:String(y))}return 0}function XI(t){return PW("sha256").update(t).digest("hex")}function qI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:XI(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function td(t,e){let n=bl(e.rawText,e.teamfilePath);wi(t,e.teamfilePath,n);let r=qI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function sH(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=iH(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function oH(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function iH(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function uh(t,e,n){let r=`${e}=${aH(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function aH(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function lH(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1963
+ `);let E=new Date().toISOString();try{await W(e,y=>{td(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return _n(e,y instanceof Error?y.message:String(y))}return 0}function XI(t){return PW("sha256").update(t).digest("hex")}function qI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:XI(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function td(t,e){let n=bl(e.rawText,e.teamfilePath);Ti(t,e.teamfilePath,n);let r=qI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function sH(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=iH(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function oH(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function iH(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function uh(t,e,n){let r=`${e}=${aH(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function aH(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function lH(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1964
1964
  `),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}
1965
1965
  ${o}`:`${n}
1966
1966
  `:t.length>0?`${n}
@@ -1968,7 +1968,7 @@ ${t}`:`${n}
1968
1968
  `}function Nt(t){if(!oH(t.alias))return`invalid alias "${t.alias}"`;if(!ts(t.provider))return`invalid provider "${t.provider}"`}function _n(t,e){return t.stderr.write(`error: ${e}
1969
1969
  `),1}function $I(t,e,n){return t.stderr.write(`error: ${e}
1970
1970
  ${n}`),2}function hh(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_
1971
- `)}var To,WW,dh,ph,UI,FI,ys,jI,_h,gh,da,eH,tH,gn=L(()=>{"use strict";ni();Zp();yo();Ge();ho();sm();pm();yi();mn();le();sn();OI();Rl();Tf();We();To=5,WW=`usage: lmctl lint <teamfile.lmctl>
1971
+ `)}var wo,WW,dh,ph,UI,FI,ys,jI,_h,gh,da,eH,tH,gn=L(()=>{"use strict";ni();Zp();yo();Ge();ho();sm();pm();yi();mn();le();sn();OI();Rl();wf();We();wo=5,WW=`usage: lmctl lint <teamfile.lmctl>
1972
1972
 
1973
1973
  Validate an lmctl teamfile and warn about stale or placeholder session ids.
1974
1974
  For opencode members with model=, lint also asks the local ACP provider to
@@ -2028,7 +2028,7 @@ possibly work, seed reports it as an error and seeds nothing.
2028
2028
  and save it to <file> (lmctl.com curates these, not lmctl itself).
2029
2029
  Refuses to overwrite an existing <file> unless --force is given.
2030
2030
  --script <name> With --save-script, fetch commands/<name>.lms instead of the default
2031
- `,ph={existsSync:FW,statSync:jW,accessSync:UW},UI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Bn(),xp)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:pn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:pn(n),sessionId:n.sessionId}},FI=!0,ys=ph,jI=Mi;eH=/^\[([^\]]+)\]\s+(.*)$/s,tH=/^([^:\s][^:]*):\s+(.*)$/s});function VI(t){return wh[t.trim().toLowerCase()]}function JI(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=Nt({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 GI(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function cH(t){return[`_MEMBER_ provider=${t.provider} alias=${GI(t.alias)}`,...t.model!==void 0?[`model=${GI(t.model)}`]:[]].join(" ")}function Rr(t){let{teamName:e,members:n}=t,r=n.map(cH).join(`
2031
+ `,ph={existsSync:FW,statSync:jW,accessSync:UW},UI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Bn(),xp)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:pn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:pn(n),sessionId:n.sessionId}},FI=!0,ys=ph,jI=Mi;eH=/^\[([^\]]+)\]\s+(.*)$/s,tH=/^([^:\s][^:]*):\s+(.*)$/s});function VI(t){return Th[t.trim().toLowerCase()]}function JI(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=Nt({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 GI(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function cH(t){return[`_MEMBER_ provider=${t.provider} alias=${GI(t.alias)}`,...t.model!==void 0?[`model=${GI(t.model)}`]:[]].join(" ")}function Rr(t){let{teamName:e,members:n}=t,r=n.map(cH).join(`
2032
2032
  `);return`# ${e}
2033
2033
  #
2034
2034
  # This is a starting point, not a finished teamfile -- edit alias/provider/model
@@ -2039,25 +2039,25 @@ possibly work, seed reports it as an error and seeds nothing.
2039
2039
  ${r}
2040
2040
  `}function YI(t){return t.split(`
2041
2041
  `).map(e=>KI.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(`
2042
- `)}function Th(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function rd(t){let e=[];for(let n of t.split(`
2043
- `)){if(!KI.test(n))continue;let r=Th(n,"alias"),s=Th(n,"provider");if(r===void 0||s===void 0)continue;let o=Th(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var wh,nd,KI,sd=L(()=>{"use strict";gn();wh={1:["Lead"],lead:["Lead"],2:["Lead","Reviewer"],"lead-reviewer":["Lead","Reviewer"],3:["Lead","Coder","Reviewer"],"lead-coder-reviewer":["Lead","Coder","Reviewer"]},nd="1|2|3|lead|lead-reviewer|lead-coder-reviewer";KI=/^\s*_MEMBER_\s+\S/});var Ah={};me(Ah,{PROVIDER_NAMES:()=>Io,adoptSession:()=>kh,chooseMember:()=>pa,chooseTeamfile:()=>bh,completeTeamfile:()=>zI,createPromptTeam:()=>Ih,field:()=>vo,prepareTeam:()=>ma,setField:()=>xr});import{existsSync as fa,mkdirSync as vh,readFileSync as od,readdirSync as dH,statSync as uH,writeFileSync as Sh}from"node:fs";import{basename as So,dirname as id,extname as ad,resolve as bo}from"node:path";function vo(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function xr(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 fH(t,e){let n=Ar(),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.
2042
+ `)}function wh(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function rd(t){let e=[];for(let n of t.split(`
2043
+ `)){if(!KI.test(n))continue;let r=wh(n,"alias"),s=wh(n,"provider");if(r===void 0||s===void 0)continue;let o=wh(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var Th,nd,KI,sd=L(()=>{"use strict";gn();Th={1:["Lead"],lead:["Lead"],2:["Lead","Reviewer"],"lead-reviewer":["Lead","Reviewer"],3:["Lead","Coder","Reviewer"],"lead-coder-reviewer":["Lead","Coder","Reviewer"]},nd="1|2|3|lead|lead-reviewer|lead-coder-reviewer";KI=/^\s*_MEMBER_\s+\S/});var Ah={};me(Ah,{PROVIDER_NAMES:()=>Io,adoptSession:()=>kh,chooseMember:()=>pa,chooseTeamfile:()=>bh,completeTeamfile:()=>zI,createPromptTeam:()=>Ih,field:()=>vo,prepareTeam:()=>ma,setField:()=>xr});import{existsSync as fa,mkdirSync as vh,readFileSync as od,readdirSync as dH,statSync as uH,writeFileSync as Sh}from"node:fs";import{basename as So,dirname as id,extname as ad,resolve as bo}from"node:path";function vo(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function xr(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 fH(t,e){let n=Ar(),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.
2044
2044
  `);;){let s=await t.ask("Provider: ");if(Io.includes(s))return s;e.stderr.write(`Known providers: ${Io.join(", ")}
2045
2045
  `)}}async function zI(t,e,n,r={},s){let o=fa(t),i=o?od(t,"utf8"):"",a=i.split(`
2046
2046
  `),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(xr("_MEMBER_","alias",p))}let c=new Set;for(let m of l){let p=a[m],_=vo(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=xr(p,"alias",_),!vo(p,"teamfile")){let h=vo(p,"provider");h||(h=await fH(e,n));let g=Nt({alias:_,provider:h});if(g)throw new Error(g);if(p=xr(p,"provider",h),!vo(p,"model")&&!vo(p,"sessionid")){let E=await(r.models??_o)(h).catch(()=>[]);E.length&&n.stderr.write(`Models for ${h}:
2047
- ${E.map(T=>` ${T}`).join(`
2047
+ ${E.map(w=>` ${w}`).join(`
2048
2048
  `)}
2049
2049
  `);let y=await e.ask(`Model for ${_} (blank for provider default): `);y&&(p=xr(p,"model",y))}}a[m]=p}let d=a.join(`
2050
- `),u=Pn(d,So(t)),f=Ti(u,id(t));if(f.length)throw new Error(f.map(m=>m.message).join(`
2050
+ `),u=Pn(d,So(t)),f=wi(u,id(t));if(f.length)throw new Error(f.map(m=>m.message).join(`
2051
2051
  `));if(o||(d=Rr({teamName:So(t,ad(t)),members:u.members})),d!==i){if(o&&od(t,"utf8")!==i)throw new Error("Teamfile changed while completing it; nothing was written.");vh(id(t),{recursive:!0}),Sh(t,d.endsWith(`
2052
2052
  `)?d:`${d}
2053
2053
  `,o?{encoding:"utf8"}:{encoding:"utf8",flag:"wx"}),n.stderr.write(`Wrote ${t}
2054
- `)}}async function ma(t,e,n,r={},s){if(!Oe(t))throw new Error("Expected a .lmctl or .lmc teamfile.");let o=fa(t)?await(r.lint??Nr)([t],n):0,i=fa(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 zI(t,e,n,r,s);let l=a?await(r.lint??Nr)([t],n):o;return l!==0?l:Ie(t).members.some(d=>!d.teamfile&&!d.session)?r.seed?r.seed([t],n):wo(t,n,{guardFile:!0}):0}async function bh(t,e){let n=dH(e).filter(r=>Oe(r)&&uH(bo(e,r)).isFile()).sort().map(r=>bo(e,r));return n.length===1?n[0]:n.length>1?t.choose("Teamfile:",n):bo(e,await t.ask("Teamfile path: "))}async function pa(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 Ih(t,e,n,r){let s=bo(n,await r.ask(`Teamfile [${t}.lmc]: `)||`${t}.lmc`);if(!Oe(s))throw new Error("Choose a .lmc or .lmctl teamfile.");if(fa(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=Nt({alias:o,provider:t});if(i)throw new Error(i);xr("_MEMBER_","model",e);let a=Rr({teamName:So(s,ad(s)),members:[{alias:o,provider:t,model:e}]});return vh(id(s),{recursive:!0}),Sh(s,a,{encoding:"utf8",flag:"wx"}),{file:s,alias:o}}async function kh(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.
2054
+ `)}}async function ma(t,e,n,r={},s){if(!Oe(t))throw new Error("Expected a .lmctl or .lmc teamfile.");let o=fa(t)?await(r.lint??Nr)([t],n):0,i=fa(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 zI(t,e,n,r,s);let l=a?await(r.lint??Nr)([t],n):o;return l!==0?l:Ie(t).members.some(d=>!d.teamfile&&!d.session)?r.seed?r.seed([t],n):To(t,n,{guardFile:!0}):0}async function bh(t,e){let n=dH(e).filter(r=>Oe(r)&&uH(bo(e,r)).isFile()).sort().map(r=>bo(e,r));return n.length===1?n[0]:n.length>1?t.choose("Teamfile:",n):bo(e,await t.ask("Teamfile path: "))}async function pa(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 Ih(t,e,n,r){let s=bo(n,await r.ask(`Teamfile [${t}.lmc]: `)||`${t}.lmc`);if(!Oe(s))throw new Error("Choose a .lmc or .lmctl teamfile.");if(fa(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=Nt({alias:o,provider:t});if(i)throw new Error(i);xr("_MEMBER_","model",e);let a=Rr({teamName:So(s,ad(s)),members:[{alias:o,provider:t,model:e}]});return vh(id(s),{recursive:!0}),Sh(s,a,{encoding:"utf8",flag:"wx"}),{file:s,alias:o}}async function kh(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.
2055
2055
  `),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=bo(r,a);if(!Oe(l))throw new Error("Choose a .lmc or .lmctl teamfile.");let c=fa(l)?od(l,"utf8"):void 0,d=await s.ask("Alias [Lead]: ")||"Lead",u=Nt({alias:d,provider:e});if(u)throw new Error(u);if(c!==void 0&&!await s.confirm(`Overwrite ${l}?`))return null;let f=Rr({teamName:So(l,ad(l)),members:[{alias:d,provider:e,...n?{model:n}:{}}]});if(f=f.split(`
2056
2056
  `).map(m=>m.startsWith("_MEMBER_")?xr(m,"sessionid",t):m).join(`
2057
2057
  `),i||(i=bo(r,await s.ask(`Session directory [${r}]: `)||r)),i&&(f=f.split(`
2058
2058
  `).map(m=>m.startsWith("_MEMBER_")?xr(m,"sessiondir",i):m).join(`
2059
- `)),await W(o,m=>wi(m,l,Pn(f,So(l)))),c!==void 0&&od(l,"utf8")!==c)throw new Error("Teamfile changed; adoption cancelled.");return vh(id(l),{recursive:!0}),Sh(l,f,c===void 0?{encoding:"utf8",flag:"wx"}:{encoding:"utf8"}),await W(o,m=>td(m,{teamfilePath:Ne(l),name:So(l,ad(l)),rawText:f,now:new Date().toISOString()})),o.stdout.write(`Registered ${l}:${d} -> ${t}
2060
- `),{file:l,alias:d}}var Io,ld=L(()=>{"use strict";sn();Ge();gs();yo();qc();gn();sd();le();Io=Object.keys(kr)});var xh={};me(xh,{resolvePromptInput:()=>Nh,runChat:()=>Rh});import{readFileSync as mH,openSync as pH}from"node:fs";import{homedir as hH}from"node:os";import{join as _H}from"node:path";import{spawn as gH}from"node:child_process";function EH(t){let[e,n]=t;if(!e)return t;if(!Un(e)){let r=e.indexOf(":");if(r>0&&vi(e.slice(0,r))&&Oe(e.slice(r+1)))return[`${e.slice(r+1)}:${e.slice(0,r)}`,...t.slice(1)]}return vi(e)&&n&&Oe(n)?[n,e,...t.slice(2)]:t}function TH(t){return _H(hH(),".lmctl",`daemonize-${t}.log`)}function wH(t){let e=process.stdout.isTTY===!0,n=process.stderr.isTTY===!0;if(!e&&!n)return{stdio:["ignore","inherit","inherit"],logPath:null};let r=TH(t),s=pH(r,"a");return{stdio:["ignore",e?s:"inherit",n?s:"inherit"],logPath:r}}function vH(t,e){let{stdio:n,logPath:r}=wH(process.pid),s=gH(process.argv[0],[process.argv[1],"chat",...t],{detached:!0,stdio:n,env:{...process.env,[cd]:"1"}});return s.on("error",o=>{e.stderr.write(`error: --daemonize failed to spawn the detached child: ${o.message}
2059
+ `)),await W(o,m=>Ti(m,l,Pn(f,So(l)))),c!==void 0&&od(l,"utf8")!==c)throw new Error("Teamfile changed; adoption cancelled.");return vh(id(l),{recursive:!0}),Sh(l,f,c===void 0?{encoding:"utf8",flag:"wx"}:{encoding:"utf8"}),await W(o,m=>td(m,{teamfilePath:Ne(l),name:So(l,ad(l)),rawText:f,now:new Date().toISOString()})),o.stdout.write(`Registered ${l}:${d} -> ${t}
2060
+ `),{file:l,alias:d}}var Io,ld=L(()=>{"use strict";sn();Ge();gs();yo();qc();gn();sd();le();Io=Object.keys(kr)});var xh={};me(xh,{resolvePromptInput:()=>Nh,runChat:()=>Rh});import{readFileSync as mH,openSync as pH}from"node:fs";import{homedir as hH}from"node:os";import{join as _H}from"node:path";import{spawn as gH}from"node:child_process";function EH(t){let[e,n]=t;if(!e)return t;if(!Un(e)){let r=e.indexOf(":");if(r>0&&vi(e.slice(0,r))&&Oe(e.slice(r+1)))return[`${e.slice(r+1)}:${e.slice(0,r)}`,...t.slice(1)]}return vi(e)&&n&&Oe(n)?[n,e,...t.slice(2)]:t}function wH(t){return _H(hH(),".lmctl",`daemonize-${t}.log`)}function TH(t){let e=process.stdout.isTTY===!0,n=process.stderr.isTTY===!0;if(!e&&!n)return{stdio:["ignore","inherit","inherit"],logPath:null};let r=wH(t),s=pH(r,"a");return{stdio:["ignore",e?s:"inherit",n?s:"inherit"],logPath:r}}function vH(t,e){let{stdio:n,logPath:r}=TH(process.pid),s=gH(process.argv[0],[process.argv[1],"chat",...t],{detached:!0,stdio:n,env:{...process.env,[cd]:"1"}});return s.on("error",o=>{e.stderr.write(`error: --daemonize failed to spawn the detached child: ${o.message}
2061
2061
  `)}),s.unref(),e.stdout.write(`${JSON.stringify({status:"detached",pid:s.pid??null,logPath:r})}
2062
2062
  `),0}async function Rh(t,e={stdout:process.stdout,stderr:process.stderr}){t.includes("--json")&&(e=dl(e));let n=e.env??process.env;if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(`${QI}
2063
2063
  `),0;if(t.includes("--daemonize")&&n[cd]!=="1")return vH(t.filter(i=>i!=="--daemonize"),e);n[cd]==="1"&&(ul(e),delete process.env[cd]);let r=SH(t);if(typeof r=="string")return e.stderr.write(`error: ${r}
@@ -2069,7 +2069,7 @@ ${QI}
2069
2069
  `),2;r.prompt=i}let o=on(yH,{target:r.target,alias:r.alias,flags:{}});if(o.mode==="error")return e.stderr.write(`error: ${o.message}
2070
2070
  `),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)
2071
2071
  `),2;e.stderr.write(`${o.alias}: turn running; this can take minutes
2072
- `);let i=dT(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 $c({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")&&kH(e,_,r.verbose===!0)},...r.json===!0?{onAccepted:_=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:_})}
2072
+ `);let i=dw(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 $c({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")&&kH(e,_,r.verbose===!0)},...r.json===!0?{onAccepted:_=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:_})}
2073
2073
  `)}}:{}})}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,errorClass:Mn(p.message,{status:"busy"}).class})}
2074
2074
  `),1):p.status==="error"?(e.stdout.write(`${JSON.stringify({status:"error",errorKind:p.errorKind,message:p.message,errorClass:p.errorClass??Mn(p.message).class,teamChatLogId:p.teamChatLogId,...p.messageId===null?{}:{message_id:p.messageId},...p.usage?{usage:Qp(p.usage)}:{}})}
2075
2075
  `),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:ZI(o.alias),...p.errorClass?{errorClass:p.errorClass}:{},...p.usage?{usage:Qp(p.usage)}:{}})}
@@ -2092,20 +2092,20 @@ ${QI}
2092
2092
  lmctl prompt --provider <name> --model <model> --prompt-file <file-path> [--sessiondir <dir>] [--json] [--verbose]
2093
2093
 
2094
2094
  --json Emit JSON results.
2095
- --verbose Show provider progress on stderr.`;cd="LMCTL_CHAT_DAEMONIZED"});import{spawn as AH}from"node:child_process";import{accessSync as nk,closeSync as NH,constants as rk,lstatSync as RH,openSync as xH,readFileSync as LH,readSync as CH,realpathSync as OH,statSync as sk}from"node:fs";import{basename as Lh,dirname as Ts,delimiter as DH,resolve as ud,join as ko}from"node:path";import{fileURLToPath as MH}from"node:url";import{constants as ek}from"node:os";import*as ok from"node:path";function Ch(t){if(nk(t,rk.X_OK),!sk(t).isFile())throw Error("not a file");return OH(t)}function ik(t){try{let e=xH(t,"r");try{let n=Buffer.alloc(2048);return n.subarray(0,CH(e,n,0,n.length,0)).toString("utf8").match(/lmscript-shim-protocol\s+(\d+)/)?.[1]}finally{NH(e)}}catch{return}}function tk(t){return ik(t)===PH.split(" ").at(-1)}function UH(t,e=ud(Ts(MH(import.meta.url)),"../../bin"),n=process.cwd(),r=process.argv[1]){if(t.LMSCRIPT_BIN){let _=ud(n,t.LMSCRIPT_BIN),h;try{h=Ch(_)}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=ik(h);if(g!==void 0&&g!=="2")throw Error(`LMSCRIPT_BIN ${_} declares protocol ${g}; this shim requires protocol 2`);return h}let s=[],o=Ts(e),i=Ts(o),a;try{let _=JSON.parse(LH(ko(i,"package.json"),"utf8"));a=Array.isArray(_.workspaces)?_.workspaces:_.workspaces?.packages}catch{}let l=_=>Array.isArray(a)&&a.some(h=>typeof h=="string"&&$H(_,h.replace(/^\.\//,"").replace(/\/$/,""))),c=l(Lh(o))&&l("lmscript"),d=_=>{try{return RH(_),!0}catch(h){if(h.code==="ENOENT")return!1;throw h}},u=_=>{let h;try{h=Ch(_)}catch{throw Error(`Standalone lmscript sibling ${_} is not an executable file; repair the sibling instead of falling through to another copy`)}if(!tk(h))throw Error(`Standalone lmscript sibling ${_} is not a compatible lmscript (requires protocol 2)`);return h};if(c){let _=ko(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=ko(i,"lmscript","dist","runner.js");try{if(nk(E,rk.R_OK),!sk(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=Ts(o),m=Lh(f)==="node_modules"?f:Lh(Ts(f))==="node_modules"?Ts(f):void 0,p=[ko(e,"lmscript"),...m?[ko(m,"lmscript","bin","lmscript")]:[],...r?[ko(Ts(ud(n,r)),"lmscript")]:[]];for(let _ of new Set(p)){if(d(_))return u(_);s.push(_)}for(let _ of new Set((t.PATH??"").split(DH).filter(Boolean).map(h=>ud(n,h,"lmscript")))){let h;try{h=Ch(_)}catch{s.push(_);continue}if(tk(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 ws(t,e){let n={...process.env,...e.env},r=e.cwd??process.cwd(),s;try{s=UH(n,void 0,r)}catch(o){return e.stderr.write("error: "+String(o.message)+`
2095
+ --verbose Show provider progress on stderr.`;cd="LMCTL_CHAT_DAEMONIZED"});import{spawn as AH}from"node:child_process";import{accessSync as nk,closeSync as NH,constants as rk,lstatSync as RH,openSync as xH,readFileSync as LH,readSync as CH,realpathSync as OH,statSync as sk}from"node:fs";import{basename as Lh,dirname as ws,delimiter as DH,resolve as ud,join as ko}from"node:path";import{fileURLToPath as MH}from"node:url";import{constants as ek}from"node:os";import*as ok from"node:path";function Ch(t){if(nk(t,rk.X_OK),!sk(t).isFile())throw Error("not a file");return OH(t)}function ik(t){try{let e=xH(t,"r");try{let n=Buffer.alloc(2048);return n.subarray(0,CH(e,n,0,n.length,0)).toString("utf8").match(/lmscript-shim-protocol\s+(\d+)/)?.[1]}finally{NH(e)}}catch{return}}function tk(t){return ik(t)===PH.split(" ").at(-1)}function UH(t,e=ud(ws(MH(import.meta.url)),"../../bin"),n=process.cwd(),r=process.argv[1]){if(t.LMSCRIPT_BIN){let _=ud(n,t.LMSCRIPT_BIN),h;try{h=Ch(_)}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=ik(h);if(g!==void 0&&g!=="2")throw Error(`LMSCRIPT_BIN ${_} declares protocol ${g}; this shim requires protocol 2`);return h}let s=[],o=ws(e),i=ws(o),a;try{let _=JSON.parse(LH(ko(i,"package.json"),"utf8"));a=Array.isArray(_.workspaces)?_.workspaces:_.workspaces?.packages}catch{}let l=_=>Array.isArray(a)&&a.some(h=>typeof h=="string"&&$H(_,h.replace(/^\.\//,"").replace(/\/$/,""))),c=l(Lh(o))&&l("lmscript"),d=_=>{try{return RH(_),!0}catch(h){if(h.code==="ENOENT")return!1;throw h}},u=_=>{let h;try{h=Ch(_)}catch{throw Error(`Standalone lmscript sibling ${_} is not an executable file; repair the sibling instead of falling through to another copy`)}if(!tk(h))throw Error(`Standalone lmscript sibling ${_} is not a compatible lmscript (requires protocol 2)`);return h};if(c){let _=ko(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=ko(i,"lmscript","dist","runner.js");try{if(nk(E,rk.R_OK),!sk(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=ws(o),m=Lh(f)==="node_modules"?f:Lh(ws(f))==="node_modules"?ws(f):void 0,p=[ko(e,"lmscript"),...m?[ko(m,"lmscript","bin","lmscript")]:[],...r?[ko(ws(ud(n,r)),"lmscript")]:[]];for(let _ of new Set(p)){if(d(_))return u(_);s.push(_)}for(let _ of new Set((t.PATH??"").split(DH).filter(Boolean).map(h=>ud(n,h,"lmscript")))){let h;try{h=Ch(_)}catch{s.push(_);continue}if(tk(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 Ts(t,e){let n={...process.env,...e.env},r=e.cwd??process.cwd(),s;try{s=UH(n,void 0,r)}catch(o){return e.stderr.write("error: "+String(o.message)+`
2096
2096
  `),1}return new Promise(o=>{let i=!e.stdin||e.stdin===process.stdin,a=e.stdout===process.stdout,l=e.stderr===process.stderr,c=AH(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)+`
2097
2097
  `)}},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+`
2098
2098
  `)})),c.once("error",g=>{e.stderr.write(`error: could not start ${s}: ${g.message}
2099
- `),u(1)}),c.once("close",(g,E)=>u(g??(E&&ek.signals[E]?128+ek.signals[E]:1)))})}var $H,PH,fd=L(()=>{"use strict";$H=ok.matchesGlob,PH="lmscript-shim-protocol 2"});var lk={};me(lk,{runScript:()=>Oh});async function Oh(t,e={stdout:process.stdout,stderr:process.stderr}){if(ul(e),!t.length)return D(e,ak);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await ws(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2099
+ `),u(1)}),c.once("close",(g,E)=>u(g??(E&&ek.signals[E]?128+ek.signals[E]:1)))})}var $H,PH,fd=L(()=>{"use strict";$H=ok.matchesGlob,PH="lmscript-shim-protocol 2"});var lk={};me(lk,{runScript:()=>Oh});async function Oh(t,e={stdout:process.stdout,stderr:process.stderr}){if(ul(e),!t.length)return D(e,ak);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await Ts(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2100
2100
  `);a<0||(e.stdout.write(n.slice(0,a+1).startsWith("Usage: lmscript ")?"Usage: "+ak.slice(7)+`
2101
- `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return ws(t,e)}var ak,Dh=L(()=>{"use strict";fd();le();ak="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 Mh}from"node:child_process";import{dirname as ck,resolve as FH}from"node:path";function dk(t){return(0,$h.formatCount)(t)}async function Ph(t,e){return W(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2101
+ `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return Ts(t,e)}var ak,Dh=L(()=>{"use strict";fd();le();ak="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 Mh}from"node:child_process";import{dirname as ck,resolve as FH}from"node:path";function dk(t){return(0,$h.formatCount)(t)}async function Ph(t,e){return W(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2102
2102
  WHERE target_teamfile = ? AND target_alias = ? AND config_warnings IS NOT NULL
2103
2103
  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 ha(t,e,n,r){let s=Ne(t,e);if(n.has(s))return[];n.add(s);let o=rn(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(...ha(FH(ck(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 _a(t,e){try{let n=await W(t,r=>e.map(s=>{let o=en(r,s.teamfile,s.alias);return[Ao(s.teamfile,s.alias),jH(o)]}));return new Map(n)}catch{return new Map}}function Ao(t,e){return`${t}\0${e.toLowerCase()}`}function jH(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}:md(t.reclaimable===void 0?null:{source:t.reclaimable.source,holderPid:t.reclaimable.holder_pid,holderHost:t.reclaimable.holder_host,reason:t.reclaimable.reason})}function md(t=null){return{state:"idle",reason:null,inFlight:null,terminalLock:null,terminalInvocation:null,reclaimable:t}}function pd(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 Uh(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,$h.formatCount)(t)}function uk(t){return t==="n/a"?t:$t(t)}function fk(t,e,n=String){return t!==void 0?n(t):e?"n/a":"unknown"}function Fh(t){let e=ck(t),n;try{Mh("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=Mh("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:WH(e)}}function WH(t){let e;try{e=Mh("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 jh(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 Wh(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 $h,Hh=L(()=>{"use strict";$h=Ft(Ct(),1);Wt();le();sn()});async function mk(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 hd(t,e){let n=await He(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 Bh(t,e,n){let r=await W(e,i=>ha(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 _a(e,s);return Promise.all(s.map(async i=>{let a=i.sessionid?await hd(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(Ao(i.teamfile,i.alias))?.state??"unknown":"not seeded"}}))}function _d(t,e){let n=t.map(r=>[r.alias??"-",r.provider,r.model??"n/a",r.running,r.ageMs===null?"n/a":(0,Lr.formatDuration)(r.ageMs),r.context===null?"n/a":(0,Lr.formatCount)(r.context),r.sessionid??"-"].map(Lr.escapeCell));e.stdout.write(`${(0,Lr.formatTable)(n,{headers:["ALIAS","PROVIDER","MODEL","RUNNING","AGE","CONTEXT","SESSION"],margin:2})}
2104
2104
  `),e.stdout.write(`Context is the last completed turn; unavailable values are n/a.
2105
- `)}function pk(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function hk(t,e,n,r){return W(r,async s=>{if(en(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=ir(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 hd(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await wo(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var Lr,_k=L(()=>{"use strict";Ge();mn();Hh();le();Lr=Ft(Ct(),1);Wt();gn()});var Xh={};me(Xh,{runInferred:()=>JH,runInferredBatch:()=>wk,sendInferredPrompt:()=>No});import{existsSync as Ek,mkdtempSync as HH,readFileSync as BH,rmSync as XH,writeFileSync as qH}from"node:fs";import{tmpdir as GH}from"node:os";import{resolve as gd,join as gk}from"node:path";async function No(t,e,n,r={}){let s=HH(gk(GH(),"lmctl-intent-prompt-")),o=gk(s,"prompt.txt");try{return qH(o,`${e}\r
2105
+ `)}function pk(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function hk(t,e,n,r){return W(r,async s=>{if(en(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=ir(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 hd(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await To(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var Lr,_k=L(()=>{"use strict";Ge();mn();Hh();le();Lr=Ft(Ct(),1);Wt();gn()});var Xh={};me(Xh,{runInferred:()=>JH,runInferredBatch:()=>Tk,sendInferredPrompt:()=>No});import{existsSync as Ek,mkdtempSync as HH,readFileSync as BH,rmSync as XH,writeFileSync as qH}from"node:fs";import{tmpdir as GH}from"node:os";import{resolve as gd,join as gk}from"node:path";async function No(t,e,n,r={}){let s=HH(gk(GH(),"lmctl-intent-prompt-")),o=gk(s,"prompt.txt");try{return qH(o,`${e}\r
2106
2106
  `,{encoding:"utf8",mode:384}),await(r.chat??Rh)([...t,"--prompt-file",o],n)}finally{XH(s,{recursive:!0,force:!0})}}async function yk(t,e,n,r,s){let o=await(s.rows??Bh)(t,r,e);_d(o,r);for(let i of o)if(!(!i.file||!i.alias||!i.sessionid||!pk(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.
2107
- `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??hk)(i.file,i.alias,i.sessionid,r);if(a)return a;_d(await(s.rows??Bh)(t,r,e),r)}return 0}async function Tk(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 VH(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=jc(a,Io),c=[];if(l.length){let p=await n.choose("Provider:",l);if(i<0&&e===void 0&&o===void 0)return(s.model??Xc)([],r,{selections:[{provider:p}]});let _=await(s.models??_o)(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=jc(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(qn.map(async h=>({provider:h,names:await(s.models??_o)(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})=>jc(t,g).map(E=>({provider:h,model:E})))),!c.length)return null}if(o!==void 0){let p=await Tk(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??Xc)([],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 Ih(u.provider,u.model,r.cwd??process.cwd(),n),m=await ma(f.file,n,r,s,f.alias);return m||No([f.file,f.alias],e,r,s)}async function wk(t,e,n,r={}){let s=new Xn(n,r.ask);try{let o=gd(n.cwd??process.cwd(),t);if(!Ek(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]?gd(n.cwd??process.cwd(),e[0]):await bh(s,n.cwd??process.cwd()),a=await ma(i,s,n,r,e[1]);if(a)return a;let l=await pa(i,e[1],s);return(r.batch??Gh)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2108
- `),2}finally{s.close()}}async function JH(t,e,n={}){let r=new Xn(e,n.ask);try{let s=jb(t);if(!s)return null;if(s.kind==="script")return await Oh([gd(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),wk(s.file,s.rest,e,n);if(s.kind==="models")return await VH(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await Tk(s.pendingPrompt,r);if(d===null)return 0;s.prompt=d}if(s.kind==="team"){let d=gd(e.cwd??process.cwd(),s.file),u=s.alias;if(Ek(d)&&(u!==void 0||s.prompt!==void 0)){let m=Ie(d);if(!m.parseErrors.length&&m.members.length){u=await pa(d,u,r);let p=m.members.find(_=>_.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await No([d,u],s.prompt,e,n)}}let f=await ma(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await pa(d,u,r):void 0,s.prompt!==void 0?await No([d,u],s.prompt,e,n):await yk(d,u,r,e,n))}let o=await(n.registrations??mk)(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 No([u.file,u.member.alias],s.prompt,e,n):await yk(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??br)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",Io),l=await(n.summary??hd)(a,s.id);_d([l],e);let c=await kh(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 No([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
+ `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??hk)(i.file,i.alias,i.sessionid,r);if(a)return a;_d(await(s.rows??Bh)(t,r,e),r)}return 0}async function wk(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 VH(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=jc(a,Io),c=[];if(l.length){let p=await n.choose("Provider:",l);if(i<0&&e===void 0&&o===void 0)return(s.model??Xc)([],r,{selections:[{provider:p}]});let _=await(s.models??_o)(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=jc(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(qn.map(async h=>({provider:h,names:await(s.models??_o)(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})=>jc(t,g).map(E=>({provider:h,model:E})))),!c.length)return null}if(o!==void 0){let p=await wk(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??Xc)([],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 Ih(u.provider,u.model,r.cwd??process.cwd(),n),m=await ma(f.file,n,r,s,f.alias);return m||No([f.file,f.alias],e,r,s)}async function Tk(t,e,n,r={}){let s=new Xn(n,r.ask);try{let o=gd(n.cwd??process.cwd(),t);if(!Ek(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]?gd(n.cwd??process.cwd(),e[0]):await bh(s,n.cwd??process.cwd()),a=await ma(i,s,n,r,e[1]);if(a)return a;let l=await pa(i,e[1],s);return(r.batch??Gh)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2108
+ `),2}finally{s.close()}}async function JH(t,e,n={}){let r=new Xn(e,n.ask);try{let s=jb(t);if(!s)return null;if(s.kind==="script")return await Oh([gd(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),Tk(s.file,s.rest,e,n);if(s.kind==="models")return await VH(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await wk(s.pendingPrompt,r);if(d===null)return 0;s.prompt=d}if(s.kind==="team"){let d=gd(e.cwd??process.cwd(),s.file),u=s.alias;if(Ek(d)&&(u!==void 0||s.prompt!==void 0)){let m=Ie(d);if(!m.parseErrors.length&&m.members.length){u=await pa(d,u,r);let p=m.members.find(_=>_.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await No([d,u],s.prompt,e,n)}}let f=await ma(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await pa(d,u,r):void 0,s.prompt!==void 0?await No([d,u],s.prompt,e,n):await yk(d,u,r,e,n))}let o=await(n.registrations??mk)(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 No([u.file,u.member.alias],s.prompt,e,n):await yk(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??br)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",Io),l=await(n.summary??hd)(a,s.id);_d([l],e);let c=await kh(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 No([c.file,c.alias],s.prompt,e,n)}return 0}catch(s){return e.stderr.write(`error: ${s instanceof Error?s.message:String(s)}
2109
2109
  `),2}finally{r.close()}}var qh=L(()=>{"use strict";Ge();Uc();Wb();qc();dd();Dh();Vh();mn();ld();_k()});var bk={};me(bk,{runBatch:()=>Gh});import{readFileSync as KH}from"node:fs";async function Gh(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(vk),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(()=>(qh(),Xh));return E(n.positionals[0],[],e)}if(n.positionals.length!==3)return D(e,vk.trimEnd());let[r,s,o]=n.positionals,i=n.flags["--legacy"]===!0,a=n.flags["--single"]===!0,l,c;try{let E=KH(o,"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2110
2110
  `);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=Ve(r,s,e.dal)}catch(E){return D(e,`batch: ${E instanceof Error?E.message:String(E)}`)}let d=!i&&l.length>1&&await QH(c),u={...e.env??process.env},f=await ZH(e,{member:c,batchfile:o,promptCount:l.length,parentInvocationId:Hs(u.LMCTL_INVOCATION_ID)}),m={status:"error",error:"batch exited without a terminal outcome"},p=E=>{m=E},_=E=>{f!==null&&(tB(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 ${Zr()}: starting ${l.length} prompt${l.length===1?"":"s"} -> ${c.alias} (teamfile=${r} input=${o})
2111
2111
  `);try{return d?await YH(e,{member:c,prompts:l,env:u,setRootFinish:p,teamfile:r,batchfile:o}):await Jh(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 eB(e,f,m))}}async function Jh(t,e){let{member:n,prompts:r,env:s}=e;for(let[o,i]of r.entries()){t.stderr.write(`
@@ -2152,19 +2152,19 @@ lease) -- the pre-bundle behavior -- as an opt-out while bundle is new.
2152
2152
  --single sends the WHOLE file as ONE prompt: blank lines are content, not
2153
2153
  separators. A single prompt (one paragraph, or --single) never bundles and
2154
2154
  never takes a batch-level lease -- one plain turn.
2155
- `});import{mkdtempSync as nB,readFileSync as rB,rmSync as sB,writeFileSync as oB}from"node:fs";import{tmpdir as iB}from"node:os";import{spawnSync as aB}from"node:child_process";import{basename as yd,extname as Kh,join as Yh,resolve as zh}from"node:path";import*as Ik from"node:readline";function lB(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";aB(n,[e],{stdio:"inherit"})}}async function kk(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=Ik.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=zh(n,s.output),f=yd(u,Kh(u));else{let g=zh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:zh(n,E),T=`${yd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),S=w===""?T:w,b=Kh(S)?S:`${S}.lmctl`;u=Yh(y,b),f=yd(b,Kh(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=Ar(Mt(e.env??process.env,t.initConfigPath)),E=[...new Set(g===null?[]:Object.values(g).map(k=>k.provider))];e.stdout.write(`Providers from lmctl init: ${E.length>0?E.join(", "):"(none saved; run lmctl init to save suggestions)"}
2155
+ `});import{mkdtempSync as nB,readFileSync as rB,rmSync as sB,writeFileSync as oB}from"node:fs";import{tmpdir as iB}from"node:os";import{spawnSync as aB}from"node:child_process";import{basename as yd,extname as Kh,join as Yh,resolve as zh}from"node:path";import*as Ik from"node:readline";function lB(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";aB(n,[e],{stdio:"inherit"})}}async function kk(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=Ik.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=zh(n,s.output),f=yd(u,Kh(u));else{let g=zh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:zh(n,E),w=`${yd(y)}.lmctl`,T=await c(`Teamfile name [${w}]: `),S=T===""?w:T,b=Kh(S)?S:`${S}.lmctl`;u=Yh(y,b),f=yd(b,Kh(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=Ar(Mt(e.env??process.env,t.initConfigPath)),E=[...new Set(g===null?[]:Object.values(g).map(k=>k.provider))];e.stdout.write(`Providers from lmctl init: ${E.length>0?E.join(", "):"(none saved; run lmctl init to save suggestions)"}
2156
2156
  `),e.stdout.write(`You can type another provider.
2157
- `);let y=s.provider??g?.provider1.provider,T=s.provider??(E.length===1?E[0]:void 0);for(;T===void 0;){let k=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),N=k===""?y:k;if(N===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2157
+ `);let y=s.provider??g?.provider1.provider,w=s.provider??(E.length===1?E[0]:void 0);for(;w===void 0;){let k=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),N=k===""?y:k;if(N===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2158
2158
  `),d(),null;continue}if(Nt({alias:"Probe",provider:N})!==void 0){e.stdout.write(`unknown provider "${N}" (known: ${Object.keys(kr).join(", ")})
2159
- `),y=void 0;continue}T=N}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
2160
- `);let k=(await c(`Pattern [${w}]: `)).toLowerCase(),N=k===""?w:k;if(N==="c"||N==="custom"){S=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
2159
+ `),y=void 0;continue}w=N}let T=s.pattern??"3",S;for(;S===void 0;){e.stdout.write(`Patterns: 1) Lead 2) Lead+Reviewer 3) Lead+Coder+Reviewer c) custom
2160
+ `);let k=(await c(`Pattern [${T}]: `)).toLowerCase(),N=k===""?T:k;if(N==="c"||N==="custom"){S=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
2161
2161
  `);;){let I=await c(`Member ${S.length+1} alias: `);if(I===""){if(S.length===0){if(l)return e.stderr.write(`error: stdin closed (EOF) before any member alias was entered
2162
2162
  `),d(),null;e.stdout.write(`at least one member is required
2163
- `);continue}break}let v=Nt({alias:I,provider:T});if(v!==void 0){e.stdout.write(`${v}
2163
+ `);continue}break}let v=Nt({alias:I,provider:w});if(v!==void 0){e.stdout.write(`${v}
2164
2164
  `);continue}if(S.length===0&&I.toLowerCase()!=="lead"){e.stdout.write(`the first member must be Lead
2165
2165
  `);continue}let A=I.toLowerCase();if(O.has(A)){e.stdout.write(`duplicate member alias "${I}"
2166
- `);continue}O.add(A),S.push(I)}}else S=wh[N],S===void 0&&e.stdout.write(`unknown pattern "${N}"
2167
- `)}m=[];let b=new Map;for(let k of S){let N;for(;;){let x=await c(`Provider for ${k} [${T}]: `);N=x===""?T:x;let C=Nt({alias:k,provider:N});if(C===void 0)break;if(e.stdout.write(`error: ${C}. Enter a provider name, not a model; press Enter to use ${T}.
2166
+ `);continue}O.add(A),S.push(I)}}else S=Th[N],S===void 0&&e.stdout.write(`unknown pattern "${N}"
2167
+ `)}m=[];let b=new Map;for(let k of S){let N;for(;;){let x=await c(`Provider for ${k} [${w}]: `);N=x===""?w:x;let C=Nt({alias:k,provider:N});if(C===void 0)break;if(e.stdout.write(`error: ${C}. Enter a provider name, not a model; press Enter to use ${w}.
2168
2168
  `),l&&i.length===0)return e.stderr.write(`error: stdin closed (EOF) before a valid member provider was entered
2169
2169
  `),d(),null}if(!b.has(N)){e.stdout.write(`Loading model suggestions for ${N}...
2170
2170
  `);try{b.set(N,await(t.loadModels??Bc)(N))}catch{b.set(N,[])}}let O=b.get(N),I=Hc(N)?"some OpenAI, Anthropic, and Google Gemini models only; not a complete list":"suggestions; availability may vary";e.stdout.write(`Models for ${N} (${I}):
@@ -2174,23 +2174,23 @@ never takes a batch-level lease -- one plain turn.
2174
2174
  `);let v=s.model,A=await c(`Model for ${k}${v!==void 0?` [${v}]`:" (blank to omit)"}: `),R=A===""?v:A;m.push({alias:k,provider:N,...R!==void 0?{model:R}:{}})}}let p=Rr({teamName:f,members:m}),_=t.editFile??lB(r),h=s.seed??!0;for(;;){e.stdout.write(`
2175
2175
  --- ${u} ---
2176
2176
  ${p}---
2177
- `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=nB(Yh(iB(),"lmctl-plan-edit-"));try{let T=Yh(y,yd(u));oB(T,p,"utf8"),_(T),p=rB(T,"utf8")}finally{sB(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 Ak(t){return rd(t)}var Nk=L(()=>{"use strict";yo();gs();Kp();gn();sd()});var $k={};me($k,{readPlanSource:()=>Cr,runPlan:()=>_B});import{existsSync as Lk,mkdirSync as cB,readdirSync as dB,readFileSync as Rk,statSync as uB,writeFileSync as fB}from"node:fs";import{basename as Ck,dirname as mB,extname as pB,join as Ok,resolve as Zh}from"node:path";async function _B(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(hB),0;let r=[],s=[];for(let I=0;I<t.length;I+=1){let v=t[I];if(v==="--member"){let A=t[I+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2177
+ `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=nB(Yh(iB(),"lmctl-plan-edit-"));try{let w=Yh(y,yd(u));oB(w,p,"utf8"),_(w),p=rB(w,"utf8")}finally{sB(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 Ak(t){return rd(t)}var Nk=L(()=>{"use strict";yo();gs();Kp();gn();sd()});var $k={};me($k,{readPlanSource:()=>Cr,runPlan:()=>_B});import{existsSync as Lk,mkdirSync as cB,readdirSync as dB,readFileSync as Rk,statSync as uB,writeFileSync as fB}from"node:fs";import{basename as Ck,dirname as mB,extname as pB,join as Ok,resolve as Zh}from"node:path";async function _B(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(hB),0;let r=[],s=[];for(let I=0;I<t.length;I+=1){let v=t[I];if(v==="--member"){let A=t[I+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2178
2178
  `),2;r.push(A),I+=1;continue}s.push(v)}let o=ae(s,["--pattern","--provider","--model","--from","--output","--member"],["--json","--stdout","--force","--seed","--no-seed","--wizard","--non-interactive","--no-interactive"]);if(o.error!==void 0)return e.stderr.write(`error: ${o.error}
2179
2179
  `),e.stderr.write(`usage: lmctl plan [directory] [options]
2180
2180
  `),2;if(o.positionals.length>1)return e.stderr.write(`usage: lmctl plan [directory] [options]
2181
- `),2;let i=e.cwd??process.cwd(),a=o.positionals[0],l=V(o,"--pattern"),c=V(o,"--provider"),d=V(o,"--model"),u=V(o,"--from"),f=V(o,"--output"),m=z(o,"--json"),p=z(o,"--stdout"),_=z(o,"--force"),h=z(o,"--seed"),g=z(o,"--no-seed"),E=z(o,"--wizard"),y=On(e)||m||z(o,"--non-interactive")||z(o,"--no-interactive");if(m&&p)return e.stderr.write(`error: --json and --stdout are mutually exclusive
2181
+ `),2;let i=e.cwd??process.cwd(),a=o.positionals[0],l=V(o,"--pattern"),c=V(o,"--provider"),d=V(o,"--model"),u=V(o,"--from"),f=V(o,"--output"),m=Y(o,"--json"),p=Y(o,"--stdout"),_=Y(o,"--force"),h=Y(o,"--seed"),g=Y(o,"--no-seed"),E=Y(o,"--wizard"),y=On(e)||m||Y(o,"--non-interactive")||Y(o,"--no-interactive");if(m&&p)return e.stderr.write(`error: --json and --stdout are mutually exclusive
2182
2182
  `),2;if(p&&h)return e.stderr.write(`error: --seed requires a written teamfile; it cannot be combined with --stdout
2183
2183
  `),2;if(h&&g)return e.stderr.write(`error: --seed and --no-seed are mutually exclusive
2184
2184
  `),2;if(E&&p)return e.stderr.write(`error: --wizard cannot be combined with --stdout
2185
2185
  `),2;if(E&&m)return e.stderr.write(`error: --wizard cannot be combined with --json
2186
2186
  `),2;if(E&&y)return e.stderr.write(`error: --wizard requires interactive mode
2187
- `),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),k=E||!y&&b&&!p&&!m&&S,N;if(k){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2187
+ `),2;let w=l!==void 0||c!==void 0||d!==void 0||u!==void 0||r.length>0,T=e.stdin??process.stdin,S=n.stdinIsTTY??(e.stdin===void 0?process.stdin.isTTY===!0:T.isTTY===!0),b=!w||u===void 0&&r.length===0&&(l===void 0||c===void 0),k=E||!y&&b&&!p&&!m&&S,N;if(k){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2188
2188
  `),2;if(l!==void 0&&r.length>0)return e.stderr.write(`error: --pattern and --member are mutually exclusive
2189
2189
  `),2;let I=Mk(r,d,v=>{e.stderr.write(`error: ${v}
2190
- `)});if(I.error!==void 0)return 1;N=await gB(e,w,i,a,{provider:c,model:d,pattern:l,members:I.members,seed:!g,output:f},n)}else{if(!T)return e.stderr.write(`error: ${Dk}
2190
+ `)});if(I.error!==void 0)return 1;N=await gB(e,T,i,a,{provider:c,model:d,pattern:l,members:I.members,seed:!g,output:f},n)}else{if(!w)return e.stderr.write(`error: ${Dk}
2191
2191
  `),2;let I=await yB({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}
2192
2192
  `)});if(typeof I=="number")return I;N=I}if(N===null)return e.stderr.write(`aborted
2193
- `),1;if(p)return e.stdout.write(N.text),0;let O=N.destPath;return TB(N,O,{asJson:m,force:_,seed:N.seed},e)}async function gB(t,e,n,r,s,o){let i=await kk({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:Ak(i.text),seed:i.seed}}async function yB(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(Dk),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=EB(a,l,c);if(o!==void 0){let h;try{h=await Cr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=YI(h),E=rd(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=Mk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=VI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${nd})`),2;if(r!==void 0){let g=Nt({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=Ar(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 _=Ck(m,pB(m));return{text:Rr({teamName:_,members:p}),destPath:m,members:p,seed:d}}function Mk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=JI(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 EB(t,e,n){if(t!==void 0)return Zh(n,t);let r=Zh(n,e??".");return Ok(r,`${Ck(r)}.lmctl`)}async function TB(t,e,n,r){if(Lk(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2193
+ `),1;if(p)return e.stdout.write(N.text),0;let O=N.destPath;return wB(N,O,{asJson:m,force:_,seed:N.seed},e)}async function gB(t,e,n,r,s,o){let i=await kk({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:Ak(i.text),seed:i.seed}}async function yB(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(Dk),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=EB(a,l,c);if(o!==void 0){let h;try{h=await Cr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=YI(h),E=rd(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=Mk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=VI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${nd})`),2;if(r!==void 0){let g=Nt({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=Ar(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,w)=>{let T=E[w%E.length];return{alias:y,provider:T.provider,model:s??T.model1}})}}let _=Ck(m,pB(m));return{text:Rr({teamName:_,members:p}),destPath:m,members:p,seed:d}}function Mk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=JI(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 EB(t,e,n){if(t!==void 0)return Zh(n,t);let r=Zh(n,e??".");return Ok(r,`${Ck(r)}.lmctl`)}async function wB(t,e,n,r){if(Lk(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2194
2194
  `),1;cB(mB(e),{recursive:!0}),fB(e,t.text,"utf8");let s=n.asJson?{...r,stdout:{write:()=>{}}}:r;if(!(await Nr([e],s)===0))return n.seed&&r.stderr.write(`error: refusing to seed \u2014 lint failed
2195
2195
  `),n.asJson&&Z(r,Qh(e,!1,!1,t.members)),1;let a=!1;if(n.seed){let l=await ua([e],s);return a=l===0,n.asJson&&Z(r,Qh(e,!0,a,t.members)),l}return n.asJson?(Z(r,Qh(e,!0,!1,t.members)),0):(r.stdout.write(`Created ${e}
2196
2196
  `),r.stdout.write(`This is a starting point, not a finished teamfile -- edit it freely.
@@ -2198,7 +2198,7 @@ ${p}---
2198
2198
  `),r.stdout.write(`Format, and what lint/seed each do: https://lmctl.com/lmctl/docs/manuals/teamfile-format
2199
2199
  `),r.stdout.write(`After editing, run: lmctl lint ${e}
2200
2200
  `),r.stdout.write(`Then run: lmctl seed ${e}
2201
- `),0)}function Qh(t,e,n,r){return{path:t,linted:e,seeded:n,members:r.map(s=>({alias:s.alias,provider:s.provider,...s.model!==void 0?{model:s.model}:{}}))}}async function Cr(t,e,n){if(/^http:\/\//i.test(t))throw new Error("plaintext http:// sources are not allowed; use https://");if(/^https:\/\//i.test(t))return vB(t,e);let r=Zh(n,t);if(!Lk(r))throw new Error(`source not found: ${t}`);if(!uB(r).isDirectory())return Rk(r,"utf8");let o=dB(r).filter(i=>Oe(i));if(o.length===0)throw new Error(`no .lmctl files in source directory: ${t}`);if(o.length>1)throw new Error(`multiple .lmctl files in source directory: ${t}; specify the source file explicitly`);return Rk(Ok(r,o[0]),"utf8")}async function vB(t,e){let n=new URL(t);for(let r=0;;r+=1){if(n.protocol!=="https:")throw new Error("HTTPS redirects must remain https://");let s=await e(n.href,{redirect:"manual"});if(s.url!==""&&new URL(s.url).protocol!=="https:")throw new Error("HTTPS redirects must remain https://");if(!wB.has(s.status)){if(!s.ok)throw new Error(`HTTP ${s.status}`);return await s.text()}if(r>=xk)throw new Error(`too many HTTPS redirects (maximum ${xk})`);let o=s.headers.get("location");if(o===null)throw new Error(`HTTP ${s.status} redirect missing Location header`);n=new URL(o,n)}}var hB,Dk,wB,xk,ga=L(()=>{"use strict";Ge();le();Nk();gn();gs();sd();hB=`usage: lmctl plan [directory] [options]
2201
+ `),0)}function Qh(t,e,n,r){return{path:t,linted:e,seeded:n,members:r.map(s=>({alias:s.alias,provider:s.provider,...s.model!==void 0?{model:s.model}:{}}))}}async function Cr(t,e,n){if(/^http:\/\//i.test(t))throw new Error("plaintext http:// sources are not allowed; use https://");if(/^https:\/\//i.test(t))return vB(t,e);let r=Zh(n,t);if(!Lk(r))throw new Error(`source not found: ${t}`);if(!uB(r).isDirectory())return Rk(r,"utf8");let o=dB(r).filter(i=>Oe(i));if(o.length===0)throw new Error(`no .lmctl files in source directory: ${t}`);if(o.length>1)throw new Error(`multiple .lmctl files in source directory: ${t}; specify the source file explicitly`);return Rk(Ok(r,o[0]),"utf8")}async function vB(t,e){let n=new URL(t);for(let r=0;;r+=1){if(n.protocol!=="https:")throw new Error("HTTPS redirects must remain https://");let s=await e(n.href,{redirect:"manual"});if(s.url!==""&&new URL(s.url).protocol!=="https:")throw new Error("HTTPS redirects must remain https://");if(!TB.has(s.status)){if(!s.ok)throw new Error(`HTTP ${s.status}`);return await s.text()}if(r>=xk)throw new Error(`too many HTTPS redirects (maximum ${xk})`);let o=s.headers.get("location");if(o===null)throw new Error(`HTTP ${s.status} redirect missing Location header`);n=new URL(o,n)}}var hB,Dk,TB,xk,ga=L(()=>{"use strict";Ge();le();Nk();gn();gs();sd();hB=`usage: lmctl plan [directory] [options]
2202
2202
 
2203
2203
  Generate an lmctl teamfile. With no config flags and a TTY, an interactive
2204
2204
  wizard completes missing information; complete flags run immediately.
@@ -2239,7 +2239,7 @@ Examples:
2239
2239
  lmctl plan ./backend --pattern 3 --provider claude --seed
2240
2240
  `,Dk=`missing required flags for non-interactive plan:
2241
2241
  one of: --pattern <${nd}>, --member <Alias:provider[:model]>, or --from <file|dir|url>
2242
- plus: --provider <name> (required with --pattern)`;wB=new Set([301,302,303,307,308]),xk=10});var Ed={};me(Ed,{extractSaveScriptFlags:()=>Uk,performSaveScript:()=>Fk,runWithSaveScript:()=>CB});import{existsSync as SB,mkdirSync as bB,renameSync as IB,writeFileSync as kB}from"node:fs";import{dirname as AB,extname as NB,join as RB}from"node:path";function Uk(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(!Pk.test(a))return{rest:r,error:`--script "${a}" must match ${Pk} (letters, digits, ., _, -)`};let l=n.extension??".lms";return{rest:r,request:{destPath:s,slug:a,extension:l,force:i}}}function LB(t){let e=t.slice(0,512).trimStart().toLowerCase();return e.startsWith("<!doctype html")||e.startsWith("<html")}async function Fk(t,e,n=fetch){let{destPath:r,slug:s,extension:o,force:i}=e;if(SB(r)&&!i)return t.stderr.write(`error: --save-script: ${r} already exists (use --force to overwrite)
2242
+ plus: --provider <name> (required with --pattern)`;TB=new Set([301,302,303,307,308]),xk=10});var Ed={};me(Ed,{extractSaveScriptFlags:()=>Uk,performSaveScript:()=>Fk,runWithSaveScript:()=>CB});import{existsSync as SB,mkdirSync as bB,renameSync as IB,writeFileSync as kB}from"node:fs";import{dirname as AB,extname as NB,join as RB}from"node:path";function Uk(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(!Pk.test(a))return{rest:r,error:`--script "${a}" must match ${Pk} (letters, digits, ., _, -)`};let l=n.extension??".lms";return{rest:r,request:{destPath:s,slug:a,extension:l,force:i}}}function LB(t){let e=t.slice(0,512).trimStart().toLowerCase();return e.startsWith("<!doctype html")||e.startsWith("<html")}async function Fk(t,e,n=fetch){let{destPath:r,slug:s,extension:o,force:i}=e;if(SB(r)&&!i)return t.stderr.write(`error: --save-script: ${r} already exists (use --force to overwrite)
2243
2243
  `),1;let a=`${xB}/${s}${o}`,l;try{l=await Cr(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
2244
2244
  `):t.stderr.write(`error: --save-script: could not fetch ${a}: ${f}
2245
2245
  `),1}if(NB(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
@@ -2247,7 +2247,7 @@ Examples:
2247
2247
  `),1;if(LB(l))return t.stderr.write(`error: --save-script: ${a} did not return a script (looks like an HTML page, not lmscript)
2248
2248
  `),1;let c=AB(r);bB(c,{recursive:!0});let d=RB(c,`.save-script-${process.pid}-${Date.now()}.tmp`);return kB(d,l,"utf8"),IB(d,r),t.stdout.write(`Saved ${a} to ${r}
2249
2249
  `),0}async function CB(t,e,n,r,s={}){let o=Uk(n,e,s);if(o.error!==void 0)return t.stderr.write(`error: ${o.error}
2250
- `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:Fk(t,o.request)}var xB,Pk,Td=L(()=>{"use strict";ga();xB="https://lmctl.com/lmscript/commands",Pk=/^[A-Za-z0-9._-]+$/});var ya,Tne,e_=L(()=>{"use strict";ya=[{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}],Tne=ya.length});import{spawn as OB}from"node:child_process";async function Wk(t,e,n){let r=MB.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 $B(r.name,s)}function $B(t,e){return t==="lmctl_chat"?PB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function PB(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()&&ze(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),UB(s,process.cwd())}function UB(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=OB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=FB(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()&&ze(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2250
+ `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:Fk(t,o.request)}var xB,Pk,wd=L(()=>{"use strict";ga();xB="https://lmctl.com/lmscript/commands",Pk=/^[A-Za-z0-9._-]+$/});var ya,wne,e_=L(()=>{"use strict";ya=[{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}],wne=ya.length});import{spawn as OB}from"node:child_process";async function Wk(t,e,n){let r=MB.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 $B(r.name,s)}function $B(t,e){return t==="lmctl_chat"?PB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function PB(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()&&ze(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),UB(s,process.cwd())}function UB(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=OB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=FB(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()&&ze(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2251
2251
  `).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 FB(t){let e=t.LMCTL_MCP_CHAT_TIMEOUT_MS;if(e===void 0||e.trim().length===0)return jk;let n=Number(e);return!Number.isFinite(n)||n<=0?jk:n}function t_(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:DB),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 DB,jk,MB,n_=L(()=>{"use strict";e_();re();DB="http://127.0.0.1:8787",jk=30*60*1e3,MB=new Map(ya.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(r_({jsonrpc:"2.0",id:r,result:null})),{kind:"exit"};if(t.method==="initialize")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{protocolVersion:jB,capabilities:{tools:{listChanged:!1}},serverInfo:{name:WB,version:HB}}}};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:ya.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 Wk(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 r_(t){return`${JSON.stringify(t)}
2252
2252
  `}async function Hk(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(r_({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(r_(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(`
2253
2253
  `);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(`
@@ -2258,23 +2258,23 @@ Examples:
2258
2258
  Start the stdio MCP bridge. The bridge resolves api.url and api.token from
2259
2259
  local config, then uses stdin/stdout for JSON-RPC frames.
2260
2260
  `});function Vk(t,e){if(t===void 0)return{date:void 0};let n=/^(\d+)([smhd])$/.exec(t);if(n!==null){let s=Number(n[1]),o=n[2],i=o==="s"?s:o==="m"?s*60:o==="h"?s*3600:s*86400;return{date:new Date(Date.now()-i*1e3)}}let r=Date.parse(t);return Number.isFinite(r)?{date:new Date(r)}:{error:`invalid ${e} "${t}" (expected ISO8601 or duration like 24h)`}}var Jk=L(()=>{"use strict"});var sA={};me(sA,{applyMaxBytes:()=>Sd,parseTailSince:()=>nA,renderMessage:()=>tA,runTail:()=>QB});async function QB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${zB}
2261
- `),0;let n=ae(t,["--lines","--max-bytes","--watch-interval","--provider","--session","--run","--since"],["--watch","--help","--json"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json");if(V(n,"--session")!==void 0&&n.positionals.length>0)return e.stderr.write(`usage: --session cannot be combined with a positional target
2261
+ `),0;let n=ae(t,["--lines","--max-bytes","--watch-interval","--provider","--session","--run","--since"],["--watch","--help","--json"]);if(n.error!==void 0)return D(e,n.error);let r=Y(n,"--json");if(V(n,"--session")!==void 0&&n.positionals.length>0)return e.stderr.write(`usage: --session cannot be combined with a positional target
2262
2262
  `),2;let s=V(n,"--since"),o=nA(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
2263
- `),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?KB: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
2263
+ `),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?KB: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=Y(n,"--watch"),u=V(n,"--watch-interval");if(u!==void 0&&!d)return e.stderr.write(`usage: --watch-interval requires --watch
2264
2264
  `),2;let f=u===void 0?YB: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=>ZB(e,E,g,c,d,f,i,r))}catch(E){return Ot(e,E)}}let p=on(JB,{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
2265
- `),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=Js(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=>Ve(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=>Ve(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 br(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 Kk(e,_.provider,_.sessionId,c,-1,i,r);return h===vd?1:d?await new Promise(g=>{let E=async()=>{try{let w=await Kk(e,_.provider,_.sessionId,c,h,i,r);w!==vd&&(h=w)}catch(w){e.stderr.write(`tail: ${w instanceof Error?w.message:String(w)}
2266
- `)}},y=setInterval(()=>{E()},f*1e3),T=()=>{clearInterval(y),g(0)};process.once("SIGINT",T),process.once("SIGTERM",T)}):0}async function Kk(t,e,n,r,s,o,i){let a;try{a=await He(n,e)}catch(f){return t.stderr.write(`tail: failed to load session: ${f instanceof Error?f.message:String(f)}
2265
+ `),2;if(p.alias===void 0){let g;try{g=await W(e,w=>Ne(p.teamfile,w))}catch(w){return D(e,`tail: ${w instanceof Error?w.message:String(w)}`)}let E;try{E=Ie(g)}catch(w){return D(e,`tail: ${w instanceof Error?w.message:String(w)}`)}let y=Js(E);if(y===void 0)return D(e,`tail: ${p.teamfile} has no Lead member; pass <tf>:<alias>`);try{let w=await W(e,T=>Ve(p.teamfile,y.alias,T));_={provider:w.provider,sessionId:w.sessionid,cwd:w.sessiondir}}catch(w){return w instanceof ge?D(e,w.message):Ot(e,w)}}else try{let g=await W(e,E=>Ve(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 br(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 Kk(e,_.provider,_.sessionId,c,-1,i,r);return h===vd?1:d?await new Promise(g=>{let E=async()=>{try{let T=await Kk(e,_.provider,_.sessionId,c,h,i,r);T!==vd&&(h=T)}catch(T){e.stderr.write(`tail: ${T instanceof Error?T.message:String(T)}
2266
+ `)}},y=setInterval(()=>{E()},f*1e3),w=()=>{clearInterval(y),g(0)};process.once("SIGINT",w),process.once("SIGTERM",w)}):0}async function Kk(t,e,n,r,s,o,i){let a;try{a=await He(n,e)}catch(f){return t.stderr.write(`tail: failed to load session: ${f instanceof Error?f.message:String(f)}
2267
2267
  `),vd}if(a===null)return t.stderr.write(`tail: session not found: ${n} (provider=${e})
2268
- `),vd;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&&Z(t,{schema_version:wd,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 Z(t,{schema_version:wd,provider:e,sessionId:n,messages:f,truncated:d}),l.length-1}let u="";for(let f=c;f<l.length;f+=1)u+=`${tA(l[f])}
2268
+ `),vd;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&&Z(t,{schema_version:Td,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 Z(t,{schema_version:Td,provider:e,sessionId:n,messages:f,truncated:d}),l.length-1}let u="";for(let f=c;f<l.length;f+=1)u+=`${tA(l[f])}
2269
2269
  `;return t.stdout.write(r.kind==="bytes"?Sd(u,r.maxBytes):u),l.length-1}function tA(t){let e=rA(t.timestamp),n=e?`${e} ${t.role}`:t.role,s=(t.content??"").replace(/\r\n/g,`
2270
2270
  `).replace(/\r/g,`
2271
2271
  `).split(`
2272
2272
  `),o=s[0]??"",i=s.slice(1);return i.length===0?`${n}: ${o}`:`${n}: ${o}
2273
2273
  ${i.map(a=>` ${a}`).join(`
2274
- `)}`}function Yk(t){return t.map(e=>({id:e.id,kind:e.kind,step_id:e.step_id,timestamp:new Date(e.timestamp_ms).toISOString(),payload:e.payload}))}async function ZB(t,e,n,r,s,o,i,a){if(e.getRun(n)===null)return D(t,`tail: run ${n}: not found`);let c=i===void 0?e.listSessionEvents(n):e.listSessionEvents(n).filter(f=>f.timestamp_ms>=i.getTime()),d=r.kind==="lines"?c.slice(Math.max(0,c.length-r.lines)):c;if(a===!0)Z(t,{schema_version:wd,run_id:n,truncated:d.length<c.length,events:Yk(d)});else{let f=d.map(m=>`${Zk(m)}
2275
- `).join("");t.stdout.write(r.kind==="bytes"?Sd(f,r.maxBytes):f)}let u=c.length>0?c[c.length-1].id:0;return s?await new Promise(f=>{let p=setInterval(()=>{try{let h=e.listSessionEvents(n,u);if(h.length===0)return;for(let E of h)u=E.id;if(a===!0){Z(t,{schema_version:wd,run_id:n,truncated:!1,events:Yk(h)});return}let g=h.map(E=>`${Zk(E)}
2274
+ `)}`}function Yk(t){return t.map(e=>({id:e.id,kind:e.kind,step_id:e.step_id,timestamp:new Date(e.timestamp_ms).toISOString(),payload:e.payload}))}async function ZB(t,e,n,r,s,o,i,a){if(e.getRun(n)===null)return D(t,`tail: run ${n}: not found`);let c=i===void 0?e.listSessionEvents(n):e.listSessionEvents(n).filter(f=>f.timestamp_ms>=i.getTime()),d=r.kind==="lines"?c.slice(Math.max(0,c.length-r.lines)):c;if(a===!0)Z(t,{schema_version:Td,run_id:n,truncated:d.length<c.length,events:Yk(d)});else{let f=d.map(m=>`${Zk(m)}
2275
+ `).join("");t.stdout.write(r.kind==="bytes"?Sd(f,r.maxBytes):f)}let u=c.length>0?c[c.length-1].id:0;return s?await new Promise(f=>{let p=setInterval(()=>{try{let h=e.listSessionEvents(n,u);if(h.length===0)return;for(let E of h)u=E.id;if(a===!0){Z(t,{schema_version:Td,run_id:n,truncated:!1,events:Yk(h)});return}let g=h.map(E=>`${Zk(E)}
2276
2276
  `).join("");t.stdout.write(r.kind==="bytes"?Sd(g,r.maxBytes):g)}catch(h){t.stderr.write(`tail: ${h instanceof Error?h.message:String(h)}
2277
- `)}},o*1e3),_=()=>{clearInterval(p),f(0)};process.once("SIGINT",_),process.once("SIGTERM",_)}):0}function Sd(t,e){if(e===0||Buffer.byteLength(t,"utf8")<=e)return t;let r=Buffer.byteLength(zk,"utf8");if(r>=e)return Qk(t,e);let s=e-r,o=Qk(t,s);return`${zk}${o}`}function Qk(t,e){if(e<=0)return"";let n=Buffer.from(t,"utf8"),r=Math.max(0,n.length-e);for(;r<n.length&&(n[r]&192)===128;)r+=1;return n.subarray(r).toString("utf8")}function Zk(t){let e=rA(new Date(t.timestamp_ms))??"",n="";try{let o=JSON.parse(t.payload);typeof o.alias=="string"&&(n=`alias=${o.alias}`),typeof o.provider=="string"&&(n+=`${n?" ":""}provider=${o.provider}`),typeof o.tool=="string"&&(n+=`${n?" ":""}tool=${o.tool}`),typeof o.status=="string"&&(n+=`${n?" ":""}status=${o.status}`),(typeof o.tokens_in=="number"||typeof o.tokens_out=="number")&&(n+=`${n?" ":""}tokens=${o.tokens_in??0}/${o.tokens_out??0}`)}catch{}let r=n!==""?n:t.payload.slice(0,200),s=t.step_id===null?"":` step=${t.step_id}`;return`${e} ${t.kind}${s}: ${r}`}function nA(t){return Vk(t,"--since")}function rA(t){if(t===void 0)return;let e=(0,eA.formatLocalTimestamp)(t);return e==="unknown"?void 0:e}var eA,JB,KB,YB,wd,zB,vd,zk,oA=L(()=>{"use strict";mn();eA=Ft(Ct(),1);le();ot();Ge();sn();Jk();JB={name:"tail",allowsBareTeamfile:!0,supportsRaw:!0},KB=4096,YB=2,wd=1,zB=`usage: lmctl tail [target] [alias]
2277
+ `)}},o*1e3),_=()=>{clearInterval(p),f(0)};process.once("SIGINT",_),process.once("SIGTERM",_)}):0}function Sd(t,e){if(e===0||Buffer.byteLength(t,"utf8")<=e)return t;let r=Buffer.byteLength(zk,"utf8");if(r>=e)return Qk(t,e);let s=e-r,o=Qk(t,s);return`${zk}${o}`}function Qk(t,e){if(e<=0)return"";let n=Buffer.from(t,"utf8"),r=Math.max(0,n.length-e);for(;r<n.length&&(n[r]&192)===128;)r+=1;return n.subarray(r).toString("utf8")}function Zk(t){let e=rA(new Date(t.timestamp_ms))??"",n="";try{let o=JSON.parse(t.payload);typeof o.alias=="string"&&(n=`alias=${o.alias}`),typeof o.provider=="string"&&(n+=`${n?" ":""}provider=${o.provider}`),typeof o.tool=="string"&&(n+=`${n?" ":""}tool=${o.tool}`),typeof o.status=="string"&&(n+=`${n?" ":""}status=${o.status}`),(typeof o.tokens_in=="number"||typeof o.tokens_out=="number")&&(n+=`${n?" ":""}tokens=${o.tokens_in??0}/${o.tokens_out??0}`)}catch{}let r=n!==""?n:t.payload.slice(0,200),s=t.step_id===null?"":` step=${t.step_id}`;return`${e} ${t.kind}${s}: ${r}`}function nA(t){return Vk(t,"--since")}function rA(t){if(t===void 0)return;let e=(0,eA.formatLocalTimestamp)(t);return e==="unknown"?void 0:e}var eA,JB,KB,YB,Td,zB,vd,zk,oA=L(()=>{"use strict";mn();eA=Ft(Ct(),1);le();ot();Ge();sn();Jk();JB={name:"tail",allowsBareTeamfile:!0,supportsRaw:!0},KB=4096,YB=2,Td=1,zB=`usage: lmctl tail [target] [alias]
2278
2278
  lmctl tail --session <id> [--provider <name>]
2279
2279
  lmctl tail --run <id>
2280
2280
  [--lines N | --max-bytes N] [--since <duration|ISO8601>]
@@ -2303,7 +2303,7 @@ everything new by construction. --json and --max-bytes cannot be combined;
2303
2303
  --lines still applies. --watch --json emits one JSON
2304
2304
  object per poll tick with something new (NDJSON) -- a tick with
2305
2305
  nothing new prints no line at all, same as text mode.`;vd=-2;zk=`\u2026 [truncated older output \u2014 raise with --max-bytes]
2306
- `});var lA={};me(lA,{isSeedAck:()=>Ff,isSeedPrompt:()=>Ii,runExport:()=>t2,trimExportSeedExchange:()=>aA});function e2(t){return vr().some(e=>e.name===t)}function aA(t){let e=t.messages.findIndex(i=>i.role==="user");if(e===-1||!Ii(t.messages[e].content))return;let n=-1,r=!1;for(let i=e+1;i<t.messages.length;i++){let a=t.messages[i].role;if(a==="user")break;if(a==="assistant"){n=i;break}a!=="thinking"&&(r=!0)}let s=!1;n!==-1&&!r&&Ff(t.messages[n].content)&&(s=!0),s?t.messages.splice(e,n-e+1):t.messages.splice(e,1),Array.isArray(t.userPrompts)&&t.userPrompts.length>0&&Ii(t.userPrompts[0])&&t.userPrompts.shift(),t.messageCount=t.messages.filter(i=>i.role==="user"||i.role==="assistant").length;let o=t.messages.filter(i=>i.role==="user");o.length>0?(t.firstUserMessage=G(o[0].content.trim(),80),t.lastUserMessage=G(o[o.length-1].content.trim(),80)):(t.firstUserMessage=void 0,t.lastUserMessage=void 0)}async function t2(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(iA),0;let n=ae(t,["--provider"],["--prompt-only","--json"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json"),s=z(n,"--prompt-only");if(r&&s)return D(e,"export: --prompt-only cannot be combined with --json");let o=V(n,"--provider"),i=n.positionals.length===1&&o!==void 0,a=n.positionals.length===2&&o===void 0;if(!i&&!a)return D(e,iA.trimEnd());let l,c;if(i){if(l=n.positionals[0],c=o,!e2(c))return D(e,`export: provider is not registered: ${c}`)}else l="",c="";let d;if(a){try{d=Ve(n.positionals[0],n.positionals[1],e.dal)}catch(m){return m instanceof ge?D(e,m.message):Ot(e,m)}l=d.sessionid,c=d.provider}let u;try{u=await He(l,c)}catch(m){return D(e,`export: failed to load session: ${m instanceof Error?m.message:String(m)}`)}if(u===null)return D(e,`export: session not found: ${l} (provider=${c})`);if(aA(u),r)return Z(e,u),0;let f=[];if(s){let m=u.userPrompts??u.messages.filter(p=>p.role==="user").map(p=>p.content);for(let p of m){if(Ii(p)||p.trimStart().replace(/^["']/u,"").startsWith("lmctl seed initial connection only. Create or pin this provider session, then stop."))continue;let _=p.split(/\r\n|[\r\n\u2028\u2029]/u).map(h=>h.trim()).filter(Boolean).join(" ");_!==""&&f.push(_)}}else for(let m of u.messages)m.role!=="user"&&m.role!=="assistant"||m.content.trim()!==""&&f.push(`${m.role}:
2306
+ `});var lA={};me(lA,{isSeedAck:()=>Ff,isSeedPrompt:()=>Ii,runExport:()=>t2,trimExportSeedExchange:()=>aA});function e2(t){return vr().some(e=>e.name===t)}function aA(t){let e=t.messages.findIndex(i=>i.role==="user");if(e===-1||!Ii(t.messages[e].content))return;let n=-1,r=!1;for(let i=e+1;i<t.messages.length;i++){let a=t.messages[i].role;if(a==="user")break;if(a==="assistant"){n=i;break}a!=="thinking"&&(r=!0)}let s=!1;n!==-1&&!r&&Ff(t.messages[n].content)&&(s=!0),s?t.messages.splice(e,n-e+1):t.messages.splice(e,1),Array.isArray(t.userPrompts)&&t.userPrompts.length>0&&Ii(t.userPrompts[0])&&t.userPrompts.shift(),t.messageCount=t.messages.filter(i=>i.role==="user"||i.role==="assistant").length;let o=t.messages.filter(i=>i.role==="user");o.length>0?(t.firstUserMessage=G(o[0].content.trim(),80),t.lastUserMessage=G(o[o.length-1].content.trim(),80)):(t.firstUserMessage=void 0,t.lastUserMessage=void 0)}async function t2(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(iA),0;let n=ae(t,["--provider"],["--prompt-only","--json"]);if(n.error!==void 0)return D(e,n.error);let r=Y(n,"--json"),s=Y(n,"--prompt-only");if(r&&s)return D(e,"export: --prompt-only cannot be combined with --json");let o=V(n,"--provider"),i=n.positionals.length===1&&o!==void 0,a=n.positionals.length===2&&o===void 0;if(!i&&!a)return D(e,iA.trimEnd());let l,c;if(i){if(l=n.positionals[0],c=o,!e2(c))return D(e,`export: provider is not registered: ${c}`)}else l="",c="";let d;if(a){try{d=Ve(n.positionals[0],n.positionals[1],e.dal)}catch(m){return m instanceof ge?D(e,m.message):Ot(e,m)}l=d.sessionid,c=d.provider}let u;try{u=await He(l,c)}catch(m){return D(e,`export: failed to load session: ${m instanceof Error?m.message:String(m)}`)}if(u===null)return D(e,`export: session not found: ${l} (provider=${c})`);if(aA(u),r)return Z(e,u),0;let f=[];if(s){let m=u.userPrompts??u.messages.filter(p=>p.role==="user").map(p=>p.content);for(let p of m){if(Ii(p)||p.trimStart().replace(/^["']/u,"").startsWith("lmctl seed initial connection only. Create or pin this provider session, then stop."))continue;let _=p.split(/\r\n|[\r\n\u2028\u2029]/u).map(h=>h.trim()).filter(Boolean).join(" ");_!==""&&f.push(_)}}else for(let m of u.messages)m.role!=="user"&&m.role!=="assistant"||m.content.trim()!==""&&f.push(`${m.role}:
2307
2307
  ${m.content}`);return f.length>0&&e.stdout.write(`${f.join(`
2308
2308
 
2309
2309
  `)}
@@ -2325,7 +2325,7 @@ ${dA}`),2}let i;try{let a={groups:[],total:hA(),reasons:{usage:{},cost:{}}},l=Ce
2325
2325
  `);else{a.groups.length||e.stdout.write(`no usage recorded yet
2326
2326
  `),e.stdout.write("Period (UTC): "+r+" <= started_at < "+s+`
2327
2327
  `);let c=new Intl.NumberFormat("en-US"),d=h=>h===null?"(unknown)":c.format(h),u=["group","turns","input","cache-read","cache-write","output","cost-USD","cache-hit-%","unknown-usage","unknown-cost"],f=a.groups.map(h=>h.key),m=[...o==="team"?r2(f):f,"total"],p=[u,...[...a.groups,a.total].map((h,g)=>[m[g],d(h.turns),d(h.input),d(h.cacheRead),d(h.cacheWrite),d(h.output),h.costUsd===null?"(unknown)":h.costUsd.toFixed(6),h.cacheHitPercent===null?"(unknown)":h.cacheHitPercent.toFixed(2),d(h.unknownUsageCount),d(h.unknownCostCount)])],_=u.map((h,g)=>Math.max(...p.map(E=>E[g].length)));for(let h of p)e.stdout.write(h.map((g,E)=>E===0?g.padEnd(_[E]):g.padStart(_[E])).join(" ")+`
2328
- `);for(let[h,g]of Object.entries(a.reasons)){let E=Object.entries(g).map(([y,T])=>y+"="+c.format(T)).join(", ");E&&e.stdout.write("Unknown "+h+" reasons: "+E+`
2328
+ `);for(let[h,g]of Object.entries(a.reasons)){let E=Object.entries(g).map(([y,w])=>y+"="+c.format(w)).join(", ");E&&e.stdout.write("Unknown "+h+" reasons: "+E+`
2329
2329
  `)}}return 0}catch(a){return e.stderr.write(`error: cannot read usage: ${a instanceof Error?a.message:String(a)}
2330
2330
  `),1}finally{i?.close()}}var mA,dA,fA,gA=L(()=>{"use strict";$o();le();mA={day:"day",provider:"provider",model:"model",team:"team",alias:"alias",session:"native_session_id",dir:"cwd"},dA=`usage: lmctl usage [--since D] [--until D] [--by day|provider|model|team|alias|session|dir] [--json]
2331
2331
 
@@ -2339,7 +2339,7 @@ Model keys use reported names first; alias-like keys mean the model was not repo
2339
2339
  SUM(cost_usd) AS costUsd,
2340
2340
  100.0*SUM(CASE WHEN usage_source IS NOT NULL THEN COALESCE(tok_cache_read,0) ELSE 0 END)
2341
2341
  /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,
2342
- COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var wA={};me(wA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>yA,buildCostPayload:()=>EA,getSummaryDays:()=>TA,normalizeModelId:()=>bd,runCost:()=>u2});import{existsSync as o2}from"node:fs";function bd(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function a2(t,e,n,r){let s=new Set,o=[];for(let i of e){let a=n===null?null:Qa(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 EA(t,e,n){let r=[...new Set([...n.messages.map(I=>I.model),...(n.responses??[]).map(I=>I.model??void 0)].filter(I=>I!==void 0&&I!=="<synthetic>"))],s=[...n.messages].reverse().find(I=>I.model!==void 0&&I.model!=="<synthetic>")?.model,o=n.model??s??null,i=Kn(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 vt(),d=a2(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 I=St(t,o,c.catalog,c.aliases);if(f=I.state.kind,I.offer!==null)y=I.offer.pricing,m=I.offer.route,p=I.offer.source,_=I.offer.sourceModelId,h=I.provenance,g=I.offer.estimated;else switch(I.state.kind){case"unresolved":E=`alias "${I.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":E=`"${I.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: ${I.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),k=l.input===null?null:Math.max(0,l.input-(b?w:0)-(t==="claude"||t==="copilot"?S:0)),N=l.input===null||l.output===null?null:ei({input:k,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(N===null&&w>0&&y!==null&&y.input_cache_read_per_1m_tokens==null&&(E="no applicable cache-read price rate"),n.responses)if(N=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(I=>I.response_id)).size!==n.responses.length)E="session accounting coverage is incomplete";else if(!c.catalog)E="lmprice catalog unavailable";else{let I=0,v=null;for(let A of n.responses){let R=A.tokens;if(!A.model){v="a response lacks a model";break}let x=n.turns?.flatMap($r=>$r.rawUsage??[]).find($r=>$r.responseId===A.response_id)?.values,C=x?.promptTokens??x?.prompt_tokens,M=x?.input_tokens,P=x?.cache_read_tokens??x?.input_cache_read_tokens,q=x?.cache_write_tokens??x?.input_cache_write_tokens;if(typeof M=="number"&&typeof P=="number"&&P>M||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(R.output===null){v=`${t} does not record output tokens`;break}if(R.input_cached===null){v=`${t} does not record cached input tokens`;break}let $=A.model_provider??t,ue=bd(A.model??""),H=($==="deepseek"||A.model_provider==="deepseek")&&(A.model_provider===void 0||A.model_provider==="deepseek")&&yA.has(ue),ne=R.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),et=St($,A.model,c.catalog,c.aliases),tt=et.offer??St(t,A.model,c.catalog,c.aliases).offer;if(tt===null){switch(et.state.kind){case"no-catalog":v=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":v=`alias "${et.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":v=`"${et.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: ${et.state.otherProviders.join(", ")})`;break;default:v=`no applicable price for response model "${A.model}"`;break}break}if(ne===null){let $r=(tt.route??"").toLowerCase(),F=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test($r),j=bd(tt.sourceModelId??""),he=tt.provider==="deepseek"&&tt.source!=="openrouter"&&!F&&j===ue;if(H&&he)ne=0;else{v=`${t} does not record cache-write input tokens`;break}}if(R.input_uncached===null){v=`${t} does not record uncached input tokens`;break}let Oo=ei({input:Math.max(0,R.input_uncached-(fe?ne:0)),cachedInput:R.input_cached,cacheWrite:ne,output:R.output},tt?.pricing??null);if(Oo===null){v=`no applicable price for response model "${A.model}"`;break}I+=Oo,!m&&tt&&(m=tt.route,f="priced")}N=v?null:I,E=v}return N===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:l2,provider:t,sessionId:e,model:o,modelsUsed:d,approximate:u,tokens:l,pricePerModel:T,costUsd:N,priceResolution:f,priceRoute:m,priceSource:p,priceSourceModelId:_,priceProvenance:h,priceEstimated:g,costUnavailableReason:E,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}function TA(t,e=new Date){let n=[];for(let r=t-1;r>=0;r--){let s=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()-r));n.push(s.toISOString().slice(0,10))}return n}async function d2(t,e,n,r,s){let o=TA(t,s),i=Ce(r);if(!o2(i))return n?Z(r,{schema_version:1,days:o,providers:[]}):r.stdout.write(`no cost recorded yet
2342
+ COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var TA={};me(TA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>yA,buildCostPayload:()=>EA,getSummaryDays:()=>wA,normalizeModelId:()=>bd,runCost:()=>u2});import{existsSync as o2}from"node:fs";function bd(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function a2(t,e,n,r){let s=new Set,o=[];for(let i of e){let a=n===null?null:Qa(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 EA(t,e,n){let r=[...new Set([...n.messages.map(I=>I.model),...(n.responses??[]).map(I=>I.model??void 0)].filter(I=>I!==void 0&&I!=="<synthetic>"))],s=[...n.messages].reverse().find(I=>I.model!==void 0&&I.model!=="<synthetic>")?.model,o=n.model??s??null,i=Kn(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 vt(),d=a2(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 I=St(t,o,c.catalog,c.aliases);if(f=I.state.kind,I.offer!==null)y=I.offer.pricing,m=I.offer.route,p=I.offer.source,_=I.offer.sourceModelId,h=I.provenance,g=I.offer.estimated;else switch(I.state.kind){case"unresolved":E=`alias "${I.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":E=`"${I.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: ${I.state.otherProviders.join(", ")})`;break;default:E=`no lmprice catalog coverage for provider "${t}"`;break}}else o!==null&&(E="lmprice catalog unavailable");let w=y===null?null:{inputPer1m:y.input_per_1m_tokens,outputPer1m:y.output_per_1m_tokens,cachedInputPer1m:y.input_cache_read_per_1m_tokens},T=l.cachedInput??0,S=n.totalCacheWriteInputTokens??0,b=["claude","codex","gemini","qwen","copilot"].includes(t),k=l.input===null?null:Math.max(0,l.input-(b?T:0)-(t==="claude"||t==="copilot"?S:0)),N=l.input===null||l.output===null?null:ei({input:k,output:l.output,cachedInput:T,...S>0?{cacheWrite:S,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},y);if(N===null&&T>0&&y!==null&&y.input_cache_read_per_1m_tokens==null&&(E="no applicable cache-read price rate"),n.responses)if(N=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(I=>I.response_id)).size!==n.responses.length)E="session accounting coverage is incomplete";else if(!c.catalog)E="lmprice catalog unavailable";else{let I=0,v=null;for(let A of n.responses){let R=A.tokens;if(!A.model){v="a response lacks a model";break}let x=n.turns?.flatMap($r=>$r.rawUsage??[]).find($r=>$r.responseId===A.response_id)?.values,C=x?.promptTokens??x?.prompt_tokens,M=x?.input_tokens,P=x?.cache_read_tokens??x?.input_cache_read_tokens,q=x?.cache_write_tokens??x?.input_cache_write_tokens;if(typeof M=="number"&&typeof P=="number"&&P>M||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(R.output===null){v=`${t} does not record output tokens`;break}if(R.input_cached===null){v=`${t} does not record cached input tokens`;break}let $=A.model_provider??t,ue=bd(A.model??""),H=($==="deepseek"||A.model_provider==="deepseek")&&(A.model_provider===void 0||A.model_provider==="deepseek")&&yA.has(ue),ne=R.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),et=St($,A.model,c.catalog,c.aliases),tt=et.offer??St(t,A.model,c.catalog,c.aliases).offer;if(tt===null){switch(et.state.kind){case"no-catalog":v=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":v=`alias "${et.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":v=`"${et.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: ${et.state.otherProviders.join(", ")})`;break;default:v=`no applicable price for response model "${A.model}"`;break}break}if(ne===null){let $r=(tt.route??"").toLowerCase(),F=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test($r),j=bd(tt.sourceModelId??""),he=tt.provider==="deepseek"&&tt.source!=="openrouter"&&!F&&j===ue;if(H&&he)ne=0;else{v=`${t} does not record cache-write input tokens`;break}}if(R.input_uncached===null){v=`${t} does not record uncached input tokens`;break}let Oo=ei({input:Math.max(0,R.input_uncached-(fe?ne:0)),cachedInput:R.input_cached,cacheWrite:ne,output:R.output},tt?.pricing??null);if(Oo===null){v=`no applicable price for response model "${A.model}"`;break}I+=Oo,!m&&tt&&(m=tt.route,f="priced")}N=v?null:I,E=v}return N===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,w=null)),{schema_version:l2,provider:t,sessionId:e,model:o,modelsUsed:d,approximate:u,tokens:l,pricePerModel:w,costUsd:N,priceResolution:f,priceRoute:m,priceSource:p,priceSourceModelId:_,priceProvenance:h,priceEstimated:g,costUnavailableReason:E,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}function wA(t,e=new Date){let n=[];for(let r=t-1;r>=0;r--){let s=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()-r));n.push(s.toISOString().slice(0,10))}return n}async function d2(t,e,n,r,s){let o=wA(t,s),i=Ce(r);if(!o2(i))return n?Z(r,{schema_version:1,days:o,providers:[]}):r.stdout.write(`no cost recorded yet
2343
2343
  `),0;let a;try{if(a=bn(i),!a.prepare("SELECT 1 FROM sqlite_master WHERE type='view' AND name='turn_usage'").get())return n?Z(r,{schema_version:1,days:o,providers:[]}):r.stdout.write(`no cost recorded yet
2344
2344
  `),0;let c=`${o[0]}T00:00:00.000Z`,u=`${new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate()+1)).toISOString().slice(0,10)}T00:00:00.000Z`,f=`
2345
2345
  SELECT
@@ -2352,12 +2352,12 @@ Model keys use reported names first; alias-like keys mean the model was not repo
2352
2352
  WHERE julianday(started_at) >= julianday(?) AND julianday(started_at) < julianday(?)
2353
2353
  `,m=[c,u];e!==void 0&&(f+=" AND provider = ?",m.push(e)),f+=" GROUP BY COALESCE(provider, 'unknown'), date(started_at) ORDER BY provider ASC, day ASC";let p=a.prepare(f).all(...m),_=new Map;for(let N of p){let O=_.get(N.provider);O===void 0&&(O=new Map,_.set(N.provider,O)),O.set(N.day,N)}if(e!==void 0&&!_.has(e))return n?Z(r,{schema_version:1,days:o,providers:[]}):r.stdout.write(`no cost recorded yet
2354
2354
  `),0;if(_.size===0)return n?Z(r,{schema_version:1,days:o,providers:[]}):r.stdout.write(`no cost recorded yet
2355
- `),0;let h=[];for(let[N,O]of _.entries()){let I={},v=!0,A=0,R=[];for(let C of o){let M=O.get(C);M===void 0?(I[C]=0,R.push("$0.0000")):M.unknown_cost_count>0||M.cost_usd===null?(I[C]=null,v=!1,R.push("unknown")):(I[C]=M.cost_usd,A+=M.cost_usd,R.push(`$${M.cost_usd.toFixed(4)}`))}let x=v?A:null;R.push(x===null?"unknown":`$${x.toFixed(4)}`),h.push({provider:N,dayCosts:I,total:x,cells:R})}if(n){let N={schema_version:1,days:o,providers:h.map(O=>({provider:O.provider,days:O.dayCosts,total:O.total}))};return Z(r,N),0}let g=["USD",...o.map(N=>N.slice(5)),"TOTAL"],E=h.map(N=>["cost",...N.cells]),y=(0,yn.measureColumns)([{rows:E,headers:g}]),T=Number(r.env?.COLUMNS),w=Number.isSafeInteger(T)&&T>=20?T:process.stdout.columns||80,S=[],b=[],k=2+y[0];for(let N=1;N<y.length;N++){let O=2+y[N];b.length&&k+O>w&&(S.push(b),b=[],k=2+y[0]),b.push(N),k+=O}b.length&&S.push(b);for(let N=0;N<h.length;N++){N>0&&r.stdout.write(`
2355
+ `),0;let h=[];for(let[N,O]of _.entries()){let I={},v=!0,A=0,R=[];for(let C of o){let M=O.get(C);M===void 0?(I[C]=0,R.push("$0.0000")):M.unknown_cost_count>0||M.cost_usd===null?(I[C]=null,v=!1,R.push("unknown")):(I[C]=M.cost_usd,A+=M.cost_usd,R.push(`$${M.cost_usd.toFixed(4)}`))}let x=v?A:null;R.push(x===null?"unknown":`$${x.toFixed(4)}`),h.push({provider:N,dayCosts:I,total:x,cells:R})}if(n){let N={schema_version:1,days:o,providers:h.map(O=>({provider:O.provider,days:O.dayCosts,total:O.total}))};return Z(r,N),0}let g=["USD",...o.map(N=>N.slice(5)),"TOTAL"],E=h.map(N=>["cost",...N.cells]),y=(0,yn.measureColumns)([{rows:E,headers:g}]),w=Number(r.env?.COLUMNS),T=Number.isSafeInteger(w)&&w>=20?w:process.stdout.columns||80,S=[],b=[],k=2+y[0];for(let N=1;N<y.length;N++){let O=2+y[N];b.length&&k+O>T&&(S.push(b),b=[],k=2+y[0]),b.push(N),k+=O}b.length&&S.push(b);for(let N=0;N<h.length;N++){N>0&&r.stdout.write(`
2356
2356
  `),r.stdout.write(`${(0,yn.escapeCell)(h[N].provider)}: stored turn cost (UTC)
2357
2357
  `);for(let[O,I]of S.entries()){O>0&&r.stdout.write(`
2358
2358
  `);let v=[0,...I];r.stdout.write((0,yn.renderGrid)([v.map(A=>E[N][A])],{widths:v.map(A=>y[A]),headers:v.map(A=>g[A]),align:v.map((A,R)=>R===0?"left":"right"),margin:2,truncate:!1})+`
2359
2359
  `)}}return 0}catch(l){return D(r,`cost: cannot read cost summary: ${l instanceof Error?l.message:String(l)}`)}finally{a?.close()}}async function u2(t,e={stdout:process.stdout,stderr:process.stderr},n=new Date){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${c2}
2360
- `),0;let r=ae(t,["--provider","--days"],["--json"]);if(r.error!==void 0)return D(e,r.error);let s=z(r,"--json");if(r.positionals.length===0){let y=7,T=V(r,"--days");if(T!==void 0){let S=Number(T);if(!/^[1-9]\d*$/.test(T)||!Number.isSafeInteger(S)||S>366)return D(e,`invalid --days "${T}" (expected an integer from 1 to 366)`);y=S}let w=V(r,"--provider");return w!==void 0&&!ts(w)?D(e,`invalid provider "${w}"; use a canonical provider name (see lmctl help)`):d2(y,w,s,e,n)}if(V(r,"--days")!==void 0)return D(e,"--days is only supported without a target");if(r.positionals.length>2)return D(e,`too many positionals (${r.positionals.length}); expected <target> [alias]`);let o=on(i2,{target:r.positionals[0],alias:r.positionals[1],flags:{provider:V(r,"--provider")}});if(o.mode==="error")return D(e,o.message);if(o.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let i,a;if(o.mode==="ai-team")try{let y=await W(e,T=>Ve(o.teamfile,o.alias,T));i=y.provider,a=y.sessionid}catch(y){if(y instanceof ge)return D(e,y.message);throw y}else if(a=o.sessionid,o.provider!==void 0)i=o.provider;else{let y=await br(a);if(y.length===0)return D(e,`cost: session "${a}" not found in any provider store`);if(y.length>1)return D(e,`cost: session "${a}" matches multiple providers (${y.join(", ")}); pass --provider`);i=y[0]}let l;try{l=await He(a,i)}catch(y){return D(e,`cost: failed to load session: ${y instanceof Error?y.message:String(y)}`)}if(l===null)return D(e,`cost: session not found: ${a} (provider=${i})`);let c=await EA(i,a,l),{model:d,modelsUsed:u,approximate:f,tokens:m,costUsd:p,priceEstimated:_,priceRoute:h,costUnavailableReason:g}=c,E={source:c.priceDataSource,generatedAt:c.priceDataGeneratedAt};return s?(Z(e,c),0):(e.stdout.write(`Session: ${a}
2360
+ `),0;let r=ae(t,["--provider","--days"],["--json"]);if(r.error!==void 0)return D(e,r.error);let s=Y(r,"--json");if(r.positionals.length===0){let y=7,w=V(r,"--days");if(w!==void 0){let S=Number(w);if(!/^[1-9]\d*$/.test(w)||!Number.isSafeInteger(S)||S>366)return D(e,`invalid --days "${w}" (expected an integer from 1 to 366)`);y=S}let T=V(r,"--provider");return T!==void 0&&!ts(T)?D(e,`invalid provider "${T}"; use a canonical provider name (see lmctl help)`):d2(y,T,s,e,n)}if(V(r,"--days")!==void 0)return D(e,"--days is only supported without a target");if(r.positionals.length>2)return D(e,`too many positionals (${r.positionals.length}); expected <target> [alias]`);let o=on(i2,{target:r.positionals[0],alias:r.positionals[1],flags:{provider:V(r,"--provider")}});if(o.mode==="error")return D(e,o.message);if(o.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let i,a;if(o.mode==="ai-team")try{let y=await W(e,w=>Ve(o.teamfile,o.alias,w));i=y.provider,a=y.sessionid}catch(y){if(y instanceof ge)return D(e,y.message);throw y}else if(a=o.sessionid,o.provider!==void 0)i=o.provider;else{let y=await br(a);if(y.length===0)return D(e,`cost: session "${a}" not found in any provider store`);if(y.length>1)return D(e,`cost: session "${a}" matches multiple providers (${y.join(", ")}); pass --provider`);i=y[0]}let l;try{l=await He(a,i)}catch(y){return D(e,`cost: failed to load session: ${y instanceof Error?y.message:String(y)}`)}if(l===null)return D(e,`cost: session not found: ${a} (provider=${i})`);let c=await EA(i,a,l),{model:d,modelsUsed:u,approximate:f,tokens:m,costUsd:p,priceEstimated:_,priceRoute:h,costUnavailableReason:g}=c,E={source:c.priceDataSource,generatedAt:c.priceDataGeneratedAt};return s?(Z(e,c),0):(e.stdout.write(`Session: ${a}
2361
2361
  `),e.stdout.write(` Provider: ${i}
2362
2362
  `),e.stdout.write(` Model: ${d??"(unknown)"}
2363
2363
  `),f&&e.stdout.write(` NOTE: this session used multiple models (${u.join(", ")}) -- cost below is approximate, priced at ${d}'s rate for the whole session.
@@ -2398,14 +2398,14 @@ unavailable) and
2398
2398
  strict short timeout and NEVER blocks or fails this command: any network
2399
2399
  error degrades silently to the local cache, then the bundled built-in
2400
2400
  copy, in that order.`});function SA(t,e={}){return t.query("SELECT * FROM run ORDER BY id DESC LIMIT ?",e.limit??100)}var bA=L(()=>{"use strict"});var kA={};me(kA,{runLs:()=>h2});import{resolve as s_}from"node:path";function p2(t){let e=new Map;for(let n of t){let r=`${n.provider}:${n.sessionId}`,s=e.get(r);(s===void 0||n.modifiedAt.getTime()>s.modifiedAt.getTime())&&e.set(r,n)}return[...e.values()]}async function h2(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${f2}
2401
- `),0;let n=ae(t,["--provider","--sessiondir","--format","--limit"],["--recursive","--all","--json","--runs","--help"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>0)return D(e,"ls does not accept positional targets (use --provider/--sessiondir/--all to filter)");let r=V(n,"--format"),s=z(n,"--json");if(z(n,"--runs")){for(let h of["--provider","--sessiondir"])if(V(n,h)!==void 0)return D(e,`--runs is mutually exclusive with ${h}`);for(let h of["--recursive","--all"])if(z(n,h))return D(e,`--runs is mutually exclusive with ${h}`);if(r==="teamfile")return D(e,"--runs is mutually exclusive with --format teamfile (runs are not teamfile members)");let m=V(n,"--limit"),p=m2;if(m!==void 0){let h=Number.parseInt(m,10);if(!Number.isFinite(h)||h<1||String(h)!==m)return D(e,`invalid --limit "${m}" (expected a positive integer)`);if(h>IA)return D(e,`--limit ${h} exceeds maximum (${IA})`);p=h}let _=r==="json"||s===!0?"json":"table";try{return await W(e,async h=>_2(e,h,p,_))}catch(h){return Ot(e,h)}}let i=g2(r,s);if("error"in i)return D(e,i.error);let a=i.format,l=V(n,"--provider"),c=V(n,"--sessiondir"),d=z(n,"--recursive"),u=z(n,"--all"),f;try{f=await Rp(l?{provider:l}:{})}catch(m){return D(e,`ls: discovery failed: ${m instanceof Error?m.message:String(m)}`)}if(!u){let m=c!==void 0?s_(c):s_(process.cwd());f=f.filter(p=>{let _=s_(p.cwd);return d?_===m||_.startsWith(`${m}/`):_===m})}if(f=p2(f),a==="json")return Z(e,f.map(m=>({provider:m.provider,sessionId:m.sessionId,cwd:m.cwd,messageCount:m.messageCount,modifiedAt:m.modifiedAt.toISOString(),...m.model!==void 0?{model:m.model}:{}}))),0;if(f.length===0){if(a==="table"){let m=u?"(all)":c??process.cwd(),p=d?"under":"in";e.stdout.write(`No native sessions found ${p} ${m}.
2401
+ `),0;let n=ae(t,["--provider","--sessiondir","--format","--limit"],["--recursive","--all","--json","--runs","--help"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>0)return D(e,"ls does not accept positional targets (use --provider/--sessiondir/--all to filter)");let r=V(n,"--format"),s=Y(n,"--json");if(Y(n,"--runs")){for(let h of["--provider","--sessiondir"])if(V(n,h)!==void 0)return D(e,`--runs is mutually exclusive with ${h}`);for(let h of["--recursive","--all"])if(Y(n,h))return D(e,`--runs is mutually exclusive with ${h}`);if(r==="teamfile")return D(e,"--runs is mutually exclusive with --format teamfile (runs are not teamfile members)");let m=V(n,"--limit"),p=m2;if(m!==void 0){let h=Number.parseInt(m,10);if(!Number.isFinite(h)||h<1||String(h)!==m)return D(e,`invalid --limit "${m}" (expected a positive integer)`);if(h>IA)return D(e,`--limit ${h} exceeds maximum (${IA})`);p=h}let _=r==="json"||s===!0?"json":"table";try{return await W(e,async h=>_2(e,h,p,_))}catch(h){return Ot(e,h)}}let i=g2(r,s);if("error"in i)return D(e,i.error);let a=i.format,l=V(n,"--provider"),c=V(n,"--sessiondir"),d=Y(n,"--recursive"),u=Y(n,"--all"),f;try{f=await Rp(l?{provider:l}:{})}catch(m){return D(e,`ls: discovery failed: ${m instanceof Error?m.message:String(m)}`)}if(!u){let m=c!==void 0?s_(c):s_(process.cwd());f=f.filter(p=>{let _=s_(p.cwd);return d?_===m||_.startsWith(`${m}/`):_===m})}if(f=p2(f),a==="json")return Z(e,f.map(m=>({provider:m.provider,sessionId:m.sessionId,cwd:m.cwd,messageCount:m.messageCount,modifiedAt:m.modifiedAt.toISOString(),...m.model!==void 0?{model:m.model}:{}}))),0;if(f.length===0){if(a==="table"){let m=u?"(all)":c??process.cwd(),p=d?"under":"in";e.stdout.write(`No native sessions found ${p} ${m}.
2402
2402
  `)}return 0}if(a==="teamfile"){for(let m of f)e.stdout.write(`_MEMBER_ alias=- provider=${m.provider} sessionid=${m.sessionId} sessiondir=${m.cwd}
2403
2403
  `);return 0}return(0,lt.printTable)(f.map(m=>[(0,lt.escapeCell)(m.sessionId),(0,lt.escapeCell)(m.provider),(0,lt.escapeCell)(m.cwd.length>36?`\u2026${m.cwd.slice(-35)}`:m.cwd),(0,lt.formatRelativeTime)(m.modifiedAt)]),{headers:["SESSION","PROVIDER","SESSIONDIR","MODIFIED"],stream:e.stdout}),0}async function _2(t,e,n,r){let s=SA(e,{limit:n});return r==="json"?(Z(t,s.map(o=>({id:o.id,job_id:o.job_id,workflow_id:o.workflow_id,team_id:o.team_id,current_state:o.current_state,terminal_state:o.terminal_state,started_at:o.started_at,ended_at:o.ended_at,paused_at:o.paused_at}))),0):s.length===0?(t.stdout.write(`No runs found.
2404
2404
  `),0):((0,lt.printTable)(s.map(o=>[(0,lt.escapeCell)(o.id),(0,lt.escapeCell)(o.workflow_id),(0,lt.escapeCell)(o.team_id),(0,lt.escapeCell)(o.current_state??""),(0,lt.escapeCell)(o.terminal_state??""),(0,lt.escapeCell)(o.started_at)]),{headers:["RUN_ID","WORKFLOW","TEAM","STATE","TERMINAL","STARTED"],stream:t.stdout}),0)}function g2(t,e){return t===void 0?{format:e?"json":"teamfile"}:t==="table"||t==="teamfile"||t==="json"?{format:t}:{error:`invalid --format "${t}" (expected: table | teamfile | json)`}}var lt,f2,m2,IA,AA=L(()=>{"use strict";lt=Ft(Ct(),1);Bn();le();bA();f2=`usage: lmctl ls [--provider <name>] [--sessiondir <path>]
2405
2405
  [--recursive] [--all] [--format table|teamfile|json] [--json]
2406
2406
  lmctl ls --runs [--limit N] [--format table|json] [--json]
2407
2407
 
2408
- List native provider sessions in scope, or list recent managed runs with --runs.`,m2=50,IA=500});import{closeSync as NA,openSync as y2,writeFileSync as RA,fsyncSync as E2,renameSync as T2,unlinkSync as w2,lstatSync as o_,readFileSync as v2}from"node:fs";import{randomUUID as S2}from"node:crypto";import{dirname as b2,join as I2}from"node:path";function Id(t,e,n){let r=()=>n===null?(()=>{try{return o_(t),!0}catch(a){if(a.code==="ENOENT")return!1;throw a}})():!v2(t).equals(Buffer.from(n,"utf8")),s=384;if(n!==null){let a=o_(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=I2(b2(t),".init-"+S2()+".tmp"),i;try{if(i=y2(o,"wx",s),RA(i,e,"utf8"),E2(i),NA(i),i=void 0,r())throw new Error("Profile changed concurrently: "+t);if(n!==null){let a=t+".bak";try{if(!o_(a).isFile())throw new Error("Backup path is not a regular file: "+a)}catch(l){if(l.code!=="ENOENT")throw l}if(RA(a,n,{encoding:"utf8",flag:"w",mode:s}),r())throw new Error("Profile changed concurrently: "+t)}T2(o,t)}finally{i!==void 0&&NA(i);try{w2(o)}catch(a){if(a.code!=="ENOENT")throw a}}}var xA=L(()=>{"use strict"});var LA={};me(LA,{runInit:()=>L2});import{mkdirSync as k2,readFileSync as A2}from"node:fs";import{dirname as N2}from"node:path";function x2(t){try{return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(A2(t))}catch(e){if(e.code==="ENOENT")return null;throw new Je(t,"read",e.message)}}async function L2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(R2),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}
2408
+ List native provider sessions in scope, or list recent managed runs with --runs.`,m2=50,IA=500});import{closeSync as NA,openSync as y2,writeFileSync as RA,fsyncSync as E2,renameSync as w2,unlinkSync as T2,lstatSync as o_,readFileSync as v2}from"node:fs";import{randomUUID as S2}from"node:crypto";import{dirname as b2,join as I2}from"node:path";function Id(t,e,n){let r=()=>n===null?(()=>{try{return o_(t),!0}catch(a){if(a.code==="ENOENT")return!1;throw a}})():!v2(t).equals(Buffer.from(n,"utf8")),s=384;if(n!==null){let a=o_(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=I2(b2(t),".init-"+S2()+".tmp"),i;try{if(i=y2(o,"wx",s),RA(i,e,"utf8"),E2(i),NA(i),i=void 0,r())throw new Error("Profile changed concurrently: "+t);if(n!==null){let a=t+".bak";try{if(!o_(a).isFile())throw new Error("Backup path is not a regular file: "+a)}catch(l){if(l.code!=="ENOENT")throw l}if(RA(a,n,{encoding:"utf8",flag:"w",mode:s}),r())throw new Error("Profile changed concurrently: "+t)}w2(o,t)}finally{i!==void 0&&NA(i);try{T2(o)}catch(a){if(a.code!=="ENOENT")throw a}}}var xA=L(()=>{"use strict"});var LA={};me(LA,{runInit:()=>L2});import{mkdirSync as k2,readFileSync as A2}from"node:fs";import{dirname as N2}from"node:path";function x2(t){try{return new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(A2(t))}catch(e){if(e.code==="ENOENT")return null;throw new Je(t,"read",e.message)}}async function L2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(R2),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}
2409
2409
  `),2;let o=Mt(e.env??process.env,n.configPath);try{let i=II((n.detectProviders??NI)()),a=x2(o);if(i.length===0)return e.stderr.write(`error: no supported provider is installed -- looked for ${Eo.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.
2410
2410
  `),1;let l=[],c={},d=[];for(let p of i)try{let _=await(n.modelsForProvider??kI)(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.
2411
2411
  `)}if(l.length===0)return e.stderr.write(`error: no detected provider returned model ids (${d.join("; ")}). Nothing was written.
@@ -2471,10 +2471,10 @@ it is expected.
2471
2471
  --force Regenerate the whole example file from detection (previous file
2472
2472
  saved as init.toml.bak). Slots you added are NOT kept by --force.
2473
2473
  -h, --help display help for command
2474
- `});function OA(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 DA=L(()=>{"use strict"});import{execFileSync as C2}from"node:child_process";import{resolve as MA}from"node:path";function O2(t){return t.filter(e=>e.state!=="retired")}function $A(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=C2("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=MA(s),i=e.listProjects().find(a=>MA(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 PA(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 UA(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=O2(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 FA=L(()=>{"use strict";le()});function jA(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 WA=L(()=>{"use strict"});var qA={};me(qA,{SIZE_WARN_EST_TOKENS:()=>Ea,estimateTokens:()=>XA,runTeamTerminal:()=>U2,runTerminal:()=>a_});import{constants as D2}from"node:os";import{spawn as M2}from"node:child_process";import{statSync as $2}from"node:fs";async function a_(t,e){if(t.includes("--help")||t.includes("-h"))return B2(e);let n=ae(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(On(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=jA(i,s,a);return"err"in l?D(e,l.err):l_(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=on(P2,{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=>BA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await W(e,async s=>{let o=j2(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?H2(e,s,o,i,z(n,"--json")):W2(e,s,o,i)})}catch(s){return Ot(e,s)}}async function U2(t,e,n,r,s){let o=await BA(t,e,n,r,!1,s);return{code:s.signalObserved?null:o,signal:s.signalObserved??null}}async function BA(t,e,n,r,s,o){let i;try{i=Ve(e,n,r)}catch(A){return A instanceof ge?D(t,A.message):Ot(t,A)}let a=ir(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:fr(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,R=A===null?null:rt(A)?"live":"dead",x=`${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}, ${R})`);return s?(Z(t,{status:"error",errorKind:"busy",message:x,holder_pid:A,holder_liveness:R}),1):D(t,x)}let l=kb({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 R=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&R!==null&&A.push("terminal lock release was not acknowledged")}catch(R){A.push(`terminal lock release: ${R instanceof Error?R.message:String(R)}`)}try{let R=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&R!==null&&A.push("inflight release was not acknowledged")}catch(R){A.push(`inflight release: ${R instanceof Error?R.message:String(R)}`)}},w=(A,R)=>{let x=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(R)}finally{try{r.db.pragma(`busy_timeout=${x}`)}catch(C){R.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},S=(A,R)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let C=r.getTrackedInvocation(d);C==null||C.status==="running"?R.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(x){R.push(`tracked terminal finish: ${x instanceof Error?x.message:String(x)}`)}},b=A=>{if(p)return;p=!0;let R=[];try{w(x=>{T(x),S({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},x)},R)}catch(x){R.push(x instanceof Error?x.message:String(x))}R.length>0&&(_=Error(R.join("; ")))},k=!o,N=k?new AbortController:void 0,O=()=>N?.abort("SIGINT"),I=()=>N?.abort("SIGTERM");k&&(process.once("SIGINT",O),process.once("SIGTERM",I));let v=o??{env:m,signal:N?.signal};v.env=m;try{if(v.cancel=b,v.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let x,C;E=new Promise((P,q)=>{x=P,C=q});let M=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let P=5e3-(performance.now()-M),q;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise(($,ue)=>{q=setTimeout(()=>ue(Error("terminal close deadline exceeded")),P)})])}catch($){throw _=$ instanceof Error?$:Error(String($)),_}finally{clearTimeout(q)}}})().then(x,C),E},finalizeSync(x){if(b(x),o.stop?.(x),_)throw _}}),p||v.signal?.aborted){let x=v.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(x),x==="SIGINT"?130:143}r.setTerminalLock(l),d=F2(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 x=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,x);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,x),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},Ab(m)),c.unref?.();try{Ys(t,Ie(i.teamfile),i.teamfile)}catch{}let R=v;return g=l_(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},x=>{f.push(`${x.provider} terminal ignored model=${x.model}: ${x.reason}`)},R),u=await g,u}catch(A){throw y=A,A}finally{if(k&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",I)),!p){p=!0;let A=[];try{w(R=>{T(R),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)}:{}},R)},A)}catch(R){A.push(R instanceof Error?R.message:String(R))}A.length>0&&(_=Error(A.join("; ")))}if(_){if(y===void 0)throw _;try{t.stderr.write("error: terminal cleanup: "+_.message+`
2474
+ `});function OA(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 DA=L(()=>{"use strict"});import{execFileSync as C2}from"node:child_process";import{resolve as MA}from"node:path";function O2(t){return t.filter(e=>e.state!=="retired")}function $A(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=C2("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=MA(s),i=e.listProjects().find(a=>MA(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 PA(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 UA(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=O2(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 FA=L(()=>{"use strict";le()});function jA(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 WA=L(()=>{"use strict"});var qA={};me(qA,{SIZE_WARN_EST_TOKENS:()=>Ea,estimateTokens:()=>XA,runTeamTerminal:()=>U2,runTerminal:()=>a_});import{constants as D2}from"node:os";import{spawn as M2}from"node:child_process";import{statSync as $2}from"node:fs";async function a_(t,e){if(t.includes("--help")||t.includes("-h"))return B2(e);let n=ae(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(On(e)&&!Y(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"?Y(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=jA(i,s,a);return"err"in l?D(e,l.err):l_(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"?Y(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=on(P2,{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=>BA(e,a.teamfile,a.alias,l,Y(n,"--json")))}try{return await W(e,async s=>{let o=j2(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return Y(n,"--size")?H2(e,s,o,i,Y(n,"--json")):W2(e,s,o,i)})}catch(s){return Ot(e,s)}}async function U2(t,e,n,r,s){let o=await BA(t,e,n,r,!1,s);return{code:s.signalObserved?null:o,signal:s.signalObserved??null}}async function BA(t,e,n,r,s,o){let i;try{i=Ve(e,n,r)}catch(A){return A instanceof ge?D(t,A.message):Ot(t,A)}let a=ir(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:fr(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,R=A===null?null:rt(A)?"live":"dead",x=`${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}, ${R})`);return s?(Z(t,{status:"error",errorKind:"busy",message:x,holder_pid:A,holder_liveness:R}),1):D(t,x)}let l=kb({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,w=A=>{c!==null&&(clearInterval(c),c=null);try{let R=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&R!==null&&A.push("terminal lock release was not acknowledged")}catch(R){A.push(`terminal lock release: ${R instanceof Error?R.message:String(R)}`)}try{let R=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&R!==null&&A.push("inflight release was not acknowledged")}catch(R){A.push(`inflight release: ${R instanceof Error?R.message:String(R)}`)}},T=(A,R)=>{let x=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(R)}finally{try{r.db.pragma(`busy_timeout=${x}`)}catch(C){R.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},S=(A,R)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let C=r.getTrackedInvocation(d);C==null||C.status==="running"?R.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(x){R.push(`tracked terminal finish: ${x instanceof Error?x.message:String(x)}`)}},b=A=>{if(p)return;p=!0;let R=[];try{T(x=>{w(x),S({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},x)},R)}catch(x){R.push(x instanceof Error?x.message:String(x))}R.length>0&&(_=Error(R.join("; ")))},k=!o,N=k?new AbortController:void 0,O=()=>N?.abort("SIGINT"),I=()=>N?.abort("SIGTERM");k&&(process.once("SIGINT",O),process.once("SIGTERM",I));let v=o??{env:m,signal:N?.signal};v.env=m;try{if(v.cancel=b,v.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let x,C;E=new Promise((P,q)=>{x=P,C=q});let M=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let P=5e3-(performance.now()-M),q;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise(($,ue)=>{q=setTimeout(()=>ue(Error("terminal close deadline exceeded")),P)})])}catch($){throw _=$ instanceof Error?$:Error(String($)),_}finally{clearTimeout(q)}}})().then(x,C),E},finalizeSync(x){if(b(x),o.stop?.(x),_)throw _}}),p||v.signal?.aborted){let x=v.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(x),x==="SIGINT"?130:143}r.setTerminalLock(l),d=F2(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 x=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,x);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,x),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},Ab(m)),c.unref?.();try{Ys(t,Ie(i.teamfile),i.teamfile)}catch{}let R=v;return g=l_(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},x=>{f.push(`${x.provider} terminal ignored model=${x.model}: ${x.reason}`)},R),u=await g,u}catch(A){throw y=A,A}finally{if(k&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",I)),!p){p=!0;let A=[];try{T(R=>{w(R),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)}:{}},R)},A)}catch(R){A.push(R instanceof Error?R.message:String(R))}A.length>0&&(_=Error(A.join("; ")))}if(_){if(y===void 0)throw _;try{t.stderr.write("error: terminal cleanup: "+_.message+`
2475
2475
  `)}catch{}}}}function F2(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:Hs(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 l_(t,e,n,r){let{provider:s,sessionid:o,sessiondir:i,model:a}=e;if(!Cc(s))return D(t,`no resume incantation for provider "${s}"`);if(!_b.test(o))return D(t,"refusing to resume: malformed sessionid");let l=Cp(s,o,{isLead:e.isLead,model:a,onModelIgnored:p=>{let _=`warning: ${p.provider} terminal ignored model=${p.model}: ${p.reason}`;t.stderr.write(`${_}
2476
2476
  `),qe({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=De(r?.env??t.env??process.env,i,o,"terminal"),d=await gb(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+`
2477
- `),await new Promise(p=>{if(r?.signal?.aborted){let k=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(k),p(k==="SIGINT"?130:143)}let _=r?.streams,h=_?[_.stdin,_.stdout,_.stderr].map(k=>k.fd):void 0,g=h?.every(k=>typeof k=="number"),E=M2(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=k=>{if(!T){T=!0;try{r?.cancel?.(k)}catch{}{try{E.kill(k)}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",k=>{b(),p(D(t,`failed to launch ${m}: ${k.message}`))}),E.on("exit",(k,N)=>{b(),r&&(r.signalObserved=N);let O=k??(N?128+(D2.signals[N]??1):1),I=yb(s);I&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+I+`
2477
+ `),await new Promise(p=>{if(r?.signal?.aborted){let k=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(k),p(k==="SIGINT"?130:143)}let _=r?.streams,h=_?[_.stdin,_.stdout,_.stderr].map(k=>k.fd):void 0,g=h?.every(k=>typeof k=="number"),E=M2(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 w=!1,T=k=>{if(!w){w=!0;try{r?.cancel?.(k)}catch{}{try{E.kill(k)}catch{}de(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},S=()=>T(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=T);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",k=>{b(),p(D(t,`failed to launch ${m}: ${k.message}`))}),E.on("exit",(k,N)=>{b(),r&&(r.signalObserved=N);let O=k??(N?128+(D2.signals[N]??1):1),I=yb(s);I&&O!==0&&O!==130&&O!==143&&!w&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+I+`
2478
2478
  `),p(O)})})}function j2(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=$A(t,e,V(n,"--project"));return typeof s=="number"?s:PA(t,e,s,void 0)}async function W2(t,e,n,r){let s=UA(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 l_(t,{provider:Ku(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=$2(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 H2(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=Ku(a),d=a.model??null,u=null;Cc(c)&&(u=await He(l,c));let f=XA(u),m=f.est>Ea;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?Eb(c,l,d!==null?{model:d}:{}):null})}if(s)return Z(t,{estimate:!0,legend:HA,guide_tokens:Ea,members:i}),0;t.stdout.write(`session size \u2014 ESTIMATE only (nothing is changed automatically)
2479
2479
  `),t.stdout.write(`${HA}
2480
2480
  `);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)
@@ -2527,7 +2527,7 @@ it is expected.
2527
2527
  `),0;let p=await ua([f],e);return p!==0?p:s?0:(n.openTerminal??a_)([f,"Lead"],e)}async function Z2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(KA),0;let r=n.fetchFn??fetch,s=n.cwd??e.cwd??process.cwd();try{if(t.length===0){let m=await GA(`${d_}/index.txt`,r);return e.stdout.write(m.endsWith(`
2528
2528
  `)?m:`${m}
2529
2529
  `),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&&u_(kd(s,i))&&K2(kd(s,i)).isDirectory())return Q2(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=`${d_}/${l}.lms`;else if(/^https?:\/\//i.test(l))d=l;else if(u_(kd(s,l))||l.includes("/")||l.includes("\\"))u=kd(s,l);else if(/^[a-zA-Z0-9][a-zA-Z0-9_-]*(?:\.lms)?$/.test(l))d=`${d_}/${l.replace(/\.lms$/,"")}.lms`;else throw new Error("Expected a sample name, script URL, or local .lms file.");let f=d?await GA(d,r):J2(u,"utf8");e.stderr.write(`Running ${d??u}
2530
- `);{let m=n.launch??ws,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:JA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let _=X2(Ad(G2(),"lmctl-quickrun-"));try{let h=Ad(_,"download.lms");return VA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{q2(_,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2530
+ `);{let m=n.launch??Ts,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:JA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let _=X2(Ad(G2(),"lmctl-quickrun-"));try{let h=Ad(_,"download.lms");return VA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{q2(_,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2531
2531
  `),1}}var d_,KA,zA=L(()=>{"use strict";DA();fd();le();gs();ga();gn();c_();d_="https://lmctl.com/quickrun",KA=`usage: lmctl quickrun
2532
2532
  lmctl quickrun <sample|url|file.lms> [script arguments...]
2533
2533
 
@@ -2542,19 +2542,19 @@ to the website without a CLI release.
2542
2542
  Bare names always select hosted samples; use ./paths for local scripts or directories.
2543
2543
  Explicit URLs are also accepted. Only run scripts you trust.
2544
2544
  Legacy .lmctl templates still accept --no-seed and --no-terminal.
2545
- `});function QA(t){let e=String(t);return e.length>0&&/^[a-zA-Z0-9_./@=-]+$/.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'"}var ZA=L(()=>{"use strict"});var sN={};me(sN,{runHello:()=>rX});import{existsSync as eX,writeFileSync as tX,rmSync as eN}from"node:fs";import{join as tN}from"node:path";async function rX(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(nX),0;let r,s,o,i=[];for(let T=0;T<t.length;T+=1){let w=t[T];if(w==="-p"||w==="--prompt"){s=t[T+1],T+=1;continue}if(w==="--model"){if(t[T+1]===void 0||t[T+1].startsWith("-"))return e.stderr.write(`error: --model requires a model name
2546
- `),2;o=t[T+1],T+=1;continue}if(w.startsWith("-"))return e.stderr.write(`error: unknown option ${w}
2547
- `),2;i.push(w)}if(i.length>1)return e.stderr.write(`error: hello takes one provider
2548
- `),2;r=i[0];let a=new Xn(e,n.ask);try{if(!r){let T=Ar(),w=T?[...new Set([T.provider1.provider,T.provider2.provider,T.provider3.provider])]:[];w.length&&e.stdout.write(`Providers from init: ${w.join(", ")}
2549
- `);let S=w[0];r=await a.ask(`Provider${S?` [${S}]`:""}: `)||S}if(!r||!Object.hasOwn(kr,r))throw new Error(`Unknown provider: ${r??"(empty)"}`);if(o!==void 0&&!o.trim())throw new Error("A nonempty model is required with --model.");if(o!==void 0&&/[\r\n"]/u.test(o))throw new Error("Model names passed to --model cannot contain quotes or newlines.");if(o!==void 0&&(o=o.trim()),s?.trim()||(s=await a.ask("Prompt: ")),!s.trim())throw new Error("A prompt is required.")}catch(T){return e.stderr.write(`error: ${T instanceof Error?T.message:String(T)}
2550
- `),2}finally{a.close()}let l=n.cwd??e.cwd??process.cwd(),c=n.fetchFn??fetch,d=`${rN}/${r}.lmctl`,u;try{u=await Cr(d,c,l)}catch(T){return e.stderr.write(`error: could not fetch ${d}: ${T instanceof Error?T.message:String(T)}
2551
- `),1}if(o!==void 0)try{u=oX(u,r,o)}catch(T){return e.stderr.write(`error: ${T instanceof Error?T.message:String(T)}
2552
- `),1}let f=tN(l,`${r}_hello.lmctl`);for(let T=2;eX(f);T++)f=tN(l,`${r}_hello${T}.lmctl`);if(tX(f,u,{encoding:"utf8",flag:"wx"}),e.stdout.write(`Wrote ${f}
2553
- `),o!==void 0){let T={write:()=>!0},w=await yh(f,{...e,stdout:T,stderr:T,env:{...process.env,...e.env}});if(w.status==="error")return eN(f,{force:!0}),e.stderr.write(`error: hello model override failed lint: ${w.errors.map(b=>b.message).join("; ")}
2554
- `),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 eN(f,{force:!0}),e.stderr.write(`error: hello model override refused: ${S.message}
2555
- `),1}let m=`s=lm_seed(args[0]);if(s.status!="ok"){lm_exit(${nN});}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(`
2556
- `))>=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+`
2557
- `)}T&&p&&(e.stderr.write(p),p="")},g={...e,cwd:l,stderr:{write:T=>{p+=T,h()}}},E=await(n.launch??ws)(["-e",m,f,s],g);if(h(!0),E===nN)return 1;let y=QA(f);return e.stdout.write(`
2545
+ `});function QA(t){let e=String(t);return e.length>0&&/^[a-zA-Z0-9_./@=-]+$/.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'"}var ZA=L(()=>{"use strict"});var sN={};me(sN,{runHello:()=>rX});import{existsSync as eX,writeFileSync as tX,rmSync as eN}from"node:fs";import{join as tN}from"node:path";async function rX(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(nX),0;let r,s,o,i=[];for(let w=0;w<t.length;w+=1){let T=t[w];if(T==="-p"||T==="--prompt"){s=t[w+1],w+=1;continue}if(T==="--model"){if(t[w+1]===void 0||t[w+1].startsWith("-"))return e.stderr.write(`error: --model requires a model name
2546
+ `),2;o=t[w+1],w+=1;continue}if(T.startsWith("-"))return e.stderr.write(`error: unknown option ${T}
2547
+ `),2;i.push(T)}if(i.length>1)return e.stderr.write(`error: hello takes one provider
2548
+ `),2;r=i[0];let a=new Xn(e,n.ask);try{if(!r){let w=Ar(),T=w?[...new Set([w.provider1.provider,w.provider2.provider,w.provider3.provider])]:[];T.length&&e.stdout.write(`Providers from init: ${T.join(", ")}
2549
+ `);let S=T[0];r=await a.ask(`Provider${S?` [${S}]`:""}: `)||S}if(!r||!Object.hasOwn(kr,r))throw new Error(`Unknown provider: ${r??"(empty)"}`);if(o!==void 0&&!o.trim())throw new Error("A nonempty model is required with --model.");if(o!==void 0&&/[\r\n"]/u.test(o))throw new Error("Model names passed to --model cannot contain quotes or newlines.");if(o!==void 0&&(o=o.trim()),s?.trim()||(s=await a.ask("Prompt: ")),!s.trim())throw new Error("A prompt is required.")}catch(w){return e.stderr.write(`error: ${w instanceof Error?w.message:String(w)}
2550
+ `),2}finally{a.close()}let l=n.cwd??e.cwd??process.cwd(),c=n.fetchFn??fetch,d=`${rN}/${r}.lmctl`,u;try{u=await Cr(d,c,l)}catch(w){return e.stderr.write(`error: could not fetch ${d}: ${w instanceof Error?w.message:String(w)}
2551
+ `),1}if(o!==void 0)try{u=oX(u,r,o)}catch(w){return e.stderr.write(`error: ${w instanceof Error?w.message:String(w)}
2552
+ `),1}let f=tN(l,`${r}_hello.lmctl`);for(let w=2;eX(f);w++)f=tN(l,`${r}_hello${w}.lmctl`);if(tX(f,u,{encoding:"utf8",flag:"wx"}),e.stdout.write(`Wrote ${f}
2553
+ `),o!==void 0){let w={write:()=>!0},T=await yh(f,{...e,stdout:w,stderr:w,env:{...process.env,...e.env}});if(T.status==="error")return eN(f,{force:!0}),e.stderr.write(`error: hello model override failed lint: ${T.errors.map(b=>b.message).join("; ")}
2554
+ `),1;let S=T.warnings.find(({message:b})=>(r==="codex"||r==="agy")&&b.includes(`model="${o}" is not in ${r}'s live model catalog`));if(S)return eN(f,{force:!0}),e.stderr.write(`error: hello model override refused: ${S.message}
2555
+ `),1}let m=`s=lm_seed(args[0]);if(s.status!="ok"){lm_exit(${nN});}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=(w=!1)=>{let T;for(;(T=p.indexOf(`
2556
+ `))>=0;){let S=p.slice(0,T);if(p=p.slice(T+1),S.startsWith("error: ")){if(_.has(S))continue;_.add(S)}e.stderr.write(S+`
2557
+ `)}w&&p&&(e.stderr.write(p),p="")},g={...e,cwd:l,stderr:{write:w=>{p+=w,h()}}},E=await(n.launch??Ts)(["-e",m,f,s],g);if(h(!0),E===nN)return 1;let y=QA(f);return e.stdout.write(`
2558
2558
  Continue with this team:
2559
2559
  Open TUI: lmctl terminal ${y} Lead
2560
2560
  Send a prompt: lmctl prompt ${y} Lead "your next prompt"
@@ -2576,8 +2576,8 @@ An omitted model uses the provider default. Existing teamfiles are preserved.
2576
2576
 
2577
2577
  Example:
2578
2578
  lmctl hello claude -p "hi"
2579
- `;sX=/(\w+)=(?:"([^"]*)"|(\S*))/g});function f_(t){for(let e=t.length-1;e>=0;e-=1){let n=t[e],r=iX.exec(n.content);if(r===null){if(n.role==="assistant"&&n.content.trim().length>0)return null;continue}let s=Number.parseInt(r[1],10),o=r[2]===void 0?0:Number.parseInt(r[2],10),i=r[3].toLowerCase(),a=r[4]?.trim()??null,l=`${r[1]}${r[2]!==void 0?`:${r[2]}`:""}${i}`;return{state:"LIMITED",resets_at:a===null?null:aX(n.timestamp,s,o,i,a),reset_time:l,timezone:a,detected_at:n.timestamp.toISOString()}}return null}function aX(t,e,n,r,s){if(!Number.isFinite(t.getTime())||e<1||e>12||n<0||n>59)return null;let o=lX(e,r);try{let i=cX(t,s),a=iN(i.year,i.month,i.day,o,n,s);if(a.getTime()<=t.getTime()){let l=mX(i,1);a=iN(l.year,l.month,l.day,o,n,s)}return a.toISOString()}catch{return null}}function lX(t,e){return e==="am"?t===12?0:t:t===12?12:t+12}function cX(t,e){let n=aN(e,!1).formatToParts(t);return{year:Vn(n,"year"),month:Vn(n,"month"),day:Vn(n,"day")}}function iN(t,e,n,r,s,o){let i=Date.UTC(t,e-1,n,r,s,0,0);for(let a=0;a<3;a+=1){let l=dX(new Date(i),o);i=Date.UTC(t,e-1,n,r,s,0,0)-l}return new Date(i)}function dX(t,e){let n=aN(e,!0).formatToParts(t);return Date.UTC(Vn(n,"year"),Vn(n,"month")-1,Vn(n,"day"),Vn(n,"hour"),Vn(n,"minute"),Vn(n,"second"),0)-t.getTime()}function aN(t,e){let n=e?fX:uX,r=n.get(t);if(r!==void 0)return r;let s=new Intl.DateTimeFormat("en-US",{timeZone:t,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",...e?{hour:"2-digit",minute:"2-digit",second:"2-digit"}:{}});return n.set(t,s),s}function Vn(t,e){let n=t.find(r=>r.type===e)?.value;if(n===void 0)throw new Error(`missing ${e}`);return Number.parseInt(n,10)}function mX(t,e){let n=new Date(Date.UTC(t.year,t.month-1,t.day+e));return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}}var iX,uX,fX,lN=L(()=>{"use strict";iX=/you['\u2019]ve hit your session limit\s*(?:\u00b7|-|:)?\s*resets\s+([0-9]{1,2})(?::([0-9]{2}))?\s*(am|pm)\s*(?:\(([^)]+)\))?/i;uX=new Map,fX=new Map});var wN={};me(wN,{appendIntent:()=>p_,formatAge:()=>Ta,formatDuration:()=>xd,resolveIntentLogPath:()=>mN,runStatus:()=>bX,shortIdentity:()=>En});import{appendFileSync as pX,existsSync as hX,mkdirSync as _X}from"node:fs";import{homedir as gX}from"node:os";import{basename as yX,dirname as fN,isAbsolute as EX,join as TX,resolve as wX}from"node:path";function mN(){return process.env.LMCTL_INTENT_LOG??TX(gX(),".lmctl","recent-intents.log")}function p_(t){try{let e=mN();_X(fN(e),{recursive:!0});let n=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});pX(e,`${n}
2580
- `)}catch{}}async function bX(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(vX),0;let n=t.find(a=>a==="--project"||a.startsWith("--project=")||a==="--web");if(n!==void 0)return D(e,`unknown option ${n}; lmctl status is team/SELF scoped now`);let r=ae(t,["--since"],["--json","--details"]);if(r.error!==void 0)return D(e,r.error);let s=z(r,"--json"),o=z(r,"--details");if(r.positionals.length>0){let a=await kX(e,r.positionals,{json:s,details:o,since:V(r,"--since")});return a===0&&p_({verb:"status",args:t}),a}if(o)return D(e,"--details only applies with a teamfile argument (lmctl status <teamfile> --details)");let i=GX(V(r,"--since"));if("error"in i)return D(e,i.error);try{let a=e.env??process.env;if(s){let l=await W(e,c=>dN(c,a));Z(e,{schema_version:T_,...l})}else{let l=await W(e,async c=>UX(await dN(c,a),{sinceIso:i.iso}));e.stdout.write(l)}return p_({verb:"status",args:t}),0}catch(a){return D(e,a instanceof Error?a.message:String(a))}}async function kX(t,e,n){if(e.length>2)return D(t,`too many positionals (${e.length}); expected <teamfile> [alias]`);if(n.since!==void 0)return D(t,"--since only applies to the activity view (lmctl status with no teamfile argument)");let r=on(IX,{target:e[0],alias:e[1],flags:{}});if(r.mode==="error")return D(t,r.message);if(r.mode!=="ai-team")return D(t,"lmctl status: expected <teamfile> [alias]");try{return r.alias===void 0?await VX(t,r.teamfile,n.json,n.details):await ZX(t,r.teamfile,r.alias,n.json)}catch(s){return s instanceof ge?D(t,s.message):D(t,`status: ${s instanceof Error?s.message:String(s)}`)}}async function dN(t,e){let n=$p(e,t);if(!n.ok){if(n.reason==="not-found")throw new Error(cs("status",e,t));return await NX(t)}return await AX(t,n.identity,e)}async function AX(t,e,n){let r=ds(e),s=t.getRootTeam(r.teamfile);if(s===null)throw new Error(cs("status",n,t));let o=rn(s.teamfile_path,t),i=__(Rd(t,{from:r.value})),a=__(Rd(t,{target_teamfile:r.teamfile,target_alias:r.alias})),l=CX([...h_(t,{from:r.value}),...h_(t,{target_teamfile:r.teamfile,target_alias:r.alias})]);return{scope:"self",identity:r.value,...pN(),team:{name:o.name,teamfile:s.teamfile_path},members:o.members.map(c=>xX(t,s.teamfile_path,c)),activity:{from_me:i.map(c=>g_(c)),to_me:a.map(c=>g_(c))},transcript_harvest:await hN(l)}}function pN(){let t=null;try{t=fw($l())}catch{}return{db_path:Ye(),site_name:t}}async function NX(t){let e=t.listRootTeams();return{scope:"db",identity:null,...pN(),teams:e.map(n=>RX(t,n)),activity:__(Rd(t)).map(n=>g_(n)),transcript_harvest:await hN(h_(t))}}function RX(t,e){if(!hX(e.teamfile_path))return{name:e.name,teamfile:e.teamfile_path,member_count:0,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at,missing_on_disk:!0};let n=0;try{n=rn(e.teamfile_path,t).members.length}catch{n=0}return{name:e.name,teamfile:e.teamfile_path,member_count:n,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at}}function xX(t,e,n){let r=n.teamfile===void 0?null:Ne(EX(n.teamfile)?n.teamfile:wX(fN(e),n.teamfile),t),s=en(t,e,n.alias),o=s.busy&&s.reason==="in-flight"?LX(t,e,n.alias,s.inFlight):null;return{alias:n.alias,provider:n.provider,model:n.model??null,teamfile:e,referenced_teamfile:r,sessionid:n.session??null,sessiondir:n.sessiondir??null,state:s.busy?"busy":"idle",reason:s.busy?s.reason:null,handling:o,reclaimable:!s.busy&&s.reclaimable!==void 0?s.reclaimable:null}}function LX(t,e,n,r){let s=r.sender_alias==="operator"?"operator":`${r.sender_teamfile}:${r.sender_alias}`,i=t.db.prepare(`
2579
+ `;sX=/(\w+)=(?:"([^"]*)"|(\S*))/g});function f_(t){for(let e=t.length-1;e>=0;e-=1){let n=t[e],r=iX.exec(n.content);if(r===null){if(n.role==="assistant"&&n.content.trim().length>0)return null;continue}let s=Number.parseInt(r[1],10),o=r[2]===void 0?0:Number.parseInt(r[2],10),i=r[3].toLowerCase(),a=r[4]?.trim()??null,l=`${r[1]}${r[2]!==void 0?`:${r[2]}`:""}${i}`;return{state:"LIMITED",resets_at:a===null?null:aX(n.timestamp,s,o,i,a),reset_time:l,timezone:a,detected_at:n.timestamp.toISOString()}}return null}function aX(t,e,n,r,s){if(!Number.isFinite(t.getTime())||e<1||e>12||n<0||n>59)return null;let o=lX(e,r);try{let i=cX(t,s),a=iN(i.year,i.month,i.day,o,n,s);if(a.getTime()<=t.getTime()){let l=mX(i,1);a=iN(l.year,l.month,l.day,o,n,s)}return a.toISOString()}catch{return null}}function lX(t,e){return e==="am"?t===12?0:t:t===12?12:t+12}function cX(t,e){let n=aN(e,!1).formatToParts(t);return{year:Vn(n,"year"),month:Vn(n,"month"),day:Vn(n,"day")}}function iN(t,e,n,r,s,o){let i=Date.UTC(t,e-1,n,r,s,0,0);for(let a=0;a<3;a+=1){let l=dX(new Date(i),o);i=Date.UTC(t,e-1,n,r,s,0,0)-l}return new Date(i)}function dX(t,e){let n=aN(e,!0).formatToParts(t);return Date.UTC(Vn(n,"year"),Vn(n,"month")-1,Vn(n,"day"),Vn(n,"hour"),Vn(n,"minute"),Vn(n,"second"),0)-t.getTime()}function aN(t,e){let n=e?fX:uX,r=n.get(t);if(r!==void 0)return r;let s=new Intl.DateTimeFormat("en-US",{timeZone:t,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",...e?{hour:"2-digit",minute:"2-digit",second:"2-digit"}:{}});return n.set(t,s),s}function Vn(t,e){let n=t.find(r=>r.type===e)?.value;if(n===void 0)throw new Error(`missing ${e}`);return Number.parseInt(n,10)}function mX(t,e){let n=new Date(Date.UTC(t.year,t.month-1,t.day+e));return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate()}}var iX,uX,fX,lN=L(()=>{"use strict";iX=/you['\u2019]ve hit your session limit\s*(?:\u00b7|-|:)?\s*resets\s+([0-9]{1,2})(?::([0-9]{2}))?\s*(am|pm)\s*(?:\(([^)]+)\))?/i;uX=new Map,fX=new Map});var TN={};me(TN,{appendIntent:()=>p_,formatAge:()=>wa,formatDuration:()=>xd,resolveIntentLogPath:()=>mN,runStatus:()=>bX,shortIdentity:()=>En});import{appendFileSync as pX,existsSync as hX,mkdirSync as _X}from"node:fs";import{homedir as gX}from"node:os";import{basename as yX,dirname as fN,isAbsolute as EX,join as wX,resolve as TX}from"node:path";function mN(){return process.env.LMCTL_INTENT_LOG??wX(gX(),".lmctl","recent-intents.log")}function p_(t){try{let e=mN();_X(fN(e),{recursive:!0});let n=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});pX(e,`${n}
2580
+ `)}catch{}}async function bX(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(vX),0;let n=t.find(a=>a==="--project"||a.startsWith("--project=")||a==="--web");if(n!==void 0)return D(e,`unknown option ${n}; lmctl status is team/SELF scoped now`);let r=ae(t,["--since"],["--json","--details"]);if(r.error!==void 0)return D(e,r.error);let s=Y(r,"--json"),o=Y(r,"--details");if(r.positionals.length>0){let a=await kX(e,r.positionals,{json:s,details:o,since:V(r,"--since")});return a===0&&p_({verb:"status",args:t}),a}if(o)return D(e,"--details only applies with a teamfile argument (lmctl status <teamfile> --details)");let i=GX(V(r,"--since"));if("error"in i)return D(e,i.error);try{let a=e.env??process.env;if(s){let l=await W(e,c=>dN(c,a));Z(e,{schema_version:w_,...l})}else{let l=await W(e,async c=>UX(await dN(c,a),{sinceIso:i.iso}));e.stdout.write(l)}return p_({verb:"status",args:t}),0}catch(a){return D(e,a instanceof Error?a.message:String(a))}}async function kX(t,e,n){if(e.length>2)return D(t,`too many positionals (${e.length}); expected <teamfile> [alias]`);if(n.since!==void 0)return D(t,"--since only applies to the activity view (lmctl status with no teamfile argument)");let r=on(IX,{target:e[0],alias:e[1],flags:{}});if(r.mode==="error")return D(t,r.message);if(r.mode!=="ai-team")return D(t,"lmctl status: expected <teamfile> [alias]");try{return r.alias===void 0?await VX(t,r.teamfile,n.json,n.details):await ZX(t,r.teamfile,r.alias,n.json)}catch(s){return s instanceof ge?D(t,s.message):D(t,`status: ${s instanceof Error?s.message:String(s)}`)}}async function dN(t,e){let n=$p(e,t);if(!n.ok){if(n.reason==="not-found")throw new Error(cs("status",e,t));return await NX(t)}return await AX(t,n.identity,e)}async function AX(t,e,n){let r=ds(e),s=t.getRootTeam(r.teamfile);if(s===null)throw new Error(cs("status",n,t));let o=rn(s.teamfile_path,t),i=__(Rd(t,{from:r.value})),a=__(Rd(t,{target_teamfile:r.teamfile,target_alias:r.alias})),l=CX([...h_(t,{from:r.value}),...h_(t,{target_teamfile:r.teamfile,target_alias:r.alias})]);return{scope:"self",identity:r.value,...pN(),team:{name:o.name,teamfile:s.teamfile_path},members:o.members.map(c=>xX(t,s.teamfile_path,c)),activity:{from_me:i.map(c=>g_(c)),to_me:a.map(c=>g_(c))},transcript_harvest:await hN(l)}}function pN(){let t=null;try{t=fT($l())}catch{}return{db_path:Ye(),site_name:t}}async function NX(t){let e=t.listRootTeams();return{scope:"db",identity:null,...pN(),teams:e.map(n=>RX(t,n)),activity:__(Rd(t)).map(n=>g_(n)),transcript_harvest:await hN(h_(t))}}function RX(t,e){if(!hX(e.teamfile_path))return{name:e.name,teamfile:e.teamfile_path,member_count:0,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at,missing_on_disk:!0};let n=0;try{n=rn(e.teamfile_path,t).members.length}catch{n=0}return{name:e.name,teamfile:e.teamfile_path,member_count:n,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at}}function xX(t,e,n){let r=n.teamfile===void 0?null:Ne(EX(n.teamfile)?n.teamfile:TX(fN(e),n.teamfile),t),s=en(t,e,n.alias),o=s.busy&&s.reason==="in-flight"?LX(t,e,n.alias,s.inFlight):null;return{alias:n.alias,provider:n.provider,model:n.model??null,teamfile:e,referenced_teamfile:r,sessionid:n.session??null,sessiondir:n.sessiondir??null,state:s.busy?"busy":"idle",reason:s.busy?s.reason:null,handling:o,reclaimable:!s.busy&&s.reclaimable!==void 0?s.reclaimable:null}}function LX(t,e,n,r){let s=r.sender_alias==="operator"?"operator":`${r.sender_teamfile}:${r.sender_alias}`,i=t.db.prepare(`
2581
2581
  SELECT * FROM tracked_invocation
2582
2582
  WHERE kind = 'chat'
2583
2583
  AND status = 'running'
@@ -2591,12 +2591,12 @@ Example:
2591
2591
  SELECT * FROM tracked_invocation
2592
2592
  ${s}
2593
2593
  ORDER BY started_at DESC, id DESC
2594
- `).all(...r)}function h_(t,e={}){return Rd(t,e).filter(r=>r.kind==="chat"&&r.status==="running"&&ar(r)==="dead")}function CX(t){let e=new Set,n=[];for(let r of t)e.has(r.id)||(e.add(r.id),n.push(r));return n.sort((r,s)=>{let o=Date.parse(s.started_at)-Date.parse(r.started_at);return Number.isFinite(o)&&o!==0?o:s.id-r.id})}function __(t){return t.filter(e=>ar(e)!=="dead")}async function hN(t){let e=[];for(let n of t)e.push(await OX(n));return e}async function OX(t){let e=t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,n={tracked_invocation_id:t.id,from_identity:t.from_identity,target:e??"(unknown)",started_at:t.started_at,tail_hint:e===null?"":`lmctl tail "${t.target_teamfile}" ${t.target_alias}`};if(e===null)return vs(n,"missing-target",null,null);if(t.request_payload===null||t.request_payload.length===0)return vs(n,"missing-request-payload",null,null);let r=DX(t.meta);if(r.provider===null||r.sessionid===null)return vs(n,"missing-session-metadata",r.provider,r.sessionid);if(!ts(r.provider))return vs(n,"unsupported-provider",r.provider,r.sessionid);let s;try{s=await He(r.sessionid,r.provider)}catch{return vs(n,"read-error",r.provider,r.sessionid)}if(s===null)return vs(n,"session-not-found",r.provider,r.sessionid);let o=MX(t.request_payload,s.messages);return o.state!=="completed"?vs(n,o.reason,r.provider,r.sessionid):{...n,state:"completed",reason:null,provider:r.provider,session_id:r.sessionid,result_payload:o.result,result_preview:TN(o.result),assistant_timestamp:o.assistantTimestamp,matched_user_index:o.userIndex}}function vs(t,e,n,r){return{...t,state:"unreconciled",reason:e,provider:n,session_id:r,result_payload:null,result_preview:null,assistant_timestamp:null,matched_user_index:null}}function DX(t){if(t===null||t.trim()==="")return{provider:null,sessionid:null};try{let e=JSON.parse(t);return{provider:typeof e.provider=="string"&&e.provider.length>0?e.provider:null,sessionid:typeof e.sessionid=="string"&&e.sessionid.length>0?e.sessionid:null}}catch{return{provider:null,sessionid:null}}}function MX(t,e){let n=e.map((o,i)=>({message:o,index:i})).filter(({message:o})=>o.role==="user"&&o.content===t);if(n.length===0)return{state:"unreconciled",reason:"request-not-found"};if(n.length>1)return{state:"unreconciled",reason:"duplicate-request"};let r=n[0].index,s=[];for(let o of e.slice(r+1)){if(o.role==="user")break;o.role==="assistant"&&o.content.trim().length>0&&s.push(o)}return s.length===0?{state:"unreconciled",reason:"no-assistant-response"}:{state:"completed",userIndex:r,result:s.map(o=>o.content).join(`
2594
+ `).all(...r)}function h_(t,e={}){return Rd(t,e).filter(r=>r.kind==="chat"&&r.status==="running"&&ar(r)==="dead")}function CX(t){let e=new Set,n=[];for(let r of t)e.has(r.id)||(e.add(r.id),n.push(r));return n.sort((r,s)=>{let o=Date.parse(s.started_at)-Date.parse(r.started_at);return Number.isFinite(o)&&o!==0?o:s.id-r.id})}function __(t){return t.filter(e=>ar(e)!=="dead")}async function hN(t){let e=[];for(let n of t)e.push(await OX(n));return e}async function OX(t){let e=t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,n={tracked_invocation_id:t.id,from_identity:t.from_identity,target:e??"(unknown)",started_at:t.started_at,tail_hint:e===null?"":`lmctl tail "${t.target_teamfile}" ${t.target_alias}`};if(e===null)return vs(n,"missing-target",null,null);if(t.request_payload===null||t.request_payload.length===0)return vs(n,"missing-request-payload",null,null);let r=DX(t.meta);if(r.provider===null||r.sessionid===null)return vs(n,"missing-session-metadata",r.provider,r.sessionid);if(!ts(r.provider))return vs(n,"unsupported-provider",r.provider,r.sessionid);let s;try{s=await He(r.sessionid,r.provider)}catch{return vs(n,"read-error",r.provider,r.sessionid)}if(s===null)return vs(n,"session-not-found",r.provider,r.sessionid);let o=MX(t.request_payload,s.messages);return o.state!=="completed"?vs(n,o.reason,r.provider,r.sessionid):{...n,state:"completed",reason:null,provider:r.provider,session_id:r.sessionid,result_payload:o.result,result_preview:wN(o.result),assistant_timestamp:o.assistantTimestamp,matched_user_index:o.userIndex}}function vs(t,e,n,r){return{...t,state:"unreconciled",reason:e,provider:n,session_id:r,result_payload:null,result_preview:null,assistant_timestamp:null,matched_user_index:null}}function DX(t){if(t===null||t.trim()==="")return{provider:null,sessionid:null};try{let e=JSON.parse(t);return{provider:typeof e.provider=="string"&&e.provider.length>0?e.provider:null,sessionid:typeof e.sessionid=="string"&&e.sessionid.length>0?e.sessionid:null}}catch{return{provider:null,sessionid:null}}}function MX(t,e){let n=e.map((o,i)=>({message:o,index:i})).filter(({message:o})=>o.role==="user"&&o.content===t);if(n.length===0)return{state:"unreconciled",reason:"request-not-found"};if(n.length>1)return{state:"unreconciled",reason:"duplicate-request"};let r=n[0].index,s=[];for(let o of e.slice(r+1)){if(o.role==="user")break;o.role==="assistant"&&o.content.trim().length>0&&s.push(o)}return s.length===0?{state:"unreconciled",reason:"no-assistant-response"}:{state:"completed",userIndex:r,result:s.map(o=>o.content).join(`
2595
2595
 
2596
2596
  `),assistantTimestamp:$X(s[s.length-1]?.timestamp)}}function $X(t){if(t===void 0)return null;let e=t.getTime();return Number.isFinite(e)?t.toISOString():null}function PX(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 g_(t){let e=PX(t.config_warnings),n={id:t.id,kind:t.kind,origin:t.origin,status:t.status,holder_liveness:ar(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:uN(t.result_summary),error:uN(t.error),...e!==void 0?{config_warnings:e}:{}};return t.error!==null&&yN.set(n,t.error),n}function UX(t,e){return t.scope==="self"?jX(t,e):WX(t,e)}function FX(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 jX(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"?FX(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:"),gN(n,t.transcript_harvest,"self"),n.push(""),n.push("activity from me:"),y_(n,E_(t.activity.from_me,e.sinceIso),"from-me"),n.push(""),n.push("activity to me:"),y_(n,E_(t.activity.to_me,e.sinceIso),"to-me"),n.push(""),n.push(_N(t)),n.join(`
2597
2597
  `)}function WX(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:"),gN(n,t.transcript_harvest,"db"),n.push(""),n.push("recent activity:"),y_(n,E_(t.activity,e.sinceIso),"db"),n.push(""),n.push(_N(t)),n.join(`
2598
- `)}function _N(t){return di(t.db_path)}function y_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Nd))HX(t,r,n);EN(t,e.length,Nd,"older")}function gN(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Nd)){let s=n==="db"?` from ${En(r.from_identity)} -> ${En(r.target)}`:` -> ${En(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}`)}EN(t,e.length,Nd,"more transcript harvest rows")}function E_(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 HX(t,e,n){let r=XX(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=ml(yN.get(e)??"",m_),a=o===null?"":` "${i??TN(o)}"`;if(t.push(` #${e.id} ${BX(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 BX(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.status.toUpperCase()}function XX(t,e){if(e==="from-me")return t.target===null?"":` -> ${En(t.target)}`;if(e==="to-me")return` from ${En(t.from_identity)}`;let n=t.target===null?"":` -> ${En(t.target)}`;return` from ${En(t.from_identity)}${n}`}function EN(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function uN(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function TN(t){let e=pT(t).replace(/\s+/g," ").trim();return e.length<=m_?e:`${e.slice(0,m_-3)}...`}function qX(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=cN?e:`${e.slice(0,cN-3)}...`}function xd(t){return(0,ct.formatDuration)(t)}function Ta(t){return(0,ct.formatRelativeTime)(t)}function En(t){if(t==="operator")return t;try{let e=ds(t);return`${yX(e.teamfile)}:${e.alias}`}catch{return t}}function GX(t){if(t===void 0)return{iso:new Date(Date.now()-SX).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 VX(t,e,n,r){let s=await W(t,d=>{let u=Ne(e,d),f=rn(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:ha(u,d,new Set,[])}}),o=Fh(s.teamfile),i=o.kind==="repo"?o:null,a=await _a(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(Ao(d.teamfile,d.alias))??md(),probed:!1,detailLoaded:!1},f=await Ph(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 He(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)}
2599
- `)}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:f_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:jh(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:Wh(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(Z(t,{schema_version:T_,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(YX(s.teamName,s.teamfile,o,l,r,c)),0)}function JX(t){return t.sessionid??"(not seeded)"}function KX(t){return t.sessionid===null?"not seeded":pd(t.liveness)}function YX(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}: ${pd(_.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(`
2598
+ `)}function _N(t){return di(t.db_path)}function y_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Nd))HX(t,r,n);EN(t,e.length,Nd,"older")}function gN(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Nd)){let s=n==="db"?` from ${En(r.from_identity)} -> ${En(r.target)}`:` -> ${En(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}`)}EN(t,e.length,Nd,"more transcript harvest rows")}function E_(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 HX(t,e,n){let r=XX(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=ml(yN.get(e)??"",m_),a=o===null?"":` "${i??wN(o)}"`;if(t.push(` #${e.id} ${BX(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 BX(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.status.toUpperCase()}function XX(t,e){if(e==="from-me")return t.target===null?"":` -> ${En(t.target)}`;if(e==="to-me")return` from ${En(t.from_identity)}`;let n=t.target===null?"":` -> ${En(t.target)}`;return` from ${En(t.from_identity)}${n}`}function EN(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function uN(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function wN(t){let e=pw(t).replace(/\s+/g," ").trim();return e.length<=m_?e:`${e.slice(0,m_-3)}...`}function qX(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=cN?e:`${e.slice(0,cN-3)}...`}function xd(t){return(0,ct.formatDuration)(t)}function wa(t){return(0,ct.formatRelativeTime)(t)}function En(t){if(t==="operator")return t;try{let e=ds(t);return`${yX(e.teamfile)}:${e.alias}`}catch{return t}}function GX(t){if(t===void 0)return{iso:new Date(Date.now()-SX).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 VX(t,e,n,r){let s=await W(t,d=>{let u=Ne(e,d),f=rn(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:ha(u,d,new Set,[])}}),o=Fh(s.teamfile),i=o.kind==="repo"?o:null,a=await _a(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(Ao(d.teamfile,d.alias))??md(),probed:!1,detailLoaded:!1},f=await Ph(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 He(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)}
2599
+ `)}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:f_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:jh(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:Wh(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(Z(t,{schema_version:w_,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(YX(s.teamName,s.teamfile,o,l,r,c)),0)}function JX(t){return t.sessionid??"(not seeded)"}function KX(t){return t.sessionid===null?"not seeded":pd(t.liveness)}function YX(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}: ${pd(_.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(`
2600
2600
  `)}
2601
2601
  `}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=fk(_.lastContext??void 0,_.detailLoaded,dk);(h==="n/a"||_.cumulativeTokens==="n/a")&&(d=!0);let g=[(0,ct.escapeCell)(JX(_)),(0,ct.escapeCell)(_.reportPath),(0,ct.escapeCell)(_.provider),(0,ct.escapeCell)(_.observedModel??"(unknown)"),KX(_),$t(_.messageCount),h];a!==null&&g.push($t(_.activitySinceLastCommit?.messageCount),$t(_.activitySinceLastCommit?.tokens),uk(_.cumulativeTokens)),f.push(g)}let m=["TOTAL","","","","",$t(o)];a!==null&&m.push("",$t(zX(r)),$t(null),$t(QX(r))),f.push(m);let p=(0,ct.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2602
2602
  `);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.
@@ -2604,10 +2604,10 @@ Example:
2604
2604
  full pre-compaction prompt \u2014 so this reads the OLD large number while the live context is already
2605
2605
  small. Re-read after the next turn before concluding a compaction failed or gating on the value.`),u.length>0){i.push("Session limits:");for(let _ of u)i.push(` ${_.reportPath}: LIMITED resets_at=${Uh(_.sessionLimit)}`)}return`${i.join(`
2606
2606
  `)}
2607
- `}function zX(t){let e=0;for(let n of t){let r=n.activitySinceLastCommit?.messageCount;r==null?e=void 0:e!==void 0&&(e+=r)}return e}function QX(t){let e=0;for(let n of t){let r=n.cumulativeTokens;r==null||r==="n/a"?e=void 0:e!==void 0&&(e+=r)}return e}async function ZX(t,e,n,r){let s=await W(t,p=>Ve(e,n,p)),o;try{o=await He(s.sessionid,s.provider)}catch(p){return D(t,`status: failed to load session: ${p instanceof Error?p.message:String(p)}`)}if(o===null)return D(t,`status: session not found: ${s.sessionid} (provider=${s.provider})`);let i=f_(o.messages),l=(await _a(t,[{teamfile:s.teamfile,alias:s.alias}])).get(Ao(s.teamfile,s.alias))??md(),c=await Ph(t,{teamfile:s.teamfile,alias:s.alias}),d=Fh(s.teamfile),u=d.kind==="repo"?d:null,f={provider:o.provider,sessionid:o.sessionId,seeded:!0,alias:s.alias,teamfile:s.teamfile,reportPath:s.alias,cwd:o.cwd,messageCount:o.messageCount??null,model:s.model??null,observed_model:o.model??null,lastContext:o.lastInputTokens??null,liveness:l,totalInputTokens:o.totalInputTokens??null,totalOutputTokens:o.totalOutputTokens??null,...o.totalCachedInputTokens!==void 0?{totalCachedInputTokens:o.totalCachedInputTokens}:{},sessionLimit:i,...c!==void 0?{config_warnings:c}:{},...u!==null?{activitySinceLastCommit:{messageCount:jh(o,u.since),tokens:null},cumulativeTokens:Wh(o)}:{},createdAt:o.createdAt.toISOString(),modifiedAt:o.modifiedAt.toISOString()};if(r)return Z(t,{schema_version:T_,scope:"member",...f}),0;let m=[];if(m.push(`Session: ${o.sessionId}`),m.push(` Provider: ${o.provider}`),m.push(` Alias: ${s.alias}`),m.push(` Liveness: ${pd(l)}`),m.push(` CWD: ${o.cwd}`),m.push(` Messages: ${$t(o.messageCount)}`),m.push(` Model (declared): ${s.model??"(none)"}`),m.push(` Model (observed): ${o.model??"(unknown)"}`),c!==void 0)for(let p of c)m.push(` Config NOT applied: ${p}`);if(o.totalInputTokens===void 0||o.totalOutputTokens===void 0)m.push(" Tokens: n/a");else{let p=` Tokens: ${(0,ct.formatCount)(o.totalInputTokens)} in / ${(0,ct.formatCount)(o.totalOutputTokens)} out`;f.totalCachedInputTokens!==void 0&&(p+=` (cached: ${(0,ct.formatCount)(f.totalCachedInputTokens)})`),m.push(p)}return(o.totalInputTokens===void 0||o.totalOutputTokens===void 0)&&m.push(" n/a = this provider does not expose a context/token total; absence is not a health signal."),m.push(` lastContext = prompt size of the LAST COMPLETED turn; it LAGS BY ONE TURN. Right after a
2607
+ `}function zX(t){let e=0;for(let n of t){let r=n.activitySinceLastCommit?.messageCount;r==null?e=void 0:e!==void 0&&(e+=r)}return e}function QX(t){let e=0;for(let n of t){let r=n.cumulativeTokens;r==null||r==="n/a"?e=void 0:e!==void 0&&(e+=r)}return e}async function ZX(t,e,n,r){let s=await W(t,p=>Ve(e,n,p)),o;try{o=await He(s.sessionid,s.provider)}catch(p){return D(t,`status: failed to load session: ${p instanceof Error?p.message:String(p)}`)}if(o===null)return D(t,`status: session not found: ${s.sessionid} (provider=${s.provider})`);let i=f_(o.messages),l=(await _a(t,[{teamfile:s.teamfile,alias:s.alias}])).get(Ao(s.teamfile,s.alias))??md(),c=await Ph(t,{teamfile:s.teamfile,alias:s.alias}),d=Fh(s.teamfile),u=d.kind==="repo"?d:null,f={provider:o.provider,sessionid:o.sessionId,seeded:!0,alias:s.alias,teamfile:s.teamfile,reportPath:s.alias,cwd:o.cwd,messageCount:o.messageCount??null,model:s.model??null,observed_model:o.model??null,lastContext:o.lastInputTokens??null,liveness:l,totalInputTokens:o.totalInputTokens??null,totalOutputTokens:o.totalOutputTokens??null,...o.totalCachedInputTokens!==void 0?{totalCachedInputTokens:o.totalCachedInputTokens}:{},sessionLimit:i,...c!==void 0?{config_warnings:c}:{},...u!==null?{activitySinceLastCommit:{messageCount:jh(o,u.since),tokens:null},cumulativeTokens:Wh(o)}:{},createdAt:o.createdAt.toISOString(),modifiedAt:o.modifiedAt.toISOString()};if(r)return Z(t,{schema_version:w_,scope:"member",...f}),0;let m=[];if(m.push(`Session: ${o.sessionId}`),m.push(` Provider: ${o.provider}`),m.push(` Alias: ${s.alias}`),m.push(` Liveness: ${pd(l)}`),m.push(` CWD: ${o.cwd}`),m.push(` Messages: ${$t(o.messageCount)}`),m.push(` Model (declared): ${s.model??"(none)"}`),m.push(` Model (observed): ${o.model??"(unknown)"}`),c!==void 0)for(let p of c)m.push(` Config NOT applied: ${p}`);if(o.totalInputTokens===void 0||o.totalOutputTokens===void 0)m.push(" Tokens: n/a");else{let p=` Tokens: ${(0,ct.formatCount)(o.totalInputTokens)} in / ${(0,ct.formatCount)(o.totalOutputTokens)} out`;f.totalCachedInputTokens!==void 0&&(p+=` (cached: ${(0,ct.formatCount)(f.totalCachedInputTokens)})`),m.push(p)}return(o.totalInputTokens===void 0||o.totalOutputTokens===void 0)&&m.push(" n/a = this provider does not expose a context/token total; absence is not a health signal."),m.push(` lastContext = prompt size of the LAST COMPLETED turn; it LAGS BY ONE TURN. Right after a
2608
2608
  compaction it still reports the pre-compaction size (the summarisation request itself).`),i!==null&&m.push(` SessionLimit: LIMITED resets_at=${Uh(i)}`),m.push(` Created: ${f.createdAt}`),m.push(` Modified: ${f.modifiedAt}`),t.stdout.write(`${m.join(`
2609
2609
  `)}
2610
- `),0}var ct,vX,T_,Nd,SX,m_,cN,IX,yN,w_=L(()=>{"use strict";ct=Ft(Ct(),1);Wt();It();le();Mc();Cn();Zi();sn();ot();Hh();Pl();mn();lN();yi();vX=`usage: lmctl status [--json] [--since <duration|ISO8601>]
2610
+ `),0}var ct,vX,w_,Nd,SX,m_,cN,IX,yN,T_=L(()=>{"use strict";ct=Ft(Ct(),1);Wt();It();le();Mc();Cn();Zi();sn();ot();Hh();Pl();mn();lN();yi();vX=`usage: lmctl status [--json] [--since <duration|ISO8601>]
2611
2611
  lmctl status <teamfile> [--details] [--json]
2612
2612
  lmctl status <teamfile> <alias> [--json]
2613
2613
 
@@ -2626,31 +2626,31 @@ With a teamfile and an alias: single-member deep view (session detail, token
2626
2626
  breakdown, liveness with terminal-lock/in-flight holder info).
2627
2627
 
2628
2628
  --json emits { schema_version: 2, scope: 'self'|'db'|'team'|'member', ... }.
2629
- `,T_=2,Nd=5,SX=24*60*60*1e3,m_=72,cN=80;IX={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};yN=new WeakMap});import{isAbsolute as eq,resolve as vN,join as SN}from"node:path";function IN(t){let e=bN.get(t);if(!e)throw Error("Unknown context");return e.dal()}function AN(t){return t!==null&&typeof t=="object"&&kN.has(t)}function NN(t){try{if(!t||typeof t!="object"||Array.isArray(t))return gt("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 gt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!eq(e.cwd))return gt("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 gt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return gt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return gt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return gt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return gt("invalid_argument","pid must be a positive integer");let s=vN(e.cwd),o=r.LMCTL_HOME||(r.HOME?SN(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?SN(o,"state.db"):void 0)))return gt("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(Ir(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:vN(s,Ye(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(Ir(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(Ir(w))})):(g.released++,f.delete(y))}catch(T){h.push(Ir(T))}return u.abort(_),E.length?c=Promise.all(E).then(()=>(h.length||m(h),g)):h.length||m(h),g}});return bN.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=Fe({path:p.dbPath})}}),kN.add(p),tq.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return gt("invalid_argument","Invalid context: "+Ir(e))}}var bN,tq,kN,Ld=L(()=>{"use strict";bt();Cn();Vc();bN=new WeakMap;tq=new WeakMap,kN=new WeakSet});var Dr,DN,Ose,Dse,Mse,$se,Pse,se,v_,Tn,Cd,Or,Od,Md,Ro,RN,xN,LN,xo,Dd,nq,CN,ON,MN,S_=L(()=>{"use strict";Dr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Dr(e);Object.freeze(t)}return t},DN=Dr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),Ose=Dr({status:"string",error:"string|null",code:"ErrorCode?"}),Dse=Dr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),Mse=Dr(["Provider1.Provider","Provider1.Model1","Provider2.Provider","Provider2.Model1","Provider3.Provider","Provider3.Model1"]),$se=Dr(["Provider1","Provider2","Provider3"]),Pse=Dr({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"},v_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},Tn={name:"teamfile",type:"string"},Cd={name:"alias",type:"string"},Or={name:"prompt",type:"string"},Od={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"}]},Md=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],Ro={name:"options",type:"map",optional:!0,keys:Md},RN={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},xN={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},LN={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},xo={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},Dd={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"}]},nq=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],CN={name:"options",type:"map",optional:!0,keys:nq},ON={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},MN=Dr([{name:"resolveProfilePath",implemented:!0,params:[se,v_],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,v_],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:"classifyFailure",implemented:!0,params:[{name:"text",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"model",type:"string"},{name:"status",type:"string"}]}],statuses:["ok","error"],results:{error:"string|null",class:"string",rule:"string|null"},effects:[],summary:"Classify a recorded provider failure text by the one classifier; text no rule recognises is `unknown`, never the nearest class.",scriptBinding:{name:"lm_classify_failure",params:[{name:"text",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"model",type:"string"},{name:"status",type:"string"}]}]}},{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,Tn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[Tn]}},{name:"resolveMember",implemented:!0,params:[se,Tn,Cd],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:[Tn,Cd]}},{name:"lintTeam",implemented:!0,params:[se,Tn],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:[Tn]}},{name:"seedTeam",implemented:!0,params:[se,Tn,RN],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:[Tn,RN]}},{name:"promptAgent",implemented:!0,params:[se,Od,Or,Ro],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...ON,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Od,Or,Ro]}},{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"},...Md]}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null",errorKind:"cycle|provider|target?",code:"ErrorCode?",errorClass:"string|null",usage:"map|null"},effects:["provider","db"],summary:"Turn a team member through native team admission.",scriptBinding:{name:"lm_prompt",params:[Tn,Cd,Or,{name:"options",type:"map",optional:!0,keys:[...Md,{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,xo,LN],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:[Od,{...LN,optional:!0}]}},{name:"getSession",implemented:!0,params:[se,xo],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:[xo]}},{name:"reserveSession",implemented:!0,params:[se,xo],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,xo,{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"},...Md]}],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"},Or,{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,xN],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:[xN]}},{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:[Tn,Cd]}},{name:"sessionAdmission",implemented:!0,params:[se,xo],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"},Od,Or,Ro],statuses:["ok","busy","stalled","empty","error"],results:{...ON,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"}]},Ro],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"},Or],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,Dd,Or,Ro],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:[Dd,Or,Ro]}},{name:"nativeSessionClose",implemented:!0,params:[se,Dd],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:[Dd]}},{name:"loadProperties",implemented:!0,params:[se,v_],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,CN],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:[CN]}}])});function $N(t){if(!AN(t))return gt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return gt("cancelled","Context is closed")}function PN(t){return MN.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var UN=L(()=>{"use strict";S_();Ld();Vc()});import{isAbsolute as rq,resolve as sq}from"node:path";function Pd(t){return Number.isFinite(t)&&Math.abs(t)<=oq}function iq(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(DN.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 k_(t,e=Date.now()){if(t===void 0)return{windowMs:FN};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||!Pd(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!Pd(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return Pd(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function $d(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function I_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return b_;let s=e.get(n);if(s===void 0){try{s=Ie(n)}catch{s=null}e.set(n,s)}return s===null?b_:vl(s,r)?.model??b_}async function jN(t,e={}){let n=$N(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=PN("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=FN;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!Pd(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=k_(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=IN(t),i=e?.teamfile!==void 0?rq(e.teamfile)?e.teamfile:sq(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=ar(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:$d(y),model:I_(y,u),started_at:y.started_at,parent_invocation_id:y.parent_invocation_id};if(T==="dead"){if(If(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($d).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=$d(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:I_(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=$d(S);E.push({id:S.id,kind:S.kind,origin:S.origin,from_identity:S.from_identity,target:b,model:I_(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:iq(o),running:[],dead:[],idle:[]}}}var FN,oq,b_,WN=L(()=>{"use strict";Ld();UN();S_();Wt();Cl();Ge();sn();FN=24*60*60*1e3,oq=864e13;b_="default"});var VN={};me(VN,{_setRunningWatchMaxTicksForTests:()=>cq,runRunning:()=>yq});import{resolve as aq}from"node:path";function cq(t){N_=t??void 0}function uq(t){let e=t.split(`
2630
- `,1)[0];return e.length<=R_?e:`${e.slice(0,R_)}\u2026`}function x_(t){return t.target!==null?En(t.target):t.from_identity}function BN(t){return[(0,Pt.escapeCell)(x_(t)),t.kind,"running",t.holder_liveness,(0,Pt.escapeCell)(t.model),Ta(t.started_at)]}function XN(t){return[(0,Pt.escapeCell)(x_(t)),t.kind,"DEAD","",(0,Pt.escapeCell)(t.model),`stale ${Ta(t.started_at)}, holder process confirmed dead`]}function qN(t){let e=`ran ${xd(t.ran_ms)}, idle ${Ta(t.ended_at)}`;return t.status==="error"&&t.error!==null&&t.error!==""&&(e+=` \u2014 ${(0,Pt.escapeCell)(ml(t.error,R_)??uq(t.error))}`),[(0,Pt.escapeCell)(x_(t)),t.kind,t.status,"",(0,Pt.escapeCell)(t.model),e]}function A_(t){return t.filter(e=>e!=="").join(" ")}function GN(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 mq(t){let{roots:e,childrenByParent:n}=GN(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 pq(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}=GN(r),i=a=>({...a,children:(o.get(a.id)??[]).map(i)});return s.map(i)}function hq(t,e){return e?{schema_version:HN,tree:pq(t.running,t.dead,t.idle)}:{schema_version:HN,running:t.running,dead:t.dead,idle:t.idle}}function _q(t){let e=[...t.running.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:A_(BN(r))})),...t.dead.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:A_(XN(r))})),...t.idle.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:A_(qN(r))}))],n=mq(e);return`${n.length>0?n.join(`
2629
+ `,w_=2,Nd=5,SX=24*60*60*1e3,m_=72,cN=80;IX={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};yN=new WeakMap});import{isAbsolute as eq,resolve as vN,join as SN}from"node:path";function IN(t){let e=bN.get(t);if(!e)throw Error("Unknown context");return e.dal()}function AN(t){return t!==null&&typeof t=="object"&&kN.has(t)}function NN(t){try{if(!t||typeof t!="object"||Array.isArray(t))return gt("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 gt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!eq(e.cwd))return gt("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 gt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return gt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return gt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return gt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return gt("invalid_argument","pid must be a positive integer");let s=vN(e.cwd),o=r.LMCTL_HOME||(r.HOME?SN(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?SN(o,"state.db"):void 0)))return gt("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(Ir(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:vN(s,Ye(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(Ir(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 w=y.finalizeSync(_);w instanceof Promise?E.push(w.then(()=>{g.released++,f.delete(y)}).catch(T=>{h.push(Ir(T))})):(g.released++,f.delete(y))}catch(w){h.push(Ir(w))}return u.abort(_),E.length?c=Promise.all(E).then(()=>(h.length||m(h),g)):h.length||m(h),g}});return bN.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=Fe({path:p.dbPath})}}),kN.add(p),tq.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return gt("invalid_argument","Invalid context: "+Ir(e))}}var bN,tq,kN,Ld=L(()=>{"use strict";bt();Cn();Vc();bN=new WeakMap;tq=new WeakMap,kN=new WeakSet});var Dr,DN,Ose,Dse,Mse,$se,Pse,se,v_,wn,Cd,Or,Od,Md,Ro,RN,xN,LN,xo,Dd,nq,CN,ON,MN,S_=L(()=>{"use strict";Dr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Dr(e);Object.freeze(t)}return t},DN=Dr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),Ose=Dr({status:"string",error:"string|null",code:"ErrorCode?"}),Dse=Dr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),Mse=Dr(["Provider1.Provider","Provider1.Model1","Provider2.Provider","Provider2.Model1","Provider3.Provider","Provider3.Model1"]),$se=Dr(["Provider1","Provider2","Provider3"]),Pse=Dr({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"},v_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},wn={name:"teamfile",type:"string"},Cd={name:"alias",type:"string"},Or={name:"prompt",type:"string"},Od={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"}]},Md=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],Ro={name:"options",type:"map",optional:!0,keys:Md},RN={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},xN={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},LN={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},xo={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},Dd={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"}]},nq=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"},{name:"reconcile",type:"boolean"}],CN={name:"options",type:"map",optional:!0,keys:nq},ON={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},MN=Dr([{name:"resolveProfilePath",implemented:!0,params:[se,v_],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,v_],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:"classifyFailure",implemented:!0,params:[{name:"text",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"model",type:"string"},{name:"status",type:"string"}]}],statuses:["ok","error"],results:{error:"string|null",class:"string",rule:"string|null"},effects:[],summary:"Classify a recorded provider failure text by the one classifier; text no rule recognises is `unknown`, never the nearest class.",scriptBinding:{name:"lm_classify_failure",params:[{name:"text",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"model",type:"string"},{name:"status",type:"string"}]}]}},{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,wn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[wn]}},{name:"resolveMember",implemented:!0,params:[se,wn,Cd],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:[wn,Cd]}},{name:"lintTeam",implemented:!0,params:[se,wn],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:[wn]}},{name:"seedTeam",implemented:!0,params:[se,wn,RN],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:[wn,RN]}},{name:"promptAgent",implemented:!0,params:[se,Od,Or,Ro],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...ON,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Od,Or,Ro]}},{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"},...Md]}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null",errorKind:"cycle|provider|target?",code:"ErrorCode?",errorClass:"string|null",usage:"map|null"},effects:["provider","db"],summary:"Turn a team member through native team admission.",scriptBinding:{name:"lm_prompt",params:[wn,Cd,Or,{name:"options",type:"map",optional:!0,keys:[...Md,{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,xo,LN],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:[Od,{...LN,optional:!0}]}},{name:"getSession",implemented:!0,params:[se,xo],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:[xo]}},{name:"reserveSession",implemented:!0,params:[se,xo],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,xo,{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"},...Md]}],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"},Or,{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,xN],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:[xN]}},{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:[wn,Cd]}},{name:"sessionAdmission",implemented:!0,params:[se,xo],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"},Od,Or,Ro],statuses:["ok","busy","stalled","empty","error"],results:{...ON,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"}]},Ro],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"},Or],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,Dd,Or,Ro],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:[Dd,Or,Ro]}},{name:"nativeSessionClose",implemented:!0,params:[se,Dd],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:[Dd]}},{name:"loadProperties",implemented:!0,params:[se,v_],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,CN],statuses:["ok","error"],results:{error:"string|null",running:"RunningRow[]",dead:"DeadRow[]",idle:"IdleRow[]"},effects:["db"],summary:"DB-wide view of tracked invocation activity. Read-only unless reconcile:true, which also aborts rows whose holder is confirmed dead. Dispatch and branch on status busy, never gate on this.",scriptBinding:{name:"lm_running",params:[CN]}}])});function $N(t){if(!AN(t))return gt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return gt("cancelled","Context is closed")}function PN(t){return MN.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var UN=L(()=>{"use strict";S_();Ld();Vc()});import{isAbsolute as rq,resolve as sq}from"node:path";function Pd(t){return Number.isFinite(t)&&Math.abs(t)<=oq}function iq(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(DN.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 k_(t,e=Date.now()){if(t===void 0)return{windowMs:FN};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||!Pd(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!Pd(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return Pd(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function $d(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function I_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return b_;let s=e.get(n);if(s===void 0){try{s=Ie(n)}catch{s=null}e.set(n,s)}return s===null?b_:vl(s,r)?.model??b_}async function jN(t,e={}){let n=$N(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=PN("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.reconcile!==void 0&&typeof e.reconcile!="boolean")return{status:"error",error:"reconcile must be a boolean",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=FN;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!Pd(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=k_(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=IN(t),i=e?.teamfile!==void 0?rq(e.teamfile)?e.teamfile:sq(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 w=ar(y),T=r-new Date(y.started_at).getTime(),S={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:$d(y),model:I_(y,u),started_at:y.started_at,parent_invocation_id:y.parent_invocation_id};if(w==="dead"){if(e?.reconcile===!0&&If(o,y)!==null)continue;m.push({...S,stale_for_ms:T})}else f.push({...S,running_for_ms:T,holder_liveness:w??"unknown"})}let p=new Set(d.map($d).filter(y=>y!==null)),_=new Date(r-s).toISOString(),h=o.listRecentlyFinishedTrackedInvocations(_).filter(c),g=new Set,E=[];for(let y of h){let w=$d(y);w===null||p.has(w)||g.has(w)||(g.add(w),E.push({id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:w,model:I_(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(T=>T.id),...m.map(T=>T.id),...E.map(T=>T.id)]),w=[...y];for(;w.length>0;){let T=o.listFinishedTrackedInvocationChildren(w,_).filter(S=>!y.has(S.id)&&c(S));if(T.length===0)break;w=[];for(let S of T){y.add(S.id),w.push(S.id);let b=$d(S);E.push({id:S.id,kind:S.kind,origin:S.origin,from_identity:S.from_identity,target:b,model:I_(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:iq(o),running:[],dead:[],idle:[]}}}var FN,oq,b_,WN=L(()=>{"use strict";Ld();UN();S_();Wt();Cl();Ge();sn();FN=24*60*60*1e3,oq=864e13;b_="default"});var VN={};me(VN,{_setRunningWatchMaxTicksForTests:()=>cq,runRunning:()=>yq});import{resolve as aq}from"node:path";function cq(t){N_=t??void 0}function uq(t){let e=t.split(`
2630
+ `,1)[0];return e.length<=R_?e:`${e.slice(0,R_)}\u2026`}function x_(t){return t.target!==null?En(t.target):t.from_identity}function BN(t){return[(0,Pt.escapeCell)(x_(t)),t.kind,"running",t.holder_liveness,(0,Pt.escapeCell)(t.model),wa(t.started_at)]}function XN(t){return[(0,Pt.escapeCell)(x_(t)),t.kind,"DEAD","",(0,Pt.escapeCell)(t.model),`stale ${wa(t.started_at)}, holder process confirmed dead`]}function qN(t){let e=`ran ${xd(t.ran_ms)}, idle ${wa(t.ended_at)}`;return t.status==="error"&&t.error!==null&&t.error!==""&&(e+=` \u2014 ${(0,Pt.escapeCell)(ml(t.error,R_)??uq(t.error))}`),[(0,Pt.escapeCell)(x_(t)),t.kind,t.status,"",(0,Pt.escapeCell)(t.model),e]}function A_(t){return t.filter(e=>e!=="").join(" ")}function GN(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 mq(t){let{roots:e,childrenByParent:n}=GN(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 pq(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}=GN(r),i=a=>({...a,children:(o.get(a.id)??[]).map(i)});return s.map(i)}function hq(t,e){return e?{schema_version:HN,tree:pq(t.running,t.dead,t.idle)}:{schema_version:HN,running:t.running,dead:t.dead,idle:t.idle}}function _q(t){let e=[...t.running.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:A_(BN(r))})),...t.dead.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:A_(XN(r))})),...t.idle.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:A_(qN(r))}))],n=mq(e);return`${n.length>0?n.join(`
2631
2631
  `):" none"}
2632
2632
  `}function gq(t,e){let n=[{title:`Running (${t.running.length}):`,rows:t.running.map(BN)},{title:`Dead (reclaimable) (${t.dead.length}):`,rows:t.dead.map(XN)},{title:`Idle, finished in the last ${xd(e)} (${t.idle.length}):`,rows:t.idle.map(qN)}],r=["MEMBER","KIND","STATE","LIVENESS","MODEL","TIMING"],s=(0,Pt.measureColumns)([{rows:[],headers:r},...n.map(a=>a.rows)],{max:fq}),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(`
2633
2633
  `)}
2634
2634
  `}async function yq(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${dq}
2635
- `),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=k_(V(n,"--since"));if("error"in l)return D(e,l.error);let c=V(n,"--watch-interval"),d=c===void 0?lq: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=NN({cwd:aq(e.cwd??process.cwd()),env:e.env??process.env,dal:f,dbPath:Ce(e)});if(m.status!=="ok")return D(e,m.error);let p=await jN(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 _=hq(p,s);return o?e.stdout.write(`${JSON.stringify(_)}
2635
+ `),0;let n=ae(t,["--team","--member","--since","--watch-interval"],["--json","--tree","--watch","--reconcile"]);if(n.error!==void 0)return D(e,n.error);let r=Y(n,"--json"),s=Y(n,"--tree"),o=Y(n,"--watch"),i=V(n,"--team"),a=V(n,"--member"),l=k_(V(n,"--since"));if("error"in l)return D(e,l.error);let c=V(n,"--watch-interval"),d=c===void 0?lq: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=NN({cwd:aq(e.cwd??process.cwd()),env:e.env??process.env,dal:f,dbPath:Ce(e)});if(m.status!=="ok")return D(e,m.error);let p=await jN(m,{teamfile:i,member:a,since:V(n,"--since"),tree:s,reconcile:Y(n,"--reconcile")});if(p.status!=="ok")return D(e,p.error??"listRunning failed");if(r){let _=hq(p,s);return o?e.stdout.write(`${JSON.stringify(_)}
2636
2636
  `):Z(e,_),0}return e.stdout.write(s?_q(p):gq(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)}
2637
- `)}finally{p=!1}m+=1,N_!==void 0&&m>=N_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var Pt,HN,lq,N_,dq,R_,fq,JN=L(()=>{"use strict";Pt=Ft(Ct(),1);Ld();WN();le();w_();It();HN=3,lq=2;dq=["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(`
2637
+ `)}finally{p=!1}m+=1,N_!==void 0&&m>=N_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var Pt,HN,lq,N_,dq,R_,fq,JN=L(()=>{"use strict";Pt=Ft(Ct(),1);Ld();WN();le();T_();It();HN=3,lq=2;dq=["usage: lmctl running [--team <file>] [--member <alias>] [--since <duration|ISO8601>]"," [--tree] [--reconcile] [--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.","","Looking is read-only: a dead holder is listed under Dead and left as it is.","Dispatch reconciles dead holders for its receiver. Scheduled lmbee maintenance","explicitly opts into --reconcile, which aborts confirmed-dead rows and","terminalizes their linked messages. Ordinary reads do not reconcile them.","","--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(`
2638
2638
  `),R_=120;fq=[26,void 0,void 0,void 0,24,void 0]});var zN={};me(zN,{runPrices:()=>vq});import{existsSync as Eq}from"node:fs";import{resolve as KN}from"node:path";function Ud(t,e,n="price snapshot unavailable"){return e?Z(t,{schema_version:1,status:"unavailable",reason:n}):t.stdout.write(`unavailable: ${n}
2639
- `),0}function Tq(t){let e=t?.code;return typeof e=="string"&&/SQLITE_(BUSY|LOCKED|READONLY|CANTOPEN)/.test(e)}function YN(t){return t.dal!==void 0?{db:t.dal,owned:!1}:{db:Fe({path:Ce(t),recover:!1}),owned:!0}}function wq(t){if(t.owned)try{t.db.close()}catch{}}async function vq(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Fd),0;let n=t[0];return n!=="update"&&n!=="show"?(e.stderr.write(`error: expected update or show
2639
+ `),0}function wq(t){let e=t?.code;return typeof e=="string"&&/SQLITE_(BUSY|LOCKED|READONLY|CANTOPEN)/.test(e)}function YN(t){return t.dal!==void 0?{db:t.dal,owned:!1}:{db:Fe({path:Ce(t),recover:!1}),owned:!0}}function Tq(t){if(t.owned)try{t.db.close()}catch{}}async function vq(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Fd),0;let n=t[0];return n!=="update"&&n!=="show"?(e.stderr.write(`error: expected update or show
2640
2640
  ${Fd}`),2):n==="update"?Sq(t.slice(1),e):bq(t.slice(1),e)}async function Sq(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"}
2641
- ${Fd}`),2;let r=z(n,"--json"),s=n.positionals[0],o=V(n,"--aliases"),i;try{if(s!==void 0){let l=KN(e.cwd??process.cwd(),s),c=o===void 0?void 0:KN(e.cwd??process.cwd(),o),d=cf(l,c);i=YN(e);let u=df(i.db.db,d);return r?Z(e,{...L_(qs(i.db.db),e.env??process.env),status:u}):e.stdout.write(`${u}
2641
+ ${Fd}`),2;let r=Y(n,"--json"),s=n.positionals[0],o=V(n,"--aliases"),i;try{if(s!==void 0){let l=KN(e.cwd??process.cwd(),s),c=o===void 0?void 0:KN(e.cwd??process.cwd(),o),d=cf(l,c);i=YN(e);let u=df(i.db.db,d);return r?Z(e,{...L_(qs(i.db.db),e.env??process.env),status:u}):e.stdout.write(`${u}
2642
2642
  `),0}if(o!==void 0)return e.stderr.write(`error: --aliases requires FILE
2643
2643
  `),2;i=YN(e);let a=await uf(i.db.db,{env:e.env??process.env,force:!0});return r?Z(e,{...L_(a.snapshot,e.env??process.env),status:a.status}):e.stdout.write(`${a.status}
2644
- `),0}catch(a){return Tq(a)?(r?Z(e,{schema_version:1,status:"deferred",reason:"database busy or read-only"}):e.stdout.write(`deferred
2644
+ `),0}catch(a){return wq(a)?(r?Z(e,{schema_version:1,status:"deferred",reason:"database busy or read-only"}):e.stdout.write(`deferred
2645
2645
  `),0):(e.stderr.write(`error: ${a instanceof Error?a.message:String(a)}
2646
- `),1)}finally{i!==void 0&&wq(i)}}function L_(t,e){if(t===null)return{schema_version:1,status:"unavailable",reason:"price snapshot unavailable"};let n=Date.parse(t.fetchedAt),r=Number.isFinite(n)?Math.max(0,Math.floor((Date.now()-n)/1e3)):null;return{schema_version:1,status:"ok",source:t.source,generated_at:t.generatedAt,fetched_at:t.fetchedAt,loaded_at:t.loadedAt,hash:t.sha256,record_count:t.recordCount,age_seconds:r,stale:r!==null&&r>Ms(e)/1e3}}async function bq(t,e){let n=ae(t,["--provider"],["--json"]);if(n.error||n.positionals.length>1)return e.stderr.write(`error: ${n.error??"show accepts at most one MODEL"}
2647
- ${Fd}`),2;let r=z(n,"--json"),s=n.positionals[0],o,i=!1;try{if(e.dal!==void 0)o=e.dal.db,i=!0;else{let a=Ce(e);if(!Eq(a))return Ud(e,r,"database unavailable");o=bn(a)}}catch(a){return Ud(e,r,a instanceof Error?a.message:"database unavailable")}try{let a=qs(o);if(a===null)return Ud(e,r);let l=L_(a,e.env??process.env);if(s===void 0)return r?Z(e,l):e.stdout.write(`source: ${String(l.source)}
2646
+ `),1)}finally{i!==void 0&&Tq(i)}}function L_(t,e){if(t===null)return{schema_version:1,status:"unavailable",reason:"price snapshot unavailable"};let n=Date.parse(t.fetchedAt),r=Number.isFinite(n)?Math.max(0,Math.floor((Date.now()-n)/1e3)):null;return{schema_version:1,status:"ok",source:t.source,generated_at:t.generatedAt,fetched_at:t.fetchedAt,loaded_at:t.loadedAt,hash:t.sha256,record_count:t.recordCount,age_seconds:r,stale:r!==null&&r>Ms(e)/1e3}}async function bq(t,e){let n=ae(t,["--provider"],["--json"]);if(n.error||n.positionals.length>1)return e.stderr.write(`error: ${n.error??"show accepts at most one MODEL"}
2647
+ ${Fd}`),2;let r=Y(n,"--json"),s=n.positionals[0],o,i=!1;try{if(e.dal!==void 0)o=e.dal.db,i=!0;else{let a=Ce(e);if(!Eq(a))return Ud(e,r,"database unavailable");o=bn(a)}}catch(a){return Ud(e,r,a instanceof Error?a.message:"database unavailable")}try{let a=qs(o);if(a===null)return Ud(e,r);let l=L_(a,e.env??process.env);if(s===void 0)return r?Z(e,l):e.stdout.write(`source: ${String(l.source)}
2648
2648
  generated_at: ${String(l.generated_at??"unknown")}
2649
2649
  hash: ${String(l.hash)}
2650
2650
  records: ${String(l.record_count)}
2651
2651
  age: ${String(l.age_seconds)}s${l.stale?" (stale)":""}
2652
- `),0;let c=V(n,"--provider"),d=c!==void 0?[{provider:c,result:St(c,s,a.catalog,a.aliases)}]:Object.keys(Zt).map(T=>({provider:T,result:St(T,s,a.catalog,a.aliases)})).filter(T=>T.result.offer!==null||T.result.state.kind==="known-unpriced"||T.result.state.kind==="unresolved"),u=d.filter(T=>T.result.offer!==null),f=new Set(u.map(T=>T.result.offer.route));if(c===void 0&&(f.size>1||u.length>0&&d.some(T=>T.result.offer===null)))return r?Z(e,{...l,status:"ambiguous",model:s,providers:d.map(T=>T.provider)}):e.stderr.write(`ambiguous model ${s}; specify --provider
2653
- `),1;let m=d[0],p=u[0]??m,_=p?.result.offer??null,h=_===null?null:a.catalog?.records.find(T=>(T.record_id??`${T.source}:${T.source_model_id}`)===_.route)??null,g=_===null?{inputPer1m:null,outputPer1m:null,cacheReadPer1m:null,cacheWritePer1m:null}:Zo({input:0,cachedInput:0,cacheWrite:0,output:0},_.pricing),E={input_per_1m_tokens:g.inputPer1m,output_per_1m_tokens:g.outputPer1m,input_cache_read_per_1m_tokens:g.cacheReadPer1m,input_cache_write_per_1m_tokens:g.cacheWritePer1m},y={...l,model:s,provider:p?.provider??c??null,resolution:p?.result.state??{kind:"unknown",declared:s},provenance:p?.result.provenance??null,record_id:_?.route??null,record:h?{...h,pricing:_?.pricing??h.pricing}:null,rates:E,raw_rates:_?.pricing??null,cache_write_1h_requires_per_turn_split:_?.pricing.source_cost_fields?.cache_creation_input_token_cost_above_1hr!==void 0};return r?Z(e,y):e.stdout.write(`${s}: ${y.resolution.kind}
2652
+ `),0;let c=V(n,"--provider"),d=c!==void 0?[{provider:c,result:St(c,s,a.catalog,a.aliases)}]:Object.keys(Zt).map(w=>({provider:w,result:St(w,s,a.catalog,a.aliases)})).filter(w=>w.result.offer!==null||w.result.state.kind==="known-unpriced"||w.result.state.kind==="unresolved"),u=d.filter(w=>w.result.offer!==null),f=new Set(u.map(w=>w.result.offer.route));if(c===void 0&&(f.size>1||u.length>0&&d.some(w=>w.result.offer===null)))return r?Z(e,{...l,status:"ambiguous",model:s,providers:d.map(w=>w.provider)}):e.stderr.write(`ambiguous model ${s}; specify --provider
2653
+ `),1;let m=d[0],p=u[0]??m,_=p?.result.offer??null,h=_===null?null:a.catalog?.records.find(w=>(w.record_id??`${w.source}:${w.source_model_id}`)===_.route)??null,g=_===null?{inputPer1m:null,outputPer1m:null,cacheReadPer1m:null,cacheWritePer1m:null}:Zo({input:0,cachedInput:0,cacheWrite:0,output:0},_.pricing),E={input_per_1m_tokens:g.inputPer1m,output_per_1m_tokens:g.outputPer1m,input_cache_read_per_1m_tokens:g.cacheReadPer1m,input_cache_write_per_1m_tokens:g.cacheWritePer1m},y={...l,model:s,provider:p?.provider??c??null,resolution:p?.result.state??{kind:"unknown",declared:s},provenance:p?.result.provenance??null,record_id:_?.route??null,record:h?{...h,pricing:_?.pricing??h.pricing}:null,rates:E,raw_rates:_?.pricing??null,cache_write_1h_requires_per_turn_split:_?.pricing.source_cost_fields?.cache_creation_input_token_cost_above_1hr!==void 0};return r?Z(e,y):e.stdout.write(`${s}: ${y.resolution.kind}
2654
2654
  source: ${String(l.source)}
2655
2655
  hash: ${String(l.hash)}
2656
2656
  age: ${String(l.age_seconds)}s${l.stale?" (stale)":""}
@@ -2668,21 +2668,21 @@ cache write: ${String(y.rates.input_cache_write_per_1m_tokens??"n/a")}
2668
2668
  show [MODEL] [--provider PROVIDER] [--json]
2669
2669
  Read the stored snapshot without files/network, or show its source and age.
2670
2670
  Rates are base-tier USD per million; 1-hour write blends need turn counters.
2671
- `});function Be(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 wn(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return Be(e==="percent"?n/100:n)}function ZN(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 e0(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function t0(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 n0(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 Lo(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 kq)n=n.replace(r,"***REDACTED***");return n}function Ze(t){let e=Be(t.used_fraction),n=Be(t.remaining_fraction),r=t.resets_at==null?e0(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?ZN(r):ZN(e0(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:Be(1-n)),remaining_fraction:n??(e===null?null:Be(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 Pe(t,e,n={}){let r={$schema:Iq,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 Re(t,e,n,r,s,o=[],i){return Pe(t,e,{source:s??null,reason:n,...r==null?{}:{detail:Lo(r,o)},...i==null?{}:{retry_after_seconds:i}})}function jd(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 dt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=Lo(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:
2672
- ${o}`)}function Mr(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=Lo(r,n);return{...t,detail:s,provider_message:s}}var Iq,kq,vn=L(()=>{"use strict";Iq="https://lmctl.com/schemas/lmratelimit-v1.json";kq=[/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 Nq,readFileSync as Rq}from"node:fs";import{join as xq}from"node:path";function Fq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function jq(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 Hq(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=Be(i/100);n.push(Ze({bucket_id:`${jq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:Be(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 wa(t,e,n){return Re("agy","provider_unavailable",t,e,"agy_cli_print")}function Bq(t,e,n={}){try{let r=$q(Math.max(t,60)*1e3,Fq(e));if(dt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return wa("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return wa("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return wa("cli_failed",r.error.message,t);let s=Hq(r.stdout??"");return s.length===0?wa("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Pe("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return wa("cli_failed",r instanceof Error?r.message:String(r),t)}}function o0(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 Xq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=o0(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[r0],t[s0],-1);try{for(let s of Nq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of Rq(xq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[r0],o[s0],Number(s))}catch{}}catch{}return e}function qq(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=wn(l.remainingFraction,"fraction");r.push(Ze({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:n0(l.window),used_fraction:c===null?null:Be(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??""))),Pe("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function Gq(t,e,n={}){try{let s=Uq(e).map(([a,l,c])=>[o0(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return Re("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 Pq(`http://${a}${Lq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(dt(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=qq(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 Re("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 Re("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function i0(t){let e=await Gq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Bq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:Re("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 r0,s0,Lq,Cq,Oq,Dq,Mq,$q,Pq,Uq,a0=L(()=>{"use strict";vn();vn();r0="ANTIGRAVITY_LS_ADDRESS",s0="ANTIGRAVITY_CSRF_TOKEN",Lq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",Cq=["-p","/usage"],Oq=(t,e)=>{let n=Aq("agy",Cq,{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}},Dq=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()}},Mq=t=>Xq(t),$q=Oq,Pq=Dq,Uq=Mq});import{randomUUID as d0}from"node:crypto";import{mkdirSync as Vq,readFileSync as C_,realpathSync as Jq,renameSync as Kq,rmSync as O_,statSync as l0,writeFileSync as u0}from"node:fs";import{homedir as Yq}from"node:os";import{join as D_}from"node:path";import{setTimeout as zq}from"node:timers/promises";function P_(t){return D_(t.CLAUDE_CONFIG_DIR??D_(t.HOME??Yq(),".claude"),".credentials.json")}function M_(t){let e=JSON.parse(C_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function $_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function f0(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=P_(t);try{let n=$_(M_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Jq(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 Wd(t){return typeof t.expiresAt=="number"&&Date.now()+eG>=t.expiresAt}function c0(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function tG(t,e){let n=`${t}.lmctl-refresh.lock`,r=D_(n,"owner.json"),s=d0();for(;;){e.throwIfAborted();try{Vq(n,{mode:448});try{u0(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw O_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(C_(r,"utf8")).token===s&&O_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(C_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-l0(n).mtimeMs>6e4}catch{try{i=Date.now()-l0(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await zq(50,void 0,{signal:e})}}}async function m0(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await tG(t.path,e);try{let r=$_(M_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!c0(r,t.oauth)&&!Wd(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Zq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:Qq})});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=M_(t.path),l=$_(a);if(!l||!c0(r,l)){if(l&&typeof l.accessToken=="string"&&!Wd(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}.${d0()}.tmp`;try{u0(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Kq(d,t.path)}finally{O_(d,{force:!0})}return c}finally{n()}}var Qq,Zq,eG,p0=L(()=>{"use strict";Qq="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Zq="https://console.anthropic.com/v1/oauth/token",eG=3e5});import{spawnSync as g0}from"node:child_process";function sG(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 y0(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function oG(t){try{let e=g0("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:y0(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Jt(t,e,n,r="claude_oauth_api",s){return Re("claude",t,e,n,r,void 0,s)}function iG(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function aG(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 cG(t){let e=[];for(let n of t.split(/\r?\n/)){let r=lG.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(Ze({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:wn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:aG(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 dG(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 uG(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=wn(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 _0(t,e,n,r={}){try{let s=g0("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:y0(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";dt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=cG(o);if(!i.length)return;let a=dG(o);return Pe("claude",Ke.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 E0({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=f0(e);if(s.error==="not_claude_ai_subscriber")return Jt(Ke.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Jt(Ke.unavailable,"credentials_missing",`credentials file not found: ${P_(e)}`);if(s.error)return Jt(Ke.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(h0))return Jt(Ke.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${h0} 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 m0({...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 Jt(Ke.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Jt(Ke.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 Jt(S?Ke.expired:Ke.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${S?"; renew Claude login":"; try again later"}`)}};if(Wd(o)){let T=await E();if(T)return T}let y=()=>fetch(`${nG}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":rG,"Content-Type":"application/json","User-Agent":oG(e)},signal:a.signal});if(c=await y(),d=await c.text(),dt({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(),dt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await _0(o,e,t,{debug:n,onRawResponse:r});return E||Jt(Ke.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>Mr(Jt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ke.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ke.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=iG(c.headers),E=await _0(o,e,t,{debug:n,onRawResponse:r});return E||u(Ke.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Ke.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Jt(Ke.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Jt(Ke.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=sG(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[Ze({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:wn(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"?[]:[Ze({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:wn(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=uG(m.spend,m.extra_usage);return Pe("claude",Ke.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 nG,rG,h0,Ke,lG,T0=L(()=>{"use strict";vn();p0();vn();nG="https://api.anthropic.com",rG="oauth-2025-04-20",h0="user:profile";Ke={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};lG=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as S0}from"node:crypto";import{mkdirSync as fG,readFileSync as U_,realpathSync as mG,renameSync as pG,rmSync as F_,statSync as w0,writeFileSync as b0}from"node:fs";import{homedir as hG}from"node:os";import{join as j_}from"node:path";import{setTimeout as _G}from"node:timers/promises";function va(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function H_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||j_(t.HOME||hG(),".codex");return j_(e,"auth.json")}function W_(t){let e=va(JSON.parse(U_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function I0(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=H_(t);try{let n=va(W_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:mG(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function v0(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 EG(t,e){let n=`${t}.lmctl-refresh.lock`,r=j_(n,"owner.json"),s=S0();for(;;){e.throwIfAborted();try{fG(n,{mode:448});try{b0(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw F_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(U_(r,"utf8")).token===s&&F_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(U_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-w0(n).mtimeMs>6e4}catch{try{i=Date.now()-w0(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await _G(50,void 0,{signal:e})}}}async function k0(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await EG(t.path,e);try{let r=W_(t.path),s=va(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!v0(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(gG,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:yG})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=va(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=W_(t.path),l=va(a.tokens);if(!l||!v0(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}.${S0()}.tmp`;try{b0(u,JSON.stringify(d),{flag:"wx",mode:384}),pG(u,t.path)}finally{F_(u,{force:!0})}return c}finally{n()}}var gG,yG,A0=L(()=>{"use strict";gG="https://auth.openai.com/oauth/token",yG="app_EMoamEEZ73f0CkXaXp7hrann"});function Sn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function N0(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 R0(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function vG(t){if(Sn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function SG(t){let e=[],n=Sn(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=Sn(n[i])?n[i]:void 0;if(!a)continue;let l=N0(a.limit_window_seconds);e.push(Ze({bucket_id:`codex-${R0(l)}`,group_name:"codex",window_type:l,used_fraction:wn(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(!Sn(i))continue;let a=Sn(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=Sn(a[m])?a[m]:void 0;if(!p)continue;let _=N0(p.limit_window_seconds);e.push(Ze({bucket_id:`${d}-${R0(_)}`,group_name:l||d,window_type:_,used_fraction:wn(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 bG(t){let e=Sn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Sn(t.spend_control)?t.spend_control:void 0,s=Sn(t.credits)?t.credits:void 0;return Pe("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:SG(t),...s?{credits:vG(s)}:{},...r?{spend_control:r}:{}})}async function x0(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=I0(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Pe("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${H_(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)=>Mr(Pe("codex",S,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let S=await k0({...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",k=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return Pe("codex",k?"auth_expired":"provider_unavailable",{source:"codex_http",reason:k?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${b})${k?"; renew Codex login":"; try again later"}`})}},y=()=>{let S={Authorization:`Bearer ${c}`,"User-Agent":wG,"Content-Type":"application/json",Accept:"application/json"};u&&(S["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||TG).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:S,signal:a.signal})},T=await y();if(p=await T.text(),dt({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(),dt({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 Pe("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:Lo(String(S),d)})}return Sn(w)?bG(w):Pe("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 Pe("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:Lo(f,d)})}finally{clearTimeout(l)}}var TG,wG,L0=L(()=>{"use strict";vn();A0();vn();TG="https://chatgpt.com/backend-api",wG="codex-cli"});import{createHash as IG,randomUUID as kG}from"node:crypto";import{readFileSync as $0,openSync as AG,fsyncSync as NG,closeSync as RG,mkdirSync as C0,writeFileSync as P0,renameSync as xG,rmSync as LG,rmdirSync as CG,statSync as B_,utimesSync as OG}from"node:fs";import{homedir as DG}from"node:os";import{basename as MG,dirname as $G,join as Hd}from"node:path";import{setTimeout as U0}from"node:timers/promises";function UG(t){let e;try{e=$0(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 Bd(t){let e;try{e=JSON.parse($0(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 F0(t){let e=t.KIMI_CODE_HOME??Hd(t.HOME??DG(),".kimi-code"),n=UG(t.KIMI_CODE_CONFIG_PATH??Hd(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=D0(t.KIMI_CODE_BASE_URL??n.base_url??O0),o=D0(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?X_:n["oauth.oauth_host"]??X_)),i=s===O0&&o===X_?"kimi-code":`kimi-code-env-${IG("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??Hd(e,"credentials",`${i}.json`),l=Bd(a),c=a,d=MG(a,".json");return{home:e,path:c,lockTarget:Hd(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function Xd(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 M0(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 FG(t,e){C0($G(t),{recursive:!0}),P0(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{C0(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-B_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await U0(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=B_(n),s=()=>{let i;try{i=B_(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;OG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),CG(n)}catch{}}}}async function j0(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await FG(t.lockTarget,e);try{let r=Bd(t.path);if(!M0(r,t.token)&&!Xd(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:PG,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 U0(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Bd(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=Bd(t.path);if(!M0(l,r)){if(!Xd(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}.${kG()}.tmp`;try{let u=AG(d,"wx",384);try{P0(u,JSON.stringify(c,null,2)+`
2673
- `),NG(u)}finally{RG(u)}n.assertOwned(),xG(d,t.path)}finally{LG(d,{force:!0})}return c}finally{n.release()}}var O0,X_,PG,D0,W0=L(()=>{"use strict";O0="https://api.kimi.com/coding/v1",X_="https://auth.kimi.com",PG="17e5f671-d194-4dfb-9706-5516cb48c098",D0=t=>t.trim().replace(/\/+$/,"")});function H0(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 B0({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=F0(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 Re("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 j0({...s,token:o},i.signal),_=!0};Xd(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(),dt({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(),dt({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 Re("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Mr(Re("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 _=jd(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 Re("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return Re("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(Ze(_))}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=t0(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=H0(g);if(!w)continue;let{used:S,limit:b,remaining:k}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:Be(S/b),remaining_fraction:Be(k/b),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=H0(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:Be(_.used/_.limit),remaining_fraction:Be(_.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(Ze({bucket_id:g,window_type:E,used_fraction:Be(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Pe("kimi","ok",{source:"kimi_http",buckets:f})}var X0=L(()=>{"use strict";vn();W0();vn()});function Sa(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function qd(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()!==""){let e=Number(t);if(Number.isFinite(e))return e}}async function q0(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s,fetchFn:o=fetch}=t,i=n.OLLAMA_API_KEY?.trim();if(!i)return Re("ollama-cloud","provider_unavailable","credentials_missing","$OLLAMA_API_KEY is missing","ollama_http");let a="https://ollama.com/api/balance",l=new AbortController,c=setTimeout(()=>l.abort(),Math.ceil(e*1e3)),d,u="";try{d=await o(a,{method:"GET",redirect:"error",headers:{Authorization:`Bearer ${i}`,Accept:"application/json"},signal:l.signal}),u=await d.text();let h=u;try{h=JSON.stringify(JSON.parse(u))}catch{}dt({debug:r,onRawResponse:s},"ollama_http",h,[i],d.status)}catch(h){let g=h instanceof Error&&h.name==="AbortError",E=g?`Ollama quota request timed out after ${e}s`:`Ollama quota request failed (${h instanceof Error?h.message:String(h)})`;return Re("ollama-cloud","provider_unavailable",g?"request_timeout":"request_failed",E,"ollama_http",[i])}finally{clearTimeout(c)}let f=(h,g,E)=>Mr(Re("ollama-cloud",h,g,g,"ollama_http",[i],E),u,[i]);if(d.status===401)return f("auth_expired","HTTP 401 from Ollama balance endpoint");if(d.status===403)return f("not_applicable","HTTP 403 from Ollama balance endpoint");if(d.status===429){let h=jd(d.headers);return f("reader_throttled","HTTP 429 from Ollama balance endpoint",h)}if(d.status!==200)return f("provider_unavailable",`HTTP ${d.status} from Ollama balance endpoint`);let m;try{m=JSON.parse(u)}catch{return Re("ollama-cloud","provider_unavailable","malformed_response","SyntaxError: malformed JSON","ollama_http")}if(!Sa(m))return Re("ollama-cloud","provider_unavailable","malformed_response","response was not an object","ollama_http");let p=[];if(Sa(m.included)){let h=m.included,g=qd(h.allowance_usd),E=qd(h.balance_usd),y=Sa(h.period)?h.period:void 0,T=typeof y?.from=="string"?Date.parse(y.from):NaN,w=typeof y?.until=="string"?Date.parse(y.until):NaN,S=Number.isFinite(T)&&Number.isFinite(w)&&w>T,b=S?new Date(w).toISOString():null;if(g!==void 0&&g>0&&E!==void 0){let k=Math.max(0,g-E);p.push({...Ze({bucket_id:"ollama-cloud-monthly",group_name:"ollama-cloud",window_type:"monthly",used_fraction:Be(k/g),remaining_fraction:Be(E/g),resets_at_iso:b,is_exhausted:E<=0,raw_value:E,raw_scale:"balance_usd"}),window_start_iso:S?new Date(Math.floor(T/1e3)*1e3).toISOString().replace(".000Z","Z"):null})}if(g===void 0&&E===void 0)for(let[k,N,O]of[["session","five_hour","5h"],["weekly","weekly","weekly"]]){let I=h[k];if(!Sa(I))continue;let v=qd(I.remaining_percent);v===void 0||v<0||v>100||p.push(Ze({bucket_id:`ollama-cloud-${O}`,group_name:"ollama-cloud",window_type:N,remaining_fraction:v/100,resets_at_iso:typeof I.resets_at=="string"?I.resets_at:null,raw_value:v,raw_scale:"remaining_percent"}))}}let _;if(Sa(m.purchased)){let h=m.purchased,g=qd(h.balance_usd);g!==void 0&&(_={has_credits:g>0,balance:g})}return p.length===0&&_===void 0?Re("ollama-cloud","provider_unavailable","malformed_response","response has no usable included allowance or purchased balance","ollama_http"):Pe("ollama-cloud","ok",{source:"ollama_http",buckets:p,..._?{credits:_}:{}})}var G0=L(()=>{"use strict";vn()});async function V0(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(u=>typeof u!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let u of e)if(!Gd.includes(u))return{status:"error",error:`unknown provider: ${u} (valid targets: ${Gd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??jG;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=["codex","agy","claude","kimi"];(r.OLLAMA_API_KEY?.trim()||e.includes("ollama-cloud"))&&s.push("ollama-cloud");let o=new Set(e.includes("all")?s:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let a=Object.entries({codex:x0,agy:i0,claude:E0,kimi:B0,"ollama-cloud":q0}).filter(([u])=>o.has(u)).map(async([,u])=>{let f=[],m=await u({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:_=>f.push(_)}:{}}),p=t.includeRaw?{...m,raw_responses:f}:m;return p&&t.onReading?.(p),p}),l=await Promise.allSettled(a),c=l.find(u=>u.status==="rejected");return c?{status:"error",error:String(c.reason),readings:[]}:{status:"ok",readings:l.filter(u=>u.status==="fulfilled").map(u=>u.value).filter(Boolean)}}var Gd,jG,J0=L(()=>{"use strict";a0();T0();L0();X0();G0();Gd=["all","codex","agy","claude","kimi","ollama-cloud"],jG=15});var Q0={};me(Q0,{runRatelimit:()=>VG});function q_(t){return typeof t=="object"&&t!==null}function WG(t){return typeof t=="number"&&t>0&&t<.005?`${(t*100).toFixed(1)}%`:(0,Xe.formatPercent)(typeof t=="number"?t:null)}function HG(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,Xe.escapeCell)(n)}function XG(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);if(o=Number.isFinite(c)?c-Date.now():null,o!==null){if(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,Xe.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,Xe.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,typeof e.window_start_iso=="string"){let d=Date.parse(e.window_start_iso);Number.isFinite(d)&&c>d&&(s=c-d)}else(t!=="ollama-cloud"||e.window_type!=="monthly")&&(s=BG[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,Xe.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&o>0&&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,Xe.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,Xe.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=[HG(t,e),`${(0,Xe.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${WG(e.used_fraction)}`,n];return(i!==""||a.length>0)&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function qG(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,Xe.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&z0.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,Xe.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(q_).map(d=>XG(a,d)):[],c=[];if(q_(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)}`);let f=a==="ollama-cloud"?"purchased credits (USD)":"credits";c.push(` ${f}: ${u.length>0?u.join(" "):"present"}`)}if(q_(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 GG(t){let e=qG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,Xe.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,Xe.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2671
+ `});function Be(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 Tn(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return Be(e==="percent"?n/100:n)}function ZN(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 e0(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function t0(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 n0(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 Lo(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 kq)n=n.replace(r,"***REDACTED***");return n}function Ze(t){let e=Be(t.used_fraction),n=Be(t.remaining_fraction),r=t.resets_at==null?e0(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?ZN(r):ZN(e0(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:Be(1-n)),remaining_fraction:n??(e===null?null:Be(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 Pe(t,e,n={}){let r={$schema:Iq,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 Re(t,e,n,r,s,o=[],i){return Pe(t,e,{source:s??null,reason:n,...r==null?{}:{detail:Lo(r,o)},...i==null?{}:{retry_after_seconds:i}})}function jd(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 dt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=Lo(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:
2672
+ ${o}`)}function Mr(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=Lo(r,n);return{...t,detail:s,provider_message:s}}var Iq,kq,vn=L(()=>{"use strict";Iq="https://lmctl.com/schemas/lmratelimit-v1.json";kq=[/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 Nq,readFileSync as Rq}from"node:fs";import{join as xq}from"node:path";function Fq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function jq(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 Hq(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=Be(i/100);n.push(Ze({bucket_id:`${jq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:Be(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 Ta(t,e,n){return Re("agy","provider_unavailable",t,e,"agy_cli_print")}function Bq(t,e,n={}){try{let r=$q(Math.max(t,60)*1e3,Fq(e));if(dt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return Ta("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return Ta("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return Ta("cli_failed",r.error.message,t);let s=Hq(r.stdout??"");return s.length===0?Ta("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Pe("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return Ta("cli_failed",r instanceof Error?r.message:String(r),t)}}function o0(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 Xq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=o0(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[r0],t[s0],-1);try{for(let s of Nq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of Rq(xq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[r0],o[s0],Number(s))}catch{}}catch{}return e}function qq(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=Tn(l.remainingFraction,"fraction");r.push(Ze({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:n0(l.window),used_fraction:c===null?null:Be(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??""))),Pe("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function Gq(t,e,n={}){try{let s=Uq(e).map(([a,l,c])=>[o0(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return Re("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 Pq(`http://${a}${Lq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(dt(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=qq(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 Re("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 Re("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function i0(t){let e=await Gq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Bq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:Re("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 r0,s0,Lq,Cq,Oq,Dq,Mq,$q,Pq,Uq,a0=L(()=>{"use strict";vn();vn();r0="ANTIGRAVITY_LS_ADDRESS",s0="ANTIGRAVITY_CSRF_TOKEN",Lq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",Cq=["-p","/usage"],Oq=(t,e)=>{let n=Aq("agy",Cq,{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}},Dq=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()}},Mq=t=>Xq(t),$q=Oq,Pq=Dq,Uq=Mq});import{randomUUID as d0}from"node:crypto";import{mkdirSync as Vq,readFileSync as C_,realpathSync as Jq,renameSync as Kq,rmSync as O_,statSync as l0,writeFileSync as u0}from"node:fs";import{homedir as Yq}from"node:os";import{join as D_}from"node:path";import{setTimeout as zq}from"node:timers/promises";function P_(t){return D_(t.CLAUDE_CONFIG_DIR??D_(t.HOME??Yq(),".claude"),".credentials.json")}function M_(t){let e=JSON.parse(C_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function $_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function f0(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=P_(t);try{let n=$_(M_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Jq(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 Wd(t){return typeof t.expiresAt=="number"&&Date.now()+eG>=t.expiresAt}function c0(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function tG(t,e){let n=`${t}.lmctl-refresh.lock`,r=D_(n,"owner.json"),s=d0();for(;;){e.throwIfAborted();try{Vq(n,{mode:448});try{u0(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw O_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(C_(r,"utf8")).token===s&&O_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(C_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-l0(n).mtimeMs>6e4}catch{try{i=Date.now()-l0(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await zq(50,void 0,{signal:e})}}}async function m0(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await tG(t.path,e);try{let r=$_(M_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!c0(r,t.oauth)&&!Wd(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Zq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:Qq})});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=M_(t.path),l=$_(a);if(!l||!c0(r,l)){if(l&&typeof l.accessToken=="string"&&!Wd(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}.${d0()}.tmp`;try{u0(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Kq(d,t.path)}finally{O_(d,{force:!0})}return c}finally{n()}}var Qq,Zq,eG,p0=L(()=>{"use strict";Qq="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Zq="https://console.anthropic.com/v1/oauth/token",eG=3e5});import{spawnSync as g0}from"node:child_process";function sG(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 y0(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function oG(t){try{let e=g0("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:y0(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Jt(t,e,n,r="claude_oauth_api",s){return Re("claude",t,e,n,r,void 0,s)}function iG(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function aG(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 cG(t){let e=[];for(let n of t.split(/\r?\n/)){let r=lG.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(Ze({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:Tn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:aG(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 dG(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 uG(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=Tn(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 _0(t,e,n,r={}){try{let s=g0("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:y0(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";dt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=cG(o);if(!i.length)return;let a=dG(o);return Pe("claude",Ke.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 E0({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=f0(e);if(s.error==="not_claude_ai_subscriber")return Jt(Ke.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Jt(Ke.unavailable,"credentials_missing",`credentials file not found: ${P_(e)}`);if(s.error)return Jt(Ke.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(h0))return Jt(Ke.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${h0} 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 m0({...s,oauth:o},a.signal),g=!0}catch(w){let T=w instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(w.message)?w.message:"refresh_failed";if(T==="refresh_http_429")return Jt(Ke.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(T==="refresh_lock_stale")return Jt(Ke.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=T==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(T);return Jt(S?Ke.expired:Ke.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${T})${S?"; renew Claude login":"; try again later"}`)}};if(Wd(o)){let w=await E();if(w)return w}let y=()=>fetch(`${nG}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":rG,"Content-Type":"application/json","User-Agent":oG(e)},signal:a.signal});if(c=await y(),d=await c.text(),dt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status),c.status===401&&!g&&s.path&&o.refreshToken){let w=await E();if(w)return w;c=await y(),d=await c.text(),dt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await _0(o,e,t,{debug:n,onRawResponse:r});return E||Jt(Ke.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>Mr(Jt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ke.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ke.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=iG(c.headers),E=await _0(o,e,t,{debug:n,onRawResponse:r});return E||u(Ke.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Ke.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Jt(Ke.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Jt(Ke.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=sG(E==="session"?"session":E),w=g.scope?.model?.display_name,T=E==="session"?"session":E==="weekly_all"?"week-all-models":`week-scoped-${w||E}`;return[Ze({bucket_id:T,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:Tn(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"?[]:[Ze({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:Tn(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=uG(m.spend,m.extra_usage);return Pe("claude",Ke.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 nG,rG,h0,Ke,lG,w0=L(()=>{"use strict";vn();p0();vn();nG="https://api.anthropic.com",rG="oauth-2025-04-20",h0="user:profile";Ke={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};lG=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as S0}from"node:crypto";import{mkdirSync as fG,readFileSync as U_,realpathSync as mG,renameSync as pG,rmSync as F_,statSync as T0,writeFileSync as b0}from"node:fs";import{homedir as hG}from"node:os";import{join as j_}from"node:path";import{setTimeout as _G}from"node:timers/promises";function va(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function H_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||j_(t.HOME||hG(),".codex");return j_(e,"auth.json")}function W_(t){let e=va(JSON.parse(U_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function I0(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=H_(t);try{let n=va(W_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:mG(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function v0(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 EG(t,e){let n=`${t}.lmctl-refresh.lock`,r=j_(n,"owner.json"),s=S0();for(;;){e.throwIfAborted();try{fG(n,{mode:448});try{b0(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw F_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(U_(r,"utf8")).token===s&&F_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(U_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-T0(n).mtimeMs>6e4}catch{try{i=Date.now()-T0(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await _G(50,void 0,{signal:e})}}}async function k0(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await EG(t.path,e);try{let r=W_(t.path),s=va(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!v0(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(gG,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:yG})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=va(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=W_(t.path),l=va(a.tokens);if(!l||!v0(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}.${S0()}.tmp`;try{b0(u,JSON.stringify(d),{flag:"wx",mode:384}),pG(u,t.path)}finally{F_(u,{force:!0})}return c}finally{n()}}var gG,yG,A0=L(()=>{"use strict";gG="https://auth.openai.com/oauth/token",yG="app_EMoamEEZ73f0CkXaXp7hrann"});function Sn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function N0(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 R0(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function vG(t){if(Sn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function SG(t){let e=[],n=Sn(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=Sn(n[i])?n[i]:void 0;if(!a)continue;let l=N0(a.limit_window_seconds);e.push(Ze({bucket_id:`codex-${R0(l)}`,group_name:"codex",window_type:l,used_fraction:Tn(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(!Sn(i))continue;let a=Sn(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=Sn(a[m])?a[m]:void 0;if(!p)continue;let _=N0(p.limit_window_seconds);e.push(Ze({bucket_id:`${d}-${R0(_)}`,group_name:l||d,window_type:_,used_fraction:Tn(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 bG(t){let e=Sn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=Sn(t.spend_control)?t.spend_control:void 0,s=Sn(t.credits)?t.credits:void 0;return Pe("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:SG(t),...s?{credits:vG(s)}:{},...r?{spend_control:r}:{}})}async function x0(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=I0(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Pe("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${H_(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)=>Mr(Pe("codex",S,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let S=await k0({...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",k=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return Pe("codex",k?"auth_expired":"provider_unavailable",{source:"codex_http",reason:k?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${b})${k?"; 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||wG).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:S,signal:a.signal})},w=await y();if(p=await w.text(),dt({debug:r,onRawResponse:s},"codex_http",p,_(),w.status),w.status===401&&o.path&&f){let S=await E();if(S)return S;w=await y(),p=await w.text(),dt({debug:r,onRawResponse:s},"codex_http",p,_(),w.status)}if(w.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(w.status===429){let S=w.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(!w.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${w.status}`,detail:"codex usage endpoint returned an unexpected status"});let T;try{T=JSON.parse(p)}catch(S){return Pe("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:Lo(String(S),d)})}return Sn(T)?bG(T):Pe("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 Pe("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:Lo(f,d)})}finally{clearTimeout(l)}}var wG,TG,L0=L(()=>{"use strict";vn();A0();vn();wG="https://chatgpt.com/backend-api",TG="codex-cli"});import{createHash as IG,randomUUID as kG}from"node:crypto";import{readFileSync as $0,openSync as AG,fsyncSync as NG,closeSync as RG,mkdirSync as C0,writeFileSync as P0,renameSync as xG,rmSync as LG,rmdirSync as CG,statSync as B_,utimesSync as OG}from"node:fs";import{homedir as DG}from"node:os";import{basename as MG,dirname as $G,join as Hd}from"node:path";import{setTimeout as U0}from"node:timers/promises";function UG(t){let e;try{e=$0(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 Bd(t){let e;try{e=JSON.parse($0(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 F0(t){let e=t.KIMI_CODE_HOME??Hd(t.HOME??DG(),".kimi-code"),n=UG(t.KIMI_CODE_CONFIG_PATH??Hd(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=D0(t.KIMI_CODE_BASE_URL??n.base_url??O0),o=D0(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?X_:n["oauth.oauth_host"]??X_)),i=s===O0&&o===X_?"kimi-code":`kimi-code-env-${IG("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??Hd(e,"credentials",`${i}.json`),l=Bd(a),c=a,d=MG(a,".json");return{home:e,path:c,lockTarget:Hd(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function Xd(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 M0(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 FG(t,e){C0($G(t),{recursive:!0}),P0(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{C0(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-B_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await U0(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=B_(n),s=()=>{let i;try{i=B_(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;OG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),CG(n)}catch{}}}}async function j0(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await FG(t.lockTarget,e);try{let r=Bd(t.path);if(!M0(r,t.token)&&!Xd(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:PG,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 U0(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Bd(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=Bd(t.path);if(!M0(l,r)){if(!Xd(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}.${kG()}.tmp`;try{let u=AG(d,"wx",384);try{P0(u,JSON.stringify(c,null,2)+`
2673
+ `),NG(u)}finally{RG(u)}n.assertOwned(),xG(d,t.path)}finally{LG(d,{force:!0})}return c}finally{n.release()}}var O0,X_,PG,D0,W0=L(()=>{"use strict";O0="https://api.kimi.com/coding/v1",X_="https://auth.kimi.com",PG="17e5f671-d194-4dfb-9706-5516cb48c098",D0=t=>t.trim().replace(/\/+$/,"")});function H0(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 B0({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=F0(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 Re("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 j0({...s,token:o},i.signal),_=!0};Xd(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(),dt({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(),dt({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 Re("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Mr(Re("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 _=jd(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 Re("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return Re("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(Ze(_))}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=t0(E),w="window";y==="five_hour"&&(w="5h"),y==="weekly"&&(w="weekly"),y==="monthly"&&(w="monthly");let T=H0(g);if(!T)continue;let{used:S,limit:b,remaining:k}=T;p({bucket_id:`kimi-${w}`,window_type:y,used_fraction:Be(S/b),remaining_fraction:Be(k/b),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=H0(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:Be(_.used/_.limit),remaining_fraction:Be(_.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 w=Number(y.used_ratio);!Number.isFinite(w)||w<0||m.has(g)||(m.add(g),f.push(Ze({bucket_id:g,window_type:E,used_fraction:Be(w),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:w,raw_scale:"ratio"})))}}return Pe("kimi","ok",{source:"kimi_http",buckets:f})}var X0=L(()=>{"use strict";vn();W0();vn()});function Sa(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function qd(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()!==""){let e=Number(t);if(Number.isFinite(e))return e}}async function q0(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s,fetchFn:o=fetch}=t,i=n.OLLAMA_API_KEY?.trim();if(!i)return Re("ollama-cloud","provider_unavailable","credentials_missing","$OLLAMA_API_KEY is missing","ollama_http");let a="https://ollama.com/api/balance",l=new AbortController,c=setTimeout(()=>l.abort(),Math.ceil(e*1e3)),d,u="";try{d=await o(a,{method:"GET",redirect:"error",headers:{Authorization:`Bearer ${i}`,Accept:"application/json"},signal:l.signal}),u=await d.text();let h=u;try{h=JSON.stringify(JSON.parse(u))}catch{}dt({debug:r,onRawResponse:s},"ollama_http",h,[i],d.status)}catch(h){let g=h instanceof Error&&h.name==="AbortError",E=g?`Ollama quota request timed out after ${e}s`:`Ollama quota request failed (${h instanceof Error?h.message:String(h)})`;return Re("ollama-cloud","provider_unavailable",g?"request_timeout":"request_failed",E,"ollama_http",[i])}finally{clearTimeout(c)}let f=(h,g,E)=>Mr(Re("ollama-cloud",h,g,g,"ollama_http",[i],E),u,[i]);if(d.status===401)return f("auth_expired","HTTP 401 from Ollama balance endpoint");if(d.status===403)return f("not_applicable","HTTP 403 from Ollama balance endpoint");if(d.status===429){let h=jd(d.headers);return f("reader_throttled","HTTP 429 from Ollama balance endpoint",h)}if(d.status!==200)return f("provider_unavailable",`HTTP ${d.status} from Ollama balance endpoint`);let m;try{m=JSON.parse(u)}catch{return Re("ollama-cloud","provider_unavailable","malformed_response","SyntaxError: malformed JSON","ollama_http")}if(!Sa(m))return Re("ollama-cloud","provider_unavailable","malformed_response","response was not an object","ollama_http");let p=[];if(Sa(m.included)){let h=m.included,g=qd(h.allowance_usd),E=qd(h.balance_usd),y=Sa(h.period)?h.period:void 0,w=typeof y?.from=="string"?Date.parse(y.from):NaN,T=typeof y?.until=="string"?Date.parse(y.until):NaN,S=Number.isFinite(w)&&Number.isFinite(T)&&T>w,b=S?new Date(T).toISOString():null;if(g!==void 0&&g>0&&E!==void 0){let k=Math.max(0,g-E);p.push({...Ze({bucket_id:"ollama-cloud-monthly",group_name:"ollama-cloud",window_type:"monthly",used_fraction:Be(k/g),remaining_fraction:Be(E/g),resets_at_iso:b,is_exhausted:E<=0,raw_value:E,raw_scale:"balance_usd"}),window_start_iso:S?new Date(Math.floor(w/1e3)*1e3).toISOString().replace(".000Z","Z"):null})}if(g===void 0&&E===void 0)for(let[k,N,O]of[["session","five_hour","5h"],["weekly","weekly","weekly"]]){let I=h[k];if(!Sa(I))continue;let v=qd(I.remaining_percent);v===void 0||v<0||v>100||p.push(Ze({bucket_id:`ollama-cloud-${O}`,group_name:"ollama-cloud",window_type:N,remaining_fraction:v/100,resets_at_iso:typeof I.resets_at=="string"?I.resets_at:null,raw_value:v,raw_scale:"remaining_percent"}))}}let _;if(Sa(m.purchased)){let h=m.purchased,g=qd(h.balance_usd);g!==void 0&&(_={has_credits:g>0,balance:g})}return p.length===0&&_===void 0?Re("ollama-cloud","provider_unavailable","malformed_response","response has no usable included allowance or purchased balance","ollama_http"):Pe("ollama-cloud","ok",{source:"ollama_http",buckets:p,..._?{credits:_}:{}})}var G0=L(()=>{"use strict";vn()});async function V0(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(u=>typeof u!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let u of e)if(!Gd.includes(u))return{status:"error",error:`unknown provider: ${u} (valid targets: ${Gd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??jG;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=["codex","agy","claude","kimi"];(r.OLLAMA_API_KEY?.trim()||e.includes("ollama-cloud"))&&s.push("ollama-cloud");let o=new Set(e.includes("all")?s:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let a=Object.entries({codex:x0,agy:i0,claude:E0,kimi:B0,"ollama-cloud":q0}).filter(([u])=>o.has(u)).map(async([,u])=>{let f=[],m=await u({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:_=>f.push(_)}:{}}),p=t.includeRaw?{...m,raw_responses:f}:m;return p&&t.onReading?.(p),p}),l=await Promise.allSettled(a),c=l.find(u=>u.status==="rejected");return c?{status:"error",error:String(c.reason),readings:[]}:{status:"ok",readings:l.filter(u=>u.status==="fulfilled").map(u=>u.value).filter(Boolean)}}var Gd,jG,J0=L(()=>{"use strict";a0();w0();L0();X0();G0();Gd=["all","codex","agy","claude","kimi","ollama-cloud"],jG=15});var Q0={};me(Q0,{runRatelimit:()=>VG});function q_(t){return typeof t=="object"&&t!==null}function WG(t){return typeof t=="number"&&t>0&&t<.005?`${(t*100).toFixed(1)}%`:(0,Xe.formatPercent)(typeof t=="number"?t:null)}function HG(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,Xe.escapeCell)(n)}function XG(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);if(o=Number.isFinite(c)?c-Date.now():null,o!==null){if(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,Xe.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,Xe.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,typeof e.window_start_iso=="string"){let d=Date.parse(e.window_start_iso);Number.isFinite(d)&&c>d&&(s=c-d)}else(t!=="ollama-cloud"||e.window_type!=="monthly")&&(s=BG[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,Xe.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&o>0&&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,Xe.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,Xe.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=[HG(t,e),`${(0,Xe.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${WG(e.used_fraction)}`,n];return(i!==""||a.length>0)&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function qG(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,Xe.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&z0.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,Xe.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(q_).map(d=>XG(a,d)):[],c=[];if(q_(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)}`);let f=a==="ollama-cloud"?"purchased credits (USD)":"credits";c.push(` ${f}: ${u.length>0?u.join(" "):"present"}`)}if(q_(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 GG(t){let e=qG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,Xe.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,Xe.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2674
2674
  `)}function G_(t,e){return t.stderr.write(`error: ${e}
2675
2675
  ${Y0}
2676
2676
  `),2}async function VG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${Y0}
2677
- `),0;let n=ae(t,["--timeout"],["--json"]);if(n.error!==void 0)return G_(e,n.error);let r=z(n,"--json");for(let f of n.positionals)if(!K0.includes(f))return G_(e,`unknown provider: ${f} (valid targets: ${K0.join(", ")})`);let s=n.positionals.length>0?n.positionals:["all"],o=15,i=V(n,"--timeout");if(i!==void 0){let f=Number(i);if(!Number.isFinite(f)||f<=0)return G_(e,`invalid --timeout "${i}" (expected a positive number of seconds)`);o=f}let a=new Set(n.positionals),l=0,c=f=>{let m=typeof f.status=="string"?f.status:"",p=typeof f.reason=="string"?f.reason:"";m==="provider_unavailable"&&z0.has(p)&&!a.has(typeof f.provider=="string"?f.provider:"")||(l>0&&e.stdout.write(`
2677
+ `),0;let n=ae(t,["--timeout"],["--json"]);if(n.error!==void 0)return G_(e,n.error);let r=Y(n,"--json");for(let f of n.positionals)if(!K0.includes(f))return G_(e,`unknown provider: ${f} (valid targets: ${K0.join(", ")})`);let s=n.positionals.length>0?n.positionals:["all"],o=15,i=V(n,"--timeout");if(i!==void 0){let f=Number(i);if(!Number.isFinite(f)||f<=0)return G_(e,`invalid --timeout "${i}" (expected a positive number of seconds)`);o=f}let a=new Set(n.positionals),l=0,c=f=>{let m=typeof f.status=="string"?f.status:"",p=typeof f.reason=="string"?f.reason:"";m==="provider_unavailable"&&z0.has(p)&&!a.has(typeof f.provider=="string"?f.provider:"")||(l>0&&e.stdout.write(`
2678
2678
  `),e.stdout.write(`${GG(f)}
2679
2679
  `),l+=1)},d=await V0({targets:s,timeoutSeconds:o,includeRaw:r,env:e.env??process.env,progress:f=>e.stderr.write(`${f}
2680
2680
  `),...r?{}:{onReading:c},..._i()||e.env?.LMCTL_DEBUG==="1"?{debug:f=>e.stderr.write(`${f}
2681
2681
  `)}:{}});if(d.status==="error")return e.stderr.write(`error: ${d.error}
2682
2682
  `),1;let u=d.readings;return r?(Z(e,{readings:u}),0):(l===0&&e.stdout.write(`rate-limit: no readings returned.
2683
2683
  `),0)}var Xe,Y0,z0,K0,BG,Z0=L(()=>{"use strict";re();Xe=Ft(Ct(),1);le();J0();Y0=["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, ollama-cloud. Multiple allowed.",""," ollama-cloud is included in all only when OLLAMA_API_KEY is set."," It reads Ollama Cloud (not local Ollama); one GET, no automatic retries.",""," --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(`
2684
- `),z0=new Set(["agy_not_found","credentials_missing"]),K0=Gd;BG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});le();Cn();import{pathToFileURL as JG}from"node:url";import{execFileSync as jD}from"node:child_process";import{readFileSync as WD}from"node:fs";import{join as HD}from"node:path";import{fileURLToPath as BD}from"node:url";function uT(){return BD(new URL("../..",import.meta.url))}function ef(t=uT()){try{let e=JSON.parse(WD(HD(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function fi(t,e){try{return jD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function mi(t=uT()){let e=ef(t);if(fi(t,["rev-parse","--is-inside-work-tree"])!=="true"||fi(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=fi(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=fi(t,["describe","--tags","--exact-match","HEAD"]),s=fi(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}re();import{mkdirSync as bM,readFileSync as IM,renameSync as kM,writeFileSync as AM}from"node:fs";import{homedir as NM}from"node:os";import{dirname as RM,join as xM}from"node:path";function vT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function vM(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function SM(t,e){return!vM(t)||vT(t)?null:`${e} must use https://: ${t}`}async function ST(t,e){let n=SM(t,e.description);if(n!==null||!vT(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 wT(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 wT(t,e.description,r,a)}}finally{clearTimeout(o)}}function wT(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 LM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",CM=60*60*1e3,OM=1500;function DM(){let t=process.env.HOME??NM();return xM(t,".lmctl",".update-check.json")}function MM(t){return t.isTTY===!0}function $M(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 of(t,e){return!!(process.env.LMCTL_NO_UPDATE_NOTIFIER==="1"||!MM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function PM(t,e){try{let n=JSON.parse(IM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<CM)return n.latest}catch{}return null}function UM(t,e){bM(RM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;AM(n,`${JSON.stringify(e)}
2685
- `,"utf8"),kM(n,t)}async function FM(){let t=await ST(LM,{description:"lmctl npm metadata",timeoutMs:OM}),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 bT(t,e=[],n={}){try{if(of(e,t)||(n.displayVersion?.()??mi()).includes("+"))return;let r=n.now?.()??Date.now(),s=n.cachePath??DM();if(PM(s,r)!==null)return;let i=await(n.fetchLatest??FM)();try{UM(s,{checkedAt:r,latest:i})}catch{return}let a=n.currentVersion?.()??ef();$M(i,a)>0&&t.stderr.write(`update available: ${a} \u2192 ${i} run: npm i -g @lmctl-ai/lmctl@latest
2684
+ `),z0=new Set(["agy_not_found","credentials_missing"]),K0=Gd;BG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});le();Cn();import{pathToFileURL as JG}from"node:url";import{execFileSync as jD}from"node:child_process";import{readFileSync as WD}from"node:fs";import{join as HD}from"node:path";import{fileURLToPath as BD}from"node:url";function uw(){return BD(new URL("../..",import.meta.url))}function ef(t=uw()){try{let e=JSON.parse(WD(HD(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function fi(t,e){try{return jD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function mi(t=uw()){let e=ef(t);if(fi(t,["rev-parse","--is-inside-work-tree"])!=="true"||fi(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=fi(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=fi(t,["describe","--tags","--exact-match","HEAD"]),s=fi(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}re();import{mkdirSync as bM,readFileSync as IM,renameSync as kM,writeFileSync as AM}from"node:fs";import{homedir as NM}from"node:os";import{dirname as RM,join as xM}from"node:path";function vw(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function vM(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function SM(t,e){return!vM(t)||vw(t)?null:`${e} must use https://: ${t}`}async function Sw(t,e){let n=SM(t,e.description);if(n!==null||!vw(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 Tw(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 Tw(t,e.description,r,a)}}finally{clearTimeout(o)}}function Tw(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 LM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",CM=60*60*1e3,OM=1500;function DM(){let t=process.env.HOME??NM();return xM(t,".lmctl",".update-check.json")}function MM(t){return t.isTTY===!0}function $M(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 of(t,e){return!!(process.env.LMCTL_NO_UPDATE_NOTIFIER==="1"||!MM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function PM(t,e){try{let n=JSON.parse(IM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<CM)return n.latest}catch{}return null}function UM(t,e){bM(RM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;AM(n,`${JSON.stringify(e)}
2685
+ `,"utf8"),kM(n,t)}async function FM(){let t=await Sw(LM,{description:"lmctl npm metadata",timeoutMs:OM}),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 bw(t,e=[],n={}){try{if(of(e,t)||(n.displayVersion?.()??mi()).includes("+"))return;let r=n.now?.()??Date.now(),s=n.cachePath??DM();if(PM(s,r)!==null)return;let i=await(n.fetchLatest??FM)();try{UM(s,{checkedAt:r,latest:i})}catch{return}let a=n.currentVersion?.()??ef();$M(i,a)>0&&t.stderr.write(`update available: ${a} \u2192 ${i} run: npm i -g @lmctl-ai/lmctl@latest
2686
2686
  `)}catch{}}rl();var Co=`usage: lmctl [--db PATH] [--debug] [--non-interactive] <command|target> [args]
2687
2687
  `,V_=`${Co}
2688
2688
  Missing information is requested interactively. --non-interactive disables questions.
@@ -2751,19 +2751,19 @@ ${Co}Run 'lmctl help' for usage.
2751
2751
  ${Co}Run 'lmctl help' for usage.
2752
2752
  `),1):(t.stderr.write(`error: unknown command: ${e}
2753
2753
  ${Co}Run 'lmctl help' for usage.
2754
- `),1)}async function YG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=ET();try{return await zG(t,e)}finally{TT(n)}}async function zG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=[],r,s=!1,o=0;for(;o<t.length;o+=1){let m=t[o];if(m==="--db"){let p=t[++o];if(p===void 0||p.startsWith("--"))return nR(e,"missing value for --db");r=p;continue}if(m==="--non-interactive"){s=!0;continue}if(m==="--debug"){sf();continue}if(m==="--allow-schema-skew"){process.env.LMCTL_ALLOW_SCHEMA_SKEW="1";continue}break}n.push(...t.slice(o));let i=n[0]??"",a=i==="script"||i==="quickrun";if(!/\.lms$/i.test(i))for(let m=1;m<n.length;m+=1){let p=n[m];if(p==="--")break;if(p==="--debug")sf(),n.splice(m--,1);else{if(a&&(!p.startsWith("-")||p==="-"||p==="-e"))break;(p==="-p"||p==="--prompt-file")&&(m+=1)}}let l=new Set(["status","running","models","prices","ratelimit","prompt","chat","batch","terminal","tail","export","cost","usage","ls","plan","lint","db"]);r!==void 0&&(process.env.LMCTL_DB=r),_i()&&(e={...e,env:{...e.env??process.env,LMCTL_DEBUG:"1",...r===void 0?{}:{LMCTL_DB:r}}}),(s||l.has(n[0]??"")&&n.slice(1).includes("--json"))&&(e=dl(r===void 0?e:{...e,env:{...e.env??process.env,LMCTL_DB:r}}));let c=n[0];if(c==="--version"||c==="-v"||c==="-V")return e.stdout.write(`lmctl ${mi()}
2755
- `),0;if(c==="--help"||c==="-h"||c===void 0)return e.stdout.write(V_),0;if(c==="help"){let[m,...p]=n.slice(1);return m===void 0||m==="--help"||m==="-h"?(e.stdout.write(V_),0):eR.has(m)?tR(m,[...p,"--help"],e):rR(e,m)}Zu(Ye(),e.stderr);let[d,...u]=n;if(d===void 0)return e.stdout.write(V_),0;let f=Date.now();J_(d,u,{phase:"start",started_at:new Date(f).toISOString()});try{let m=await tR(d,u,e);return J_(d,u,{phase:"finish",outcome:m===0?"ok":"error",exit_code:m,duration_ms:Date.now()-f}),eR.has(d)&&!of(n,e)&&await bT(e,n),m}catch(m){let p=m instanceof Error?m:new Error(String(m));return J_(d,u,{phase:"fatal",outcome:"fatal",exit_code:1,duration_ms:Date.now()-f,error_class:p.name,error_message:p.message,error_stack:p.stack??null,causes:ZG(p)}),QG(m,d,u,e)}}function J_(t,e,n){qe({event:t,record_kind:"cli_action",command:t,argv:e,cwd:process.cwd(),db_path:Ye(),lmctl_version:mi(),node_version:process.version,...n})}function QG(t,e,n,r){let s=t instanceof Error?t:new Error(String(t));return s instanceof jt&&n.includes("--json")?(r.stdout.write(`${JSON.stringify({error:s.message,schema_skew:{db_version:s.dbVersion,build_version:s.buildVersion,mode:"refused"}},null,2)}
2754
+ `),1)}async function YG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=Ew();try{return await zG(t,e)}finally{ww(n)}}async function zG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=[],r,s=!1,o=0;for(;o<t.length;o+=1){let m=t[o];if(m==="--db"){let p=t[++o];if(p===void 0||p.startsWith("--"))return nR(e,"missing value for --db");r=p;continue}if(m==="--non-interactive"){s=!0;continue}if(m==="--debug"){sf();continue}if(m==="--allow-schema-skew"){process.env.LMCTL_ALLOW_SCHEMA_SKEW="1";continue}break}n.push(...t.slice(o));let i=n[0]??"",a=i==="script"||i==="quickrun";if(!/\.lms$/i.test(i))for(let m=1;m<n.length;m+=1){let p=n[m];if(p==="--")break;if(p==="--debug")sf(),n.splice(m--,1);else{if(a&&(!p.startsWith("-")||p==="-"||p==="-e"))break;(p==="-p"||p==="--prompt-file")&&(m+=1)}}let l=new Set(["status","running","models","prices","ratelimit","prompt","chat","batch","terminal","tail","export","cost","usage","ls","plan","lint","db"]);r!==void 0&&(process.env.LMCTL_DB=r),_i()&&(e={...e,env:{...e.env??process.env,LMCTL_DEBUG:"1",...r===void 0?{}:{LMCTL_DB:r}}}),(s||l.has(n[0]??"")&&n.slice(1).includes("--json"))&&(e=dl(r===void 0?e:{...e,env:{...e.env??process.env,LMCTL_DB:r}}));let c=n[0];if(c==="--version"||c==="-v"||c==="-V")return e.stdout.write(`lmctl ${mi()}
2755
+ `),0;if(c==="--help"||c==="-h"||c===void 0)return e.stdout.write(V_),0;if(c==="help"){let[m,...p]=n.slice(1);return m===void 0||m==="--help"||m==="-h"?(e.stdout.write(V_),0):eR.has(m)?tR(m,[...p,"--help"],e):rR(e,m)}Zu(Ye(),e.stderr);let[d,...u]=n;if(d===void 0)return e.stdout.write(V_),0;let f=Date.now();J_(d,u,{phase:"start",started_at:new Date(f).toISOString()});try{let m=await tR(d,u,e);return J_(d,u,{phase:"finish",outcome:m===0?"ok":"error",exit_code:m,duration_ms:Date.now()-f}),eR.has(d)&&!of(n,e)&&await bw(e,n),m}catch(m){let p=m instanceof Error?m:new Error(String(m));return J_(d,u,{phase:"fatal",outcome:"fatal",exit_code:1,duration_ms:Date.now()-f,error_class:p.name,error_message:p.message,error_stack:p.stack??null,causes:ZG(p)}),QG(m,d,u,e)}}function J_(t,e,n){qe({event:t,record_kind:"cli_action",command:t,argv:e,cwd:process.cwd(),db_path:Ye(),lmctl_version:mi(),node_version:process.version,...n})}function QG(t,e,n,r){let s=t instanceof Error?t:new Error(String(t));return s instanceof jt&&n.includes("--json")?(r.stdout.write(`${JSON.stringify({error:s.message,schema_skew:{db_version:s.dbVersion,build_version:s.buildVersion,mode:"refused"}},null,2)}
2756
2756
  `),1):(r.stderr.write(`error: ${s.message}
2757
2757
  `),s instanceof jt?1:_i()?(r.stderr.write(`(debug details written to ~/.lmctl/debug-*.log)
2758
2758
  `),1):(r.stderr.write(`(re-run with --debug for the full stack trace and context in ~/.lmctl/debug-*.log)
2759
- `),1))}function ZG(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 tR(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Vh(),bk));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(Dh(),lk));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(dd(),xh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(Td(),Ed));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)
2760
- `);let{runChat:r}=await Promise.resolve().then(()=>(dd(),xh));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Gk(),qk));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(oA(),sA));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(cA(),lA));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(gA(),_A));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(vA(),wA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(AA(),kA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(gn(),Eh));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(gn(),Eh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(Td(),Ed));return s(n,"seed",e,o=>r(o,n))}case"plan":{let{runPlan:r}=await Promise.resolve().then(()=>(ga(),$k)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(Td(),Ed));return s(n,"plan",e,o=>r(o,n),{ownsForce:!0,extension:".txt"})}case"init":{let{runInit:r}=await Promise.resolve().then(()=>(CA(),LA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(zA(),YA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(oN(),sN));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(c_(),qA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(w_(),wN));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(JN(),VN));return r(e,n)}case"models":{let{runModels:r}=await Promise.resolve().then(()=>(qc(),tI));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(QN(),zN));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(Z0(),Q0));return r(e,n)}case"db":return eV(e,n);default:if(t==="model")return nR(n,"command 'model' is retired; use 'models'");if(!KG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(qh(),Xh)),s=await r([t,...e],n);if(s!==null)return s}return rR(n,t)}}async function eV(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2759
+ `),1))}function ZG(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 tR(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Vh(),bk));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(Dh(),lk));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(dd(),xh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(wd(),Ed));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)
2760
+ `);let{runChat:r}=await Promise.resolve().then(()=>(dd(),xh));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Gk(),qk));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(oA(),sA));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(cA(),lA));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(gA(),_A));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(vA(),TA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(AA(),kA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(gn(),Eh));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(gn(),Eh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(wd(),Ed));return s(n,"seed",e,o=>r(o,n))}case"plan":{let{runPlan:r}=await Promise.resolve().then(()=>(ga(),$k)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(wd(),Ed));return s(n,"plan",e,o=>r(o,n),{ownsForce:!0,extension:".txt"})}case"init":{let{runInit:r}=await Promise.resolve().then(()=>(CA(),LA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(zA(),YA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(oN(),sN));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(c_(),qA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(T_(),TN));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(JN(),VN));return r(e,n)}case"models":{let{runModels:r}=await Promise.resolve().then(()=>(qc(),tI));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(QN(),zN));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(Z0(),Q0));return r(e,n)}case"db":return eV(e,n);default:if(t==="model")return nR(n,"command 'model' is retired; use 'models'");if(!KG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(qh(),Xh)),s=await r([t,...e],n);if(s!==null)return s}return rR(n,t)}}async function eV(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2761
2761
 
2762
2762
  backfill-events Replay the legacy tables into the event-log
2763
2763
  (with --db <copy>) substrate and rebuild projections. Idempotent;
2764
2764
  run against a COPY of the DB, never the live file.
2765
2765
  `),0):n==="backfill-events"?tV(r,e):(e.stderr.write(`usage: lmctl db <subcommand> (backfill-events)
2766
- `),1)}async function tV(t,e){let{resolveDbPath:n}=await Promise.resolve().then(()=>(Cn(),iT)),r=n();if(!((process.env.LMCTL_DB??"").length>0)&&!t.includes("--allow-live"))return e.stderr.write(`refusing to backfill the default live DB.
2766
+ `),1)}async function tV(t,e){let{resolveDbPath:n}=await Promise.resolve().then(()=>(Cn(),iw)),r=n();if(!((process.env.LMCTL_DB??"").length>0)&&!t.includes("--allow-live"))return e.stderr.write(`refusing to backfill the default live DB.
2767
2767
  resolved target: ${r}
2768
2768
  run against a COPY: cp <state.db> copy.db && lmctl --db copy.db db backfill-events
2769
2769
  (or pass --allow-live to target the resolved DB deliberately).