@lmctl-ai/lmctl 0.2.199 → 0.2.200

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,27 +1,27 @@
1
- var FN=Object.create;var Wd=Object.defineProperty;var UN=Object.getOwnPropertyDescriptor;var jN=Object.getOwnPropertyNames;var WN=Object.getPrototypeOf,BN=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var HN=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),me=(t,e)=>{for(var n in e)Wd(t,n,{get:e[n],enumerable:!0})},XN=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of jN(e))!BN.call(t,s)&&s!==n&&Wd(t,s,{get:()=>e[s],enumerable:!(r=UN(e,s))||r.enumerable});return t};var Ct=(t,e,n)=>(n=t!=null?FN(WN(t)):{},XN(e||!t||!t.__esModule?Wd(n,"default",{value:t,enumerable:!0}):n,t));function H_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?So:B_}var B_,So,Bd=x(()=>{"use strict";B_="root_teamfile <> '(direct)'",So=B_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as qN}from"node:fs";import{createRequire as GN}from"node:module";function VN(){return Hd===null&&(Hd=GN(import.meta.url)("node:sqlite").DatabaseSync),Hd}function YN(t){let e=KN[t];if(e!==void 0)return e;let n=JN[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function br(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=YN(t.errcode)),t}function zN(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function QN(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Xd(t){return t.length===1&&ZN(t[0])?[t[0]]:t}function ZN(t){if(!Vd(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Vd(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Hd,JN,KN,qd,ds,Gd,_a=x(()=>{"use strict";Hd=null;JN={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"},KN={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:"&&!qN(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(VN())(e,{readOnly:n.readonly===!0})}catch(r){br(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Gd(this.handle.prepare(e))}catch(n){br(n)}}exec(e){try{this.handle.exec(e)}catch(n){br(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){br(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(!zN(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(!QN(i))throw i}throw o}}};ds=qd,Gd=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){try{let n=this.handle.get(...Xd(e));return this.normalizeRow(n)}catch(n){br(n)}}all(...e){try{return this.handle.all(...Xd(e)).map(n=>this.normalizeRow(n))}catch(n){br(n)}}run(...e){try{let n=this.handle.run(...Xd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){br(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Vd(e)?Object.values(e):Vd(e)?{...e}:e}}});function Ir(t){return new ds(t,{readonly:!0,fileMustExist:!0})}var ga=x(()=>{"use strict";_a()});import{createHash as e0}from"node:crypto";import{lstat as t0,readFile as n0,realpath as X_,stat as q_}from"node:fs/promises";import{isAbsolute as G_,relative as r0,resolve as s0,sep as o0}from"node:path";function W(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 bo(t){return K(t)}function pt(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function ie(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 Ke(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 Xt(t,e,n){let r={},s=bo(t.cacheWrite5m),o=bo(t.cacheWrite1h),i=bo(t.reasoning),a=bo(t.webSearch),l=bo(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function Bn(t){return typeof t=="string"&&a0.has(t.toLowerCase())}function ve(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 us(t){let e=W(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function De(t,e){if(!G_(t))return null;let n=await t0(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await X_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await X_(s).catch(()=>s0(s)),i=r0(o,r);if(i===""||!i.startsWith(`..${o0}`)&&i!==".."&&!G_(i))return r}return null}async function ot(t,e){ie(e);let n=await q_(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await n0(t,{signal:e.signal});e.signal.throwIfAborted();let s=await q_(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Io}:sha256:${e0("sha256").update(r).digest("hex")}`,data:r}}function ya(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=t.toString("utf8"),r=n.length===0?[]:n.slice(0,-1).split(`
2
- `),s=[];for(let o of r)if(e.signal.throwIfAborted(),!!o.trim())try{let i=W(JSON.parse(o));if(!i)return null;s.push(i)}catch{return null}return s}var Io,st,ft,i0,mt,a0,_n=x(()=>{"use strict";Io="bx3",st={input_uncached:null,input_cached:null,input_cache_write:null,output:null};ft=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}},i0=0,mt=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${i0++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};a0=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as l0}from"node:fs/promises";import{join as V_,sep as J_}from"node:path";var fs,Jd=x(()=>{"use strict";_n();fs=class{format;constructor(e){this.format=e}async discover(e,n,r){ie(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 l0(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>V_(l,f.name)+(f.isDirectory()?J_:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=V_(l,f.name),p=f.isDirectory()&&r?.startsWith(m+J_);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(ie(n),e.provider!==this.format.provider||this.format.sessionId(e.source_id)!==e.sessionid)return null;let r=await De(e.source_id,[this.format.root]);if(!r)return null;let s=await ot(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 Hn(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 ko=x(()=>{"use strict"});import{createReadStream as K_}from"node:fs";import{createInterface as Y_}from"node:readline";import{stat as c0}from"node:fs/promises";import{homedir as d0}from"node:os";function z_(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=K_(t,{encoding:"utf-8"}),r=Y_({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=z_(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function ht(t,e){let n=[],r=K_(t,{encoding:"utf-8"}),s=Y_({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=z_(i);if(a!==void 0&&n.push(a),n.length>=e)break}}finally{s.close(),r.destroy()}return n}async function Ie(t){let e=await c0(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function he(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 bt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var Q,Ae=x(()=>{"use strict";Q=d0()});import{readdir as u0}from"node:fs/promises";import{join as ms,resolve as f0}from"node:path";function Ta(t){return f0(t||process.env.XDG_DATA_HOME||ms(Q,".local","share"))}function m0(t){return ms(Ta(t),"muse","sessions")}function p0(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 eg(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,v=p(T.run_id);if(!w||!y||!v){w||m();return}if(w.kind==="started"&&typeof w.prompt=="string")a.push({role:"user",content:w.prompt,timestamp:y}),v.turn.startedAt=y,v.turn.prompt=w.prompt,v.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")v.turn.completedAt=y,v.turn.status=w.terminal==="completed"?"complete":"aborted",i=v.turn.status;else if(w.kind==="model_completed"){typeof w.model=="string"&&w.model.length>0&&(r=w.model,v.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{v.responseIds.push(b);let q={};if(w.usage&&typeof w.usage=="object")for(let M of["input_tokens","output_tokens","cached_tokens","reasoning_tokens","input_uncached_tokens","cache_read_tokens","input_cache_read_tokens","cache_write_tokens","input_cache_write_tokens","promptTokens","prompt_tokens"]){let se=w.usage[M];typeof se=="number"&&Number.isSafeInteger(se)&&se>=0&&(q[M]=se)}Object.keys(q).length>0&&(v.turn.rawUsage=[...v.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,p0(b,y,w.model,q))}if(!w.usage)return;let k={},L=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,C=w.usage.cache_write_tokens??w.usage.input_cache_write_tokens,S=typeof w.usage.promptTokens=="number"?w.usage.promptTokens:typeof w.usage.prompt_tokens=="number"?w.usage.prompt_tokens:void 0,A=typeof L=="number"&&typeof O=="number"&&O>L||typeof S=="number"&&typeof O=="number"&&O>S||typeof S=="number"&&typeof C=="number"&&C>S||typeof S=="number"&&typeof O=="number"&&typeof C=="number"&&O+C>S,R=A?void 0:typeof O=="number"?O:void 0,I=A?void 0:typeof C=="number"?C:void 0,N;A||(typeof w.usage.input_uncached_tokens=="number"?N=w.usage.input_uncached_tokens:typeof S=="number"&&typeof O=="number"&&typeof C=="number"&&S>=O+C&&(N=S-O-C)),N!==void 0&&N<0&&(N=void 0);let P=w.usage.output_tokens,$=w.usage.reasoning_tokens;typeof N=="number"&&Number.isSafeInteger(N)&&N>=0&&(k.inputTokens=N),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(k.cachedInputTokens=R),typeof I=="number"&&Number.isSafeInteger(I)&&I>=0&&(k.cacheWriteInputTokens=I),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(k.outputTokens=P),typeof $=="number"&&Number.isSafeInteger($)&&$>=0&&(k.reasoningOutputTokens=$),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=Hn(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 h0(t,e,n){let r=eg(e,n);for(let s of t)r.visit(s);return r.finish()}function _0(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=h0(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function tg(t){return{provider:"muse",root:m0(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:_0}}async function Z_(t,e){let n=eg(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var Q_,Ea,Kd=x(()=>{"use strict";ko();Ae();Q_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Ea=class{name="muse";dataHome;constructor(e={}){this.dataHome=Ta(e.museDataHome)}get root(){return ms(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await u0(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(ms(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(ms(e,o.name),n+1));return s}async resolveSessionPath(e){return Q_.test(e)?(await this.files()).find(n=>n.endsWith(ms(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?Z_(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!Q_.test(r))continue;let s=await Z_(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as ng,readdir as g0,rm as y0,stat as rg}from"node:fs/promises";import{basename as E0,join as ps,resolve as T0}from"node:path";function Sa(t){return T0(t||process.env.MINIPLAYER_HOME||ps(process.env.XDG_DATA_HOME||ps(Q,".local","share"),"miniplayer"))}function wa(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function Yd(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function sg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function og(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function ig(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 ag(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 cg(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),v=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=ag({...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 L=new Map,O=new Map,C=new Set,S=[];for(let A of v){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,I=S.length;S.push({response:R,index:I,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,S[I].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 N of Array.isArray(R.toolCalls)?R.toolCalls:[]){let P=sg(N),$=Yd(N);if(P)L.set(P,I),O.set(P,$);else{d=!0;let q=$==="list_directory"||$==="read_file"||$==="webget"||$==="shell"||$==="tool",M=$==="write_file"||$==="shell"||$==="tool";q&&S[I].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),M&&S[I].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}b.length===0&&v.length>0&&(d=!0);for(let A of Array.isArray(h.toolEvents)?h.toolEvents:[]){let R=A&&typeof A=="object"?A:{},I=sg(R),N=I?L.get(I):void 0,P=Yd(R),$=og(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:wa(R?.input??R?.args),toolName:P,toolInput:wa(R?.input??R?.args),toolInputData:og(R?.input??R?.args)??void 0,...I?{toolCallId:I}:{}}):a.push({role:"tool_result",timestamp:s(R?.timestamp)??E??g,content:wa(q?R?.error:R?.result),toolName:P,...I?{toolCallId:I}:{}}),N===void 0){d=!0;continue}let M=S[N];(R.type==="tool_result"||q||R.result!==void 0)&&C.add(I);let se=$?.path,B=K($?.bytesRead??$?.bytesWritten);R.type!=="tool_call"&&(P==="read_file"&&!q&&typeof se=="string"&&B!==null?M.filesRead.push({path:se,bytes:B}):P==="write_file"&&!q&&typeof se=="string"&&B!==null?M.filesWritten.push({path:se,bytes:B}):P==="webget"&&!q&&B!==null?M.io.push({direction:"read",kind:"web",id:I,ref:ig($?.finalUrl??$?.url),bytes:B,basis:"certified_counter"}):P==="shell"||q?(P!=="write_file"&&M.io.push({direction:"read",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"}),(P==="shell"||P==="write_file")&&M.io.push({direction:"write",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"})):P==="list_directory"||P==="read_file"||P==="webget"?M.io.push({direction:"read",kind:P==="webget"?"web":"unattributed",id:I,ref:P==="webget"?ig($?.finalUrl??$?.url):null,bytes:null,basis:"unknown"}):P==="write_file"?M.io.push({direction:"write",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"}):M.io.push({direction:"read",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"}))}for(let[A,R]of O)if(!C.has(A)){let I=S[L.get(A)],N=R==="list_directory"||R==="read_file"||R==="webget"||R==="shell",P=R==="write_file"||R==="shell";N&&I.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),P&&I.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of S){let R=A.response,I=ag(R),N=s(R.completedAt??R.startedAt)??E??g;new Set((Array.isArray(R.toolCalls)?R.toolCalls:[]).map(M=>Yd(M))).has("shell")&&!A.io.some(M=>M.kind==="unattributed"&&M.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 $=A.io.some(M=>M.direction==="read"&&M.bytes===null),q=A.io.some(M=>M.direction==="write"&&M.bytes===null);if(c.push({response_id:R.responseId,timestamp:N.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:I.tokens,files_read:$?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:$?null:A.filesRead.reduce((M,se)=>M+(se.bytes??0),0)+A.io.filter(M=>M.direction==="read").reduce((M,se)=>M+(se.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce((M,se)=>M+(se.bytes??0),0)+A.io.filter(M=>M.direction==="write").reduce((M,se)=>M+(se.bytes??0),0),external_io:A.io,pricing_facts:I.pricingFacts}),Object.keys(I.rawUsage).length){let M=l.at(-1);M.rawUsage=[...M.rawUsage??[],{responseId:R.responseId,values:I.rawUsage}]}}l.at(-1).responseIds=b,b.length!==v.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=Hn(c,!d);return{provider:"miniplayer",sessionId:e,cwd:r.cwd,filePath:n,createdAt:o,modifiedAt:i,model:typeof r.model=="string"?r.model:void 0,messages:a,messageCount:a.length,userPrompts:f,firstUserMessage:f[0],lastUserMessage:f.at(-1),turns:l,responses:c,turnStatus:u,...d?{captureStatus:"partial"}:{},totalInputTokens:m.input_uncached??void 0,totalCachedInputTokens:m.input_cached??void 0,totalCacheWriteInputTokens:m.input_cache_write??void 0,totalOutputTokens:m.output??void 0}}function ba(t){return{provider:"miniplayer",root:ps(Sa(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=E0(e,".json");return e.endsWith(".json")&&lg.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:cg(o,n,r)}catch{return null}}}}var lg,va,Ia=x(()=>{"use strict";ko();Ae();_n();lg=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;va=class{name="miniplayer";home;constructor(e={}){this.home=Sa(e.miniplayerHome)}getWatchPaths(){return[{directory:ps(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await g0(ps(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(!lg.test(e))return null;let n=ps(this.home,"sessions",`${e}.json`);try{return(await rg(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=cg(JSON.parse(await ng(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await ng(`${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 rg(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await y0(n),!0}}});import{createHash as w0}from"node:crypto";import{createRequire as v0}from"node:module";import{readdir as S0,realpath as b0}from"node:fs/promises";import{basename as dg,dirname as I0,join as ug,resolve as fg}from"node:path";function A0(){return k0("node:sqlite").DatabaseSync}function R0(){return process.env.HOME||process.env.USERPROFILE||""}function kr(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 qt(t,e){return t.find(n=>n.field===e)}function N0(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=kr(n.bytes),s=qt(r,1)?.bytes,o=qt(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 x0(t){let e=qt(kr(t),5)?.bytes;if(e===void 0)return null;let n=qt(kr(e),1)?.bytes;if(n===void 0)return null;let r=kr(n),s=qt(r,1)?.varint;if(s===void 0)return null;let o=qt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function L0(t){let e=qt(t,4)?.bytes,n=e!==void 0?kr(e):[],r=s=>{let o=qt(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 C0(t){let e=qt(kr(t),1)?.bytes;if(e===void 0)return null;let n=kr(e),r=N0(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=qt(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}=L0(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function mg(t,e){ie(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=w0("sha256");o.update("rev:").update(ka).update(`
1
+ var FN=Object.create;var Wd=Object.defineProperty;var UN=Object.getOwnPropertyDescriptor;var jN=Object.getOwnPropertyNames;var WN=Object.getPrototypeOf,BN=Object.prototype.hasOwnProperty;var L=(t,e)=>()=>(t&&(e=t(t=0)),e);var HN=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),me=(t,e)=>{for(var n in e)Wd(t,n,{get:e[n],enumerable:!0})},XN=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of jN(e))!BN.call(t,s)&&s!==n&&Wd(t,s,{get:()=>e[s],enumerable:!(r=UN(e,s))||r.enumerable});return t};var Ct=(t,e,n)=>(n=t!=null?FN(WN(t)):{},XN(e||!t||!t.__esModule?Wd(n,"default",{value:t,enumerable:!0}):n,t));function H_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?So:B_}var B_,So,Bd=L(()=>{"use strict";B_="root_teamfile <> '(direct)'",So=B_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as qN}from"node:fs";import{createRequire as GN}from"node:module";function VN(){return Hd===null&&(Hd=GN(import.meta.url)("node:sqlite").DatabaseSync),Hd}function YN(t){let e=KN[t];if(e!==void 0)return e;let n=JN[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function br(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=YN(t.errcode)),t}function zN(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function QN(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Xd(t){return t.length===1&&ZN(t[0])?[t[0]]:t}function ZN(t){if(!Vd(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Vd(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Hd,JN,KN,qd,ds,Gd,_a=L(()=>{"use strict";Hd=null;JN={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"},KN={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:"&&!qN(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(VN())(e,{readOnly:n.readonly===!0})}catch(r){br(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Gd(this.handle.prepare(e))}catch(n){br(n)}}exec(e){try{this.handle.exec(e)}catch(n){br(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){br(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(!zN(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(!QN(i))throw i}throw o}}};ds=qd,Gd=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){try{let n=this.handle.get(...Xd(e));return this.normalizeRow(n)}catch(n){br(n)}}all(...e){try{return this.handle.all(...Xd(e)).map(n=>this.normalizeRow(n))}catch(n){br(n)}}run(...e){try{let n=this.handle.run(...Xd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){br(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Vd(e)?Object.values(e):Vd(e)?{...e}:e}}});function Ir(t){return new ds(t,{readonly:!0,fileMustExist:!0})}var ga=L(()=>{"use strict";_a()});import{createHash as e0}from"node:crypto";import{lstat as t0,readFile as n0,realpath as X_,stat as q_}from"node:fs/promises";import{isAbsolute as G_,relative as r0,resolve as s0,sep as o0}from"node:path";function W(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 bo(t){return K(t)}function pt(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function ie(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 Ke(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 Xt(t,e,n){let r={},s=bo(t.cacheWrite5m),o=bo(t.cacheWrite1h),i=bo(t.reasoning),a=bo(t.webSearch),l=bo(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function Bn(t){return typeof t=="string"&&a0.has(t.toLowerCase())}function ve(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 us(t){let e=W(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function De(t,e){if(!G_(t))return null;let n=await t0(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await X_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await X_(s).catch(()=>s0(s)),i=r0(o,r);if(i===""||!i.startsWith(`..${o0}`)&&i!==".."&&!G_(i))return r}return null}async function ot(t,e){ie(e);let n=await q_(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await n0(t,{signal:e.signal});e.signal.throwIfAborted();let s=await q_(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Io}:sha256:${e0("sha256").update(r).digest("hex")}`,data:r}}function ya(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=t.toString("utf8"),r=n.length===0?[]:n.slice(0,-1).split(`
2
+ `),s=[];for(let o of r)if(e.signal.throwIfAborted(),!!o.trim())try{let i=W(JSON.parse(o));if(!i)return null;s.push(i)}catch{return null}return s}var Io,st,ft,i0,mt,a0,_n=L(()=>{"use strict";Io="bx3",st={input_uncached:null,input_cached:null,input_cache_write:null,output:null};ft=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}},i0=0,mt=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${i0++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};a0=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as l0}from"node:fs/promises";import{join as V_,sep as J_}from"node:path";var fs,Jd=L(()=>{"use strict";_n();fs=class{format;constructor(e){this.format=e}async discover(e,n,r){ie(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 l0(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>V_(l,f.name)+(f.isDirectory()?J_:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=V_(l,f.name),p=f.isDirectory()&&r?.startsWith(m+J_);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(ie(n),e.provider!==this.format.provider||this.format.sessionId(e.source_id)!==e.sessionid)return null;let r=await De(e.source_id,[this.format.root]);if(!r)return null;let s=await ot(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 Hn(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 ko=L(()=>{"use strict"});import{createReadStream as K_}from"node:fs";import{createInterface as Y_}from"node:readline";import{stat as c0}from"node:fs/promises";import{homedir as d0}from"node:os";function z_(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=K_(t,{encoding:"utf-8"}),r=Y_({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=z_(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function ht(t,e){let n=[],r=K_(t,{encoding:"utf-8"}),s=Y_({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=z_(i);if(a!==void 0&&n.push(a),n.length>=e)break}}finally{s.close(),r.destroy()}return n}async function Ie(t){let e=await c0(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function he(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 bt(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var Q,Ae=L(()=>{"use strict";Q=d0()});import{readdir as u0}from"node:fs/promises";import{join as ms,resolve as f0}from"node:path";function Ta(t){return f0(t||process.env.XDG_DATA_HOME||ms(Q,".local","share"))}function m0(t){return ms(Ta(t),"muse","sessions")}function p0(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 eg(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,v=p(T.run_id);if(!w||!y||!v){w||m();return}if(w.kind==="started"&&typeof w.prompt=="string")a.push({role:"user",content:w.prompt,timestamp:y}),v.turn.startedAt=y,v.turn.prompt=w.prompt,v.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")v.turn.completedAt=y,v.turn.status=w.terminal==="completed"?"complete":"aborted",i=v.turn.status;else if(w.kind==="model_completed"){typeof w.model=="string"&&w.model.length>0&&(r=w.model,v.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{v.responseIds.push(b);let q={};if(w.usage&&typeof w.usage=="object")for(let M of["input_tokens","output_tokens","cached_tokens","reasoning_tokens","input_uncached_tokens","cache_read_tokens","input_cache_read_tokens","cache_write_tokens","input_cache_write_tokens","promptTokens","prompt_tokens"]){let se=w.usage[M];typeof se=="number"&&Number.isSafeInteger(se)&&se>=0&&(q[M]=se)}Object.keys(q).length>0&&(v.turn.rawUsage=[...v.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,p0(b,y,w.model,q))}if(!w.usage)return;let k={},x=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,C=w.usage.cache_write_tokens??w.usage.input_cache_write_tokens,S=typeof w.usage.promptTokens=="number"?w.usage.promptTokens:typeof w.usage.prompt_tokens=="number"?w.usage.prompt_tokens:void 0,A=typeof x=="number"&&typeof O=="number"&&O>x||typeof S=="number"&&typeof O=="number"&&O>S||typeof S=="number"&&typeof C=="number"&&C>S||typeof S=="number"&&typeof O=="number"&&typeof C=="number"&&O+C>S,R=A?void 0:typeof O=="number"?O:void 0,I=A?void 0:typeof C=="number"?C:void 0,N;A||(typeof w.usage.input_uncached_tokens=="number"?N=w.usage.input_uncached_tokens:typeof S=="number"&&typeof O=="number"&&typeof C=="number"&&S>=O+C&&(N=S-O-C)),N!==void 0&&N<0&&(N=void 0);let P=w.usage.output_tokens,$=w.usage.reasoning_tokens;typeof N=="number"&&Number.isSafeInteger(N)&&N>=0&&(k.inputTokens=N),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(k.cachedInputTokens=R),typeof I=="number"&&Number.isSafeInteger(I)&&I>=0&&(k.cacheWriteInputTokens=I),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(k.outputTokens=P),typeof $=="number"&&Number.isSafeInteger($)&&$>=0&&(k.reasoningOutputTokens=$),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=Hn(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 h0(t,e,n){let r=eg(e,n);for(let s of t)r.visit(s);return r.finish()}function _0(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=h0(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function tg(t){return{provider:"muse",root:m0(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:_0}}async function Z_(t,e){let n=eg(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var Q_,Ea,Kd=L(()=>{"use strict";ko();Ae();Q_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;Ea=class{name="muse";dataHome;constructor(e={}){this.dataHome=Ta(e.museDataHome)}get root(){return ms(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await u0(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(ms(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(ms(e,o.name),n+1));return s}async resolveSessionPath(e){return Q_.test(e)?(await this.files()).find(n=>n.endsWith(ms(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?Z_(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!Q_.test(r))continue;let s=await Z_(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as ng,readdir as g0,rm as y0,stat as rg}from"node:fs/promises";import{basename as E0,join as ps,resolve as T0}from"node:path";function Sa(t){return T0(t||process.env.MINIPLAYER_HOME||ps(process.env.XDG_DATA_HOME||ps(Q,".local","share"),"miniplayer"))}function wa(t){if(typeof t=="string")return t;try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function Yd(t){return!t||typeof t!="object"?"tool":typeof t.toolName=="string"?t.toolName:typeof t.name=="string"?t.name:"tool"}function sg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function og(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function ig(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 ag(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 cg(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),v=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=ag({...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 x=new Map,O=new Map,C=new Set,S=[];for(let A of v){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,I=S.length;S.push({response:R,index:I,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,S[I].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 N of Array.isArray(R.toolCalls)?R.toolCalls:[]){let P=sg(N),$=Yd(N);if(P)x.set(P,I),O.set(P,$);else{d=!0;let q=$==="list_directory"||$==="read_file"||$==="webget"||$==="shell"||$==="tool",M=$==="write_file"||$==="shell"||$==="tool";q&&S[I].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),M&&S[I].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}b.length===0&&v.length>0&&(d=!0);for(let A of Array.isArray(h.toolEvents)?h.toolEvents:[]){let R=A&&typeof A=="object"?A:{},I=sg(R),N=I?x.get(I):void 0,P=Yd(R),$=og(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:wa(R?.input??R?.args),toolName:P,toolInput:wa(R?.input??R?.args),toolInputData:og(R?.input??R?.args)??void 0,...I?{toolCallId:I}:{}}):a.push({role:"tool_result",timestamp:s(R?.timestamp)??E??g,content:wa(q?R?.error:R?.result),toolName:P,...I?{toolCallId:I}:{}}),N===void 0){d=!0;continue}let M=S[N];(R.type==="tool_result"||q||R.result!==void 0)&&C.add(I);let se=$?.path,B=K($?.bytesRead??$?.bytesWritten);R.type!=="tool_call"&&(P==="read_file"&&!q&&typeof se=="string"&&B!==null?M.filesRead.push({path:se,bytes:B}):P==="write_file"&&!q&&typeof se=="string"&&B!==null?M.filesWritten.push({path:se,bytes:B}):P==="webget"&&!q&&B!==null?M.io.push({direction:"read",kind:"web",id:I,ref:ig($?.finalUrl??$?.url),bytes:B,basis:"certified_counter"}):P==="shell"||q?(P!=="write_file"&&M.io.push({direction:"read",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"}),(P==="shell"||P==="write_file")&&M.io.push({direction:"write",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"})):P==="list_directory"||P==="read_file"||P==="webget"?M.io.push({direction:"read",kind:P==="webget"?"web":"unattributed",id:I,ref:P==="webget"?ig($?.finalUrl??$?.url):null,bytes:null,basis:"unknown"}):P==="write_file"?M.io.push({direction:"write",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"}):M.io.push({direction:"read",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:I,ref:null,bytes:null,basis:"unknown"}))}for(let[A,R]of O)if(!C.has(A)){let I=S[x.get(A)],N=R==="list_directory"||R==="read_file"||R==="webget"||R==="shell",P=R==="write_file"||R==="shell";N&&I.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),P&&I.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of S){let R=A.response,I=ag(R),N=s(R.completedAt??R.startedAt)??E??g;new Set((Array.isArray(R.toolCalls)?R.toolCalls:[]).map(M=>Yd(M))).has("shell")&&!A.io.some(M=>M.kind==="unattributed"&&M.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 $=A.io.some(M=>M.direction==="read"&&M.bytes===null),q=A.io.some(M=>M.direction==="write"&&M.bytes===null);if(c.push({response_id:R.responseId,timestamp:N.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:I.tokens,files_read:$?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:$?null:A.filesRead.reduce((M,se)=>M+(se.bytes??0),0)+A.io.filter(M=>M.direction==="read").reduce((M,se)=>M+(se.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce((M,se)=>M+(se.bytes??0),0)+A.io.filter(M=>M.direction==="write").reduce((M,se)=>M+(se.bytes??0),0),external_io:A.io,pricing_facts:I.pricingFacts}),Object.keys(I.rawUsage).length){let M=l.at(-1);M.rawUsage=[...M.rawUsage??[],{responseId:R.responseId,values:I.rawUsage}]}}l.at(-1).responseIds=b,b.length!==v.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=Hn(c,!d);return{provider:"miniplayer",sessionId:e,cwd:r.cwd,filePath:n,createdAt:o,modifiedAt:i,model:typeof r.model=="string"?r.model:void 0,messages:a,messageCount:a.length,userPrompts:f,firstUserMessage:f[0],lastUserMessage:f.at(-1),turns:l,responses:c,turnStatus:u,...d?{captureStatus:"partial"}:{},totalInputTokens:m.input_uncached??void 0,totalCachedInputTokens:m.input_cached??void 0,totalCacheWriteInputTokens:m.input_cache_write??void 0,totalOutputTokens:m.output??void 0}}function ba(t){return{provider:"miniplayer",root:ps(Sa(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=E0(e,".json");return e.endsWith(".json")&&lg.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:cg(o,n,r)}catch{return null}}}}var lg,va,Ia=L(()=>{"use strict";ko();Ae();_n();lg=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;va=class{name="miniplayer";home;constructor(e={}){this.home=Sa(e.miniplayerHome)}getWatchPaths(){return[{directory:ps(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await g0(ps(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(!lg.test(e))return null;let n=ps(this.home,"sessions",`${e}.json`);try{return(await rg(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=cg(JSON.parse(await ng(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await ng(`${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 rg(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await y0(n),!0}}});import{createHash as w0}from"node:crypto";import{createRequire as v0}from"node:module";import{readdir as S0,realpath as b0}from"node:fs/promises";import{basename as dg,dirname as I0,join as ug,resolve as fg}from"node:path";function A0(){return k0("node:sqlite").DatabaseSync}function R0(){return process.env.HOME||process.env.USERPROFILE||""}function kr(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 qt(t,e){return t.find(n=>n.field===e)}function N0(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=kr(n.bytes),s=qt(r,1)?.bytes,o=qt(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 L0(t){let e=qt(kr(t),5)?.bytes;if(e===void 0)return null;let n=qt(kr(e),1)?.bytes;if(n===void 0)return null;let r=kr(n),s=qt(r,1)?.varint;if(s===void 0)return null;let o=qt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function x0(t){let e=qt(t,4)?.bytes,n=e!==void 0?kr(e):[],r=s=>{let o=qt(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 C0(t){let e=qt(kr(t),1)?.bytes;if(e===void 0)return null;let n=kr(e),r=N0(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=qt(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}=x0(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function mg(t,e){ie(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=w0("sha256");o.update("rev:").update(ka).update(`
4
4
  `);let i=[],a=[],l=0;for(let u of s){if(e.signal.throwIfAborted(),!(u.data instanceof Uint8Array))return null;let f=Buffer.from(u.data);if(l+=f.length,l>e.maxBytes)return null;o.update("g").update(String(u.idx)).update("\0").update(f).update(`
5
5
  `);let m=C0(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 _=x0(p);_!==null&&c.set(u,_)}return{revision:`${Io}+${ka}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function O0(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:Xt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function pg(t={}){return new Ao(t)}var Xn,ka,k0,Ao,zd=x(()=>{"use strict";_n();Xn="agy",ka="agy-tokens-v1",k0=v0(import.meta.url);Ao=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=fg(e.agyConversationsDir??ug(R0(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){ie(e);let s=await S0(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 b0(ug(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:Xn,sessionid:dg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await De(e.source_id,[this.conversationsDir]);if(n===null||dg(n,".db")!==e.sessionid||fg(I0(n))!==this.conversationsDir)return null;try{let r=new(A0())(n,{open:!0,readOnly:!0});return r.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),r}catch{return null}}async inspect(e,n){if(ie(n),e.provider!==Xn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=mg(r,n);return s?{status:"ready",revision:s.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}async read(e,n,r){if(ie(r),e.provider!==Xn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=mg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=O0(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 D0 from"node:zlib";function H0(t,e){return t[e]===$0&&t[e+1]===P0&&t[e+2]===F0&&t[e+3]===U0}function hg(t,e){return(t[e]&240)===80&&t[e+1]===j0&&t[e+2]===W0&&t[e+3]===B0}function X0(t,e){if(hg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!H0(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 Ro(t){let e=[],n=0;for(;n+4<=t.length;){let r=X0(t,n);if(r===void 0||r<=0)break;e.push(t.subarray(n,n+r)),n+=r}return e}function Aa(t){let e=[];for(let n of Ro(t))hg(n,0)||e.push(M0(n).toString("utf8"));return e.join("")}var M0,$0,P0,F0,U0,j0,W0,B0,Ra=x(()=>{"use strict";M0=D0.zstdDecompressSync,$0=40,P0=181,F0=47,U0=253,j0=42,W0=77,B0=24});import{readdir as q0,realpath as G0}from"node:fs/promises";import{basename as Qd,dirname as _g,join as Eg,resolve as Tg}from"node:path";import V0 from"node:zlib";function wg(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function Z0(t){return Q0.has(t)||Bn(t)}function ex(){return process.env.HOME||process.env.USERPROFILE||""}function tx(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=W(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function gg(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 nx(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function rx(t,e){let n=Ro(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(),nx(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=J0(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 sx(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"&&W(W(r.data)?.chunk)?.type!=="usage"||e.push(r)}return e}function ox(t){if(typeof t=="string")try{return W(JSON.parse(t))}catch{return null}return W(t)}function yg(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function ix(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=W(f.data);if(f.type==="assistant/chunk"){let p=W(m?.chunk),_=W(p?.usage),h=yg(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=W(W(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(W(m?.source)?.kind!=="user")continue;let _=typeof m?.id=="string"&&m.id?m.id:null;o.push({id:_,bytes:tx(m?.content)});continue}if(f.type==="assistant/message"){let p=W(m?.message),_=W(p?.source),h=typeof p?.id=="string"&&p.id?p.id:null,g=yg(m?.turn,m?.step),E;if(g!==null)i.add(g),E=`dsh:turn-step:${m.turn}/${m.step}`;else{if(W(m?.usage))return{status:"partial"};E=h}if(E===null)return{status:"partial"};let y=gg(W(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:pt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,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(W(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=ox(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);Y0.has(h)?E!==null?p.obs.record(_??"","read",E,null):ve(p.io,_):z0.has(h)?E!==null?p.obs.record(_??"","written",E,us(g)):ve(p.io,_):Z0(h)||ve(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=gg(_),E=new mt;ve(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:pt(typeof h=="number"?h:null),model:c,tokens:g??{...st},files_read:[],files_written:[]},obs:new ft,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:Ke(g,y,"read"),write_bytes:Ke(E,y,"written"),model_provider:l??h,pricing_facts:Xt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function ax(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await q0(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=Eg(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()&&wg(f.name)){let p=await G0(m).catch(()=>Tg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function vg(t={}){return new Zd(t)}var qn,J0,K0,Y0,z0,Q0,Zd,Sg=x(()=>{"use strict";_n();Ra();qn="dsh",J0=V0.zstdDecompressSync;K0=5e5,Y0=new Set(["read","read_image"]),z0=new Set(["write","edit"]),Q0=new Set(["create_goal","get_goal","update_goal","todo_write","ask_user_question","exit_plan_mode","list_agents","interrupt_agent","job_list","job_kill","job_output"]);Zd=class{sessionsDir;maxDiscoveryTraversalVisits;constructor(e={}){let n=e.dshHome??process.env.DSH_HOME??Eg(ex(),".dsh");this.sessionsDir=Tg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):K0}async discover(e,n,r=null){ie(e);let{paths:s,truncated:o}=await ax(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:qn,sessionid:Qd(_g(i)),source_id:i})),truncated:o}}matches(e,n){return wg(Qd(n))&&Qd(_g(n))===e.sessionid}async inspect(e,n){if(ie(n),e.provider!==qn)return{status:"unsupported"};let r=await De(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(ie(r),e.provider!==qn)return{status:"unsupported"};let s=await De(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ot(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=rx(o.data,r);return a?{status:"partial"}:ix(sx(i),e,n,r)}}});import{readdir as lx,realpath as cx}from"node:fs/promises";import{basename as Na,dirname as dx,join as eu,resolve as bg}from"node:path";function _x(){return process.env.HOME||process.env.USERPROFILE||""}function gx(){let t=_x();return[eu(t,".qwen","projects"),eu(t,".qwen.bk1","projects")]}function yx(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:W(W(t.systemPayload)?.uiEvent)}function Ex(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function Tx(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 wx(t){let e=W(t)?.parts;if(!Array.isArray(e))return null;let n=0,r=!1;for(let s of e){let o=W(s);!o||o.thought===!0||typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}return r?n:null}function vx(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=wx(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 Sx(t,e,n,r){let{promptBytes:s,resolve:o}=vx(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=yx(d);if(u===null)continue;let f=Ex(u);if(f===ux){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=Tx(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:pt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,thoughts:null},a.set(E,T),a.size>r.maxRows)return{status:"partial"};let v=typeof d.uuid=="string"&&d.uuid?d.uuid:null,b=v===null?{kind:"broken"}:o(v);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!==fx)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=W(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):ve(p.io,g)}else if(px.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,us(h)):ve(p.io,g)}else Bn(_)||ve(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:Ke(p,h,"read"),write_bytes:Ke(_,h,"written"),model_provider:null,pricing_facts:Xt({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 bx(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await lx(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=eu(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")&&Na(c)===Ig){let m=await cx(f).catch(()=>bg(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function Ix(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 kg(t={}){return new tu(t)}var Gn,ux,fx,Ig,mx,px,hx,tu,Ag=x(()=>{"use strict";_n();Gn="qwen",ux="qwen-code.api_response",fx="qwen-code.tool_call",Ig="chats",mx=new Set(["read_file"]),px=new Set(["write_file"]),hx=5e5;tu=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??gx()).map(n=>bg(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):hx}async discover(e,n,r=null){ie(e);let s=new Map,o=!1;for(let a of this.roots){e.signal.throwIfAborted();let l=await bx(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:Gn,sessionid:Na(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Na(n,".jsonl")===e.sessionid&&Na(dx(n))===Ig}async inspect(e,n){if(ie(n),e.provider!==Gn)return{status:"unsupported"};let r=await De(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(ie(r),e.provider!==Gn)return{status:"unsupported"};let s=await De(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ot(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ya(o.data,r);return i?Ix(i,e.sessionid)?Sx(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as kx}from"node:crypto";import{createRequire as Ax}from"node:module";import{join as No,resolve as nu}from"node:path";function Nx(){return Rx("node:sqlite").DatabaseSync}function Rg(){return process.env.HOME||process.env.USERPROFILE||""}function xx(){let t=process.env.XDG_DATA_HOME||No(Rg(),".local","share"),e=process.env.XDG_CONFIG_HOME||No(Rg(),".config");return[No(t,"opencode","opencode.db"),No(t,"opencode","opencode-local.db"),No(e,"opencode","opencode.db")]}function Mx(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Lx.includes(e)?"read":Cx.includes(e)?"written":null}function Ng(t,e=Ox){let n=W(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 $x(t){let e=W(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=W(r),o=s?.newString??s?.new_string;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function Px(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
- `)){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 Fx(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 Ux(t,e=!1){let n=W(t);if(!n)return{...st};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=W(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?{...st}: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?{...st}:r+s+o+a+l===0?{...st}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function xg(t,e,n){ie(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=kx("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:`${Io}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function jx(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=W(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&&!Dx.has(i)&&(r=!0))}return n?e:r?"unknown":null}function Wx(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=W(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=jx(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=W(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=W(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 ft,f=new mt,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=W(JSON.parse(b.data))}catch{return{status:"partial"}}if(k?.type!=="tool")continue;let L=typeof k.tool=="string"?k.tool.toLowerCase():"",O=Mx(k.tool),C=W(k.state),S=W(C?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof C?.callID=="string"&&C.callID?C.callID:b.id;if(O==="written")u.record(A,"written",Ng(S),$x(S));else if(O==="apply_patch"){let R=S?.patchText;if(typeof R=="string")for(let I of Px(R))u.record(A,"written",I.path,I.bytes);else ve(f,A)}else if(O==="read"){let R=Ng(S,["filePath","path","file","file_path"]);if(R===null)continue;let I=null;if(C?.status==="completed"){let N=W(W(C.metadata)?.display);N?.type==="file"&&typeof N.text=="string"&&(I=Buffer.byteLength(N.text,"utf8"))}u.record(A,"read",R,I)}else if(L==="webfetch"){m+=1;let R=C?.status==="completed"?C.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:Fx(S?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else Bn(k.tool)||ve(f,A)}let _=W(d.time),h=W(d.model)?.modelID??d.modelID,g=Ux(d.tokens,r.requireBillingCounters),E=W(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),v=Xt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:pt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Ke(y,w,"read"),write_bytes:Ke(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:v}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}function Lg(t={}){return new xo(t)}var Ar,Rx,Lx,Cx,Ox,Dx,xo,ru=x(()=>{"use strict";_n();Ar="opencode",Rx=Ax(import.meta.url);Lx=["read","read_file","view","view_file","view_image"],Cx=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],Ox=["filePath","path","file","file_path","filepath","notebook_path","paths"],Dx=new Set(["session-job-notification"]);xo=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??xx()).map(n=>nu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(nu(e)))return null;try{let n=new(Nx())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discover(e,n,r=null){ie(e);let s=new Map;for(let i of this.dbPaths){e.signal.throwIfAborted();let a=await De(i,[nu(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:Ar,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(ie(n),e.provider!==Ar)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=xg(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(ie(r),e.provider!==Ar)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=xg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=Wx(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as Bx,realpath as Hx,stat as Xx}from"node:fs/promises";import{basename as Cg,dirname as qx,join as Og,resolve as Dg}from"node:path";function Jx(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 Kx(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function Yx(t,e,n){let r=W(t);if(!r)return{entry:null,incomplete:t!=null};let s=[],o=!1;for(let[a,l]of Object.entries(r)){let c=W(l);if(!c){o=!0;continue}let d=W(c.usage),u=W(c.requests),f=W(c.tokenDetails),m=W(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 zx(t,e,n,r){let s=new Map;for(let u of t){if(u.type!=="user.message")continue;let f=W(u.data),m=typeof f?.interactionId=="string"?f.interactionId:null;if(m===null)continue;let p=Kx(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=pt(u.timestamp),{entry:y,incomplete:T}=Yx(W(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=W(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:pt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,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=W(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 v=W(w),b=typeof v?.path=="string"?v.path:null,k=typeof v?.file_text=="string"?Buffer.byteLength(v.file_text,"utf8"):null;b!==null?_.obs.record(T??m,"written",b,k):ve(_.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let v=Jx(w);if(v.length>0)for(let b of v)_.obs.record(T??m,"written",b.path,b.bytes);else ve(_.io,T)}else ve(_.io,T);else if(Vx.has(y)){let v=W(w),b=typeof v?.path=="string"?v.path:null;b!==null?_.obs.record(T??m,"read",b,null):ve(_.io,T)}else Gx.has(y)||ve(_.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:Ke(p,h,"read"),write_bytes:Ke(_,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 Qx(){return process.env.HOME||process.env.USERPROFILE||""}function $g(t={}){return new su(t)}var Vn,Mg,Gx,Vx,su,Pg=x(()=>{"use strict";_n();Vn="copilot",Mg="events.jsonl",Gx=new Set(["report_intent"]),Vx=new Set(["view"]);su=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Dg(e.copilotSessionStateDir??Og(Qx(),".copilot","session-state"))}async discover(e,n,r=null){ie(e);let s;try{s=await Bx(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Og(this.sessionStateDir,i,Mg);if(!(await Xx(a).catch(()=>null))?.isFile())continue;let c=await Hx(a).catch(()=>Dg(a)),d={provider:Vn,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 Cg(n)===Mg&&Cg(qx(n))===e.sessionid}async inspect(e,n){if(ie(n),e.provider!==Vn)return{status:"unsupported"};let r=await De(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(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(ie(r),e.provider!==Vn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await De(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ot(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ya(o.data,r);return i?zx(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Fg,readFile as Zx,realpath as ou,stat as Ug}from"node:fs/promises";import{basename as Co,dirname as _s,isAbsolute as au,join as hs,relative as Bg,resolve as Lo,sep as Hg}from"node:path";function iL(t){return oL.has(t)||Bn(t)}function aL(){return process.env.HOME||process.env.USERPROFILE||""}function lL(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=W(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function jg(t){let e=W(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 cL(t){if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=W(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function uL(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&&!eL.has(o))return{status:"unsupported"};let i=fL(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:pt(typeof y=="number"?y:null),model:null,tokens:{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,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=W(E.origin),w=typeof T?.kind=="string"?T.kind:null,v=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(w!==null&&dL.has(w))continue;if(v!==null){if(d.has(v))continue;d.add(v)}w==="user"?c.push({bytes:cL(E.input),id:v}):c.push({bytes:null,id:v});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 v=jg(E.usage);v&&(w.meta.tokens=v,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=W(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 v of c)w.io.record({direction:"read",kind:"prompt",id:v.id,ref:null,bytes:v.bytes,basis:v.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 v=jg(y.usage);v&&(w.meta.tokens=v),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=pt(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 v=typeof y.name=="string"?y.name.toLowerCase():"",b=typeof y.toolCallId=="string"&&y.toolCallId?y.toolCallId:null,k=W(y.args),L=typeof k?.path=="string"&&k.path?k.path:typeof k?.file_path=="string"&&k.file_path?k.file_path:null;rL.has(v)?L!==null?w.obs.record(b??"","read",L,null):ve(w.io,b):sL.has(v)?L!==null?w.obs.record(b??"","written",L,us(k)):ve(w.io,b):iL(v)||ve(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 v=y.files("read"),b=y.files("written"),k=T.entries();g.push({...E,files_read:v,files_written:b,external_io:k,read_bytes:Ke(v,k,"read"),write_bytes:Ke(b,k,"written"),model_provider:null,pricing_facts:Xt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function iu(t){return Co(t)===lu&&Co(_s(_s(t)))===Xg}function Wg(t){return Co(_s(_s(_s(t))))}function fL(t){return Co(_s(t))}function mL(t,e){let n=Bg(e,t);return n===""||!n.startsWith(`..${Hg}`)&&n!==".."&&!au(n)}function pL(t){if(t instanceof Error&&t.name==="AbortError")throw t}function qg(t={}){return new Oo(t)}var Jn,lu,Xg,eL,tL,nL,rL,sL,oL,dL,Oo,cu=x(()=>{"use strict";_n();Jn="kimi",lu="wire.jsonl",Xg="agents",eL=new Set(["1.4","1.5"]),tL=5e5,nL=8*1024*1024,rL=new Set(["read"]),sL=new Set(["write","edit"]),oL=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);dL=new Set(["system_trigger","cron_job","task"]);Oo=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Lo(e.kimiHome??process.env.KIMI_CODE_HOME??hs(aL(),".kimi-code")),this.sessionsDir=hs(this.home,"sessions"),this.indexPath=hs(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):tL}async discover(e,n,r=null){ie(e);let s=new Set,o=!1,i=await ou(this.sessionsDir).catch(()=>Lo(this.sessionsDir)),a=f=>{iu(f)&&mL(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Fg(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=hs(f,_.name);if(_.isDirectory()&&!_.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else _.isFile()&&_.name===lu&&iu(h)&&a(await ou(h).catch(()=>Lo(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){pL(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:Jn,sessionid:Wg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Ug(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>nL)return;let s=await Zx(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=W(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||!au(l)||Co(l)!==a)continue;let c=Bg(this.sessionsDir,Lo(l));if(c.startsWith(`..${Hg}`)||c===".."||au(c))continue;let d=hs(l,Xg),u=await Fg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=hs(d,f.name,lu);(await Ug(m).catch(()=>null))?.isFile()&&e(await ou(m).catch(()=>Lo(m)))}}}matches(e,n){return iu(n)&&Wg(n)===e.sessionid}async inspect(e,n){if(ie(n),e.provider!==Jn)return{status:"unsupported"};let r=await De(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(ie(r),e.provider!==Jn)return{status:"unsupported"};let s=await De(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ot(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=lL(o.data,r);return i?uL(i,e,n,r):{status:"partial"}}}});import{createHash as hu}from"node:crypto";import{createRequire as hL}from"node:module";import{lstat as _L,readFile as gL,readdir as yL,realpath as mu,stat as Gg}from"node:fs/promises";import{basename as xa,dirname as EL,isAbsolute as Vg,join as Rr,relative as TL,resolve as gn,sep as wL}from"node:path";function _u(t){return typeof t=="string"&&SL.has(t.toLowerCase())}function $o(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 Zg(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 Es(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 ys(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function gu(t,e,n){let r={},s=ys(t.cacheWrite5m),o=ys(t.cacheWrite1h),i=ys(t.reasoning),a=ys(t.webSearch),l=ys(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 La(){return process.env.HOME||process.env.USERPROFILE||""}function kL(){if(process.env.OPENCODE_DB)return[gn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Rr(La(),".local","share");return[Rr(t,"lmplayer","opencode-local.db"),Rr(t,"lmplayer","opencode-dev.db")]}function AL(){return IL("node:sqlite").DatabaseSync}function Y(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function it(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function Eu(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function Mo(t){if(!Number.isSafeInteger(t.maxBytes)||t.maxBytes<=0)throw new Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(t.maxRows)||t.maxRows<=0)throw new Error("maxRows must be a positive safe integer");t.signal.throwIfAborted()}function Ca(t){return`${t.source_id}\0${t.sessionid}`}function zn(t,e){return t<e?-1:t>e?1:0}function du(t,e){return zn(Ca(t),Ca(e))}function RL(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function Jg(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 NL(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>=uu.length)throw new Error("invalid passive session discovery cursor");let i=o,a=Jg({source_id:e.source_id,sessionid:e.sessionid}),l=new Map([[uu[i],a]]),c=new Set(uu.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,Jg(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 ey(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":xL.includes(e)?"read":LL.includes(e)?"written":null}function OL(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Oa(t,e=CL){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 ty(t){let e=Y(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_source=="string")return Buffer.byteLength(e.new_source,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=Y(r),o=s?.new_string??s?.newString;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function Da(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
12
- `)){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 ML(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 DL)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 Kg(t){if(t.length===0||t.endsWith(`
6
+ `);let _=L0(p);_!==null&&c.set(u,_)}return{revision:`${Io}+${ka}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function O0(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:Xt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function pg(t={}){return new Ao(t)}var Xn,ka,k0,Ao,zd=L(()=>{"use strict";_n();Xn="agy",ka="agy-tokens-v1",k0=v0(import.meta.url);Ao=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=fg(e.agyConversationsDir??ug(R0(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){ie(e);let s=await S0(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 b0(ug(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:Xn,sessionid:dg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await De(e.source_id,[this.conversationsDir]);if(n===null||dg(n,".db")!==e.sessionid||fg(I0(n))!==this.conversationsDir)return null;try{let r=new(A0())(n,{open:!0,readOnly:!0});return r.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),r}catch{return null}}async inspect(e,n){if(ie(n),e.provider!==Xn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=mg(r,n);return s?{status:"ready",revision:s.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}async read(e,n,r){if(ie(r),e.provider!==Xn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=mg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=O0(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 D0 from"node:zlib";function H0(t,e){return t[e]===$0&&t[e+1]===P0&&t[e+2]===F0&&t[e+3]===U0}function hg(t,e){return(t[e]&240)===80&&t[e+1]===j0&&t[e+2]===W0&&t[e+3]===B0}function X0(t,e){if(hg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!H0(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 Ro(t){let e=[],n=0;for(;n+4<=t.length;){let r=X0(t,n);if(r===void 0||r<=0)break;e.push(t.subarray(n,n+r)),n+=r}return e}function Aa(t){let e=[];for(let n of Ro(t))hg(n,0)||e.push(M0(n).toString("utf8"));return e.join("")}var M0,$0,P0,F0,U0,j0,W0,B0,Ra=L(()=>{"use strict";M0=D0.zstdDecompressSync,$0=40,P0=181,F0=47,U0=253,j0=42,W0=77,B0=24});import{readdir as q0,realpath as G0}from"node:fs/promises";import{basename as Qd,dirname as _g,join as Eg,resolve as Tg}from"node:path";import V0 from"node:zlib";function wg(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function Z0(t){return Q0.has(t)||Bn(t)}function eL(){return process.env.HOME||process.env.USERPROFILE||""}function tL(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=W(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function gg(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 nL(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function rL(t,e){let n=Ro(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(),nL(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=J0(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 sL(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"&&W(W(r.data)?.chunk)?.type!=="usage"||e.push(r)}return e}function oL(t){if(typeof t=="string")try{return W(JSON.parse(t))}catch{return null}return W(t)}function yg(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function iL(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=W(f.data);if(f.type==="assistant/chunk"){let p=W(m?.chunk),_=W(p?.usage),h=yg(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=W(W(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(W(m?.source)?.kind!=="user")continue;let _=typeof m?.id=="string"&&m.id?m.id:null;o.push({id:_,bytes:tL(m?.content)});continue}if(f.type==="assistant/message"){let p=W(m?.message),_=W(p?.source),h=typeof p?.id=="string"&&p.id?p.id:null,g=yg(m?.turn,m?.step),E;if(g!==null)i.add(g),E=`dsh:turn-step:${m.turn}/${m.step}`;else{if(W(m?.usage))return{status:"partial"};E=h}if(E===null)return{status:"partial"};let y=gg(W(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:pt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,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(W(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=oL(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);Y0.has(h)?E!==null?p.obs.record(_??"","read",E,null):ve(p.io,_):z0.has(h)?E!==null?p.obs.record(_??"","written",E,us(g)):ve(p.io,_):Z0(h)||ve(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=gg(_),E=new mt;ve(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:pt(typeof h=="number"?h:null),model:c,tokens:g??{...st},files_read:[],files_written:[]},obs:new ft,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:Ke(g,y,"read"),write_bytes:Ke(E,y,"written"),model_provider:l??h,pricing_facts:Xt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function aL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await q0(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=Eg(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()&&wg(f.name)){let p=await G0(m).catch(()=>Tg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function vg(t={}){return new Zd(t)}var qn,J0,K0,Y0,z0,Q0,Zd,Sg=L(()=>{"use strict";_n();Ra();qn="dsh",J0=V0.zstdDecompressSync;K0=5e5,Y0=new Set(["read","read_image"]),z0=new Set(["write","edit"]),Q0=new Set(["create_goal","get_goal","update_goal","todo_write","ask_user_question","exit_plan_mode","list_agents","interrupt_agent","job_list","job_kill","job_output"]);Zd=class{sessionsDir;maxDiscoveryTraversalVisits;constructor(e={}){let n=e.dshHome??process.env.DSH_HOME??Eg(eL(),".dsh");this.sessionsDir=Tg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):K0}async discover(e,n,r=null){ie(e);let{paths:s,truncated:o}=await aL(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:qn,sessionid:Qd(_g(i)),source_id:i})),truncated:o}}matches(e,n){return wg(Qd(n))&&Qd(_g(n))===e.sessionid}async inspect(e,n){if(ie(n),e.provider!==qn)return{status:"unsupported"};let r=await De(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(ie(r),e.provider!==qn)return{status:"unsupported"};let s=await De(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ot(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=rL(o.data,r);return a?{status:"partial"}:iL(sL(i),e,n,r)}}});import{readdir as lL,realpath as cL}from"node:fs/promises";import{basename as Na,dirname as dL,join as eu,resolve as bg}from"node:path";function _L(){return process.env.HOME||process.env.USERPROFILE||""}function gL(){let t=_L();return[eu(t,".qwen","projects"),eu(t,".qwen.bk1","projects")]}function yL(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:W(W(t.systemPayload)?.uiEvent)}function EL(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function TL(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 wL(t){let e=W(t)?.parts;if(!Array.isArray(e))return null;let n=0,r=!1;for(let s of e){let o=W(s);!o||o.thought===!0||typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}return r?n:null}function vL(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=wL(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 SL(t,e,n,r){let{promptBytes:s,resolve:o}=vL(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=yL(d);if(u===null)continue;let f=EL(u);if(f===uL){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=TL(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:pt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,thoughts:null},a.set(E,T),a.size>r.maxRows)return{status:"partial"};let v=typeof d.uuid=="string"&&d.uuid?d.uuid:null,b=v===null?{kind:"broken"}:o(v);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!==fL)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=W(u.function_args),g=`tool-${l++}`;if(mL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"read",E,null):ve(p.io,g)}else if(pL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,us(h)):ve(p.io,g)}else Bn(_)||ve(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:Ke(p,h,"read"),write_bytes:Ke(_,h,"written"),model_provider:null,pricing_facts:Xt({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 bL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await lL(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=eu(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")&&Na(c)===Ig){let m=await cL(f).catch(()=>bg(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function IL(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 kg(t={}){return new tu(t)}var Gn,uL,fL,Ig,mL,pL,hL,tu,Ag=L(()=>{"use strict";_n();Gn="qwen",uL="qwen-code.api_response",fL="qwen-code.tool_call",Ig="chats",mL=new Set(["read_file"]),pL=new Set(["write_file"]),hL=5e5;tu=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??gL()).map(n=>bg(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):hL}async discover(e,n,r=null){ie(e);let s=new Map,o=!1;for(let a of this.roots){e.signal.throwIfAborted();let l=await bL(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:Gn,sessionid:Na(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Na(n,".jsonl")===e.sessionid&&Na(dL(n))===Ig}async inspect(e,n){if(ie(n),e.provider!==Gn)return{status:"unsupported"};let r=await De(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(ie(r),e.provider!==Gn)return{status:"unsupported"};let s=await De(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ot(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ya(o.data,r);return i?IL(i,e.sessionid)?SL(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as kL}from"node:crypto";import{createRequire as AL}from"node:module";import{join as No,resolve as nu}from"node:path";function NL(){return RL("node:sqlite").DatabaseSync}function Rg(){return process.env.HOME||process.env.USERPROFILE||""}function LL(){let t=process.env.XDG_DATA_HOME||No(Rg(),".local","share"),e=process.env.XDG_CONFIG_HOME||No(Rg(),".config");return[No(t,"opencode","opencode.db"),No(t,"opencode","opencode-local.db"),No(e,"opencode","opencode.db")]}function ML(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":xL.includes(e)?"read":CL.includes(e)?"written":null}function Ng(t,e=OL){let n=W(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 $L(t){let e=W(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=W(r),o=s?.newString??s?.new_string;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function PL(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
+ `)){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 FL(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 UL(t,e=!1){let n=W(t);if(!n)return{...st};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=W(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?{...st}: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?{...st}:r+s+o+a+l===0?{...st}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function Lg(t,e,n){ie(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=kL("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:`${Io}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function jL(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=W(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&&!DL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function WL(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=W(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=jL(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=W(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=W(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 ft,f=new mt,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=W(JSON.parse(b.data))}catch{return{status:"partial"}}if(k?.type!=="tool")continue;let x=typeof k.tool=="string"?k.tool.toLowerCase():"",O=ML(k.tool),C=W(k.state),S=W(C?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof C?.callID=="string"&&C.callID?C.callID:b.id;if(O==="written")u.record(A,"written",Ng(S),$L(S));else if(O==="apply_patch"){let R=S?.patchText;if(typeof R=="string")for(let I of PL(R))u.record(A,"written",I.path,I.bytes);else ve(f,A)}else if(O==="read"){let R=Ng(S,["filePath","path","file","file_path"]);if(R===null)continue;let I=null;if(C?.status==="completed"){let N=W(W(C.metadata)?.display);N?.type==="file"&&typeof N.text=="string"&&(I=Buffer.byteLength(N.text,"utf8"))}u.record(A,"read",R,I)}else if(x==="webfetch"){m+=1;let R=C?.status==="completed"?C.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:FL(S?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else Bn(k.tool)||ve(f,A)}let _=W(d.time),h=W(d.model)?.modelID??d.modelID,g=UL(d.tokens,r.requireBillingCounters),E=W(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),v=Xt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:pt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Ke(y,w,"read"),write_bytes:Ke(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:v}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}function xg(t={}){return new Lo(t)}var Ar,RL,xL,CL,OL,DL,Lo,ru=L(()=>{"use strict";_n();Ar="opencode",RL=AL(import.meta.url);xL=["read","read_file","view","view_file","view_image"],CL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],OL=["filePath","path","file","file_path","filepath","notebook_path","paths"],DL=new Set(["session-job-notification"]);Lo=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??LL()).map(n=>nu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(nu(e)))return null;try{let n=new(NL())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discover(e,n,r=null){ie(e);let s=new Map;for(let i of this.dbPaths){e.signal.throwIfAborted();let a=await De(i,[nu(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:Ar,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(ie(n),e.provider!==Ar)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=Lg(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(ie(r),e.provider!==Ar)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=Lg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=WL(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as BL,realpath as HL,stat as XL}from"node:fs/promises";import{basename as Cg,dirname as qL,join as Og,resolve as Dg}from"node:path";function JL(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 KL(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function YL(t,e,n){let r=W(t);if(!r)return{entry:null,incomplete:t!=null};let s=[],o=!1;for(let[a,l]of Object.entries(r)){let c=W(l);if(!c){o=!0;continue}let d=W(c.usage),u=W(c.requests),f=W(c.tokenDetails),m=W(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 zL(t,e,n,r){let s=new Map;for(let u of t){if(u.type!=="user.message")continue;let f=W(u.data),m=typeof f?.interactionId=="string"?f.interactionId:null;if(m===null)continue;let p=KL(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=pt(u.timestamp),{entry:y,incomplete:T}=YL(W(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=W(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:pt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,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=W(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 v=W(w),b=typeof v?.path=="string"?v.path:null,k=typeof v?.file_text=="string"?Buffer.byteLength(v.file_text,"utf8"):null;b!==null?_.obs.record(T??m,"written",b,k):ve(_.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let v=JL(w);if(v.length>0)for(let b of v)_.obs.record(T??m,"written",b.path,b.bytes);else ve(_.io,T)}else ve(_.io,T);else if(VL.has(y)){let v=W(w),b=typeof v?.path=="string"?v.path:null;b!==null?_.obs.record(T??m,"read",b,null):ve(_.io,T)}else GL.has(y)||ve(_.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:Ke(p,h,"read"),write_bytes:Ke(_,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 QL(){return process.env.HOME||process.env.USERPROFILE||""}function $g(t={}){return new su(t)}var Vn,Mg,GL,VL,su,Pg=L(()=>{"use strict";_n();Vn="copilot",Mg="events.jsonl",GL=new Set(["report_intent"]),VL=new Set(["view"]);su=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Dg(e.copilotSessionStateDir??Og(QL(),".copilot","session-state"))}async discover(e,n,r=null){ie(e);let s;try{s=await BL(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Og(this.sessionStateDir,i,Mg);if(!(await XL(a).catch(()=>null))?.isFile())continue;let c=await HL(a).catch(()=>Dg(a)),d={provider:Vn,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 Cg(n)===Mg&&Cg(qL(n))===e.sessionid}async inspect(e,n){if(ie(n),e.provider!==Vn)return{status:"unsupported"};let r=await De(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(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(ie(r),e.provider!==Vn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await De(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ot(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ya(o.data,r);return i?zL(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Fg,readFile as ZL,realpath as ou,stat as Ug}from"node:fs/promises";import{basename as Co,dirname as _s,isAbsolute as au,join as hs,relative as Bg,resolve as xo,sep as Hg}from"node:path";function ix(t){return ox.has(t)||Bn(t)}function ax(){return process.env.HOME||process.env.USERPROFILE||""}function lx(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=W(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function jg(t){let e=W(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 cx(t){if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=W(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function ux(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&&!ex.has(o))return{status:"unsupported"};let i=fx(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:pt(typeof y=="number"?y:null),model:null,tokens:{...st},files_read:[],files_written:[]},obs:new ft,io:new mt,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=W(E.origin),w=typeof T?.kind=="string"?T.kind:null,v=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(w!==null&&dx.has(w))continue;if(v!==null){if(d.has(v))continue;d.add(v)}w==="user"?c.push({bytes:cx(E.input),id:v}):c.push({bytes:null,id:v});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 v=jg(E.usage);v&&(w.meta.tokens=v,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=W(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 v of c)w.io.record({direction:"read",kind:"prompt",id:v.id,ref:null,bytes:v.bytes,basis:v.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 v=jg(y.usage);v&&(w.meta.tokens=v),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=pt(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 v=typeof y.name=="string"?y.name.toLowerCase():"",b=typeof y.toolCallId=="string"&&y.toolCallId?y.toolCallId:null,k=W(y.args),x=typeof k?.path=="string"&&k.path?k.path:typeof k?.file_path=="string"&&k.file_path?k.file_path:null;rx.has(v)?x!==null?w.obs.record(b??"","read",x,null):ve(w.io,b):sx.has(v)?x!==null?w.obs.record(b??"","written",x,us(k)):ve(w.io,b):ix(v)||ve(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 v=y.files("read"),b=y.files("written"),k=T.entries();g.push({...E,files_read:v,files_written:b,external_io:k,read_bytes:Ke(v,k,"read"),write_bytes:Ke(b,k,"written"),model_provider:null,pricing_facts:Xt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function iu(t){return Co(t)===lu&&Co(_s(_s(t)))===Xg}function Wg(t){return Co(_s(_s(_s(t))))}function fx(t){return Co(_s(t))}function mx(t,e){let n=Bg(e,t);return n===""||!n.startsWith(`..${Hg}`)&&n!==".."&&!au(n)}function px(t){if(t instanceof Error&&t.name==="AbortError")throw t}function qg(t={}){return new Oo(t)}var Jn,lu,Xg,ex,tx,nx,rx,sx,ox,dx,Oo,cu=L(()=>{"use strict";_n();Jn="kimi",lu="wire.jsonl",Xg="agents",ex=new Set(["1.4","1.5"]),tx=5e5,nx=8*1024*1024,rx=new Set(["read"]),sx=new Set(["write","edit"]),ox=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);dx=new Set(["system_trigger","cron_job","task"]);Oo=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=xo(e.kimiHome??process.env.KIMI_CODE_HOME??hs(ax(),".kimi-code")),this.sessionsDir=hs(this.home,"sessions"),this.indexPath=hs(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):tx}async discover(e,n,r=null){ie(e);let s=new Set,o=!1,i=await ou(this.sessionsDir).catch(()=>xo(this.sessionsDir)),a=f=>{iu(f)&&mx(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Fg(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=hs(f,_.name);if(_.isDirectory()&&!_.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else _.isFile()&&_.name===lu&&iu(h)&&a(await ou(h).catch(()=>xo(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){px(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:Jn,sessionid:Wg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Ug(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>nx)return;let s=await ZL(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=W(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||!au(l)||Co(l)!==a)continue;let c=Bg(this.sessionsDir,xo(l));if(c.startsWith(`..${Hg}`)||c===".."||au(c))continue;let d=hs(l,Xg),u=await Fg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=hs(d,f.name,lu);(await Ug(m).catch(()=>null))?.isFile()&&e(await ou(m).catch(()=>xo(m)))}}}matches(e,n){return iu(n)&&Wg(n)===e.sessionid}async inspect(e,n){if(ie(n),e.provider!==Jn)return{status:"unsupported"};let r=await De(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ot(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(ie(r),e.provider!==Jn)return{status:"unsupported"};let s=await De(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ot(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=lx(o.data,r);return i?ux(i,e,n,r):{status:"partial"}}}});import{createHash as hu}from"node:crypto";import{createRequire as hx}from"node:module";import{lstat as _x,readFile as gx,readdir as yx,realpath as mu,stat as Gg}from"node:fs/promises";import{basename as La,dirname as Ex,isAbsolute as Vg,join as Rr,relative as Tx,resolve as gn,sep as wx}from"node:path";function _u(t){return typeof t=="string"&&Sx.has(t.toLowerCase())}function $o(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 Zg(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 Es(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 ys(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function gu(t,e,n){let r={},s=ys(t.cacheWrite5m),o=ys(t.cacheWrite1h),i=ys(t.reasoning),a=ys(t.webSearch),l=ys(t.webFetch);i!==null&&(e===null||i<=e)&&(r.reasoning_output_tokens=i);let c=(s??0)+(o??0),d=n===null||c<=n;return s!==null&&d&&(r.cache_write_5m_tokens=s),o!==null&&d&&(r.cache_write_1h_tokens=o),a!==null&&(r.web_search_requests=a),l!==null&&(r.web_fetch_requests=l),Object.keys(r).length>0?r:null}function xa(){return process.env.HOME||process.env.USERPROFILE||""}function kx(){if(process.env.OPENCODE_DB)return[gn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Rr(xa(),".local","share");return[Rr(t,"lmplayer","opencode-local.db"),Rr(t,"lmplayer","opencode-dev.db")]}function Ax(){return Ix("node:sqlite").DatabaseSync}function Y(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function it(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function Eu(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function Mo(t){if(!Number.isSafeInteger(t.maxBytes)||t.maxBytes<=0)throw new Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(t.maxRows)||t.maxRows<=0)throw new Error("maxRows must be a positive safe integer");t.signal.throwIfAborted()}function Ca(t){return`${t.source_id}\0${t.sessionid}`}function zn(t,e){return t<e?-1:t>e?1:0}function du(t,e){return zn(Ca(t),Ca(e))}function Rx(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function Jg(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 Nx(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>=uu.length)throw new Error("invalid passive session discovery cursor");let i=o,a=Jg({source_id:e.source_id,sessionid:e.sessionid}),l=new Map([[uu[i],a]]),c=new Set(uu.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,Jg(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 ey(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Lx.includes(e)?"read":xx.includes(e)?"written":null}function Ox(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Oa(t,e=Cx){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 ty(t){let e=Y(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_source=="string")return Buffer.byteLength(e.new_source,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=Y(r),o=s?.new_string??s?.newString;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function Da(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
12
+ `)){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 Mx(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 Dx)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 Kg(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 Yg(t,e){Mo(e);let n=await Gg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await gL(t,{signal:e.signal});e.signal.throwIfAborted();let s=await Gg(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${yu}:sha256:${hu("sha256").update(r).digest("hex")}`,data:r}}function $L(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 PL(t){return xa(EL(t))==="subagents"}function FL(t){let e=Y(t);if(!e)return null;let n=it(e.input_tokens),r=it(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:it(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:it(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 UL(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=Kg(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=Kg(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 jL(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 WL(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 BL(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),WL(i))){n.add(a);let l=jL(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 HL(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=ys(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 XL(t,e,n,r,s=!1){let o=UL(t,r),{promptBytes:i,parent:a,resolve:l}=BL(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:Eu(p.timestamp),model:null,tokens:{...Do},files_read:[],files_written:[]},obs:new Kn,io:new Yn,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 v=w;c.add(v),T.push(v);let b=a.get(v)??null;if(b===null){w=null;continue}let k=l(b);w=k.kind==="found"?k.uuid:null}for(let v=T.length-1;v>=0;v-=1)d(h.io,T[v])}}}let g=Y(_.usage);if(g){let E=FL(g);E&&(h.meta.tokens=E),HL(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=ey(y.name),v=OL(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let k=Oa(v,["file_path","filePath","path","file"]);if(k===null)continue;let L=o.get(T),O=L===void 0||L.cleanPath!==null&&L.cleanPath!==k?null:L.bytes;h.obs.record(T,"read",k,O)}else if(w==="written")h.obs.record(T,"written",Oa(v),ty(v));else if(w==="apply_patch"){let k=typeof v=="string"?v:Y(v)?.input;if(typeof k=="string")for(let L of Da(k))h.obs.record(T,"written",L.path,L.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:Zg(Y(v)?.url),bytes:null,basis:"unknown"}):_u(y.name)||$o(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:Es(E,T,"read"),write_bytes:Es(y,T,"written"),model_provider:null,pricing_facts:gu(g,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function qL(t){let e=Y(t);if(!e)return null;let n=it(e.input_tokens),r=it(e.cached_input_tokens),s=it(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:it(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 GL(t,e,n){let r=typeof t.call_id=="string"&&t.call_id?t.call_id:null,s=typeof t.name=="string"?t.name.toLowerCase():"",o=t.type==="custom_tool_call"?t.input:t.arguments;if(s==="apply_patch"&&typeof o=="string"){if(r!==null)for(let i of Da(o))e.record(r,"written",i.path,i.bytes);return}if(typeof o=="string"){let i=ML(o);if(i!==null){if(r!==null)for(let a of Da(i))e.record(r,"written",a.path,a.bytes);return}}_u(s)||$o(n,r)}function VL(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 JL(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new Kn,c=new Yn,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")GL(h,l,c);else if(h.type==="local_shell_call")$o(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=VL(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 Kn,c=new Yn,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=qL(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 Kn,io:new Yn,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=Eu(_.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 Kn,c=new Yn,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"),v=g.entries(),b=Y(E),k=gu({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:v,read_bytes:Es(T,v,"read"),write_bytes:Es(w,v,"written"),model_provider:a,pricing_facts:k})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function KL(t,e=!1){let n=Y(t);if(!n)return{...Do};let r=n.input===void 0?e?null:0:it(n.input),s=n.output===void 0?e?null:0:it(n.output),o=n.reasoning===void 0?e?null:0:it(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:it(i.read),l=i?.write===void 0?e?null:0:it(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...Do}: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?{...Do}:r+s+o+a+l===0?{...Do}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function zg(t,e,n){Mo(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=it(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=hu("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:`${yu}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function zL(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&&!YL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function QL(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=zL(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 Kn,f=new Yn,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 L=typeof k.tool=="string"?k.tool.toLowerCase():"",O=ey(k.tool),C=Y(k.state),S=Y(C?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof C?.callID=="string"&&C.callID?C.callID:b.id;if(O==="written")u.record(A,"written",Oa(S),ty(S));else if(O==="apply_patch"){let R=S?.patchText;if(typeof R=="string")for(let I of Da(R))u.record(A,"written",I.path,I.bytes);else $o(f,A)}else if(O==="read"){let R=Oa(S,["filePath","path","file","file_path"]);if(R===null)continue;let I=null;if(C?.status==="completed"){let N=Y(Y(C.metadata)?.display);N?.type==="file"&&typeof N.text=="string"&&(I=Buffer.byteLength(N.text,"utf8"))}u.record(A,"read",R,I)}else if(L==="webfetch"){m+=1;let R=C?.status==="completed"?C.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:Zg(S?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else _u(k.tool)||$o(f,A)}let _=Y(d.time),h=Y(d.model)?.modelID??d.modelID,g=KL(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),v=gu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:Eu(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Es(y,w,"read"),write_bytes:Es(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:v}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}async function fu(t,e){if(!Vg(t))return null;let n=await _L(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await mu(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await mu(s).catch(()=>gn(s)),i=TL(o,r);if(i===""||!i.startsWith(`..${wL}`)&&i!==".."&&!Vg(i))return r}return null}async function Qg(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await yL(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>zn(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=Rr(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 mu(f).catch(()=>gn(f));(s===null||zn(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(zn),truncated:a}}function ZL(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 ny(t={}){return new pu(t)}var Kn,vL,Yn,SL,gs,Do,bL,yu,IL,uu,xL,LL,CL,DL,YL,pu,ry=x(()=>{"use strict";Jd();Kd();Ia();zd();Sg();Ag();ru();Pg();cu();Kn=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)}},vL=0,Yn=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${vL++}`,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)}},SL=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);gs=["claude","codex","lmplayer",Xn,qn,Ar,Vn,Gn,Jn,"muse","miniplayer"],Do={input_uncached:null,input_cached:null,input_cache_write:null,output:null},bL=5e5,yu="bx3",IL=hL(import.meta.url);uu=["claude","codex","lmplayer"];xL=["read","read_file","view","view_file","view_image"],LL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],CL=["filePath","path","file","file_path","filepath","notebook_path","paths"];DL=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];YL=new Set(["session-job-notification"]);pu=class{claudeProjectsDir;codexSessionDirs;lmplayerDbPaths;sqliteBusyTimeoutMs;maxDiscoveryTraversalVisits;agyReader;dshReader;qwenReader;opencodeReader;copilotReader;kimiReader;sessionDataReaders;constructor(e={}){this.sessionDataReaders=Object.fromEntries([tg(e.museDataHome),ba(e.miniplayerHome)].map(n=>[n.provider,new fs(n)])),this.claudeProjectsDir=gn(e.claudeProjectsDir??Rr(La(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Rr(La(),".codex","sessions"),Rr(La(),".code","sessions")]).map(n=>gn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??kL()).map(n=>gn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):bL,this.agyReader=pg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=vg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=kg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=Lg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=$g(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=qg(e.kimiHome?{kimiHome:e.kimiHome}:{})}capabilities(){let e=hu("sha256").update(JSON.stringify({claudeProjectsDir:this.claudeProjectsDir,codexSessionDirs:this.codexSessionDirs,lmplayerDbPaths:this.lmplayerDbPaths,agyExtractionRevisionTag:ka,sessionData:Object.values(this.sessionDataReaders).map(({format:n})=>[n.provider,n.root,n.revision])})).digest("hex");return{scope:"account",revision:`${yu}:${e}`,providers:[...gs],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Gn]:"per_response",[qn]:"per_response",[Xn]:"partial",[Vn]:"partial",[Jn]:"per_response"}}}async discover(e){if(Mo(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=NL(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=gs.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(gs.indexOf(h),e,e.maxSources+1,g);if(y)throw new Error(`passive session discovery exceeded the traversal budget for provider "${h}"; cannot certify a complete or progressing sweep`);let T=g?Ca({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,w=T===null?E:E.filter(v=>zn(Ca(v),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 gs.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:RL({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Mo(n),!gs.includes(e.provider))return{status:"unsupported"};if(e.provider==="claude"||e.provider==="codex"){let r=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,s=await fu(e.source_id,r);if(!s||!this.jsonlSourceMatches(e,s))return{status:"unavailable"};let o=await Yg(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===Xn?this.agyReader.inspect(e,n):e.provider===qn?this.dshReader.inspect(e,n):e.provider===Ar?this.opencodeReader.inspect(e,n):e.provider===Vn?this.copilotReader.inspect(e,n):e.provider===Gn?this.qwenReader.inspect(e,n):e.provider===Jn?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Mo(r),e.provider==="claude"||e.provider==="codex"){let s=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,o=await fu(e.source_id,s);if(!o||!this.jsonlSourceMatches(e,o))return{status:"unavailable"};let i=await Yg(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=$L(i.data,r);return a?e.provider==="claude"?XL(a,e,n,r,PL(o)):JL(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===Xn)return this.agyReader.read(e,n,r);if(e.provider===qn)return this.dshReader.read(e,n,r);if(e.provider===Ar)return this.opencodeReader.read(e,n,r);if(e.provider===Gn)return this.qwenReader.read(e,n,r);if(e.provider===Vn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===Jn?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 Qg(this.claudeProjectsDir,r,this.maxDiscoveryTraversalVisits,n,o);return{sources:i.map(l=>({provider:"claude",sessionid:xa(l,".jsonl"),source_id:l})).sort(du),truncated:a}}if(e===1){let i=[],a=!1;for(let l of[...this.codexSessionDirs].sort(zn)){let c=await Qg(l,r,this.maxDiscoveryTraversalVisits,n,o);c.truncated&&(a=!0);for(let d of c.paths){let u=xa(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(du).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[gs[e]].discover(n,r,o)}jsonlSourceMatches(e,n){let r=xa(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(gn(e)))return null;try{let n=new(AL())(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=>gn(a)))].sort(zn);for(let a of o){e.signal.throwIfAborted();let l=await fu(a,[gn(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&&zn(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:ZL(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(du).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=zg(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=zg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=QL(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Po(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 Nr(t){let e=Po(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 Yg(t,e){Mo(e);let n=await Gg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await gx(t,{signal:e.signal});e.signal.throwIfAborted();let s=await Gg(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${yu}:sha256:${hu("sha256").update(r).digest("hex")}`,data:r}}function $x(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=Y(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function Px(t){return La(Ex(t))==="subagents"}function Fx(t){let e=Y(t);if(!e)return null;let n=it(e.input_tokens),r=it(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:it(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:it(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 Ux(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=Kg(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=Kg(m[0]);u=p!==null?Buffer.byteLength(p,"utf8"):null}else u=null}else u=null;n.set(d.tool_use_id,{bytes:u,cleanPath:f})}}return n}function jx(t){let e=t?.content;if(typeof e=="string")return Buffer.byteLength(e,"utf8");if(Array.isArray(e)){let n=0,r=!1;for(let s of e){let o=Y(s);o?.type==="text"&&typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}if(r)return n}return null}function Wx(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 Bx(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),Wx(i))){n.add(a);let l=jx(Y(i.message));l!==null&&r.set(a,l)}}let s=new Map;return{promptBytes:r,parent:e,resolve:i=>{let a=[],l=new Set,c=i,d;for(;;){let u=s.get(c);if(u){d=u;break}if(n.has(c)){d={kind:"found",uuid:c};break}if(!e.has(c)){d={kind:"broken"};break}if(l.has(c)){d={kind:"broken"};break}l.add(c),a.push(c);let f=e.get(c)??null;if(f===null){d={kind:"clean"};break}c=f}for(let u of a)s.set(u,d);return d}}}function Hx(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=ys(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 Xx(t,e,n,r,s=!1){let o=Ux(t,r),{promptBytes:i,parent:a,resolve:l}=Bx(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:Eu(p.timestamp),model:null,tokens:{...Do},files_read:[],files_written:[]},obs:new Kn,io:new Yn,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 v=w;c.add(v),T.push(v);let b=a.get(v)??null;if(b===null){w=null;continue}let k=l(b);w=k.kind==="found"?k.uuid:null}for(let v=T.length-1;v>=0;v-=1)d(h.io,T[v])}}}let g=Y(_.usage);if(g){let E=Fx(g);E&&(h.meta.tokens=E),Hx(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=ey(y.name),v=Ox(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let k=Oa(v,["file_path","filePath","path","file"]);if(k===null)continue;let x=o.get(T),O=x===void 0||x.cleanPath!==null&&x.cleanPath!==k?null:x.bytes;h.obs.record(T,"read",k,O)}else if(w==="written")h.obs.record(T,"written",Oa(v),ty(v));else if(w==="apply_patch"){let k=typeof v=="string"?v:Y(v)?.input;if(typeof k=="string")for(let x of Da(k))h.obs.record(T,"written",x.path,x.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:Zg(Y(v)?.url),bytes:null,basis:"unknown"}):_u(y.name)||$o(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:Es(E,T,"read"),write_bytes:Es(y,T,"written"),model_provider:null,pricing_facts:gu(g,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function qx(t){let e=Y(t);if(!e)return null;let n=it(e.input_tokens),r=it(e.cached_input_tokens),s=it(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:it(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 Gx(t,e,n){let r=typeof t.call_id=="string"&&t.call_id?t.call_id:null,s=typeof t.name=="string"?t.name.toLowerCase():"",o=t.type==="custom_tool_call"?t.input:t.arguments;if(s==="apply_patch"&&typeof o=="string"){if(r!==null)for(let i of Da(o))e.record(r,"written",i.path,i.bytes);return}if(typeof o=="string"){let i=Mx(o);if(i!==null){if(r!==null)for(let a of Da(i))e.record(r,"written",a.path,a.bytes);return}}_u(s)||$o(n,r)}function Vx(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 Jx(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new Kn,c=new Yn,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")Gx(h,l,c);else if(h.type==="local_shell_call")$o(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=Vx(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 Kn,c=new Yn,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=qx(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 Kn,io:new Yn,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=Eu(_.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 Kn,c=new Yn,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"),v=g.entries(),b=Y(E),k=gu({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:v,read_bytes:Es(T,v,"read"),write_bytes:Es(w,v,"written"),model_provider:a,pricing_facts:k})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function Kx(t,e=!1){let n=Y(t);if(!n)return{...Do};let r=n.input===void 0?e?null:0:it(n.input),s=n.output===void 0?e?null:0:it(n.output),o=n.reasoning===void 0?e?null:0:it(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:it(i.read),l=i?.write===void 0?e?null:0:it(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...Do}: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?{...Do}:r+s+o+a+l===0?{...Do}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function zg(t,e,n){Mo(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=it(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=hu("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:`${yu}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function zx(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&&!Yx.has(i)&&(r=!0))}return n?e:r?"unknown":null}function Qx(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=zx(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 Kn,f=new Yn,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 x=typeof k.tool=="string"?k.tool.toLowerCase():"",O=ey(k.tool),C=Y(k.state),S=Y(C?.input),A=typeof k.callID=="string"&&k.callID?k.callID:typeof C?.callID=="string"&&C.callID?C.callID:b.id;if(O==="written")u.record(A,"written",Oa(S),ty(S));else if(O==="apply_patch"){let R=S?.patchText;if(typeof R=="string")for(let I of Da(R))u.record(A,"written",I.path,I.bytes);else $o(f,A)}else if(O==="read"){let R=Oa(S,["filePath","path","file","file_path"]);if(R===null)continue;let I=null;if(C?.status==="completed"){let N=Y(Y(C.metadata)?.display);N?.type==="file"&&typeof N.text=="string"&&(I=Buffer.byteLength(N.text,"utf8"))}u.record(A,"read",R,I)}else if(x==="webfetch"){m+=1;let R=C?.status==="completed"?C.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:Zg(S?.url),bytes:typeof R=="string"?Buffer.byteLength(R,"utf8"):null,basis:typeof R=="string"?"normalized_content":"unknown"})}else _u(k.tool)||$o(f,A)}let _=Y(d.time),h=Y(d.model)?.modelID??d.modelID,g=Kx(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),v=gu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:Eu(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Es(y,w,"read"),write_bytes:Es(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:v}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}async function fu(t,e){if(!Vg(t))return null;let n=await _x(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await mu(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await mu(s).catch(()=>gn(s)),i=Tx(o,r);if(i===""||!i.startsWith(`..${wx}`)&&i!==".."&&!Vg(i))return r}return null}async function Qg(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await yx(c,{withFileTypes:!0}).catch(()=>[]);d.sort((u,f)=>zn(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=Rr(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 mu(f).catch(()=>gn(f));(s===null||zn(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(zn),truncated:a}}function Zx(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 ny(t={}){return new pu(t)}var Kn,vx,Yn,Sx,gs,Do,bx,yu,Ix,uu,Lx,xx,Cx,Dx,Yx,pu,ry=L(()=>{"use strict";Jd();Kd();Ia();zd();Sg();Ag();ru();Pg();cu();Kn=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)}},vx=0,Yn=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${vx++}`,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)}},Sx=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);gs=["claude","codex","lmplayer",Xn,qn,Ar,Vn,Gn,Jn,"muse","miniplayer"],Do={input_uncached:null,input_cached:null,input_cache_write:null,output:null},bx=5e5,yu="bx3",Ix=hx(import.meta.url);uu=["claude","codex","lmplayer"];Lx=["read","read_file","view","view_file","view_image"],xx=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],Cx=["filePath","path","file","file_path","filepath","notebook_path","paths"];Dx=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];Yx=new Set(["session-job-notification"]);pu=class{claudeProjectsDir;codexSessionDirs;lmplayerDbPaths;sqliteBusyTimeoutMs;maxDiscoveryTraversalVisits;agyReader;dshReader;qwenReader;opencodeReader;copilotReader;kimiReader;sessionDataReaders;constructor(e={}){this.sessionDataReaders=Object.fromEntries([tg(e.museDataHome),ba(e.miniplayerHome)].map(n=>[n.provider,new fs(n)])),this.claudeProjectsDir=gn(e.claudeProjectsDir??Rr(xa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Rr(xa(),".codex","sessions"),Rr(xa(),".code","sessions")]).map(n=>gn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??kx()).map(n=>gn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):bx,this.agyReader=pg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=vg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=kg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=xg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=$g(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=qg(e.kimiHome?{kimiHome:e.kimiHome}:{})}capabilities(){let e=hu("sha256").update(JSON.stringify({claudeProjectsDir:this.claudeProjectsDir,codexSessionDirs:this.codexSessionDirs,lmplayerDbPaths:this.lmplayerDbPaths,agyExtractionRevisionTag:ka,sessionData:Object.values(this.sessionDataReaders).map(({format:n})=>[n.provider,n.root,n.revision])})).digest("hex");return{scope:"account",revision:`${yu}:${e}`,providers:[...gs],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Gn]:"per_response",[qn]:"per_response",[Xn]:"partial",[Vn]:"partial",[Jn]:"per_response"}}}async discover(e){if(Mo(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=Nx(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=gs.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(gs.indexOf(h),e,e.maxSources+1,g);if(y)throw new Error(`passive session discovery exceeded the traversal budget for provider "${h}"; cannot certify a complete or progressing sweep`);let T=g?Ca({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,w=T===null?E:E.filter(v=>zn(Ca(v),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 gs.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:Rx({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Mo(n),!gs.includes(e.provider))return{status:"unsupported"};if(e.provider==="claude"||e.provider==="codex"){let r=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,s=await fu(e.source_id,r);if(!s||!this.jsonlSourceMatches(e,s))return{status:"unavailable"};let o=await Yg(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===Xn?this.agyReader.inspect(e,n):e.provider===qn?this.dshReader.inspect(e,n):e.provider===Ar?this.opencodeReader.inspect(e,n):e.provider===Vn?this.copilotReader.inspect(e,n):e.provider===Gn?this.qwenReader.inspect(e,n):e.provider===Jn?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Mo(r),e.provider==="claude"||e.provider==="codex"){let s=e.provider==="claude"?[this.claudeProjectsDir]:this.codexSessionDirs,o=await fu(e.source_id,s);if(!o||!this.jsonlSourceMatches(e,o))return{status:"unavailable"};let i=await Yg(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=$x(i.data,r);return a?e.provider==="claude"?Xx(a,e,n,r,Px(o)):Jx(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===Xn)return this.agyReader.read(e,n,r);if(e.provider===qn)return this.dshReader.read(e,n,r);if(e.provider===Ar)return this.opencodeReader.read(e,n,r);if(e.provider===Gn)return this.qwenReader.read(e,n,r);if(e.provider===Vn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===Jn?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 Qg(this.claudeProjectsDir,r,this.maxDiscoveryTraversalVisits,n,o);return{sources:i.map(l=>({provider:"claude",sessionid:La(l,".jsonl"),source_id:l})).sort(du),truncated:a}}if(e===1){let i=[],a=!1;for(let l of[...this.codexSessionDirs].sort(zn)){let c=await Qg(l,r,this.maxDiscoveryTraversalVisits,n,o);c.truncated&&(a=!0);for(let d of c.paths){let u=La(d,".jsonl"),f=u.match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/u);i.push({provider:"codex",sessionid:f?.[1]??u,source_id:d})}}return{sources:i.sort(du).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[gs[e]].discover(n,r,o)}jsonlSourceMatches(e,n){let r=La(n,".jsonl");return e.provider==="claude"?r===e.sessionid:(r.match(/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/u)?.[1]??r)===e.sessionid}openLmplayer(e){if(!this.lmplayerDbPaths.includes(gn(e)))return null;try{let n=new(Ax())(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=>gn(a)))].sort(zn);for(let a of o){e.signal.throwIfAborted();let l=await fu(a,[gn(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&&zn(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:Zx(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(du).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=zg(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=zg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=Qx(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Po(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 Nr(t){let e=Po(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?eC(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 eC(t,e){for(let[n,r]of Object.entries(e))if(r!==void 0){if(n==="tokens"&&sy(t.tokens)&&sy(r)){t.tokens={...t.tokens,...r};continue}t[n]=r}}function sy(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function oy(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
- `}var Ma=x(()=>{"use strict"});import{createHash as iy}from"node:crypto";import{opendir as tC,open as nC,realpath as ay}from"node:fs/promises";import{constants as Tu}from"node:fs";import{join as rC,relative as sC,isAbsolute as oC,basename as iC,dirname as aC}from"node:path";function cC(t,e,n){try{if(t==="pi"){let d=e.split(`
19
+ `}var Ma=L(()=>{"use strict"});import{createHash as iy}from"node:crypto";import{opendir as tC,open as nC,realpath as ay}from"node:fs/promises";import{constants as Tu}from"node:fs";import{join as rC,relative as sC,isAbsolute as oC,basename as iC,dirname as aC}from"node:path";function cC(t,e,n){try{if(t==="pi"){let d=e.split(`
20
20
  `).filter(f=>f.trim()).map(f=>JSON.parse(f));if(d[0]?.type!=="session"||d[0]?.id!==n||d.slice(1).some(f=>f?.type==="session"))return;let u=[];for(let f of d){let m=f.message;if(m?.usage!==void 0&&(f.type!=="message"||m.role!=="assistant"))return;if(f.type!=="message"||m?.role!=="assistant")continue;if(typeof f.id!="string"||!f.id)return;let p=m.usage,_=ly(f.id,f.timestamp,m.model);if(!p||typeof p!="object")return;_.tokens={input_uncached:yn(p.input),input_cached:yn(p.cacheRead),input_cache_write:yn(p.cacheWrite),output:yn(p.output)},_.pricing_facts={reasoning_output_tokens:yn(p.reasoning)},_.providerCostUsd=typeof p.cost?.total=="number"&&Number.isFinite(p.cost.total)&&p.cost.total>=0?p.cost.total:null,u.push(_)}return u}let r;try{r=JSON.parse(e)}catch{}let s=Array.isArray(r?.messages)?r.messages:e.split(`
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=Nr(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=yn(u.input),m=yn(u.cached),p=yn(u.output),_=yn(u.thoughts),h=ly(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 wu(t,e){let n=async(s,o)=>{o.signal.throwIfAborted();let i=await ay(s),a=await ay(e),l=sC(a,i);if(l===".."||l.startsWith("../")||l.startsWith("..\\")||oC(l))throw Error("outside native root");let c=await nC(i,Tu.O_RDONLY|Tu.O_NOFOLLOW|Tu.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:Nr(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 tC(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=rC(c,f.name);if(f.isDirectory())await l(m,d+1);else if(f.isFile()&&/\.jsonl?$/.test(f.name)&&(t!=="gemini"||iC(aC(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:iy("sha256").update(i).digest("hex")}},async read(s,o,i){let a=await n(s.source_id,i);if(iy("sha256").update(a).digest("hex")!==o)return{status:"partial"};if(a.split(`
24
- `).length>i.maxRows)return{status:"partial"};let l=cC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var yn,lC,ly,cy=x(()=>{"use strict";Ma();yn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,lC=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},ly=(t,e,n)=>({response_id:t,timestamp:lC(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 dC,realpath as uC}from"node:fs/promises";import{join as at,resolve as uy}from"node:path";import{homedir as fC}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&&vu(_)===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=Hn(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=>vu(f)===null))return n=!0,null;let u=d.reduce((f,m)=>f+m,0);return vu(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 dy(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=uy(i),l;try{if(!(await dC(a)).isFile())return{sources:s,complete:!1};let c=await uC(a);if(o.has(c))continue;o.add(c),l=Ir(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 pC(t,e,n){let r=e.HOME||e.USERPROFILE||fC(),s=e.XDG_DATA_HOME||at(r,".local","share"),o=e.XDG_CONFIG_HOME||at(r,".config");if(t==="pi")return wu("pi",e.PI_CODING_AGENT_DIR?at(e.PI_CODING_AGENT_DIR,"sessions"):at(r,".pi","agent","sessions"));if(t==="gemini")return wu("gemini",at(e.GEMINI_CLI_HOME||at(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new fs(ba(e.MINIPLAYER_HOME||at(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=[at(s,"opencode","opencode.db"),at(s,"opencode","opencode-local.db"),at(o,"opencode","opencode.db")].map(d=>uy(d)),c=new xo({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>dy(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 Oo({kimiHome:e.KIMI_CODE_HOME||at(r,".kimi-code")}):new Ao({agyConversationsDir:at(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]:[at(s,"lmplayer","opencode-local.db"),at(s,"lmplayer","opencode-dev.db")],a=ny({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>dy(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function fy(t,e,n,r){if(!$a.includes(t.provider)||!e||t.native_session_id&&t.native_session_id!==e)return;let s=new AbortController,o,i,a=async()=>{let l=r.db??(i=Ir(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??pC(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(v=>!v.timestamp||!Number.isFinite(Date.parse(v.timestamp))))return;let T=y.filter(v=>Date.parse(v.timestamp)>=g&&Date.parse(v.timestamp)<=E);if(!T.length)continue;if(m)return;let w=l.pragma("busy_timeout",{simple:!0});try{l.pragma("busy_timeout = 0");let v=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(v.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 $a,vu,my=x(()=>{"use strict";ga();ry();cu();ru();zd();Jd();Ia();ko();cy();$a=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],vu=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Gt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var Fo=x(()=>{"use strict"});var Pa,py,Su=x(()=>{"use strict";Pa={attempt_key:"TEXT",provider:"TEXT",native_session_id:"TEXT",cwd:"TEXT",ended_at:"TEXT",turn_outcome:"TEXT",model_requested:"TEXT",model_reported:"TEXT",tok_input_uncached:"INTEGER",tok_cache_read:"INTEGER",tok_cache_write:"INTEGER",tok_output:"INTEGER",tok_reasoning:"INTEGER",usage_source:"TEXT CHECK(usage_source IN ('wire','native','cumulative_delta'))",usage_reason:"TEXT",price_record_id:"TEXT",price_snapshot_sha256:"TEXT",rate_input_1m:"REAL",rate_output_1m:"REAL",rate_cache_read_1m:"REAL",rate_cache_write_1m:"REAL",cost_reason:"TEXT",provider_cost_usd:"REAL"},py=`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=cC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var yn,lC,ly,cy=L(()=>{"use strict";Ma();yn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,lC=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},ly=(t,e,n)=>({response_id:t,timestamp:lC(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 dC,realpath as uC}from"node:fs/promises";import{join as at,resolve as uy}from"node:path";import{homedir as fC}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&&vu(_)===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=Hn(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=>vu(f)===null))return n=!0,null;let u=d.reduce((f,m)=>f+m,0);return vu(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 dy(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=uy(i),l;try{if(!(await dC(a)).isFile())return{sources:s,complete:!1};let c=await uC(a);if(o.has(c))continue;o.add(c),l=Ir(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 pC(t,e,n){let r=e.HOME||e.USERPROFILE||fC(),s=e.XDG_DATA_HOME||at(r,".local","share"),o=e.XDG_CONFIG_HOME||at(r,".config");if(t==="pi")return wu("pi",e.PI_CODING_AGENT_DIR?at(e.PI_CODING_AGENT_DIR,"sessions"):at(r,".pi","agent","sessions"));if(t==="gemini")return wu("gemini",at(e.GEMINI_CLI_HOME||at(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new fs(ba(e.MINIPLAYER_HOME||at(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=[at(s,"opencode","opencode.db"),at(s,"opencode","opencode-local.db"),at(o,"opencode","opencode.db")].map(d=>uy(d)),c=new Lo({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>dy(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 Oo({kimiHome:e.KIMI_CODE_HOME||at(r,".kimi-code")}):new Ao({agyConversationsDir:at(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]:[at(s,"lmplayer","opencode-local.db"),at(s,"lmplayer","opencode-dev.db")],a=ny({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>dy(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function fy(t,e,n,r){if(!$a.includes(t.provider)||!e||t.native_session_id&&t.native_session_id!==e)return;let s=new AbortController,o,i,a=async()=>{let l=r.db??(i=Ir(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??pC(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(v=>!v.timestamp||!Number.isFinite(Date.parse(v.timestamp))))return;let T=y.filter(v=>Date.parse(v.timestamp)>=g&&Date.parse(v.timestamp)<=E);if(!T.length)continue;if(m)return;let w=l.pragma("busy_timeout",{simple:!0});try{l.pragma("busy_timeout = 0");let v=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(v.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 $a,vu,my=L(()=>{"use strict";ga();ry();cu();ru();zd();Jd();Ia();ko();cy();$a=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],vu=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Gt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var Fo=L(()=>{"use strict"});var Pa,py,Su=L(()=>{"use strict";Pa={attempt_key:"TEXT",provider:"TEXT",native_session_id:"TEXT",cwd:"TEXT",ended_at:"TEXT",turn_outcome:"TEXT",model_requested:"TEXT",model_reported:"TEXT",tok_input_uncached:"INTEGER",tok_cache_read:"INTEGER",tok_cache_write:"INTEGER",tok_output:"INTEGER",tok_reasoning:"INTEGER",usage_source:"TEXT CHECK(usage_source IN ('wire','native','cumulative_delta'))",usage_reason:"TEXT",price_record_id:"TEXT",price_snapshot_sha256:"TEXT",rate_input_1m:"REAL",rate_output_1m:"REAL",rate_cache_read_1m:"REAL",rate_cache_write_1m:"REAL",cost_reason:"TEXT",provider_cost_usd:"REAL"},py=`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 Sy}from"node:crypto";import{mkdirSync as by,readFileSync as hC,renameSync as _C,writeFileSync as gC,existsSync as Iy}from"node:fs";import{homedir as yC}from"node:os";import{dirname as ky,join as Wa,resolve as Ba}from"node:path";import{fileURLToPath as EC}from"node:url";function bC(){return Wa(yC(),".lmctl","cache","lmprice")}function vs(t,e){return Wa(t,e)}function Ha(t,e){if(!t||!e)return null;let n=Uo.get(t),r=Uo.get(e);return n===void 0||r===void 0?null:Sy("sha256").update(n).update(r).digest("hex")}function xr(t){try{let e=hC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&Uo.set(n,e),n}catch{return null}}function Ry(t,e){let n=`${t}.tmp-${process.pid}`;gC(n,e),_C(n,t)}function bu(t){return t===null||typeof t=="number"}function Lr(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;return bu(s.input_per_1m_tokens)&&bu(s.output_per_1m_tokens)&&bu(s.input_cache_read_per_1m_tokens)})}function Cr(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"&&kC.has(o.evidence)});return n&&r}function AC(t){let e=xr(vs(t,Ay)),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=xr(vs(t,IC));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 RC(t){let e=AC(t),n=xr(vs(t,Ua)),r=xr(vs(t,ja));return e.pair_sha256&&Ha(Lr(n)?n:null,Cr(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{..._y},aliases:{..._y}}}:{catalog:Lr(n)?n:null,aliases:Cr(r)?r:null,meta:e}}function gy(t,e){try{return by(t,{recursive:!0}),Ry(vs(t,Ay),JSON.stringify(e)),!0}catch{return!1}}function Iu(t){return(t&&typeof t=="object"?Uo.get(t):void 0)??JSON.stringify(t)}function Fa(t,e,n){try{by(t,{recursive:!0}),Ry(vs(t,e),Iu(n))}catch{}}function NC(t,e){let n=xC(t),r=n?[Ba(n,"data",e)]:[Ba(t,"..","..","data",e)];for(let s of r)if(Iy(s))return s;return null}function xC(t){let e=Ba(t);for(;;){if(Iy(Ba(e,"package.json")))return e;let n=ky(e);if(n===e)return null;e=n}}function yy(t,e,n){let r=n!==void 0?n:NC(t,e);return r===null?null:xr(r)}function Ss(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return hy;let n=Number(e);return!Number.isFinite(n)||n<0?hy:n*1e3}function LC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function Ey(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout(vC)});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(SC)});if(!i.ok)return{kind:"failed"};let a=await i.text(),l=JSON.parse(a);return l&&typeof l=="object"&&Uo.set(l,a),{kind:"payload",payload:l,etag:i.headers.get("etag")??o}}catch{return{kind:"failed"}}}function Ot(t={}){return Object.keys(t).length===0?(Ty??=wy(t),Ty):wy(t)}async function wy(t){let e=ky(EC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:LC();if(n!==null&&n!==""){let _=xr(Wa(n,Ua)),h=xr(Wa(n,ja));if(Lr(_)&&Cr(h)){let g={sha256:Ha(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return ku=g.generatedAt,g}return vy(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??bC(),o=t.now??Date.now(),i=t.ttlMs??Ss(),a=RC(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 Ey(r,TC,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"&&(Lr(_.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 Ey(r,wC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Cr(_.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 _=Sy("sha256").update(Iu(c)).update(Iu(d)).digest("hex");gy(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Fa(s,Ua,c),Fa(s,ja,d))}else c!==a.catalog&&c!==null&&Fa(s,Ua,c),d!==a.aliases&&d!==null&&Fa(s,ja,d),gy(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ha(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return ku=_.generatedAt,_}return{...vy(t,e),refreshFailed:f}}function vy(t,e){let n=yy(e,"price-data.json",t.bundledPath),r=yy(e,"price-aliases.json",t.bundledAliasesPath),s=Lr(n)?n:null,o=Cr(r)?r:null,i={catalog:s,aliases:o,sha256:Ha(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return ku=i.generatedAt,i}function Ny(t){if(t.cacheWrite!==void 0)return ws(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=ws(t.cacheWrite5m),n=ws(t.cacheWrite1h);return e===null||n===null?null:ws(e+n)}function Au(t,e){let n=ws(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=ws(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 jo(t,e){let n=Ts(e.input_per_1m_tokens),r=Ts(e.output_per_1m_tokens),s=Ts(e.input_cache_read_per_1m_tokens),o=Ts(e.source_cost_fields?.cache_creation_input_token_cost),i=Ts(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=Ts(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Ny(t),d=Au(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 Wo(t,e){if(e===null)return null;let n=jo(t,e),r=Ny(t);if(r===null||t.input>0&&n.inputPer1m===null||t.output>0&&n.outputPer1m===null||t.cachedInput>0&&n.cacheReadPer1m===null||r>0&&n.cacheWritePer1m===null)return null;let s=(t.input*(n.inputPer1m??0)+t.output*(n.outputPer1m??0)+t.cachedInput*(n.cacheReadPer1m??0)+r*(n.cacheWritePer1m??0))/1e6;return Number(s.toPrecision(10))}var TC,wC,vC,SC,hy,Ua,ja,Ay,IC,Uo,kC,_y,ku,Ty,Ts,ws,En=x(()=>{"use strict";TC="https://lmctl.com/dataset/model_list.json",wC="https://lmctl.com/dataset/aliases.json",vC=1e3,SC=1e4,hy=6*60*60*1e3;Ua="model_list.json",ja="aliases.json",Ay="meta.json",IC="model_list.meta.json";Uo=new WeakMap;kC=new Set(["established","asserted","unresolved"]);_y={etag:null,last_checked:null};ku=null,Ty=null;Ts=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,ws=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Dr(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function Or(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return Dr(n)}function Ly(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(Dr(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function CC(t,e){let n=new Set,r=l=>{n.add(Dr(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 Mr(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=>CC(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=Ly(r);return s.some(i=>o.has(i))}}}function DC(t){let e=t.trim(),n=OC.exec(e);return n?{model:e.slice(0,n.index).trim(),effort:n[1].trim()}:{model:e,effort:null}}function FC(t,e,n){let r=e.trim().toLowerCase(),s=Dr(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 UC(t,e,n){let r=[];for(let[s,o]of Object.entries(Vt))s!==n&&FC(o,t,e)&&r.push(s);return r}function Xa(t){return t==="moonshot"?0:t==="litellm"?1:t==="openrouter"?2:t==="manual"?3:4}function jC(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 WC(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}${Dr(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!jC(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 Uy(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(Uy).sort((n,r)=>{let s=Xa(n.source)-Xa(r.source);if(s!==0)return s;let o=n.provider!==null&&e.includes(n.provider)?0:1,i=r.provider!==null&&e.includes(r.provider)?0:1;return o!==i?o-i:n.sourceModelId.localeCompare(r.sourceModelId)})}function qa(t){return t.pricing.input_per_1m_tokens!==null&&t.pricing.output_per_1m_tokens!==null}function BC(t,e,n){let r=WC(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 Ru(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=BC(t,e,n);if(r!==void 0){let i=t.map(Uy),a=i.filter(d=>d.provider===r&&!d.sourceModelId.includes("/")&&d.source!=="openrouter"&&!d.estimated),l=a.length>0?a:i;if(l.length!==1||!qa(l[0]))return{kind:"known-unpriced",id:e};let c=l[0];s.offers=[c,...s.offers.filter(d=>d.route!==c.route)],s.id=c.sourceModelId}let o=s.offers.find(qa);return o===void 0?{kind:"known-unpriced",id:e}:o.estimated?{kind:"estimated",model:s}:{kind:"priced",model:s}}function HC(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function XC(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=Or(l),d=n.records.filter(u=>Or(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:Ru(d,c,Nu)}function Wy(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=HC(r,h.standard_slug);return{state:XC(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=Vt[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=Dr(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=Or(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&Or(g)===_);return a(Ru(h.length>0?h:c,_,xy[t]??Nu,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=UC(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=Or(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=xy[t]??Nu,m=null,p=null;for(let _ of u.values()){let h=jy(_,f);(p===null||qC(h[0],p[0],f)<0)&&(m=_,p=h)}return a(Ru(m,Or(m[0]),f,t==="codex"?"openai":void 0))}function Ga(t,e,n,r){return Wy(t,e,n,r).state}function Dt(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=Wy(t,e,n,r);if(s.kind!=="priced"&&s.kind!=="estimated")return{state:s,offer:null,provenance:null};let a=s.model.offers;if(o&&i!==null){let c=a.find(d=>d.route===i)??a.find(d=>d.route.toLowerCase()===i.toLowerCase());if(c!==void 0&&qa(c))return{state:s,offer:c,provenance:"alias-pin"}}let l=a.find(qa)??null;return{state:s,offer:l,provenance:o&&i!==null?"alias-pin":"route-preference"}}function By(t,e){let n=Vt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(Or(s));return r.size}function qC(t,e,n){let r=Xa(t.source)-Xa(e.source);if(r!==0)return r;let s=t.provider!==null&&n.includes(t.provider)?0:1,o=e.provider!==null&&n.includes(e.provider)?0:1;return s!==o?s-o:t.sourceModelId.localeCompare(e.sourceModelId)}var Cy,Oy,Dy,My,$y,Py,OC,MC,$C,PC,Fy,Vt,xy,Nu,$r=x(()=>{"use strict";Cy=Mr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),Oy=Mr({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)(-|$)/}),Dy=Mr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),My=Mr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),$y=Mr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),Py=Mr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),OC=/\s*\(([^()]+)\)\s*$/;MC={"gemini 3.8 flash":"gemini-3.8-flash","gemini 3.7 flash":"gemini-3.7-flash","gemini 3.6 flash":"gemini-3.6-flash","gemini 3.1 pro":"gemini/gemini-3.1-pro-preview","claude sonnet 4.6":"claude-sonnet-4-6"},$C=["gemini","google","vertex_ai-language-models","anthropic"],PC={normalize(t){let{model:e}=DC(t),n=MC[e.toLowerCase()];return n===void 0?[]:[Dr(n)]},isChatModel(t){return t.mode===void 0||t.mode===null||t.mode==="chat"},coversRecord(t){return this.isChatModel(t)&&/gemini|claude/.test(t.source_model_id.toLowerCase())},matchRow(t,e){if(!this.coversRecord(t))return!1;let n=Ly(t);return e.some(r=>n.has(r))}},Fy=Mr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),Vt={claude:Cy,codex:Oy,gemini:Dy,agy:PC,kimi:My,qwen:$y,hermes:Py,deepseek:Fy},xy={claude:Cy.firstPartyProviders,codex:Oy.firstPartyProviders,gemini:Dy.firstPartyProviders,agy:$C,kimi:My.firstPartyProviders,qwen:$y.firstPartyProviders,hermes:Py.firstPartyProviders,deepseek:Fy.firstPartyProviders};Nu=[]});import{randomUUID as GC}from"node:crypto";function Va(t){return{startedAt:new Date().toISOString(),attempt_key:GC(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function bs(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function Bo(t,e,n=async()=>({catalog:null,aliases:null,source:"unavailable",generatedAt:null}),r){let s={...t,ended_at:new Date().toISOString(),turn_outcome:e.status,native_session_id:e.sessionId||t.native_session_id||null};try{let o=["claude","codex","muse","dsh"].includes(t.provider)||$a.includes(t.provider)&&e.usage?.source==="wire"?e.usage:r&&$a.includes(t.provider)?await fy(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:Tn(o.inputUncached),tok_cache_read:Tn(o.cacheRead),tok_cache_write:Tn(o.cacheWrite),tok_output:Tn(o.output),tok_reasoning:Tn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:VC(o.providerCostUsd)}),o.invalidCounters||Gt([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=Dt(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:Tn(o.inputUncached)??0,output:Tn(o.output)??0,cachedInput:Tn(o.cacheRead)??0,cacheWrite:Tn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=jo(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=Wo(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Pr(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Pa,s));if(!r.length)return;t.prepare(`UPDATE team_chat_log SET ${r.map(([s])=>`${s}=?`).join(",")} WHERE id=? AND ended_at IS NULL`).run(...r.map(([,s])=>s??null),e)}catch(r){for(let o of["usage_source","model_reported","tok_input_uncached","tok_cache_read","tok_cache_write","tok_output","tok_reasoning","price_record_id","price_snapshot_sha256","rate_input_1m","rate_output_1m","rate_cache_read_1m","rate_cache_write_1m","provider_cost_usd"])n[o]=null;n.usage_reason="recorder_failed",n.cost_reason="usage_unavailable";let s=r?.code??"";if(/^SQLITE_(?:BUSY|LOCKED)(?:_|$)/.test(s))return;try{t.prepare("UPDATE team_chat_log SET attempt_key=COALESCE(attempt_key,?),provider=COALESCE(provider,?),native_session_id=COALESCE(native_session_id,?),cwd=COALESCE(cwd,?),model_requested=COALESCE(model_requested,?),ended_at=COALESCE(ended_at,?),turn_outcome=COALESCE(turn_outcome,?),usage_reason='recorder_failed',cost_reason='usage_unavailable' WHERE id=? AND ended_at IS NULL").run(n.attempt_key??null,n.provider??null,n.native_session_id??null,n.cwd??null,n.model_requested??null,n.ended_at??null,n.turn_outcome??null,e)}catch{}}}var Tn,VC,Ho=x(()=>{"use strict";my();Fo();Su();En();$r();Tn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,VC=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var Hy,Xy=x(()=>{"use strict";Hy=`
43
+ `});import{createHash as Sy}from"node:crypto";import{mkdirSync as by,readFileSync as hC,renameSync as _C,writeFileSync as gC,existsSync as Iy}from"node:fs";import{homedir as yC}from"node:os";import{dirname as ky,join as Wa,resolve as Ba}from"node:path";import{fileURLToPath as EC}from"node:url";function bC(){return Wa(yC(),".lmctl","cache","lmprice")}function vs(t,e){return Wa(t,e)}function Ha(t,e){if(!t||!e)return null;let n=Uo.get(t),r=Uo.get(e);return n===void 0||r===void 0?null:Sy("sha256").update(n).update(r).digest("hex")}function Lr(t){try{let e=hC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&Uo.set(n,e),n}catch{return null}}function Ry(t,e){let n=`${t}.tmp-${process.pid}`;gC(n,e),_C(n,t)}function bu(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;return bu(s.input_per_1m_tokens)&&bu(s.output_per_1m_tokens)&&bu(s.input_cache_read_per_1m_tokens)})}function Cr(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"&&kC.has(o.evidence)});return n&&r}function AC(t){let e=Lr(vs(t,Ay)),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=Lr(vs(t,IC));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 RC(t){let e=AC(t),n=Lr(vs(t,Ua)),r=Lr(vs(t,ja));return e.pair_sha256&&Ha(xr(n)?n:null,Cr(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{..._y},aliases:{..._y}}}:{catalog:xr(n)?n:null,aliases:Cr(r)?r:null,meta:e}}function gy(t,e){try{return by(t,{recursive:!0}),Ry(vs(t,Ay),JSON.stringify(e)),!0}catch{return!1}}function Iu(t){return(t&&typeof t=="object"?Uo.get(t):void 0)??JSON.stringify(t)}function Fa(t,e,n){try{by(t,{recursive:!0}),Ry(vs(t,e),Iu(n))}catch{}}function NC(t,e){let n=LC(t),r=n?[Ba(n,"data",e)]:[Ba(t,"..","..","data",e)];for(let s of r)if(Iy(s))return s;return null}function LC(t){let e=Ba(t);for(;;){if(Iy(Ba(e,"package.json")))return e;let n=ky(e);if(n===e)return null;e=n}}function yy(t,e,n){let r=n!==void 0?n:NC(t,e);return r===null?null:Lr(r)}function Ss(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return hy;let n=Number(e);return!Number.isFinite(n)||n<0?hy:n*1e3}function xC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function Ey(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout(vC)});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(SC)});if(!i.ok)return{kind:"failed"};let a=await i.text(),l=JSON.parse(a);return l&&typeof l=="object"&&Uo.set(l,a),{kind:"payload",payload:l,etag:i.headers.get("etag")??o}}catch{return{kind:"failed"}}}function Ot(t={}){return Object.keys(t).length===0?(Ty??=wy(t),Ty):wy(t)}async function wy(t){let e=ky(EC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:xC();if(n!==null&&n!==""){let _=Lr(Wa(n,Ua)),h=Lr(Wa(n,ja));if(xr(_)&&Cr(h)){let g={sha256:Ha(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return ku=g.generatedAt,g}return vy(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??bC(),o=t.now??Date.now(),i=t.ttlMs??Ss(),a=RC(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 Ey(r,TC,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 Ey(r,wC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Cr(_.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 _=Sy("sha256").update(Iu(c)).update(Iu(d)).digest("hex");gy(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Fa(s,Ua,c),Fa(s,ja,d))}else c!==a.catalog&&c!==null&&Fa(s,Ua,c),d!==a.aliases&&d!==null&&Fa(s,ja,d),gy(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ha(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return ku=_.generatedAt,_}return{...vy(t,e),refreshFailed:f}}function vy(t,e){let n=yy(e,"price-data.json",t.bundledPath),r=yy(e,"price-aliases.json",t.bundledAliasesPath),s=xr(n)?n:null,o=Cr(r)?r:null,i={catalog:s,aliases:o,sha256:Ha(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return ku=i.generatedAt,i}function Ny(t){if(t.cacheWrite!==void 0)return ws(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=ws(t.cacheWrite5m),n=ws(t.cacheWrite1h);return e===null||n===null?null:ws(e+n)}function Au(t,e){let n=ws(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=ws(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 jo(t,e){let n=Ts(e.input_per_1m_tokens),r=Ts(e.output_per_1m_tokens),s=Ts(e.input_cache_read_per_1m_tokens),o=Ts(e.source_cost_fields?.cache_creation_input_token_cost),i=Ts(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=Ts(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Ny(t),d=Au(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 Wo(t,e){if(e===null)return null;let n=jo(t,e),r=Ny(t);if(r===null||t.input>0&&n.inputPer1m===null||t.output>0&&n.outputPer1m===null||t.cachedInput>0&&n.cacheReadPer1m===null||r>0&&n.cacheWritePer1m===null)return null;let s=(t.input*(n.inputPer1m??0)+t.output*(n.outputPer1m??0)+t.cachedInput*(n.cacheReadPer1m??0)+r*(n.cacheWritePer1m??0))/1e6;return Number(s.toPrecision(10))}var TC,wC,vC,SC,hy,Ua,ja,Ay,IC,Uo,kC,_y,ku,Ty,Ts,ws,En=L(()=>{"use strict";TC="https://lmctl.com/dataset/model_list.json",wC="https://lmctl.com/dataset/aliases.json",vC=1e3,SC=1e4,hy=6*60*60*1e3;Ua="model_list.json",ja="aliases.json",Ay="meta.json",IC="model_list.meta.json";Uo=new WeakMap;kC=new Set(["established","asserted","unresolved"]);_y={etag:null,last_checked:null};ku=null,Ty=null;Ts=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,ws=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Dr(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function Or(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return Dr(n)}function xy(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(Dr(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function CC(t,e){let n=new Set,r=l=>{n.add(Dr(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 Mr(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=>CC(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=xy(r);return s.some(i=>o.has(i))}}}function DC(t){let e=t.trim(),n=OC.exec(e);return n?{model:e.slice(0,n.index).trim(),effort:n[1].trim()}:{model:e,effort:null}}function FC(t,e,n){let r=e.trim().toLowerCase(),s=Dr(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 UC(t,e,n){let r=[];for(let[s,o]of Object.entries(Vt))s!==n&&FC(o,t,e)&&r.push(s);return r}function Xa(t){return t==="moonshot"?0:t==="litellm"?1:t==="openrouter"?2:t==="manual"?3:4}function jC(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 WC(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}${Dr(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!jC(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 Uy(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(Uy).sort((n,r)=>{let s=Xa(n.source)-Xa(r.source);if(s!==0)return s;let o=n.provider!==null&&e.includes(n.provider)?0:1,i=r.provider!==null&&e.includes(r.provider)?0:1;return o!==i?o-i:n.sourceModelId.localeCompare(r.sourceModelId)})}function qa(t){return t.pricing.input_per_1m_tokens!==null&&t.pricing.output_per_1m_tokens!==null}function BC(t,e,n){let r=WC(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 Ru(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=BC(t,e,n);if(r!==void 0){let i=t.map(Uy),a=i.filter(d=>d.provider===r&&!d.sourceModelId.includes("/")&&d.source!=="openrouter"&&!d.estimated),l=a.length>0?a:i;if(l.length!==1||!qa(l[0]))return{kind:"known-unpriced",id:e};let c=l[0];s.offers=[c,...s.offers.filter(d=>d.route!==c.route)],s.id=c.sourceModelId}let o=s.offers.find(qa);return o===void 0?{kind:"known-unpriced",id:e}:o.estimated?{kind:"estimated",model:s}:{kind:"priced",model:s}}function HC(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function XC(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=Or(l),d=n.records.filter(u=>Or(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:Ru(d,c,Nu)}function Wy(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=HC(r,h.standard_slug);return{state:XC(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=Vt[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=Dr(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=Or(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&Or(g)===_);return a(Ru(h.length>0?h:c,_,Ly[t]??Nu,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=UC(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=Or(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=Ly[t]??Nu,m=null,p=null;for(let _ of u.values()){let h=jy(_,f);(p===null||qC(h[0],p[0],f)<0)&&(m=_,p=h)}return a(Ru(m,Or(m[0]),f,t==="codex"?"openai":void 0))}function Ga(t,e,n,r){return Wy(t,e,n,r).state}function Dt(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=Wy(t,e,n,r);if(s.kind!=="priced"&&s.kind!=="estimated")return{state:s,offer:null,provenance:null};let a=s.model.offers;if(o&&i!==null){let c=a.find(d=>d.route===i)??a.find(d=>d.route.toLowerCase()===i.toLowerCase());if(c!==void 0&&qa(c))return{state:s,offer:c,provenance:"alias-pin"}}let l=a.find(qa)??null;return{state:s,offer:l,provenance:o&&i!==null?"alias-pin":"route-preference"}}function By(t,e){let n=Vt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(Or(s));return r.size}function qC(t,e,n){let r=Xa(t.source)-Xa(e.source);if(r!==0)return r;let s=t.provider!==null&&n.includes(t.provider)?0:1,o=e.provider!==null&&n.includes(e.provider)?0:1;return s!==o?s-o:t.sourceModelId.localeCompare(e.sourceModelId)}var Cy,Oy,Dy,My,$y,Py,OC,MC,$C,PC,Fy,Vt,Ly,Nu,$r=L(()=>{"use strict";Cy=Mr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),Oy=Mr({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)(-|$)/}),Dy=Mr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),My=Mr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),$y=Mr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),Py=Mr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),OC=/\s*\(([^()]+)\)\s*$/;MC={"gemini 3.8 flash":"gemini-3.8-flash","gemini 3.7 flash":"gemini-3.7-flash","gemini 3.6 flash":"gemini-3.6-flash","gemini 3.1 pro":"gemini/gemini-3.1-pro-preview","claude sonnet 4.6":"claude-sonnet-4-6"},$C=["gemini","google","vertex_ai-language-models","anthropic"],PC={normalize(t){let{model:e}=DC(t),n=MC[e.toLowerCase()];return n===void 0?[]:[Dr(n)]},isChatModel(t){return t.mode===void 0||t.mode===null||t.mode==="chat"},coversRecord(t){return this.isChatModel(t)&&/gemini|claude/.test(t.source_model_id.toLowerCase())},matchRow(t,e){if(!this.coversRecord(t))return!1;let n=xy(t);return e.some(r=>n.has(r))}},Fy=Mr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),Vt={claude:Cy,codex:Oy,gemini:Dy,agy:PC,kimi:My,qwen:$y,hermes:Py,deepseek:Fy},Ly={claude:Cy.firstPartyProviders,codex:Oy.firstPartyProviders,gemini:Dy.firstPartyProviders,agy:$C,kimi:My.firstPartyProviders,qwen:$y.firstPartyProviders,hermes:Py.firstPartyProviders,deepseek:Fy.firstPartyProviders};Nu=[]});import{randomUUID as GC}from"node:crypto";function Va(t){return{startedAt:new Date().toISOString(),attempt_key:GC(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function bs(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function Bo(t,e,n=async()=>({catalog:null,aliases:null,source:"unavailable",generatedAt:null}),r){let s={...t,ended_at:new Date().toISOString(),turn_outcome:e.status,native_session_id:e.sessionId||t.native_session_id||null};try{let o=["claude","codex","muse","dsh"].includes(t.provider)||$a.includes(t.provider)&&e.usage?.source==="wire"?e.usage:r&&$a.includes(t.provider)?await fy(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:Tn(o.inputUncached),tok_cache_read:Tn(o.cacheRead),tok_cache_write:Tn(o.cacheWrite),tok_output:Tn(o.output),tok_reasoning:Tn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:VC(o.providerCostUsd)}),o.invalidCounters||Gt([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=Dt(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:Tn(o.inputUncached)??0,output:Tn(o.output)??0,cachedInput:Tn(o.cacheRead)??0,cacheWrite:Tn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=jo(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=Wo(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Pr(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Pa,s));if(!r.length)return;t.prepare(`UPDATE team_chat_log SET ${r.map(([s])=>`${s}=?`).join(",")} WHERE id=? AND ended_at IS NULL`).run(...r.map(([,s])=>s??null),e)}catch(r){for(let o of["usage_source","model_reported","tok_input_uncached","tok_cache_read","tok_cache_write","tok_output","tok_reasoning","price_record_id","price_snapshot_sha256","rate_input_1m","rate_output_1m","rate_cache_read_1m","rate_cache_write_1m","provider_cost_usd"])n[o]=null;n.usage_reason="recorder_failed",n.cost_reason="usage_unavailable";let s=r?.code??"";if(/^SQLITE_(?:BUSY|LOCKED)(?:_|$)/.test(s))return;try{t.prepare("UPDATE team_chat_log SET attempt_key=COALESCE(attempt_key,?),provider=COALESCE(provider,?),native_session_id=COALESCE(native_session_id,?),cwd=COALESCE(cwd,?),model_requested=COALESCE(model_requested,?),ended_at=COALESCE(ended_at,?),turn_outcome=COALESCE(turn_outcome,?),usage_reason='recorder_failed',cost_reason='usage_unavailable' WHERE id=? AND ended_at IS NULL").run(n.attempt_key??null,n.provider??null,n.native_session_id??null,n.cwd??null,n.model_requested??null,n.ended_at??null,n.turn_outcome??null,e)}catch{}}}var Tn,VC,Ho=L(()=>{"use strict";my();Fo();Su();En();$r();Tn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,VC=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var Hy,Xy=L(()=>{"use strict";Hy=`
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 JC}from"node:crypto";function KC(t,e,n){return JC("sha256").update(`${t}\0${e}\0${n}`).digest("hex")}function lt(t,e,n){let r=KC(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 Ja=x(()=>{"use strict"});var Gy={};me(Gy,{backfillEventLog:()=>xu,rebuildProjections:()=>qy});import{createHash as YC}from"node:crypto";function Fr(t,e){return t==null?null:{teamfile:t,alias:e??""}}function zC(t,e,n){return`lease_${YC("sha256").update(`${t}\0${e}\0${n}`).digest("hex").slice(0,16)}`}function Ka(t,e,n,r){n.forEach((s,o)=>{lt(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 QC(t){let e=`msg_tcl_${t.id}`,n=Fr(t.sender_teamfile,t.sender_alias),r=Fr(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:ae.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:ae.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 ZC(t){let e=`msg_mbx_${t.id}`,n=Fr(t.sender_teamfile,t.sender_alias),r=Fr(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:ae.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:ae.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:ae.RESPONSE_DELIVERED,ts:t.delivered_at,payload:{...o,message_type:"response",receipt:t.receipt}}),{streamId:e,events:i}}return i.push({event_type:ae.CREATE,ts:t.created_at,payload:{...o,message_type:"request",content:t.payload,correlation_status:"legacy-unavailable"}}),i.push({event_type:ae.ENQUEUE,ts:t.created_at,payload:{...o,message_type:"request"}}),t.waited_at!==null&&i.push({event_type:ae.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:ae.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:ae.DELIVERED,ts:t.delivered_at,payload:{...o,receipt:t.receipt}}),{streamId:e,events:i}}function eO(t){let e=`inv_${t.id}`,n=Fr(t.target_teamfile,t.target_alias),r={table:"tracked_invocation",id:t.id},s=[{event_type:ae.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:ae.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:ae.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=zC(t.receiver_teamfile,t.receiver_alias,t.started_at),n=Fr(t.receiver_teamfile,t.receiver_alias),r=Fr(t.sender_teamfile,t.sender_alias);return{streamId:e,events:[{event_type:ae.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 Ya(t,e){return t.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function xu(t){let e={appended:0,skipped:0},n={team_chat_log:0,agent_mailbox:0,tracked_invocation:0,agent_inflight:0};t.transaction(()=>{if(Ya(t,"team_chat_log"))for(let o of t.prepare("SELECT * FROM team_chat_log WHERE "+H_(t)+" ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=QC(o);Ka(t,a,l,e),n.team_chat_log+=e.appended+e.skipped-i}if(Ya(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}=ZC(o);Ka(t,a,l,e),n.agent_mailbox+=e.appended+e.skipped-i}if(Ya(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}=eO(o);Ka(t,a,l,e),n.tracked_invocation+=e.appended+e.skipped-i}if(Ya(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);Ka(t,a,l,e),n.agent_inflight+=e.appended+e.skipped-i}qy(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 qy(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);nO(t,n.seq,n.stream_id,n.event_type,r)}}function Re(t,e,n){let r=t[e];return r!=null?r[n]??null:null}function nO(t,e,n,r,s){switch(r){case ae.ENQUEUE:case ae.RESPONSE_ENQUEUE:{let o=r===ae.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 Ja=L(()=>{"use strict"});var Gy={};me(Gy,{backfillEventLog:()=>Lu,rebuildProjections:()=>qy});import{createHash as YC}from"node:crypto";function Fr(t,e){return t==null?null:{teamfile:t,alias:e??""}}function zC(t,e,n){return`lease_${YC("sha256").update(`${t}\0${e}\0${n}`).digest("hex").slice(0,16)}`}function Ka(t,e,n,r){n.forEach((s,o)=>{lt(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 QC(t){let e=`msg_tcl_${t.id}`,n=Fr(t.sender_teamfile,t.sender_alias),r=Fr(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:ae.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:ae.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 ZC(t){let e=`msg_mbx_${t.id}`,n=Fr(t.sender_teamfile,t.sender_alias),r=Fr(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:ae.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:ae.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:ae.RESPONSE_DELIVERED,ts:t.delivered_at,payload:{...o,message_type:"response",receipt:t.receipt}}),{streamId:e,events:i}}return i.push({event_type:ae.CREATE,ts:t.created_at,payload:{...o,message_type:"request",content:t.payload,correlation_status:"legacy-unavailable"}}),i.push({event_type:ae.ENQUEUE,ts:t.created_at,payload:{...o,message_type:"request"}}),t.waited_at!==null&&i.push({event_type:ae.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:ae.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:ae.DELIVERED,ts:t.delivered_at,payload:{...o,receipt:t.receipt}}),{streamId:e,events:i}}function eO(t){let e=`inv_${t.id}`,n=Fr(t.target_teamfile,t.target_alias),r={table:"tracked_invocation",id:t.id},s=[{event_type:ae.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:ae.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:ae.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=zC(t.receiver_teamfile,t.receiver_alias,t.started_at),n=Fr(t.receiver_teamfile,t.receiver_alias),r=Fr(t.sender_teamfile,t.sender_alias);return{streamId:e,events:[{event_type:ae.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 Ya(t,e){return t.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function Lu(t){let e={appended:0,skipped:0},n={team_chat_log:0,agent_mailbox:0,tracked_invocation:0,agent_inflight:0};t.transaction(()=>{if(Ya(t,"team_chat_log"))for(let o of t.prepare("SELECT * FROM team_chat_log WHERE "+H_(t)+" ORDER BY id").all()){let i=e.appended+e.skipped,{streamId:a,events:l}=QC(o);Ka(t,a,l,e),n.team_chat_log+=e.appended+e.skipped-i}if(Ya(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}=ZC(o);Ka(t,a,l,e),n.agent_mailbox+=e.appended+e.skipped-i}if(Ya(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}=eO(o);Ka(t,a,l,e),n.tracked_invocation+=e.appended+e.skipped-i}if(Ya(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);Ka(t,a,l,e),n.agent_inflight+=e.appended+e.skipped-i}qy(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 qy(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);nO(t,n.seq,n.stream_id,n.event_type,r)}}function Re(t,e,n){let r=t[e];return r!=null?r[n]??null:null}function nO(t,e,n,r,s){switch(r){case ae.ENQUEUE:case ae.RESPONSE_ENQUEUE:{let o=r===ae.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', ?, ?)
@@ -102,7 +102,7 @@ CREATE TABLE IF NOT EXISTS price_alias (
102
102
  cwd, command, request_message_id, request_payload, holder_pid, holder_host, status, started_at, last_seq)
103
103
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', ?, ?)
104
104
  ON CONFLICT(invocation_id) DO NOTHING`).run(n,s.kind??"chat",s.origin??"unknown",s.launch_source??"",s.from_identity??"",Re(s,"target","teamfile"),Re(s,"target","alias"),s.root_teamfile??null,s.cwd??null,s.command??null,s.request_message_id??null,s.request_payload??null,s.holder_pid??null,s.holder_host??null,s.started_at??"",e);break;case ae.INVOCATION_FINISH:t.prepare(`UPDATE invocation_state SET status=?, ended_at=?, result_summary=?, error=?, last_seq=?
105
- WHERE invocation_id=?`).run(s.status??"done",s.ended_at??null,s.result_summary??null,s.error??null,e,n);break;case ae.INVOCATION_NOTIFY_CLAIM:t.prepare("UPDATE invocation_state SET notified_by=?, notified_at=?, last_seq=? WHERE invocation_id=?").run(s.notified_by??null,s.notified_at??null,e,n);break;default:break}}var ae,Lu=x(()=>{"use strict";Bd();Ja();ae={CREATE:"CREATE",ENQUEUE:"ENQUEUE",DELIVER_CLAIM:"DELIVER_CLAIM",DELIVER_CLAIM_RELEASE:"DELIVER_CLAIM_RELEASE",DELIVERED:"DELIVERED",HANDLED:"HANDLED",WAIT_REGISTER:"WAIT_REGISTER",RESPONSE_CREATE:"RESPONSE_CREATE",RESPONSE_ENQUEUE:"RESPONSE_ENQUEUE",RESPONSE_DELIVERED:"RESPONSE_DELIVERED",INFLIGHT_TAKE:"INFLIGHT_TAKE",INFLIGHT_RELEASE:"INFLIGHT_RELEASE",INFLIGHT_RECLAIM:"INFLIGHT_RECLAIM",TERMINAL_LOCK_TAKE:"TERMINAL_LOCK_TAKE",TERMINAL_LOCK_RELEASE:"TERMINAL_LOCK_RELEASE",TERMINAL_LOCK_EXPIRE:"TERMINAL_LOCK_EXPIRE",INVOCATION_START:"INVOCATION_START",INVOCATION_FINISH:"INVOCATION_FINISH",INVOCATION_NOTIFY_CLAIM:"INVOCATION_NOTIFY_CLAIM"}});var tE={};me(tE,{CURRENT_USER_VERSION:()=>wn,SchemaSkewError:()=>$t,_resetNewerSchemaWarningForTests:()=>pO,currentSchemaSkew:()=>hO,migrate:()=>qo});import{existsSync as rO,mkdirSync as sO,readFileSync as Yy}from"node:fs";import{randomUUID as oO}from"node:crypto";import{homedir as iO}from"node:os";import{dirname as zy,join as aO,resolve as Qy}from"node:path";import{fileURLToPath as lO,pathToFileURL as cO}from"node:url";function qo(t){t.dbPath!==":memory:"&&sO(zy(t.dbPath),{recursive:!0});let e=new ds(t.dbPath);try{e.pragma("journal_mode = WAL"),e.pragma("synchronous = NORMAL"),e.pragma("foreign_keys = ON");let n=Xo(e),r=t.buildVersionForTests??wn,s=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(n>r)return Vy(e,t.dbPath,r,s),e;if(n===wn)return Jy(e),e;let o=n>0&&n<47;o&&e.pragma("foreign_keys = OFF");try{e.transaction(()=>{let i=Xo(e);i>r&&Vy(e,t.dbPath,r,s)||(i===0&&(e.exec(Yy(eE,"utf8")),e.pragma("user_version = "+wn)),i>0&&i<63&&e.exec("DROP VIEW IF EXISTS turn_usage"),uO(e,i),Jy(e))}).immediate()}finally{o&&e.pragma("foreign_keys = ON")}return e}catch(n){try{e.close()}catch{}throw n}}function Vy(t,e,n,r){return t.transaction(()=>{let s=Xo(t);if(s<=n)return!1;let o=fO(t,s);if(Ou={dbVersion:s,buildVersion:n},o>n&&!r)throw new $t(e,s,n);return o>n&&mO(e,s,n),!0})()}function uO(t,e){let n=e;if(n<2&&n!==0&&(t.exec(`
105
+ WHERE invocation_id=?`).run(s.status??"done",s.ended_at??null,s.result_summary??null,s.error??null,e,n);break;case ae.INVOCATION_NOTIFY_CLAIM:t.prepare("UPDATE invocation_state SET notified_by=?, notified_at=?, last_seq=? WHERE invocation_id=?").run(s.notified_by??null,s.notified_at??null,e,n);break;default:break}}var ae,xu=L(()=>{"use strict";Bd();Ja();ae={CREATE:"CREATE",ENQUEUE:"ENQUEUE",DELIVER_CLAIM:"DELIVER_CLAIM",DELIVER_CLAIM_RELEASE:"DELIVER_CLAIM_RELEASE",DELIVERED:"DELIVERED",HANDLED:"HANDLED",WAIT_REGISTER:"WAIT_REGISTER",RESPONSE_CREATE:"RESPONSE_CREATE",RESPONSE_ENQUEUE:"RESPONSE_ENQUEUE",RESPONSE_DELIVERED:"RESPONSE_DELIVERED",INFLIGHT_TAKE:"INFLIGHT_TAKE",INFLIGHT_RELEASE:"INFLIGHT_RELEASE",INFLIGHT_RECLAIM:"INFLIGHT_RECLAIM",TERMINAL_LOCK_TAKE:"TERMINAL_LOCK_TAKE",TERMINAL_LOCK_RELEASE:"TERMINAL_LOCK_RELEASE",TERMINAL_LOCK_EXPIRE:"TERMINAL_LOCK_EXPIRE",INVOCATION_START:"INVOCATION_START",INVOCATION_FINISH:"INVOCATION_FINISH",INVOCATION_NOTIFY_CLAIM:"INVOCATION_NOTIFY_CLAIM"}});var tE={};me(tE,{CURRENT_USER_VERSION:()=>wn,SchemaSkewError:()=>$t,_resetNewerSchemaWarningForTests:()=>pO,currentSchemaSkew:()=>hO,migrate:()=>qo});import{existsSync as rO,mkdirSync as sO,readFileSync as Yy}from"node:fs";import{randomUUID as oO}from"node:crypto";import{homedir as iO}from"node:os";import{dirname as zy,join as aO,resolve as Qy}from"node:path";import{fileURLToPath as lO,pathToFileURL as cO}from"node:url";function qo(t){t.dbPath!==":memory:"&&sO(zy(t.dbPath),{recursive:!0});let e=new ds(t.dbPath);try{e.pragma("journal_mode = WAL"),e.pragma("synchronous = NORMAL"),e.pragma("foreign_keys = ON");let n=Xo(e),r=t.buildVersionForTests??wn,s=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(n>r)return Vy(e,t.dbPath,r,s),e;if(n===wn)return Jy(e),e;let o=n>0&&n<47;o&&e.pragma("foreign_keys = OFF");try{e.transaction(()=>{let i=Xo(e);i>r&&Vy(e,t.dbPath,r,s)||(i===0&&(e.exec(Yy(eE,"utf8")),e.pragma("user_version = "+wn)),i>0&&i<63&&e.exec("DROP VIEW IF EXISTS turn_usage"),uO(e,i),Jy(e))}).immediate()}finally{o&&e.pragma("foreign_keys = ON")}return e}catch(n){try{e.close()}catch{}throw n}}function Vy(t,e,n,r){return t.transaction(()=>{let s=Xo(t);if(s<=n)return!1;let o=fO(t,s);if(Ou={dbVersion:s,buildVersion:n},o>n&&!r)throw new $t(e,s,n);return o>n&&mO(e,s,n),!0})()}function uO(t,e){let n=e;if(n<2&&n!==0&&(t.exec(`
106
106
  CREATE TABLE IF NOT EXISTS session_size (
107
107
  id INTEGER PRIMARY KEY AUTOINCREMENT,
108
108
  team_name TEXT NOT NULL,
@@ -823,7 +823,7 @@ CREATE TABLE IF NOT EXISTS price_alias (
823
823
  ON tracked_invocation(scope_teamfile, status, started_at);
824
824
  CREATE INDEX IF NOT EXISTS idx_tracked_invocation_status_ended
825
825
  ON tracked_invocation(status, ended_at);
826
- `),t.pragma("user_version = 56"),n=56),n<57&&n!==0&&(Mt(t,"agent_mailbox")&&xu(t),t.exec("DROP TABLE IF EXISTS agent_mailbox;"),t.pragma("user_version = 57"),n=57),n<58&&n!==0&&(Qn(t,"tracked_invocation"),ne(t,"tracked_invocation").has("parent_invocation_id")||t.exec("ALTER TABLE tracked_invocation ADD COLUMN parent_invocation_id INTEGER;"),t.pragma("user_version = 58"),n=58),n<59&&n!==0&&(t.exec(`
826
+ `),t.pragma("user_version = 56"),n=56),n<57&&n!==0&&(Mt(t,"agent_mailbox")&&Lu(t),t.exec("DROP TABLE IF EXISTS agent_mailbox;"),t.pragma("user_version = 57"),n=57),n<58&&n!==0&&(Qn(t,"tracked_invocation"),ne(t,"tracked_invocation").has("parent_invocation_id")||t.exec("ALTER TABLE tracked_invocation ADD COLUMN parent_invocation_id INTEGER;"),t.pragma("user_version = 58"),n=58),n<59&&n!==0&&(t.exec(`
827
827
  CREATE TABLE IF NOT EXISTS state_ledger_identity (
828
828
  singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
829
829
  instance_id TEXT NOT NULL,
@@ -943,7 +943,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
943
943
  ALTER TABLE team_chat_log_v46 RENAME TO team_chat_log;
944
944
  `)}finally{t.pragma("foreign_keys = ON")}}function Xo(t){let e=t.pragma("user_version",{simple:!0});return typeof e=="number"?e:0}function fO(t,e){try{if(!Mt(t,"schema_meta"))return e;let n=t.prepare("SELECT value FROM schema_meta WHERE key = 'min_reader_version'").get();if(n===void 0||typeof n.value!="string"||!/^\d+$/.test(n.value))return e;let r=Number(n.value);return Number.isSafeInteger(r)&&r>0?r:e}catch{return e}}function mO(t,e,n){Cu||(Cu=!0,process.stderr.write("warning: "+t+": this lmctl is too old for this database (database v"+e+"; build v"+n+`). --allow-schema-skew may hide newer data. Run: npm install -g @lmctl-ai/lmctl@latest. No manual database changes are needed.
945
945
  `),process.argv.includes("--json")&&process.stderr.write(`${JSON.stringify({schema_skew:{db_version:e,build_version:n,mode:"best_effort"}})}
946
- `))}function pO(){Cu=!1,Ou=null}function hO(){return Ou}function _O(){return process.env.LMCTL_DB??aO(iO(),".lmctl","state.db")}var Zy,eE,dO,wn,$t,Cu,Ou,za=x(()=>{"use strict";Su();Xy();_a();Lu();Zy=zy(lO(import.meta.url)),eE=Qy(Zy,"schema.sql"),dO=Qy(Zy,"migrations"),wn=65,$t=class extends Error{dbPath;dbVersion;buildVersion;constructor(e,n,r=wn,s){super(e+": refusing to proceed: this lmctl is older than this database (database v"+n+"; build v"+r+"). "+(s?"Required database structure is unavailable: "+s.replace(/\s+/g," ")+". ":"")+"Run: npm install -g @lmctl-ai/lmctl@latest. No manual database changes are needed. --allow-schema-skew is a last resort and may hide newer data."),this.name="SchemaSkewError",this.dbPath=e,this.dbVersion=n,this.buildVersion=r}};Cu=!1;Ou=null;if(process.argv[1]&&(process.argv[1].endsWith("migrate.ts")||process.argv[1].endsWith("migrate.js"))&&import.meta.url===cO(process.argv[1]).href)try{let t=qo({dbPath:process.argv[2]??_O()});try{process.stdout.write("migrated user_version="+Xo(t)+`
946
+ `))}function pO(){Cu=!1,Ou=null}function hO(){return Ou}function _O(){return process.env.LMCTL_DB??aO(iO(),".lmctl","state.db")}var Zy,eE,dO,wn,$t,Cu,Ou,za=L(()=>{"use strict";Su();Xy();_a();xu();Zy=zy(lO(import.meta.url)),eE=Qy(Zy,"schema.sql"),dO=Qy(Zy,"migrations"),wn=65,$t=class extends Error{dbPath;dbVersion;buildVersion;constructor(e,n,r=wn,s){super(e+": refusing to proceed: this lmctl is older than this database (database v"+n+"; build v"+r+"). "+(s?"Required database structure is unavailable: "+s.replace(/\s+/g," ")+". ":"")+"Run: npm install -g @lmctl-ai/lmctl@latest. No manual database changes are needed. --allow-schema-skew is a last resort and may hide newer data."),this.name="SchemaSkewError",this.dbPath=e,this.dbVersion=n,this.buildVersion=r}};Cu=!1;Ou=null;if(process.argv[1]&&(process.argv[1].endsWith("migrate.ts")||process.argv[1].endsWith("migrate.js"))&&import.meta.url===cO(process.argv[1]).href)try{let t=qo({dbPath:process.argv[2]??_O()});try{process.stdout.write("migrated user_version="+Xo(t)+`
947
947
  `)}finally{t.close()}}catch(t){if(!(t instanceof $t))throw t;process.stderr.write("error: "+t.message+`
948
948
  `),process.exitCode=1}});function nE(t){return{getAgentInflight:t.prepare("SELECT * FROM agent_inflight WHERE receiver_teamfile = ? AND receiver_alias = ?"),listAgentInflight:t.prepare("SELECT * FROM agent_inflight ORDER BY started_at ASC, receiver_teamfile ASC, receiver_alias ASC"),acquireAgentInflight:t.prepare(`
949
949
  INSERT INTO agent_inflight (receiver_teamfile, receiver_alias, sender_teamfile, sender_alias, started_at, active_count, holder_pid)
@@ -1081,7 +1081,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1081
1081
  AND sender_teamfile = ?
1082
1082
  AND sender_alias = ?
1083
1083
  AND active_count > 1
1084
- `),clearAgentInflightOlderThan:t.prepare("DELETE FROM agent_inflight WHERE started_at < ?")}}var rE=x(()=>{"use strict"});function oE(t){return{insertTrackedInvocation:t.prepare(`
1084
+ `),clearAgentInflightOlderThan:t.prepare("DELETE FROM agent_inflight WHERE started_at < ?")}}var rE=L(()=>{"use strict"});function oE(t){return{insertTrackedInvocation:t.prepare(`
1085
1085
  INSERT INTO tracked_invocation (
1086
1086
  kind, origin, scope_teamfile, from_identity, target_teamfile, target_alias,
1087
1087
  root_teamfile, cwd, command, status, started_at, holder_pid, holder_host,
@@ -1161,15 +1161,15 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1161
1161
  AND holder_host IS ?
1162
1162
  AND started_at = ?
1163
1163
  AND last_heartbeat_at IS ?
1164
- `)}}function It(t){if(t==null)return null;if(Buffer.byteLength(t,"utf8")<=65536)return t;let n=Buffer.byteLength(sE,"utf8"),r=Math.max(0,65536-n),s=Buffer.from(t,"utf8"),o=r;for(;o>0&&(s[o]&192)===128;)o-=1;return`${s.subarray(0,o).toString("utf8")}${sE}`}var sE,iE=x(()=>{"use strict";sE=`
1165
- ...[truncated]`});function Jo(t,e){return JSON.stringify([t,e])}function aE(t){try{let e=JSON.parse(t);return typeof e.lock_id!="string"||typeof e.teamfile!="string"||typeof e.alias!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||!Array.isArray(e.holder_ips)||!e.holder_ips.every(n=>typeof n=="string")||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,teamfile:e.teamfile,alias:e.alias,holder_pid:e.holder_pid,holder_host:e.holder_host,holder_ips:e.holder_ips,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}var Go,Vo,lE=x(()=>{"use strict";Go="terminal_lock",Vo="member"});function Ye(t){if(!Number.isInteger(t)||(t??0)<=0)return!1;try{return process.kill(t,0),!0}catch(e){return(e!==null&&typeof e=="object"&&"code"in e?e.code:void 0)!=="ESRCH"}}var Ur=x(()=>{"use strict"});import{hostname as Is}from"node:os";function Qa(t,e={}){let n=setInterval(()=>{Promise.resolve().then(()=>t(new Date().toISOString())).then(r=>{r||clearInterval(n)}).catch(r=>e.onError?.(r))},e.intervalMs??gO);return n.unref?.(),n}function Zn(t,e){let n=new Date().toISOString(),r=new Date(Date.now()-e.ttlMs).toISOString(),s={receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,started_at:n},o=t.getAgentInflight(e.receiver_teamfile,e.receiver_alias),i=o===null||o.holder_pid===null,a=t.tryAcquireAgentInflight(s,{...i?{stale_before:r}:{},force:e.force,reclaim_reason:e.reclaimReason});if(a.acquired){let c=o===null?null:e.force===!0?e.reclaimReason??"force":o.holder_pid===null&&o.started_at<r?"stale":null;return{acquired:!0,lease:a.current??s,leaseId:a.lease_id,previous:o,reclaimReason:c}}if(!Za(a.current,r))return{acquired:!1,current:a.current};let l=t.tryAcquireAgentInflight(s,a.current.holder_pid===null?{stale_before:r}:{reclaim_observed:{sender_teamfile:a.current.sender_teamfile,sender_alias:a.current.sender_alias,started_at:a.current.started_at,holder_pid:a.current.holder_pid},reclaim_reason:"dead-pid"});return l.acquired?{acquired:!0,lease:l.current??s,leaseId:l.lease_id,previous:a.current,reclaimReason:a.current.holder_pid===null?"stale":"dead-pid"}:{acquired:!1,current:l.current}}function er(t){return t.status!=="running"?null:t.holder_host===Is()&&t.holder_pid!==null&&t.holder_pid>0?Ye(t.holder_pid)?"live":"dead":"unknown"}function Jt(t,e,n){let r,s=t.getTerminalLock(e,n);if(s!==null){if(yO(s))return{busy:!0,reason:"terminal-held",source:"terminal-lock",terminalLock:s};r??={source:"terminal-lock",holder_pid:s.holder_pid,holder_host:s.holder_host,reason:s.holder_host===Is()?"dead-pid":"stale"}}let o=EO(t,e,n);if(o!==null){if(TO(o))return{busy:!0,reason:"terminal-held",source:"terminal-invocation",terminalInvocation:o};r??={source:"terminal-invocation",holder_pid:o.holder_pid,holder_host:o.holder_host,reason:o.holder_pid!==null&&(o.holder_host===null||o.holder_host===Is())?"dead-pid":"stale"}}let i=t.getAgentInflight(e,n);if(i!==null){let a=new Date(Date.now()-ks()).toISOString();if(!Za(i,a))return{busy:!0,reason:"in-flight",inFlight:i};r??={source:"in-flight",holder_pid:i.holder_pid,holder_host:i.holder_pid===null?null:Is(),reason:i.holder_pid===null?"stale":"dead-pid"}}return r===void 0?{busy:!1}:{busy:!1,reclaimable:r}}function yO(t){if(t.holder_host===Is())return Ye(t.holder_pid);let e=Date.parse(t.last_heartbeat);return Number.isFinite(e)?Date.now()-e<=vO():!1}function EO(t,e,n){return t.query(`SELECT id, started_at, last_heartbeat_at, holder_pid, holder_host
1164
+ `)}}function It(t){if(t==null)return null;if(Buffer.byteLength(t,"utf8")<=65536)return t;let n=Buffer.byteLength(sE,"utf8"),r=Math.max(0,65536-n),s=Buffer.from(t,"utf8"),o=r;for(;o>0&&(s[o]&192)===128;)o-=1;return`${s.subarray(0,o).toString("utf8")}${sE}`}var sE,iE=L(()=>{"use strict";sE=`
1165
+ ...[truncated]`});function Jo(t,e){return JSON.stringify([t,e])}function aE(t){try{let e=JSON.parse(t);return typeof e.lock_id!="string"||typeof e.teamfile!="string"||typeof e.alias!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||!Array.isArray(e.holder_ips)||!e.holder_ips.every(n=>typeof n=="string")||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,teamfile:e.teamfile,alias:e.alias,holder_pid:e.holder_pid,holder_host:e.holder_host,holder_ips:e.holder_ips,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}var Go,Vo,lE=L(()=>{"use strict";Go="terminal_lock",Vo="member"});function Ye(t){if(!Number.isInteger(t)||(t??0)<=0)return!1;try{return process.kill(t,0),!0}catch(e){return(e!==null&&typeof e=="object"&&"code"in e?e.code:void 0)!=="ESRCH"}}var Ur=L(()=>{"use strict"});import{hostname as Is}from"node:os";function Qa(t,e={}){let n=setInterval(()=>{Promise.resolve().then(()=>t(new Date().toISOString())).then(r=>{r||clearInterval(n)}).catch(r=>e.onError?.(r))},e.intervalMs??gO);return n.unref?.(),n}function Zn(t,e){let n=new Date().toISOString(),r=new Date(Date.now()-e.ttlMs).toISOString(),s={receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,started_at:n},o=t.getAgentInflight(e.receiver_teamfile,e.receiver_alias),i=o===null||o.holder_pid===null,a=t.tryAcquireAgentInflight(s,{...i?{stale_before:r}:{},force:e.force,reclaim_reason:e.reclaimReason});if(a.acquired){let c=o===null?null:e.force===!0?e.reclaimReason??"force":o.holder_pid===null&&o.started_at<r?"stale":null;return{acquired:!0,lease:a.current??s,leaseId:a.lease_id,previous:o,reclaimReason:c}}if(!Za(a.current,r))return{acquired:!1,current:a.current};let l=t.tryAcquireAgentInflight(s,a.current.holder_pid===null?{stale_before:r}:{reclaim_observed:{sender_teamfile:a.current.sender_teamfile,sender_alias:a.current.sender_alias,started_at:a.current.started_at,holder_pid:a.current.holder_pid},reclaim_reason:"dead-pid"});return l.acquired?{acquired:!0,lease:l.current??s,leaseId:l.lease_id,previous:a.current,reclaimReason:a.current.holder_pid===null?"stale":"dead-pid"}:{acquired:!1,current:l.current}}function er(t){return t.status!=="running"?null:t.holder_host===Is()&&t.holder_pid!==null&&t.holder_pid>0?Ye(t.holder_pid)?"live":"dead":"unknown"}function Jt(t,e,n){let r,s=t.getTerminalLock(e,n);if(s!==null){if(yO(s))return{busy:!0,reason:"terminal-held",source:"terminal-lock",terminalLock:s};r??={source:"terminal-lock",holder_pid:s.holder_pid,holder_host:s.holder_host,reason:s.holder_host===Is()?"dead-pid":"stale"}}let o=EO(t,e,n);if(o!==null){if(TO(o))return{busy:!0,reason:"terminal-held",source:"terminal-invocation",terminalInvocation:o};r??={source:"terminal-invocation",holder_pid:o.holder_pid,holder_host:o.holder_host,reason:o.holder_pid!==null&&(o.holder_host===null||o.holder_host===Is())?"dead-pid":"stale"}}let i=t.getAgentInflight(e,n);if(i!==null){let a=new Date(Date.now()-ks()).toISOString();if(!Za(i,a))return{busy:!0,reason:"in-flight",inFlight:i};r??={source:"in-flight",holder_pid:i.holder_pid,holder_host:i.holder_pid===null?null:Is(),reason:i.holder_pid===null?"stale":"dead-pid"}}return r===void 0?{busy:!1}:{busy:!1,reclaimable:r}}function yO(t){if(t.holder_host===Is())return Ye(t.holder_pid);let e=Date.parse(t.last_heartbeat);return Number.isFinite(e)?Date.now()-e<=vO():!1}function EO(t,e,n){return t.query(`SELECT id, started_at, last_heartbeat_at, holder_pid, holder_host
1166
1166
  FROM tracked_invocation
1167
1167
  WHERE target_teamfile = ?
1168
1168
  AND target_alias = ?
1169
1169
  AND status = 'running'
1170
1170
  AND launch_source = 'terminal'
1171
1171
  ORDER BY started_at DESC, id DESC
1172
- LIMIT 1`,e,n)[0]??null}function TO(t){return t.holder_pid!==null&&(t.holder_host===null||t.holder_host===Is())?Ye(t.holder_pid):wO(t)}function wO(t){let e=Date.parse(t.last_heartbeat_at??t.started_at);return Number.isFinite(e)?Date.now()-e<=ks():!1}function Za(t,e){return t.holder_pid===null?t.started_at<e:!Ye(t.holder_pid)}function ks(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return cE;let n=Number(e);return!Number.isFinite(n)||n<=0?cE:n}function vO(t=process.env){let e=t.LMCTL_TERMINAL_LOCK_STALE_MS;if(e===void 0||e.trim()==="")return dE;let n=Number(e);return!Number.isFinite(n)||n<=0?dE:n}var cE,dE,gO,Pt=x(()=>{"use strict";Ur();cE=8*60*60*1e3,dE=12e4,gO=3e4});import{randomUUID as SO}from"node:crypto";import{hostname as bO}from"node:os";function tr(t,e){return{teamfile:t,alias:e}}function uE(t,e,n={}){return{teamfile:t,alias:e,...n.provider===void 0||n.provider===null?{}:{provider:n.provider},...n.sessionId===void 0||n.sessionId===null?{}:{session_id:n.sessionId}}}function Du(t,e){return t===null?null:tr(t,e??"")}function vn(t){return`msg_tcl_${t}`}function jr(t){return`inv_${t}`}function As(t,e,n){return t.prepare(`SELECT receiver_teamfile, receiver_alias, lease_id, sender_teamfile, sender_alias,
1172
+ LIMIT 1`,e,n)[0]??null}function TO(t){return t.holder_pid!==null&&(t.holder_host===null||t.holder_host===Is())?Ye(t.holder_pid):wO(t)}function wO(t){let e=Date.parse(t.last_heartbeat_at??t.started_at);return Number.isFinite(e)?Date.now()-e<=ks():!1}function Za(t,e){return t.holder_pid===null?t.started_at<e:!Ye(t.holder_pid)}function ks(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return cE;let n=Number(e);return!Number.isFinite(n)||n<=0?cE:n}function vO(t=process.env){let e=t.LMCTL_TERMINAL_LOCK_STALE_MS;if(e===void 0||e.trim()==="")return dE;let n=Number(e);return!Number.isFinite(n)||n<=0?dE:n}var cE,dE,gO,Pt=L(()=>{"use strict";Ur();cE=8*60*60*1e3,dE=12e4,gO=3e4});import{randomUUID as SO}from"node:crypto";import{hostname as bO}from"node:os";function tr(t,e){return{teamfile:t,alias:e}}function uE(t,e,n={}){return{teamfile:t,alias:e,...n.provider===void 0||n.provider===null?{}:{provider:n.provider},...n.sessionId===void 0||n.sessionId===null?{}:{session_id:n.sessionId}}}function Du(t,e){return t===null?null:tr(t,e??"")}function vn(t){return`msg_tcl_${t}`}function jr(t){return`inv_${t}`}function As(t,e,n){return t.prepare(`SELECT receiver_teamfile, receiver_alias, lease_id, sender_teamfile, sender_alias,
1173
1173
  holder_pid, holder_host, started_at, terminal_lock_id,
1174
1174
  terminal_invocation_id, currently_handling_message_id,
1175
1175
  currently_handling_since, last_seq
@@ -1186,12 +1186,12 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1186
1186
  SET currently_handling_message_id = NULL,
1187
1187
  currently_handling_since = NULL
1188
1188
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1189
- AND currently_handling_message_id = ?`).run(e,n,r).changes===1}function RO(t,e){let n=e??new Date(Date.now()-ks()).toISOString();return Za({holder_pid:t.holder_pid,started_at:t.started_at??""},n)}function NO(t,e,n){return e==="force"||e==="session-idle"?e:n?"force":t.holder_pid!==null&&!Ye(t.holder_pid)?"dead-pid":"stale"}function xO(t){return{sender:Du(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:t.holder_host,started_at:t.started_at}}function Rs(t,e){if(t!==1)throw new Error(`event projection CAS failed during ${e}`)}function Pu(t,e,n){let r=vn(e),s=Du(n.sender_teamfile,n.sender_alias),o=uE(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 lt(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,...AO(t,n.sender_teamfile,n.sender_alias)}},()=>{Mu(t,n.receiver_teamfile,n.receiver_alias,r,n.created_at)}),r}function el(t,e,n){let r=vn(e),s={message_id:r,message_type:"request",sender:Du(n.sender_teamfile,n.sender_alias),receiver:uE(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 lt(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}},()=>{$u(t,n.receiver_teamfile,n.receiver_alias,r)}),r}function LO(t){return{sender:tr(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at}}function fE(t,e,n,r){let s=t.prepare(`UPDATE agent_state
1189
+ AND currently_handling_message_id = ?`).run(e,n,r).changes===1}function RO(t,e){let n=e??new Date(Date.now()-ks()).toISOString();return Za({holder_pid:t.holder_pid,started_at:t.started_at??""},n)}function NO(t,e,n){return e==="force"||e==="session-idle"?e:n?"force":t.holder_pid!==null&&!Ye(t.holder_pid)?"dead-pid":"stale"}function LO(t){return{sender:Du(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:t.holder_host,started_at:t.started_at}}function Rs(t,e){if(t!==1)throw new Error(`event projection CAS failed during ${e}`)}function Pu(t,e,n){let r=vn(e),s=Du(n.sender_teamfile,n.sender_alias),o=uE(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 lt(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,...AO(t,n.sender_teamfile,n.sender_alias)}},()=>{Mu(t,n.receiver_teamfile,n.receiver_alias,r,n.created_at)}),r}function el(t,e,n){let r=vn(e),s={message_id:r,message_type:"request",sender:Du(n.sender_teamfile,n.sender_alias),receiver:uE(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 lt(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}},()=>{$u(t,n.receiver_teamfile,n.receiver_alias,r)}),r}function xO(t){return{sender:tr(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at}}function fE(t,e,n,r){let s=t.prepare(`UPDATE agent_state
1190
1190
  SET lease_id = NULL, sender_teamfile = NULL, sender_alias = NULL,
1191
1191
  holder_pid = NULL, holder_host = NULL, started_at = NULL,
1192
1192
  last_heartbeat_at = NULL, last_seq = ?
1193
1193
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1194
- AND lease_id IS ? AND last_seq = ?`).run(n,e.receiver_teamfile,e.receiver_alias,e.lease_id,e.last_seq);Rs(s.changes,r)}function mE(t,e,n,r,s=null,o=!1){let i=bO();if(n!==null&&r===null)throw new Error("agent inflight takeover is missing a reclaim reason");let a=As(t,e.receiver_teamfile,e.receiver_alias);if(a!==null&&a.lease_id!==null){if(!(o||RO(a,s)))throw new Error("event projection rejected INFLIGHT_TAKE: receiver already holds a live lease");let u=NO(a,r,o),f=xO(a),m=a.lease_id;lt(t,{stream_id:m,event_type:"INFLIGHT_RECLAIM",observedLastSeq:a.last_seq,ts:e.started_at,payload:{receiver:tr(e.receiver_teamfile,e.receiver_alias),reason:u,previous_holder:f}},p=>fE(t,a,p,"INFLIGHT_RECLAIM")),a=As(t,e.receiver_teamfile,e.receiver_alias)}let l=a?.last_seq??0,c=`lease_${SO()}`;return lt(t,{stream_id:c,event_type:"INFLIGHT_TAKE",observedLastSeq:l,ts:e.started_at,payload:{lease_id:c,receiver:tr(e.receiver_teamfile,e.receiver_alias),sender:tr(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
1194
+ AND lease_id IS ? AND last_seq = ?`).run(n,e.receiver_teamfile,e.receiver_alias,e.lease_id,e.last_seq);Rs(s.changes,r)}function mE(t,e,n,r,s=null,o=!1){let i=bO();if(n!==null&&r===null)throw new Error("agent inflight takeover is missing a reclaim reason");let a=As(t,e.receiver_teamfile,e.receiver_alias);if(a!==null&&a.lease_id!==null){if(!(o||RO(a,s)))throw new Error("event projection rejected INFLIGHT_TAKE: receiver already holds a live lease");let u=NO(a,r,o),f=LO(a),m=a.lease_id;lt(t,{stream_id:m,event_type:"INFLIGHT_RECLAIM",observedLastSeq:a.last_seq,ts:e.started_at,payload:{receiver:tr(e.receiver_teamfile,e.receiver_alias),reason:u,previous_holder:f}},p=>fE(t,a,p,"INFLIGHT_RECLAIM")),a=As(t,e.receiver_teamfile,e.receiver_alias)}let l=a?.last_seq??0,c=`lease_${SO()}`;return lt(t,{stream_id:c,event_type:"INFLIGHT_TAKE",observedLastSeq:l,ts:e.started_at,payload:{lease_id:c,receiver:tr(e.receiver_teamfile,e.receiver_alias),sender:tr(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
1195
1195
  (receiver_teamfile, receiver_alias, lease_id, sender_teamfile,
1196
1196
  sender_alias, holder_pid, holder_host, started_at,
1197
1197
  last_heartbeat_at, last_seq)
@@ -1205,7 +1205,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1205
1205
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1206
1206
  AND lease_id = ?
1207
1207
  AND sender_teamfile = ? AND sender_alias = ?
1208
- 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 Ko(t,e,n,r){let s=As(t,e.receiver_teamfile,e.receiver_alias);s===null||s.lease_id===null||lt(t,{stream_id:s.lease_id,event_type:n,observedLastSeq:s.last_seq,payload:{receiver:tr(e.receiver_teamfile,e.receiver_alias),...n==="INFLIGHT_RECLAIM"?{reason:r??"stale",previous_holder:LO(e)}:{lease_id:s.lease_id}}},o=>fE(t,s,o,n))}function hE(t,e){let n=As(t,e.teamfile,e.alias),r=n?.last_seq??0;lt(t,{stream_id:e.lock_id,event_type:"TERMINAL_LOCK_TAKE",observedLastSeq:r,ts:e.started_at,payload:{receiver:tr(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
1208
+ 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 Ko(t,e,n,r){let s=As(t,e.receiver_teamfile,e.receiver_alias);s===null||s.lease_id===null||lt(t,{stream_id:s.lease_id,event_type:n,observedLastSeq:s.last_seq,payload:{receiver:tr(e.receiver_teamfile,e.receiver_alias),...n==="INFLIGHT_RECLAIM"?{reason:r??"stale",previous_holder:xO(e)}:{lease_id:s.lease_id}}},o=>fE(t,s,o,n))}function hE(t,e){let n=As(t,e.teamfile,e.alias),r=n?.last_seq??0;lt(t,{stream_id:e.lock_id,event_type:"TERMINAL_LOCK_TAKE",observedLastSeq:r,ts:e.started_at,payload:{receiver:tr(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
1209
1209
  (receiver_teamfile, receiver_alias, terminal_lock_id, last_seq)
1210
1210
  VALUES (?, ?, ?, ?)`).run(e.teamfile,e.alias,e.lock_id,s);return}let o=t.prepare(`UPDATE agent_state SET terminal_lock_id = ?, last_seq = ?
1211
1211
  WHERE receiver_teamfile = ? AND receiver_alias = ?
@@ -1229,15 +1229,15 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1229
1229
  terminal_invocation_host = NULL,
1230
1230
  terminal_invocation_heartbeat_at = NULL, last_seq = ?
1231
1231
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1232
- AND terminal_invocation_id = ? AND last_seq = ?`).run(e,r.receiver_teamfile,r.receiver_alias,n,r.last_seq);Rs(s.changes,"terminal INVOCATION_FINISH")}var IO,tl=x(()=>{"use strict";Ja();Pt();Ur();IO=60*60*1e3});function EE(t,e){return t.prepare("SELECT last_seq FROM invocation_state WHERE invocation_id = ?").get(e)??null}function Uu(t){return t.launch_source==="terminal"&&t.target_teamfile!==null}function TE(t,e){let n=jr(e.id),r=e.target_teamfile===null?null:{teamfile:e.target_teamfile,alias:e.target_alias??""},s=e.last_heartbeat_at??e.started_at;lt(t,{stream_id:n,event_type:CO,observedLastSeq:0,ts:e.started_at,payload:{invocation_id:n,kind:e.kind,origin:e.origin,launch_source:e.launch_source,from_identity:e.from_identity,target:r,root_teamfile:e.root_teamfile,scope_teamfile:e.scope_teamfile,cwd:e.cwd,command:e.command,request_payload:e.request_payload,request_message_id:e.team_chat_log_id===null?null:`msg_tcl_${e.team_chat_log_id}`,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,legacy:{table:"tracked_invocation",id:e.id}}},o=>{t.prepare(`INSERT INTO invocation_state
1232
+ AND terminal_invocation_id = ? AND last_seq = ?`).run(e,r.receiver_teamfile,r.receiver_alias,n,r.last_seq);Rs(s.changes,"terminal INVOCATION_FINISH")}var IO,tl=L(()=>{"use strict";Ja();Pt();Ur();IO=60*60*1e3});function EE(t,e){return t.prepare("SELECT last_seq FROM invocation_state WHERE invocation_id = ?").get(e)??null}function Uu(t){return t.launch_source==="terminal"&&t.target_teamfile!==null}function TE(t,e){let n=jr(e.id),r=e.target_teamfile===null?null:{teamfile:e.target_teamfile,alias:e.target_alias??""},s=e.last_heartbeat_at??e.started_at;lt(t,{stream_id:n,event_type:CO,observedLastSeq:0,ts:e.started_at,payload:{invocation_id:n,kind:e.kind,origin:e.origin,launch_source:e.launch_source,from_identity:e.from_identity,target:r,root_teamfile:e.root_teamfile,scope_teamfile:e.scope_teamfile,cwd:e.cwd,command:e.command,request_payload:e.request_payload,request_message_id:e.team_chat_log_id===null?null:`msg_tcl_${e.team_chat_log_id}`,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,legacy:{table:"tracked_invocation",id:e.id}}},o=>{t.prepare(`INSERT INTO invocation_state
1233
1233
  (invocation_id, kind, origin, launch_source, from_identity, target_teamfile, target_alias,
1234
1234
  root_teamfile, cwd, command, request_message_id, request_payload, holder_pid, holder_host,
1235
1235
  status, started_at, last_heartbeat_at, last_seq)
1236
1236
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', ?, ?, ?)`).run(n,e.kind,e.origin,e.launch_source??e.kind,e.from_identity,e.target_teamfile,e.target_alias,e.root_teamfile,e.cwd,e.command,e.team_chat_log_id===null?null:`msg_tcl_${e.team_chat_log_id}`,e.request_payload,e.holder_pid,e.holder_host,e.started_at,e.last_heartbeat_at,o),Uu(e)&&_E(t,o,{invocationId:n,targetTeamfile:e.target_teamfile,targetAlias:e.target_alias??"",holderPid:e.holder_pid,holderHost:e.holder_host,heartbeatAt:s})})}function nl(t,e){let n=jr(e.id),r=EE(t,n);return r===null?!1:(lt(t,{stream_id:n,event_type:OO,observedLastSeq:r.last_seq,ts:e.ended_at??e.started_at,payload:{invocation_id:n,status:e.status,ended_at:e.ended_at,exit_code:e.exit_code,signal:e.signal,result_summary:e.result_summary,error:e.error,legacy:{table:"tracked_invocation",id:e.id}}},s=>{if(t.prepare(`UPDATE invocation_state
1237
1237
  SET status = ?, ended_at = ?, result_summary = ?, error = ?, last_seq = ?
1238
- WHERE invocation_id = ? AND last_seq = ?`).run(e.status,e.ended_at,e.result_summary,e.error,s,n,r.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_FINISH for ${n}`);Uu(e)&&yE(t,s,n)}),!0)}function wE(t,e,n,r){let s=jr(e.id),o=EE(t,s);return o===null?!1:(lt(t,{stream_id:s,event_type:DO,observedLastSeq:o.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},i=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,i,s,o.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function vE(t,e,n){let r=jr(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Uu(e)&&gE(t,r,n)}function SE(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,jr(e))}function bE(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,jr(e))}var CO,OO,DO,IE=x(()=>{"use strict";Ja();tl();CO="INVOCATION_START",OO="INVOCATION_FINISH",DO="INVOCATION_NOTIFY_CLAIM"});var MO,$O,nK,kE,AE,RE,NE=x(()=>{"use strict";MO="other",$O=["not_enough_information","dont_know","other_work"],nK=new Set([MO,...$O]),kE="@abort",AE="invalid_decision",RE="workflow_escalation"});import{randomUUID as xE}from"node:crypto";import{existsSync as DE,mkdirSync as PO,renameSync as FO,rmdirSync as UO}from"node:fs";import{hostname as Wu}from"node:os";function Bu(t){return t.provider_resolved??t.provider}function H(){return new Date().toISOString()}function jO(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!DE(t))return e;let n;try{n=new ds(t,{readonly:!0})}catch{return e}try{let r=[];try{r=n.prepare("SELECT teamfile_path, name, raw_text, raw_sha256, registered_at, last_seeded_at FROM root_team").all()}catch{}let s=[];try{s=n.prepare("SELECT key, value FROM lmctl_config").all()}catch{}return{rootTeams:r,config:s}}finally{n.close()}}function WO(t){if(t===":memory:"||!DE(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{FO(r,`${e}${n}`)}catch{}}return e}function LE(t,e){let n=e instanceof Error?e.message:String(e);try{let r=jO(t),s=WO(t),o=new rl(qo({dbPath:t}));for(let i of r.rootTeams)o.upsertRootTeam(i);for(let{key:i,value:a}of r.config)o.setConfig(i,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${wn} (${n}); started a fresh database instead. Preserved ${r.rootTeams.length} team registration(s) and ${r.config.length} config value(s).`+(s!==null?` Old database backed up at ${s}.
1238
+ WHERE invocation_id = ? AND last_seq = ?`).run(e.status,e.ended_at,e.result_summary,e.error,s,n,r.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_FINISH for ${n}`);Uu(e)&&yE(t,s,n)}),!0)}function wE(t,e,n,r){let s=jr(e.id),o=EE(t,s);return o===null?!1:(lt(t,{stream_id:s,event_type:DO,observedLastSeq:o.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},i=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,i,s,o.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function vE(t,e,n){let r=jr(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Uu(e)&&gE(t,r,n)}function SE(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,jr(e))}function bE(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,jr(e))}var CO,OO,DO,IE=L(()=>{"use strict";Ja();tl();CO="INVOCATION_START",OO="INVOCATION_FINISH",DO="INVOCATION_NOTIFY_CLAIM"});var MO,$O,nK,kE,AE,RE,NE=L(()=>{"use strict";MO="other",$O=["not_enough_information","dont_know","other_work"],nK=new Set([MO,...$O]),kE="@abort",AE="invalid_decision",RE="workflow_escalation"});import{randomUUID as LE}from"node:crypto";import{existsSync as DE,mkdirSync as PO,renameSync as FO,rmdirSync as UO}from"node:fs";import{hostname as Wu}from"node:os";function Bu(t){return t.provider_resolved??t.provider}function H(){return new Date().toISOString()}function jO(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!DE(t))return e;let n;try{n=new ds(t,{readonly:!0})}catch{return e}try{let r=[];try{r=n.prepare("SELECT teamfile_path, name, raw_text, raw_sha256, registered_at, last_seeded_at FROM root_team").all()}catch{}let s=[];try{s=n.prepare("SELECT key, value FROM lmctl_config").all()}catch{}return{rootTeams:r,config:s}}finally{n.close()}}function WO(t){if(t===":memory:"||!DE(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{FO(r,`${e}${n}`)}catch{}}return e}function xE(t,e){let n=e instanceof Error?e.message:String(e);try{let r=jO(t),s=WO(t),o=new rl(qo({dbPath:t}));for(let i of r.rootTeams)o.upsertRootTeam(i);for(let{key:i,value:a}of r.config)o.setConfig(i,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${wn} (${n}); started a fresh database instead. Preserved ${r.rootTeams.length} team registration(s) and ${r.config.length} config value(s).`+(s!==null?` Old database backed up at ${s}.
1239
1239
  `:`
1240
- `)),o}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`${t}: unusable (${n}), and recovery into a fresh database also failed (${s}). Check that the containing directory is writable, or move the file aside manually and retry.`)}}function ju(t,e){let n;try{return n=qo({dbPath:t,allowSchemaSkew:e}),{dal:new rl(n)}}catch(r){if(r instanceof $t)throw r;let s;if(n!==void 0)try{s=n.pragma("user_version",{simple:!0})}catch{}try{n?.close()}catch{}return{cause:r,dbVersion:s}}}function qO(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function GO(t){if(t===":memory:")return!0;try{return PO(`${t}${ME}`),!0}catch{return!1}}function VO(t){if(t!==":memory:")try{UO(`${t}${ME}`)}catch{}}function qe(t){let e=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(t.recover===!1){let s=ju(t.path,e);if(s.dal)return s.dal;throw s.cause}let n={};for(let s=0;s<BO;s+=1)if(n=ju(t.path,e),n.dal!==void 0)return n.dal;let r=n.cause?.code;if(typeof r=="string"&&/^SQLITE_(BUSY|LOCKED)/.test(r))throw new Error(t.path+": database is busy; retry this command after the other writer finishes.",{cause:n.cause});if(n.dbVersion!==void 0&&n.dbVersion>wn){let s=n.cause instanceof Error?n.cause.message:String(n.cause);throw new $t(t.path,n.dbVersion,wn,s)}for(let s=0;s<HO;s+=1){if(GO(t.path))try{return LE(t.path,n.cause)}finally{VO(t.path)}qO(XO);let o=ju(t.path,e);if(o.dal!==void 0)return o.dal}return LE(t.path,n.cause)}function CE(t,e,n){let r=OE(e);if(r.length===0)return;let s=new Set,o=[],i=l=>{if(l===t)return r;let c=n(l);if(c===null)throw new Error(`unknown workflow reference: ${l}`);return OE(c.definition)},a=l=>{let c=o.indexOf(l);if(c>=0)throw new Error(`cycle detected: ${[...o.slice(c),l].join(" -> ")}`);if(!s.has(l)){o.push(l);try{for(let d of i(l))a(d)}finally{o.pop()}s.add(l)}};a(t)}function OE(t){let e=JO(t),n=e===null?null:KO(e,"states");if(n===null)return[];let r=[];for(let s of Object.values(n))sl(s)&&s.type==="Subflow"&&typeof s.workflow_name=="string"&&s.workflow_name.length>0&&r.push(s.workflow_name);return r}function JO(t){try{let e=JSON.parse(t);return sl(e)?e:null}catch{return null}}function KO(t,e){let n=t[e];return sl(n)?n:null}function sl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function YO(t){try{let e=JSON.parse(t);return!sl(e)||typeof e.lock_id!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}function zO(t,e){return t===null?!0:t.holder_host===Wu()?!Ye(t.holder_pid):t.last_heartbeat<e}function QO(t){return{getRuntimeState:t.prepare("SELECT * FROM runtime_state WHERE scope = ? AND key = ? AND kind = ?"),upsertRuntimeState:t.prepare(`
1240
+ `)),o}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`${t}: unusable (${n}), and recovery into a fresh database also failed (${s}). Check that the containing directory is writable, or move the file aside manually and retry.`)}}function ju(t,e){let n;try{return n=qo({dbPath:t,allowSchemaSkew:e}),{dal:new rl(n)}}catch(r){if(r instanceof $t)throw r;let s;if(n!==void 0)try{s=n.pragma("user_version",{simple:!0})}catch{}try{n?.close()}catch{}return{cause:r,dbVersion:s}}}function qO(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function GO(t){if(t===":memory:")return!0;try{return PO(`${t}${ME}`),!0}catch{return!1}}function VO(t){if(t!==":memory:")try{UO(`${t}${ME}`)}catch{}}function qe(t){let e=t.allowSchemaSkew??process.env.LMCTL_ALLOW_SCHEMA_SKEW==="1";if(t.recover===!1){let s=ju(t.path,e);if(s.dal)return s.dal;throw s.cause}let n={};for(let s=0;s<BO;s+=1)if(n=ju(t.path,e),n.dal!==void 0)return n.dal;let r=n.cause?.code;if(typeof r=="string"&&/^SQLITE_(BUSY|LOCKED)/.test(r))throw new Error(t.path+": database is busy; retry this command after the other writer finishes.",{cause:n.cause});if(n.dbVersion!==void 0&&n.dbVersion>wn){let s=n.cause instanceof Error?n.cause.message:String(n.cause);throw new $t(t.path,n.dbVersion,wn,s)}for(let s=0;s<HO;s+=1){if(GO(t.path))try{return xE(t.path,n.cause)}finally{VO(t.path)}qO(XO);let o=ju(t.path,e);if(o.dal!==void 0)return o.dal}return xE(t.path,n.cause)}function CE(t,e,n){let r=OE(e);if(r.length===0)return;let s=new Set,o=[],i=l=>{if(l===t)return r;let c=n(l);if(c===null)throw new Error(`unknown workflow reference: ${l}`);return OE(c.definition)},a=l=>{let c=o.indexOf(l);if(c>=0)throw new Error(`cycle detected: ${[...o.slice(c),l].join(" -> ")}`);if(!s.has(l)){o.push(l);try{for(let d of i(l))a(d)}finally{o.pop()}s.add(l)}};a(t)}function OE(t){let e=JO(t),n=e===null?null:KO(e,"states");if(n===null)return[];let r=[];for(let s of Object.values(n))sl(s)&&s.type==="Subflow"&&typeof s.workflow_name=="string"&&s.workflow_name.length>0&&r.push(s.workflow_name);return r}function JO(t){try{let e=JSON.parse(t);return sl(e)?e:null}catch{return null}}function KO(t,e){let n=t[e];return sl(n)?n:null}function sl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function YO(t){try{let e=JSON.parse(t);return!sl(e)||typeof e.lock_id!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}function zO(t,e){return t===null?!0:t.holder_host===Wu()?!Ye(t.holder_pid):t.last_heartbeat<e}function QO(t){return{getRuntimeState:t.prepare("SELECT * FROM runtime_state WHERE scope = ? AND key = ? AND kind = ?"),upsertRuntimeState:t.prepare(`
1241
1241
  INSERT INTO runtime_state (scope, key, kind, data, updated_at)
1242
1242
  VALUES (?, ?, ?, ?, ?)
1243
1243
  ON CONFLICT(scope, key, kind) DO UPDATE SET
@@ -1644,25 +1644,25 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1644
1644
  response = NULL
1645
1645
  WHERE id = ?
1646
1646
  AND status = 'running'
1647
- `),...oE(t),...nE(t)}}function ZO(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var BO,ME,HO,XO,rl,Ft=x(()=>{"use strict";Bd();Ho();_a();za();rE();iE();lE();Ur();tl();IE();NE();BO=3,ME=".recovery.lock",HO=20,XO=50;rl=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=QO(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)=>ZO("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!==RE)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!==kE&&!a.includes(r))return{resumed:!1,reason:AE};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),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=mE(this.db,i,s,l,r.stale_before??null,r.force===!0);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){CE(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,H()),r=this.getWorkflow(Number(n.lastInsertRowid)),s=this.stmts.insertWorkflowVersion.run(r.id,r.version,e.definition,e.author??null,H());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){CE(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,H());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,H())}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,H());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,H()),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,H(),e),this.stmts.getTriggerInstance.get(e)??null}setTriggerFailure(e,n){return this.stmts.setTriggerFailure.run(H(),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,H());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,H());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,H(),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,H());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",H());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,H());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=H(),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,H(),e)??null}claimIssue(e,n){return this.stmts.claimIssue.get(n,H(),e)??null}closeIssue(e,n,r){let s=H(),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,H(),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,H(),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=H();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,H(),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,H(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}createChatbotSession(e,n){let r=xE(),s=H();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=H(),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,H())}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??H(),e.dedupe_key??null,e.concurrency_key??null,H());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=H(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimTxn(e.worker_id,r,n)}claimNextJobWithConcurrency(e){let n=H(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimWithConcurrencyTxn(e.worker_id,r,n,e.evaluator)}claimJobByIdWithConcurrency(e){let n=H(),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:H();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,H()),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,H()),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??H(),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,H());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=H(),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,H(),e.id),this.getWebProject(e.id))}softDeleteWebProject(e){return this.stmts.softDeleteWebProject.run(H(),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&&Pr(this.db,r,e.usage),Pu(this.db,r,e),e.usage&&Pr(this.db,r,e.usage),el(this.db,r,e),r})()}beginTeamChatLog(e){return this.db.transaction(()=>{let n=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.message_type??null,e.created_at),r=Number(n.lastInsertRowid);return e.usage&&Pr(this.db,r,e.usage),Pu(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&&Pr(this.db,e,n.usage),el(this.db,e,n)})()}insertDirectTurn(e,n,r){return this.db.transaction(()=>{let s=this.db.prepare("SELECT id FROM team_chat_log WHERE attempt_key = ?").get(e.attempt_key);if(s!==void 0)return s.id;let o=this.stmts.insertTeamChatLog.run(r?.teamfile??"(direct)",null,null,r?.teamfile??"(direct)",r?.alias??e.provider,"","",n,"running",null,0,null,e.startedAt),i=Number(o.lastInsertRowid);return this.db.prepare("UPDATE team_chat_log SET accounting_only=1 WHERE id=?").run(i),Pr(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}`);Pr(this.db,e,n)})()}setCurrentlyHandlingMessage(e,n,r){this.db.transaction(()=>{Mu(this.db,e,n,r)})()}clearCurrentlyHandlingMessage(e,n,r){return this.db.transaction(()=>$u(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??H(),r=e.holder_host??Wu(),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,It(e.command),n,e.holder_pid??null,r,s,It(e.meta),e.launch_source??e.kind,e.request_payload??null,e.parent_invocation_id??null),i=this.getTrackedInvocation(Number(o.lastInsertRowid));return TE(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(`
1647
+ `),...oE(t),...nE(t)}}function ZO(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var BO,ME,HO,XO,rl,Ft=L(()=>{"use strict";Bd();Ho();_a();za();rE();iE();lE();Ur();tl();IE();NE();BO=3,ME=".recovery.lock",HO=20,XO=50;rl=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=QO(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)=>ZO("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!==RE)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!==kE&&!a.includes(r))return{resumed:!1,reason:AE};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),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=mE(this.db,i,s,l,r.stale_before??null,r.force===!0);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){CE(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,H()),r=this.getWorkflow(Number(n.lastInsertRowid)),s=this.stmts.insertWorkflowVersion.run(r.id,r.version,e.definition,e.author??null,H());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){CE(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,H());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,H())}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,H());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,H()),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,H(),e),this.stmts.getTriggerInstance.get(e)??null}setTriggerFailure(e,n){return this.stmts.setTriggerFailure.run(H(),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,H());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,H());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,H(),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,H());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",H());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,H());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=H(),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,H(),e)??null}claimIssue(e,n){return this.stmts.claimIssue.get(n,H(),e)??null}closeIssue(e,n,r){let s=H(),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,H(),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,H(),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=H();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,H(),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,H(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}createChatbotSession(e,n){let r=LE(),s=H();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=H(),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,H())}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??H(),e.dedupe_key??null,e.concurrency_key??null,H());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=H(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimTxn(e.worker_id,r,n)}claimNextJobWithConcurrency(e){let n=H(),r=new Date(Date.now()+e.lease_ms).toISOString();return this.claimWithConcurrencyTxn(e.worker_id,r,n,e.evaluator)}claimJobByIdWithConcurrency(e){let n=H(),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:H();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,H()),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,H()),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??H(),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,H());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=H(),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,H(),e.id),this.getWebProject(e.id))}softDeleteWebProject(e){return this.stmts.softDeleteWebProject.run(H(),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&&Pr(this.db,r,e.usage),Pu(this.db,r,e),e.usage&&Pr(this.db,r,e.usage),el(this.db,r,e),r})()}beginTeamChatLog(e){return this.db.transaction(()=>{let n=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.message_type??null,e.created_at),r=Number(n.lastInsertRowid);return e.usage&&Pr(this.db,r,e.usage),Pu(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&&Pr(this.db,e,n.usage),el(this.db,e,n)})()}insertDirectTurn(e,n,r){return this.db.transaction(()=>{let s=this.db.prepare("SELECT id FROM team_chat_log WHERE attempt_key = ?").get(e.attempt_key);if(s!==void 0)return s.id;let o=this.stmts.insertTeamChatLog.run(r?.teamfile??"(direct)",null,null,r?.teamfile??"(direct)",r?.alias??e.provider,"","",n,"running",null,0,null,e.startedAt),i=Number(o.lastInsertRowid);return this.db.prepare("UPDATE team_chat_log SET accounting_only=1 WHERE id=?").run(i),Pr(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}`);Pr(this.db,e,n)})()}setCurrentlyHandlingMessage(e,n,r){this.db.transaction(()=>{Mu(this.db,e,n,r)})()}clearCurrentlyHandlingMessage(e,n,r){return this.db.transaction(()=>$u(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??H(),r=e.holder_host??Wu(),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,It(e.command),n,e.holder_pid??null,r,s,It(e.meta),e.launch_source??e.kind,e.request_payload??null,e.parent_invocation_id??null),i=this.getTrackedInvocation(Number(o.lastInsertRowid));return TE(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(`
1648
1648
  SELECT * FROM tracked_invocation
1649
1649
  WHERE parent_invocation_id IN (${r})
1650
1650
  AND ended_at IS NOT NULL
1651
1651
  AND ended_at >= ?
1652
1652
  ORDER BY started_at ASC, id ASC
1653
1653
  `).all(...e,n)}finishTrackedInvocation(e,n){return this.db.transaction(()=>{let r=n.ended_at??H();if(this.stmts.finishTrackedInvocation.run(n.status,r,n.exit_code??null,n.signal??null,It(n.result_summary),It(n.error),n.team_chat_log_id??null,It(n.meta),It(n.config_warnings),r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return nl(this.db,o),o})()}reclaimTrackedInvocationIfUnchanged(e,n,r){return this.db.transaction(()=>{let s=r.ended_at??H();if(this.stmts.reclaimTrackedInvocationIfUnchanged.run(r.status,s,r.exit_code??null,r.signal??null,It(r.result_summary),It(r.error),r.team_chat_log_id??null,It(r.meta),It(r.config_warnings),s,e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let i=this.getTrackedInvocation(e);return nl(this.db,i),i})()}heartbeatTrackedInvocation(e,n=H()){return this.db.transaction(()=>{if(this.stmts.heartbeatTrackedInvocation.run(n,e).changes!==1)return null;let s=this.getTrackedInvocation(e);return vE(this.db,s,n),s})()}updateTrackedInvocationRequestPayload(e,n){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(n,e).changes!==1?null:(SE(this.db,e,n),this.getTrackedInvocation(e)))()}linkTrackedInvocationMessage(e,n){return this.db.transaction(()=>this.stmts.linkTrackedInvocationChatLog.run(n,e).changes!==1?null:(bE(this.db,e,vn(n)),this.getTrackedInvocation(e)))()}abortTrackedInvocationAndTerminalizeMessage(e,n,r){return this.db.transaction(()=>{let s=H();if(this.stmts.abortTrackedInvocationIfUnchanged.run(s,It(r),e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let i=this.getTrackedInvocation(e);return nl(this.db,i),i.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(i.team_chat_log_id,r),i})()}terminalizeLinkedChatMessage(e,n){let r=this.stmts.getTeamChatLogById.get(e);r===void 0||r.status!=="running"||this.stmts.terminalizeTeamChatLogIfRunning.run("error",n,e).changes!==1||el(this.db,e,{root_teamfile:r.root_teamfile,sender_teamfile:r.sender_teamfile,sender_alias:r.sender_alias,receiver_teamfile:r.receiver_teamfile,receiver_alias:r.receiver_alias,message:r.message,response:null,origin:r.origin,status:"error",error_detail:n,truncated:r.truncated,created_at:H()})}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=H()){return this.db.transaction(()=>{if(this.stmts.claimTrackedInvocationNotification.run(n,r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return wE(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)}heartbeatAgentInflight(e,n,r=H()){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:pE(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&&Ko(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&&Ko(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
1654
- 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&&Ko(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&&(Ko(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Go,Jo(e,n),Vo);return r===void 0?null:aE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&Fu(this.db,r,!0),this.stmts.upsertRuntimeState.run(Go,Jo(e.teamfile,e.alias),Vo,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&hE(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(Go,Jo(e,n),Vo,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(Go,Jo(e,n),Vo);return o.changes===1&&Fu(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:YO(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,o=H()){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i!==null&&!zO(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:xE(),holder_pid:process.pid,holder_host:Wu(),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,H(),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,H())}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,H());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,H(),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??H(),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,H());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,H()).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,H()),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,H());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(H(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=H();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??H());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,H())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,H())}}});var kt=HN(ze=>{"use strict";function Ns(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 PE(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 Sn(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 Hu(t,e,n){let r=" ".repeat(Math.max(0,e-Sn(t)));return n?r+t:t+r}function FE(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 eD(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(Sn(t)<=e)return t;let r=Sn(n)>e?"\u2026":n,s=Sn(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=Sn(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function nD(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 UE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function rD(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=FE(n);r.headers!==void 0&&Ns(r.headers);for(let s of r.rows.map(Ns))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,UE(o)?.places??0)})}return e}ze.measureDecimalPlaces=jE;function WE(t,e,n){let r=rD(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 BE(t,e){let n=UE(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 HE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=nD(e),o=PE(n),i=WE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=FE(c);d.headers!==void 0&&Ns(d.headers).forEach((u,f)=>{l(f,Sn(u))});for(let u of d.rows.map(Ns))u.forEach((f,m)=>{let p=o[m]==="decimal"?BE(f,i[m]??0)??f:f;l(m,Sn(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}ze.measureColumns=HE;function sD(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 XE(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=sD(i),u=PE(r),f=eD(l),m=WE([t],u,c),p=e??HE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Ns);n!==void 0&&_.unshift(Ns(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 v=p[w]||0,b=s&&v>0&&(w!==y||o)?tD(T,v,f):T;if(u[w]==="decimal"){let k=n!==void 0&&E===0?null:BE(T,m[w]??0),L=Hu(k!==null&&Sn(k)<=v?k:b,v,!0);return w===y&&k!==null?L.trimEnd():L}return u[w]==="right"?Hu(b,v,!0):w===y?b:Hu(b,v,!1)}).join(" ")}).join(`
1654
+ 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&&Ko(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&&(Ko(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Go,Jo(e,n),Vo);return r===void 0?null:aE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&Fu(this.db,r,!0),this.stmts.upsertRuntimeState.run(Go,Jo(e.teamfile,e.alias),Vo,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&hE(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(Go,Jo(e,n),Vo,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(Go,Jo(e,n),Vo);return o.changes===1&&Fu(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:YO(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,o=H()){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i!==null&&!zO(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:LE(),holder_pid:process.pid,holder_host:Wu(),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,H(),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,H())}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,H());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,H(),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??H(),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,H());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,H()).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,H()),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,H());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(H(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=H();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??H());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,H())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,H())}}});var kt=HN(ze=>{"use strict";function Ns(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 PE(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 Sn(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 Hu(t,e,n){let r=" ".repeat(Math.max(0,e-Sn(t)));return n?r+t:t+r}function FE(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 eD(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(Sn(t)<=e)return t;let r=Sn(n)>e?"\u2026":n,s=Sn(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=Sn(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function nD(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 UE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function rD(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=FE(n);r.headers!==void 0&&Ns(r.headers);for(let s of r.rows.map(Ns))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,UE(o)?.places??0)})}return e}ze.measureDecimalPlaces=jE;function WE(t,e,n){let r=rD(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 BE(t,e){let n=UE(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 HE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=nD(e),o=PE(n),i=WE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=FE(c);d.headers!==void 0&&Ns(d.headers).forEach((u,f)=>{l(f,Sn(u))});for(let u of d.rows.map(Ns))u.forEach((f,m)=>{let p=o[m]==="decimal"?BE(f,i[m]??0)??f:f;l(m,Sn(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}ze.measureColumns=HE;function sD(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 XE(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=sD(i),u=PE(r),f=eD(l),m=WE([t],u,c),p=e??HE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Ns);n!==void 0&&_.unshift(Ns(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 v=p[w]||0,b=s&&v>0&&(w!==y||o)?tD(T,v,f):T;if(u[w]==="decimal"){let k=n!==void 0&&E===0?null:BE(T,m[w]??0),x=Hu(k!==null&&Sn(k)<=v?k:b,v,!0);return w===y&&k!==null?x.trimEnd():x}return u[w]==="right"?Hu(b,v,!0):w===y?b:Hu(b,v,!1)}).join(" ")}).join(`
1655
1655
  `);return h===""||d===""?h:`${d}${h.split(`
1656
1656
  `).join(`
1657
1657
  ${d}`)}`}ze.renderGrid=XE;function qE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l}={}){return XE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l})}function oD(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l,stream:c=process.stdout}={}){let d=qE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l});d&&c.write(`${d}
1658
1658
  `)}ze.formatTable=qE;ze.printTable=oD;function $E(t){return t instanceof Date?t.getTime():typeof t=="number"?t:typeof t=="string"&&t.trim()?Date.parse(t):NaN}function iD(t,{now:e=Date.now()}={}){let n=$E(e);if(!Number.isFinite(n))throw new TypeError("now must be a valid timestamp");let r=$E(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":""}`}ze.formatRelativeTime=iD;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`}ze.formatCount=aD;var Xu=[["w",604800],["d",86400],["h",3600],["m",60],["s",1]];function lD(t,{maxUnit:e="w",style:n="spaced"}={}){if(typeof t!="number"||!Number.isFinite(t))return"unknown";let r=Xu.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=Xu.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}`:`${Kt(m)}${u}`;l.push({text:p,zero:!1}),d=!0}else d&&l.push({text:`${Kt(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 Xu.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(" ")}ze.formatDuration=lD;function GE(t){return t===void 0?new Date:t instanceof Date?t:typeof t=="number"||typeof t=="string"?new Date(t):new Date(NaN)}function Kt(t){return String(t).padStart(2,"0")}function VE(t){let e=GE(t);return Number.isNaN(e.getTime())?"unknown":`${Kt(e.getHours())}:${Kt(e.getMinutes())}:${Kt(e.getSeconds())}`}ze.formatClock=VE;function cD(t){let e=GE(t);return Number.isNaN(e.getTime())?"unknown":`${`${e.getFullYear()}-${Kt(e.getMonth()+1)}-${Kt(e.getDate())}`} ${VE(e)}`}ze.formatLocalTimestamp=cD;function dD(t){return typeof t=="number"&&Number.isFinite(t)?`${Math.round(t*100)}%`:"?%"}ze.formatPercent=dD;function uD(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)||Sn(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)}`}ze.formatBar=uD;function fD(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=`${Kt(r)}:${Kt(s)}:${Kt(e)}`;return n>0?`${n}d ${o}`:o}ze.formatTimer=fD;function mD(t){return(t==null?"":String(t)).replace(/[\x00-\x1f\x7f-\x9f]/gu,n=>n===`
1659
1659
  `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}ze.escapeCell=mD});var QE={};me(QE,{defaultDbPath:()=>qu,describeStateLocation:()=>Yo,isSlowWslMount:()=>zE,lmctlNextHome:()=>YE,resolveDbPath:()=>Ge,warnIfSlowDbPath:()=>Gu});import{platform as JE}from"node:os";import{homedir as pD}from"node:os";import{join as KE}from"node:path";function YE(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:KE(t.HOME||pD(),hD)}function qu(t=process.env){return KE(YE(t),_D)}function Ge(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 Yo(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 zE(t,e=JE()){return e!=="linux"?!1:t.startsWith("/mnt/c/")||t==="/mnt/c"}function Gu(t,e=process.stderr,n=JE()){zE(t,n)&&e.write(`warning: DB on /mnt/c is slow; consider moving to ~/.lmctl/state.db (set LMCTL_DB or use --db)
1660
- `)}var hD,_D,bn=x(()=>{"use strict";hD=".lmctl",_D="state.db"});function In(t){return(t.env??process.env).LMCTL_NON_INTERACTIVE==="1"}function ol(t){return{...t,env:{...t.env??process.env,LMCTL_NON_INTERACTIVE:"1"}}}function Fe(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:Ge(void 0,{...process.env,...t.env})}async function j(t,e){if(t.dal!==void 0)return e(t.dal);let n=qe({path:Fe(t)});try{return await e(n)}finally{n.close()}}function le(t,e,n=["--json"]){let r=new Set(e),s=new Set(n),o=[],i={};for(let a=0;a<t.length;a+=1){let l=t[a];if(!l.startsWith("--")){o.push(l);continue}if(s.has(l)){i[l]=!0;continue}if(!r.has(l))return{positionals:o,flags:i,error:`unknown flag: ${l}`};let c=t[a+1];if(c===void 0||c.startsWith("--"))return{positionals:o,flags:i,error:`missing value for ${l}`};i[l]=c,a+=1}return{positionals:o,flags:i}}function V(t,e){let n=t.flags[e];return typeof n=="string"?n:void 0}function z(t,e){return t.flags[e]===!0}function ee(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
1660
+ `)}var hD,_D,bn=L(()=>{"use strict";hD=".lmctl",_D="state.db"});function In(t){return(t.env??process.env).LMCTL_NON_INTERACTIVE==="1"}function ol(t){return{...t,env:{...t.env??process.env,LMCTL_NON_INTERACTIVE:"1"}}}function Fe(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:Ge(void 0,{...process.env,...t.env})}async function j(t,e){if(t.dal!==void 0)return e(t.dal);let n=qe({path:Fe(t)});try{return await e(n)}finally{n.close()}}function le(t,e,n=["--json"]){let r=new Set(e),s=new Set(n),o=[],i={};for(let a=0;a<t.length;a+=1){let l=t[a];if(!l.startsWith("--")){o.push(l);continue}if(s.has(l)){i[l]=!0;continue}if(!r.has(l))return{positionals:o,flags:i,error:`unknown flag: ${l}`};let c=t[a+1];if(c===void 0||c.startsWith("--"))return{positionals:o,flags:i,error:`missing value for ${l}`};i[l]=c,a+=1}return{positionals:o,flags:i}}function V(t,e){let n=t.flags[e];return typeof n=="string"?n:void 0}function z(t,e){return t.flags[e]===!0}function ee(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
1661
1661
  `)}function D(t,e){return t.stderr.write(`error: ${e}
1662
1662
  `),1}function Wr(){return(0,tT.formatClock)()}function zo(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 gD(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 yD(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:!gD(e)}function ED(t){if(t==null)return!0;if(typeof t!="object")return!1;let e=t;return e.kind==="delta"?typeof e.chunk=="string"&&e.chunk.length>0:e.kind==="progress"&&e.event&&typeof e.event=="object"?ZE(e.event):ZE(e)}function ZE(t){let e=t.kind;return e==="text"||e==="tool_use"||e==="tool_result"?!0:e==="thinking"||e==="system"||e==="api_retry"||e==="warning"?!1:e==="other"}function nT(t,e){if(yD(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+`
1663
1663
  `)},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+`)
1664
1664
  `;t.stderr.write(u)}},s);return a.unref(),{poke:l=>{ED(l)&&(o=Date.now(),i=!1)},stop:()=>{clearInterval(a)}}}function At(t,e){let n=e instanceof Error?e.message:String(e);return t.stderr.write(`internal error: ${n}
1665
- `),2}function xs(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}function il(t){if(t.stdout!==process.stdout||eT)return;eT=!0;let e=n=>{throw n.code==="EPIPE"&&process.exit(0),process.stdout.off("error",e),n};process.stdout.on("error",e)}var tT,eT,ce=x(()=>{"use strict";Ft();tT=Ct(kt(),1);bn();eT=!1});function Br(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var al=x(()=>{"use strict"});import{randomUUID as bD}from"node:crypto";import{chmodSync as sT,mkdirSync as ID,readdirSync as kD,statSync as AD,unlinkSync as RD,writeFileSync as ND}from"node:fs";import{homedir as xD,tmpdir as LD}from"node:os";import{join as ei}from"node:path";function Ju(t){return Br(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function ti(t){return Ju(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(PD,"$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 FD(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?ei(LD(),`lmctl-test-${process.pid}`,".lmctl"):ei(process.env.HOME||xD(),".lmctl"));return ei(t,"provider-errors")}function UD(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)}
1665
+ `),2}function Ls(t){if(t===void 0)return null;let e=Number.parseInt(t,10);return Number.isInteger(e)&&e>0?e:null}function il(t){if(t.stdout!==process.stdout||eT)return;eT=!0;let e=n=>{throw n.code==="EPIPE"&&process.exit(0),process.stdout.off("error",e),n};process.stdout.on("error",e)}var tT,eT,ce=L(()=>{"use strict";Ft();tT=Ct(kt(),1);bn();eT=!1});function Br(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var al=L(()=>{"use strict"});import{randomUUID as bD}from"node:crypto";import{chmodSync as sT,mkdirSync as ID,readdirSync as kD,statSync as AD,unlinkSync as RD,writeFileSync as ND}from"node:fs";import{homedir as LD,tmpdir as xD}from"node:os";import{join as ei}from"node:path";function Ju(t){return Br(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function ti(t){return Ju(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(PD,"$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 FD(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?ei(xD(),`lmctl-test-${process.pid}`,".lmctl"):ei(process.env.HOME||LD(),".lmctl"));return ei(t,"provider-errors")}function UD(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)}
1666
1666
  \u2026 ${o} characters of ${n} \u2026
1667
1667
  ${t.slice(-s)}`}function jD(t,e){try{let n=kD(t).filter(s=>$D.test(s)).sort().map(s=>{let o=ei(t,s);return{path:o,size:AD(o).size}}),r=n.reduce((s,o)=>s+o.size,0);for(let s=0;s<n.length&&(n.length-s>DD||r>MD);s++){let o=n[s];o.path!==e&&(RD(o.path),r-=o.size)}}catch{}}function WD(t,e){let n=FD(),r=ei(n,`stderr-${Date.now()}-${process.pid}-${bD()}.log`);try{ID(n,{recursive:!0,mode:448}),sT(n,448);let s=`[${new Date().toISOString()}] provider=${e}
1668
1668
  ${UD(t,OD,"provider output not saved")}
@@ -1676,76 +1676,76 @@ ${UD(t,OD,"provider output not saved")}
1676
1676
  `).split(/\n[ \t]*\n/,1)[0]??"").split(`
1677
1677
  `).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 iT(t){return Ju(t)}function aT(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}
1678
1678
  \u2026 ${s} characters of provider stderr dropped \u2026
1679
- ${r}`}}}function Ls(t,e){return e===""?t:`${t}:${e.includes(`
1679
+ ${r}`}}}function xs(t,e){return e===""?t:`${t}:${e.includes(`
1680
1680
  `)?`
1681
- `:" "}${e}`}var CD,OD,DD,MD,$D,PD,_t=x(()=>{"use strict";al();CD=500,OD=1e6,DD=50,MD=20*1024*1024,$D=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,PD=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as dT,appendFileSync as qD,mkdirSync as GD,existsSync as UK,readdirSync as jK,unlinkSync as WK}from"node:fs";import{join as dl,dirname as VD}from"node:path";import{homedir as JD}from"node:os";function Yu(){return dl(JD(),".lmctl")}function zu(){Cs=!0,process.env.LMCTL_DEBUG="1"}function uT(){return{cliDebug:Cs,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function fT(t){Cs=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ge(){if(Cs||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-cT>=KD&&(lT=ZD(),cT=t),lT}function ni(){return Cs||process.env.LMCTL_DEBUG==="1"}function YD(){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 Ku(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 ti(t);if(Array.isArray(t))return t.map(r=>Ku(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]=Ku(o,s,n);return n.delete(t),r}return t}function zD(t){return Ku(t)}function Ue(t,e){if(e?.verbose){if(!Cs)return}else if(!e?.always&&!ge())return;try{QD();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,...zD(t)};qD(cl,JSON.stringify(n)+`
1681
+ `:" "}${e}`}var CD,OD,DD,MD,$D,PD,_t=L(()=>{"use strict";al();CD=500,OD=1e6,DD=50,MD=20*1024*1024,$D=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,PD=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as dT,appendFileSync as qD,mkdirSync as GD,existsSync as UK,readdirSync as jK,unlinkSync as WK}from"node:fs";import{join as dl,dirname as VD}from"node:path";import{homedir as JD}from"node:os";function Yu(){return dl(JD(),".lmctl")}function zu(){Cs=!0,process.env.LMCTL_DEBUG="1"}function uT(){return{cliDebug:Cs,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function fT(t){Cs=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ge(){if(Cs||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-cT>=KD&&(lT=ZD(),cT=t),lT}function ni(){return Cs||process.env.LMCTL_DEBUG==="1"}function YD(){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 Ku(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 ti(t);if(Array.isArray(t))return t.map(r=>Ku(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]=Ku(o,s,n);return n.delete(t),r}return t}function zD(t){return Ku(t)}function Ue(t,e){if(e?.verbose){if(!Cs)return}else if(!e?.always&&!ge())return;try{QD();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,...zD(t)};qD(cl,JSON.stringify(n)+`
1682
1682
  `)}catch{}}function QD(){if(!cl){let e=YD().slice(0,13).replace("T","-");cl=dl(Yu(),`debug-${e}.log`)}GD(VD(cl),{recursive:!0})}function Ve(...t){Ue({event:"legacy",msg:t.join(" ")})}function Me(...t){Ue({event:"legacy",msg:t.join(" ")},{verbose:!0})}function F(t){Ue(t,{always:!0})}function ZD(){return eM()||tM()}function eM(){try{let t=dT(dl(Yu(),"config.toml"),"utf-8");for(let e of t.split(`
1683
- `)){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=dT(dl(Yu(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var Cs,lT,cT,KD,cl,oe=x(()=>{"use strict";_t();Cs=!1,lT=!1,cT=0,KD=5e3;cl=null});import{openSync as TM,closeSync as wM,fstatSync as vM,readSync as SM,constants as gT}from"node:fs";import{dirname as bM,join as ul}from"node:path";import{createHash as IM}from"node:crypto";function ef(t){if(!Lr(t.catalog)||!Cr(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=wT(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(!yT(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&&!yT(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 ET(t){let e=TM(t,gT.O_RDONLY|gT.O_NONBLOCK);try{let n=vM(e);if(!n.isFile()||n.size>kM)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=SM(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{wM(e)}}function tf(t,e=ul(bM(t),"aliases.json")){let n=ET(t),r=ET(e),s;try{s=TT(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=TT(r),i={catalog:s,aliases:o,source:"pinned",generatedAt:s?.generated_at||null,sha256:IM("sha256").update(n).update(r).digest("hex")};return ef(i),i}function Os(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 ef(o),o})():null}finally{t.pragma("busy_timeout = "+e)}}function nf(t,e,n={}){ef(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(wT(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 rf(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=Os(t),o=Zu.get(t),i=o&&o.hash===s?.sha256?o.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=i&&n-i<Ss(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(tf(ul(r.LMCTL_PRICE_DATA,"model_list.json"))):Ot({cacheDir:r.LMCTL_HOME?ul(r.LMCTL_HOME,"cache","lmprice"):r.HOME?ul(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:Ss(r)})),l,c;try{c=await(e.budgetMs===void 0?a():Promise.race([a(),new Promise(f=>{l=setTimeout(()=>f(null),e.budgetMs)})]))}finally{clearTimeout(l)}if(Zu.set(t,{hash:s?.sha256??null,at:n}),!c?.catalog||!c.aliases||!c.sha256||c.refreshFailed&&(s||c.source!=="bundled"))return{status:"unavailable",snapshot:s};let d=nf(t,c,{now:n}),u=Os(t);return Zu.set(t,{hash:u?.sha256??null,at:n}),{status:d,snapshot:u}}async function fl(t,e){try{return(await rf(t,{env:e,budgetMs:900})).snapshot??ri}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return ri;try{return Os(t)??ri}catch{return ri}}}async function sf(t){if(t.dal)return fl(t.dal.db,t.env);let e;try{return e=qe({path:Fe(t),recover:!1}),await fl(e.db,t.env)}catch{return ri}finally{try{e?.close()}catch{}}}var ri,wT,yT,kM,TT,Zu,ml=x(()=>{"use strict";En();Ft();ce();ri={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},wT=t=>t.record_id??t.source+":"+t.source_model_id,yT=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;kM=64*1024*1024;TT=t=>JSON.parse(t.replace(/^\uFEFF/,""));Zu=new WeakMap});function An(t){return t!=="gemini"}function pl(t){if(!An(t))throw new Error(nr)}var nr,Ds=x(()=>{"use strict";nr="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function vT(t){if(t.length===0||!t.startsWith("---"))throw new Yt("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
1684
- `);if(e[0]!=="---")throw new Yt("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 Yt(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!AM.has(c))throw new Yt(`unknown frontmatter key "${c}" \u2014 allowed keys: ${hl.join(", ")}`);n[c]=d}if(r===-1)throw new Yt("frontmatter not closed (missing trailing `---` on its own line)");for(let i of hl)if(n[i]===void 0)throw new Yt(`missing required frontmatter key "${i}" \u2014 required: ${hl.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 hl,AM,Yt,ST=x(()=>{"use strict";hl=["title","description","members"],AM=new Set(hl),Yt=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function si(t){return of.has(t)}var of,_l=x(()=>{"use strict";of=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as RM,writeFileSync as u8,renameSync as f8,existsSync as IT}from"node:fs";import{basename as NM,resolve as Ms,dirname as af}from"node:path";function xM(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 LM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function CM(t){return/^\s*_SESSION_\s+\S/.test(t)}function OM(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Ne(t){return/\.(?:lmctl|lmc)$/i.test(t)}function oi(t){return NM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Se(t){let e=RM(t,"utf-8"),n=af(Ms(t)),r=Rn(e,oi(t),{baseDir:n,sourcePath:Ms(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Ms(n,s.sessiondir));return r}function Rn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1683
+ `)){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=dT(dl(Yu(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var Cs,lT,cT,KD,cl,oe=L(()=>{"use strict";_t();Cs=!1,lT=!1,cT=0,KD=5e3;cl=null});import{openSync as TM,closeSync as wM,fstatSync as vM,readSync as SM,constants as gT}from"node:fs";import{dirname as bM,join as ul}from"node:path";import{createHash as IM}from"node:crypto";function ef(t){if(!xr(t.catalog)||!Cr(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=wT(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(!yT(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&&!yT(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 ET(t){let e=TM(t,gT.O_RDONLY|gT.O_NONBLOCK);try{let n=vM(e);if(!n.isFile()||n.size>kM)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=SM(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{wM(e)}}function tf(t,e=ul(bM(t),"aliases.json")){let n=ET(t),r=ET(e),s;try{s=TT(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=TT(r),i={catalog:s,aliases:o,source:"pinned",generatedAt:s?.generated_at||null,sha256:IM("sha256").update(n).update(r).digest("hex")};return ef(i),i}function Os(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 ef(o),o})():null}finally{t.pragma("busy_timeout = "+e)}}function nf(t,e,n={}){ef(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(wT(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 rf(t,e={}){let n=e.now??Date.now(),r={...process.env,...e.env},s=Os(t),o=Zu.get(t),i=o&&o.hash===s?.sha256?o.at:Date.parse(s?.fetchedAt??"");if(!e.force&&s&&n>=i&&n-i<Ss(r))return{status:"unchanged",snapshot:s};let a=e.load??(()=>r.LMCTL_PRICE_DATA?Promise.resolve(tf(ul(r.LMCTL_PRICE_DATA,"model_list.json"))):Ot({cacheDir:r.LMCTL_HOME?ul(r.LMCTL_HOME,"cache","lmprice"):r.HOME?ul(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:Ss(r)})),l,c;try{c=await(e.budgetMs===void 0?a():Promise.race([a(),new Promise(f=>{l=setTimeout(()=>f(null),e.budgetMs)})]))}finally{clearTimeout(l)}if(Zu.set(t,{hash:s?.sha256??null,at:n}),!c?.catalog||!c.aliases||!c.sha256||c.refreshFailed&&(s||c.source!=="bundled"))return{status:"unavailable",snapshot:s};let d=nf(t,c,{now:n}),u=Os(t);return Zu.set(t,{hash:u?.sha256??null,at:n}),{status:d,snapshot:u}}async function fl(t,e){try{return(await rf(t,{env:e,budgetMs:900})).snapshot??ri}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return ri;try{return Os(t)??ri}catch{return ri}}}async function sf(t){if(t.dal)return fl(t.dal.db,t.env);let e;try{return e=qe({path:Fe(t),recover:!1}),await fl(e.db,t.env)}catch{return ri}finally{try{e?.close()}catch{}}}var ri,wT,yT,kM,TT,Zu,ml=L(()=>{"use strict";En();Ft();ce();ri={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},wT=t=>t.record_id??t.source+":"+t.source_model_id,yT=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;kM=64*1024*1024;TT=t=>JSON.parse(t.replace(/^\uFEFF/,""));Zu=new WeakMap});function An(t){return t!=="gemini"}function pl(t){if(!An(t))throw new Error(nr)}var nr,Ds=L(()=>{"use strict";nr="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function vT(t){if(t.length===0||!t.startsWith("---"))throw new Yt("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
1684
+ `);if(e[0]!=="---")throw new Yt("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 Yt(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!AM.has(c))throw new Yt(`unknown frontmatter key "${c}" \u2014 allowed keys: ${hl.join(", ")}`);n[c]=d}if(r===-1)throw new Yt("frontmatter not closed (missing trailing `---` on its own line)");for(let i of hl)if(n[i]===void 0)throw new Yt(`missing required frontmatter key "${i}" \u2014 required: ${hl.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 hl,AM,Yt,ST=L(()=>{"use strict";hl=["title","description","members"],AM=new Set(hl),Yt=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function si(t){return of.has(t)}var of,_l=L(()=>{"use strict";of=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","dsh","hermes","pi","miniplayer","muse","ClaudeMock"])});import{readFileSync as RM,writeFileSync as u8,renameSync as f8,existsSync as IT}from"node:fs";import{basename as NM,resolve as Ms,dirname as af}from"node:path";function LM(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 xM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function CM(t){return/^\s*_SESSION_\s+\S/.test(t)}function OM(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Ne(t){return/\.(?:lmctl|lmc)$/i.test(t)}function oi(t){return NM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Se(t){let e=RM(t,"utf-8"),n=af(Ms(t)),r=Rn(e,oi(t),{baseDir:n,sourcePath:Ms(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Ms(n,s.sessiondir));return r}function Rn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1685
1685
  `);o=l>=0?o.slice(l+1):""}let i=null;if(o.startsWith("---"))try{i=vT(o)}catch(l){if(l instanceof Yt)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
1686
- `);for(let l=0;l<a.length;l++){let c=a[l],d=l+1;if(CM(c))throw new Error(`line ${d}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(OM(c)||!LM(c))continue;let u=xM(c);for(let m of Object.keys(u))if(!bT.includes(m))throw new Error(`line ${d}: unknown key "${m}" on _MEMBER_ line: ${c.trim()}
1687
- allowed keys: ${bT.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 ii(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()===lf.toLowerCase());r.length>1&&n.push({field:lf,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?Ms(e,o.teamfile):Ms(o.teamfile);if(!IT(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=Se(a),c=$s(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 of.has(o.provider)?An(o.provider)||n.push({field:o.alias,message:nr}):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 $s(t){return t.members.find(e=>e.alias.toLowerCase()===lf.toLowerCase())}function cf(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=Ms(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),!IT(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=Se(o),l=$s(a);if(!l)throw new Error(`Team at ${o} has no lead session`);if(l.teamfile)return cf(l,af(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||af(o),alias:t.alias,resolvedFrom:o,model:l.model,effort:l.effort}}function gl(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var lf,bT,je=x(()=>{"use strict";Ds();ST();_l();lf="Lead";bT=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as DM}from"node:crypto";import{existsSync as kT,readFileSync as AT,realpathSync as MM}from"node:fs";import{dirname as $M,resolve as RT}from"node:path";function ke(t,e){let n=RT(t);if(kT(n))return MM(n);if(e!==void 0){let r=FM(t,n,e);if(r!==null)return r}return n}function El(t,e){let n=$M(e),r=Rn(t,oi(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=RT(n,s.sessiondir));return r}function zt(t,e,n=r=>{process.stderr.write(`warning: ${r}
1688
- `)}){let r=ke(t,PM(e)?e:void 0);if(kT(r)){let o=AT(r,"utf8"),i=El(o,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&UM(i)&&WM(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 PM(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function FM(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function UM(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=df)}function ai(t,e,n){let r=ke(e),s=n.members.filter(o=>o.teamfile===void 0&&o.session!==void 0&&o.session.length>=df);if(s.length!==0)for(let o of t.listRootTeams()){let i,a;try{if(i=ke(o.teamfile_path),i===r)continue;a=AT(i,"utf8")}catch(c){if(jM(c))continue;throw c}let l=El(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)>=df);if(d!==void 0)throw new yl(`sessionid ownership conflict: ${r}:${c.alias} and ${i}:${d.alias} both use sessionid "${c.session}"`)}}}function jM(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function WM(t,e,n,r,s){try{ai(t,e,n)}catch(i){if(!(i instanceof yl))throw i;s(`${i.message}; skipping automatic registration`);return}let o={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:DM("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(o)}var df,yl,Qt=x(()=>{"use strict";je();df=5,yl=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as BM}from"node:crypto";import{closeSync as HM,openSync as XM,readFileSync as xT,statSync as qM,unlinkSync as uf,writeFileSync as GM}from"node:fs";function LT(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function CT(t){let e;try{e=JSON.parse(xT(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:NT(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 NT(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function NT(t){try{return Date.now()-qM(t).mtimeMs<3e5}catch{return!1}}function ff(t,e){return CT(LT(t,e))}function OT(t,e){let n=LT(t,e),r=JSON.stringify({pid:process.pid,token:BM()});for(let s=0;s<2;s+=1)try{let o=XM(n,"wx");try{GM(o,r)}catch(i){throw uf(n),i}finally{HM(o)}return()=>{try{xT(n,"utf8")===r&&uf(n)}catch(i){if(i.code!=="ENOENT")throw i}}}catch(o){if(o.code!=="EEXIST")throw o;if(CT(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{uf(n)}catch(i){if(i.code!=="ENOENT")throw i}}throw new Error(`${e}: could not acquire seed marker`)}var mf=x(()=>{"use strict"});import{existsSync as VM}from"node:fs";import{dirname as DT}from"node:path";function pf(t){return JM.test(t)||KM.test(t)||YM.test(t)}function li(t){return Tl.test(t)}function Nn(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!Ne(n)||!Tl.test(r)?null:{teamfile:n,alias:r}}function We(t,e,n){if(!Ne(t))throw new _e(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!li(e))throw new _e(`lmctl: "${e}" is not a valid alias (must match ${Tl.source}).`);let r=ke(t,n);if(n===void 0&&!VM(r))throw new _e(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=zt(r,n)}catch(i){throw new _e(`lmctl: ${t}: ${i instanceof Error?i.message:String(i)}`)}if(s.parseErrors.length>0)throw new _e(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let o=gl(s,e);if(o===void 0){let i=s.members.map(a=>a.alias).join(", ")||"(none)";throw new _e(`lmctl: alias "${e}" not found in ${t}.
1686
+ `);for(let l=0;l<a.length;l++){let c=a[l],d=l+1;if(CM(c))throw new Error(`line ${d}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(OM(c)||!xM(c))continue;let u=LM(c);for(let m of Object.keys(u))if(!bT.includes(m))throw new Error(`line ${d}: unknown key "${m}" on _MEMBER_ line: ${c.trim()}
1687
+ allowed keys: ${bT.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 ii(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()===lf.toLowerCase());r.length>1&&n.push({field:lf,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?Ms(e,o.teamfile):Ms(o.teamfile);if(!IT(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=Se(a),c=$s(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 of.has(o.provider)?An(o.provider)||n.push({field:o.alias,message:nr}):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 $s(t){return t.members.find(e=>e.alias.toLowerCase()===lf.toLowerCase())}function cf(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=Ms(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),!IT(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=Se(o),l=$s(a);if(!l)throw new Error(`Team at ${o} has no lead session`);if(l.teamfile)return cf(l,af(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||af(o),alias:t.alias,resolvedFrom:o,model:l.model,effort:l.effort}}function gl(t,e){return t.members.find(n=>n.alias===e)??t.members.find(n=>n.alias.toLowerCase()===e.toLowerCase())}var lf,bT,je=L(()=>{"use strict";Ds();ST();_l();lf="Lead";bT=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as DM}from"node:crypto";import{existsSync as kT,readFileSync as AT,realpathSync as MM}from"node:fs";import{dirname as $M,resolve as RT}from"node:path";function ke(t,e){let n=RT(t);if(kT(n))return MM(n);if(e!==void 0){let r=FM(t,n,e);if(r!==null)return r}return n}function El(t,e){let n=$M(e),r=Rn(t,oi(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=RT(n,s.sessiondir));return r}function zt(t,e,n=r=>{process.stderr.write(`warning: ${r}
1688
+ `)}){let r=ke(t,PM(e)?e:void 0);if(kT(r)){let o=AT(r,"utf8"),i=El(o,r);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(r)===null&&UM(i)&&WM(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 PM(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function FM(t,e,n){let r=n.getRootTeam(t)??n.getRootTeam(e);return r===null?null:r.teamfile_path}function UM(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=df)}function ai(t,e,n){let r=ke(e),s=n.members.filter(o=>o.teamfile===void 0&&o.session!==void 0&&o.session.length>=df);if(s.length!==0)for(let o of t.listRootTeams()){let i,a;try{if(i=ke(o.teamfile_path),i===r)continue;a=AT(i,"utf8")}catch(c){if(jM(c))continue;throw c}let l=El(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)>=df);if(d!==void 0)throw new yl(`sessionid ownership conflict: ${r}:${c.alias} and ${i}:${d.alias} both use sessionid "${c.session}"`)}}}function jM(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function WM(t,e,n,r,s){try{ai(t,e,n)}catch(i){if(!(i instanceof yl))throw i;s(`${i.message}; skipping automatic registration`);return}let o={teamfile_path:e,name:n.name,raw_text:r,raw_sha256:DM("sha256").update(r).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(o)}var df,yl,Qt=L(()=>{"use strict";je();df=5,yl=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{randomUUID as BM}from"node:crypto";import{closeSync as HM,openSync as XM,readFileSync as LT,statSync as qM,unlinkSync as uf,writeFileSync as GM}from"node:fs";function xT(t,e){return`${t}.seed-${e.toLowerCase()}.lock`}function CT(t){let e;try{e=JSON.parse(LT(t,"utf8"))}catch(r){return r.code==="ENOENT"?!1:NT(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 NT(t);try{return process.kill(n,0),!0}catch(r){return r.code!=="ESRCH"}}function NT(t){try{return Date.now()-qM(t).mtimeMs<3e5}catch{return!1}}function ff(t,e){return CT(xT(t,e))}function OT(t,e){let n=xT(t,e),r=JSON.stringify({pid:process.pid,token:BM()});for(let s=0;s<2;s+=1)try{let o=XM(n,"wx");try{GM(o,r)}catch(i){throw uf(n),i}finally{HM(o)}return()=>{try{LT(n,"utf8")===r&&uf(n)}catch(i){if(i.code!=="ENOENT")throw i}}}catch(o){if(o.code!=="EEXIST")throw o;if(CT(n))throw new Error(`${e}: seed already in progress; wait for it to finish`);try{uf(n)}catch(i){if(i.code!=="ENOENT")throw i}}throw new Error(`${e}: could not acquire seed marker`)}var mf=L(()=>{"use strict"});import{existsSync as VM}from"node:fs";import{dirname as DT}from"node:path";function pf(t){return JM.test(t)||KM.test(t)||YM.test(t)}function li(t){return Tl.test(t)}function Nn(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),n=t.slice(0,e),r=t.slice(e+1);return!Ne(n)||!Tl.test(r)?null:{teamfile:n,alias:r}}function We(t,e,n){if(!Ne(t))throw new _e(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl or .lmc extension).`);if(!li(e))throw new _e(`lmctl: "${e}" is not a valid alias (must match ${Tl.source}).`);let r=ke(t,n);if(n===void 0&&!VM(r))throw new _e(`lmctl: teamfile not found: ${t}`,"not_found");let s;try{s=zt(r,n)}catch(i){throw new _e(`lmctl: ${t}: ${i instanceof Error?i.message:String(i)}`)}if(s.parseErrors.length>0)throw new _e(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let o=gl(s,e);if(o===void 0){let i=s.members.map(a=>a.alias).join(", ")||"(none)";throw new _e(`lmctl: alias "${e}" not found in ${t}.
1689
1689
  Known aliases: ${i}`,"not_found")}if(o.teamfile!==void 0){let i=cf(o,DT(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(ff(r,o.alias))throw new _e(`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=>ff(r,i.alias))?new _e(`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 _e(`lmctl: alias "${o.alias}" in ${t} has no session ID yet.
1690
1690
  Run: lmctl seed ${t}`);return{teamfile:r,alias:o.alias,provider:o.provider,sessionid:o.session,sessiondir:o.sessiondir??DT(r),isLead:$s(s)?.alias===o.alias,...o.model!==void 0?{model:o.model}:{},...o.effort!==void 0?{effort:o.effort}:{}}}function Zt(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=Nn(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(Ne(n))return r!==void 0?li(r)?{mode:"ai-team",teamfile:n,alias:r}:{mode:"error",message:`lmctl ${t.name}: "${r}" is not a valid alias (must match ${Tl.source}).`}:t.allowsBareTeamfile?{mode:"ai-team",teamfile:n}:{mode:"error",message:`lmctl ${t.name}: alias required.
1691
1691
  Use: lmctl ${t.name} ${n}:<alias> or lmctl ${t.name} ${n} <alias>`};if(pf(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.
1692
1692
  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}".
1693
1693
  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.
1694
- Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var _e,JM,KM,YM,Tl,Qe=x(()=>{"use strict";je();je();Qt();mf();_e=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},JM=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,KM=/^ses_[A-Za-z0-9_-]+$/,YM=/^session_[A-Za-z0-9_-]+$/,Tl=/^[A-Za-z][A-Za-z0-9_-]*$/});import{existsSync as zM,mkdirSync as QM,readFileSync as ZM,renameSync as e$,unlinkSync as t$,writeFileSync as n$}from"node:fs";import{homedir as $T}from"node:os";import{dirname as ci,join as Ze,resolve as r$}from"node:path";function Fs(t,e,n){let r=ci(r$(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())en(Ze(i,".mcp.json"),"mcpServers",[rr(),sr()]),a.has("opencode")&&en(Ze(i,".opencode","opencode.json"),"mcp",[PT(),FT()]),a.has("kimi")&&en(Ze(i,".kimi-code","mcp.json"),"mcpServers",[rr(),sr()]);for(let i of s)l$(i)}function o$(t=hf??$T()){return Ze(t,".copilot","mcp-config.json")}function i$(t,e){Rt.mkdirSync(ci(t),{recursive:!0});let n=Ze(ci(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Rt.writeFileSync(n,`${JSON.stringify(e,null,2)}
1694
+ Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var _e,JM,KM,YM,Tl,Qe=L(()=>{"use strict";je();je();Qt();mf();_e=class extends Error{constructor(e,n){super(e),this.name="ChatTargetError",n&&Object.defineProperty(this,"kind",{value:n})}},JM=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,KM=/^ses_[A-Za-z0-9_-]+$/,YM=/^session_[A-Za-z0-9_-]+$/,Tl=/^[A-Za-z][A-Za-z0-9_-]*$/});import{existsSync as zM,mkdirSync as QM,readFileSync as ZM,renameSync as e$,unlinkSync as t$,writeFileSync as n$}from"node:fs";import{homedir as $T}from"node:os";import{dirname as ci,join as Ze,resolve as r$}from"node:path";function Fs(t,e,n){let r=ci(r$(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())en(Ze(i,".mcp.json"),"mcpServers",[rr(),sr()]),a.has("opencode")&&en(Ze(i,".opencode","opencode.json"),"mcp",[PT(),FT()]),a.has("kimi")&&en(Ze(i,".kimi-code","mcp.json"),"mcpServers",[rr(),sr()]);for(let i of s)l$(i)}function o$(t=hf??$T()){return Ze(t,".copilot","mcp-config.json")}function i$(t,e){Rt.mkdirSync(ci(t),{recursive:!0});let n=Ze(ci(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Rt.writeFileSync(n,`${JSON.stringify(e,null,2)}
1695
1695
  `,"utf8"),Rt.renameSync(n,t)}catch(r){try{Rt.unlinkSync(n)}catch{}throw r}}function a$(t,e){Rt.mkdirSync(ci(t),{recursive:!0});let n=Ze(ci(t),`.mcp-config.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);try{Rt.writeFileSync(n,e,"utf8"),Rt.renameSync(n,t)}catch(r){try{Rt.unlinkSync(n)}catch{}throw r}}function en(t,e,n){try{if(!Rt.existsSync(t))return;let r=JSON.parse(Rt.readFileSync(t,"utf8"));if(!Ps(r)||!Ps(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,i$(t,r),F({event:"mcp_cleanup",path:t,removed:o})}catch{}}function rr(){return{name:vl,shouldRemove:_$}}function PT(){return{name:vl,shouldRemove:g$}}function sr(){return{name:wl,shouldRemove:p$}}function FT(){return{name:wl,shouldRemove:h$}}function l$(t){let e=hf??$T();switch(t){case"copilot":en(o$(e),"mcpServers",[rr(),sr()]);return;case"claude":en(Ze(e,".claude.json"),"mcpServers",[rr(),sr()]);return;case"gemini":en(Ze(e,".gemini","settings.json"),"mcpServers",[rr(),sr()]);return;case"qwen":en(Ze(e,".qwen","settings.json"),"mcpServers",[rr(),sr()]);return;case"agy":en(Ze(e,".gemini","antigravity-cli","settings.json"),"mcpServers",[rr(),sr()]);return;case"opencode":en(Ze(e,".config","opencode","opencode.json"),"mcp",[PT(),FT()]);return;case"kimi":en(Ze(hf===void 0?process.env.KIMI_CODE_HOME??Ze(e,".kimi-code"):Ze(e,".kimi-code"),"mcp.json"),"mcpServers",[rr(),sr()]);return;case"codex":c$(Ze(e,".codex","config.toml"));return;default:return}}function c$(t){try{if(!Rt.existsSync(t))return;let e=Rt.readFileSync(t,"utf8"),n=d$(e);if(n===null)return;let r=e.split(/\n/),s=[],o=new Set,i=!1,a;for(let l of r){let c=UT(l);if(c===null)return;if(c!==void 0){if(MT(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=f$(l);if(d===null)return;if(d!==void 0&&MT(d,n)){o.add(d[1]);continue}s.push(l)}if(o.size===0)return;a$(t,s.join(`
1696
- `)),F({event:"mcp_cleanup",path:t,removed:[...o]})}catch{}}function MT(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function d$(t){let e=new Map,n;for(let s of t.split(/\n/)){let o=UT(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=u$(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==wl&&c[1]!==vl)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===wl&&BT(o.command,o.args)&&r.add(s),s===vl&&HT(o.command,o.args)&&r.add(s);return r}function u$(t,e){if(t.startsWith("mcp_servers"))return Sl(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=Sl(t);return n===null?null:[...e,...n]}function UT(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:Sl(e[1])}function f$(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 Sl(n)}function Sl(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=WT(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=WT(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 WT(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 p$(t){return Ps(t)?t.type==="stdio"&&typeof t.command=="string"&&BT(t.command,t.args):!1}function h$(t){return!Ps(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&qT(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"&&XT(t.command[0],[t.command[1],t.command[2]])}function _$(t){return Ps(t)?t.type==="stdio"&&HT(t.command,t.args):!1}function g$(t){return!Ps(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&GT(t.command[0])&&t.command[1]==="mcp"}function BT(t,e){return qT(t)&&VT(e)||XT(t,e)}function HT(t,e){return GT(t)&&VT(e)}function XT(t,e){return y$(t)&&Array.isArray(e)&&e.length===2&&E$(e[0])&&e[1]==="mcp"}function qT(t){return typeof t=="string"&&_f(t)==="lmctl"}function GT(t){return typeof t=="string"&&_f(t)==="lmctl0"}function y$(t){if(typeof t!="string")return!1;let e=_f(t).toLowerCase();return e==="node"||e==="node.exe"}function E$(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 _f(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function VT(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Ps(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var wl,vl,s$,Rt,hf,bl=x(()=>{"use strict";oe();wl="lmctl",vl="lmctl0",s$={existsSync:zM,mkdirSync:QM,readFileSync:ZM,writeFileSync:n$,renameSync:e$,unlinkSync:t$},Rt=s$});import{basename as T$}from"node:path";function YT(t,e){let n=new Date(e.now.getTime()-or()).toISOString(),r=ZT(t,n).filter(m=>!m.sender.teamfile.startsWith("prompt:")),s=b$(e.sender,r),o=I$(e.sender,r);o!==null&&o.teamfile===e.root&&!KT(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=>KT(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<w$,u=gf(e.sender,r).length;return{stop:l.length>=1&&d&&u>=v$,chain:k$(a)}}function zT(t,e){let n=new Date(e.now.getTime()-or()).toISOString(),r=ZT(t,n),s=gf(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 or(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return JT;let n=Number(e);return!Number.isFinite(n)||n<=0?JT:n}function QT(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function S$(t){return{sender:{teamfile:t.sender_teamfile,alias:t.sender_alias},receiver:{teamfile:t.receiver_teamfile,alias:t.receiver_alias},at:Date.parse(t.started_at)}}function ZT(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(S$).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function b$(t,e,n={}){let r=new Map;for(let a of e)r.set(Hr(a.receiver),a);let s=[{...t,at:null}],o=t,i=new Set([Hr(t)]);for(let a=0;a<64;a+=1){let l=r.get(Hr(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=Hr(l.sender);if(i.has(d))break;s.unshift(c),i.add(d),o=l.sender}return s}function gf(t,e){let n=Hr(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=Hr(l.sender),d=Hr(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 I$(t,e){let n=gf(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function KT(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function Hr(t){return`${t.teamfile}\0${t.alias}`}function k$(t){return t.map(e=>`${T$(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var w$,v$,JT,Il=x(()=>{"use strict";w$=6e4,v$=2,JT=8*60*60*1e3});function yf(t,e){if(er(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 kl(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
1696
+ `)),F({event:"mcp_cleanup",path:t,removed:[...o]})}catch{}}function MT(t,e){return t.length<2||t[0]!=="mcp_servers"?!1:e.has(t[1])}function d$(t){let e=new Map,n;for(let s of t.split(/\n/)){let o=UT(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=u$(a,n);if(c===null)return null;if(c===void 0||c.length!==3||c[0]!=="mcp_servers"||c[1]!==wl&&c[1]!==vl)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===wl&&BT(o.command,o.args)&&r.add(s),s===vl&&HT(o.command,o.args)&&r.add(s);return r}function u$(t,e){if(t.startsWith("mcp_servers"))return Sl(t);if(e===void 0||e.length<2||e[0]!=="mcp_servers")return;let n=Sl(t);return n===null?null:[...e,...n]}function UT(t){if(!/^\s*\[/.test(t))return;let e=/^\s*\[([^\]\r\n]+)\]\s*(?:#.*)?$/.exec(t);return e===null?null:Sl(e[1])}function f$(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 Sl(n)}function Sl(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=WT(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=WT(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 WT(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 p$(t){return Ps(t)?t.type==="stdio"&&typeof t.command=="string"&&BT(t.command,t.args):!1}function h$(t){return!Ps(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&qT(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"&&XT(t.command[0],[t.command[1],t.command[2]])}function _$(t){return Ps(t)?t.type==="stdio"&&HT(t.command,t.args):!1}function g$(t){return!Ps(t)||!Array.isArray(t.command)?!1:t.command.length===2&&typeof t.command[0]=="string"&&typeof t.command[1]=="string"&&GT(t.command[0])&&t.command[1]==="mcp"}function BT(t,e){return qT(t)&&VT(e)||XT(t,e)}function HT(t,e){return GT(t)&&VT(e)}function XT(t,e){return y$(t)&&Array.isArray(e)&&e.length===2&&E$(e[0])&&e[1]==="mcp"}function qT(t){return typeof t=="string"&&_f(t)==="lmctl"}function GT(t){return typeof t=="string"&&_f(t)==="lmctl0"}function y$(t){if(typeof t!="string")return!1;let e=_f(t).toLowerCase();return e==="node"||e==="node.exe"}function E$(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 _f(t){let e=t.replace(/\\/g,"/");return e.split("/").filter(r=>r.length>0).at(-1)??e}function VT(t){return Array.isArray(t)&&t.length===1&&t[0]==="mcp"}function Ps(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var wl,vl,s$,Rt,hf,bl=L(()=>{"use strict";oe();wl="lmctl",vl="lmctl0",s$={existsSync:zM,mkdirSync:QM,readFileSync:ZM,writeFileSync:n$,renameSync:e$,unlinkSync:t$},Rt=s$});import{basename as T$}from"node:path";function YT(t,e){let n=new Date(e.now.getTime()-or()).toISOString(),r=ZT(t,n).filter(m=>!m.sender.teamfile.startsWith("prompt:")),s=b$(e.sender,r),o=I$(e.sender,r);o!==null&&o.teamfile===e.root&&!KT(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=>KT(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<w$,u=gf(e.sender,r).length;return{stop:l.length>=1&&d&&u>=v$,chain:k$(a)}}function zT(t,e){let n=new Date(e.now.getTime()-or()).toISOString(),r=ZT(t,n),s=gf(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 or(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return JT;let n=Number(e);return!Number.isFinite(n)||n<=0?JT:n}function QT(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function S$(t){return{sender:{teamfile:t.sender_teamfile,alias:t.sender_alias},receiver:{teamfile:t.receiver_teamfile,alias:t.receiver_alias},at:Date.parse(t.started_at)}}function ZT(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(S$).filter(n=>Number.isFinite(n.at)&&new Date(n.at).toISOString()>=e).sort((n,r)=>n.at-r.at)}function b$(t,e,n={}){let r=new Map;for(let a of e)r.set(Hr(a.receiver),a);let s=[{...t,at:null}],o=t,i=new Set([Hr(t)]);for(let a=0;a<64;a+=1){let l=r.get(Hr(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=Hr(l.sender);if(i.has(d))break;s.unshift(c),i.add(d),o=l.sender}return s}function gf(t,e){let n=Hr(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=Hr(l.sender),d=Hr(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 I$(t,e){let n=gf(t,e);if(n.length===0)return null;let r=n[0];return r.sender.teamfile.startsWith("prompt:")?r.receiver:r.sender}function KT(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function Hr(t){return`${t.teamfile}\0${t.alias}`}function k$(t){return t.map(e=>`${T$(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var w$,v$,JT,Il=L(()=>{"use strict";w$=6e4,v$=2,JT=8*60*60*1e3});function yf(t,e){if(er(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 kl(t,e,n){let r=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
1697
1697
  FROM tracked_invocation
1698
1698
  WHERE target_teamfile = ?
1699
1699
  AND target_alias = ?
1700
- AND status = 'running'`,e,n),s=0;for(let o of r)yf(t,o)!==null&&(s+=1);return s}var Al=x(()=>{"use strict";Qe();Ft();Pt()});function Rl(t,e,n){return An(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function xn(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 Us(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new Us(`session identity mismatch: expected "${n}", got "${o.sessionId}"`),{usage:o.usage,sessionId:o.sessionId});return{...o,...o.text===""&&o.sawActivity===!1?{status:"empty"}:{}}}async function Nl(t,e){pl(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 xn(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 Us(`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 Us&&(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 Us,js=x(()=>{"use strict";Ds();Us=class extends Error{}});import{realpathSync as A$}from"node:fs";import{resolve as R$}from"node:path";function Ef(t){let e=R$(t);try{return A$(e)}catch{return e}}var ew=x(()=>{"use strict"});import{platform as tw}from"node:os";function Ws(t){let e=new di;for(let n of t)e.registerAdapter(n);return e}var di,Tf=x(()=>{"use strict";ew();di=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=Ef(e.workspace);o=o.filter(a=>Ef(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=tw()==="darwin"||tw()==="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 bf(){return new vf}function If(t){let e=!1;for(let n of t.split(`
1700
+ AND status = 'running'`,e,n),s=0;for(let o of r)yf(t,o)!==null&&(s+=1);return s}var Al=L(()=>{"use strict";Qe();Ft();Pt()});function Rl(t,e,n){return An(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function Ln(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 Us(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new Us(`session identity mismatch: expected "${n}", got "${o.sessionId}"`),{usage:o.usage,sessionId:o.sessionId});return{...o,...o.text===""&&o.sawActivity===!1?{status:"empty"}:{}}}async function Nl(t,e){pl(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 Ln(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 Us(`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 Us&&(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 Us,js=L(()=>{"use strict";Ds();Us=class extends Error{}});import{realpathSync as A$}from"node:fs";import{resolve as R$}from"node:path";function Ef(t){let e=R$(t);try{return A$(e)}catch{return e}}var ew=L(()=>{"use strict"});import{platform as tw}from"node:os";function Ws(t){let e=new di;for(let n of t)e.registerAdapter(n);return e}var di,Tf=L(()=>{"use strict";ew();di=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=Ef(e.workspace);o=o.filter(a=>Ef(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=tw()==="darwin"||tw()==="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 bf(){return new vf}function If(t){let e=!1;for(let n of t.split(`
1701
1701
  `)){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 kf(t){let e=t.trimEnd().split(`
1702
1702
  `).at(-1)?.trimStart()??"";if(!e.startsWith("{"))return!1;try{return JSON.parse(e),!1}catch{return!0}}function nw(t){let e,n=!1,r=!1,s;for(let o of t.split(`
1703
- `)){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=et(a.input_tokens),c=et(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:et(a.output_tokens),reasoning:et(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:Gt([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(kf(t)||If(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 et,N$,wf,vf,Sf,Af=x(()=>{"use strict";Fo();et=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,N$=(t,e)=>t===null||e===null?null:et(t+e),wf=(t,e)=>JSON.stringify([t,e]),vf=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(wf(e,n))}turn(e,n=""){return new Sf(this,e,n)}};Sf=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(wf(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(wf(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(v=>w[v]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(w=>et(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=et(e.emittedAtMs)??d,f=et(e.ordinal)??et(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=et(_.inputTokens),g=et(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:et(_.cacheWriteInputTokens??0),output:et(_.outputTokens),reasoning:et(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:Gt([_.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 v=this.value[w],b=y[w];v!==null&&b!==null&&et(v+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=N$(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 x$,writeFileSync as eY,mkdirSync as tY}from"node:fs";import{join as L$,dirname as rY}from"node:path";import{homedir as C$}from"node:os";function D$(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function M$(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=D$(t.slice(e+1).trim());return n?{key:n,value:r}:null}function $$(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function xl(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function P$(){return L$(C$(),".lmctl","config.toml")}function Ll(t){let e=t??P$(),n;try{n=x$(e,"utf-8")}catch{return{tools:{}}}return F$(n)}function rw(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 F$(t){let e={},n={},r=t.split(`
1704
- `),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=rw(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=rw(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=$$(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=M$(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 sw(t){return t.site_name??null}function U$(t,e,n){if(!n)return"";let r=t.tools[e]??Rf[e],s=r?.profiles?.[n]?.flags??Rf[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 ow(t,e){return!!t.tools[e]}function iw(t,e,n,r,s){let o=t.tools[e]??Rf[e],i;if(o?.agent){let l=xl(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=O$[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(xl).join(" ");i=`printf '%s\\n' ${xl(r)} | ${d}`}else i=c.map(xl).join(" ")}let a=U$(t,e,s);return a&&(i+=" "+a),i}var Rf,O$,Cl=x(()=>{"use strict";Rf={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:""}}}},O$={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 aw(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 lw=x(()=>{"use strict"});function Dl(t){let e=t?.prompt??te;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${te}${dw}${t.teamfile}:
1705
- ${n}${xf}${JSON.stringify(t.teamfile)}${Lf}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
1706
- ${e}`),e}function cw(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===te)return!0;let r=`${te}${dw}`;if(!e.startsWith(r)||!e.endsWith(Lf))return!1;let s=e.slice(r.length),o=s.slice(0,-Lf.length),i=o.lastIndexOf(xf);if(i===-1)return!1;let a=o.slice(i+xf.length),l;try{if(l=JSON.parse(a),typeof l!="string")return!1}catch{return!1}let c=`${l}:
1703
+ `)){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=et(a.input_tokens),c=et(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:et(a.output_tokens),reasoning:et(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:Gt([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(kf(t)||If(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 et,N$,wf,vf,Sf,Af=L(()=>{"use strict";Fo();et=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,N$=(t,e)=>t===null||e===null?null:et(t+e),wf=(t,e)=>JSON.stringify([t,e]),vf=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(wf(e,n))}turn(e,n=""){return new Sf(this,e,n)}};Sf=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(wf(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(wf(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(v=>w[v]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(w=>et(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=et(e.emittedAtMs)??d,f=et(e.ordinal)??et(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=et(_.inputTokens),g=et(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:et(_.cacheWriteInputTokens??0),output:et(_.outputTokens),reasoning:et(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:Gt([_.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 v=this.value[w],b=y[w];v!==null&&b!==null&&et(v+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=N$(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 L$,writeFileSync as eY,mkdirSync as tY}from"node:fs";import{join as x$,dirname as rY}from"node:path";import{homedir as C$}from"node:os";function D$(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function M$(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=D$(t.slice(e+1).trim());return n?{key:n,value:r}:null}function $$(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Ll(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function P$(){return x$(C$(),".lmctl","config.toml")}function xl(t){let e=t??P$(),n;try{n=L$(e,"utf-8")}catch{return{tools:{}}}return F$(n)}function rw(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 F$(t){let e={},n={},r=t.split(`
1704
+ `),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=rw(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=rw(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=$$(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=M$(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 sw(t){return t.site_name??null}function U$(t,e,n){if(!n)return"";let r=t.tools[e]??Rf[e],s=r?.profiles?.[n]?.flags??Rf[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 ow(t,e){return!!t.tools[e]}function iw(t,e,n,r,s){let o=t.tools[e]??Rf[e],i;if(o?.agent){let l=Ll(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=O$[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(Ll).join(" ");i=`printf '%s\\n' ${Ll(r)} | ${d}`}else i=c.map(Ll).join(" ")}let a=U$(t,e,s);return a&&(i+=" "+a),i}var Rf,O$,Cl=L(()=>{"use strict";Rf={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:""}}}},O$={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 aw(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 lw=L(()=>{"use strict"});function Dl(t){let e=t?.prompt??te;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${te}${dw}${t.teamfile}:
1705
+ ${n}${Lf}${JSON.stringify(t.teamfile)}${xf}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
1706
+ ${e}`),e}function cw(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===te)return!0;let r=`${te}${dw}`;if(!e.startsWith(r)||!e.endsWith(xf))return!1;let s=e.slice(r.length),o=s.slice(0,-xf.length),i=o.lastIndexOf(Lf);if(i===-1)return!1;let a=o.slice(i+Lf.length),l;try{if(l=JSON.parse(a),typeof l!="string")return!1}catch{return!1}let c=`${l}:
1707
1707
  `;return!(!s.startsWith(c)||c.length>i)}function ui(t){if(typeof t!="string")return!1;let e=t.trim().replace(/\r\n/g,`
1708
- `);if(cw(e))return!0;if(e.length>=2&&e.startsWith('"')&&e.endsWith('"')){let r=e.slice(1,-1).replace(/\\"/g,'"');if(cw(r))return!0}return!1}function Cf(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===Nf||e===Nf.replace(/\.$/,"")}var Nf,te,Ol,dw,xf,Lf,Be=x(()=>{"use strict";Nf="ACK: waiting for explicit lmctl task.",te=`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: ${Nf}`,Ol=`send this exact lmctl seed instruction: "${te}"`,dw=`
1708
+ `);if(cw(e))return!0;if(e.length>=2&&e.startsWith('"')&&e.endsWith('"')){let r=e.slice(1,-1).replace(/\\"/g,'"');if(cw(r))return!0}return!1}function Cf(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===Nf||e===Nf.replace(/\.$/,"")}var Nf,te,Ol,dw,Lf,xf,Be=L(()=>{"use strict";Nf="ACK: waiting for explicit lmctl task.",te=`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: ${Nf}`,Ol=`send this exact lmctl seed instruction: "${te}"`,dw=`
1709
1709
 
1710
- Teamfile `,xf=`
1710
+ Teamfile `,Lf=`
1711
1711
 
1712
- After this seed finishes, use \`lmctl prompt `,Lf=' <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 j$}from"node:fs";function uw(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&&!j$(e);if(!n&&!r)return t;F({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 Bs(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function B$(t,e){return e===void 0||e.length===0?t:{...t??process.env,[Of]:e}}function xe(t,e,n,r="chat"){return{...B$(Bs(t,e),n),[W$]:r}}var Of,W$,Ut=x(()=>{"use strict";oe();Of="LMCTL_SELF_SESSIONID",W$="LMCTL_LAUNCH_SOURCE"});import{spawn as fw}from"node:child_process";import{mkdirSync as H$}from"node:fs";var Xr,de,Je=x(()=>{"use strict";Af();Cl();lw();Be();Ut();al();_t();Xr=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},de=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===te?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"}):(H$(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=fw(this.binary,this.seedArgsFor(n),{cwd:e,env:Bs(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}
1713
- `: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=Br(i).trim(),u=Br(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:Ol,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&&ow(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 Xr("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=iw(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:aw(n.env),c=fw(s,{shell:!0,cwd:n.cwd,env:xe(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),d=!1,u=!1,f,m,p=!1,_=null,h=()=>{clearTimeout(f),f=setTimeout(()=>{!kf(E)&&!If(E)&&T(_)},100)},g=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&T(null)},l):void 0,E="",y="";if(c.stdout?.on("data",w=>{let v=w.toString();E+=v,n.onDelta?.(v),p&&!d&&h()}),c.stderr?.on("data",w=>{y+=w.toString(),p&&!d&&h()}),n.signal){if(n.signal.aborted)return clearTimeout(g),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let T=w=>{if(d)return;d=!0,clearTimeout(g),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let v=Date.now()-o,b=this.name==="codex"?nw(E):{};b.usage&&n.onUsage?.(b.usage),b.sessionId&&n.onSessionId?.(b.sessionId);let k=L=>Object.assign(L,{usage:b.usage,sessionId:b.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(k(new Xr("Turn cancelled","external")));else if(u)a(k(new Error(`Agent command timed out after ${l}ms`)));else if(w===0||w===null)i({text:E.trim(),sessionId:b.sessionId??n.sessionId,durationMs:v,...b.usage?{usage:b.usage}:{}});else{let L=y.trim();a(k(new Error(L?Te(L,{provider:this.name}):`Agent command exited with code ${w}`)))}};this.name==="codex"?(c.on("close",T),c.on("exit",w=>{d||(p=!0,_=w,h(),m=setTimeout(()=>T(w),5e3))})):c.on("exit",T),c.on("error",w=>{d||(d=!0,clearTimeout(g),clearTimeout(f),clearTimeout(m),a(w))})})}}});function pw(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&&Le(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Le(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 Le,ir,mw,Ml,Hs,$l=x(()=>{"use strict";Fo();Le=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,ir=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,mw=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});Ml=class{session;seen;parts=[];constructor(e,n){this.session=e,this.seen=n}event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=ir(r?.first?.id),o=ir(r?.last?.id),i=ir(r?.stream?.id),a=ir(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):ir(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=Le(e.promptTokens),u=Le(c.outputTokens),f=Le(c.cacheReadTokens),m=Le(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={...mw(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:Le(c.reasoningTokens),modelReported:ir(e.modelId),invalidCounters:Gt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||Le(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Le(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return pw(this.parts)}},Hs=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=>Le(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=>Le(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=Le(c.turn)!==null&&Le(c.step)!==null?["step",c.turn,c.step]:ir(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,{...mw(),inputUncached:Le(f.inputTokens),cacheRead:Le(f.cacheReadTokens),output:Le(f.outputTokens),reasoning:Le(f.reasoningTokens),modelReported:ir(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Le(m)===null)||Gt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Le(f.reasoningTokens)!==null&&Le(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=pw([...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)}}});function pi(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new mi(t,n,e)}var ar,ye,fi,Pl,mi,qr=x(()=>{"use strict";ar=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},ye=class extends ar{},fi=class extends ar{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},Pl=class extends ar{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},mi=class extends ar{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{createInterface as X$}from"node:readline";function lr(t,e){let n=e.protocol??"acp",r=X$({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=q$++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});Ue({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1712
+ After this seed finishes, use \`lmctl prompt `,xf=' <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 j$}from"node:fs";function uw(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&&!j$(e);if(!n&&!r)return t;F({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 Bs(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function B$(t,e){return e===void 0||e.length===0?t:{...t??process.env,[Of]:e}}function Le(t,e,n,r="chat"){return{...B$(Bs(t,e),n),[W$]:r}}var Of,W$,Ut=L(()=>{"use strict";oe();Of="LMCTL_SELF_SESSIONID",W$="LMCTL_LAUNCH_SOURCE"});import{spawn as fw}from"node:child_process";import{mkdirSync as H$}from"node:fs";var Xr,de,Je=L(()=>{"use strict";Af();Cl();lw();Be();Ut();al();_t();Xr=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},de=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===te?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"}):(H$(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=fw(this.binary,this.seedArgsFor(n),{cwd:e,env:Bs(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}
1713
+ `: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=Br(i).trim(),u=Br(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:Ol,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&&ow(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 Xr("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=iw(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:aw(n.env),c=fw(s,{shell:!0,cwd:n.cwd,env:Le(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),d=!1,u=!1,f,m,p=!1,_=null,h=()=>{clearTimeout(f),f=setTimeout(()=>{!kf(E)&&!If(E)&&T(_)},100)},g=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&T(null)},l):void 0,E="",y="";if(c.stdout?.on("data",w=>{let v=w.toString();E+=v,n.onDelta?.(v),p&&!d&&h()}),c.stderr?.on("data",w=>{y+=w.toString(),p&&!d&&h()}),n.signal){if(n.signal.aborted)return clearTimeout(g),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let T=w=>{if(d)return;d=!0,clearTimeout(g),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let v=Date.now()-o,b=this.name==="codex"?nw(E):{};b.usage&&n.onUsage?.(b.usage),b.sessionId&&n.onSessionId?.(b.sessionId);let k=x=>Object.assign(x,{usage:b.usage,sessionId:b.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(k(new Xr("Turn cancelled","external")));else if(u)a(k(new Error(`Agent command timed out after ${l}ms`)));else if(w===0||w===null)i({text:E.trim(),sessionId:b.sessionId??n.sessionId,durationMs:v,...b.usage?{usage:b.usage}:{}});else{let x=y.trim();a(k(new Error(x?Te(x,{provider:this.name}):`Agent command exited with code ${w}`)))}};this.name==="codex"?(c.on("close",T),c.on("exit",w=>{d||(p=!0,_=w,h(),m=setTimeout(()=>T(w),5e3))})):c.on("exit",T),c.on("error",w=>{d||(d=!0,clearTimeout(g),clearTimeout(f),clearTimeout(m),a(w))})})}}});function pw(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&&xe(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:xe(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 xe,ir,mw,Ml,Hs,$l=L(()=>{"use strict";Fo();xe=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,ir=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,mw=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});Ml=class{session;seen;parts=[];constructor(e,n){this.session=e,this.seen=n}event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=ir(r?.first?.id),o=ir(r?.last?.id),i=ir(r?.stream?.id),a=ir(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):ir(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=xe(e.promptTokens),u=xe(c.outputTokens),f=xe(c.cacheReadTokens),m=xe(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={...mw(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:xe(c.reasoningTokens),modelReported:ir(e.modelId),invalidCounters:Gt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||xe(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||xe(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return pw(this.parts)}},Hs=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=>xe(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=>xe(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=xe(c.turn)!==null&&xe(c.step)!==null?["step",c.turn,c.step]:ir(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,{...mw(),inputUncached:xe(f.inputTokens),cacheRead:xe(f.cacheReadTokens),output:xe(f.outputTokens),reasoning:xe(f.reasoningTokens),modelReported:ir(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>xe(m)===null)||Gt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||xe(f.reasoningTokens)!==null&&xe(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=pw([...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)}}});function pi(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new mi(t,n,e)}var ar,ye,fi,Pl,mi,qr=L(()=>{"use strict";ar=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},ye=class extends ar{},fi=class extends ar{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},Pl=class extends ar{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},mi=class extends ar{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{createInterface as X$}from"node:readline";function lr(t,e){let n=e.protocol??"acp",r=X$({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=q$++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});Ue({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1714
1714
  `)}),i=(a,l={})=>{t.stdin?.write(`${JSON.stringify({jsonrpc:"2.0",method:a,params:l})}
1715
1715
  `)};return r.on("line",a=>{let l=u=>{if(!e.onProtocolError)return;let f=a.slice(0,512);F({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(Ue({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(pi(`${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"){F({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)`}});Ue({event:`${n}_send`,direction:"SEND",provider:e.provider,replyTo:c.id,error:"method not found"}),t.stdin?.write(`${u}
1716
- `);return}e.onNotification?.(c)}),{sendRpc:o,sendNotification:i,close(a=new ye(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var q$,Df=x(()=>{"use strict";oe();qr();q$=1});import*as $f from"node:child_process";function V$(t){if(typeof $f.spawnSync=="function")try{$f.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function hw(t){return t.exitCode!==null||t.signalCode!==null}function Mf(t,e){return hw(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 ue(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??V$;if(hw(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await Mf(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 Mf(t,o))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(i!=="win32")try{t.kill("SIGKILL")}catch{}return await Mf(t,G$)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var G$,Gr=x(()=>{"use strict";G$=1e3});async function Ul(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(o=>{r=setTimeout(()=>o(Pf),e),r.unref?.(),n!==void 0&&(s=()=>o(Pf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function tn(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();Q$(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function Q$(t,e,n,r){let s=t.pollMs??J$,o=t.maxHoldMs??Fl,i=t.settleMs??K$,a=t.backgroundGraceMs??Y$,l=!1,c=null,d=u=>r({startedMs:n,held:l,reason:u});for(;;){if(e.isAborted())return d("aborted");if(e.hasChildExited())return d("child-exited");let u=o-(Date.now()-n);if(u<=0)return d("max-hold");let f;try{f=await Ul(t.hasOutstandingWork(),u,e.signal)}catch{return d("check-error")}if(f===Pf)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,z$,_))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),Me(`${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?.(),Me(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=o)return F({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 J$,Fl,K$,Y$,z$,Pf,hi=x(()=>{"use strict";oe();J$=2e3,Fl=8*60*60*1e3,K$=5e3,Y$=1e3,z$=50,Pf=Symbol("check-timed-out")});function _w(t){ge()&&Ue({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function cr(t,e){let n=eP[t];if(n)return n[e]??n.yolo}function nP(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 Oe(t,e,n="yolo"){if(tP.has(t)){_w(`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"?cr(t,"plan"):Z$[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 F({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new ye(s)}if(!nP(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 F({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:o}),new ye(o)}_w(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var Z$,eP,tP,nn=x(()=>{"use strict";qr();oe();Z$={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},eP={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"]}};tP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as rP}from"node:child_process";import{randomBytes as sP}from"node:crypto";import{realpath as jl}from"node:fs/promises";function _i(){let t=sP(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 Wl(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]:[]];Oe("muse",n,t.permissionMode??"yolo");let r=rP(t.progPath??"muse",n,{cwd:t.cwd,env:xe(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=aT(),_=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",S=>{p.append(S)});let g=(S,A,R)=>{if(s===S){if(s=void 0,S.id&&i.add(S.id),A){let I=S.usage.usage()??(S.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:I?{...I,outcome:S.outcome}:void 0,sessionId:h})}else R&&(R.usage=S.usage.usage());S.cleanup(),S.drained(),S.settled||(S.settled=!0,A?S.reject(A):(m++,S.resolve(R)))}},E=S=>{a||(a=S,s&&g(s,a),T.close(a),!f&&!c&&ue(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},y=(S,A)=>{let R=A.params;if(!R||R.sessionId!==h)return;let I=A.method;if(I==="view/gap"||I==="session/closed"){E(new Error(`Muse ${I}: the conversation cannot continue without reopening`));return}if(I==="turn/unqueued"&&R.turnId===S.id){S.outcome="cancelled",g(S,new Xr("Muse queued turn cancelled","external"));return}I==="turn/started"&&R.turnId===S.id&&(S.queued=!1);let N=R.item,P=R.turnId??N?.turnId;if(P&&P!==S.id||I==="session/tokenUsage"&&(S.settled||R.turnId!==S.id||!S.usage.event(R,S.id)))return;S.opts.onEvent?.(A);let $={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(I)&&N?.turnId===S.id&&typeof N.itemId=="string"){let M=S.items.get(N.itemId);if(M&&typeof N.revision=="number"&&N.revision<=M.revision)return;S.items.set(N.itemId,{...N}),(N.kind==="toolCall"||N.kind==="userShell")&&I!=="item/updated"?$={kind:I==="item/completed"?"tool_result":"tool_use",id:N.itemId,tool:N.tool??N.kind,summary:N.failureReason??N.fallbackText,...I==="item/completed"?{status:N.status==="completed"?"ok":"error"}:{},...N.durationMs!==void 0?{elapsedMs:N.durationMs}:{},raw:A}:N.kind==="reasoning"?$={kind:"thinking",raw:A}:N.kind==="agentMessage"&&($={kind:"text",raw:A})}else if(I==="item/delta"&&typeof R.itemId=="string"&&typeof R.delta=="string"){let M=S.items.get(R.itemId);if(!M)return;M.kind==="agentMessage"&&(R.field===void 0||R.field==="text")?(M.text=(M.text??"")+R.delta,S.cancelled||S.opts.onDelta?.(R.delta),$={kind:"text",raw:A}):M.kind==="reasoning"&&($={kind:"thinking",raw:A})}if(S.cancelled||S.opts.onProgress?.($),I!=="turn/completed"||R.turnId!==S.id)return;if(!["completed","failed","cancelled"].includes(R.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(R.terminal)}`));return}if(S.cancelled||R.terminal==="cancelled"){S.outcome="cancelled",g(S,new Xr("Muse turn cancelled",S.cancelled?"external":"provider"));return}if(R.terminal!=="completed"){S.outcome="error",g(S,new Error(R.error?.message??R.reason??`Muse turn ended with ${String(R.terminal)}`));return}let q=[...S.items.values()].filter(M=>M.kind==="agentMessage");g(S,void 0,{text:q.map(M=>typeof M.text=="string"?M.text:"").join(`
1717
- `),sessionId:h,durationMs:typeof R.durationMs=="number"?R.durationMs:Date.now()-S.started,stopReason:R.terminal,...q.some(M=>M.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=lr(r,{provider:"muse",protocol:"msp",onProtocolError:E,onNotification:S=>{if(_=Date.now(),S.method==="view/gap"||S.method==="session/closed"){S.params?.sessionId===h&&!c&&E(new Error(`Muse ${S.method}: session must be reopened`));return}let A=s;A&&(A.id?y(A,S):A.events.push(S))}}),w=async(S,A,R=_i())=>(await T.sendRpc(S,{...A,commandId:R})).result,v=S=>{!S.id||S.interruptSent||s!==S||(S.interruptSent=!0,w("turn/interrupt",{sessionId:h,turnId:S.id}).catch(A=>{s===S&&E(A instanceof Error?A:new Error(String(A)))}))},b=S=>{!S.id||S.unqueueSent||s!==S||(S.unqueueSent=!0,w("turn/unqueue",{sessionId:h,turnId:S.id}).catch(A=>{let R=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(R)?(S.queued=!1,v(S)):s===S&&E(A instanceof Error?A:new Error(R))}))},k=S=>{S.queued?b(S):v(S)};r.on("error",S=>E(new Error(`Unable to start Muse: ${S.message}`)));let L=()=>{c||f||a||u||(u=!0,ue(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(S=>E(S instanceof Error?S:new Error(String(S)))))};r.stdin.on("error",L),r.stdout.on("end",L),r.on("exit",()=>{f=!0}),r.on("close",(S,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(Ls(`Muse exited (${A??S}) 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 S=!!s;return s&&(s.cancelled=!0,k(s)),l=(async()=>{f||(await new Promise(A=>tn(d?t.holdOpen:void 0,{isAborted:()=>S,hasChildExited:()=>f,isTurnInFlight:()=>!!s,lastEventAtMs:()=>_,closeStdin:()=>{r.stdin.end(),A()},label:"muse"})),await ue(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},C=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",C,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let S=(await T.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(S?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof S.museHome!="string"||await jl(S.museHome)!==await jl(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(S.sessionDurability!==void 0&&S.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");T.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",I=(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(I?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof I.workspaceRoot!="string"||await jl(I.workspaceRoot)!==await jl(t.cwd))throw new Error("Muse session belongs to a different working directory");if(I.activeTurnId||I.status!=="idle")throw new Error(`Muse session is not idle (${String(I.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&&I.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...I.providerId?{providerId:I.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(S){throw await O(),a??S}finally{t.signal?.removeEventListener("abort",C)}return{provider:"muse",sessionId:h,get completedTurns(){return m},close:O,async sendTurn(S,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,I)=>{let N,P=new Promise(M=>{N=M}),$={usage:new Ml(h,o),commandId:_i(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:R,reject:I,drain:P,drained:N,cleanup:()=>{}};s=$;let q=()=>{$.cancelled=!0,$.settled=!0,I(Object.assign(new Error("Aborted"),{usage:$.usage.usage(),sessionId:h})),k($)};$.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),w("turn/start",{sessionId:h,input:[{type:"text",text:S}],...t.effort?{reasoningEffort:t.effort}:{}},$.commandId).then(M=>{if(s===$){if(M?.commandId!==$.commandId||M.status!=="accepted"||!["started","queued"].includes(M.disposition)||typeof M.turnId!="string"||M.turnId.length===0||i.has(M.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}$.id=M.turnId,$.queued=M.disposition==="queued",$.cancelled&&k($);for(let se of $.events)s===$&&y($,se);$.events=[]}},M=>{s===$&&g($,M instanceof Error?M:new Error(String(M)))})})}}}var gw=x(()=>{"use strict";$l();Je();Df();Gr();Ut();hi();nn();_t()});import{join as Ff}from"node:path";import{mkdir as oP}from"node:fs/promises";function Uf(t={}){let e=Ta(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return xn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||_i(),a=await Wl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:Ff(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends de{constructor(){super({provider:new Ea({museDataHome:e}),protocol:{transport:"muse-msp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"muse",seedArgs:[],startTemplate:"muse",resumeTemplate:"muse resume {{session_id}}",transport:r})}openSession(s){return Wl({...s,env:n(s.env),expectedHome:Ff(e,"muse")})}async seed(s,o){await oP(s,{recursive:!0});let i=_i(),a,l;try{a=await Wl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:Ff(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??te,{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 jf=x(()=>{"use strict";Je();Kd();gw();js();Be()});function Ew(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(`
1716
+ `);return}e.onNotification?.(c)}),{sendRpc:o,sendNotification:i,close(a=new ye(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var q$,Df=L(()=>{"use strict";oe();qr();q$=1});import*as $f from"node:child_process";function V$(t){if(typeof $f.spawnSync=="function")try{$f.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function hw(t){return t.exitCode!==null||t.signalCode!==null}function Mf(t,e){return hw(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 ue(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??V$;if(hw(t))return{signal:"natural",elapsedMs:Date.now()-n};if(r&&t.stdin&&!t.stdin.destroyed)try{t.stdin.end()}catch{}if(await Mf(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 Mf(t,o))return{signal:"SIGTERM",elapsedMs:Date.now()-n};if(i!=="win32")try{t.kill("SIGKILL")}catch{}return await Mf(t,G$)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var G$,Gr=L(()=>{"use strict";G$=1e3});async function Ul(t,e,n){if(typeof t=="boolean")return t;let r,s;try{return await Promise.race([t,new Promise(o=>{r=setTimeout(()=>o(Pf),e),r.unref?.(),n!==void 0&&(s=()=>o(Pf),n.addEventListener("abort",s,{once:!0}))})])}finally{r!==void 0&&clearTimeout(r),s!==void 0&&n?.removeEventListener("abort",s)}}function tn(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();Q$(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function Q$(t,e,n,r){let s=t.pollMs??J$,o=t.maxHoldMs??Fl,i=t.settleMs??K$,a=t.backgroundGraceMs??Y$,l=!1,c=null,d=u=>r({startedMs:n,held:l,reason:u});for(;;){if(e.isAborted())return d("aborted");if(e.hasChildExited())return d("child-exited");let u=o-(Date.now()-n);if(u<=0)return d("max-hold");let f;try{f=await Ul(t.hasOutstandingWork(),u,e.signal)}catch{return d("check-error")}if(f===Pf)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,z$,_))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),Me(`${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?.(),Me(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=o)return F({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 J$,Fl,K$,Y$,z$,Pf,hi=L(()=>{"use strict";oe();J$=2e3,Fl=8*60*60*1e3,K$=5e3,Y$=1e3,z$=50,Pf=Symbol("check-timed-out")});function _w(t){ge()&&Ue({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function cr(t,e){let n=eP[t];if(n)return n[e]??n.yolo}function nP(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 Oe(t,e,n="yolo"){if(tP.has(t)){_w(`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"?cr(t,"plan"):Z$[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 F({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new ye(s)}if(!nP(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 F({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:o}),new ye(o)}_w(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var Z$,eP,tP,nn=L(()=>{"use strict";qr();oe();Z$={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},eP={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"]}};tP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as rP}from"node:child_process";import{randomBytes as sP}from"node:crypto";import{realpath as jl}from"node:fs/promises";function _i(){let t=sP(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 Wl(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]:[]];Oe("muse",n,t.permissionMode??"yolo");let r=rP(t.progPath??"muse",n,{cwd:t.cwd,env:Le(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=aT(),_=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",S=>{p.append(S)});let g=(S,A,R)=>{if(s===S){if(s=void 0,S.id&&i.add(S.id),A){let I=S.usage.usage()??(S.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:I?{...I,outcome:S.outcome}:void 0,sessionId:h})}else R&&(R.usage=S.usage.usage());S.cleanup(),S.drained(),S.settled||(S.settled=!0,A?S.reject(A):(m++,S.resolve(R)))}},E=S=>{a||(a=S,s&&g(s,a),T.close(a),!f&&!c&&ue(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},y=(S,A)=>{let R=A.params;if(!R||R.sessionId!==h)return;let I=A.method;if(I==="view/gap"||I==="session/closed"){E(new Error(`Muse ${I}: the conversation cannot continue without reopening`));return}if(I==="turn/unqueued"&&R.turnId===S.id){S.outcome="cancelled",g(S,new Xr("Muse queued turn cancelled","external"));return}I==="turn/started"&&R.turnId===S.id&&(S.queued=!1);let N=R.item,P=R.turnId??N?.turnId;if(P&&P!==S.id||I==="session/tokenUsage"&&(S.settled||R.turnId!==S.id||!S.usage.event(R,S.id)))return;S.opts.onEvent?.(A);let $={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(I)&&N?.turnId===S.id&&typeof N.itemId=="string"){let M=S.items.get(N.itemId);if(M&&typeof N.revision=="number"&&N.revision<=M.revision)return;S.items.set(N.itemId,{...N}),(N.kind==="toolCall"||N.kind==="userShell")&&I!=="item/updated"?$={kind:I==="item/completed"?"tool_result":"tool_use",id:N.itemId,tool:N.tool??N.kind,summary:N.failureReason??N.fallbackText,...I==="item/completed"?{status:N.status==="completed"?"ok":"error"}:{},...N.durationMs!==void 0?{elapsedMs:N.durationMs}:{},raw:A}:N.kind==="reasoning"?$={kind:"thinking",raw:A}:N.kind==="agentMessage"&&($={kind:"text",raw:A})}else if(I==="item/delta"&&typeof R.itemId=="string"&&typeof R.delta=="string"){let M=S.items.get(R.itemId);if(!M)return;M.kind==="agentMessage"&&(R.field===void 0||R.field==="text")?(M.text=(M.text??"")+R.delta,S.cancelled||S.opts.onDelta?.(R.delta),$={kind:"text",raw:A}):M.kind==="reasoning"&&($={kind:"thinking",raw:A})}if(S.cancelled||S.opts.onProgress?.($),I!=="turn/completed"||R.turnId!==S.id)return;if(!["completed","failed","cancelled"].includes(R.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(R.terminal)}`));return}if(S.cancelled||R.terminal==="cancelled"){S.outcome="cancelled",g(S,new Xr("Muse turn cancelled",S.cancelled?"external":"provider"));return}if(R.terminal!=="completed"){S.outcome="error",g(S,new Error(R.error?.message??R.reason??`Muse turn ended with ${String(R.terminal)}`));return}let q=[...S.items.values()].filter(M=>M.kind==="agentMessage");g(S,void 0,{text:q.map(M=>typeof M.text=="string"?M.text:"").join(`
1717
+ `),sessionId:h,durationMs:typeof R.durationMs=="number"?R.durationMs:Date.now()-S.started,stopReason:R.terminal,...q.some(M=>M.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=lr(r,{provider:"muse",protocol:"msp",onProtocolError:E,onNotification:S=>{if(_=Date.now(),S.method==="view/gap"||S.method==="session/closed"){S.params?.sessionId===h&&!c&&E(new Error(`Muse ${S.method}: session must be reopened`));return}let A=s;A&&(A.id?y(A,S):A.events.push(S))}}),w=async(S,A,R=_i())=>(await T.sendRpc(S,{...A,commandId:R})).result,v=S=>{!S.id||S.interruptSent||s!==S||(S.interruptSent=!0,w("turn/interrupt",{sessionId:h,turnId:S.id}).catch(A=>{s===S&&E(A instanceof Error?A:new Error(String(A)))}))},b=S=>{!S.id||S.unqueueSent||s!==S||(S.unqueueSent=!0,w("turn/unqueue",{sessionId:h,turnId:S.id}).catch(A=>{let R=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(R)?(S.queued=!1,v(S)):s===S&&E(A instanceof Error?A:new Error(R))}))},k=S=>{S.queued?b(S):v(S)};r.on("error",S=>E(new Error(`Unable to start Muse: ${S.message}`)));let x=()=>{c||f||a||u||(u=!0,ue(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(S=>E(S instanceof Error?S:new Error(String(S)))))};r.stdin.on("error",x),r.stdout.on("end",x),r.on("exit",()=>{f=!0}),r.on("close",(S,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(xs(`Muse exited (${A??S}) 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 S=!!s;return s&&(s.cancelled=!0,k(s)),l=(async()=>{f||(await new Promise(A=>tn(d?t.holdOpen:void 0,{isAborted:()=>S,hasChildExited:()=>f,isTurnInFlight:()=>!!s,lastEventAtMs:()=>_,closeStdin:()=>{r.stdin.end(),A()},label:"muse"})),await ue(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},C=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",C,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let S=(await T.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(S?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof S.museHome!="string"||await jl(S.museHome)!==await jl(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(S.sessionDurability!==void 0&&S.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");T.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",I=(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(I?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof I.workspaceRoot!="string"||await jl(I.workspaceRoot)!==await jl(t.cwd))throw new Error("Muse session belongs to a different working directory");if(I.activeTurnId||I.status!=="idle")throw new Error(`Muse session is not idle (${String(I.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&&I.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...I.providerId?{providerId:I.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(S){throw await O(),a??S}finally{t.signal?.removeEventListener("abort",C)}return{provider:"muse",sessionId:h,get completedTurns(){return m},close:O,async sendTurn(S,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,I)=>{let N,P=new Promise(M=>{N=M}),$={usage:new Ml(h,o),commandId:_i(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:R,reject:I,drain:P,drained:N,cleanup:()=>{}};s=$;let q=()=>{$.cancelled=!0,$.settled=!0,I(Object.assign(new Error("Aborted"),{usage:$.usage.usage(),sessionId:h})),k($)};$.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),w("turn/start",{sessionId:h,input:[{type:"text",text:S}],...t.effort?{reasoningEffort:t.effort}:{}},$.commandId).then(M=>{if(s===$){if(M?.commandId!==$.commandId||M.status!=="accepted"||!["started","queued"].includes(M.disposition)||typeof M.turnId!="string"||M.turnId.length===0||i.has(M.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}$.id=M.turnId,$.queued=M.disposition==="queued",$.cancelled&&k($);for(let se of $.events)s===$&&y($,se);$.events=[]}},M=>{s===$&&g($,M instanceof Error?M:new Error(String(M)))})})}}}var gw=L(()=>{"use strict";$l();Je();Df();Gr();Ut();hi();nn();_t()});import{join as Ff}from"node:path";import{mkdir as oP}from"node:fs/promises";function Uf(t={}){let e=Ta(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Ln(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||_i(),a=await Wl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:Ff(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends de{constructor(){super({provider:new Ea({museDataHome:e}),protocol:{transport:"muse-msp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"muse",seedArgs:[],startTemplate:"muse",resumeTemplate:"muse resume {{session_id}}",transport:r})}openSession(s){return Wl({...s,env:n(s.env),expectedHome:Ff(e,"muse")})}async seed(s,o){await oP(s,{recursive:!0});let i=_i(),a,l;try{a=await Wl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:Ff(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??te,{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 jf=L(()=>{"use strict";Je();Kd();gw();js();Be()});function Ew(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(`
1718
1718
 
1719
1719
  --- additional response (turn ${n+1} of ${t.length}; likely an injected mid-call notification) ---
1720
1720
 
1721
- `+t[n]);return e.join("")}function Bl(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=Bf(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&&(yw(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)){yw(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=Au({cacheWrite5m:y?.ephemeral_5m_input_tokens,cacheWrite1h:y?.ephemeral_1h_input_tokens},T),v=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(v?.thinking_tokens),modelReported:null,providerCostUsd:E,reason:E===null?"cumulative_only":null,cacheWrite5m:w?.five??null,cacheWrite1h:w?.one??null,invalidCounters:Gt([p.input_tokens,p.cache_read_input_tokens,p.cache_creation_input_tokens,p.output_tokens,v?.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=Tw(e),u=Ew(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 Tw(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 Wf(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function yw(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Bf(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 Hf=x(()=>{"use strict";Fo();En()});import{spawn as vw}from"node:child_process";import{existsSync as Sw}from"node:fs";import{join as Hl}from"node:path";import{readdir as iP}from"node:fs/promises";function bw(){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 Iw(){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 kw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function lP(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} exited with code ${t.exitCode} before returning a final result event.
1721
+ `+t[n]);return e.join("")}function Bl(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=Bf(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&&(yw(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)){yw(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=Au({cacheWrite5m:y?.ephemeral_5m_input_tokens,cacheWrite1h:y?.ephemeral_1h_input_tokens},T),v=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(v?.thinking_tokens),modelReported:null,providerCostUsd:E,reason:E===null?"cumulative_only":null,cacheWrite5m:w?.five??null,cacheWrite1h:w?.one??null,invalidCounters:Gt([p.input_tokens,p.cache_read_input_tokens,p.cache_creation_input_tokens,p.output_tokens,v?.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=Tw(e),u=Ew(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 Tw(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 Wf(t){return{cost:t?null:0,model:null,sessionId:null,resultIds:new Set}}function yw(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Bf(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 Hf=L(()=>{"use strict";Fo();En()});import{spawn as vw}from"node:child_process";import{existsSync as Sw}from"node:fs";import{join as Hl}from"node:path";import{readdir as iP}from"node:fs/promises";function bw(){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 Iw(){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 kw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function lP(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} exited with code ${t.exitCode} before returning a final result event.
1722
1722
  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:
1723
1723
  ${Te(e,{provider:t.tool})}
1724
1724
 
1725
- ${n}`:n}function Aw(t){let e=t.tool||"claude",n=t.binaryPath||aP[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=cr(e,s)??cP[e]??["--dangerously-skip-permissions"];if(r.push(...o),Oe(e,r,s),t.cwd&&!Sw(t.cwd))throw F({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new ye(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=xe(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?uw(i):i}}function Rw(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=Aw(e))}catch(B){return r(B instanceof Error?B:new Error(String(B)))}let c=vw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",B=>{Me(`stream-json: stdin pipe error, ignored (exit handler reports): ${B.message}`)});let d=!1;if(e.signal){if(e.signal.aborted)return d=!0,F({event:"transport_abort",provider:o,phase:"pre_spawn"}),ue(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,F({event:"transport_abort",provider:o}),ue(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:P.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,T=null,w=null,v=!1,b=!1,k=bw(),L=Iw();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function C(){y!==void 0&&(clearTimeout(y),y=void 0)}let S=null;function A(){return f||d||P.sawResult()}function R(B){return B==="text_done"?k:L}async function I(B){if(B==="text_done"?E=void 0:y=void 0,A()||T!==null)return;S??=Date.now();let Z=R(B);if(e.holdOpen){let Ht=(e.holdOpen.maxHoldMs??Fl)-(Date.now()-S),cs=Ht>0?await Ul(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),Ht,e.signal):!1;if(A()||(B==="text_done"?E!==void 0:y!==void 0))return;if(cs===!0){F({event:"transport_stall_grace_deferred",provider:o,grace_kind:B,grace_ms:Z,reason:"outstanding_dispatched_work"}),N(B);return}}w=B,T=B==="text_done"?`${o} finished responding but never emitted its closing result event (${Z}ms of silence after its last message)`:`${o} went silent mid-turn and never emitted its closing result event (${Z}ms of silence)`,F({event:"transport_stall_grace_fired",provider:o,grace_kind:B,grace_ms:Z}),ue(c).catch(()=>{})}function N(B){let Z=setTimeout(()=>{I(B)},R(B));Z.unref?.(),B==="text_done"?(O(),E=Z):(C(),y=Z)}let P=Bl({usageState:o==="claude"?Wf(!!e.sessionId):void 0,onEvent:B=>{p=Date.now(),_=B.type!=="result",B.type==="system"&&B.subtype==="init"&&(g=B.session_id||g),B.type==="assistant"?(v=!kw(B),b=v&&B.message?.stop_reason==="pause_turn"):(B.type==="result"||B.type==="user")&&(v=!1,b=!1),O(),o==="claude"&&v&&!b&&!P.sawResult()&&N("text_done"),C(),o==="claude"&&!P.sawResult()&&N("tool_use_silence"),e.onEvent?.(B)},onText:B=>{h+=B,e.onText?.(B)}});function $(){m||(m=!0,tn(e.holdOpen,{isAborted:()=>d,hasChildExited:()=>f,isTurnInFlight:()=>_,lastEventAtMs:()=>p,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function q(B){let Z=P.sawResult();P.processLine(B);let be=P.usage();be&&e.onUsage?.(be),!Z&&P.sawResult()&&$()}c.stdout?.on("data",B=>{u+=B.toString();let Z=u.split(`
1725
+ ${n}`:n}function Aw(t){let e=t.tool||"claude",n=t.binaryPath||aP[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=cr(e,s)??cP[e]??["--dangerously-skip-permissions"];if(r.push(...o),Oe(e,r,s),t.cwd&&!Sw(t.cwd))throw F({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new ye(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=Le(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?uw(i):i}}function Rw(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=Aw(e))}catch(B){return r(B instanceof Error?B:new Error(String(B)))}let c=vw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",B=>{Me(`stream-json: stdin pipe error, ignored (exit handler reports): ${B.message}`)});let d=!1;if(e.signal){if(e.signal.aborted)return d=!0,F({event:"transport_abort",provider:o,phase:"pre_spawn"}),ue(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,F({event:"transport_abort",provider:o}),ue(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:P.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,T=null,w=null,v=!1,b=!1,k=bw(),x=Iw();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function C(){y!==void 0&&(clearTimeout(y),y=void 0)}let S=null;function A(){return f||d||P.sawResult()}function R(B){return B==="text_done"?k:x}async function I(B){if(B==="text_done"?E=void 0:y=void 0,A()||T!==null)return;S??=Date.now();let Z=R(B);if(e.holdOpen){let Ht=(e.holdOpen.maxHoldMs??Fl)-(Date.now()-S),cs=Ht>0?await Ul(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),Ht,e.signal):!1;if(A()||(B==="text_done"?E!==void 0:y!==void 0))return;if(cs===!0){F({event:"transport_stall_grace_deferred",provider:o,grace_kind:B,grace_ms:Z,reason:"outstanding_dispatched_work"}),N(B);return}}w=B,T=B==="text_done"?`${o} finished responding but never emitted its closing result event (${Z}ms of silence after its last message)`:`${o} went silent mid-turn and never emitted its closing result event (${Z}ms of silence)`,F({event:"transport_stall_grace_fired",provider:o,grace_kind:B,grace_ms:Z}),ue(c).catch(()=>{})}function N(B){let Z=setTimeout(()=>{I(B)},R(B));Z.unref?.(),B==="text_done"?(O(),E=Z):(C(),y=Z)}let P=Bl({usageState:o==="claude"?Wf(!!e.sessionId):void 0,onEvent:B=>{p=Date.now(),_=B.type!=="result",B.type==="system"&&B.subtype==="init"&&(g=B.session_id||g),B.type==="assistant"?(v=!kw(B),b=v&&B.message?.stop_reason==="pause_turn"):(B.type==="result"||B.type==="user")&&(v=!1,b=!1),O(),o==="claude"&&v&&!b&&!P.sawResult()&&N("text_done"),C(),o==="claude"&&!P.sawResult()&&N("tool_use_silence"),e.onEvent?.(B)},onText:B=>{h+=B,e.onText?.(B)}});function $(){m||(m=!0,tn(e.holdOpen,{isAborted:()=>d,hasChildExited:()=>f,isTurnInFlight:()=>_,lastEventAtMs:()=>p,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function q(B){let Z=P.sawResult();P.processLine(B);let be=P.usage();be&&e.onUsage?.(be),!Z&&P.sawResult()&&$()}c.stdout?.on("data",B=>{u+=B.toString();let Z=u.split(`
1726
1726
  `);u=Z.pop()||"";for(let be of Z)q(be)});let M="";c.stderr?.on("data",B=>{M+=B.toString()}),c.on("error",B=>{F({event:"transport_error",provider:o,error_class:"TransportConnectionError",error_message:B.message}),r(new ye(`Failed to spawn ${i}: ${B.message}`,{cause:B}))}),c.on("exit",B=>{if(f=!0,O(),C(),d)return;u.trim()&&q(u);let Z=P.finalize();if(Z?.isError)F({event:"transport_error",provider:o,error_class:"Error",reason:"provider_result_error",error_message:Z.errorMessage}),r(Object.assign(new Error(`${o} reported an error for this turn (no assistant output)`+(e.sessionId?` \u2014 session=${e.sessionId}`:"")+`: ${Z.errorMessage??"unknown error"}`),{usage:Z.usage,sessionId:Z.sessionId}));else if(Z)Me(`stream-json: result ${Z.result.slice(0,80)}${Z.result.length>80?"...":""} (${Z.durationMs}ms)`),n({result:Z.result,sessionId:Z.sessionId,durationMs:Z.durationMs,numTurns:Z.numTurns,usage:Z.usage,exitCode:B});else if(T!==null&&w==="text_done"&&h.trim().length>0)F({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:B,warnings:[T]});else if(T!==null&&w==="tool_use_silence"){let be=M.trim()?`
1727
1727
  ${Te(M,{provider:o})}`:"",Ht=`${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})`:"")+be;F({event:"transport_error",provider:o,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:B,stderr_summary:Ht}),r(new Error(Ht))}else{let be=T!==null?`${T} \u2014 and produced no usable content to fall back on`+(e.sessionId?` (session=${e.sessionId})`:"")+(M.trim()?`
1728
1728
  ${Te(M,{provider:o})}`:""):lP({tool:o,exitCode:B,stderr:M});F({event:"transport_error",provider:o,error_class:"Error",reason:T!==null?"provider_stalled_no_content":"provider_no_result",exit_code:B,stderr_summary:be}),r(new Error(be))}});let se=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(se+`
1729
- `),Me(`stream-json: prompt sent (${t.length} chars)`)})}function dP(t){return t==="qwen"?[Hl(Q,".qwen","projects")]:[Hl(Q,".claude","projects")]}async function ww(t,e,n){let r=n??dP(t),s=null;for(let a of r){let l;try{l=await iP(a)}catch{continue}for(let c of l){for(let d of[Hl(a,c,`${e}.jsonl`),Hl(a,c,"chats",`${e}.jsonl`)])if(Sw(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 ht(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 Nw(t){let{tool:e,binary:n,args:r,spawnEnv:s}=Aw(t),o=vw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",U=>{Me(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${U.message}`)});let a={exited:!1,exitCode:null,lastEventAtMs:0,turnActive:!1,completedTurns:0,closed:!1,closing:null},l=t.sessionId||"",c=e==="claude"?Wf(!!t.sessionId):void 0,d=c?.resultIds??new Set,u=null,f="";o.stderr?.on("data",U=>{f+=U.toString()});let m="",p="",_=!1,h=!1,g=null,E=null,y=null,T,w,v=bw(),b=Iw(),k=null,L=[],O=()=>a.exited?Promise.resolve():new Promise(U=>{L.push(U)}),C=()=>new Error(`stream-json bundle process (${e}) exited${a.exitCode!==null?` with code ${a.exitCode}`:""} after ${a.completedTurns} completed prompt(s); the bundle cannot continue`);function S(){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 I(U){return U==="text_done"?v:b}async function N(U){if(U==="text_done"?T=void 0:w=void 0,R()||g!==null)return;y??=Date.now();let X=I(U);if(t.holdOpen){let Ce=(t.holdOpen.maxHoldMs??Fl)-(Date.now()-y),St=Ce>0?await Ul(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),Ce,void 0):!1;if(R()||(U==="text_done"?T!==void 0:w!==void 0))return;if(St===!0){F({event:"transport_stall_grace_deferred",provider:e,grace_kind:U,grace_ms:X,reason:"outstanding_dispatched_work"}),P(U);return}}E=U,g=U==="text_done"?`${e} finished responding but never emitted its closing result event (${X}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${X}ms of silence)`,F({event:"transport_stall_grace_fired",provider:e,grace_kind:U,grace_ms:X}),ue(o).catch(()=>{})}function P(U){let X=setTimeout(()=>{N(U)},I(U));X.unref?.(),U==="text_done"?(S(),T=X):(A(),w=X)}let $=!1,q,M,se=new Promise((U,X)=>{q=U,M=X});se.catch(()=>{});let B=setTimeout(()=>{$||($=!0,M(new Error(`stream-json bundle: ${e} emitted no init event within the open timeout \u2014 cannot verify the resumed session identity`)))},t.closeTimeoutMs!==void 0?Math.max(t.closeTimeoutMs,5e3):3e4);B.unref?.();function Z(U){$||($=!0,clearTimeout(B),U?M(U):q())}let be="";function Ht(U){if(a.lastEventAtMs=Date.now(),U.type==="system"&&U.subtype==="init"){if(c&&typeof U.model=="string"&&(c.model=U.model),p=U.session_id||p,t.sessionId&&typeof U.session_id=="string"&&U.session_id.length>0&&U.session_id!==t.sessionId){let re=new Error(`stream-json bundle: provider resumed a different session (init reported "${U.session_id}", expected "${t.sessionId}")`);Z(re),ue(o).catch(()=>{});return}Z()}let X=k?.processor.sawResult()??!0;U.type==="assistant"?(_=!kw(U),h=_&&U.message?.stop_reason==="pause_turn"):(U.type==="result"||U.type==="user")&&(_=!1,h=!1),S(),e==="claude"&&a.turnActive&&_&&!h&&!X&&P("text_done"),A(),e==="claude"&&a.turnActive&&!X&&P("tool_use_silence")}function cs(){let U=k;if(U===null)return;let X=U.processor.finalize();if(X!==null){if(k=null,a.turnActive=!1,S(),A(),X.isError){F({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:X.errorMessage}),U.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${X.errorMessage??"unknown error"}`),{usage:X.usage,sessionId:X.sessionId}));return}a.completedTurns+=1,l=X.sessionId||l,Me(`stream-json bundle: result ${X.result.slice(0,80)}${X.result.length>80?"...":""} (${X.durationMs}ms)`),U.resolve({result:X.result,sessionId:X.sessionId||l,durationMs:X.durationMs,numTurns:X.numTurns,usage:X.usage})}}function wo(U){if(!U.trim())return;let X;try{X=JSON.parse(U)}catch{return}let re=Bf(X,p||l);if(re&&d.has(re))return;let Ce=k;if(Ce===null&&re&&(d.add(re),c&&(c.cost=null)),Ht(X),Ce!==null){let St=Ce.processor.sawResult();Ce.processor.processLine(U),Ce.onEventForward?.(X),!St&&Ce.processor.sawResult()&&cs()}}o.stdout?.on("data",U=>{be+=U.toString();let X=be.split(`
1729
+ `),Me(`stream-json: prompt sent (${t.length} chars)`)})}function dP(t){return t==="qwen"?[Hl(Q,".qwen","projects")]:[Hl(Q,".claude","projects")]}async function ww(t,e,n){let r=n??dP(t),s=null;for(let a of r){let l;try{l=await iP(a)}catch{continue}for(let c of l){for(let d of[Hl(a,c,`${e}.jsonl`),Hl(a,c,"chats",`${e}.jsonl`)])if(Sw(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 ht(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 Nw(t){let{tool:e,binary:n,args:r,spawnEnv:s}=Aw(t),o=vw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",U=>{Me(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${U.message}`)});let a={exited:!1,exitCode:null,lastEventAtMs:0,turnActive:!1,completedTurns:0,closed:!1,closing:null},l=t.sessionId||"",c=e==="claude"?Wf(!!t.sessionId):void 0,d=c?.resultIds??new Set,u=null,f="";o.stderr?.on("data",U=>{f+=U.toString()});let m="",p="",_=!1,h=!1,g=null,E=null,y=null,T,w,v=bw(),b=Iw(),k=null,x=[],O=()=>a.exited?Promise.resolve():new Promise(U=>{x.push(U)}),C=()=>new Error(`stream-json bundle process (${e}) exited${a.exitCode!==null?` with code ${a.exitCode}`:""} after ${a.completedTurns} completed prompt(s); the bundle cannot continue`);function S(){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 I(U){return U==="text_done"?v:b}async function N(U){if(U==="text_done"?T=void 0:w=void 0,R()||g!==null)return;y??=Date.now();let X=I(U);if(t.holdOpen){let Ce=(t.holdOpen.maxHoldMs??Fl)-(Date.now()-y),St=Ce>0?await Ul(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),Ce,void 0):!1;if(R()||(U==="text_done"?T!==void 0:w!==void 0))return;if(St===!0){F({event:"transport_stall_grace_deferred",provider:e,grace_kind:U,grace_ms:X,reason:"outstanding_dispatched_work"}),P(U);return}}E=U,g=U==="text_done"?`${e} finished responding but never emitted its closing result event (${X}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${X}ms of silence)`,F({event:"transport_stall_grace_fired",provider:e,grace_kind:U,grace_ms:X}),ue(o).catch(()=>{})}function P(U){let X=setTimeout(()=>{N(U)},I(U));X.unref?.(),U==="text_done"?(S(),T=X):(A(),w=X)}let $=!1,q,M,se=new Promise((U,X)=>{q=U,M=X});se.catch(()=>{});let B=setTimeout(()=>{$||($=!0,M(new Error(`stream-json bundle: ${e} emitted no init event within the open timeout \u2014 cannot verify the resumed session identity`)))},t.closeTimeoutMs!==void 0?Math.max(t.closeTimeoutMs,5e3):3e4);B.unref?.();function Z(U){$||($=!0,clearTimeout(B),U?M(U):q())}let be="";function Ht(U){if(a.lastEventAtMs=Date.now(),U.type==="system"&&U.subtype==="init"){if(c&&typeof U.model=="string"&&(c.model=U.model),p=U.session_id||p,t.sessionId&&typeof U.session_id=="string"&&U.session_id.length>0&&U.session_id!==t.sessionId){let re=new Error(`stream-json bundle: provider resumed a different session (init reported "${U.session_id}", expected "${t.sessionId}")`);Z(re),ue(o).catch(()=>{});return}Z()}let X=k?.processor.sawResult()??!0;U.type==="assistant"?(_=!kw(U),h=_&&U.message?.stop_reason==="pause_turn"):(U.type==="result"||U.type==="user")&&(_=!1,h=!1),S(),e==="claude"&&a.turnActive&&_&&!h&&!X&&P("text_done"),A(),e==="claude"&&a.turnActive&&!X&&P("tool_use_silence")}function cs(){let U=k;if(U===null)return;let X=U.processor.finalize();if(X!==null){if(k=null,a.turnActive=!1,S(),A(),X.isError){F({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:X.errorMessage}),U.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${X.errorMessage??"unknown error"}`),{usage:X.usage,sessionId:X.sessionId}));return}a.completedTurns+=1,l=X.sessionId||l,Me(`stream-json bundle: result ${X.result.slice(0,80)}${X.result.length>80?"...":""} (${X.durationMs}ms)`),U.resolve({result:X.result,sessionId:X.sessionId||l,durationMs:X.durationMs,numTurns:X.numTurns,usage:X.usage})}}function wo(U){if(!U.trim())return;let X;try{X=JSON.parse(U)}catch{return}let re=Bf(X,p||l);if(re&&d.has(re))return;let Ce=k;if(Ce===null&&re&&(d.add(re),c&&(c.cost=null)),Ht(X),Ce!==null){let St=Ce.processor.sawResult();Ce.processor.processLine(U),Ce.onEventForward?.(X),!St&&Ce.processor.sawResult()&&cs()}}o.stdout?.on("data",U=>{be+=U.toString();let X=be.split(`
1730
1730
  `);be=X.pop()||"";for(let re of X)wo(re)}),o.on("error",U=>{if(u=new ye(`Failed to spawn ${n}: ${U.message}`,{cause:U}),F({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:U.message}),Z(u),k!==null){let X=k;k=null,a.turnActive=!1,X.reject(u)}}),o.on("exit",U=>{a.exited=!0,a.exitCode=U,S(),A(),be.trim()&&wo(be),Z(a.exited&&!$?new Error(`stream-json bundle: ${e} exited (code ${String(U)}) before its init event`):void 0);let X=k;if(X!==null&&(k=null,a.turnActive=!1,!X.aborted))if(g!==null&&E==="text_done"&&m.trim().length>0)F({event:"transport_stall_finalized",provider:e,reason:g,text_len:m.length}),X.resolve({result:m,sessionId:p||t.sessionId||"",durationMs:Date.now()-X.startMs,numTurns:1,warnings:[g]});else if(g!==null&&E==="tool_use_silence"){let re=f.trim()?Te(f,{provider:e}):"";F({event:"transport_error",provider:e,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:U,...re?{stderr_summary:re}:{}}),X.reject(new Error(`${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})`:"")+(re?`
1731
1731
  ${re}`:"")))}else{let re=C(),Ce=f.trim()?Te(f,{provider:e}):"";F({event:"transport_error",provider:e,error_class:"Error",reason:g!==null?"provider_stalled_no_content":"provider_no_result",exit_code:U,...Ce?{stderr_summary:Ce}:{}}),X.reject(Ce?new Error(`${re.message}
1732
- ${Ce}`):re)}for(let re of L.splice(0))re()});try{t.sessionId&&await ww(e,t.sessionId,t.sessionFileRoots),await se}catch(U){let X=u??(U instanceof Error?U:new Error(String(U))),re=t.closeTimeoutMs??2e3;throw await ue(o,{softDelayMs:Math.min(1e3,re),killDelayMs:Math.min(1e3,re)}).catch(()=>{}),X}let Wn=U=>new Promise(X=>{setTimeout(X,U).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(U,X={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw C();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 re=()=>(a.closed=!0,ue(o).catch(()=>{}),new Error("Aborted"));if(X.signal?.aborted)throw re();if(t.sessionId&&(await ww(e,t.sessionId,t.sessionFileRoots),a.exited))throw C();if(X.signal?.aborted)throw re();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((Ce,St)=>{let ha=Bl({usageState:c,resultIds:d,sessionId:p||l,onText:W_=>{m+=W_,X.onText?.(W_)}}),vo={processor:ha,resolve:Ce,reject:St,startMs:Date.now(),aborted:!1,onEventForward:X.onEvent};k=vo,a.turnActive=!0;let jd=()=>{vo.aborted=!0,F({event:"transport_abort",provider:e}),a.closed=!0,ue(o).catch(()=>{}),k===vo&&(k=null,a.turnActive=!1),St(Object.assign(new Error("Aborted"),{usage:ha.usage()}))};X.signal?.addEventListener("abort",jd,{once:!0});let PN=JSON.stringify({type:"user",message:{role:"user",content:U}});o.stdin?.write(`${PN}
1733
- `),Me(`stream-json bundle: prompt sent (${U.length} chars)`)})},close(){return a.closing!==null||(a.closing=(async()=>{if(a.closed=!0,!a.exited&&(t.holdOpen!==void 0?await new Promise(U=>{tn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>a.exited,isTurnInFlight:()=>a.turnActive,lastEventAtMs:()=>a.lastEventAtMs,closeStdin:()=>{o.stdin?.end(),U()},label:e})}):o.stdin?.end(),!a.exited)){let U=t.closeTimeoutMs??2e3;await Promise.race([O(),Wn(U)]),a.exited||await ue(o,{stdinEnd:!1,softDelayMs:Math.min(1e3,U),killDelayMs:Math.min(1e3,U)}).catch(()=>{})}})()),a.closing}}}var aP,cP,Xf=x(()=>{"use strict";qr();Gr();nn();oe();hi();Ut();Hf();Ae();_t();Hf();aP={claude:"claude",qwen:"qwen"};cP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function Xl(t={}){return[]}var qf=x(()=>{"use strict"});function Gf(t){return t==="plan"?"read-only":"danger-full-access"}function xw(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function ql(){return{agentItems:new Map,resultText:""}}function Xs(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 Gl(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function Lw(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 Vl(){return{pendingCodexError:null}}function Jl(t,e){let n=Lw(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function Kl(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 Vf=x(()=>{"use strict"});import{spawn as Cw}from"node:child_process";import{createInterface as Ow}from"node:readline";import{existsSync as uP,readFileSync as fP}from"node:fs";import{fileURLToPath as mP}from"node:url";function Dw(){return xw(pP)}function dr(t,e){Me(`[codex:${t}] ${JSON.stringify(e)}`)}function hP(t){let e=t.stderr.trim(),n=`lmctl: codex app-server exited with code ${t.exitCode} before completing the turn.
1732
+ ${Ce}`):re)}for(let re of x.splice(0))re()});try{t.sessionId&&await ww(e,t.sessionId,t.sessionFileRoots),await se}catch(U){let X=u??(U instanceof Error?U:new Error(String(U))),re=t.closeTimeoutMs??2e3;throw await ue(o,{softDelayMs:Math.min(1e3,re),killDelayMs:Math.min(1e3,re)}).catch(()=>{}),X}let Wn=U=>new Promise(X=>{setTimeout(X,U).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(U,X={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw C();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 re=()=>(a.closed=!0,ue(o).catch(()=>{}),new Error("Aborted"));if(X.signal?.aborted)throw re();if(t.sessionId&&(await ww(e,t.sessionId,t.sessionFileRoots),a.exited))throw C();if(X.signal?.aborted)throw re();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((Ce,St)=>{let ha=Bl({usageState:c,resultIds:d,sessionId:p||l,onText:W_=>{m+=W_,X.onText?.(W_)}}),vo={processor:ha,resolve:Ce,reject:St,startMs:Date.now(),aborted:!1,onEventForward:X.onEvent};k=vo,a.turnActive=!0;let jd=()=>{vo.aborted=!0,F({event:"transport_abort",provider:e}),a.closed=!0,ue(o).catch(()=>{}),k===vo&&(k=null,a.turnActive=!1),St(Object.assign(new Error("Aborted"),{usage:ha.usage()}))};X.signal?.addEventListener("abort",jd,{once:!0});let PN=JSON.stringify({type:"user",message:{role:"user",content:U}});o.stdin?.write(`${PN}
1733
+ `),Me(`stream-json bundle: prompt sent (${U.length} chars)`)})},close(){return a.closing!==null||(a.closing=(async()=>{if(a.closed=!0,!a.exited&&(t.holdOpen!==void 0?await new Promise(U=>{tn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>a.exited,isTurnInFlight:()=>a.turnActive,lastEventAtMs:()=>a.lastEventAtMs,closeStdin:()=>{o.stdin?.end(),U()},label:e})}):o.stdin?.end(),!a.exited)){let U=t.closeTimeoutMs??2e3;await Promise.race([O(),Wn(U)]),a.exited||await ue(o,{stdinEnd:!1,softDelayMs:Math.min(1e3,U),killDelayMs:Math.min(1e3,U)}).catch(()=>{})}})()),a.closing}}}var aP,cP,Xf=L(()=>{"use strict";qr();Gr();nn();oe();hi();Ut();Hf();Ae();_t();Hf();aP={claude:"claude",qwen:"qwen"};cP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"]}});function Xl(t={}){return[]}var qf=L(()=>{"use strict"});function Gf(t){return t==="plan"?"read-only":"danger-full-access"}function Lw(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function ql(){return{agentItems:new Map,resultText:""}}function Xs(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 Gl(t){for(let[,e]of t.agentItems.entries())e.phase!=="commentary"&&e.buffer&&(t.resultText+=e.buffer);t.agentItems.clear()}function xw(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 Vl(){return{pendingCodexError:null}}function Jl(t,e){let n=xw(t);return n.willRetry||(e.pendingCodexError=n.turnError),n}function Kl(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 Vf=L(()=>{"use strict"});import{spawn as Cw}from"node:child_process";import{createInterface as Ow}from"node:readline";import{existsSync as uP,readFileSync as fP}from"node:fs";import{fileURLToPath as mP}from"node:url";function Dw(){return Lw(pP)}function dr(t,e){Me(`[codex:${t}] ${JSON.stringify(e)}`)}function hP(t){let e=t.stderr.trim(),n=`lmctl: codex app-server exited with code ${t.exitCode} before completing the turn.
1734
1734
  One possible cause: Codex stopped before delivering a terminal turn/completed event.`;return e?`Original provider error:
1735
1735
  ${Te(e,{provider:"codex"})}
1736
1736
 
1737
- ${n}`:n}function Mw(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?Xl():[];n.push(...s),ge()&&Ve(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let o=t.permissionMode??"yolo",i=Gf(o);if(Oe("codex",n,o),t.cwd&&!uP(t.cwd))throw F({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new ye(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:i,permissionMode:o,spawnEnv:xe(t.env,t.cwd,t.threadId)}}function $w(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 Pw(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=Mw(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=Cw(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:xe(e.env,e.cwd,e.threadId)}),l=bf(),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,F({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),ue(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,F({event:"transport_abort",provider:"codex"}),ue(a).catch(()=>{}),r(d(new Error("Aborted")))},{once:!0})}let f=Ow({input:a.stdout}),m=new Map,p=1,_=e.threadId||"",h="",g=!1,E=!1,y=Date.now(),T=ql(),w=Vl();function v(O,C={}){return new Promise((S,A)=>{let R=p++;m.set(R,{resolve:S,reject:A});let I=JSON.stringify({jsonrpc:"2.0",id:R,method:O,params:C});a.stdin?.write(I+`
1737
+ ${n}`:n}function Mw(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?Xl():[];n.push(...s),ge()&&Ve(JSON.stringify({event:"codex_mcp_inject",alias:t.alias??null,isLead:r,injected:s.length>0}));let o=t.permissionMode??"yolo",i=Gf(o);if(Oe("codex",n,o),t.cwd&&!uP(t.cwd))throw F({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new ye(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:i,permissionMode:o,spawnEnv:Le(t.env,t.cwd,t.threadId)}}function $w(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 Pw(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=Mw(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=Cw(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:Le(e.env,e.cwd,e.threadId)}),l=bf(),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,F({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),ue(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,F({event:"transport_abort",provider:"codex"}),ue(a).catch(()=>{}),r(d(new Error("Aborted")))},{once:!0})}let f=Ow({input:a.stdout}),m=new Map,p=1,_=e.threadId||"",h="",g=!1,E=!1,y=Date.now(),T=ql(),w=Vl();function v(O,C={}){return new Promise((S,A)=>{let R=p++;m.set(R,{resolve:S,reject:A});let I=JSON.stringify({jsonrpc:"2.0",id:R,method:O,params:C});a.stdin?.write(I+`
1738
1738
  `)})}function b(O,C={}){let S=JSON.stringify({jsonrpc:"2.0",method:O,params:C});a.stdin?.write(S+`
1739
- `)}f.on("line",O=>{let C;try{C=JSON.parse(O)}catch{return}if(typeof C.id=="number"&&m.has(C.id)){$w(l,C);let I=m.get(C.id);if(m.delete(C.id),C.error){let N=C.error,P=typeof N?.message=="string"&&N.message.length>0?N.message:JSON.stringify(C.error);I.reject(pi(`codex app-server error: ${P}`,N))}else I.resolve(C);e.onEvent?.(C);return}let S=C.method;if(!S){e.onEvent?.(C);return}if(u||!c.event(C))return;let A=c.usage();if(A&&e.onUsage?.(A),S==="thread/started"){let N=C.params?.thread;N?.id&&(_=N.id,e.onSessionId?.(_))}let R=ge()?I=>{dr("item.text/buffer-mismatch",{itemId:I.itemId,threadId:I.threadId??null,turnId:I.turnId??null,expectedFromItemText:I.expectedFromItemText,gotFromBuffer:I.gotFromBuffer,expectedLen:I.expectedFromItemText.length,gotLen:I.gotFromBuffer.length})}:void 0;if(S==="turn/started"){let I=C.params,N=I?.turn;N?.id&&(h=N.id),Xs(C,T,e.onDelta,R),ge()&&dr("turn/started",{params:I??null})}if(ge()&&(S==="item/started"||S==="item/completed")){let I=C.params;I?.item?.type==="agentMessage"&&dr(S,{params:I??null})}if(S==="item/started"||S==="item/agentMessage/delta"||S==="item/completed"){if(S==="item/agentMessage/delta"){let I=C.params;ge()&&dr("agentMessage/delta",{params:I??null})}Xs(C,T,e.onDelta,R)}if(S==="turn/completed"){c.finish();let I=C.params;if(ge())for(let[P,$]of T.agentItems.entries())$.buffer&&dr("turn/completed/unflushed-item",{itemId:P,phase:$.phase,bufferLen:$.buffer.length});Gl(T),ge()&&dr("turn/completed",{params:I??null});let N=Kl(C,w);N.shouldReject?(ge()&&dr("turn/completed/terminal-reject",{message:N.turnError.message}),E=!0,g=!0,a.stdin?.end(),r(d(N.turnError))):(g=!0,a.stdin?.end())}if(S==="error"){let I=Jl(C,w);if(ge()){let N=C.params,P=N?.error,$=typeof P?.message=="string"?P.message:"(no message)";dr(I.willRetry?"error/retry":"error/terminal-deferred",{message:$,willRetry:I.willRetry,params:N??null})}}e.onEvent?.(C)});let k="";a.stderr?.on("data",O=>{k+=O.toString()});let L=O=>{F({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let C=new ye(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let S of m.values())S.reject(d(C));m.clear(),r(d(C))};a.on("error",L),a.stdin?.on("error",L),a.on("exit",O=>{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 C=hP({exitCode:O,stderr:k});F({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,stderr_summary:C}),r(d(new Error(C)))}),(async()=>{try{if(await v("initialize",Dw()),b("initialized",{}),e.threadId)try{let O=v("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),C,S=new Promise((A,R)=>{C=setTimeout(()=>R(new Error("resume timeout")),3e4)});try{let R=(await Promise.race([O,S])).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(C)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1740
- `),F({event:"codex_thread_resume_fallback",provider:"codex",thread_id:e.threadId,error_message:O instanceof Error?O.message:String(O)});let S=(await v("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;S?.id&&(_=S.id,e.onSessionId?.(_))}else{let C=(await v("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}c=l.turn(_),await v("turn/start",{threadId:_,input:[{type:"text",text:t}],...e.model?{model:e.model}:{}})}catch(O){ue(a).catch(()=>{}),r(O instanceof Error?O:new Error(String(O)))}})()})}async function Fw(t){let{binary:e,codexArgs:n,sandbox:r}=Mw(t),s=Cw(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:xe(t.env,t.cwd,t.threadId)}),o=Date.now(),i={exited:!1,exitCode:null,completedTurns:0,closed:!1,closing:null},a=t.threadId||"",l=bf(),c=null,d="";s.stderr?.on("data",C=>{d+=C.toString()});let u=Ow({input:s.stdout}),f=new Map,m=1;function p(C,S={}){return new Promise((A,R)=>{let I=m++;f.set(I,{resolve:A,reject:R});let N=JSON.stringify({jsonrpc:"2.0",id:I,method:C,params:S});s.stdin?.write(N+`
1739
+ `)}f.on("line",O=>{let C;try{C=JSON.parse(O)}catch{return}if(typeof C.id=="number"&&m.has(C.id)){$w(l,C);let I=m.get(C.id);if(m.delete(C.id),C.error){let N=C.error,P=typeof N?.message=="string"&&N.message.length>0?N.message:JSON.stringify(C.error);I.reject(pi(`codex app-server error: ${P}`,N))}else I.resolve(C);e.onEvent?.(C);return}let S=C.method;if(!S){e.onEvent?.(C);return}if(u||!c.event(C))return;let A=c.usage();if(A&&e.onUsage?.(A),S==="thread/started"){let N=C.params?.thread;N?.id&&(_=N.id,e.onSessionId?.(_))}let R=ge()?I=>{dr("item.text/buffer-mismatch",{itemId:I.itemId,threadId:I.threadId??null,turnId:I.turnId??null,expectedFromItemText:I.expectedFromItemText,gotFromBuffer:I.gotFromBuffer,expectedLen:I.expectedFromItemText.length,gotLen:I.gotFromBuffer.length})}:void 0;if(S==="turn/started"){let I=C.params,N=I?.turn;N?.id&&(h=N.id),Xs(C,T,e.onDelta,R),ge()&&dr("turn/started",{params:I??null})}if(ge()&&(S==="item/started"||S==="item/completed")){let I=C.params;I?.item?.type==="agentMessage"&&dr(S,{params:I??null})}if(S==="item/started"||S==="item/agentMessage/delta"||S==="item/completed"){if(S==="item/agentMessage/delta"){let I=C.params;ge()&&dr("agentMessage/delta",{params:I??null})}Xs(C,T,e.onDelta,R)}if(S==="turn/completed"){c.finish();let I=C.params;if(ge())for(let[P,$]of T.agentItems.entries())$.buffer&&dr("turn/completed/unflushed-item",{itemId:P,phase:$.phase,bufferLen:$.buffer.length});Gl(T),ge()&&dr("turn/completed",{params:I??null});let N=Kl(C,w);N.shouldReject?(ge()&&dr("turn/completed/terminal-reject",{message:N.turnError.message}),E=!0,g=!0,a.stdin?.end(),r(d(N.turnError))):(g=!0,a.stdin?.end())}if(S==="error"){let I=Jl(C,w);if(ge()){let N=C.params,P=N?.error,$=typeof P?.message=="string"?P.message:"(no message)";dr(I.willRetry?"error/retry":"error/terminal-deferred",{message:$,willRetry:I.willRetry,params:N??null})}}e.onEvent?.(C)});let k="";a.stderr?.on("data",O=>{k+=O.toString()});let x=O=>{F({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let C=new ye(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let S of m.values())S.reject(d(C));m.clear(),r(d(C))};a.on("error",x),a.stdin?.on("error",x),a.on("exit",O=>{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 C=hP({exitCode:O,stderr:k});F({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,stderr_summary:C}),r(d(new Error(C)))}),(async()=>{try{if(await v("initialize",Dw()),b("initialized",{}),e.threadId)try{let O=v("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),C,S=new Promise((A,R)=>{C=setTimeout(()=>R(new Error("resume timeout")),3e4)});try{let R=(await Promise.race([O,S])).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(C)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1740
+ `),F({event:"codex_thread_resume_fallback",provider:"codex",thread_id:e.threadId,error_message:O instanceof Error?O.message:String(O)});let S=(await v("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;S?.id&&(_=S.id,e.onSessionId?.(_))}else{let C=(await v("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}c=l.turn(_),await v("turn/start",{threadId:_,input:[{type:"text",text:t}],...e.model?{model:e.model}:{}})}catch(O){ue(a).catch(()=>{}),r(O instanceof Error?O:new Error(String(O)))}})()})}async function Fw(t){let{binary:e,codexArgs:n,sandbox:r}=Mw(t),s=Cw(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Le(t.env,t.cwd,t.threadId)}),o=Date.now(),i={exited:!1,exitCode:null,completedTurns:0,closed:!1,closing:null},a=t.threadId||"",l=bf(),c=null,d="";s.stderr?.on("data",C=>{d+=C.toString()});let u=Ow({input:s.stdout}),f=new Map,m=1;function p(C,S={}){return new Promise((A,R)=>{let I=m++;f.set(I,{resolve:A,reject:R});let N=JSON.stringify({jsonrpc:"2.0",id:I,method:C,params:S});s.stdin?.write(N+`
1741
1741
  `)})}function _(C,S={}){let A=JSON.stringify({jsonrpc:"2.0",method:C,params:S});s.stdin?.write(A+`
1742
- `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(C=>{h.push(C)}),E=()=>new Error(`codex bundle process exited${i.exitCode!==null?` with code ${i.exitCode}`:""} after ${i.completedTurns} completed prompt(s); the bundle cannot continue`),y=null,T=null,w,v,b=C=>{C.turnId&&p("turn/interrupt",{threadId:a,turnId:C.turnId}).catch(()=>{})};function k(C){let S=y;S===null||S.settled||(S.settled=!0,y=null,S.usage.finish(),C&&S.reject(Object.assign(C,{usage:S.usage.usage(),sessionId:a})))}u.on("line",C=>{let S;try{S=JSON.parse(C)}catch{return}if(typeof S.id=="number"&&f.has(S.id)){$w(l,S);let $=f.get(S.id);if(f.delete(S.id),S.error){let q=S.error,M=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(S.error);$.reject(pi(`codex app-server error: ${M}`,q))}else $.resolve(S);y?.onEvent?.(S);return}let A=S.method;if(!A){y?.onEvent?.(S);return}if(A==="thread/started"){let q=S.params?.thread;q?.id&&(a=q.id,t.onSessionId?.(a))}let R=S.params,I=R?.turnId??R?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&I&&(T.usage.bind(I),T.usage.finish(),T.turnId=I,b(T)),A==="turn/completed"&&I===T.turnId&&(l.remember(a,I),T=null,v?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let N=y;if(I&&N?.turnId&&I!==N.turnId||N!==null&&!N.usage.event(S))return;let P=N?.usage.usage();if(P&&N?.onUsage?.(P),A==="turn/started"&&N!==null){let q=S.params?.turn;q?.id&&(N.turnId=q.id),Xs(S,N.agentState,N.onDelta,void 0)}if(N!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&Xs(S,N.agentState,N.onDelta,void 0),A==="turn/completed"&&N!==null&&!N.settled){Gl(N.agentState);let $=Kl(S,N.turnState);N.settled=!0,N.usage.finish(),y=null,$.shouldReject?N.reject(Object.assign($.turnError,{usage:N.usage.usage(),sessionId:a})):(i.completedTurns+=1,N.resolve({text:N.agentState.resultText,usage:N.usage.usage(),sessionId:a,turnId:N.turnId,durationMs:Date.now()-N.startMs}))}A==="error"&&N!==null&&Jl(S,N.turnState),N?.onEvent?.(S)});let L=C=>{c=new ye(`Failed to spawn codex app-server: ${C.message}`,{cause:C}),F({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:C.message});for(let S of f.values())S.reject(c);f.clear(),k(c)};s.on("error",L),s.stdin?.on("error",L),s.on("exit",C=>{i.exited=!0,v?.(),i.exitCode=C;let S=E();for(let R of f.values())R.reject(S);f.clear();let A=y;if(A!==null&&!A.settled)if(A.settled=!0,A.usage.finish(),y=null,A.turnState.pendingCodexError)A.reject(Object.assign(A.turnState.pendingCodexError,{usage:A.usage.usage(),sessionId:a}));else{let R=d.trim()?Te(d,{provider:"codex"}):"";F({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:C,...R?{stderr_summary:R}:{}}),A.reject(Object.assign(R?new Error(`${S.message}
1743
- ${R}`):S,{usage:A.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()});try{if(await p("initialize",Dw()),_("initialized",{}),t.threadId){let C;try{C=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 S=C.result?.thread;if(S?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${S?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let S=(await p("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;S?.id&&(a=S.id,t.onSessionId?.(a))}}catch(C){let S=c??(C instanceof Error?C:new Error(String(C))),A=t.closeTimeoutMs??2e3;throw await ue(s,{softDelayMs:Math.min(1e3,A),killDelayMs:Math.min(1e3,A)}).catch(()=>{}),S}let O=C=>new Promise(S=>{setTimeout(S,C).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(C,S={}){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(S.signal?.aborted)throw new Error("Aborted");return new Promise((A,R)=>{let I={usage:l.turn(a),onUsage:S.onUsage,agentState:ql(),turnState:Vl(),resolve:A,reject:R,startMs:Date.now(),turnId:"",onDelta:S.onDelta,onEvent:S.onEvent,settled:!1};y=I;let N=()=>{I.settled||(I.settled=!0,y=null,T=I,w=new Promise(P=>{v=P}),b(I),S.signal?.removeEventListener("abort",N),I.usage.finish(),R(Object.assign(new Error("Aborted"),{usage:I.usage.usage(),sessionId:a})))};S.signal?.addEventListener("abort",N,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:C}],...t.model?{model:t.model}:{}}).then(P=>{I.usage.bind(P.result?.turn?.id)}).catch(P=>{if(I.settled){T===I&&(T=null,v?.());return}I.settled=!0,y=null,S.signal?.removeEventListener("abort",N),I.usage.finish(),R(Object.assign(i.exited?E():P instanceof Error?P:new Error(String(P)),{usage:I.usage.usage(),sessionId:a}))})})},close(){return i.closing!==null||(i.closing=(async()=>{if(i.closed=!0,v?.(),!i.exited&&(t.holdOpen!==void 0?await new Promise(C=>{tn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),C()},label:"codex"})}):s.stdin?.end(),!i.exited)){let C=t.closeTimeoutMs??2e3;await Promise.race([g(),O(C)]),i.exited||await ue(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,C),killDelayMs:Math.min(1e3,C)}).catch(()=>{})}})()),i.closing}}}var pP,Uw=x(()=>{"use strict";Af();oe();oe();qr();Gr();hi();nn();qf();oe();Ut();_t();Vf();Vf();pP=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(fP(mP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Yl(t){let e=[...t.matchAll(_P)];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(wP(t.replace(gP,"")))}function wP(t){let e=yP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(EP)];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(TP)];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 Ln(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function Bw(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function zl(t={}){let e="",n="",r="",s=!1,o=!1,i=!1,a=t.isolateResult??(t.tool==="gemini"?Yl: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=Bw(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&&vP.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 Ww,_P,gP,yP,EP,TP,vP,gi=x(()=>{"use strict";Ww="(?:png|jpe?g|webp|heic|pdf)",_P=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${Ww}\\s*`,"gi"),gP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${Ww}\\s*`,"i"),yP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,EP=/^STANCE:\s+\S+\s*$/gim,TP=/\[Thought:\s*true\]\s*/gi;vP=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var Jf=x(()=>{"use strict";Df()});var Ql,Hw=x(()=>{"use strict";Ql={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 SP,readdirSync as Xw}from"node:fs";import{join as Zl}from"node:path";function qw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Zl(Q,".gemini"),r=Zl(n,"tmp"),s;try{s=Xw(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=Zl(r,a,"chats"),c;try{c=Xw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=SP(Zl(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 yi,Gw=x(()=>{"use strict";gi();Ae();nn();yi={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...yi.baseArgs];if(t.permissionMode==="plan"){let n=cr("gemini","plan"),r=cr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Yl,sessionIdentity:{verifyLoadedSession:t=>{qw(t.requestedSessionId,t.env)},recheckSession:t=>{qw(t.requestedSessionId,t.env)}}}});import{existsSync as bP,readFileSync as IP}from"node:fs";import{join as Kf}from"node:path";function Vw(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??Kf(Q,".copilot"),r=Kf(n,"session-state",t),s=Kf(r,"workspace.yaml");if(!bP(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=IP(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 Ei,Jw=x(()=>{"use strict";oe();Ae();Ei={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.
1742
+ `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(C=>{h.push(C)}),E=()=>new Error(`codex bundle process exited${i.exitCode!==null?` with code ${i.exitCode}`:""} after ${i.completedTurns} completed prompt(s); the bundle cannot continue`),y=null,T=null,w,v,b=C=>{C.turnId&&p("turn/interrupt",{threadId:a,turnId:C.turnId}).catch(()=>{})};function k(C){let S=y;S===null||S.settled||(S.settled=!0,y=null,S.usage.finish(),C&&S.reject(Object.assign(C,{usage:S.usage.usage(),sessionId:a})))}u.on("line",C=>{let S;try{S=JSON.parse(C)}catch{return}if(typeof S.id=="number"&&f.has(S.id)){$w(l,S);let $=f.get(S.id);if(f.delete(S.id),S.error){let q=S.error,M=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(S.error);$.reject(pi(`codex app-server error: ${M}`,q))}else $.resolve(S);y?.onEvent?.(S);return}let A=S.method;if(!A){y?.onEvent?.(S);return}if(A==="thread/started"){let q=S.params?.thread;q?.id&&(a=q.id,t.onSessionId?.(a))}let R=S.params,I=R?.turnId??R?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&I&&(T.usage.bind(I),T.usage.finish(),T.turnId=I,b(T)),A==="turn/completed"&&I===T.turnId&&(l.remember(a,I),T=null,v?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let N=y;if(I&&N?.turnId&&I!==N.turnId||N!==null&&!N.usage.event(S))return;let P=N?.usage.usage();if(P&&N?.onUsage?.(P),A==="turn/started"&&N!==null){let q=S.params?.turn;q?.id&&(N.turnId=q.id),Xs(S,N.agentState,N.onDelta,void 0)}if(N!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&Xs(S,N.agentState,N.onDelta,void 0),A==="turn/completed"&&N!==null&&!N.settled){Gl(N.agentState);let $=Kl(S,N.turnState);N.settled=!0,N.usage.finish(),y=null,$.shouldReject?N.reject(Object.assign($.turnError,{usage:N.usage.usage(),sessionId:a})):(i.completedTurns+=1,N.resolve({text:N.agentState.resultText,usage:N.usage.usage(),sessionId:a,turnId:N.turnId,durationMs:Date.now()-N.startMs}))}A==="error"&&N!==null&&Jl(S,N.turnState),N?.onEvent?.(S)});let x=C=>{c=new ye(`Failed to spawn codex app-server: ${C.message}`,{cause:C}),F({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:C.message});for(let S of f.values())S.reject(c);f.clear(),k(c)};s.on("error",x),s.stdin?.on("error",x),s.on("exit",C=>{i.exited=!0,v?.(),i.exitCode=C;let S=E();for(let R of f.values())R.reject(S);f.clear();let A=y;if(A!==null&&!A.settled)if(A.settled=!0,A.usage.finish(),y=null,A.turnState.pendingCodexError)A.reject(Object.assign(A.turnState.pendingCodexError,{usage:A.usage.usage(),sessionId:a}));else{let R=d.trim()?Te(d,{provider:"codex"}):"";F({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:C,...R?{stderr_summary:R}:{}}),A.reject(Object.assign(R?new Error(`${S.message}
1743
+ ${R}`):S,{usage:A.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()});try{if(await p("initialize",Dw()),_("initialized",{}),t.threadId){let C;try{C=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 S=C.result?.thread;if(S?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${S?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let S=(await p("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;S?.id&&(a=S.id,t.onSessionId?.(a))}}catch(C){let S=c??(C instanceof Error?C:new Error(String(C))),A=t.closeTimeoutMs??2e3;throw await ue(s,{softDelayMs:Math.min(1e3,A),killDelayMs:Math.min(1e3,A)}).catch(()=>{}),S}let O=C=>new Promise(S=>{setTimeout(S,C).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(C,S={}){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(S.signal?.aborted)throw new Error("Aborted");return new Promise((A,R)=>{let I={usage:l.turn(a),onUsage:S.onUsage,agentState:ql(),turnState:Vl(),resolve:A,reject:R,startMs:Date.now(),turnId:"",onDelta:S.onDelta,onEvent:S.onEvent,settled:!1};y=I;let N=()=>{I.settled||(I.settled=!0,y=null,T=I,w=new Promise(P=>{v=P}),b(I),S.signal?.removeEventListener("abort",N),I.usage.finish(),R(Object.assign(new Error("Aborted"),{usage:I.usage.usage(),sessionId:a})))};S.signal?.addEventListener("abort",N,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:C}],...t.model?{model:t.model}:{}}).then(P=>{I.usage.bind(P.result?.turn?.id)}).catch(P=>{if(I.settled){T===I&&(T=null,v?.());return}I.settled=!0,y=null,S.signal?.removeEventListener("abort",N),I.usage.finish(),R(Object.assign(i.exited?E():P instanceof Error?P:new Error(String(P)),{usage:I.usage.usage(),sessionId:a}))})})},close(){return i.closing!==null||(i.closing=(async()=>{if(i.closed=!0,v?.(),!i.exited&&(t.holdOpen!==void 0?await new Promise(C=>{tn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),C()},label:"codex"})}):s.stdin?.end(),!i.exited)){let C=t.closeTimeoutMs??2e3;await Promise.race([g(),O(C)]),i.exited||await ue(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,C),killDelayMs:Math.min(1e3,C)}).catch(()=>{})}})()),i.closing}}}var pP,Uw=L(()=>{"use strict";Af();oe();oe();qr();Gr();hi();nn();qf();oe();Ut();_t();Vf();Vf();pP=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(fP(mP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Yl(t){let e=[...t.matchAll(_P)];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(wP(t.replace(gP,"")))}function wP(t){let e=yP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(EP)];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(TP)];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 xn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function Bw(t){let e=t.result;return typeof e?.stopReason=="string"?e.stopReason:""}function zl(t={}){let e="",n="",r="",s=!1,o=!1,i=!1,a=t.isolateResult??(t.tool==="gemini"?Yl: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=Bw(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&&vP.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 Ww,_P,gP,yP,EP,TP,vP,gi=L(()=>{"use strict";Ww="(?:png|jpe?g|webp|heic|pdf)",_P=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${Ww}\\s*`,"gi"),gP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${Ww}\\s*`,"i"),yP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,EP=/^STANCE:\s+\S+\s*$/gim,TP=/\[Thought:\s*true\]\s*/gi;vP=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var Jf=L(()=>{"use strict";Df()});var Ql,Hw=L(()=>{"use strict";Ql={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 SP,readdirSync as Xw}from"node:fs";import{join as Zl}from"node:path";function qw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Zl(Q,".gemini"),r=Zl(n,"tmp"),s;try{s=Xw(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=Zl(r,a,"chats"),c;try{c=Xw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=SP(Zl(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 yi,Gw=L(()=>{"use strict";gi();Ae();nn();yi={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...yi.baseArgs];if(t.permissionMode==="plan"){let n=cr("gemini","plan"),r=cr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Yl,sessionIdentity:{verifyLoadedSession:t=>{qw(t.requestedSessionId,t.env)},recheckSession:t=>{qw(t.requestedSessionId,t.env)}}}});import{existsSync as bP,readFileSync as IP}from"node:fs";import{join as Kf}from"node:path";function Vw(t,e){let n=e.COPILOT_HOME??process.env.COPILOT_HOME??Kf(Q,".copilot"),r=Kf(n,"session-state",t),s=Kf(r,"workspace.yaml");if(!bP(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=IP(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 Ei,Jw=L(()=>{"use strict";oe();Ae();Ei={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.
1744
1744
  `),F({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.
1745
- `),F({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...Ei.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{Vw(t.requestedSessionId,t.env)},recheckSession:t=>{Vw(t.requestedSessionId,t.env)}}}});import{existsSync as zw,mkdirSync as kP,readFileSync as Qw,writeFileSync as Kw}from"node:fs";import{join as Ti,resolve as AP}from"node:path";function Zw(t){if(t==="allow")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=Object.entries(t);if(e.length===1&&e[0][0]==="*"&&e[0][1]==="allow")return!0}return!1}function Yf(t,e,n={existsSync:zw,readFileSync:Qw}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let o=AP(e,s.sessiondir??e);for(let i of RP(o)){let a=NP(i,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(Zw(a.permission)||r.push(`[${s.alias}] ${i} sets a non-allow \`permission\`, which opencode merges over lmctl's YOLO (.opencode/opencode.json permission:"allow") \u2014 the member may hang on permission prompts. Set \`permission: "allow"\` in that file (or remove the key).`))}}return r}function RP(t){return[Ti(t,".opencode","opencode.jsonc"),Ti(t,"opencode.jsonc"),Ti(t,"opencode.json")]}function NP(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse(xP(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function xP(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]!==`
1745
+ `),F({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...Ei.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{Vw(t.requestedSessionId,t.env)},recheckSession:t=>{Vw(t.requestedSessionId,t.env)}}}});import{existsSync as zw,mkdirSync as kP,readFileSync as Qw,writeFileSync as Kw}from"node:fs";import{join as Ti,resolve as AP}from"node:path";function Zw(t){if(t==="allow")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=Object.entries(t);if(e.length===1&&e[0][0]==="*"&&e[0][1]==="allow")return!0}return!1}function Yf(t,e,n={existsSync:zw,readFileSync:Qw}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let o=AP(e,s.sessiondir??e);for(let i of RP(o)){let a=NP(i,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(Zw(a.permission)||r.push(`[${s.alias}] ${i} sets a non-allow \`permission\`, which opencode merges over lmctl's YOLO (.opencode/opencode.json permission:"allow") \u2014 the member may hang on permission prompts. Set \`permission: "allow"\` in that file (or remove the key).`))}}return r}function RP(t){return[Ti(t,".opencode","opencode.jsonc"),Ti(t,"opencode.jsonc"),Ti(t,"opencode.json")]}function NP(t,e){try{if(!e.existsSync(t))return;let n=e.readFileSync(t,"utf-8"),r=JSON.parse(LP(n));return r===null||typeof r!="object"||Array.isArray(r)?void 0:r}catch{return}}function LP(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]!==`
1746
1746
  `;)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 ev(t,e={}){let n=Ti(t,".opencode"),r=Ti(n,"opencode.json");if(!zw(r)){kP(n,{recursive:!0});let i=JSON.stringify({permission:"allow"},null,2);return Kw(r,i+`
1747
1747
  `,"utf-8"),!0}let s;try{s=JSON.parse(Qw(r,"utf-8"))}catch{return console.log(Yw.yellow(` .opencode/opencode.json at ${r} is malformed \u2014 skipping opencode config install.`)),!1}if(typeof s!="object"||s===null)return console.log(Yw.yellow(` .opencode/opencode.json at ${r} is not an object \u2014 skipping opencode config install.`)),!1;let o=!1;return s.permission===void 0&&(s.permission="allow",o=!0),Zw(s.permission)||F({event:"opencode_yolo_override",provider:"opencode",config_path:r,user_permission:s.permission,message:`opencode.json has a user-set 'permission' value other than 'allow' \u2014 lmctl's YOLO contract is NOT in effect; turns may hang waiting on permission prompts. Set permission: "allow" or remove the key to restore YOLO.`}),o&&Kw(r,JSON.stringify(s,null,2)+`
1748
- `,"utf-8"),o}var Yw,zf=x(()=>{"use strict";oe();Yw={yellow:t=>t}});import{existsSync as Zf,readdirSync as LP,statSync as tv}from"node:fs";import{join as ur}from"node:path";import{createRequire as CP}from"node:module";function em(){return Qf===null&&(Qf=CP(import.meta.url)("node:sqlite").DatabaseSync),Qf}function nv(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function rv(t,e){if(!e)return;t.observed=!0;let n=e.input??0,r=e.output??0,s=e.reasoning??0,o=e.cache?.read??0,i=e.cache?.write??0;if(t.totalInputTokens+=n,t.totalCachedInputTokens+=o,t.totalCacheWriteInputTokens+=i,t.totalOutputTokens+=r,t.totalReasoningOutputTokens+=s,n+r+s+o+i>0){let a=n+o+i;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:n,cachedInputTokens:o,cacheWriteInputTokens:i,outputTokens:r,reasoningOutputTokens:s,totalTokens:a+r+s}}}function sv(t){return t.observed?{totalInputTokens:t.totalInputTokens,totalCachedInputTokens:t.totalCachedInputTokens,totalCacheWriteInputTokens:t.totalCacheWriteInputTokens,totalOutputTokens:t.totalOutputTokens,totalReasoningOutputTokens:t.totalReasoningOutputTokens,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}:{}}function ov(){let t=process.env.XDG_DATA_HOME||ur(Q,".local","share"),e=process.env.XDG_CONFIG_HOME||ur(Q,".config");return[ur(t,"opencode","opencode.db"),ur(e,"opencode","opencode.db")]}function OP(){return DP(process.env,Q)}function DP(t,e){if(t.OPENCODE_DB)return[t.OPENCODE_DB];let n=t.XDG_DATA_HOME||ur(e,".local","share"),r=ur(n,"lmplayer"),s=ur(r,"opencode-local.db"),o=[s];try{let i=LP(r).filter(a=>/^opencode.*\.db$/u.test(a)).map(a=>ur(r,a)).filter(a=>a!==s).sort((a,l)=>{try{return tv(l).mtimeMs-tv(a).mtimeMs}catch{return 0}});o.push(...i)}catch{}return o}function MP(t){return t==="lmplayer"?OP():ov()}function tm(t,e){let n=e?.dbPath!==void 0?[e.dbPath]:ov();for(let r of n){if(!Zf(r))continue;let s=new(em())(r,{open:!0,readOnly:!0});try{s.exec("PRAGMA busy_timeout = 5000");let o=s.prepare("SELECT directory FROM session WHERE id = ?").get(t);if(o!==void 0)return{directory:typeof o.directory=="string"?o.directory:""}}finally{s.close()}}return null}var Qf,qs,ec=x(()=>{"use strict";Ae();oe();Qf=null;qs=class{name;startCommand;dbPaths;busyTimeoutMs;constructor(e){this.name=e?.providerName??"opencode",this.startCommand=e?.startCommand??this.name,this.busyTimeoutMs=e?.busyTimeoutMs??5e3,e?.dbPaths?this.dbPaths=[...e.dbPaths]:e?.dbPath?this.dbPaths=[e.dbPath]:this.dbPaths=MP(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>Zf(e))}openDb(e){if(!Zf(e))return null;let n=new(em())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),n}async discoverSessions(){let e=[];for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=new Map,o=r.prepare("SELECT id, worktree, name FROM project").all();for(let a of o)s.set(a.id,a);let i=r.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
1748
+ `,"utf-8"),o}var Yw,zf=L(()=>{"use strict";oe();Yw={yellow:t=>t}});import{existsSync as Zf,readdirSync as xP,statSync as tv}from"node:fs";import{join as ur}from"node:path";import{createRequire as CP}from"node:module";function em(){return Qf===null&&(Qf=CP(import.meta.url)("node:sqlite").DatabaseSync),Qf}function nv(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function rv(t,e){if(!e)return;t.observed=!0;let n=e.input??0,r=e.output??0,s=e.reasoning??0,o=e.cache?.read??0,i=e.cache?.write??0;if(t.totalInputTokens+=n,t.totalCachedInputTokens+=o,t.totalCacheWriteInputTokens+=i,t.totalOutputTokens+=r,t.totalReasoningOutputTokens+=s,n+r+s+o+i>0){let a=n+o+i;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:n,cachedInputTokens:o,cacheWriteInputTokens:i,outputTokens:r,reasoningOutputTokens:s,totalTokens:a+r+s}}}function sv(t){return t.observed?{totalInputTokens:t.totalInputTokens,totalCachedInputTokens:t.totalCachedInputTokens,totalCacheWriteInputTokens:t.totalCacheWriteInputTokens,totalOutputTokens:t.totalOutputTokens,totalReasoningOutputTokens:t.totalReasoningOutputTokens,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}:{}}function ov(){let t=process.env.XDG_DATA_HOME||ur(Q,".local","share"),e=process.env.XDG_CONFIG_HOME||ur(Q,".config");return[ur(t,"opencode","opencode.db"),ur(e,"opencode","opencode.db")]}function OP(){return DP(process.env,Q)}function DP(t,e){if(t.OPENCODE_DB)return[t.OPENCODE_DB];let n=t.XDG_DATA_HOME||ur(e,".local","share"),r=ur(n,"lmplayer"),s=ur(r,"opencode-local.db"),o=[s];try{let i=xP(r).filter(a=>/^opencode.*\.db$/u.test(a)).map(a=>ur(r,a)).filter(a=>a!==s).sort((a,l)=>{try{return tv(l).mtimeMs-tv(a).mtimeMs}catch{return 0}});o.push(...i)}catch{}return o}function MP(t){return t==="lmplayer"?OP():ov()}function tm(t,e){let n=e?.dbPath!==void 0?[e.dbPath]:ov();for(let r of n){if(!Zf(r))continue;let s=new(em())(r,{open:!0,readOnly:!0});try{s.exec("PRAGMA busy_timeout = 5000");let o=s.prepare("SELECT directory FROM session WHERE id = ?").get(t);if(o!==void 0)return{directory:typeof o.directory=="string"?o.directory:""}}finally{s.close()}}return null}var Qf,qs,ec=L(()=>{"use strict";Ae();oe();Qf=null;qs=class{name;startCommand;dbPaths;busyTimeoutMs;constructor(e){this.name=e?.providerName??"opencode",this.startCommand=e?.startCommand??this.name,this.busyTimeoutMs=e?.busyTimeoutMs??5e3,e?.dbPaths?this.dbPaths=[...e.dbPaths]:e?.dbPath?this.dbPaths=[e.dbPath]:this.dbPaths=MP(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>Zf(e))}openDb(e){if(!Zf(e))return null;let n=new(em())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),n}async discoverSessions(){let e=[];for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=new Map,o=r.prepare("SELECT id, worktree, name FROM project").all();for(let a of o)s.set(a.id,a);let i=r.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
1749
1749
  s.time_created, s.time_updated
1750
1750
  FROM session s
1751
1751
  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
@@ -1759,75 +1759,75 @@ ${R}`):S,{usage:A.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()});tr
1759
1759
  WHERE s.id LIKE ?
1760
1760
  ORDER BY s.time_updated DESC
1761
1761
  LIMIT 2`).all(`${n}%`);return s.length!==1?null:s[0]}}});function wi(t){return{id:t.id,onFailure:"non-fatal",applies:e=>t.value(e)!==void 0,run:async e=>{await e.sendRpc("session/set_config_option",{sessionId:e.sessionId,configId:t.configId,value:t.value(e)})},describeFailure:(e,n)=>{let r=t.value(e),s=n instanceof Error?n.message:String(n);return{event:"acp_config_option_failed",fields:{config_id:t.configId,value:r,error_message:s},stderrLine:`[acp] set_config_option(${t.configId}=${r}) failed: ${s}
1762
- `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var nm=x(()=>{"use strict"});import{spawn as $P}from"node:child_process";import{resolve as iv}from"node:path";function vi(t){let e;try{e=$P(t.binaryPath??Vr.binary,[...Vr.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:xe(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=lr(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}ue(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=Ln(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 Vr,rm=x(()=>{"use strict";oe();zf();ec();gi();Ut();Gr();Jf();nm();Vr={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...Vr.baseArgs],preSpawn(t){try{ev(t.cwd)}catch(e){F({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[wi({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),wi({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:vi,sessionIdentity:{verifyLoadedSession:t=>{let e=tm(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(iv(e.directory)!==iv(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(tm(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 PP}from"node:fs";import{readdir as FP}from"node:fs/promises";import{join as sm,resolve as UP}from"node:path";function lv(t){let e=jP.exec(t);return e?e[0]:null}function WP(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(`
1762
+ `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var nm=L(()=>{"use strict"});import{spawn as $P}from"node:child_process";import{resolve as iv}from"node:path";function vi(t){let e;try{e=$P(t.binaryPath??Vr.binary,[...Vr.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Le(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=lr(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}ue(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=xn(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 Vr,rm=L(()=>{"use strict";oe();zf();ec();gi();Ut();Gr();Jf();nm();Vr={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...Vr.baseArgs],preSpawn(t){try{ev(t.cwd)}catch(e){F({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[wi({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),wi({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:vi,sessionIdentity:{verifyLoadedSession:t=>{let e=tm(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(iv(e.directory)!==iv(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(tm(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 PP}from"node:fs";import{readdir as FP}from"node:fs/promises";import{join as sm,resolve as UP}from"node:path";function lv(t){let e=jP.exec(t);return e?e[0]:null}function WP(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(`
1763
1763
  `);if(/\bcode:\s*-32601\b/.test(a)&&/Method not found[^]*notifications\/initialized/.test(a)){r=i;continue}}n.push(s)}return n.join(`
1764
- `)}async function av(t,e){let n=UP(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??sm(Q,".kimi-code")),r=sm(n,"sessions"),s;try{s=await FP(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()&&PP(sm(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 jP,om,Si,im=x(()=>{"use strict";oe();Ae();nm();jP=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;om=t=>t.permissionMode==="plan"?"plan":"auto";Si={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...Si.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:om(t)})},describeFailure:(t,e)=>{let n=om(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=${om(t)}) ok`},wi({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=lv(t.result);e!==null&&F({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:WP,sessionIdentity:{verifyLoadedSession:async t=>{await av(t.requestedSessionId,t.env)},recheckSession:async t=>{await av(t.requestedSessionId,t.env)}}}});var bi,cv=x(()=>{"use strict";bi={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...bi.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}
1765
- `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function Ii(t){return BP[t]}var BP,HP,dv=x(()=>{"use strict";Hw();Gw();Jw();rm();im();cv();BP={miniplayer:Ql,gemini:yi,copilot:Ei,opencode:Vr,kimi:Si,hermes:bi};HP={miniplayer:{binary:Ql.binary,args:Ql.baseArgs},gemini:{binary:yi.binary,args:yi.baseArgs},copilot:{binary:Ei.binary,args:Ei.baseArgs},opencode:{binary:Vr.binary,args:Vr.baseArgs},kimi:{binary:Si.binary,args:Si.baseArgs},hermes:{binary:bi.binary,args:bi.baseArgs}}});import{spawn as uv}from"node:child_process";import{existsSync as XP}from"node:fs";function fv(t,e){let n=Ii(t)?.modeVocabulary;if(!n)throw new ye(`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 ye(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new ye(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function qP(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} ACP process exited with code ${t.exitCode} before completing the prompt.
1764
+ `)}async function av(t,e){let n=UP(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??sm(Q,".kimi-code")),r=sm(n,"sessions"),s;try{s=await FP(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()&&PP(sm(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 jP,om,Si,im=L(()=>{"use strict";oe();Ae();nm();jP=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;om=t=>t.permissionMode==="plan"?"plan":"auto";Si={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...Si.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:om(t)})},describeFailure:(t,e)=>{let n=om(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=${om(t)}) ok`},wi({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=lv(t.result);e!==null&&F({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:WP,sessionIdentity:{verifyLoadedSession:async t=>{await av(t.requestedSessionId,t.env)},recheckSession:async t=>{await av(t.requestedSessionId,t.env)}}}});var bi,cv=L(()=>{"use strict";bi={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...bi.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}
1765
+ `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function Ii(t){return BP[t]}var BP,HP,dv=L(()=>{"use strict";Hw();Gw();Jw();rm();im();cv();BP={miniplayer:Ql,gemini:yi,copilot:Ei,opencode:Vr,kimi:Si,hermes:bi};HP={miniplayer:{binary:Ql.binary,args:Ql.baseArgs},gemini:{binary:yi.binary,args:yi.baseArgs},copilot:{binary:Ei.binary,args:Ei.baseArgs},opencode:{binary:Vr.binary,args:Vr.baseArgs},kimi:{binary:Si.binary,args:Si.baseArgs},hermes:{binary:bi.binary,args:bi.baseArgs}}});import{spawn as uv}from"node:child_process";import{existsSync as XP}from"node:fs";function fv(t,e){let n=Ii(t)?.modeVocabulary;if(!n)throw new ye(`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 ye(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new ye(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function qP(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} ACP process exited with code ${t.exitCode} before completing the prompt.
1766
1766
  One possible cause: the provider process failed before a complete ACP response was delivered.`;return e?`Original provider error:
1767
1767
  ${Te(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
1768
1768
 
1769
- ${n}`:n}function GP(t,e){return Ii(t)?.filterExpectedStderr?.(e)??e}function mv(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 pv(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&&Me(s.successLog(o))}catch(i){let a=s.describeFailure(o,i);if(F({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 hv(t,e,n){let r=xe(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(Oe(e.tool,o,i),e.cwd&&!XP(e.cwd))throw F({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new ye(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function _v(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
1770
- `),F({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=Ln(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Ln(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=Ln(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=Ln(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Ln(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function gv(t,e){let n=Ii(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{fv(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}=hv(n,e,a))}catch(k){return s(k instanceof Error?k:new Error(String(k)))}let u=uv(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,F({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),ue(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,F({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),ue(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=zl({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=lr(u,{provider:e.tool,onEvent:k=>{_=Date.now(),mv(k)&&(g=!0),e.onEvent?.(k)},onNotification:k=>{_=Date.now(),y.processMessage(k)}}),{sendRpc:w,sendNotification:v}=T,b="";u.stderr?.on("data",k=>{b+=k.toString()}),u.on("error",k=>{T.close(k),F({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:k.message,elapsed_ms:Date.now()-f}),s(new ye(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${k.message}`,{cause:k}))}),u.on("exit",k=>{if(p=!0,T.close(new ye(`ACP process exited with code ${String(k)}`)),m)return;let L=y.finalize();if(L!==null)n.onExitFinalization?.({...a,sessionId:L.sessionId,result:L.result,stopReason:L.stopReason,exitCode:k}),r({result:L.result,sessionId:L.sessionId,durationMs:Date.now()-f,stopReason:L.stopReason,exitCode:k,sawActivity:L.sawActivity,...i.length>0?{warnings:i}:{}});else{let O=GP(e.tool,b),C=qP({tool:e.tool,exitCode:k,stderr:O,fullOutput:b});F({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:k,stderr_summary:C,elapsed_ms:Date.now()-f}),s(new Error(C))}}),(async()=>{try{let k=await _v({sendRpc:w,sendNotification:v,opts:e,outputProcessor:y});E=k.sessionId,e.onSessionId?.(E);let L=k.sessionResponse;await pv(n,a,{sessionId:E,response:L},w),y.beginTurn(),h=!0,Me(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},C=>{C.error?y.cancelTurn():O=y.completeTurn(C)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,Me(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),tn(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(k){ue(u).catch(()=>{}),s(k instanceof Error?k:new Error(String(k)))}})()})}async function yv(t){let e=Ii(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&fv(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,o={permissionMode:n,...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.acpMode!==void 0?{acpMode:t.acpMode}:{},purpose:"chat",warnings:{push:L=>{r.push(L)}}},{binary:i,spawnArgs:a,spawnEnv:l}=hv(e,t,o),c=uv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,_="";c.stderr?.on("data",L=>{_+=L.toString()});let h,g,E=zl({tool:t.tool,onDelta:L=>h?.(L),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=lr(c,{provider:t.tool,onEvent:L=>{u.lastEventAtMs=Date.now(),mv(L)&&(u.backgroundJobLaunched=!0),g?.(L)},onNotification:L=>{u.lastEventAtMs=Date.now(),E.processMessage(L)}}),T=()=>new Error(`ACP bundle process (${t.tool}) exited${u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`),w=[],v=()=>u.exited?Promise.resolve():new Promise(L=>{w.push(L)}),b=null;c.on("error",L=>{p=new ye(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${L.message}`,{cause:L}),F({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:L.message,elapsed_ms:Date.now()-d}),y.close(L)}),c.on("exit",L=>{if(u.exited=!0,u.exitCode=L,y.close(new ye(`ACP process exited with code ${String(L)}`)),!u.telemetryFired){u.telemetryFired=!0;let O=E.finalize();O!==null&&e.onExitFinalization?.({...o,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:L})}if(b!==null){let O=b;b=null,O(T())}for(let O of w.splice(0))O()});try{let L=await _v({sendRpc:y.sendRpc,sendNotification:y.sendNotification,opts:t,outputProcessor:E,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...o,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});m=L.sessionId,t.onSessionId?.(m),await pv(e,o,{sessionId:L.sessionId,response:L.sessionResponse},y.sendRpc)}catch(L){let O=p??(L instanceof Error?L:new Error(String(L)));throw ue(c).catch(()=>{}),O}let k=L=>new Promise(O=>{setTimeout(O,L).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(L,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,h=O.onDelta,g=O.onEvent;let C=Date.now();try{E.beginTurn(),Me(`acp: bundle prompt sent (${L.length} chars)`);let S,A=!1;if(await new Promise((I,N)=>{b=N;let P,$=()=>{A=!0,f=Promise.resolve().then(()=>P).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),N(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",$,{once:!0}),P=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:L}]},M=>{A||(M.error?E.cancelTurn():S=E.completeTurn(M),h=void 0,g=void 0)}),P.then(M=>{q?.removeEventListener("abort",$),I(M)},M=>{q?.removeEventListener("abort",$),N(M instanceof Error?M:new Error(String(M)))})}),b=null,!S)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Me(`acp: bundle result received (${S.result.length} chars, stopReason=${S.stopReason})`);let R=s&&r.length>0?[...r]:void 0;return s=!1,{result:S.result,sessionId:S.sessionId,stopReason:S.stopReason,durationMs:Date.now()-C,sawActivity:S.sawActivity,...R!==void 0?{warnings:R}:{}}}catch(S){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():S}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=>{tn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let L=t.closeTimeoutMs??2e3;await Promise.race([v(),k(L)]),u.exited||await ue(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,L),killDelayMs:Math.min(1e3,L)}).catch(()=>{})})()),u.closing}}}var am=x(()=>{"use strict";oe();qr();Gr();hi();nn();oe();Ut();_t();gi();Jf();dv();im();rm();gi()});function we(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Ev(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=VP){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 Tv(){let t=new Map;return(e,n)=>{JP(e,Ev(t,n))}}function JP(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(we(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(we(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:we(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=we(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:we(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:we(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(`
1769
+ ${n}`:n}function GP(t,e){return Ii(t)?.filterExpectedStderr?.(e)??e}function mv(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 pv(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&&Me(s.successLog(o))}catch(i){let a=s.describeFailure(o,i);if(F({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 hv(t,e,n){let r=Le(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(Oe(e.tool,o,i),e.cwd&&!XP(e.cwd))throw F({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new ye(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function _v(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
1770
+ `),F({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=xn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=xn(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=xn(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=xn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=xn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function gv(t,e){let n=Ii(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{fv(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}=hv(n,e,a))}catch(k){return s(k instanceof Error?k:new Error(String(k)))}let u=uv(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,F({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),ue(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,F({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),ue(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=zl({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=lr(u,{provider:e.tool,onEvent:k=>{_=Date.now(),mv(k)&&(g=!0),e.onEvent?.(k)},onNotification:k=>{_=Date.now(),y.processMessage(k)}}),{sendRpc:w,sendNotification:v}=T,b="";u.stderr?.on("data",k=>{b+=k.toString()}),u.on("error",k=>{T.close(k),F({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:k.message,elapsed_ms:Date.now()-f}),s(new ye(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${k.message}`,{cause:k}))}),u.on("exit",k=>{if(p=!0,T.close(new ye(`ACP process exited with code ${String(k)}`)),m)return;let x=y.finalize();if(x!==null)n.onExitFinalization?.({...a,sessionId:x.sessionId,result:x.result,stopReason:x.stopReason,exitCode:k}),r({result:x.result,sessionId:x.sessionId,durationMs:Date.now()-f,stopReason:x.stopReason,exitCode:k,sawActivity:x.sawActivity,...i.length>0?{warnings:i}:{}});else{let O=GP(e.tool,b),C=qP({tool:e.tool,exitCode:k,stderr:O,fullOutput:b});F({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:k,stderr_summary:C,elapsed_ms:Date.now()-f}),s(new Error(C))}}),(async()=>{try{let k=await _v({sendRpc:w,sendNotification:v,opts:e,outputProcessor:y});E=k.sessionId,e.onSessionId?.(E);let x=k.sessionResponse;await pv(n,a,{sessionId:E,response:x},w),y.beginTurn(),h=!0,Me(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},C=>{C.error?y.cancelTurn():O=y.completeTurn(C)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,Me(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),tn(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(k){ue(u).catch(()=>{}),s(k instanceof Error?k:new Error(String(k)))}})()})}async function yv(t){let e=Ii(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&fv(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:x=>{r.push(x)}}},{binary:i,spawnArgs:a,spawnEnv:l}=hv(e,t,o),c=uv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode: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",x=>{_+=x.toString()});let h,g,E=zl({tool:t.tool,onDelta:x=>h?.(x),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=lr(c,{provider:t.tool,onEvent:x=>{u.lastEventAtMs=Date.now(),mv(x)&&(u.backgroundJobLaunched=!0),g?.(x)},onNotification:x=>{u.lastEventAtMs=Date.now(),E.processMessage(x)}}),T=()=>new Error(`ACP bundle process (${t.tool}) exited${u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`),w=[],v=()=>u.exited?Promise.resolve():new Promise(x=>{w.push(x)}),b=null;c.on("error",x=>{p=new ye(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${x.message}`,{cause:x}),F({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:x.message,elapsed_ms:Date.now()-d}),y.close(x)}),c.on("exit",x=>{if(u.exited=!0,u.exitCode=x,y.close(new ye(`ACP process exited with code ${String(x)}`)),!u.telemetryFired){u.telemetryFired=!0;let O=E.finalize();O!==null&&e.onExitFinalization?.({...o,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:x})}if(b!==null){let O=b;b=null,O(T())}for(let O of w.splice(0))O()});try{let x=await _v({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=x.sessionId,t.onSessionId?.(m),await pv(e,o,{sessionId:x.sessionId,response:x.sessionResponse},y.sendRpc)}catch(x){let O=p??(x instanceof Error?x:new Error(String(x)));throw ue(c).catch(()=>{}),O}let k=x=>new Promise(O=>{setTimeout(O,x).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(x,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 C=Date.now();try{E.beginTurn(),Me(`acp: bundle prompt sent (${x.length} chars)`);let S,A=!1;if(await new Promise((I,N)=>{b=N;let P,$=()=>{A=!0,f=Promise.resolve().then(()=>P).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),N(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",$,{once:!0}),P=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:x}]},M=>{A||(M.error?E.cancelTurn():S=E.completeTurn(M),h=void 0,g=void 0)}),P.then(M=>{q?.removeEventListener("abort",$),I(M)},M=>{q?.removeEventListener("abort",$),N(M instanceof Error?M:new Error(String(M)))})}),b=null,!S)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Me(`acp: bundle result received (${S.result.length} chars, stopReason=${S.stopReason})`);let R=s&&r.length>0?[...r]:void 0;return s=!1,{result:S.result,sessionId:S.sessionId,stopReason:S.stopReason,durationMs:Date.now()-C,sawActivity:S.sawActivity,...R!==void 0?{warnings:R}:{}}}catch(S){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():S}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=>{tn(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 x=t.closeTimeoutMs??2e3;await Promise.race([v(),k(x)]),u.exited||await ue(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,x),killDelayMs:Math.min(1e3,x)}).catch(()=>{})})()),u.closing}}}var am=L(()=>{"use strict";oe();qr();Gr();hi();nn();oe();Ut();_t();gi();Jf();dv();im();rm();gi()});function we(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Ev(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=VP){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 Tv(){let t=new Map;return(e,n)=>{JP(e,Ev(t,n))}}function JP(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(we(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(we(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:we(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=we(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:we(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:we(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(`
1771
1771
  `).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(`
1772
- `).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 tc(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?Tv():void 0;if(e.bundleSession!==void 0)return xn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await Rw(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 nc(t){let e=t.binary==="qwen"?"qwen":"claude",n=await Nw({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,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=Tv(),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 wv(){let t=new Map;return(e,n)=>{KP(e,Ev(t,n))}}function KP(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:we(a)});return}if(o==="agent_thought_chunk"||o==="thought"||o==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:we(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=we(JSON.stringify(c))),e({kind:"tool_use",tool:i,summary:we(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 ${we(c,80)}`:"running\u2026";e({kind:"other",summary:d,id:a})}return}e({kind:"other",summary:o})}}function vv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function rn(t,e){let n=e.acpTool||e.binary,r=e.onProgress?wv():void 0;if(e.bundleSession!==void 0)return xn(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";Ue({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await gv(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,...vv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function sn(t){let e=t.acpTool||t.binary,n=await yv({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});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=wv(),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,...vv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Sv(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: ${we(i,120)}`}:{kind:"other",summary:`codex error: ${we(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:we(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:we(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:we(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:we(s)}:{kind:"text",summary:we(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:we(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let o=s.split(`
1772
+ `).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 tc(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?Tv():void 0;if(e.bundleSession!==void 0)return Ln(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await Rw(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 nc(t){let e=t.binary==="qwen"?"qwen":"claude",n=await Nw({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,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=Tv(),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 wv(){let t=new Map;return(e,n)=>{KP(e,Ev(t,n))}}function KP(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:we(a)});return}if(o==="agent_thought_chunk"||o==="thought"||o==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:we(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=we(JSON.stringify(c))),e({kind:"tool_use",tool:i,summary:we(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 ${we(c,80)}`:"running\u2026";e({kind:"other",summary:d,id:a})}return}e({kind:"other",summary:o})}}function vv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function rn(t,e){let n=e.acpTool||e.binary,r=e.onProgress?wv():void 0;if(e.bundleSession!==void 0)return Ln(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";Ue({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await gv(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,...vv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function sn(t){let e=t.acpTool||t.binary,n=await yv({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});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=wv(),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,...vv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Sv(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: ${we(i,120)}`}:{kind:"other",summary:`codex error: ${we(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:we(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:we(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:we(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:we(s)}:{kind:"text",summary:we(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:we(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let o=s.split(`
1773
1773
  `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${we(i,60)}`:we(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(`
1774
- `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${we(i,60)}`:we(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 bv(t,e){if(e.bundleSession!==void 0)return xn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Pw(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=>Sv(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 Iv(t){let e=await Fw({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});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&&Sv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var VP,Cn=x(()=>{"use strict";Xf();Xf();Uw();am();js();oe();VP=256});function lm(t={}){let e=Sa(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends de{constructor(){super({provider:new va({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!1,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. Live ACP sessions cannot be resumed after exit."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>{if(s.sessionId||s.requireResume)throw new Error('miniplayer does not support resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"');return rn(r,{...s,env:n(s.env),acpTool:"miniplayer",requireResume:!1})}})}openSession(r){if(r.sessionId)throw new Error("miniplayer cannot reopen a closed ACP session; start a fresh conversation");return sn({...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.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal or session resume")}async seed(){return{success:!1,error:'miniplayer does not support team session resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"'}}}}var cm=x(()=>{"use strict";Je();Ia();Cn()});import{readdir as rc,stat as kv,unlink as YP}from"node:fs/promises";import{join as Gs,basename as Av}from"node:path";function zP(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function QP(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return he(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 ZP(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 e1(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 t1(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 Rv(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=e1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?ZP(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 _=t1(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 n1(t){let e=r1(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 r1(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 sc,Nv=x(()=>{"use strict";Ae();sc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Gs(Q,".claude"),this.projectsDir=Gs(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await rc(this.projectsDir)}catch{return e}for(let r of n){let s=Gs(this.projectsDir,r);if(!(await kv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await rc(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Av(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Gs(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await ht(e,50),s=await Ie(e),o="",i,a,l,c,d,u;for(let m of r)if(!zP(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 Rv(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 Ie(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:QP(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(`
1775
- `):"";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:he(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?he(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:he(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;n1(s);let h=await Rv(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 YP(n),!0):!1}async resolveSessionFile(e){let n;try{n=await rc(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=Gs(this.projectsDir,i);if(!(await kv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await rc(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Av(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Gs(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 ht(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as xv}from"node:path";function um(t){return new dm(t)}var dm,fm=x(()=>{"use strict";Nv();Je();Ae();Cn();Be();dm=class extends de{claudeDir;constructor(e){super({provider:new sc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",te,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:tc}),this.claudeDir=e?.claudeDir??xv(Q,".claude")}openSession(e){return nc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[xv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as s1,stat as Lv,unlink as o1}from"node:fs/promises";import{join as ki,basename as i1}from"node:path";function mm(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&a1.has(n)}function l1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Ai(t,e,n){let r=l1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function Cv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function c1(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 Vs(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 Vs(n)}).filter(n=>n.length>0).join(`
1776
- `);try{return JSON.stringify(t)}catch{return String(t)}}function d1(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 u1(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 Ov(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];mm(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=c1(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 a1,oc,Dv=x(()=>{"use strict";Ae();a1=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"]);oc=class{name="codex";codexDirs;constructor(e={}){let n=[ki(Q,".codex"),ki(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:ki(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=ki(n,"sessions");try{await Lv(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 s1(e)}catch{return n}for(let s of r){let o=ki(e,s),i=await Lv(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=i1(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 ht(e,30),r=await Ie(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];mm(_,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 Ov(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:Cv(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 Ie(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,_=[],h=new Set,g=[],E=(w,v)=>{let b=g.find(k=>!k.mirrored&&k.source!==v&&k.text===w);b?b.mirrored=!0:g.push({text:w,source:v,mirrored:!1})},y=()=>{_.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let v=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=Cv(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 L=b.content.filter((O,C)=>k[C]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1777
- `);k.includes("user.text")&&L&&(!b.id||!h.has(b.id))&&(E(L,"metadata"),b.id&&h.add(b.id))}for(let L=0;L<b.content.length;L++){let O=b.content[L];if(!mm(k,L)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let C=O.text.trim();c||(c=G(C,80)),d=G(C,80),Ai(s,p,{role:"user",timestamp:v,content:he(C)})}}continue}if(b.role==="assistant"&&b.content){for(let k of b.content)k.type==="output_text"&&typeof k.text=="string"&&k.text&&Ai(s,p,{role:"assistant",timestamp:v,content:he(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&&Ai(s,p,{role:"system",timestamp:v,content:he(k.text.trim())});continue}}if(b.type==="function_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.arguments!==void 0?he(Vs(b.arguments)):void 0,toolInputData:d1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Vs(b.output)),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.input!==void 0?he(Vs(b.input)):void 0,toolInputData:u1(b.name,b.input),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Vs(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let k=b.summary.map(L=>Vs(L.text)).join(`
1778
- `);k.trim()&&Ai(s,p,{role:"thinking",timestamp:v,content:he(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&&Ai(s,p,{role:"thinking",timestamp:v,content:he(b)})}}if(!o)return null;y();let T=await Ov(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 o1(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 ht(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 f1}from"node:child_process";import{realpathSync as Mv,readdirSync as m1}from"node:fs";import{homedir as p1}from"node:os";import{join as ic,resolve as $v,sep as h1}from"node:path";function _m(t){return new hm(t)}var pm,hm,gm=x(()=>{"use strict";Dv();Je();Cn();Be();pm="gpt-5.6-sol",hm=class extends de{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 oc(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn"},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:`${te}
1779
- `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:bv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(L,O)=>new Promise(C=>{let S=Math.ceil(n-performance.now());if(S<=0){C(void 0);return}let A,R=()=>{try{A?.kill("SIGKILL")}catch{}},I=()=>{R()},N=()=>{R()},P=()=>{R()};process.once("exit",I),process.once("SIGINT",N),process.once("SIGTERM",P);let $=()=>{process.removeListener("exit",I),process.removeListener("SIGINT",N),process.removeListener("SIGTERM",P)};A=f1(L,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:S,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{$(),C(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let L=s.match(/\{[\s\S]*\}/);if(L)try{o=JSON.parse(L[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=L=>typeof L=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(L)&&L.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,_=m+"; using the daemon's binary. "+p,h={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},g=$v(e.cwd,e.env.CODEX_HOME||ic(e.env.HOME||p1(),".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 v=L=>L.replace(/\+.*$/,""),b=v(d),k=process.arch==="arm64"?"aarch64":"x86_64";for(let L of["app-server-daemon","standalone"]){let O=ic(g,"packages",L,"releases");try{y.push(Mv(O)+h1);let C=m1(O).filter(S=>process.arch==="x64"&&(S.includes("aarch64")||S.includes("arm64"))||process.arch==="arm64"&&(S.includes("x86_64")||S.includes("x64")||S.includes("i686"))?!1:S===d||S===b||S.startsWith(d+"-")||S.startsWith(b+"-"));C.sort((S,A)=>{let R=S.includes(k)?0:1,I=A.includes(k)?0:1;return R!==I?R-I:S.localeCompare(A)});for(let S of C)E.push(ic(O,S,"bin",T)),E.push(ic(O,S,T))}catch{}}for(let L of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Mv($v(e.cwd,L)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let S=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(S&&(S===d||v(S)===b))return{kind:"use-binary",binary:O,message:_}}return h}openSession(e){return Iv({...e,model:e.model??pm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??pm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:pm}}}});import{createHash as _1}from"node:crypto";import{readdir as Ri,readFile as Pv,stat as ac,unlink as g1}from"node:fs/promises";import{join as gt,basename as y1,dirname as E1}from"node:path";import{cwd as T1}from"node:process";function ym(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Fv(t){return t==="user"}function Em(t){return t==="gemini"||t==="assistant"}function Jr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function w1(t){return`${t.sessionId}\0${t.cwd}`}function v1(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 lc(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function Uv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!Em(a.type)||!a.tokens)continue;let l=lc(a.tokens.input),c=lc(a.tokens.cached),d=Math.max(l-c,0),u=lc(a.tokens.output),f=lc(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 S1(t){return _1("sha256").update(t).digest("hex")}function Ni(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=E1(n);if(r===n)break;n=r}}var cc,jv=x(()=>{"use strict";Ae();Ma();oe();cc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||gt(Q,".gemini");this.geminiProjectsFile=gt(n,"projects.json"),this.geminiTmpDir=gt(n,"tmp");let r=e.claudeDir||gt(Q,".claude");this.claudeProjectsDir=gt(r,"projects");let s=[gt(Q,".codex"),gt(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=>gt(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=w1(s),i=n.get(o);n.set(o,i?v1(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 Ie(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=Jr(g.timestamp),y=g.type,T=he(ym(g.content));if(Fv(y)){let v=ym(g.content);v&&i.push(v);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(Em(y)){g.model&&(m=g.model);for(let v of g.thoughts||[]){let b=[v.subject,v.description].filter(Boolean).join(`
1780
- `).trim();b&&o.push({role:"thinking",timestamp:Jr(v.timestamp,E),content:he(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=Jr(r.startTime,s.createdAt),_=Jr(r.lastUpdated,s.modifiedAt),h=Uv(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 Ie(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(Fv(m.type)){u++;let p=ym(m.content).trim();p&&(l||(l=G(he(p),80)),c=G(he(p),80))}else Em(m.type)&&(u++,m.model&&(d=m.model));let f=Uv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Jr(n.startTime,r.createdAt),modifiedAt:Jr(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 Pv(e,"utf-8");if(Po(n)==="unknown")return F({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 Nr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=y1(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 Ri(this.geminiTmpDir)}catch{return e}for(let r of n){let s=gt(this.geminiTmpDir,r,"chats");if(!(await ac(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Ri(s)}catch{continue}for(let a of i)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(gt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await g1(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 Ie(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Jr(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;Ni(e,T1());for(let r of this.extraWorkspacePaths)Ni(e,r);for(let r of await this.collectGeminiProjectPaths())Ni(e,r);for(let r of await this.collectCodexCwds())Ni(e,r);for(let r of await this.collectClaudeCwds())Ni(e,r);let n=new Map;for(let r of e)n.set(S1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Pv(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 ht(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Ri(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=gt(this.claudeProjectsDir,r);if(!(await ac(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Ri(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=gt(s,a),d=(await ht(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await ac(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Ri(e)}catch{return n}for(let o of s){let i=gt(e,o),a=await ac(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 b1,writeFileSync as I1,mkdirSync as k1}from"node:fs";import{join as A1,dirname as R1}from"node:path";import{randomUUID as N1}from"node:crypto";function wm(t){return new Tm(t)}var Tm,vm=x(()=>{"use strict";Ds();jv();Je();Be();Ma();Tm=class extends de{constructor(e){super({provider:new cc(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",te,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(nr))})}seed(e,n){return Promise.resolve({success:!1,error:nr})}sendTurn(e,n){return Promise.reject(new Error(nr))}openSession(e){return Promise.reject(new Error(nr))}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(`
1781
- `)}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:Ol,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=b1(r,"utf-8"),o=Po(s),i=Nr(s),a=N1();i.sessionId=a,i.kind="main";let l=R1(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=A1(l,u);return k1(l,{recursive:!0}),I1(f,oy(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 Wv,readFile as x1,rm as L1,stat as Js}from"node:fs/promises";import{basename as C1,join as jt}from"node:path";function O1(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 Sm(){return{shutdownTotals:null,assistantOutputSum:0}}function Hv(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=O1(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function Bv(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 D1(t){let e={};for(let n of t.split(`
1774
+ `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${we(i,60)}`:we(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 bv(t,e){if(e.bundleSession!==void 0)return Ln(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Pw(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=>Sv(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 Iv(t){let e=await Fw({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});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&&Sv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var VP,Cn=L(()=>{"use strict";Xf();Xf();Uw();am();js();oe();VP=256});function lm(t={}){let e=Sa(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends de{constructor(){super({provider:new va({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!1,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. Live ACP sessions cannot be resumed after exit."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>{if(s.sessionId||s.requireResume)throw new Error('miniplayer does not support resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"');return rn(r,{...s,env:n(s.env),acpTool:"miniplayer",requireResume:!1})}})}openSession(r){if(r.sessionId)throw new Error("miniplayer cannot reopen a closed ACP session; start a fresh conversation");return sn({...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.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal or session resume")}async seed(){return{success:!1,error:'miniplayer does not support team session resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"'}}}}var cm=L(()=>{"use strict";Je();Ia();Cn()});import{readdir as rc,stat as kv,unlink as YP}from"node:fs/promises";import{join as Gs,basename as Av}from"node:path";function zP(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function QP(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return he(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 ZP(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 e1(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 t1(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 Rv(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=e1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?ZP(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 _=t1(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 n1(t){let e=r1(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 r1(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 sc,Nv=L(()=>{"use strict";Ae();sc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Gs(Q,".claude"),this.projectsDir=Gs(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await rc(this.projectsDir)}catch{return e}for(let r of n){let s=Gs(this.projectsDir,r);if(!(await kv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await rc(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Av(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Gs(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await ht(e,50),s=await Ie(e),o="",i,a,l,c,d,u;for(let m of r)if(!zP(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 Rv(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 Ie(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:QP(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(`
1775
+ `):"";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:he(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?he(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:he(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;n1(s);let h=await Rv(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 YP(n),!0):!1}async resolveSessionFile(e){let n;try{n=await rc(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=Gs(this.projectsDir,i);if(!(await kv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await rc(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Av(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Gs(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 ht(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Lv}from"node:path";function um(t){return new dm(t)}var dm,fm=L(()=>{"use strict";Nv();Je();Ae();Cn();Be();dm=class extends de{claudeDir;constructor(e){super({provider:new sc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",te,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:tc}),this.claudeDir=e?.claudeDir??Lv(Q,".claude")}openSession(e){return nc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Lv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as s1,stat as xv,unlink as o1}from"node:fs/promises";import{join as ki,basename as i1}from"node:path";function mm(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&a1.has(n)}function l1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Ai(t,e,n){let r=l1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function Cv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function c1(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 Vs(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 Vs(n)}).filter(n=>n.length>0).join(`
1776
+ `);try{return JSON.stringify(t)}catch{return String(t)}}function d1(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 u1(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 Ov(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];mm(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=c1(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 a1,oc,Dv=L(()=>{"use strict";Ae();a1=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"]);oc=class{name="codex";codexDirs;constructor(e={}){let n=[ki(Q,".codex"),ki(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:ki(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=ki(n,"sessions");try{await xv(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 s1(e)}catch{return n}for(let s of r){let o=ki(e,s),i=await xv(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=i1(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 ht(e,30),r=await Ie(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];mm(_,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 Ov(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:Cv(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 Ie(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,_=[],h=new Set,g=[],E=(w,v)=>{let b=g.find(k=>!k.mirrored&&k.source!==v&&k.text===w);b?b.mirrored=!0:g.push({text:w,source:v,mirrored:!1})},y=()=>{_.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let v=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=Cv(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 x=b.content.filter((O,C)=>k[C]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1777
+ `);k.includes("user.text")&&x&&(!b.id||!h.has(b.id))&&(E(x,"metadata"),b.id&&h.add(b.id))}for(let x=0;x<b.content.length;x++){let O=b.content[x];if(!mm(k,x)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let C=O.text.trim();c||(c=G(C,80)),d=G(C,80),Ai(s,p,{role:"user",timestamp:v,content:he(C)})}}continue}if(b.role==="assistant"&&b.content){for(let k of b.content)k.type==="output_text"&&typeof k.text=="string"&&k.text&&Ai(s,p,{role:"assistant",timestamp:v,content:he(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&&Ai(s,p,{role:"system",timestamp:v,content:he(k.text.trim())});continue}}if(b.type==="function_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.arguments!==void 0?he(Vs(b.arguments)):void 0,toolInputData:d1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Vs(b.output)),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.input!==void 0?he(Vs(b.input)):void 0,toolInputData:u1(b.name,b.input),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Vs(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let k=b.summary.map(x=>Vs(x.text)).join(`
1778
+ `);k.trim()&&Ai(s,p,{role:"thinking",timestamp:v,content:he(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&&Ai(s,p,{role:"thinking",timestamp:v,content:he(b)})}}if(!o)return null;y();let T=await Ov(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 o1(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 ht(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 f1}from"node:child_process";import{realpathSync as Mv,readdirSync as m1}from"node:fs";import{homedir as p1}from"node:os";import{join as ic,resolve as $v,sep as h1}from"node:path";function _m(t){return new hm(t)}var pm,hm,gm=L(()=>{"use strict";Dv();Je();Cn();Be();pm="gpt-5.6-sol",hm=class extends de{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 oc(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn"},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:`${te}
1779
+ `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:bv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(x,O)=>new Promise(C=>{let S=Math.ceil(n-performance.now());if(S<=0){C(void 0);return}let A,R=()=>{try{A?.kill("SIGKILL")}catch{}},I=()=>{R()},N=()=>{R()},P=()=>{R()};process.once("exit",I),process.once("SIGINT",N),process.once("SIGTERM",P);let $=()=>{process.removeListener("exit",I),process.removeListener("SIGINT",N),process.removeListener("SIGTERM",P)};A=f1(x,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:S,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{$(),C(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let x=s.match(/\{[\s\S]*\}/);if(x)try{o=JSON.parse(x[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=x=>typeof x=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(x)&&x.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=$v(e.cwd,e.env.CODEX_HOME||ic(e.env.HOME||p1(),".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 v=x=>x.replace(/\+.*$/,""),b=v(d),k=process.arch==="arm64"?"aarch64":"x86_64";for(let x of["app-server-daemon","standalone"]){let O=ic(g,"packages",x,"releases");try{y.push(Mv(O)+h1);let C=m1(O).filter(S=>process.arch==="x64"&&(S.includes("aarch64")||S.includes("arm64"))||process.arch==="arm64"&&(S.includes("x86_64")||S.includes("x64")||S.includes("i686"))?!1:S===d||S===b||S.startsWith(d+"-")||S.startsWith(b+"-"));C.sort((S,A)=>{let R=S.includes(k)?0:1,I=A.includes(k)?0:1;return R!==I?R-I:S.localeCompare(A)});for(let S of C)E.push(ic(O,S,"bin",T)),E.push(ic(O,S,T))}catch{}}for(let x of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Mv($v(e.cwd,x)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let S=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(S&&(S===d||v(S)===b))return{kind:"use-binary",binary:O,message:_}}return h}openSession(e){return Iv({...e,model:e.model??pm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??pm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:pm}}}});import{createHash as _1}from"node:crypto";import{readdir as Ri,readFile as Pv,stat as ac,unlink as g1}from"node:fs/promises";import{join as gt,basename as y1,dirname as E1}from"node:path";import{cwd as T1}from"node:process";function ym(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Fv(t){return t==="user"}function Em(t){return t==="gemini"||t==="assistant"}function Jr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function w1(t){return`${t.sessionId}\0${t.cwd}`}function v1(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 lc(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function Uv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!Em(a.type)||!a.tokens)continue;let l=lc(a.tokens.input),c=lc(a.tokens.cached),d=Math.max(l-c,0),u=lc(a.tokens.output),f=lc(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 S1(t){return _1("sha256").update(t).digest("hex")}function Ni(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=E1(n);if(r===n)break;n=r}}var cc,jv=L(()=>{"use strict";Ae();Ma();oe();cc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||gt(Q,".gemini");this.geminiProjectsFile=gt(n,"projects.json"),this.geminiTmpDir=gt(n,"tmp");let r=e.claudeDir||gt(Q,".claude");this.claudeProjectsDir=gt(r,"projects");let s=[gt(Q,".codex"),gt(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=>gt(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=w1(s),i=n.get(o);n.set(o,i?v1(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 Ie(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=Jr(g.timestamp),y=g.type,T=he(ym(g.content));if(Fv(y)){let v=ym(g.content);v&&i.push(v);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(Em(y)){g.model&&(m=g.model);for(let v of g.thoughts||[]){let b=[v.subject,v.description].filter(Boolean).join(`
1780
+ `).trim();b&&o.push({role:"thinking",timestamp:Jr(v.timestamp,E),content:he(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=Jr(r.startTime,s.createdAt),_=Jr(r.lastUpdated,s.modifiedAt),h=Uv(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 Ie(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(Fv(m.type)){u++;let p=ym(m.content).trim();p&&(l||(l=G(he(p),80)),c=G(he(p),80))}else Em(m.type)&&(u++,m.model&&(d=m.model));let f=Uv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Jr(n.startTime,r.createdAt),modifiedAt:Jr(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 Pv(e,"utf-8");if(Po(n)==="unknown")return F({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 Nr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=y1(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 Ri(this.geminiTmpDir)}catch{return e}for(let r of n){let s=gt(this.geminiTmpDir,r,"chats");if(!(await ac(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Ri(s)}catch{continue}for(let a of i)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(gt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await g1(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 Ie(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Jr(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;Ni(e,T1());for(let r of this.extraWorkspacePaths)Ni(e,r);for(let r of await this.collectGeminiProjectPaths())Ni(e,r);for(let r of await this.collectCodexCwds())Ni(e,r);for(let r of await this.collectClaudeCwds())Ni(e,r);let n=new Map;for(let r of e)n.set(S1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Pv(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 ht(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Ri(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=gt(this.claudeProjectsDir,r);if(!(await ac(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await Ri(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=gt(s,a),d=(await ht(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await ac(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Ri(e)}catch{return n}for(let o of s){let i=gt(e,o),a=await ac(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 b1,writeFileSync as I1,mkdirSync as k1}from"node:fs";import{join as A1,dirname as R1}from"node:path";import{randomUUID as N1}from"node:crypto";function wm(t){return new Tm(t)}var Tm,vm=L(()=>{"use strict";Ds();jv();Je();Be();Ma();Tm=class extends de{constructor(e){super({provider:new cc(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",te,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(nr))})}seed(e,n){return Promise.resolve({success:!1,error:nr})}sendTurn(e,n){return Promise.reject(new Error(nr))}openSession(e){return Promise.reject(new Error(nr))}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(`
1781
+ `)}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:Ol,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=b1(r,"utf-8"),o=Po(s),i=Nr(s),a=N1();i.sessionId=a,i.kind="main";let l=R1(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=A1(l,u);return k1(l,{recursive:!0}),I1(f,oy(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 Wv,readFile as L1,rm as x1,stat as Js}from"node:fs/promises";import{basename as C1,join as jt}from"node:path";function O1(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 Sm(){return{shutdownTotals:null,assistantOutputSum:0}}function Hv(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=O1(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function Bv(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 D1(t){let e={};for(let n of t.split(`
1782
1782
  `)){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 Kr(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function M1(t){let e=0,n=Sm(),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++;Hv(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function $1(t){let e=P1(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(`
1783
- `).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 P1(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 dc,Xv=x(()=>{"use strict";Ae();dc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||jt(Q,".copilot");this.sessionStateDir=jt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Wv(this.sessionStateDir)}catch{return e}for(let r of n){let s=jt(this.sessionStateDir,r);if((await Js(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=jt(n,"events.jsonl"),o=await Js(s).catch(()=>null),i=o?s:jt(n,"workspace.yaml"),a=await Ie(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||C1(n)||e,E=Sm();if(o)for await(let y of Ee(s)){let T=Kr(y.timestamp)||a.modifiedAt;if(Hv(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=Kr(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 v=w.trim();v&&(p||(p=G(v,80)),_=G(v,80)),l.push({role:"user",timestamp:T,content:he(v||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:he(w),model:u}),y.data.toolRequests)for(let v of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:v.name||"unknown tool",toolName:v.name,toolInput:v.arguments?JSON.stringify(v.arguments,null,2):void 0,toolInputData:bt(v.arguments),toolCallId:v.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",v=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:he(w),toolDetailedContent:v?he(v):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:he(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:he(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return $1(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??Kr(r?.created_at)??a.createdAt,modifiedAt:Kr(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,...Bv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=jt(e,"events.jsonl"),o=await Js(s).catch(()=>null),i=o?s:jt(e,"workspace.yaml"),a=await Ie(o?s:e),l=o?await ht(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=Kr(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 M1(s):{messageCount:0,tokens:Sm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??Kr(r?.created_at)??a.createdAt,modifiedAt:Kr(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...Bv(h.tokens)}}async readWorkspaceYaml(e){let n=jt(e,"workspace.yaml");try{let r=await x1(n,"utf-8");return D1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await L1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Wv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=jt(this.sessionStateDir,e);if((await Js(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=jt(this.sessionStateDir,s);(await Js(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=jt(this.sessionStateDir,s);if(!(await Js(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 Im(t){return new bm(t)}var bm,km=x(()=>{"use strict";Xv();Je();Cn();oe();Be();bm=class extends de{copilotDir;constructor(e){super({provider:new dc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",te,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>rn(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return sn({...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 Ue({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function Rm(t){return new Am(t)}var Am,Nm=x(()=>{"use strict";ec();Je();Cn();Be();Am=class extends de{constructor(e){super({provider:new qs(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},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",te],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>rn(n,{...r,acpTool:"opencode"})})}openSession(e){return sn({...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??te),n}}});import{appendFile as F1,mkdir as U1,readFile as qv,readdir as Gv,rm as j1,stat as Vv}from"node:fs/promises";import{basename as W1,dirname as B1,isAbsolute as Jv,join as Yr,relative as H1,resolve as xm}from"node:path";function Lm(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function V1(t){return typeof t=="number"?new Date(t):Lm(t)??new Date(0)}function Kv(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(`
1784
- `).trim():""}function Yv(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function J1(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:Yv(t)??""}function K1(t){let e=Y1(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 Y1(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 X1,q1,G1,uc,zv=x(()=>{"use strict";Ae();X1="1.4",q1="1.5",G1=new Set([X1,q1]),uc=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=xm(e?.kimiHome??process.env.KIMI_CODE_HOME??Yr(Q,".kimi-code")),this.sessionsDir=Yr(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 j1(n.sessionDir,{recursive:!0,force:!0}),await U1(B1(this.indexPath()),{recursive:!0,mode:448}),await F1(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1785
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Yr(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 Gv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=Yr(this.sessionsDir,s.name),i;try{i=await Gv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=Yr(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await qv(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:xm(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Yr(n,"state.json"),wirePath:Yr(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Jv(e)||W1(e)!==n)return!1;let r=H1(this.sessionsDir,xm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Jv(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 qv(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 Vv(e.wirePath)}catch{return null}let s=await Vv(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Lm(n.createdAt)??s.birthtime,a=Lm(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=V1(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!G1.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,v=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=T,d+=w,u+=v,f+=b,g.usageScope==="turn"&&(_=T+w+v,h={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:b,totalTokens:_+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=Kv(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=Kv(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:Yv(y.args),toolInputData:bt(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:J1(y.result),toolCallId:y.toolCallId,model:i})}return K1(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 Om(t){return new Cm(t)}var Cm,Dm=x(()=>{"use strict";zv();Je();Cn();Be();Cm=class extends de{kimiHome;constructor(e){super({provider:new uc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},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",te,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>rn(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return sn({...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??te,"--output-format","stream-json"),n}}});import{spawn as z1}from"node:child_process";import{mkdirSync as Q1}from"node:fs";function $m(t){return new Mm(t)}async function Z1(t,e){let n=Date.now(),r=Qv({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});Oe("lmplayer",r,e.permissionMode??"yolo");let s=await eS(e.binary,r,{cwd:e.cwd,env:xe(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(Zv(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Qv(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(...cr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Zv(t){let n=[Br(t.stderr).trim(),t.error].filter(Boolean).join(`
1783
+ `).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 P1(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 dc,Xv=L(()=>{"use strict";Ae();dc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||jt(Q,".copilot");this.sessionStateDir=jt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Wv(this.sessionStateDir)}catch{return e}for(let r of n){let s=jt(this.sessionStateDir,r);if((await Js(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=jt(n,"events.jsonl"),o=await Js(s).catch(()=>null),i=o?s:jt(n,"workspace.yaml"),a=await Ie(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||C1(n)||e,E=Sm();if(o)for await(let y of Ee(s)){let T=Kr(y.timestamp)||a.modifiedAt;if(Hv(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=Kr(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 v=w.trim();v&&(p||(p=G(v,80)),_=G(v,80)),l.push({role:"user",timestamp:T,content:he(v||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:he(w),model:u}),y.data.toolRequests)for(let v of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:v.name||"unknown tool",toolName:v.name,toolInput:v.arguments?JSON.stringify(v.arguments,null,2):void 0,toolInputData:bt(v.arguments),toolCallId:v.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",v=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:he(w),toolDetailedContent:v?he(v):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:he(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:he(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return $1(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??Kr(r?.created_at)??a.createdAt,modifiedAt:Kr(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,...Bv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=jt(e,"events.jsonl"),o=await Js(s).catch(()=>null),i=o?s:jt(e,"workspace.yaml"),a=await Ie(o?s:e),l=o?await ht(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=Kr(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 M1(s):{messageCount:0,tokens:Sm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??Kr(r?.created_at)??a.createdAt,modifiedAt:Kr(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...Bv(h.tokens)}}async readWorkspaceYaml(e){let n=jt(e,"workspace.yaml");try{let r=await L1(n,"utf-8");return D1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await x1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Wv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=jt(this.sessionStateDir,e);if((await Js(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=jt(this.sessionStateDir,s);(await Js(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=jt(this.sessionStateDir,s);if(!(await Js(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 Im(t){return new bm(t)}var bm,km=L(()=>{"use strict";Xv();Je();Cn();oe();Be();bm=class extends de{copilotDir;constructor(e){super({provider:new dc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",te,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>rn(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return sn({...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 Ue({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function Rm(t){return new Am(t)}var Am,Nm=L(()=>{"use strict";ec();Je();Cn();Be();Am=class extends de{constructor(e){super({provider:new qs(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},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",te],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>rn(n,{...r,acpTool:"opencode"})})}openSession(e){return sn({...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??te),n}}});import{appendFile as F1,mkdir as U1,readFile as qv,readdir as Gv,rm as j1,stat as Vv}from"node:fs/promises";import{basename as W1,dirname as B1,isAbsolute as Jv,join as Yr,relative as H1,resolve as Lm}from"node:path";function xm(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function V1(t){return typeof t=="number"?new Date(t):xm(t)??new Date(0)}function Kv(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(`
1784
+ `).trim():""}function Yv(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function J1(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:Yv(t)??""}function K1(t){let e=Y1(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 Y1(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 X1,q1,G1,uc,zv=L(()=>{"use strict";Ae();X1="1.4",q1="1.5",G1=new Set([X1,q1]),uc=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Lm(e?.kimiHome??process.env.KIMI_CODE_HOME??Yr(Q,".kimi-code")),this.sessionsDir=Yr(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 j1(n.sessionDir,{recursive:!0,force:!0}),await U1(B1(this.indexPath()),{recursive:!0,mode:448}),await F1(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1785
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Yr(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 Gv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=Yr(this.sessionsDir,s.name),i;try{i=await Gv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=Yr(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await qv(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:Lm(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Yr(n,"state.json"),wirePath:Yr(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Jv(e)||W1(e)!==n)return!1;let r=H1(this.sessionsDir,Lm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Jv(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 qv(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 Vv(e.wirePath)}catch{return null}let s=await Vv(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=xm(n.createdAt)??s.birthtime,a=xm(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=V1(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!G1.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,v=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=T,d+=w,u+=v,f+=b,g.usageScope==="turn"&&(_=T+w+v,h={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:b,totalTokens:_+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=Kv(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=Kv(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:Yv(y.args),toolInputData:bt(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:J1(y.result),toolCallId:y.toolCallId,model:i})}return K1(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 Om(t){return new Cm(t)}var Cm,Dm=L(()=>{"use strict";zv();Je();Cn();Be();Cm=class extends de{kimiHome;constructor(e){super({provider:new uc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},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",te,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>rn(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return sn({...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??te,"--output-format","stream-json"),n}}});import{spawn as z1}from"node:child_process";import{mkdirSync as Q1}from"node:fs";function $m(t){return new Mm(t)}async function Z1(t,e){let n=Date.now(),r=Qv({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});Oe("lmplayer",r,e.permissionMode??"yolo");let s=await eS(e.binary,r,{cwd:e.cwd,env:Le(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(Zv(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Qv(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(...cr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Zv(t){let n=[Br(t.stderr).trim(),t.error].filter(Boolean).join(`
1786
1786
  `);return n?Te(n,{provider:"lmplayer"}):`exit code ${t.code}`}function eS(t,e,n){return new Promise((r,s)=>{let o;try{o=z1(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(!Ks(g))return;let E=fc(g,!1);c===void 0&&E!==void 0&&(c=E),d=fc(g,!0)??d;let y=eF(g);y!==void 0&&(u=y);let T=tS(g);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",_=>{let h=_.toString("utf8");i+=h,l+=h;let g=l.indexOf(`
1787
1787
  `);for(;g>=0;){let E=l.slice(0,g);l=l.slice(g+1),p(E),g=l.indexOf(`
1788
- `)}}),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 eF(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Ks(e)){let n=e.data;if(Ks(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 tS(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(Ks(n)){let r=tS(n);if(r)return r}}}function fc(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(Ks(n)){let r=fc(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(Ks(s)){let o=fc(s,e);if(o!==void 0)return o}}}function Ks(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Mm,Pm=x(()=>{"use strict";ec();Je();Be();nn();Ut();al();_t();Mm=class extends de{constructor(e){super({provider:new qs({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",te],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:Z1})}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 Qv({prompt:e?.prompt??te,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){Q1(e,{recursive:!0});let r=this.seedArgsFor(n);Oe("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await eS(this.binary,r,{cwd:e,env:Bs(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:Zv(s)}:s.sessionId?{success:!0,sessionId:s.sessionId}:{success:!1,error:"lmplayer seed failed; provider did not report a sessionID"}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}manualSeedHint(e){return{launchCommand:`cd ${e} && lmplayer run --format json --dangerously-skip-permissions "${te}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as mc,readFile as tF,rm as nF}from"node:fs/promises";import{basename as nS,join as fr}from"node:path";function rF(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function xi(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function sF(t,e){if(!e)return;t.observed=!0;let n=xi(e.promptTokenCount),r=xi(e.cachedContentTokenCount),s=xi(e.candidatesTokenCount),o=xi(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:xi(e.totalTokenCount)||n+s}}function oF(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 rS(t){return t.type==="user"||t.message?.role==="user"}function sS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function oS(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(`
1788
+ `)}}),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 eF(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Ks(e)){let n=e.data;if(Ks(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 tS(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(Ks(n)){let r=tS(n);if(r)return r}}}function fc(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(Ks(n)){let r=fc(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(Ks(s)){let o=fc(s,e);if(o!==void 0)return o}}}function Ks(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Mm,Pm=L(()=>{"use strict";ec();Je();Be();nn();Ut();al();_t();Mm=class extends de{constructor(e){super({provider:new qs({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",te],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:Z1})}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 Qv({prompt:e?.prompt??te,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){Q1(e,{recursive:!0});let r=this.seedArgsFor(n);Oe("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await eS(this.binary,r,{cwd:e,env:Bs(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:Zv(s)}:s.sessionId?{success:!0,sessionId:s.sessionId}:{success:!1,error:"lmplayer seed failed; provider did not report a sessionID"}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}manualSeedHint(e){return{launchCommand:`cd ${e} && lmplayer run --format json --dangerously-skip-permissions "${te}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as mc,readFile as tF,rm as nF}from"node:fs/promises";import{basename as nS,join as fr}from"node:path";function rF(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function Li(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function sF(t,e){if(!e)return;t.observed=!0;let n=Li(e.promptTokenCount),r=Li(e.cachedContentTokenCount),s=Li(e.candidatesTokenCount),o=Li(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:Li(e.totalTokenCount)||n+s}}function oF(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 rS(t){return t.type==="user"||t.message?.role==="user"}function sS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function oS(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(`
1789
1789
  `):Array.isArray(e.parts)?e.parts.filter(n=>!n.thought&&n.type!=="thinking").map(n=>n.text||"").join(`
1790
- `):"":""}function iS(t){return t.model||t.message?.model}function iF(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:lS(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Li(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 aF(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Li(e.output??e.error??t)}return Li(t)}function lS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function aS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Li(t.args,!0),toolInputData:bt(t.args),toolCallId:t.id,model:n}}var pc,cS=x(()=>{"use strict";Ae();pc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||fr(Q,".qwen")}async discoverSessions(){let e=fr(this.baseDir,"projects"),n;try{n=await mc(e)}catch{return[]}let r=[];for(let s of n){let o=fr(e,s,"chats"),i;try{i=await mc(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=fr(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 Ie(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)),rS(u)){let f=oS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(sS(u)){let f=iS(u);f&&(i=f),d+=iF(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=nS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ie(e),s="(unknown)",o,i,a,l,c,d,u=[],f=rF();for await(let m of Ee(e)){if(sF(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=lS(m).filter(g=>g.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:_,content:Li(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=aF(E.response),T=Li(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(rS(m)){let h=oS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(sS(m)){let h=iS(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(aS(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(aS(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,...oF(f),messages:u}}async resolveSessionPath(e){let n=fr(this.baseDir,"projects");try{let r=await mc(n),s=[];for(let o of r){let i=fr(n,o,"chats",`${e}.jsonl`);try{return await tF(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=fr(n,o,"chats"),a;try{a=await mc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;nS(l,".jsonl").startsWith(e)&&s.push(fr(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 nF(n),!0}catch{return!1}}}});function Um(t){return new Fm(t)}var Fm,jm=x(()=>{"use strict";cS();Je();Cn();Be();Fm=class extends de{constructor(e){super({provider:new pc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",te,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:tc})}openSession(e){return nc({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as dS,readFile as uS,rm as fS,stat as mS}from"node:fs/promises";import{basename as Wm,join as on}from"node:path";import{fileURLToPath as lF}from"node:url";async function cF(t){let e=await Promise.all(t.map(n=>Ie(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 dF(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function pS(t){return t.type==="USER_INPUT"}function hS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function uF(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function _S(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function gS(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 fF(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function mF(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=pF(s);if(o)return o}let r=hF(e.content);if(r)return r}return null}function pF(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 hF(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function _F(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 gF(t,e){let n=new Set;for(let r of e){let s=yF(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 yF(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:vF(n.event.content);if(r!==void 0)return yS(t.filter(o=>!e.has(o)&&SF(o)===r),n.event.step_index);let s=wF(n.event);if(s!==void 0)return yS(t.filter(o=>!e.has(o)&&EF(o.name,n.event.type)&&TS(TF(o))===s),n.event.step_index)}function yS(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 EF(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 TF(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function wF(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]),TS(e)}function TS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return lF(e)}catch{return}}function vF(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function SF(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 ES(t){if(t.endsWith(".db"))return Wm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var hc,wS=x(()=>{"use strict";Ae();hc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||on(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:on(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=on(this.baseDir,"conversations"),n;try{n=await dS(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Wm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return on(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return on(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 mS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await cF([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=gS(u.content);if(f&&(a=f),pS(u)){let m=_S(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else hS(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=ES(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=dF(f.created_at,s.modifiedAt),p=gS(f.content);if(p&&(a=p),pS(f)){let _=_S(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=fF(_.args),E=bt(_.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(hS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(uF(f)&&f.content){let _=_F(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 gF(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 mS(n),n}catch{}let r=on(this.baseDir,"conversations");try{let s=[];for(let o of await dS(r)){if(!o.endsWith(".db"))continue;Wm(o,".db").startsWith(e)&&s.push(on(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=ES(n);return r?(await fS(this.conversationPath(r),{force:!0}),await fS(on(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 mF(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=on(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await uS(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=on(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([uS(r,"utf8"),Ie(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as bF}from"node:child_process";import{StringDecoder as vS}from"node:string_decoder";function _c(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 IF(t.label,n.binary,s,{cwd:n.cwd,env:xe(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 IF(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=bF(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new vS("utf8"),d=new vS("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(Ls(`${t} failed (${p})`,_?Te(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var Bm=x(()=>{"use strict";Ut();_t()});import{basename as kF}from"node:path";import{randomUUID as AF}from"node:crypto";function Xm(t){return new Hm(t)}function NF(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Hm,RF,qm=x(()=>{"use strict";wS();Je();Be();nn();Bm();Hm=class extends de{constructor(e){super({provider:new hc(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",te,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:RF})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||kF(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=AF(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Dl({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}`}}},RF=_c({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",NF(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>Oe("agy",t,e.permissionMode??"yolo")})});import{existsSync as Ci,readdirSync as xF,statSync as SS}from"node:fs";import{readdir as Gm,rm as LF}from"node:fs/promises";import bS,{join as an}from"node:path";function CF(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 OF(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Ys(t,e){let n=e??(process.platform==="win32"?bS.win32:bS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!Ci(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=xF(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);SS(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(Ci(t)&&SS(t).isFile())return t}catch{}return n.join(r,s)}function Vm(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 DF(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 IS(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:Vm(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of DF(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:Vm(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:Vm(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function MF(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 kS(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,...$F(t)}}function $F(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 Hs("",-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 gc,AS=x(()=>{"use strict";$l();Ae();Ra();gc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||an(Q,".dsh");this.sessionsDir=an(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Gm(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Gm(an(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=IS(r),o=kS(r,n.filePath,s);return o?{...o,turnStatus:MF(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 LF(an(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=CF(e),s=OF(e),o=r,i=an(this.sessionsDir,r,n),a=an(this.sessionsDir,s,n);!Ci(i)&&Ci(a)&&(o=s);let l=an(this.sessionsDir,o,n);return Ys(l)}async findSessionDir(e){let n;try{n=await Gm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=an(this.sessionsDir,r,s);try{let i=Ys(o);if(Ci(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=an(this.sessionsDir,e,n),o=Ys(s),i=await r(o),a=Aa(i),l=[];for(let c of a.split(`
1791
- `))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=an(this.sessionsDir,e,n),s=Ys(r),o=await this.readRecords(e,n);return o.length===0?null:kS(o,s,IS(o))}}});import{spawn as PF}from"node:child_process";import{randomUUID as FF}from"node:crypto";function Jm(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=>Jm(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]=Jm(s,e);return n}return t}function jF(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 NS(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 yc(t,e=n=>Km.spawn(n)){if(mr){let n=await mr.catch(()=>{});if(n?.alive)return n;mr=void 0}return mr=e(t),mr}async function Oi(){if(!mr)return;(await mr.catch(()=>{}))?.shutdown(),mr=void 0}var UF,RS,On,Km,mr,xS=x(()=>{"use strict";_t();UF=/dsh web:\s*(https?:\/\/\S+)/,RS=2e4;On=class t extends Error{method;detail;constructor(e,n,r=[]){let s=Jm(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)}};Km=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=jF(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:FF()})}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 On(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new On(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 On(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new On(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 On(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 On(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 On(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&&NS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=PF("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(),NS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1790
+ `):"":""}function iS(t){return t.model||t.message?.model}function iF(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:lS(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 aF(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return xi(e.output??e.error??t)}return xi(t)}function lS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function aS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:xi(t.args,!0),toolInputData:bt(t.args),toolCallId:t.id,model:n}}var pc,cS=L(()=>{"use strict";Ae();pc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||fr(Q,".qwen")}async discoverSessions(){let e=fr(this.baseDir,"projects"),n;try{n=await mc(e)}catch{return[]}let r=[];for(let s of n){let o=fr(e,s,"chats"),i;try{i=await mc(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=fr(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 Ie(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)),rS(u)){let f=oS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(sS(u)){let f=iS(u);f&&(i=f),d+=iF(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=nS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ie(e),s="(unknown)",o,i,a,l,c,d,u=[],f=rF();for await(let m of Ee(e)){if(sF(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=lS(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=aF(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(rS(m)){let h=oS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(sS(m)){let h=iS(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(aS(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(aS(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,...oF(f),messages:u}}async resolveSessionPath(e){let n=fr(this.baseDir,"projects");try{let r=await mc(n),s=[];for(let o of r){let i=fr(n,o,"chats",`${e}.jsonl`);try{return await tF(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=fr(n,o,"chats"),a;try{a=await mc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;nS(l,".jsonl").startsWith(e)&&s.push(fr(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 nF(n),!0}catch{return!1}}}});function Um(t){return new Fm(t)}var Fm,jm=L(()=>{"use strict";cS();Je();Cn();Be();Fm=class extends de{constructor(e){super({provider:new pc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",te,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:tc})}openSession(e){return nc({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as dS,readFile as uS,rm as fS,stat as mS}from"node:fs/promises";import{basename as Wm,join as on}from"node:path";import{fileURLToPath as lF}from"node:url";async function cF(t){let e=await Promise.all(t.map(n=>Ie(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 dF(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function pS(t){return t.type==="USER_INPUT"}function hS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function uF(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function _S(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function gS(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 fF(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function mF(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=pF(s);if(o)return o}let r=hF(e.content);if(r)return r}return null}function pF(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 hF(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function _F(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 gF(t,e){let n=new Set;for(let r of e){let s=yF(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 yF(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:vF(n.event.content);if(r!==void 0)return yS(t.filter(o=>!e.has(o)&&SF(o)===r),n.event.step_index);let s=wF(n.event);if(s!==void 0)return yS(t.filter(o=>!e.has(o)&&EF(o.name,n.event.type)&&TS(TF(o))===s),n.event.step_index)}function yS(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 EF(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 TF(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function wF(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]),TS(e)}function TS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return lF(e)}catch{return}}function vF(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function SF(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 ES(t){if(t.endsWith(".db"))return Wm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var hc,wS=L(()=>{"use strict";Ae();hc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||on(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:on(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=on(this.baseDir,"conversations"),n;try{n=await dS(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Wm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return on(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return on(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 mS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await cF([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=gS(u.content);if(f&&(a=f),pS(u)){let m=_S(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else hS(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=ES(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=dF(f.created_at,s.modifiedAt),p=gS(f.content);if(p&&(a=p),pS(f)){let _=_S(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=fF(_.args),E=bt(_.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(hS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(uF(f)&&f.content){let _=_F(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 gF(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 mS(n),n}catch{}let r=on(this.baseDir,"conversations");try{let s=[];for(let o of await dS(r)){if(!o.endsWith(".db"))continue;Wm(o,".db").startsWith(e)&&s.push(on(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=ES(n);return r?(await fS(this.conversationPath(r),{force:!0}),await fS(on(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 mF(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=on(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await uS(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=on(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([uS(r,"utf8"),Ie(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as bF}from"node:child_process";import{StringDecoder as vS}from"node:string_decoder";function _c(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 IF(t.label,n.binary,s,{cwd:n.cwd,env:Le(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 IF(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=bF(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new vS("utf8"),d=new vS("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(xs(`${t} failed (${p})`,_?Te(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var Bm=L(()=>{"use strict";Ut();_t()});import{basename as kF}from"node:path";import{randomUUID as AF}from"node:crypto";function Xm(t){return new Hm(t)}function NF(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Hm,RF,qm=L(()=>{"use strict";wS();Je();Be();nn();Bm();Hm=class extends de{constructor(e){super({provider:new hc(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",te,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:RF})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||kF(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=AF(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Dl({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}`}}},RF=_c({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",NF(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>Oe("agy",t,e.permissionMode??"yolo")})});import{existsSync as Ci,readdirSync as LF,statSync as SS}from"node:fs";import{readdir as Gm,rm as xF}from"node:fs/promises";import bS,{join as an}from"node:path";function CF(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 OF(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Ys(t,e){let n=e??(process.platform==="win32"?bS.win32:bS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!Ci(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=LF(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);SS(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(Ci(t)&&SS(t).isFile())return t}catch{}return n.join(r,s)}function Vm(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 DF(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 IS(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:Vm(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of DF(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:Vm(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:Vm(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function MF(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 kS(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,...$F(t)}}function $F(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 Hs("",-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 gc,AS=L(()=>{"use strict";$l();Ae();Ra();gc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||an(Q,".dsh");this.sessionsDir=an(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Gm(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Gm(an(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=IS(r),o=kS(r,n.filePath,s);return o?{...o,turnStatus:MF(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 xF(an(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=CF(e),s=OF(e),o=r,i=an(this.sessionsDir,r,n),a=an(this.sessionsDir,s,n);!Ci(i)&&Ci(a)&&(o=s);let l=an(this.sessionsDir,o,n);return Ys(l)}async findSessionDir(e){let n;try{n=await Gm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=an(this.sessionsDir,r,s);try{let i=Ys(o);if(Ci(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=an(this.sessionsDir,e,n),o=Ys(s),i=await r(o),a=Aa(i),l=[];for(let c of a.split(`
1791
+ `))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=an(this.sessionsDir,e,n),s=Ys(r),o=await this.readRecords(e,n);return o.length===0?null:kS(o,s,IS(o))}}});import{spawn as PF}from"node:child_process";import{randomUUID as FF}from"node:crypto";function Jm(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=>Jm(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]=Jm(s,e);return n}return t}function jF(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 NS(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 yc(t,e=n=>Km.spawn(n)){if(mr){let n=await mr.catch(()=>{});if(n?.alive)return n;mr=void 0}return mr=e(t),mr}async function Oi(){if(!mr)return;(await mr.catch(()=>{}))?.shutdown(),mr=void 0}var UF,RS,On,Km,mr,LS=L(()=>{"use strict";_t();UF=/dsh web:\s*(https?:\/\/\S+)/,RS=2e4;On=class t extends Error{method;detail;constructor(e,n,r=[]){let s=Jm(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)}};Km=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=jF(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:FF()})}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 On(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new On(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 On(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new On(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 On(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 On(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 On(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&&NS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=PF("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(),NS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1792
1792
  ${l}`:"",c?`stderr:
1793
1793
  ${c}`:""].filter(Boolean).join(`
1794
1794
  `);u(new Error(`dsh web sidecar did not report a boot URL within ${RS}ms `+(m?`
1795
1795
  ${Te(m,{provider:"dsh"})}`:"(no output captured)")))},RS);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let _=a.split(`
1796
- `);a=_.pop()??"";for(let h of _){let g=UF.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(Ls(`dsh web exited before reporting a boot URL (${_})`,c.trim()?Te(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as LS}from"node:crypto";import{existsSync as CS,statSync as WF}from"node:fs";import{readFile as BF,mkdir as HF}from"node:fs/promises";function ep(t){return new Zm(t)}function Qm(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function qF(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 Ec(t){return t instanceof Error?t.message:String(t)}async function OS(t,e){let n;try{n=await BF(t)}catch{return e?.(),[]}e&&Ro(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Aa(n),s=[];for(let o of r.split(`
1797
- `))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 GF(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 Tc(t,e){return Ys(t,e)}var Ym,XF,zm,Zm,tp=x(()=>{"use strict";$l();js();Je();AS();Ra();xS();Be();nn();Ym=new Map,XF=500,zm=8*60*60*1e3;Zm=class extends de{dshProvider;usageSeen=new Set;constructor(e){let n=new gc(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 HF(e,{recursive:!0});let r=`session-${LS()}`,s=Qm(n?.env??process.env);Oe("dsh",[],"yolo");try{let o;try{o=await yc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${Ec(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${Ec(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: ${Ec(a)}`}}let i=n?.prompt??te;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,zm,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${Ec(a)}`}}}finally{await Oi()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return xn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Qm(n.env??process.env);Oe("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${LS()}`:n.sessionId,a;try{let l=await yc(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??zm,n.signal)}finally{await Oi()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:i,durationMs:Date.now()-r}}async openSession(e){let n=Qm(e.env??process.env);Oe("dsh",[],e.permissionMode??"yolo");let r=await yc(n),s=Tc(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=CS(s)&&WF(s).isFile()}catch{o=!1}if(!o)throw await Oi(),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 Oi())};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=Tc(s),!CS(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,zm,_.signal,v=>{g=v});E.catch(()=>{});let y=()=>{},T=new Promise((v,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=Tc(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await OS(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 Hs(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),_=Ym.get(p)??new Set;if(_.size){m.invalidateOwnership();for(let E of _)E.invalidateOwnership()}_.add(m),Ym.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=Tc(c);let y=await OS(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 v=[...y].reverse().find(L=>L.type==="assistant/message"&&(L.seq??-1)>f&&(L.seq??1/0)<=(T.seq??1/0)),b=v?GF(v):"";if(w?.kind!=="completed"&&!b)throw new Error(qF(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,XF))}}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||Ym.delete(p)}}}});import{existsSync as VF}from"node:fs";import{join as FS,resolve as JF}from"node:path";import{createRequire as KF}from"node:module";function YF(){return np===null&&(np=KF(import.meta.url)("node:sqlite").DatabaseSync),np}function rp(t={}){return JF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||FS(Q,".hermes"))}function zF(t={}){return FS(rp(t),"state.db")}function Di(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function ct(t){return typeof t=="string"&&t.length>0?t:void 0}function QF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function $S(t){return ct(t.cwd)??ct(QF(t.model_config).cwd)??"(unknown)"}function ZF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function eU(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 PS(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 np,DS,MS,wc,US=x(()=>{"use strict";Ae();oe();np=null;DS="acp";MS=`id, source, model, model_config, started_at,
1796
+ `);a=_.pop()??"";for(let h of _){let g=UF.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(xs(`dsh web exited before reporting a boot URL (${_})`,c.trim()?Te(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as xS}from"node:crypto";import{existsSync as CS,statSync as WF}from"node:fs";import{readFile as BF,mkdir as HF}from"node:fs/promises";function ep(t){return new Zm(t)}function Qm(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function qF(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 Ec(t){return t instanceof Error?t.message:String(t)}async function OS(t,e){let n;try{n=await BF(t)}catch{return e?.(),[]}e&&Ro(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Aa(n),s=[];for(let o of r.split(`
1797
+ `))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 GF(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 Tc(t,e){return Ys(t,e)}var Ym,XF,zm,Zm,tp=L(()=>{"use strict";$l();js();Je();AS();Ra();LS();Be();nn();Ym=new Map,XF=500,zm=8*60*60*1e3;Zm=class extends de{dshProvider;usageSeen=new Set;constructor(e){let n=new gc(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 HF(e,{recursive:!0});let r=`session-${xS()}`,s=Qm(n?.env??process.env);Oe("dsh",[],"yolo");try{let o;try{o=await yc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${Ec(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${Ec(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: ${Ec(a)}`}}let i=n?.prompt??te;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,zm,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${Ec(a)}`}}}finally{await Oi()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Ln(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Qm(n.env??process.env);Oe("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${xS()}`:n.sessionId,a;try{let l=await yc(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??zm,n.signal)}finally{await Oi()}return n.onProgress?.({kind:"system",summary:"dsh turn completed"}),{...a,sessionId:i,durationMs:Date.now()-r}}async openSession(e){let n=Qm(e.env??process.env);Oe("dsh",[],e.permissionMode??"yolo");let r=await yc(n),s=Tc(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=CS(s)&&WF(s).isFile()}catch{o=!1}if(!o)throw await Oi(),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 Oi())};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=Tc(s),!CS(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,zm,_.signal,v=>{g=v});E.catch(()=>{});let y=()=>{},T=new Promise((v,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=Tc(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await OS(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 Hs(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),_=Ym.get(p)??new Set;if(_.size){m.invalidateOwnership();for(let E of _)E.invalidateOwnership()}_.add(m),Ym.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=Tc(c);let y=await OS(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 v=[...y].reverse().find(x=>x.type==="assistant/message"&&(x.seq??-1)>f&&(x.seq??1/0)<=(T.seq??1/0)),b=v?GF(v):"";if(w?.kind!=="completed"&&!b)throw new Error(qF(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,XF))}}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||Ym.delete(p)}}}});import{existsSync as VF}from"node:fs";import{join as FS,resolve as JF}from"node:path";import{createRequire as KF}from"node:module";function YF(){return np===null&&(np=KF(import.meta.url)("node:sqlite").DatabaseSync),np}function rp(t={}){return JF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||FS(Q,".hermes"))}function zF(t={}){return FS(rp(t),"state.db")}function Di(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function ct(t){return typeof t=="string"&&t.length>0?t:void 0}function QF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function $S(t){return ct(t.cwd)??ct(QF(t.model_config).cwd)??"(unknown)"}function ZF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function eU(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 PS(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 np,DS,MS,wc,US=L(()=>{"use strict";Ae();oe();np=null;DS="acp";MS=`id, source, model, model_config, started_at,
1798
1798
  last_activity_at, message_count, input_tokens, output_tokens,
1799
1799
  cache_read_tokens, cache_write_tokens, reasoning_tokens, cwd, title`;wc=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=zF(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!VF(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(),F({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 ${MS} FROM sessions WHERE id = ? AND source = ?`).get(n,DS)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${MS} FROM sessions
1800
1800
  WHERE source = ?
1801
1801
  ORDER BY COALESCE(last_activity_at, started_at) DESC
1802
1802
  LIMIT ?`).all(DS,this.discoverLimit),r=[];for(let s of n){let o=this.previewTexts(e,s.id);r.push({provider:this.name,sessionId:s.id,slug:ct(s.title),cwd:$S(s),createdAt:Di(s.started_at),modifiedAt:Di(s.last_activity_at??s.started_at),model:ct(s.model),startCommand:this.name,firstUserMessage:o.first,lastUserMessage:o.last,messageCount:s.message_count??0,filePath:this.dbPath,...PS(s)})}return r}catch(n){return F({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,
1803
1803
  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 = ?
1804
- 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=Di(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:ct(c.tool_call_id),toolName:ct(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:ct(r.model),stopReason:ct(c.finish_reason)});for(let f of ZF(c.tool_calls)){let m=eU(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:ct(f.function?.name)??"tool_call",toolName:ct(f.function?.name),toolCallId:ct(f.call_id)??ct(f.id),toolInput:typeof f.function?.arguments=="string"?f.function.arguments:JSON.stringify(f.function?.arguments??{}),toolInputData:bt(m)})}}return{provider:this.name,sessionId:r.id,slug:ct(r.title),cwd:$S(r),createdAt:Di(r.started_at),modifiedAt:Di(r.last_activity_at??r.started_at),model:ct(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...PS(r),messages:o,userPrompts:i}}catch(r){return F({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 tU}from"node:fs/promises";function rU(t){return nU.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 sU}function op(t){return new sp(t)}var nU,sU,sp,ip=x(()=>{"use strict";Je();US();Cn();Be();oe();nU=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;sU="dont_ask";sp=class extends de{hermesProvider;hermesHome;constructor(e){let n=new wc(e);super({provider:n,protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},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)=>rn(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=rp(e)}async openSession(e){return sn({...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 tU(e,{recursive:!0});let r=[];if(n?.effort){let o="hermes has no ACP-level effort surface";F({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??te,{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 rU(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(F({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 WS,rm as oU,stat as iU}from"node:fs/promises";import{join as ap}from"node:path";function lp(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 BS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var vc,HS=x(()=>{"use strict";Ae();vc=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||ap(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 WS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=ap(this.baseDir,r);try{if(!(await iU(s)).isDirectory())continue;for(let o of await WS(s))o.endsWith(".jsonl")&&n.push(ap(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 Ie(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=lp(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:lp(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:BS(c.arguments),toolName:c.name??"tool",toolInput:BS(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:lp(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 oU(n,{force:!0}),!0):!1}}});function dp(t){return new cp(t)}var cp,aU,up=x(()=>{"use strict";HS();Je();Be();nn();Bm();cp=class extends de{constructor(e){super({provider:new vc(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",te],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:aU})}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}`}}},aU=_c({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)=>Oe("pi",t,e.permissionMode??"yolo")})});import{createHash as lU}from"node:crypto";import{existsSync as cU,mkdirSync as mp,readFileSync as dU,renameSync as uU,rmdirSync as zS,statSync as fU,writeFileSync as mU}from"node:fs";import{dirname as gp,join as XS,resolve as fp}from"node:path";function pU(t){return lU("sha256").update(t).digest("hex").slice(0,8)}function hU(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function _U(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 QS(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Sc(t){return Math.max(1,Math.ceil(t.length/4))}function Qs(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return fp(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?XS(gp(fp(n)),".lmctl-claude-mock","sessions.json"):XS(fp(t),".lmctl-claude-mock","sessions.json")}function qS(){return{schemaVersion:1,sessions:{}}}function Mi(t){if(!cU(t))return qS();try{let e=JSON.parse(dU(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=pp(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...o!==void 0?{defaultDelayMs:o}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return qS()}}function ZS(t,e){mp(gp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;mU(n,`${JSON.stringify(e,null,2)}
1805
- `,"utf8"),uU(n,t)}function EU(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function TU(t){let e=`${t}.lock`;mp(gp(t),{recursive:!0});let n=Date.now()+GS;for(;;)try{return mp(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-fU(e).mtimeMs>gU){try{zS(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${GS}ms: ${e}`);EU(yU)}}function wU(t){try{zS(t)}catch{}}function eb(t,e){let n=TU(t);try{return e()}finally{wU(n)}}function vU(t){return{...t,timestamp:t.timestamp.toISOString()}}function SU(t){return{...t,timestamp:new Date(t.timestamp)}}function bU(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(vU)}}function tb(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(SU)}}function bc(t,e=process.cwd()){let n=zs.get(t);if(n!==void 0)return n;let s=Mi(Qs(e)).sessions[t];if(s===void 0)return;let o=tb(s);return zs.set(o.sessionId,o),o}function VS(t){zs.set(t.sessionId,t);let e=Qs(t.cwd);eb(e,()=>{let n=Mi(e);n.sessions[t.sessionId]=bU({...t,filePath:e}),ZS(e,n)})}function IU(t,e=process.cwd()){let n=Qs(e);return eb(n,()=>{let r=Mi(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],ZS(n,r)),s})}function kU(){let t=Mi(Qs()),e=Object.values(t.sessions).map(tb);for(let n of e)zs.set(n.sessionId,n);return e}function pp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function JS(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=pp(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=pp(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function KS(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function AU(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=JS(n[t]??n[QS(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=JS(r[s]);if(o!==void 0)return o}}}function YS(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 yp(){return new _p}var zs,gU,yU,GS,hp,_p,Ep=x(()=>{"use strict";zs=new Map;gU=5e3,yU=15,GS=1e4;hp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of kU())e.set(n.sessionId,n);for(let n of zs.values())e.set(n.sessionId,n);return[...e.values()].map(YS)}async loadSession(e){let n=bc(e);return n===void 0?null:{...YS(n),messages:n.messages.slice()}}async resolveSessionPath(e){return bc(e)?.filePath??null}async deleteSession(e){let n=zs.delete(e),r=IU(e);return n||r}},_p=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new hp;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=hU(_U(e,n)),s=`mock-${r}-${pU(`${e}:${r}`)}`,o=new Date,i=Qs(e),a=bc(s,e),l=n?.prompt??"ClaudeMock seed",c=Sc(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+=Sc("ACK: ClaudeMock seeded"),VS(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=bc(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let o=new Date,i=Mi(Qs(n.cwd)),a=AU(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await KS(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${QS(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+=Sc(e),s.totalOutputTokens+=Sc(c),VS(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await KS(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function pr(t){let e=[Uf({museDataHome:t?.museDataHome}),lm({miniplayerHome:t?.miniplayerHome}),um({claudeDir:t?.claudeDir}),_m({codexDir:t?.codexDir,codeDir:t?.codeDir}),wm({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),Im({copilotDir:t?.copilotDir}),Rm({dbPaths:t?.opencodeDbPaths}),Om({kimiHome:t?.kimiHome}),$m({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Um({qwenDir:t?.qwenDir}),Xm({agyDir:t?.agyDir}),ep({dshHome:t?.dshHome}),op({hermesHome:t?.hermesHome}),dp({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(yp()),e}var Tp=x(()=>{"use strict";jf();jf();cm();cm();fm();gm();vm();km();Nm();Dm();Pm();jm();qm();tp();ip();up();Ep();fm();gm();vm();km();Nm();Dm();Pm();jm();qm();tp();ip();up();Ep()});var nb,rb,sb=x(()=>{"use strict";nb=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],rb=["agy","pi","lmplayer"]});var Sp={};me(Sp,{BUNDLE_CAPABLE_PROVIDERS:()=>nb,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>rb,ProviderRegistry:()=>di,TransportConnectionError:()=>ye,TransportError:()=>ar,TransportJsonError:()=>Pl,TransportProcessError:()=>fi,TransportRpcError:()=>mi,_resetDefaultRegistryForTests:()=>CU,bundleSupportedProviders:()=>Pi,canUsePersistentSession:()=>Rl,chat:()=>$i,countTokens:()=>PU,createAdapterRegistry:()=>Ws,createAllAdapters:()=>pr,deleteSession:()=>$U,listSessions:()=>vp,openBundleSession:()=>wp,openConversation:()=>OU,seed:()=>DU});import{accessSync as RU,constants as NU,statSync as xU}from"node:fs";import{join as LU,delimiter as ob}from"node:path";function hr(){return Ic===null&&(Ic=Ws(pr())),Ic}function CU(){Ic=null}function kc(t,e){pl(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function $i(t){let e=t.registry??hr(),n=kc(e,t.provider),r={sessionId:t.sessionId,cwd:t.cwd,env:t.env,onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal,timeoutMs:t.timeoutMs,model:t.model,effort:t.effort,progPath:t.progPath,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,requireResume:t.requireResume,bundleSession:t.bundleSession},s=t.bundleSession===void 0?await Nl(n,{...r,execution:"per-turn",requireResume:t.requireResume??!1}):void 0,o;try{o=s?await s.sendTurn(t.prompt,{onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal}):await n.sendTurn(t.prompt,r)}finally{await s?.close()}return{text:o.text,...o.usage?{usage:o.usage}:{},sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,numTurns:o.numTurns,status:o.status,stalledAfterMs:o.stalledAfterMs,...o.warnings!==void 0?{warnings:o.warnings}:{}}}function Pi(t){return(t??hr()).getAllAdapters().filter(n=>An(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function wp(t){let e=t.registry??hr(),n=kc(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Pi(e).join(", ")})`);return Nl(n,{...t,execution:"persistent"})}async function OU(t){return Nl(kc(t.registry??hr(),t.provider),t)}async function DU(t){let e=t.registry??hr(),n=kc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=ob===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(ob).some(p=>{try{return f.some(_=>{try{let h=LU(p||t.cwd,"agy"+_);return RU(h,NU.X_OK),xU(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 ib(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 ib(e,t.provider,t.cwd),c=MU(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 ib(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 MU(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 vp(t={}){return(t.registry??hr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function $U(t,e,n=hr()){return n.deleteSession(e,t)}async function PU(t){let n=await(t.registry??hr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,o=n.totalCacheWriteInputTokens??0,i=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:o,output:i,reasoningOutput:a,total:r+s+o+i+a,lastTurn:n.lastTokenUsage}}var Ic,Dn=x(()=>{"use strict";js();Ds();Tf();Tp();js();Tf();Tp();sb();qr();Ic=null});function Ac(t){return An(t)&&UU.has(t)}function Fi(){return bp===null&&(bp=Ws(pr())),bp}function Ip(t,e,n={}){if(!Ac(t))return null;try{let r=Fi().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?Xl({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?FU[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,...ab[t]??[]]}catch{return null}}async function cb(t,e){try{let n=Fi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function db(t){try{return Fi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function ub(t,e,n={}){let r=Ip(t,e,n);return r===null?null:r.join(" ")}function $e(t,e){return Fi().getSession(t,e)}async function _r(t){return(await Fi().resolveSessions(t)).map(n=>n.provider.name)}var ab,FU,UU,lb,bp,ln=x(()=>{"use strict";Ds();Dn();qf();ab={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:[]},FU={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]},UU=new Set(Object.keys(ab)),lb=/^[\w.:-]+$/;bp=null});function jU(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return fb;let n=Number(e);return!Number.isFinite(n)||n<=0?fb:n}async function WU(t,e,n){try{let r=We(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 _r(s);if(c.length!==1)return null;o=c[0]}let i=await $e(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 mb(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??jU(),i=await WU(t,n,r),a=i!==null&&i>=o;return a&&F({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 fb,pb=x(()=>{"use strict";oe();ln();Qe();fb=36e5});function BU(t){return t===null?null:Ye(t)?"live":"dead"}function kp(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:BU(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function HU(t){return(0,hb.formatDuration)(t)}function Ap(t){let e=[];return t.idle_ms!==null&&e.push(`active ${HU(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 hb,_b=x(()=>{"use strict";Ur();hb=Ct(kt(),1)});import{randomUUID as XU}from"node:crypto";import{hostname as gb,networkInterfaces as qU}from"node:os";function yb(t){let e=(t.now??new Date).toISOString();return{lock_id:XU(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??gb(),holder_ips:t.ips??YU(),started_at:e,last_heartbeat:e}}function Eb(t=process.env){return Tb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,GU)}function JU(t=process.env){return Tb(t.LMCTL_TERMINAL_LOCK_STALE_MS,VU)}function Rp(t,e={}){let n=e.now??new Date,r=e.localHost??gb(),s=e.staleMs??JU();if(t.holder_host===r)return(e.isProcessAlive??KU)(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 Ui(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function Tb(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 KU(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 YU(){let t=new Set;for(let e of Object.values(qU()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var GU,VU,Rc=x(()=>{"use strict";GU=15e3,VU=12e4});function zU(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1804
+ 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=Di(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:ct(c.tool_call_id),toolName:ct(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:ct(r.model),stopReason:ct(c.finish_reason)});for(let f of ZF(c.tool_calls)){let m=eU(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:ct(f.function?.name)??"tool_call",toolName:ct(f.function?.name),toolCallId:ct(f.call_id)??ct(f.id),toolInput:typeof f.function?.arguments=="string"?f.function.arguments:JSON.stringify(f.function?.arguments??{}),toolInputData:bt(m)})}}return{provider:this.name,sessionId:r.id,slug:ct(r.title),cwd:$S(r),createdAt:Di(r.started_at),modifiedAt:Di(r.last_activity_at??r.started_at),model:ct(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...PS(r),messages:o,userPrompts:i}}catch(r){return F({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 tU}from"node:fs/promises";function rU(t){return nU.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 sU}function op(t){return new sp(t)}var nU,sU,sp,ip=L(()=>{"use strict";Je();US();Cn();Be();oe();nU=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;sU="dont_ask";sp=class extends de{hermesProvider;hermesHome;constructor(e){let n=new wc(e);super({provider:n,protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},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)=>rn(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=rp(e)}async openSession(e){return sn({...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 tU(e,{recursive:!0});let r=[];if(n?.effort){let o="hermes has no ACP-level effort surface";F({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??te,{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 rU(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(F({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 WS,rm as oU,stat as iU}from"node:fs/promises";import{join as ap}from"node:path";function lp(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 BS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var vc,HS=L(()=>{"use strict";Ae();vc=class{name="pi";baseDir;constructor(e={}){this.baseDir=e.piDir||ap(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 WS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=ap(this.baseDir,r);try{if(!(await iU(s)).isDirectory())continue;for(let o of await WS(s))o.endsWith(".jsonl")&&n.push(ap(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 Ie(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=lp(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:lp(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:BS(c.arguments),toolName:c.name??"tool",toolInput:BS(c.arguments),toolInputData:c.arguments,toolCallId:c.id});else a.role==="toolResult"&&s.push({role:"tool_result",timestamp:l,content:lp(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 oU(n,{force:!0}),!0):!1}}});function dp(t){return new cp(t)}var cp,aU,up=L(()=>{"use strict";HS();Je();Be();nn();Bm();cp=class extends de{constructor(e){super({provider:new vc(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",te],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:aU})}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}`}}},aU=_c({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)=>Oe("pi",t,e.permissionMode??"yolo")})});import{createHash as lU}from"node:crypto";import{existsSync as cU,mkdirSync as mp,readFileSync as dU,renameSync as uU,rmdirSync as zS,statSync as fU,writeFileSync as mU}from"node:fs";import{dirname as gp,join as XS,resolve as fp}from"node:path";function pU(t){return lU("sha256").update(t).digest("hex").slice(0,8)}function hU(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function _U(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 QS(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Sc(t){return Math.max(1,Math.ceil(t.length/4))}function Qs(t=process.cwd()){let e=process.env.LMCTL_CLAUDE_MOCK_STORE;if(e!==void 0&&e.trim().length>0)return fp(e);let n=process.env.LMCTL_DB;return n!==void 0&&n.trim().length>0?XS(gp(fp(n)),".lmctl-claude-mock","sessions.json"):XS(fp(t),".lmctl-claude-mock","sessions.json")}function qS(){return{schemaVersion:1,sessions:{}}}function Mi(t){if(!cU(t))return qS();try{let e=JSON.parse(dU(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=pp(e.defaultDelayMs);return{schemaVersion:1,sessions:n,...o!==void 0?{defaultDelayMs:o}:{},...r!==void 0?{script:r}:{},...s!==void 0?{scriptContains:s}:{}}}catch{return qS()}}function ZS(t,e){mp(gp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;mU(n,`${JSON.stringify(e,null,2)}
1805
+ `,"utf8"),uU(n,t)}function EU(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function TU(t){let e=`${t}.lock`;mp(gp(t),{recursive:!0});let n=Date.now()+GS;for(;;)try{return mp(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-fU(e).mtimeMs>gU){try{zS(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${GS}ms: ${e}`);EU(yU)}}function wU(t){try{zS(t)}catch{}}function eb(t,e){let n=TU(t);try{return e()}finally{wU(n)}}function vU(t){return{...t,timestamp:t.timestamp.toISOString()}}function SU(t){return{...t,timestamp:new Date(t.timestamp)}}function bU(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map(vU)}}function tb(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(SU)}}function bc(t,e=process.cwd()){let n=zs.get(t);if(n!==void 0)return n;let s=Mi(Qs(e)).sessions[t];if(s===void 0)return;let o=tb(s);return zs.set(o.sessionId,o),o}function VS(t){zs.set(t.sessionId,t);let e=Qs(t.cwd);eb(e,()=>{let n=Mi(e);n.sessions[t.sessionId]=bU({...t,filePath:e}),ZS(e,n)})}function IU(t,e=process.cwd()){let n=Qs(e);return eb(n,()=>{let r=Mi(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],ZS(n,r)),s})}function kU(){let t=Mi(Qs()),e=Object.values(t.sessions).map(tb);for(let n of e)zs.set(n.sessionId,n);return e}function pp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function JS(t){if(typeof t=="string")return{kind:"success",text:t};if(t!==void 0&&typeof t.text=="string"&&typeof t.error!="string"){let e=pp(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=pp(t.delayMs);return{kind:"error",error:t.error,...e!==void 0?{delayMs:e}:{}}}}async function KS(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function AU(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=JS(n[t]??n[QS(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=JS(r[s]);if(o!==void 0)return o}}}function YS(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 yp(){return new _p}var zs,gU,yU,GS,hp,_p,Ep=L(()=>{"use strict";zs=new Map;gU=5e3,yU=15,GS=1e4;hp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of kU())e.set(n.sessionId,n);for(let n of zs.values())e.set(n.sessionId,n);return[...e.values()].map(YS)}async loadSession(e){let n=bc(e);return n===void 0?null:{...YS(n),messages:n.messages.slice()}}async resolveSessionPath(e){return bc(e)?.filePath??null}async deleteSession(e){let n=zs.delete(e),r=IU(e);return n||r}},_p=class{name="ClaudeMock";capabilities={canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1};injection={leaderMode:"none"};provider=new hp;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=hU(_U(e,n)),s=`mock-${r}-${pU(`${e}:${r}`)}`,o=new Date,i=Qs(e),a=bc(s,e),l=n?.prompt??"ClaudeMock seed",c=Sc(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+=Sc("ACK: ClaudeMock seeded"),VS(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=bc(n.sessionId,n.cwd);if(s===void 0)throw new Error(`ClaudeMock session not found: ${n.sessionId}`);let o=new Date,i=Mi(Qs(n.cwd)),a=AU(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await KS(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${QS(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+=Sc(e),s.totalOutputTokens+=Sc(c),VS(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await KS(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function pr(t){let e=[Uf({museDataHome:t?.museDataHome}),lm({miniplayerHome:t?.miniplayerHome}),um({claudeDir:t?.claudeDir}),_m({codexDir:t?.codexDir,codeDir:t?.codeDir}),wm({geminiDir:t?.geminiDir,claudeDir:t?.claudeDir,codexDir:t?.codexDir,codeDir:t?.codeDir}),Im({copilotDir:t?.copilotDir}),Rm({dbPaths:t?.opencodeDbPaths}),Om({kimiHome:t?.kimiHome}),$m({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Um({qwenDir:t?.qwenDir}),Xm({agyDir:t?.agyDir}),ep({dshHome:t?.dshHome}),op({hermesHome:t?.hermesHome}),dp({piDir:t?.piDir})];return process.env.LMCTL_ENABLE_MOCK_PROVIDER==="1"&&e.push(yp()),e}var Tp=L(()=>{"use strict";jf();jf();cm();cm();fm();gm();vm();km();Nm();Dm();Pm();jm();qm();tp();ip();up();Ep();fm();gm();vm();km();Nm();Dm();Pm();jm();qm();tp();ip();up();Ep()});var nb,rb,sb=L(()=>{"use strict";nb=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],rb=["agy","pi","lmplayer"]});var Sp={};me(Sp,{BUNDLE_CAPABLE_PROVIDERS:()=>nb,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>rb,ProviderRegistry:()=>di,TransportConnectionError:()=>ye,TransportError:()=>ar,TransportJsonError:()=>Pl,TransportProcessError:()=>fi,TransportRpcError:()=>mi,_resetDefaultRegistryForTests:()=>CU,bundleSupportedProviders:()=>Pi,canUsePersistentSession:()=>Rl,chat:()=>$i,countTokens:()=>PU,createAdapterRegistry:()=>Ws,createAllAdapters:()=>pr,deleteSession:()=>$U,listSessions:()=>vp,openBundleSession:()=>wp,openConversation:()=>OU,seed:()=>DU});import{accessSync as RU,constants as NU,statSync as LU}from"node:fs";import{join as xU,delimiter as ob}from"node:path";function hr(){return Ic===null&&(Ic=Ws(pr())),Ic}function CU(){Ic=null}function kc(t,e){pl(e);let n=t.getAdapter(e);if(!n)throw new Error(`provider "${e}" is not registered in this registry`);return n}async function $i(t){let e=t.registry??hr(),n=kc(e,t.provider),r={sessionId:t.sessionId,cwd:t.cwd,env:t.env,onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal,timeoutMs:t.timeoutMs,model:t.model,effort:t.effort,progPath:t.progPath,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,requireResume:t.requireResume,bundleSession:t.bundleSession},s=t.bundleSession===void 0?await Nl(n,{...r,execution:"per-turn",requireResume:t.requireResume??!1}):void 0,o;try{o=s?await s.sendTurn(t.prompt,{onDelta:t.onDelta,onProgress:t.onProgress,signal:t.signal}):await n.sendTurn(t.prompt,r)}finally{await s?.close()}return{text:o.text,...o.usage?{usage:o.usage}:{},sessionId:o.sessionId,durationMs:o.durationMs,stopReason:o.stopReason,numTurns:o.numTurns,status:o.status,stalledAfterMs:o.stalledAfterMs,...o.warnings!==void 0?{warnings:o.warnings}:{}}}function Pi(t){return(t??hr()).getAllAdapters().filter(n=>An(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function wp(t){let e=t.registry??hr(),n=kc(e,t.provider);if(n.openSession===void 0)throw new Error(`provider "${t.provider}" does not support bundle sessions in this version (supported: ${Pi(e).join(", ")})`);return Nl(n,{...t,execution:"persistent"})}async function OU(t){return Nl(kc(t.registry??hr(),t.provider),t)}async function DU(t){let e=t.registry??hr(),n=kc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=ob===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(ob).some(p=>{try{return f.some(_=>{try{let h=xU(p||t.cwd,"agy"+_);return RU(h,NU.X_OK),LU(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 ib(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 ib(e,t.provider,t.cwd),c=MU(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 ib(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 MU(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 vp(t={}){return(t.registry??hr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function $U(t,e,n=hr()){return n.deleteSession(e,t)}async function PU(t){let n=await(t.registry??hr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,o=n.totalCacheWriteInputTokens??0,i=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:o,output:i,reasoningOutput:a,total:r+s+o+i+a,lastTurn:n.lastTokenUsage}}var Ic,Dn=L(()=>{"use strict";js();Ds();Tf();Tp();js();Tf();Tp();sb();qr();Ic=null});function Ac(t){return An(t)&&UU.has(t)}function Fi(){return bp===null&&(bp=Ws(pr())),bp}function Ip(t,e,n={}){if(!Ac(t))return null;try{let r=Fi().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?Xl({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?FU[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,...ab[t]??[]]}catch{return null}}async function cb(t,e){try{let n=Fi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function db(t){try{return Fi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function ub(t,e,n={}){let r=Ip(t,e,n);return r===null?null:r.join(" ")}function $e(t,e){return Fi().getSession(t,e)}async function _r(t){return(await Fi().resolveSessions(t)).map(n=>n.provider.name)}var ab,FU,UU,lb,bp,ln=L(()=>{"use strict";Ds();Dn();qf();ab={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:[]},FU={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]},UU=new Set(Object.keys(ab)),lb=/^[\w.:-]+$/;bp=null});function jU(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return fb;let n=Number(e);return!Number.isFinite(n)||n<=0?fb:n}async function WU(t,e,n){try{let r=We(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 _r(s);if(c.length!==1)return null;o=c[0]}let i=await $e(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 mb(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??jU(),i=await WU(t,n,r),a=i!==null&&i>=o;return a&&F({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 fb,pb=L(()=>{"use strict";oe();ln();Qe();fb=36e5});function BU(t){return t===null?null:Ye(t)?"live":"dead"}function kp(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:BU(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function HU(t){return(0,hb.formatDuration)(t)}function Ap(t){let e=[];return t.idle_ms!==null&&e.push(`active ${HU(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 hb,_b=L(()=>{"use strict";Ur();hb=Ct(kt(),1)});import{randomUUID as XU}from"node:crypto";import{hostname as gb,networkInterfaces as qU}from"node:os";function yb(t){let e=(t.now??new Date).toISOString();return{lock_id:XU(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??gb(),holder_ips:t.ips??YU(),started_at:e,last_heartbeat:e}}function Eb(t=process.env){return Tb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,GU)}function JU(t=process.env){return Tb(t.LMCTL_TERMINAL_LOCK_STALE_MS,VU)}function Rp(t,e={}){let n=e.now??new Date,r=e.localHost??gb(),s=e.staleMs??JU();if(t.holder_host===r)return(e.isProcessAlive??KU)(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 Ui(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function Tb(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 KU(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 YU(){let t=new Set;for(let e of Object.values(qU()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var GU,VU,Rc=L(()=>{"use strict";GU=15e3,VU=12e4});function zU(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1806
1806
  manually, outside a member session that lmctl started. Running lmctl this way is
1807
1807
  not officially supported.
1808
1808
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function zr(t,e=process.env,n){let r=n?.db?.name??Ge(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.
1809
1809
  The session marker may be stale or the team may not be registered in this lmctl database.
1810
1810
  Consulted ${Yo(r,s)}
1811
1811
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function wb(t){return`unknown option --from
1812
- ${zU(t)}`}function Nc(t,e){let n=Np(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Np(t,e){let n=t[Of];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let o of e.listRootTeams()){let i;try{i=zt(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 ji=x(()=>{"use strict";Ut();bn();Qt()});function Qr(t){let e=Nn(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var xc=x(()=>{"use strict";Qe()});function xp(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=qe({path:Fe(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&&Ye(a.holder_pid)),pollMs:QU,settleMs:ZU,maxHoldMs:ks(n),onHold:()=>F({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{i(),!(!a.held&&a.reason==="cleared")&&F({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function vb(t){let e=t.literalPrompt?t.newMessage:ej(t.newMessage,{newMessageFrom:t.newMessageFrom??tj(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=ge(),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.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=xp(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await $i(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&&Ve(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 ej(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1813
- `)}function tj(t){return`${t.teamfile}:${t.alias}`}var TQ,QU,ZU,Lp=x(()=>{"use strict";Dn();oe();ce();Ft();Ur();Pt();TQ=60*60*1e3,QU=2e3,ZU=5e3});async function Lc(t){let e=t.onEvent??(()=>{}),n=nj(t.io,e),r=null,s=null,o=null,i,a,l=null,c=!1,d=null,u=t.prompt,f;try{let m=t.resolvedNativeTarget,p=m!==void 0;if(p&&(t.heldLease===void 0||t.conversation===void 0))throw new _e("native session turns require a caller-held lease and conversation");let _=p?m:await j(n,I=>We(t.teamfile,t.alias,I));if(t.expectedSession!==void 0&&(_.provider!==t.expectedSession.provider||_.sessionid!==t.expectedSession.sessionid))throw new _e(`session changed for ${_.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${_.provider}:${_.sessionid}`);if(p&&(t.conversation.provider!==_.provider||t.conversation.sessionId!==_.sessionid))throw new _e("native session changed for "+_.alias+"; expected "+_.provider+":"+_.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let h=_.teamfile,g=await j(n,I=>mj(I,t.env??process.env)),E=g.sender,y=p?"native:"+_.provider+":"+_.sessionid:await pj(n,{explicitRoot:t.rootFlag,sender:E,receiverTeamfile:h,operatorOrigin:g.origin==="operator"}),T=t.env??process.env;if(!p){let I=await j(n,N=>N.getRootTeam(y)?.name??null);I!==null&&(T.LMBEE_TEAM_NAME=I)}o=await ij(n,{receiverTeamfile:h,receiverAlias:_.alias,sender:E,rootTeamfile:y,provider:_.provider,model:_.model,sessionId:_.sessionid,cwd:_.sessiondir,prompt:t.prompt,origin:g.origin,parentInvocationId:xs(T.LMCTL_INVOCATION_ID)}),i=dj(n,o),o!==null&&(T.LMCTL_INVOCATION_ID=String(o));try{p||Fs(n,Se(h),h)}catch{}r={root_teamfile:y,sender_teamfile:E?.teamfile??null,sender_alias:E?.alias??null,receiver_teamfile:h,receiver_alias:_.alias,receiver_provider:_.provider,receiver_session_id:_.sessionid,origin:g.origin,message_type:t.messageType??null};let w=await Nb(n,h,_.alias);if(w!==null){let I=Ui(w);return Zr(o,r,t.prompt,I,"unavailable"),d=Cp(I,null),{status:"busy",message:I,teamChatLogId:null}}let v=!1;if(t.heldLease!==void 0){let I=t.heldLease;if(!await j(n,P=>{let $=P.getAgentInflight(h,_.alias);return $===null||$.sender_teamfile!==I.row.sender_teamfile||$.sender_alias!==I.row.sender_alias||$.started_at!==I.row.started_at||$.holder_pid!==process.pid?!1:P.heartbeatAgentInflight(I.row,I.leaseId,new Date().toISOString())})){let P=`bundle lease lost for ${_.alias}: this batch no longer holds the in-flight lease (reclaimed or taken over); aborting before this prompt instead of dispatching unsynchronized`;return Zr(o,r,t.prompt,P,"unavailable"),d=Wi(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let I=await rj(n,h,_.alias);if(I.busy){let N=await sj(n,h,_.alias);return N+=await oj(n,h,_.alias),Zr(o,r,t.prompt,N,"unavailable"),d=Cp(N,null),{status:"busy",message:N,teamChatLogId:null}}v=I.idleReclaim}if(E!==null&&E.teamfile!==h){let I=await j(n,N=>YT(N,{root:y,sender:E,receiverTeamfile:h,receiverAlias:_.alias,now:new Date}));if(I.stop){let N=QT(I.chain);return Zr(o,r,t.prompt,N,"cycle"),d=Wi(N,null),{status:"error",errorKind:"cycle",message:N,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let I=await hj(n,{receiver_teamfile:h,receiver_alias:_.alias,sender_teamfile:E?.teamfile??h,sender_alias:E?.alias??"operator",...v?{force:!0,reclaimReason:"session-idle"}:{}});if(!I.acquired){let N=xb(h,_.alias,I.current);return N+=` ${Ap(kp({holderPid:I.current.holder_pid,since:I.current.started_at}))}`,Zr(o,r,t.prompt,N,"unavailable"),d=Cp(N,null),{status:"busy",message:N,teamChatLogId:null}}s={row:I.lease,leaseId:I.leaseId},t.onInflightAcquired?.(s),a=Qa(N=>j(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,N)),{intervalMs:Ab,onError:N=>{ge()&&Ve(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:N instanceof Error?N.message:String(N)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Va({provider:_.provider,modelRequested:_.model??null,cwd:_.sessiondir,sessionId:_.sessionid}),r&&(r.started_at=f.startedAt);let b=await vb({sender:E??{teamfile:h,alias:"operator"},receiver:{teamfile:h,alias:_.alias,provider:_.provider,sessionId:_.sessionid,cwd:_.sessiondir,..._.model!==void 0?{model:_.model}:{},..._.effort!==void 0?{effort:_.effort}:{},..._.isLead!==void 0?{isLead:_.isLead}:{}},signal:t.signal,newMessage:t.prompt,newMessageFrom:E===null?"operator":`${E.teamfile}:${E.alias}`,...p?{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}:{},env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:I=>e({kind:"delta",chunk:I}),onProgress:I=>e({kind:"progress",alias:_.alias,event:I}),onPromptBuilt:async I=>{u=I,l===null&&(l=await gj(n,{...r,message:I,usage:f}),l!==null&&(t.onAccepted?.(vn(l)),o!==null&&await cj(n,o,l))),o!==null&&await lj(n,o,I)}});u=b.prompt;let k=b.status==="stalled",L=b.status==="empty",O=null,C=k?`provider stalled${b.stalledAfterMs!==void 0?` after ${b.stalledAfterMs}ms`:""}`:L?"provider returned no content and no observed activity for this turn -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error":b.status==="error"?b.error??b.receipt:null,S=k||L||b.status==="error"?"error":"ok",A=await Bo(f,{status:b.status,sessionId:b.sessionId,usage:b.usage},()=>sf(n),{db:n.dal?.db,dbPath:Fe(n),env:n.env});l!==null?(await Ib(n,l,{...r,message:u,response:b.receipt,status:S,error_detail:C,usage:A}),c=!0,O=l):O=await kb(n,{...r,message:u,response:b.receipt,status:S,error_detail:C,usage:A});let R=b.status!=="error"?b.warnings:void 0;if(k||L){let I=C;Zr(o,r,u,I,"error"),d=Wi(I,O,b.receipt,R)}else d=uj(b.receipt,O,R);return{status:k?"stalled":L?"empty":"ok",replyText:b.receipt,wroteDelta:b.wroteDelta,teamChatLogId:O,messageId:O===null?null:vn(O),durationMs:b.durationMs}}catch(m){let p=m instanceof Error?m.message:String(m),_=m,h=f?await Bo(f,{status:bs(p,!!t.signal?.aborted),usage:_?.usage,sessionId:_?.sessionId},()=>sf(n),{db:n.dal?.db,dbPath:Fe(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Ib(n,l,{...r,message:u,response:null,status:"error",error_detail:p,usage:h}),c=!0),l===null&&r!==null&&h&&(l=await kb(n,{...r,message:u,response:null,status:"error",error_detail:p,usage:h})),Zr(o,r,u,p,"error"),d=Wi(p,l),{status:"error",errorKind:m instanceof _e?"target":"provider",message:p,teamChatLogId:l,messageId:l===null?null:vn(l)}}finally{i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await yj(n,r,vn(l)),s!==null&&await _j(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await aj(n,o,d??Wi("chat turn exited without a terminal outcome",null))}}function nj(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function rj(t,e,n){let r=await j(t,o=>(kl(o,e,n),Jt(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await j(t,o=>mb(o,r,e,n));return{busy:!s,idleReclaim:s}}async function sj(t,e,n){let r=await Nb(t,e,n);if(r!==null)return Ui(r);let s=await j(t,o=>o.getAgentInflight(e,n));return s!==null?xb(e,n,s):`${n} is busy; wait and retry`}async function oj(t,e,n){let r=await j(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Ap(kp({holderPid:r.holder_pid,since:r.started_at}))}`}async function ij(t,e){try{return(await j(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:fj(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 ge()&&Ve(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function aj(t,e,n){try{await j(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ge()&&Ve(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function lj(t,e,n){try{await j(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ge()&&Ve(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function cj(t,e,n){try{await j(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ge()&&Ve(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function dj(t,e){if(e===null)return;let n=setInterval(()=>{j(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ge()&&Ve(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Ab);return n.unref?.(),n}function Rb(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function uj(t,e,n){return{status:"done",result_summary:Cc(t),error:null,team_chat_log_id:e,...Rb(n)}}function Cp(t,e){return{status:"busy",result_summary:Cc(t),error:t,team_chat_log_id:e}}function Wi(t,e,n,r){return{status:"error",result_summary:n===void 0?oT(t,500):Cc(n),error:t,team_chat_log_id:e,...Rb(r)}}function Cc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function fj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function mj(t,e){let n=Nc(e,t);if(n.ok)return{sender:Qr(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(zr("chat",e,t))}async function pj(t,e){if(e.explicitRoot!==void 0)return await j(t,r=>ke(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await j(t,r=>zT(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function hj(t,e){return await j(t,n=>{let r=ge(),s=Zn(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:or(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Ve(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:bb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Ve(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:bb(s.current)})),{acquired:!1,current:s.current})})}async function Nb(t,e,n){return await j(t,r=>{for(let o=0;o<2;o+=1){let i=r.getTerminalLock(e,n);if(i===null)return null;if(Rp(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:Rp(s).live?s:null})}function bb(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 _j(t,e,n){try{return await j(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)}
1814
- `)}return!1}function xb(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 gj(t,e){let n=Bi(e.message);try{return await j(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)}
1812
+ ${zU(t)}`}function Nc(t,e){let n=Np(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Np(t,e){let n=t[Of];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let o of e.listRootTeams()){let i;try{i=zt(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 ji=L(()=>{"use strict";Ut();bn();Qt()});function Qr(t){let e=Nn(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Lc=L(()=>{"use strict";Qe()});function Lp(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=qe({path:Fe(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&&Ye(a.holder_pid)),pollMs:QU,settleMs:ZU,maxHoldMs:ks(n),onHold:()=>F({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{i(),!(!a.held&&a.reason==="cleared")&&F({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function vb(t){let e=t.literalPrompt?t.newMessage:ej(t.newMessage,{newMessageFrom:t.newMessageFrom??tj(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=ge(),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.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=Lp(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await $i(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&&Ve(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 ej(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1813
+ `)}function tj(t){return`${t.teamfile}:${t.alias}`}var TQ,QU,ZU,xp=L(()=>{"use strict";Dn();oe();ce();Ft();Ur();Pt();TQ=60*60*1e3,QU=2e3,ZU=5e3});async function xc(t){let e=t.onEvent??(()=>{}),n=nj(t.io,e),r=null,s=null,o=null,i,a,l=null,c=!1,d=null,u=t.prompt,f;try{let m=t.resolvedNativeTarget,p=m!==void 0;if(p&&(t.heldLease===void 0||t.conversation===void 0))throw new _e("native session turns require a caller-held lease and conversation");let _=p?m:await j(n,I=>We(t.teamfile,t.alias,I));if(t.expectedSession!==void 0&&(_.provider!==t.expectedSession.provider||_.sessionid!==t.expectedSession.sessionid))throw new _e(`session changed for ${_.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${_.provider}:${_.sessionid}`);if(p&&(t.conversation.provider!==_.provider||t.conversation.sessionId!==_.sessionid))throw new _e("native session changed for "+_.alias+"; expected "+_.provider+":"+_.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let h=_.teamfile,g=await j(n,I=>mj(I,t.env??process.env)),E=g.sender,y=p?"native:"+_.provider+":"+_.sessionid:await pj(n,{explicitRoot:t.rootFlag,sender:E,receiverTeamfile:h,operatorOrigin:g.origin==="operator"}),T=t.env??process.env;if(!p){let I=await j(n,N=>N.getRootTeam(y)?.name??null);I!==null&&(T.LMBEE_TEAM_NAME=I)}o=await ij(n,{receiverTeamfile:h,receiverAlias:_.alias,sender:E,rootTeamfile:y,provider:_.provider,model:_.model,sessionId:_.sessionid,cwd:_.sessiondir,prompt:t.prompt,origin:g.origin,parentInvocationId:Ls(T.LMCTL_INVOCATION_ID)}),i=dj(n,o),o!==null&&(T.LMCTL_INVOCATION_ID=String(o));try{p||Fs(n,Se(h),h)}catch{}r={root_teamfile:y,sender_teamfile:E?.teamfile??null,sender_alias:E?.alias??null,receiver_teamfile:h,receiver_alias:_.alias,receiver_provider:_.provider,receiver_session_id:_.sessionid,origin:g.origin,message_type:t.messageType??null};let w=await Nb(n,h,_.alias);if(w!==null){let I=Ui(w);return Zr(o,r,t.prompt,I,"unavailable"),d=Cp(I,null),{status:"busy",message:I,teamChatLogId:null}}let v=!1;if(t.heldLease!==void 0){let I=t.heldLease;if(!await j(n,P=>{let $=P.getAgentInflight(h,_.alias);return $===null||$.sender_teamfile!==I.row.sender_teamfile||$.sender_alias!==I.row.sender_alias||$.started_at!==I.row.started_at||$.holder_pid!==process.pid?!1:P.heartbeatAgentInflight(I.row,I.leaseId,new Date().toISOString())})){let P=`bundle lease lost for ${_.alias}: this batch no longer holds the in-flight lease (reclaimed or taken over); aborting before this prompt instead of dispatching unsynchronized`;return Zr(o,r,t.prompt,P,"unavailable"),d=Wi(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let I=await rj(n,h,_.alias);if(I.busy){let N=await sj(n,h,_.alias);return N+=await oj(n,h,_.alias),Zr(o,r,t.prompt,N,"unavailable"),d=Cp(N,null),{status:"busy",message:N,teamChatLogId:null}}v=I.idleReclaim}if(E!==null&&E.teamfile!==h){let I=await j(n,N=>YT(N,{root:y,sender:E,receiverTeamfile:h,receiverAlias:_.alias,now:new Date}));if(I.stop){let N=QT(I.chain);return Zr(o,r,t.prompt,N,"cycle"),d=Wi(N,null),{status:"error",errorKind:"cycle",message:N,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let I=await hj(n,{receiver_teamfile:h,receiver_alias:_.alias,sender_teamfile:E?.teamfile??h,sender_alias:E?.alias??"operator",...v?{force:!0,reclaimReason:"session-idle"}:{}});if(!I.acquired){let N=Lb(h,_.alias,I.current);return N+=` ${Ap(kp({holderPid:I.current.holder_pid,since:I.current.started_at}))}`,Zr(o,r,t.prompt,N,"unavailable"),d=Cp(N,null),{status:"busy",message:N,teamChatLogId:null}}s={row:I.lease,leaseId:I.leaseId},t.onInflightAcquired?.(s),a=Qa(N=>j(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,N)),{intervalMs:Ab,onError:N=>{ge()&&Ve(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:N instanceof Error?N.message:String(N)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Va({provider:_.provider,modelRequested:_.model??null,cwd:_.sessiondir,sessionId:_.sessionid}),r&&(r.started_at=f.startedAt);let b=await vb({sender:E??{teamfile:h,alias:"operator"},receiver:{teamfile:h,alias:_.alias,provider:_.provider,sessionId:_.sessionid,cwd:_.sessiondir,..._.model!==void 0?{model:_.model}:{},..._.effort!==void 0?{effort:_.effort}:{},..._.isLead!==void 0?{isLead:_.isLead}:{}},signal:t.signal,newMessage:t.prompt,newMessageFrom:E===null?"operator":`${E.teamfile}:${E.alias}`,...p?{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}:{},env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:I=>e({kind:"delta",chunk:I}),onProgress:I=>e({kind:"progress",alias:_.alias,event:I}),onPromptBuilt:async I=>{u=I,l===null&&(l=await gj(n,{...r,message:I,usage:f}),l!==null&&(t.onAccepted?.(vn(l)),o!==null&&await cj(n,o,l))),o!==null&&await lj(n,o,I)}});u=b.prompt;let k=b.status==="stalled",x=b.status==="empty",O=null,C=k?`provider stalled${b.stalledAfterMs!==void 0?` after ${b.stalledAfterMs}ms`:""}`:x?"provider returned no content and no observed activity for this turn -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error":b.status==="error"?b.error??b.receipt:null,S=k||x||b.status==="error"?"error":"ok",A=await Bo(f,{status:b.status,sessionId:b.sessionId,usage:b.usage},()=>sf(n),{db:n.dal?.db,dbPath:Fe(n),env:n.env});l!==null?(await Ib(n,l,{...r,message:u,response:b.receipt,status:S,error_detail:C,usage:A}),c=!0,O=l):O=await kb(n,{...r,message:u,response:b.receipt,status:S,error_detail:C,usage:A});let R=b.status!=="error"?b.warnings:void 0;if(k||x){let I=C;Zr(o,r,u,I,"error"),d=Wi(I,O,b.receipt,R)}else d=uj(b.receipt,O,R);return{status:k?"stalled":x?"empty":"ok",replyText:b.receipt,wroteDelta:b.wroteDelta,teamChatLogId:O,messageId:O===null?null:vn(O),durationMs:b.durationMs}}catch(m){let p=m instanceof Error?m.message:String(m),_=m,h=f?await Bo(f,{status:bs(p,!!t.signal?.aborted),usage:_?.usage,sessionId:_?.sessionId},()=>sf(n),{db:n.dal?.db,dbPath:Fe(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Ib(n,l,{...r,message:u,response:null,status:"error",error_detail:p,usage:h}),c=!0),l===null&&r!==null&&h&&(l=await kb(n,{...r,message:u,response:null,status:"error",error_detail:p,usage:h})),Zr(o,r,u,p,"error"),d=Wi(p,l),{status:"error",errorKind:m instanceof _e?"target":"provider",message:p,teamChatLogId:l,messageId:l===null?null:vn(l)}}finally{i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await yj(n,r,vn(l)),s!==null&&await _j(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await aj(n,o,d??Wi("chat turn exited without a terminal outcome",null))}}function nj(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function rj(t,e,n){let r=await j(t,o=>(kl(o,e,n),Jt(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await j(t,o=>mb(o,r,e,n));return{busy:!s,idleReclaim:s}}async function sj(t,e,n){let r=await Nb(t,e,n);if(r!==null)return Ui(r);let s=await j(t,o=>o.getAgentInflight(e,n));return s!==null?Lb(e,n,s):`${n} is busy; wait and retry`}async function oj(t,e,n){let r=await j(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Ap(kp({holderPid:r.holder_pid,since:r.started_at}))}`}async function ij(t,e){try{return(await j(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:fj(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 ge()&&Ve(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function aj(t,e,n){try{await j(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ge()&&Ve(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function lj(t,e,n){try{await j(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ge()&&Ve(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function cj(t,e,n){try{await j(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ge()&&Ve(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function dj(t,e){if(e===null)return;let n=setInterval(()=>{j(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ge()&&Ve(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},Ab);return n.unref?.(),n}function Rb(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function uj(t,e,n){return{status:"done",result_summary:Cc(t),error:null,team_chat_log_id:e,...Rb(n)}}function Cp(t,e){return{status:"busy",result_summary:Cc(t),error:t,team_chat_log_id:e}}function Wi(t,e,n,r){return{status:"error",result_summary:n===void 0?oT(t,500):Cc(n),error:t,team_chat_log_id:e,...Rb(r)}}function Cc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function fj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function mj(t,e){let n=Nc(e,t);if(n.ok)return{sender:Qr(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(zr("chat",e,t))}async function pj(t,e){if(e.explicitRoot!==void 0)return await j(t,r=>ke(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await j(t,r=>zT(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function hj(t,e){return await j(t,n=>{let r=ge(),s=Zn(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:or(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Ve(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:bb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Ve(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:bb(s.current)})),{acquired:!1,current:s.current})})}async function Nb(t,e,n){return await j(t,r=>{for(let o=0;o<2;o+=1){let i=r.getTerminalLock(e,n);if(i===null)return null;if(Rp(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:Rp(s).live?s:null})}function bb(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 _j(t,e,n){try{return await j(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)}
1814
+ `)}return!1}function Lb(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 gj(t,e){let n=Bi(e.message);try{return await j(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)}
1815
1815
  `),null}}async function Ib(t,e,n){let r=Bi(n.message),s=n.response===null?null:Bi(n.response);try{await j(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)}
1816
1816
  `)}}async function yj(t,e,n){if(e!==null)try{await j(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)}
1817
1817
  `)}}async function kb(t,e){let n=Bi(e.message),r=e.response===null?null:Bi(e.response);try{return await j(t,s=>s.insertTeamChatLog({usage:e.usage,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,receiver_provider:e.receiver_provider,receiver_session_id:e.receiver_session_id,provider_prompt:e.message,message:n.text,response:r?.text??null,origin:e.origin,status:e.status,error_detail:e.error_detail,truncated:n.truncated||r?.truncated?1:0,message_type:e.message_type??null,created_at:e.started_at??new Date().toISOString()}))}catch(s){return t.stderr.write(`warning: failed to record chat log: ${s instanceof Error?s.message:String(s)}
1818
- `),null}}function Zr(t,e,n,r,s){t!==null||e===null||F({event:"chat_attempt_error",reason:s,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,origin:e.origin,error_detail:r,message_preview:Cc(n)})}function Bi(t){return t.length<=Sb?{text:t,truncated:!1}:{text:t.slice(0,Sb),truncated:!0}}var Sb,Ab,Op=x(()=>{"use strict";Ho();ml();_t();Qe();je();bl();Qt();Il();oe();ce();Pt();Al();pb();_b();Rc();ji();xc();Lp();tl();Sb=256*1024,Ab=3e4});import*as Lb from"node:readline";var Mn,Oc=x(()=>{"use strict";ce();Mn=class{io;override;rl;queue=[];waiters=[];ended=!1;constructor(e,n){this.io=e,this.override=n}get interactive(){return!In(this.io)&&(this.override!==void 0||(this.io.stdin??process.stdin).isTTY===!0)}async ask(e){if(!this.interactive)throw new Error(`More information is needed: ${e.trim()} Run interactively or use an explicit command with all arguments.`);let n;if(this.override?n=await this.override(e):(this.rl||(this.rl=Lb.createInterface({input:this.io.stdin??process.stdin,terminal:!1}),this.rl.on("line",r=>{let s=this.waiters.shift();s?s(r):this.queue.push(r)}),this.rl.on("close",()=>{for(this.ended=!0;this.waiters.length;)this.waiters.shift()(null)})),this.io.stderr.write(e),n=this.queue.length?this.queue.shift():this.ended?null:await new Promise(r=>this.waiters.push(r))),n===null)throw new Error("Input ended; no further action taken.");return n.trim()}async confirm(e){let n=await this.ask(`${e} [y/N]: `);return/^(y|yes)$/i.test(n)}async choose(e,n,r=!1){if(n.length===1&&!r)return n[0];if(!n.length)throw new Error(`No choices available for ${e}`);for(this.io.stderr.write(`${e}
1818
+ `),null}}function Zr(t,e,n,r,s){t!==null||e===null||F({event:"chat_attempt_error",reason:s,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,origin:e.origin,error_detail:r,message_preview:Cc(n)})}function Bi(t){return t.length<=Sb?{text:t,truncated:!1}:{text:t.slice(0,Sb),truncated:!0}}var Sb,Ab,Op=L(()=>{"use strict";Ho();ml();_t();Qe();je();bl();Qt();Il();oe();ce();Pt();Al();pb();_b();Rc();ji();Lc();xp();tl();Sb=256*1024,Ab=3e4});import*as xb from"node:readline";var Mn,Oc=L(()=>{"use strict";ce();Mn=class{io;override;rl;queue=[];waiters=[];ended=!1;constructor(e,n){this.io=e,this.override=n}get interactive(){return!In(this.io)&&(this.override!==void 0||(this.io.stdin??process.stdin).isTTY===!0)}async ask(e){if(!this.interactive)throw new Error(`More information is needed: ${e.trim()} Run interactively or use an explicit command with all arguments.`);let n;if(this.override?n=await this.override(e):(this.rl||(this.rl=xb.createInterface({input:this.io.stdin??process.stdin,terminal:!1}),this.rl.on("line",r=>{let s=this.waiters.shift();s?s(r):this.queue.push(r)}),this.rl.on("close",()=>{for(this.ended=!0;this.waiters.length;)this.waiters.shift()(null)})),this.io.stderr.write(e),n=this.queue.length?this.queue.shift():this.ended?null:await new Promise(r=>this.waiters.push(r))),n===null)throw new Error("Input ended; no further action taken.");return n.trim()}async confirm(e){let n=await this.ask(`${e} [y/N]: `);return/^(y|yes)$/i.test(n)}async choose(e,n,r=!1){if(n.length===1&&!r)return n[0];if(!n.length)throw new Error(`No choices available for ${e}`);for(this.io.stderr.write(`${e}
1819
1819
  ${n.map((s,o)=>` ${o+1}) ${s}`).join(`
1820
1820
  `)}
1821
1821
  `);;){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.
1822
- `)}}close(){this.rl?.close()}}});function Dc(t){return/\S\s+\S/u.test(t)}function Cb(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("-")&&!Dc(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=Nn(e)??(e.endsWith(":")&&Ne(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||Ne(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Dc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Dc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Dc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return pf(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function Mc(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 Ob=x(()=>{"use strict";je();Qe()});import{spawnSync as Up}from"node:child_process";import{existsSync as Mb,readFileSync as $b}from"node:fs";import{homedir as Pb}from"node:os";import{resolve as Pp}from"node:path";function to(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 wj(){let t=Up("agy",["models"],{encoding:"utf-8",timeout:Tj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function vj(t){let e=[];for(let n of t.split(/\r?\n/)){let r=n.trim(),s=r.indexOf(" ");if(s<0)continue;let o=r.slice(s+1).trim();o&&e.push(o)}return e}function Xi(t){if(!t&&Dp)return Dp;let e=s=>(t||(Dp=s),s),n;try{n=(t??wj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?to("agy models",s):`agy models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:to("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let r=vj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r})}function bj(){let t=Up("codex",["debug","models"],{encoding:"utf-8",timeout:Sj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Ij(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 qi(t){if(!t&&Mp)return Mp;let e=s=>(t||(Mp=s),s),n;try{n=(t??bj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?to("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:to("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=Ij(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 Aj(t){let e=Up("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:kj});return{status:e.status,stdout:e.stdout??"",error:e.error}}function jp(t,e){if(!e&&$p.has(t))return $p.get(t);let n=i=>(e||$p.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??Aj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?to(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:to(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 Wp(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=Nj(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=jp(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=Gi(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: ${Hi(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=Xi(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: ${Hi(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||eo.includes(r.model))continue;Zs.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Hi(Zs)}. 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): ${Hi(eo)}. 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===Db&&n.push(`[${r.alias}] model="${Db}" 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=qi(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: ${Hi(o.models)}`);continue}r.model&&(Fb.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 Ub(t,e={}){let n=t.filter(i=>i.model!==void 0&&Fb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Ot();if(r.catalog===null)return{warnings:[],errors:[]};let s=[],o=[];for(let i of n){let a=i.provider.trim().toLowerCase(),l=i.model,c=Ga(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=By(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")&&Ej.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 Ub(t,e)).warnings}async function Wb(t,e={}){return(await Ub(t,e)).errors}function Gi(t){let e=process.env.KIMI_CODE_HOME||Pp(Pb(),".kimi-code"),n=t??Pp(e,"config.toml");if(!Mb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=$b(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=Rj(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].sort()}}function Rj(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 Nj(t){let e=t??Pp(Pb(),".config","opencode","opencode.json");if(!Mb(e))return{available:!0,models:[]};let n;try{n=JSON.parse($b(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:xj(n)}}function xj(t){if(!Fp(t))return[];let e=$c(t.provider)??$c(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!Fp(s))continue;let o=$c(s.models)??$c(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function $c(t){return Fp(t)?t:null}function Fp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Hi(t){return t.length>0?t.join(", "):"(none)"}var Fb,Ej,Zs,eo,Db,Tj,Dp,Sj,Mp,kj,$p,Vi=x(()=>{"use strict";En();$r();Fb=new Set(Object.keys(Vt).filter(t=>t!=="codex"&&t!=="kimi")),Ej=/\d\.(?=\d)/,Zs=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],eo=["deepseek-flash","deepseek-pro"],Db="gpt-5.3-codex-spark",Tj=15e3;Dp=null;Sj=5e3;Mp=null;kj=5e3;$p=new Map});function Pc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Bb(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 Vt[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 Bp(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=Vt[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")||Pc(t)&&!Bb(o)||n.push(o)}return[...new Set(n)].sort()}async function Ji(t){let e;switch(t){case"dsh":e=[...eo,...Zs];break;case"codex":e=qi().models;break;case"agy":e=Xi().models;break;case"kimi":e=Gi().models;break;case"opencode":e=jp("").models;break;default:{let{catalog:n}=await Ot();e=n?Bp(t,n):[]}}return[...new Set(e.filter(n=>!Pc(t)||Bb(n)))].sort()}var Hp=x(()=>{"use strict";En();$r();Vi()});var qb={};me(qb,{MODEL_PROVIDERS:()=>$n,knownModelNames:()=>no,runModel:()=>Fc});function Xb(t,e){switch(t){case"codex":return qi();case"agy":return Xi();case"kimi":return Gi();case"claude":{let n=e.catalog?Bp(t,e.catalog):[];return n.length>0?{available:!0,models:n}:{available:!1,models:[],reason:"No first-party Claude models in the available catalog"}}default:return{available:!1,models:[],reason:"Model list unavailable"}}}async function no(t){if(!$n.includes(t))return Ji(t);let e=t==="claude"?await Ot():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return Xb(t,e).models}function Cj(t,e,n){let{state:r,offer:s,provenance:o}=Dt(t,e,n.catalog,n.aliases);return{model:e,pricing:{input_per_1m_tokens:s?.pricing.input_per_1m_tokens??null,output_per_1m_tokens:s?.pricing.output_per_1m_tokens??null,input_cache_read_per_1m_tokens:s?.pricing.input_cache_read_per_1m_tokens??null},price_resolution:r.kind,price_source:s?.source??null,price_source_model_id:s?.sourceModelId??null,price_provenance:o,price_estimated:s?.estimated??!1}}async function Fc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Hb),0;let r=le(t,[],["--json"]),s=r.positionals.find(h=>h!=="all"&&!$n.includes(h)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${$n.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1822
+ `)}}close(){this.rl?.close()}}});function Dc(t){return/\S\s+\S/u.test(t)}function Cb(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("-")&&!Dc(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=Nn(e)??(e.endsWith(":")&&Ne(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||Ne(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Dc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Dc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Dc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return pf(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function Mc(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 Ob=L(()=>{"use strict";je();Qe()});import{spawnSync as Up}from"node:child_process";import{existsSync as Mb,readFileSync as $b}from"node:fs";import{homedir as Pb}from"node:os";import{resolve as Pp}from"node:path";function to(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 wj(){let t=Up("agy",["models"],{encoding:"utf-8",timeout:Tj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function vj(t){let e=[];for(let n of t.split(/\r?\n/)){let r=n.trim(),s=r.indexOf(" ");if(s<0)continue;let o=r.slice(s+1).trim();o&&e.push(o)}return e}function Xi(t){if(!t&&Dp)return Dp;let e=s=>(t||(Dp=s),s),n;try{n=(t??wj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?to("agy models",s):`agy models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:to("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let r=vj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r})}function bj(){let t=Up("codex",["debug","models"],{encoding:"utf-8",timeout:Sj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Ij(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 qi(t){if(!t&&Mp)return Mp;let e=s=>(t||(Mp=s),s),n;try{n=(t??bj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?to("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:to("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=Ij(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 Aj(t){let e=Up("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:kj});return{status:e.status,stdout:e.stdout??"",error:e.error}}function jp(t,e){if(!e&&$p.has(t))return $p.get(t);let n=i=>(e||$p.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??Aj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?to(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:to(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 Wp(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=Nj(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=jp(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=Gi(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: ${Hi(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=Xi(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: ${Hi(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||eo.includes(r.model))continue;Zs.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Hi(Zs)}. 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): ${Hi(eo)}. 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===Db&&n.push(`[${r.alias}] model="${Db}" 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=qi(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: ${Hi(o.models)}`);continue}r.model&&(Fb.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 Ub(t,e={}){let n=t.filter(i=>i.model!==void 0&&Fb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Ot();if(r.catalog===null)return{warnings:[],errors:[]};let s=[],o=[];for(let i of n){let a=i.provider.trim().toLowerCase(),l=i.model,c=Ga(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=By(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")&&Ej.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 Ub(t,e)).warnings}async function Wb(t,e={}){return(await Ub(t,e)).errors}function Gi(t){let e=process.env.KIMI_CODE_HOME||Pp(Pb(),".kimi-code"),n=t??Pp(e,"config.toml");if(!Mb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=$b(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=Rj(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].sort()}}function Rj(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 Nj(t){let e=t??Pp(Pb(),".config","opencode","opencode.json");if(!Mb(e))return{available:!0,models:[]};let n;try{n=JSON.parse($b(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:Lj(n)}}function Lj(t){if(!Fp(t))return[];let e=$c(t.provider)??$c(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!Fp(s))continue;let o=$c(s.models)??$c(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function $c(t){return Fp(t)?t:null}function Fp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Hi(t){return t.length>0?t.join(", "):"(none)"}var Fb,Ej,Zs,eo,Db,Tj,Dp,Sj,Mp,kj,$p,Vi=L(()=>{"use strict";En();$r();Fb=new Set(Object.keys(Vt).filter(t=>t!=="codex"&&t!=="kimi")),Ej=/\d\.(?=\d)/,Zs=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],eo=["deepseek-flash","deepseek-pro"],Db="gpt-5.3-codex-spark",Tj=15e3;Dp=null;Sj=5e3;Mp=null;kj=5e3;$p=new Map});function Pc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Bb(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 Vt[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 Bp(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=Vt[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")||Pc(t)&&!Bb(o)||n.push(o)}return[...new Set(n)].sort()}async function Ji(t){let e;switch(t){case"dsh":e=[...eo,...Zs];break;case"codex":e=qi().models;break;case"agy":e=Xi().models;break;case"kimi":e=Gi().models;break;case"opencode":e=jp("").models;break;default:{let{catalog:n}=await Ot();e=n?Bp(t,n):[]}}return[...new Set(e.filter(n=>!Pc(t)||Bb(n)))].sort()}var Hp=L(()=>{"use strict";En();$r();Vi()});var qb={};me(qb,{MODEL_PROVIDERS:()=>$n,knownModelNames:()=>no,runModel:()=>Fc});function Xb(t,e){switch(t){case"codex":return qi();case"agy":return Xi();case"kimi":return Gi();case"claude":{let n=e.catalog?Bp(t,e.catalog):[];return n.length>0?{available:!0,models:n}:{available:!1,models:[],reason:"No first-party Claude models in the available catalog"}}default:return{available:!1,models:[],reason:"Model list unavailable"}}}async function no(t){if(!$n.includes(t))return Ji(t);let e=t==="claude"?await Ot():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return Xb(t,e).models}function Cj(t,e,n){let{state:r,offer:s,provenance:o}=Dt(t,e,n.catalog,n.aliases);return{model:e,pricing:{input_per_1m_tokens:s?.pricing.input_per_1m_tokens??null,output_per_1m_tokens:s?.pricing.output_per_1m_tokens??null,input_cache_read_per_1m_tokens:s?.pricing.input_cache_read_per_1m_tokens??null},price_resolution:r.kind,price_source:s?.source??null,price_source_model_id:s?.sourceModelId??null,price_provenance:o,price_estimated:s?.estimated??!1}}async function Fc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Hb),0;let r=le(t,[],["--json"]),s=r.positionals.find(h=>h!=="all"&&!$n.includes(h)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${$n.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1823
1823
  ${Hb}`),2;let i=n.selections?.map(h=>h.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...$n]:$n.filter(h=>r.positionals.includes(h)));e.stderr.write(`querying models: ${i.join(", ")} ...
1824
- `);let a=await(n.loadSnapshot??Ot)(),l=[];for(let h of i){let g;try{let E=n.selections?.find(y=>y.provider===h);g=E?.models!==void 0?{available:!0,models:E.models}:n.loadModels?await n.loadModels(h,a):$n.includes(h)?Xb(h,a):{available:!0,models:await Ji(h)}}catch(E){g={available:!1,models:[],reason:E instanceof Error?E.message:String(E)}}l.push({provider:h,status:g.available?"ok":"unavailable",source:n.selections?.some(E=>E.provider===h&&E.models!==void 0)?"requested model selection":Lj[h]??"provider model catalog",reason:g.reason??null,models:[...new Set(g.models)].sort().map(E=>Cj(h,E,a))})}if(z(r,"--json"))return ee(e,{schema_version:1,currency:"USD",unit:"per_million_tokens",price_data_source:a.source,price_data_generated_at:a.generatedAt,providers:l}),0;e.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.
1824
+ `);let a=await(n.loadSnapshot??Ot)(),l=[];for(let h of i){let g;try{let E=n.selections?.find(y=>y.provider===h);g=E?.models!==void 0?{available:!0,models:E.models}:n.loadModels?await n.loadModels(h,a):$n.includes(h)?Xb(h,a):{available:!0,models:await Ji(h)}}catch(E){g={available:!1,models:[],reason:E instanceof Error?E.message:String(E)}}l.push({provider:h,status:g.available?"ok":"unavailable",source:n.selections?.some(E=>E.provider===h&&E.models!==void 0)?"requested model selection":xj[h]??"provider model catalog",reason:g.reason??null,models:[...new Set(g.models)].sort().map(E=>Cj(h,E,a))})}if(z(r,"--json"))return ee(e,{schema_version:1,currency:"USD",unit:"per_million_tokens",price_data_source:a.source,price_data_generated_at:a.generatedAt,providers:l}),0;e.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.
1825
1825
  `),e.stdout.write(`Price catalog: ${a.source}${a.generatedAt?` (${a.generatedAt})`:""}
1826
1826
  `);let c=["MODEL","INPUT","OUTPUT","CACHE READ"],d=h=>h===null?"n/a":`$${h}`,u=l.map(h=>h.models.map(g=>[(0,Pn.escapeCell)(g.model),d(g.pricing.input_per_1m_tokens),d(g.pricing.output_per_1m_tokens),d(g.pricing.input_cache_read_per_1m_tokens)])),f=["left","decimal","decimal","decimal"],m=(0,Pn.measureDecimalPlaces)(u),p={align:[...f],decimalPlaces:m},_=(0,Pn.measureColumns)([{rows:[],headers:c},...u],p);for(let[h,g]of l.entries()){if(e.stdout.write(`
1827
1827
  ${g.provider} (${g.source})
1828
1828
  `),g.status==="unavailable"){e.stdout.write(` unavailable: ${(0,Pn.escapeCell)(g.reason??"model list unavailable")}
1829
1829
  `);continue}e.stdout.write(`${(0,Pn.renderGrid)(u[h],{headers:c,widths:_,margin:2,...p})}
1830
- `)}return 0}var Pn,$n,Hb,Lj,Uc=x(()=>{"use strict";Pn=Ct(kt(),1);ce();Vi();Hp();En();$r();$n=["codex","agy","claude","kimi"],Hb=`usage: lmctl model [provider ...] [--json]
1830
+ `)}return 0}var Pn,$n,Hb,xj,Uc=L(()=>{"use strict";Pn=Ct(kt(),1);ce();Vi();Hp();En();$r();$n=["codex","agy","claude","kimi"],Hb=`usage: lmctl model [provider ...] [--json]
1831
1831
 
1832
1832
  List known model names and USD prices per million tokens.
1833
1833
  Providers: all (default), codex, agy, claude, kimi. Multiple allowed.
@@ -1845,7 +1845,7 @@ zero. All known models are kept, including models without a price.
1845
1845
  pricing fields are input_per_1m_tokens, output_per_1m_tokens,
1846
1846
  and input_cache_read_per_1m_tokens (numbers or null).
1847
1847
  -h, --help Show this help.
1848
- `,Lj={codex:"codex debug models",agy:"agy models",claude:"lmprice first-party catalog",kimi:"Kimi [models] config"}});function es(t){try{if(t instanceof Error){let e=t.message;if(typeof e=="string")return e}return String(t)}catch{return"Unprintable error"}}function dt(t,e,n){return{...n,status:"error",code:t,error:e}}var jc=x(()=>{"use strict"});function cn(t){try{return t?.usage}catch{return}}function Wc(t,e,n,r){let s,o,i,a=!1;try{i=Va(e),s=t.dal??qe({path:Fe(t),recover:!1}),o=s.insertDirectTurn(i,n,r)}catch{}return{async finish(l){if(!a){a=!0;try{s&&o!==void 0&&i&&s.finishDirectTurn(o,await Bo(i,l,()=>fl(s.db,t.env),{db:s.db,env:t.env}))}catch{}finally{if(s&&s!==t.dal)try{s.close()}catch{}}}}}}function Bc(t,e,n){let r=t,s,o;s=cn(r)??cn(n);try{o=r?.sessionId??n?.sessionId}catch{o=n?.sessionId}return{status:bs(es(t),e.aborted),usage:s,sessionId:o}}var Xp=x(()=>{"use strict";Ft();ce();ml();Ho();jc()});var Gb={};me(Gb,{runFreshPrompt:()=>Mj});import{resolve as Oj}from"node:path";import{stat as Dj}from"node:fs/promises";async function Mj(t,e){let n=Oj(e.cwd??process.cwd(),t.sessiondir??"."),r=new AbortController,s=()=>r.abort();process.once("SIGINT",s),process.once("SIGTERM",s);let o=!1,i,a={status:"error"};try{if(!(await Dj(n)).isDirectory())throw new Error(`sessiondir is not a directory: ${n}`);i=Wc(e,{provider:t.provider,modelRequested:t.model,cwd:n,sessionId:""},"operator");let l=await $i({provider:t.provider,model:t.model,cwd:n,sessionId:"",prompt:t.prompt,requireResume:!1,timeoutMs:0,permissionMode:t.permissionMode,signal:r.signal,onDelta:t.json?void 0:c=>{o=!0,e.stdout.write(c)},onProgress:t.verbose?c=>{(c.kind==="tool_use"||c.kind==="tool_result"||c.kind==="api_retry")&&e.stderr.write(`[${t.provider}] ${c.kind}${c.summary?`: ${c.summary}`:""}
1848
+ `,xj={codex:"codex debug models",agy:"agy models",claude:"lmprice first-party catalog",kimi:"Kimi [models] config"}});function es(t){try{if(t instanceof Error){let e=t.message;if(typeof e=="string")return e}return String(t)}catch{return"Unprintable error"}}function dt(t,e,n){return{...n,status:"error",code:t,error:e}}var jc=L(()=>{"use strict"});function cn(t){try{return t?.usage}catch{return}}function Wc(t,e,n,r){let s,o,i,a=!1;try{i=Va(e),s=t.dal??qe({path:Fe(t),recover:!1}),o=s.insertDirectTurn(i,n,r)}catch{}return{async finish(l){if(!a){a=!0;try{s&&o!==void 0&&i&&s.finishDirectTurn(o,await Bo(i,l,()=>fl(s.db,t.env),{db:s.db,env:t.env}))}catch{}finally{if(s&&s!==t.dal)try{s.close()}catch{}}}}}}function Bc(t,e,n){let r=t,s,o;s=cn(r)??cn(n);try{o=r?.sessionId??n?.sessionId}catch{o=n?.sessionId}return{status:bs(es(t),e.aborted),usage:s,sessionId:o}}var Xp=L(()=>{"use strict";Ft();ce();ml();Ho();jc()});var Gb={};me(Gb,{runFreshPrompt:()=>Mj});import{resolve as Oj}from"node:path";import{stat as Dj}from"node:fs/promises";async function Mj(t,e){let n=Oj(e.cwd??process.cwd(),t.sessiondir??"."),r=new AbortController,s=()=>r.abort();process.once("SIGINT",s),process.once("SIGTERM",s);let o=!1,i,a={status:"error"};try{if(!(await Dj(n)).isDirectory())throw new Error(`sessiondir is not a directory: ${n}`);i=Wc(e,{provider:t.provider,modelRequested:t.model,cwd:n,sessionId:""},"operator");let l=await $i({provider:t.provider,model:t.model,cwd:n,sessionId:"",prompt:t.prompt,requireResume:!1,timeoutMs:0,permissionMode:t.permissionMode,signal:r.signal,onDelta:t.json?void 0:c=>{o=!0,e.stdout.write(c)},onProgress:t.verbose?c=>{(c.kind==="tool_use"||c.kind==="tool_result"||c.kind==="api_retry")&&e.stderr.write(`[${t.provider}] ${c.kind}${c.summary?`: ${c.summary}`:""}
1849
1849
  `)}:void 0,env:e.env});a={status:r.signal.aborted?"cancelled":l.status??"ok",sessionId:l.sessionId,usage:cn(l)};for(let c of l.warnings??[])t.json||e.stderr.write(`warning: ${c}
1850
1850
  `);return t.json?e.stdout.write(`${JSON.stringify({status:l.status??"ok",provider:t.provider,requestedModel:t.model,sessionId:l.sessionId,replyText:l.text,...l.warnings?{warnings:l.warnings}:{}})}
1851
1851
  `):o?l.text.length>0&&!l.text.endsWith(`
@@ -1855,17 +1855,17 @@ zero. All known models are kept, including models without a price.
1855
1855
  `}`),l.status==="empty"||l.status==="stalled"?1:(e.stderr.write(`note: fresh ${t.provider} session ${l.sessionId||"(provider did not report an id)"} completed
1856
1856
  `),0)}catch(l){a=Bc(l,r.signal,a);let c=l instanceof Error?l.message:String(l);return t.json?e.stdout.write(`${JSON.stringify({status:"error",provider:t.provider,requestedModel:t.model,error:c})}
1857
1857
  `):e.stderr.write(`error: ${c}
1858
- `),1}finally{await i?.finish(a),process.removeListener("SIGINT",s),process.removeListener("SIGTERM",s)}}var Vb=x(()=>{"use strict";Dn();Xp()});function Jb(t,e){return new Error("Invalid template reference "+JSON.stringify(t)+" at offset "+e+"; use a simple name, PROPS.path or ARGV[n]. Assign a temporary variable first and pass it in vars.")}function Uj(t){if(typeof t!="string")throw new Error("expand: text must be a string");let e=[],n=0;for(;n<t.length;){let r=t.indexOf("${",n);if(r<0){e.push(t.slice(n));break}if(r>n&&t[r-1]==="$"){e.push(t.slice(n,r-1),"${"),n=r+2;continue}e.push(t.slice(n,r));let s=t.indexOf("}",r+2);if(s<0)throw Jb(t.slice(r+2),r);let o=t.slice(r+2,s),i=Pj.exec(o),a=Fj.exec(o);if(i)e.push({kind:"property",name:o,key:i[1],offset:r});else if(a&&Number.isSafeInteger(Number(a[1])))e.push({kind:"argument",name:o,index:Number(a[1]),offset:r});else if($j.test(o)&&o!=="PROPS"&&o!=="ARGV")e.push({kind:"variable",name:o,offset:r});else throw Jb(o,r);n=s+1}return e}function Kb(t,e,n=r=>r!==null&&typeof r=="object"?JSON.stringify(r):String(r)){let r=[],s=new Map;for(let o of Uj(t)){if(typeof o=="string"){r.push(o);continue}let i;try{i=e(o)}catch(a){s.set(o.name,a instanceof Error?a.message:String(a));continue}if(i===void 0){s.set(o.name,"not defined");continue}r.push(n(i))}if(s.size)throw new Error("expand: missing references: "+[...s].map(([o,i])=>o+" ("+i+")").join("; "));return r.join("")}var qp,$j,Pj,Fj,Yb=x(()=>{qp="[_a-zA-Z][_a-zA-Z0-9]*",$j=new RegExp("^"+qp+"$"),Pj=new RegExp("^PROPS\\.("+qp+"(?:\\."+qp+")*)$"),Fj=/^ARGV\[(0|[1-9][0-9]*)\]$/});function zb(t){return{Provider1:t.provider1.provider,Provider2:t.provider2.provider,Provider3:t.provider3.provider,Model1:t.provider1.model1,Model2:t.provider2.model1,Model3:t.provider3.model1}}var Qb=x(()=>{"use strict"});function jj(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function Wj(t,e,n){let r=t.split(/\r?\n/),s="",o=(Math.log10(e+1)|0)+1;for(let i=e-1;i<=e+1;i++){let a=r[i-1];a&&(s+=i.toString().padEnd(o," "),s+=": ",s+=a,s+=`
1858
+ `),1}finally{await i?.finish(a),process.removeListener("SIGINT",s),process.removeListener("SIGTERM",s)}}var Vb=L(()=>{"use strict";Dn();Xp()});function Jb(t,e){return new Error("Invalid template reference "+JSON.stringify(t)+" at offset "+e+"; use a simple name, PROPS.path or ARGV[n]. Assign a temporary variable first and pass it in vars.")}function Uj(t){if(typeof t!="string")throw new Error("expand: text must be a string");let e=[],n=0;for(;n<t.length;){let r=t.indexOf("${",n);if(r<0){e.push(t.slice(n));break}if(r>n&&t[r-1]==="$"){e.push(t.slice(n,r-1),"${"),n=r+2;continue}e.push(t.slice(n,r));let s=t.indexOf("}",r+2);if(s<0)throw Jb(t.slice(r+2),r);let o=t.slice(r+2,s),i=Pj.exec(o),a=Fj.exec(o);if(i)e.push({kind:"property",name:o,key:i[1],offset:r});else if(a&&Number.isSafeInteger(Number(a[1])))e.push({kind:"argument",name:o,index:Number(a[1]),offset:r});else if($j.test(o)&&o!=="PROPS"&&o!=="ARGV")e.push({kind:"variable",name:o,offset:r});else throw Jb(o,r);n=s+1}return e}function Kb(t,e,n=r=>r!==null&&typeof r=="object"?JSON.stringify(r):String(r)){let r=[],s=new Map;for(let o of Uj(t)){if(typeof o=="string"){r.push(o);continue}let i;try{i=e(o)}catch(a){s.set(o.name,a instanceof Error?a.message:String(a));continue}if(i===void 0){s.set(o.name,"not defined");continue}r.push(n(i))}if(s.size)throw new Error("expand: missing references: "+[...s].map(([o,i])=>o+" ("+i+")").join("; "));return r.join("")}var qp,$j,Pj,Fj,Yb=L(()=>{qp="[_a-zA-Z][_a-zA-Z0-9]*",$j=new RegExp("^"+qp+"$"),Pj=new RegExp("^PROPS\\.("+qp+"(?:\\."+qp+")*)$"),Fj=/^ARGV\[(0|[1-9][0-9]*)\]$/});function zb(t){return{Provider1:t.provider1.provider,Provider2:t.provider2.provider,Provider3:t.provider3.provider,Model1:t.provider1.model1,Model2:t.provider2.model1,Model3:t.provider3.model1}}var Qb=L(()=>{"use strict"});function jj(t,e){let n=t.slice(0,e).split(/\r?\n/);return[n.length,n.pop().length+1]}function Wj(t,e,n){let r=t.split(/\r?\n/),s="",o=(Math.log10(e+1)|0)+1;for(let i=e-1;i<=e+1;i++){let a=r[i-1];a&&(s+=i.toString().padEnd(o," "),s+=": ",s+=a,s+=`
1859
1859
  `,i===e&&(s+=" ".repeat(o+n+2),s+=`^
1860
- `))}return s}var J,ts=x(()=>{J=class t extends Error{line;column;codeblock;constructor(e,n){let[r,s]=jj(n.toml,n.ptr),o=Wj(n.toml,r,s);super(`Invalid TOML document: ${e}
1860
+ `))}return s}var J,ts=L(()=>{J=class t extends Error{line;column;codeblock;constructor(e,n){let[r,s]=jj(n.toml,n.ptr),o=Wj(n.toml,r,s);super(`Invalid TOML document: ${e}
1861
1861
 
1862
1862
  ${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 Hc(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+=`
1863
- `: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 Gp=x(()=>{ts();});var Bj,Ki,Vp=x(()=>{Bj=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,Ki=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(Bj);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 yt(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Kp(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function zi(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||J.x("document contains excessively nested structures. aborting.",t);let s=r===91?tI(t):eI(t);return t.d++,s}return r===34||r===39?Hc(t):r===116?((t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)&&J.x("invalid value",t,n),t.p++,!0):r===102?((t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)&&J.x("invalid value",t,n),t.p++,!1):r===43||r===45?Xc(t,t.p,t.s.charCodeAt(++t.p),44-r,e):t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45?Hj(t,r,e):t.s.charCodeAt(t.p+2)===58?Xj(t,r,e):Xc(t,t.p,r,0,e)}function Xc(t,e,n,r,s){let o=n,i=0,a=!1;if(o===105)return(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)&&J.x("invalid value",t,e),t.p++,(r||1)/0;if(o===110)return(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)&&J.x("invalid value",t,e),t.p++,NaN;if(o===48){if(++t.p>=t.s.length||Kp(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return Jp(t,e,16,s);if(o===98)return Jp(t,e,2,s);if(o===111)return Jp(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else yt(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!Kp(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)||(yt(o)?i>9?i-=11:i&1||i++:J.x("illegal character in numeric literal",t));if(!i){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}i&1||J.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),i>1?parseFloat(l):Zb(t,l,10,e)}function Jp(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Kp(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):yt(s,n)?o&1&&o--:J.x("illegal character in numeric literal",t);o&1&&J.x("unfinished numeric value",t);let i=t.s.slice(e+2,t.p);return o&&(i=i.replaceAll("_","")),Zb(t,i,n,e)}function Zb(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;J.x("integer value cannot be represented losslessly",t,r)}return s}return BigInt(n===10?e:(n===2?"0b":n===8?"0o":"0x")+e)}function Hj(t,e,n){let r=t.p++,s;if(!yt(e)||!yt(t.s.charCodeAt(t.p++))||!yt(t.s.charCodeAt(t.p++))||!yt(t.s.charCodeAt(t.p++)))return Xc(t,t.p=r,e,0,n);if(t.p+=5,yt(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,!yt(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return Yi(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(;yt(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 Yi(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return Yi(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Yi(t,o,2,s,r)}function Xj(t,e,n){let r=t.p;if(!yt(e)||!yt(t.s.charCodeAt(++t.p)))return Xc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;yt(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return Yi(t,s,4,!1,r)}function Yi(t,e,n,r,s,o){if(t.ld){let i=new Ki(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 Yp=x(()=>{Gp();zp();ts();Vp();});function qj(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 Wt(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;qj(t)}}var Qp=x(()=>{ts();});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(Hc(t)),r=2,t.p--):i===32||i===9?r===1&&(s.push(t.s.slice(o,t.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?J.x("illegal character in key",t):r||(r=1,o=t.p)}while(i=t.s.charCodeAt(++t.p));J.x("incomplete key-value: cannot find end of key",t,n)}function eI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Wt(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),Wt(t,!0,!0);let d=zi(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Wt(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished table",t,e)}function tI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Wt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(zi(t,93)),Wt(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 zp=x(()=>{Gp();Yp();Qp();ts();});function nI(t,e,n,r,s){let o=n,i=r,a,l=!1,c;for(let d=0;d<e.length;d++){if(d){if(o=l?o[a]:o[a]=Object.create(null),i=(c=i[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],i=i[u].c}}if(a=e[d],(l=Object.hasOwn(o,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!l){let u=a==="__proto__";if(t.uk&&(u||a==="constructor"))return!1;u&&(Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=i[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[a]=[]),o[a].push(o=Object.create(null)),c.c[c.i++]=c={t:1,d:!1,i:0,c:Object.create(null)}),c.d))return null;if(c.d=!0,s===1)o=l?o[a]:o[a]=Object.create(null);else if(s===0&&l)return null;return[a,o,c.c]}function rI(t,e,n){(e===null||t.uk===2)&&J.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function ro(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++,Wt(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;o=n.p+=+c,i=!1;let d=qc(n,93);c&&(t.charCodeAt(n.p)!==93&&J.x("expected end of table array declaration",n),n.p++);let u=nI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(rI(n,u,o),i=!0)}else{o=n.p;let c=qc(n),d=nI(n,c,a,l,0);!d&&!i&&rI(n,d,o),Wt(n,!0,!0);let u=zi(n,void 0);d&&!i&&(d[1][d[0]]=u)}Wt(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),Wt(n)}return r}var sI=x(()=>{zp();Yp();Qp();ts();});var H7,oI=x(()=>{H7=!!"".isWellFormed});var Zp=x(()=>{sI();oI();Vp();ts();});import{readFileSync as Gj}from"node:fs";import{homedir as Vj}from"node:os";import{join as iI,resolve as Jj}from"node:path";function Nt(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?Jj(e):iI(n||iI(t.HOME||Vj(),".lmctl"),"init.toml")}function Fn(t,e="<init.toml>"){let n;try{n=ro(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(s){let o=s;throw new Et(e,"syntax",o.message,o.line??1,(o.column??1)+(t.startsWith("\uFEFF")&&o.line===1?1:0))}let r={};for(let s of Qi){let o=n[s];if(!o||typeof o!="object"||Array.isArray(o)||o instanceof Date)throw new Et(e,"schema","missing or invalid table ["+s+"]");let i={};for(let a of Zi){let l=o[a];if(typeof l!="string"||!l.trim())throw new Et(e,"schema",s+"."+a+" must be a nonempty string");i[a]=l}r[s.toLowerCase()]=i}return{raw:t,document:n,config:r,path:e}}function ns(t=Nt()){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(Gj(t))}catch(n){let r=n;throw new Et(t,r.code==="ENOENT"?"missing":"read",r.message)}return Fn(e,t)}var Qi,Zi,Et,Gc=x(()=>{"use strict";Zp();Qi=["Provider1","Provider2","Provider3"],Zi=["provider","model1","model2","model3"];Et=class extends Error{path;kind;line;column;constructor(e,n,r,s=1,o=1){super(n==="missing"?"Missing "+e+". Run lmctl init first.":(n==="read"?"Cannot read "+e+": "+r:"Invalid "+e+":"+s+":"+o+": "+r)+". Fix the file or run lmctl init."),this.path=e,this.kind=n,this.line=s,this.column=o}}});function Kj(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1863
+ `: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 Gp=L(()=>{ts();});var Bj,Ki,Vp=L(()=>{Bj=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,Ki=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(Bj);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 yt(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Kp(t,e){return t===32||t===9||t===10||t===13||e&&(t===e||t===44)||t===35}function zi(t,e){let n=t.p,r=t.s.charCodeAt(t.p);if(r===91||r===123){t.d--||J.x("document contains excessively nested structures. aborting.",t);let s=r===91?tI(t):eI(t);return t.d++,s}return r===34||r===39?Hc(t):r===116?((t.s.charCodeAt(++t.p)!==114||t.s.charCodeAt(++t.p)!==117||t.s.charCodeAt(++t.p)!==101)&&J.x("invalid value",t,n),t.p++,!0):r===102?((t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==108||t.s.charCodeAt(++t.p)!==115||t.s.charCodeAt(++t.p)!==101)&&J.x("invalid value",t,n),t.p++,!1):r===43||r===45?Xc(t,t.p,t.s.charCodeAt(++t.p),44-r,e):t.s.charCodeAt(t.p+4)===45&&t.s.charCodeAt(t.p+7)===45?Hj(t,r,e):t.s.charCodeAt(t.p+2)===58?Xj(t,r,e):Xc(t,t.p,r,0,e)}function Xc(t,e,n,r,s){let o=n,i=0,a=!1;if(o===105)return(t.s.charCodeAt(++t.p)!==110||t.s.charCodeAt(++t.p)!==102)&&J.x("invalid value",t,e),t.p++,(r||1)/0;if(o===110)return(t.s.charCodeAt(++t.p)!==97||t.s.charCodeAt(++t.p)!==110)&&J.x("invalid value",t,e),t.p++,NaN;if(o===48){if(++t.p>=t.s.length||Kp(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return Jp(t,e,16,s);if(o===98)return Jp(t,e,2,s);if(o===111)return Jp(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else yt(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!Kp(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)||(yt(o)?i>9?i-=11:i&1||i++:J.x("illegal character in numeric literal",t));if(!i){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}i&1||J.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),i>1?parseFloat(l):Zb(t,l,10,e)}function Jp(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Kp(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):yt(s,n)?o&1&&o--:J.x("illegal character in numeric literal",t);o&1&&J.x("unfinished numeric value",t);let i=t.s.slice(e+2,t.p);return o&&(i=i.replaceAll("_","")),Zb(t,i,n,e)}function Zb(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;J.x("integer value cannot be represented losslessly",t,r)}return s}return BigInt(n===10?e:(n===2?"0b":n===8?"0o":"0x")+e)}function Hj(t,e,n){let r=t.p++,s;if(!yt(e)||!yt(t.s.charCodeAt(t.p++))||!yt(t.s.charCodeAt(t.p++))||!yt(t.s.charCodeAt(t.p++)))return Xc(t,t.p=r,e,0,n);if(t.p+=5,yt(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,!yt(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return Yi(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(;yt(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 Yi(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return Yi(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Yi(t,o,2,s,r)}function Xj(t,e,n){let r=t.p;if(!yt(e)||!yt(t.s.charCodeAt(++t.p)))return Xc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;yt(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return Yi(t,s,4,!1,r)}function Yi(t,e,n,r,s,o){if(t.ld){let i=new Ki(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 Yp=L(()=>{Gp();zp();ts();Vp();});function qj(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 Wt(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;qj(t)}}var Qp=L(()=>{ts();});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(Hc(t)),r=2,t.p--):i===32||i===9?r===1&&(s.push(t.s.slice(o,t.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?J.x("illegal character in key",t):r||(r=1,o=t.p)}while(i=t.s.charCodeAt(++t.p));J.x("incomplete key-value: cannot find end of key",t,n)}function eI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Wt(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),Wt(t,!0,!0);let d=zi(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Wt(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished table",t,e)}function tI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Wt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(zi(t,93)),Wt(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 zp=L(()=>{Gp();Yp();Qp();ts();});function nI(t,e,n,r,s){let o=n,i=r,a,l=!1,c;for(let d=0;d<e.length;d++){if(d){if(o=l?o[a]:o[a]=Object.create(null),i=(c=i[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],i=i[u].c}}if(a=e[d],(l=Object.hasOwn(o,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!l){let u=a==="__proto__";if(t.uk&&(u||a==="constructor"))return!1;u&&(Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=i[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[a]=[]),o[a].push(o=Object.create(null)),c.c[c.i++]=c={t:1,d:!1,i:0,c:Object.create(null)}),c.d))return null;if(c.d=!0,s===1)o=l?o[a]:o[a]=Object.create(null);else if(s===0&&l)return null;return[a,o,c.c]}function rI(t,e,n){(e===null||t.uk===2)&&J.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function ro(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++,Wt(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;o=n.p+=+c,i=!1;let d=qc(n,93);c&&(t.charCodeAt(n.p)!==93&&J.x("expected end of table array declaration",n),n.p++);let u=nI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(rI(n,u,o),i=!0)}else{o=n.p;let c=qc(n),d=nI(n,c,a,l,0);!d&&!i&&rI(n,d,o),Wt(n,!0,!0);let u=zi(n,void 0);d&&!i&&(d[1][d[0]]=u)}Wt(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),Wt(n)}return r}var sI=L(()=>{zp();Yp();Qp();ts();});var H7,oI=L(()=>{H7=!!"".isWellFormed});var Zp=L(()=>{sI();oI();Vp();ts();});import{readFileSync as Gj}from"node:fs";import{homedir as Vj}from"node:os";import{join as iI,resolve as Jj}from"node:path";function Nt(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?Jj(e):iI(n||iI(t.HOME||Vj(),".lmctl"),"init.toml")}function Fn(t,e="<init.toml>"){let n;try{n=ro(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(s){let o=s;throw new Et(e,"syntax",o.message,o.line??1,(o.column??1)+(t.startsWith("\uFEFF")&&o.line===1?1:0))}let r={};for(let s of Qi){let o=n[s];if(!o||typeof o!="object"||Array.isArray(o)||o instanceof Date)throw new Et(e,"schema","missing or invalid table ["+s+"]");let i={};for(let a of Zi){let l=o[a];if(typeof l!="string"||!l.trim())throw new Et(e,"schema",s+"."+a+" must be a nonempty string");i[a]=l}r[s.toLowerCase()]=i}return{raw:t,document:n,config:r,path:e}}function ns(t=Nt()){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(Gj(t))}catch(n){let r=n;throw new Et(t,r.code==="ENOENT"?"missing":"read",r.message)}return Fn(e,t)}var Qi,Zi,Et,Gc=L(()=>{"use strict";Zp();Qi=["Provider1","Provider2","Provider3"],Zi=["provider","model1","model2","model3"];Et=class extends Error{path;kind;line;column;constructor(e,n,r,s=1,o=1){super(n==="missing"?"Missing "+e+". Run lmctl init first.":(n==="read"?"Cannot read "+e+": "+r:"Invalid "+e+":"+s+":"+o+": "+r)+". Fix the file or run lmctl init."),this.path=e,this.kind=n,this.line=s,this.column=o}}});function Kj(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1864
1864
  `){let o=n;n+=r==="\r"&&t[n+1]===`
1865
1865
  `?2:1,e.push({start:o,end:n,text:`
1866
1866
  `,kind:"newline"});continue}if(/\s/.test(r)){n++;continue}if(r==="#"){for(;n<t.length&&t[n]!=="\r"&&t[n]!==`
1867
1867
  `;)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 Yj(t){let e=ro(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 zj(t){let e=ro(t+`
1868
- __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 eh(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 aI(t,e,n=[]){if(n.length===2&&Qi.includes(n[0])&&Zi.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=>aI(t[o],e[o],[...n,o]))}function lI(t,e){try{let n=Fn(t),r=[];for(let u of Qi)for(let f of Zi){let m=n.config[u.toLowerCase()][f],p=e[u.toLowerCase()][f];m!==p&&r.push({section:u,key:f,oldValue:m,newValue:p,line:1})}if(!r.length)return{ok:!0,text:t,changes:r};let s=new Map,o=Kj(t),i=0,a=[];for(;i<o.length;){if(o[i].kind==="newline"){i++;continue}let u=i;if(o[i].text==="["){for(;i<o.length&&o[i].kind!=="newline";)i++;a=zj(t.slice(o[u].start,o[i-1].end));continue}for(;i<o.length&&o[i].text!=="=";)i++;if(i===o.length)throw new Error("cannot locate assignment");let f=Yj(t.slice(o[u].start,o[i-1].end));i++;let m=i,p=0;for(;i<o.length;){let _=o[i];if(_.kind==="newline"&&p===0)break;_.kind==="symbol"&&((_.text==="["||_.text==="{")&&p++,(_.text==="]"||_.text==="}")&&p--),i++}if(a.length===1&&f.length===1&&i-m===1){let _=o[m];_.kind==="string"&&!_.multiline&&s.set(a[0]+"."+f[0],_)}}let l=r.map(u=>{let f=s.get(u.section+"."+u.key);if(!f)throw new Error("cannot edit "+u.section+"."+u.key+" in place (multiline, dotted or inline managed layout); edit by hand");return u.line=t.slice(0,f.start).split(/\r\n|\r|\n/).length,{start:f.start,end:f.end,text:eh(u.newValue)}}).sort((u,f)=>f.start-u.start),c=t;for(let u of l)c=c.slice(0,u.start)+u.text+c.slice(u.end);let d=Fn(c);for(let u of Qi)for(let f of Zi)if(d.config[u.toLowerCase()][f]!==e[u.toLowerCase()][f])throw new Error("managed-value verification failed");if(!aI(n.document,d.document))throw new Error("unmanaged semantic verification failed");return{ok:!0,text:c,changes:r}}catch(n){return{ok:!1,error:n.message,line:n.line}}}var cI=x(()=>{"use strict";Zp();Gc()});import{existsSync as Qj,mkdirSync as dZ,readdirSync as Zj,writeFileSync as uZ}from"node:fs";import{homedir as eW}from"node:os";import{dirname as pZ,join as so}from"node:path";function th(t){let e=dI[t]??dI.claude;return{provider:t,model1:e[0],model2:e[1],model3:e[2]}}function uI(t){let e=t.filter((i,a)=>t.indexOf(i)===a),n=e.length>0?e:["claude"],[r,s=r,o=r]=n;return{provider1:th(r),provider2:th(s),provider3:th(o)}}function ea(t){try{return Qj(t)&&Zj(t).length>0}catch{return!1}}function fI(){let t=eW(),e=process.env.KIMI_CODE_HOME??so(t,".kimi-code"),n=[];return ea(so(t,".claude","projects"))&&n.push("claude"),(ea(so(t,".codex","sessions"))||ea(so(t,".code","sessions")))&&n.push("codex"),ea(so(t,".gemini","antigravity-cli","conversations"))&&n.push("agy"),ea(so(e,"sessions"))&&n.push("kimi"),n}function Vc(t){return eh(t)}function ta(t){let e=(n,r)=>[`[${n}]`,`provider = ${Vc(r.provider)}`,`model1 = ${Vc(r.model1)}`,`model2 = ${Vc(r.model2)}`,`model3 = ${Vc(r.model3)}`].join(`
1868
+ __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 eh(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 aI(t,e,n=[]){if(n.length===2&&Qi.includes(n[0])&&Zi.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=>aI(t[o],e[o],[...n,o]))}function lI(t,e){try{let n=Fn(t),r=[];for(let u of Qi)for(let f of Zi){let m=n.config[u.toLowerCase()][f],p=e[u.toLowerCase()][f];m!==p&&r.push({section:u,key:f,oldValue:m,newValue:p,line:1})}if(!r.length)return{ok:!0,text:t,changes:r};let s=new Map,o=Kj(t),i=0,a=[];for(;i<o.length;){if(o[i].kind==="newline"){i++;continue}let u=i;if(o[i].text==="["){for(;i<o.length&&o[i].kind!=="newline";)i++;a=zj(t.slice(o[u].start,o[i-1].end));continue}for(;i<o.length&&o[i].text!=="=";)i++;if(i===o.length)throw new Error("cannot locate assignment");let f=Yj(t.slice(o[u].start,o[i-1].end));i++;let m=i,p=0;for(;i<o.length;){let _=o[i];if(_.kind==="newline"&&p===0)break;_.kind==="symbol"&&((_.text==="["||_.text==="{")&&p++,(_.text==="]"||_.text==="}")&&p--),i++}if(a.length===1&&f.length===1&&i-m===1){let _=o[m];_.kind==="string"&&!_.multiline&&s.set(a[0]+"."+f[0],_)}}let l=r.map(u=>{let f=s.get(u.section+"."+u.key);if(!f)throw new Error("cannot edit "+u.section+"."+u.key+" in place (multiline, dotted or inline managed layout); edit by hand");return u.line=t.slice(0,f.start).split(/\r\n|\r|\n/).length,{start:f.start,end:f.end,text:eh(u.newValue)}}).sort((u,f)=>f.start-u.start),c=t;for(let u of l)c=c.slice(0,u.start)+u.text+c.slice(u.end);let d=Fn(c);for(let u of Qi)for(let f of Zi)if(d.config[u.toLowerCase()][f]!==e[u.toLowerCase()][f])throw new Error("managed-value verification failed");if(!aI(n.document,d.document))throw new Error("unmanaged semantic verification failed");return{ok:!0,text:c,changes:r}}catch(n){return{ok:!1,error:n.message,line:n.line}}}var cI=L(()=>{"use strict";Zp();Gc()});import{existsSync as Qj,mkdirSync as dZ,readdirSync as Zj,writeFileSync as uZ}from"node:fs";import{homedir as eW}from"node:os";import{dirname as pZ,join as so}from"node:path";function th(t){let e=dI[t]??dI.claude;return{provider:t,model1:e[0],model2:e[1],model3:e[2]}}function uI(t){let e=t.filter((i,a)=>t.indexOf(i)===a),n=e.length>0?e:["claude"],[r,s=r,o=r]=n;return{provider1:th(r),provider2:th(s),provider3:th(o)}}function ea(t){try{return Qj(t)&&Zj(t).length>0}catch{return!1}}function fI(){let t=eW(),e=process.env.KIMI_CODE_HOME??so(t,".kimi-code"),n=[];return ea(so(t,".claude","projects"))&&n.push("claude"),(ea(so(t,".codex","sessions"))||ea(so(t,".code","sessions")))&&n.push("codex"),ea(so(t,".gemini","antigravity-cli","conversations"))&&n.push("agy"),ea(so(e,"sessions"))&&n.push("kimi"),n}function Vc(t){return eh(t)}function ta(t){let e=(n,r)=>[`[${n}]`,`provider = ${Vc(r.provider)}`,`model1 = ${Vc(r.model1)}`,`model2 = ${Vc(r.model2)}`,`model3 = ${Vc(r.model3)}`].join(`
1869
1869
  `);return`# Generated by \`lmctl init\`. This is a STARTING POINT, not a fixed answer --
1870
1870
  # lmctl properties: hierarchical keys such as Provider1.provider, Provider1.model1,
1871
1871
  # and user-defined top-level Env1. edit any value below to change what \`lmctl plan\`/\`lmctl quickrun\` resolve to.
@@ -1885,7 +1885,7 @@ ${e("Provider1",t.provider1)}
1885
1885
  ${e("Provider2",t.provider2)}
1886
1886
 
1887
1887
  ${e("Provider3",t.provider3)}
1888
- `}function gr(t){try{return ns(Nt(process.env,t)).config}catch(e){if(e instanceof Et&&e.kind==="missing")return null;throw e}}function mI(t,e){return lI(t,e)}function pI(t,e,n={}){let r={...zb(e)},s=n.properties??Object.fromEntries([1,2,3].map(o=>{let i=e["provider"+o];return["Provider"+o,{Provider:i.provider,Model1:i.model1,Model2:i.model2,Model3:i.model3}]}));return Kb(t,o=>{if(o.kind==="variable")return Object.hasOwn(r,o.name)?r[o.name]:void 0;if(o.kind==="argument")return n.argv?.[o.index];let i=o.key.split(".");/^Provider[123]$/.test(i[0])&&i.length===2&&["provider","model1","model2","model3"].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 dI,rs=x(()=>{"use strict";Yb();Qb();Gc();Gc();cI();dI={claude:["claude-opus-5","claude-sonnet-5","claude-sonnet-5"],codex:["gpt-5.6-sol","gpt-5.5","gpt-6-astra"],agy:["Gemini 3.8 Flash (High)","Gemini 3.8 Flash (Medium)","Gemini 3.1 Pro (High)"],kimi:["kimi-code/k3","kimi-code/k3","kimi-code/k3"]}});var oo,Jc=x(()=>{"use strict";oo={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"}});import{homedir as tW}from"node:os";function hI(t,e){let n=new Set;return{text:t.replace(rW,(s,o)=>{let i=o.trim(),a=nW[i];return a===void 0?(n.add(i),s):a(e)}),unknownNames:[...n].sort()}}function _I(t){return{workdir:t.workdir,teamfile:t.teamfile,date:sW(t.date)}}function sW(t){return t.toISOString().slice(0,10)}var nW,rW,gI=x(()=>{"use strict";je();nW={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>oi(t.teamfile),home:()=>tW(),date:t=>t.date},rW=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var uh={};me(uh,{_setAgyModelsRunnerForTests:()=>uW,_setCatalogSnapshotForTests:()=>dW,_setCodexModelsRunnerForTests:()=>fW,_setLintOpenCodeConfigProbeForTests:()=>hW,_setLintSessiondirFsOpsForTests:()=>pW,_setTeamfileSeedForTests:()=>mW,buildRootTeamRegistrationRow:()=>RI,lintTeamfileStructured:()=>dh,registerRootTeam:()=>Kc,runLint:()=>yr,runSeed:()=>ra,seedTeamfile:()=>ao,sha256Text:()=>AI,validateMemberSpec:()=>Tt});import{createHash as oW}from"node:crypto";import{accessSync as iW,constants as yI,existsSync as aW,readFileSync as sh,realpathSync as oh,statSync as lW,writeFileSync as EI}from"node:fs";import{dirname as os,resolve as wI}from"node:path";function dW(t){na=t??void 0}function bI(t){return jb(t,na!==void 0?{snapshot:na}:{})}function II(t){return Wb(t,na!==void 0?{snapshot:na}:{})}function uW(t){lh=t??void 0}function fW(t){ch=t??void 0}function mW(t){vI=t??(async e=>{let{seed:n}=await Promise.resolve().then(()=>(Dn(),Sp)),r=await n(e);return r.success?{sessionId:r.sessionId,warnings:r.warnings,usage:cn(r)}:{error:r.error??"provider seed failed",errorCode:r.errorCode,usage:cn(r),sessionId:r.sessionId}})}function pW(t){ss=t===null?ih:{...ih,...t}}function hW(t){SI=t??vi}async function _W(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 SI({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 gW(t,e){let n=os(e),r=new Set,s=[];for(let o of t){if(o.teamfile!==void 0)continue;let i=o.sessiondir??n,a=wI(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(ss.existsSync(t)){if(!ss.statSync(t).isDirectory())return"ENOTDIR";ss.accessSync(t,yI.W_OK);return}let e=TW(t);if(e===void 0)return;if(!ss.statSync(e).isDirectory())return"ENOTDIR";ss.accessSync(e,yI.W_OK);return}catch(e){return wW(e)??"permission check failed"}}function EW(t){let e=wI(t);try{return oh(e)}catch{return e}}function TW(t){let e=t;for(;;){try{if(ss.existsSync(e))return e}catch{return}let n=os(e);if(n===e)return;e=n}}function wW(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 kI(t,e){let n;try{n=await j(e,l=>ke(t,l))}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let r;try{r=Se(n)}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let s=ii(r,os(n));e.stderr.write(`notice: checking teamfile and models ...
1888
+ `}function gr(t){try{return ns(Nt(process.env,t)).config}catch(e){if(e instanceof Et&&e.kind==="missing")return null;throw e}}function mI(t,e){return lI(t,e)}function pI(t,e,n={}){let r={...zb(e)},s=n.properties??Object.fromEntries([1,2,3].map(o=>{let i=e["provider"+o];return["Provider"+o,{Provider:i.provider,Model1:i.model1,Model2:i.model2,Model3:i.model3}]}));return Kb(t,o=>{if(o.kind==="variable")return Object.hasOwn(r,o.name)?r[o.name]:void 0;if(o.kind==="argument")return n.argv?.[o.index];let i=o.key.split(".");/^Provider[123]$/.test(i[0])&&i.length===2&&["provider","model1","model2","model3"].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 dI,rs=L(()=>{"use strict";Yb();Qb();Gc();Gc();cI();dI={claude:["claude-opus-5","claude-sonnet-5","claude-sonnet-5"],codex:["gpt-5.6-sol","gpt-5.5","gpt-6-astra"],agy:["Gemini 3.8 Flash (High)","Gemini 3.8 Flash (Medium)","Gemini 3.1 Pro (High)"],kimi:["kimi-code/k3","kimi-code/k3","kimi-code/k3"]}});var oo,Jc=L(()=>{"use strict";oo={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"}});import{homedir as tW}from"node:os";function hI(t,e){let n=new Set;return{text:t.replace(rW,(s,o)=>{let i=o.trim(),a=nW[i];return a===void 0?(n.add(i),s):a(e)}),unknownNames:[...n].sort()}}function _I(t){return{workdir:t.workdir,teamfile:t.teamfile,date:sW(t.date)}}function sW(t){return t.toISOString().slice(0,10)}var nW,rW,gI=L(()=>{"use strict";je();nW={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>oi(t.teamfile),home:()=>tW(),date:t=>t.date},rW=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var uh={};me(uh,{_setAgyModelsRunnerForTests:()=>uW,_setCatalogSnapshotForTests:()=>dW,_setCodexModelsRunnerForTests:()=>fW,_setLintOpenCodeConfigProbeForTests:()=>hW,_setLintSessiondirFsOpsForTests:()=>pW,_setTeamfileSeedForTests:()=>mW,buildRootTeamRegistrationRow:()=>RI,lintTeamfileStructured:()=>dh,registerRootTeam:()=>Kc,runLint:()=>yr,runSeed:()=>ra,seedTeamfile:()=>ao,sha256Text:()=>AI,validateMemberSpec:()=>Tt});import{createHash as oW}from"node:crypto";import{accessSync as iW,constants as yI,existsSync as aW,readFileSync as sh,realpathSync as oh,statSync as lW,writeFileSync as EI}from"node:fs";import{dirname as os,resolve as wI}from"node:path";function dW(t){na=t??void 0}function bI(t){return jb(t,na!==void 0?{snapshot:na}:{})}function II(t){return Wb(t,na!==void 0?{snapshot:na}:{})}function uW(t){lh=t??void 0}function fW(t){ch=t??void 0}function mW(t){vI=t??(async e=>{let{seed:n}=await Promise.resolve().then(()=>(Dn(),Sp)),r=await n(e);return r.success?{sessionId:r.sessionId,warnings:r.warnings,usage:cn(r)}:{error:r.error??"provider seed failed",errorCode:r.errorCode,usage:cn(r),sessionId:r.sessionId}})}function pW(t){ss=t===null?ih:{...ih,...t}}function hW(t){SI=t??vi}async function _W(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 SI({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 gW(t,e){let n=os(e),r=new Set,s=[];for(let o of t){if(o.teamfile!==void 0)continue;let i=o.sessiondir??n,a=wI(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(ss.existsSync(t)){if(!ss.statSync(t).isDirectory())return"ENOTDIR";ss.accessSync(t,yI.W_OK);return}let e=TW(t);if(e===void 0)return;if(!ss.statSync(e).isDirectory())return"ENOTDIR";ss.accessSync(e,yI.W_OK);return}catch(e){return wW(e)??"permission check failed"}}function EW(t){let e=wI(t);try{return oh(e)}catch{return e}}function TW(t){let e=t;for(;;){try{if(ss.existsSync(e))return e}catch{return}let n=os(e);if(n===e)return;e=n}}function wW(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 kI(t,e){let n;try{n=await j(e,l=>ke(t,l))}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let r;try{r=Se(n)}catch(l){return{ok:!1,message:`${t}: ${l instanceof Error?l.message:String(l)}`}}let s=ii(r,os(n));e.stderr.write(`notice: checking teamfile and models ...
1889
1889
  `);let o=Wp(r.members,{agyModelsRunner:lh,codexModelsRunner:ch});o.push(...await bI(r.members)),s.push(...await II(r.members));let i=sh(n,"utf8"),a=hI(i,_I({workdir:os(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(...Yf(r.members,os(n))),o.push(...gW(r.members,n)),o.push(...await _W(r.members,os(n),e.env));for(let l of s)e.stderr.write(`error: ${l.field}: ${l.message}
1890
1890
  `);for(let l of r.members)ah([l],e),l.session!==void 0&&l.session.length<io&&o.push(`${l.alias}: sessionid is shorter than ${io} chars; run lmctl seed to refresh it`);return{ok:!0,result:{config:r,absTeamfile:n,errors:s,warnings:o}}}async function yr(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(cW),0;let n=le(t,[],[]);if(n.error!==void 0)return e.stderr.write(`error: ${n.error}
1891
1891
  `),2;if(n.positionals.length!==1)return e.stderr.write(`usage: lmctl lint <teamfile.lmctl>
@@ -1904,17 +1904,17 @@ ${e("Provider3",t.provider3)}
1904
1904
  `);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 dn(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<io);for(let y of _)if(!si(y.provider))return e.stderr.write(`error: ${y.alias}: invalid provider "${y.provider}"
1905
1905
  `),1;for(let y of i.members){if(n.signal?.aborted)return dn(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>=io){e.stderr.write(`warning: ${y.alias}: existing sessionid preserved; skipping
1906
1906
  `);continue}let T=y.sessiondir??o;e.stderr.write(`${y.alias}: launching ${y.provider} seed session; this can take several seconds
1907
- `);let w=zo(e,L=>`${y.alias}: still launching (${L}s elapsed)
1908
- `),v=m?l.map((L,O)=>O===d.get(y.alias.toLowerCase())?L.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,""):L).join(`
1907
+ `);let w=zo(e,x=>`${y.alias}: still launching (${x}s elapsed)
1908
+ `),v=m?l.map((x,O)=>O===d.get(y.alias.toLowerCase())?x.replace(/\s+sessionid=(?:"[^"]*"|\S+)/g,""):x).join(`
1909
1909
  `):l.join(`
1910
- `),b=IW(y.alias,n,r,v),k;try{k=OT(r,y.alias)}catch(L){return w.stop(),dn(e,L instanceof Error?L.message:String(L))}try{let L,O;try{L=await vI({env:e.env,signal:n.signal,onDispatch:()=>{O??=Wc(e,{provider:y.provider,cwd:T,modelRequested:y.model??null,sessionId:""},"operator",{teamfile:r,alias:y.alias})},provider:y.provider,cwd:T,...y.model!==void 0?{model:y.model}:{},...y.effort!==void 0?{effort:y.effort}:{},...b!==void 0?{prompt:b}:{}}),await O?.finish({status:n.signal?.aborted?"cancelled":L.error!==void 0||!L.sessionId||L.sessionId.length<io?bs(L.error??"",L.errorCode==="ABORT_ERR"):"ok",sessionId:L.sessionId,usage:cn(L)})}catch(I){throw await O?.finish(Bc(I,{aborted:n.signal?.aborted||I?.code==="ABORT_ERR"})),I}finally{w.stop()}if(n.signal?.aborted)return dn(e,"Seed cancelled during dispatch.");for(let I of L.warnings??[])e.stderr.write(`warning: ${y.alias}: ${I}
1911
- `);if(L.error!==void 0||L.sessionId===void 0||L.sessionId.length<io){let I=`provider did not report a sessionid; no new session was found for ${T} (possible provider workspace/cwd mismatch)`;return e.stderr.write(`error: ${y.alias}: seed failed${L.error!==void 0?`: ${L.error}`:`; ${I}`}
1910
+ `),b=IW(y.alias,n,r,v),k;try{k=OT(r,y.alias)}catch(x){return w.stop(),dn(e,x instanceof Error?x.message:String(x))}try{let x,O;try{x=await vI({env:e.env,signal:n.signal,onDispatch:()=>{O??=Wc(e,{provider:y.provider,cwd:T,modelRequested:y.model??null,sessionId:""},"operator",{teamfile:r,alias:y.alias})},provider:y.provider,cwd:T,...y.model!==void 0?{model:y.model}:{},...y.effort!==void 0?{effort:y.effort}:{},...b!==void 0?{prompt:b}:{}}),await O?.finish({status:n.signal?.aborted?"cancelled":x.error!==void 0||!x.sessionId||x.sessionId.length<io?bs(x.error??"",x.errorCode==="ABORT_ERR"):"ok",sessionId:x.sessionId,usage:cn(x)})}catch(I){throw await O?.finish(Bc(I,{aborted:n.signal?.aborted||I?.code==="ABORT_ERR"})),I}finally{w.stop()}if(n.signal?.aborted)return dn(e,"Seed cancelled during dispatch.");for(let I of x.warnings??[])e.stderr.write(`warning: ${y.alias}: ${I}
1911
+ `);if(x.error!==void 0||x.sessionId===void 0||x.sessionId.length<io){let I=`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${x.error!==void 0?`: ${x.error}`:`; ${I}`}
1912
1912
  `),1}let C=d.get(y.alias.toLowerCase());if(C===void 0)return e.stderr.write(`error: ${y.alias}: could not find matching _MEMBER_ line to update
1913
- `),1;let S=EW(T),A=rh(l[C],"sessionid",L.sessionId);A=rh(A,"sessiondir",S);let R=y.model;if(y.model===void 0){let I;try{I=(await $e(L.sessionId,y.provider))?.model}catch{I=void 0}I!==void 0&&I.length>0&&(A=rh(A,"model",I),R=I)}if((m||n.guardFile)&&sh(r,"utf8")!==c)return dn(e,`Teamfile changed during seeding; new session ${L.sessionId} was not attached. Existing bindings preserved.`);l[C]=A,p+=1,c=l.join(`
1914
- `),EI(r,c,"utf8"),n.onSeeded?.({alias:y.alias,provider:y.provider,sessionid:L.sessionId,sessiondir:S,...R!==void 0?{model:R}:{}}),e.stdout.write(`${y.alias}: seeded ${L.sessionId} provider=${y.provider} sessiondir=${S} model=${R?JSON.stringify(R):"default (not reported)"}
1913
+ `),1;let S=EW(T),A=rh(l[C],"sessionid",x.sessionId);A=rh(A,"sessiondir",S);let R=y.model;if(y.model===void 0){let I;try{I=(await $e(x.sessionId,y.provider))?.model}catch{I=void 0}I!==void 0&&I.length>0&&(A=rh(A,"model",I),R=I)}if((m||n.guardFile)&&sh(r,"utf8")!==c)return dn(e,`Teamfile changed during seeding; new session ${x.sessionId} was not attached. Existing bindings preserved.`);l[C]=A,p+=1,c=l.join(`
1914
+ `),EI(r,c,"utf8"),n.onSeeded?.({alias:y.alias,provider:y.provider,sessionid:x.sessionId,sessiondir:S,...R!==void 0?{model:R}:{}}),e.stdout.write(`${y.alias}: seeded ${x.sessionId} provider=${y.provider} sessiondir=${S} model=${R?JSON.stringify(R):"default (not reported)"}
1915
1915
  `)}finally{k()}}let h=l.join(`
1916
- `),g=xW(h,oh(r));g!==h&&EI(r,g,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1917
- `);let E=new Date().toISOString();try{await j(e,y=>{Kc(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return dn(e,y instanceof Error?y.message:String(y))}return 0}function AI(t){return oW("sha256").update(t).digest("hex")}function RI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:AI(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function Kc(t,e){let n=El(e.rawText,e.teamfilePath);ai(t,e.teamfilePath,n);let r=RI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function kW(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=RW(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function AW(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function RW(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function rh(t,e,n){let r=`${e}=${NW(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function NW(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function xW(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1916
+ `),g=LW(h,oh(r));g!==h&&EI(r,g,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1917
+ `);let E=new Date().toISOString();try{await j(e,y=>{Kc(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return dn(e,y instanceof Error?y.message:String(y))}return 0}function AI(t){return oW("sha256").update(t).digest("hex")}function RI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:AI(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function Kc(t,e){let n=El(e.rawText,e.teamfilePath);ai(t,e.teamfilePath,n);let r=RI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function kW(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=RW(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function AW(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function RW(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function rh(t,e,n){let r=`${e}=${NW(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function NW(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function LW(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1918
1918
  `),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}
1919
1919
  ${o}`:`${n}
1920
1920
  `:t.length>0?`${n}
@@ -1922,7 +1922,7 @@ ${t}`:`${n}
1922
1922
  `}function Tt(t){if(!AW(t.alias))return`invalid alias "${t.alias}"`;if(!si(t.provider))return`invalid provider "${t.provider}"`}function dn(t,e){return t.stderr.write(`error: ${e}
1923
1923
  `),1}function TI(t,e,n){return t.stderr.write(`error: ${e}
1924
1924
  ${n}`),2}function ah(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_
1925
- `)}var io,cW,nh,ih,vI,ss,SI,lh,ch,na,vW,SW,un=x(()=>{"use strict";Ho();Xp();je();Vi();zf();am();_l();ln();ce();Qt();gI();bl();mf();Be();io=5,cW=`usage: lmctl lint <teamfile.lmctl>
1925
+ `)}var io,cW,nh,ih,vI,ss,SI,lh,ch,na,vW,SW,un=L(()=>{"use strict";Ho();Xp();je();Vi();zf();am();_l();ln();ce();Qt();gI();bl();mf();Be();io=5,cW=`usage: lmctl lint <teamfile.lmctl>
1926
1926
 
1927
1927
  Validate an lmctl teamfile and warn about stale or placeholder session ids.
1928
1928
  For opencode members with model=, lint also asks the local ACP provider to
@@ -1982,7 +1982,7 @@ possibly work, seed reports it as an error and seeds nothing.
1982
1982
  and save it to <file> (lmctl.com curates these, not lmctl itself).
1983
1983
  Refuses to overwrite an existing <file> unless --force is given.
1984
1984
  --script <name> With --save-script, fetch commands/<name>.lms instead of the default
1985
- `,ih={existsSync:aW,statSync:lW,accessSync:iW},vI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Dn(),Sp)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:cn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:cn(n),sessionId:n.sessionId}},ss=ih,SI=vi;vW=/^\[([^\]]+)\]\s+(.*)$/s,SW=/^([^:\s][^:]*):\s+(.*)$/s});function xI(t){return mh[t.trim().toLowerCase()]}function LI(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=Tt({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 NI(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function LW(t){return[`_MEMBER_ provider=${t.provider} alias=${NI(t.alias)}`,...t.model!==void 0?[`model=${NI(t.model)}`]:[]].join(" ")}function Er(t){let{teamName:e,members:n}=t,r=n.map(LW).join(`
1985
+ `,ih={existsSync:aW,statSync:lW,accessSync:iW},vI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Dn(),Sp)),n=await e(t);return n.success?{sessionId:n.sessionId,warnings:n.warnings,usage:cn(n)}:{error:n.error??"provider seed failed",errorCode:n.errorCode,usage:cn(n),sessionId:n.sessionId}},ss=ih,SI=vi;vW=/^\[([^\]]+)\]\s+(.*)$/s,SW=/^([^:\s][^:]*):\s+(.*)$/s});function LI(t){return mh[t.trim().toLowerCase()]}function xI(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=Tt({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 NI(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function xW(t){return[`_MEMBER_ provider=${t.provider} alias=${NI(t.alias)}`,...t.model!==void 0?[`model=${NI(t.model)}`]:[]].join(" ")}function Er(t){let{teamName:e,members:n}=t,r=n.map(xW).join(`
1986
1986
  `);return`# ${e}
1987
1987
  #
1988
1988
  # This is a starting point, not a finished teamfile -- edit alias/provider/model
@@ -1994,7 +1994,7 @@ ${r}
1994
1994
  `}function OI(t){return t.split(`
1995
1995
  `).map(e=>CI.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(`
1996
1996
  `)}function fh(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function zc(t){let e=[];for(let n of t.split(`
1997
- `)){if(!CI.test(n))continue;let r=fh(n,"alias"),s=fh(n,"provider");if(r===void 0||s===void 0)continue;let o=fh(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var mh,Yc,CI,Qc=x(()=>{"use strict";un();mh={1:["Lead"],lead:["Lead"],2:["Lead","Reviewer"],"lead-reviewer":["Lead","Reviewer"],3:["Lead","Coder","Reviewer"],"lead-coder-reviewer":["Lead","Coder","Reviewer"]},Yc="1|2|3|lead|lead-reviewer|lead-coder-reviewer";CI=/^\s*_MEMBER_\s+\S/});var Eh={};me(Eh,{PROVIDER_NAMES:()=>fo,adoptSession:()=>yh,chooseMember:()=>ia,chooseTeamfile:()=>_h,completeTeamfile:()=>DI,createPromptTeam:()=>gh,field:()=>lo,prepareTeam:()=>oa,setField:()=>Tr});import{existsSync as sa,mkdirSync as ph,readFileSync as Zc,readdirSync as CW,statSync as OW,writeFileSync as hh}from"node:fs";import{basename as co,dirname as ed,extname as td,resolve as uo}from"node:path";function lo(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function Tr(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 DW(t,e){let n=gr(),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.
1997
+ `)){if(!CI.test(n))continue;let r=fh(n,"alias"),s=fh(n,"provider");if(r===void 0||s===void 0)continue;let o=fh(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var mh,Yc,CI,Qc=L(()=>{"use strict";un();mh={1:["Lead"],lead:["Lead"],2:["Lead","Reviewer"],"lead-reviewer":["Lead","Reviewer"],3:["Lead","Coder","Reviewer"],"lead-coder-reviewer":["Lead","Coder","Reviewer"]},Yc="1|2|3|lead|lead-reviewer|lead-coder-reviewer";CI=/^\s*_MEMBER_\s+\S/});var Eh={};me(Eh,{PROVIDER_NAMES:()=>fo,adoptSession:()=>yh,chooseMember:()=>ia,chooseTeamfile:()=>_h,completeTeamfile:()=>DI,createPromptTeam:()=>gh,field:()=>lo,prepareTeam:()=>oa,setField:()=>Tr});import{existsSync as sa,mkdirSync as ph,readFileSync as Zc,readdirSync as CW,statSync as OW,writeFileSync as hh}from"node:fs";import{basename as co,dirname as ed,extname as td,resolve as uo}from"node:path";function lo(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function Tr(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 DW(t,e){let n=gr(),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.
1998
1998
  `);;){let s=await t.ask("Provider: ");if(fo.includes(s))return s;e.stderr.write(`Known providers: ${fo.join(", ")}
1999
1999
  `)}}async function DI(t,e,n,r={},s){let o=sa(t),i=o?Zc(t,"utf8"):"",a=i.split(`
2000
2000
  `),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(Tr("_MEMBER_","alias",p))}let c=new Set;for(let m of l){let p=a[m],_=lo(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=Tr(p,"alias",_),!lo(p,"teamfile")){let h=lo(p,"provider");h||(h=await DW(e,n));let g=Tt({alias:_,provider:h});if(g)throw new Error(g);if(p=Tr(p,"provider",h),!lo(p,"model")&&!lo(p,"sessionid")){let E=await(r.models??no)(h).catch(()=>[]);E.length&&n.stderr.write(`Models for ${h}:
@@ -2011,7 +2011,7 @@ ${E.map(T=>` ${T}`).join(`
2011
2011
  `),i||(i=uo(r,await s.ask(`Session directory [${r}]: `)||r)),i&&(f=f.split(`
2012
2012
  `).map(m=>m.startsWith("_MEMBER_")?Tr(m,"sessiondir",i):m).join(`
2013
2013
  `)),await j(o,m=>ai(m,l,Rn(f,co(l)))),c!==void 0&&Zc(l,"utf8")!==c)throw new Error("Teamfile changed; adoption cancelled.");return ph(ed(l),{recursive:!0}),hh(l,f,c===void 0?{encoding:"utf8",flag:"wx"}:{encoding:"utf8"}),await j(o,m=>Kc(m,{teamfilePath:ke(l),name:co(l,td(l)),rawText:f,now:new Date().toISOString()})),o.stdout.write(`Registered ${l}:${d} -> ${t}
2014
- `),{file:l,alias:d}}var fo,nd=x(()=>{"use strict";Qt();je();rs();Jc();Uc();un();Qc();ce();fo=Object.keys(oo)});var vh={};me(vh,{resolvePromptInput:()=>Th,runChat:()=>wh});import{readFileSync as MW,openSync as $W}from"node:fs";import{homedir as PW}from"node:os";import{join as FW}from"node:path";import{spawn as UW}from"node:child_process";function WW(t){let[e,n]=t;if(!e)return t;if(!Nn(e)){let r=e.indexOf(":");if(r>0&&li(e.slice(0,r))&&Ne(e.slice(r+1)))return[`${e.slice(r+1)}:${e.slice(0,r)}`,...t.slice(1)]}return li(e)&&n&&Ne(n)?[n,e,...t.slice(2)]:t}function BW(t){return FW(PW(),".lmctl",`daemonize-${t}.log`)}function HW(t){let e=process.stdout.isTTY===!0,n=process.stderr.isTTY===!0;if(!e&&!n)return{stdio:["ignore","inherit","inherit"],logPath:null};let r=BW(t),s=$W(r,"a");return{stdio:["ignore",e?s:"inherit",n?s:"inherit"],logPath:r}}function XW(t,e){let{stdio:n,logPath:r}=HW(process.pid),s=UW(process.argv[0],[process.argv[1],"chat",...t],{detached:!0,stdio:n,env:{...process.env,[rd]:"1"}});return s.on("error",o=>{e.stderr.write(`error: --daemonize failed to spawn the detached child: ${o.message}
2014
+ `),{file:l,alias:d}}var fo,nd=L(()=>{"use strict";Qt();je();rs();Jc();Uc();un();Qc();ce();fo=Object.keys(oo)});var vh={};me(vh,{resolvePromptInput:()=>Th,runChat:()=>wh});import{readFileSync as MW,openSync as $W}from"node:fs";import{homedir as PW}from"node:os";import{join as FW}from"node:path";import{spawn as UW}from"node:child_process";function WW(t){let[e,n]=t;if(!e)return t;if(!Nn(e)){let r=e.indexOf(":");if(r>0&&li(e.slice(0,r))&&Ne(e.slice(r+1)))return[`${e.slice(r+1)}:${e.slice(0,r)}`,...t.slice(1)]}return li(e)&&n&&Ne(n)?[n,e,...t.slice(2)]:t}function BW(t){return FW(PW(),".lmctl",`daemonize-${t}.log`)}function HW(t){let e=process.stdout.isTTY===!0,n=process.stderr.isTTY===!0;if(!e&&!n)return{stdio:["ignore","inherit","inherit"],logPath:null};let r=BW(t),s=$W(r,"a");return{stdio:["ignore",e?s:"inherit",n?s:"inherit"],logPath:r}}function XW(t,e){let{stdio:n,logPath:r}=HW(process.pid),s=UW(process.argv[0],[process.argv[1],"chat",...t],{detached:!0,stdio:n,env:{...process.env,[rd]:"1"}});return s.on("error",o=>{e.stderr.write(`error: --daemonize failed to spawn the detached child: ${o.message}
2015
2015
  `)}),s.unref(),e.stdout.write(`${JSON.stringify({status:"detached",pid:s.pid??null,logPath:r})}
2016
2016
  `),0}async function wh(t,e={stdout:process.stdout,stderr:process.stderr}){t.includes("--json")&&(e=ol(e));let n=e.env??process.env;if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(`${MI}
2017
2017
  `),0;if(t.includes("--daemonize")&&n[rd]!=="1")return XW(t.filter(i=>i!=="--daemonize"),e);n[rd]==="1"&&(il(e),delete process.env[rd]);let r=qW(t);if(typeof r=="string")return e.stderr.write(`error: ${r}
@@ -2023,7 +2023,7 @@ ${MI}
2023
2023
  `),2;r.prompt=i}let o=Zt(jW,{target:r.target,alias:r.alias,flags:{}});if(o.mode==="error")return e.stderr.write(`error: ${o.message}
2024
2024
  `),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)
2025
2025
  `),2;e.stderr.write(`${o.alias}: turn running; this can take minutes
2026
- `);let i=nT(e,{teamfile:o.teamfile,alias:o.alias}),a;try{a=await Lc({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:l=>{i.poke(l),!(r.json===!0&&l.kind==="delta")&&JW(e,l,r.verbose===!0)},...r.json===!0?{onAccepted:l=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:l})}
2026
+ `);let i=nT(e,{teamfile:o.teamfile,alias:o.alias}),a;try{a=await xc({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:l=>{i.poke(l),!(r.json===!0&&l.kind==="delta")&&JW(e,l,r.verbose===!0)},...r.json===!0?{onAccepted:l=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:l})}
2027
2027
  `)}}:{}})}finally{i.stop()}return r.json===!0?a.status==="busy"?(e.stdout.write(`${JSON.stringify({status:"busy",message:a.message,teamChatLogId:a.teamChatLogId})}
2028
2028
  `),1):a.status==="error"?(e.stdout.write(`${JSON.stringify({status:"error",errorKind:a.errorKind,message:a.message,teamChatLogId:a.teamChatLogId,...a.messageId===null?{}:{message_id:a.messageId}})}
2029
2029
  `),1):(e.stdout.write(`${JSON.stringify({status:a.status,replyText:a.replyText,teamChatLogId:a.teamChatLogId,...a.messageId===null?{}:{message_id:a.messageId},turn_finished:!0,note:$I(o.alias)})}
@@ -2039,7 +2039,7 @@ ${MI}
2039
2039
  `),a.status==="stalled"?1:0)}return 2}function $I(t){return`${t}'s turn has finished and exited; resubmit \`lmctl prompt\` to continue (no persistent session is left running)`}function qW(t){let e=[],n="yolo",r,s,o,i,a,l=!1,c=!1;for(let p=0;p<t.length;p+=1){let _=t[p];if(_==="--permission-mode"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --permission-mode";if(h!=="plan"&&h!=="yolo")return`--permission-mode must be one of plan|yolo (got "${h}")`;n=h;continue}if(_==="--from"||_.startsWith("--from="))return wb("prompt");if(_.startsWith("I_am="))return`unknown argument: ${_}`;if(_==="--root"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --root";r=h;continue}if(_==="--prompt-file"){let h=t[++p];if(h===void 0||h!=="-"&&h.startsWith("--"))return"missing value for --prompt-file";s=h;continue}if(_==="--provider"||_==="--model"||_==="--sessiondir"){let h=t[++p];if(h===void 0||h.startsWith("--"))return`missing value for ${_}`;_==="--provider"?o=h:_==="--model"?i=h:a=h;continue}if(_==="--force"||_.startsWith("--force="))return"unknown option --force (a dead holder auto-reclaims; for a live holder use lmctl prompt)";if(_==="--json"){l=!0;continue}if(_==="--verbose"){c=!0;continue}if(_.startsWith("--"))return`unknown flag: ${_}`;e.push(_)}if(o===void 0&&(e=WW(e)),o!==void 0){if(e.length>(s===void 0?1:0))return"--provider fresh mode cannot be combined with a teamfile or alias; provide one prompt or --prompt-file";if(i===void 0)return"--model is required with --provider"}else if(i!==void 0||a!==void 0)return"--model and --sessiondir require --provider";if(o!==void 0){let p={prompt:s===void 0?e[0]??"":"",permissionMode:n};return s!==void 0&&(p.promptFile=s),l&&(p.json=!0),c&&(p.verbose=!0),p.provider=o,p.model=i,a!==void 0&&(p.sessiondir=a),p}let d,u,f="";if(s!==void 0){if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],u=e[1];else return"--prompt-file is mutually exclusive with a positional prompt; pass one or the other";f=""}else if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],Ne(d)?u=e[1]:f=e[1];else if(e.length===3)d=e[0],u=e[1],f=e[2];else return`too many positionals (${e.length}); expected at most <teamfile> <alias> <prompt>`;let m={prompt:f,permissionMode:n};return d!==void 0&&(m.target=d),u!==void 0&&(m.alias=u),r!==void 0&&(m.rootFlag=r),s!==void 0&&(m.promptFile=s),l&&(m.json=l),c&&(m.verbose=c),o!==void 0&&(m.provider=o),i!==void 0&&(m.model=i),a!==void 0&&(m.sessiondir=a),m}async function Th(t,e,n=process.stdin){let r;try{r=t==="-"?await GW(n):MW(t,"utf8")}catch(o){let i=o instanceof Error?o.message:String(o);return{error:`--prompt-file ${t}: ${i}`}}let s=r.endsWith(`\r
2040
2040
  `)?r.slice(0,-2):r.endsWith(`
2041
2041
  `)?r.slice(0,-1):r;return s.length===0?{error:`--prompt-file ${t}: file is empty; a prompt is required`}:s}async function GW(t){let e=[];for await(let n of t)e.push(typeof n=="string"?Buffer.from(n,"utf8"):n);return Buffer.concat(e).toString("utf8")}function VW(t,e,n,r=!1){if(n.kind!=="tool_use"&&n.kind!=="tool_result"&&n.kind!=="api_retry")return;let s=n.kind==="tool_use"?`[${e}] tool_use ${n.tool??"tool"}${n.summary?`: ${n.summary}`:""}`:n.kind==="tool_result"?`[${e}] tool_result${n.status?` ${n.status}`:""}${n.summary?`: ${n.summary}`:""}`:`[${e}] api_retry${n.summary?`: ${n.summary}`:""}`;F({event:"chat_progress",alias:e,progress_kind:n.kind,line:s}),r&&t.stderr.write(`${s}
2042
- `)}function JW(t,e,n=!1){e.kind==="delta"?t.stdout.write(e.chunk):e.kind==="progress"?VW(t,e.alias,e.event,n):t.stderr.write(e.message)}var jW,MI,rd,sd=x(()=>{"use strict";Oc();Qe();je();Qe();ce();Qe();Op();ji();oe();ce();jW={name:"prompt",allowsBareTeamfile:!1,supportsRaw:!1},MI=`usage: lmctl prompt <teamfile> <alias> "<prompt>" [--json] [--verbose]
2042
+ `)}function JW(t,e,n=!1){e.kind==="delta"?t.stdout.write(e.chunk):e.kind==="progress"?VW(t,e.alias,e.event,n):t.stderr.write(e.message)}var jW,MI,rd,sd=L(()=>{"use strict";Oc();Qe();je();Qe();ce();Qe();Op();ji();oe();ce();jW={name:"prompt",allowsBareTeamfile:!1,supportsRaw:!1},MI=`usage: lmctl prompt <teamfile> <alias> "<prompt>" [--json] [--verbose]
2043
2043
  lmctl prompt <teamfile> <alias> --prompt-file <file-path> [--json] [--verbose]
2044
2044
 
2045
2045
  lmctl prompt --provider <name> --model <model> "<prompt>" [--sessiondir <dir>] [--json] [--verbose]
@@ -2050,35 +2050,35 @@ ${MI}
2050
2050
  `),1}return new Promise(o=>{let i=!e.stdin||e.stdin===process.stdin,a=e.stdout===process.stdout,l=e.stderr===process.stderr,c=KW(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)+`
2051
2051
  `)}},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+`
2052
2052
  `)})),c.once("error",g=>{e.stderr.write(`error: could not start ${s}: ${g.message}
2053
- `),u(1)}),c.once("close",(g,E)=>u(g??(E&&PI.signals[E]?128+PI.signals[E]:1)))})}var sB,oB,id=x(()=>{"use strict";sB=BI.matchesGlob,oB="lmscript-shim-protocol 2"});var qI={};me(qI,{runScript:()=>Ih});async function Ih(t,e={stdout:process.stdout,stderr:process.stderr}){if(il(e),!t.length)return D(e,XI);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await as(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2053
+ `),u(1)}),c.once("close",(g,E)=>u(g??(E&&PI.signals[E]?128+PI.signals[E]:1)))})}var sB,oB,id=L(()=>{"use strict";sB=BI.matchesGlob,oB="lmscript-shim-protocol 2"});var qI={};me(qI,{runScript:()=>Ih});async function Ih(t,e={stdout:process.stdout,stderr:process.stderr}){if(il(e),!t.length)return D(e,XI);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await as(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2054
2054
  `);a<0||(e.stdout.write(n.slice(0,a+1).startsWith("Usage: lmscript ")?"Usage: "+XI.slice(7)+`
2055
- `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return as(t,e)}var XI,kh=x(()=>{"use strict";id();ce();XI="usage: lmctl script [--check|--dry-run|--lint] [--no-preflight] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] <file>|-| -e <code> [args...]"});import{execFileSync as Ah}from"node:child_process";import{dirname as GI,resolve as aB}from"node:path";function VI(t){return(0,Rh.formatCount)(t)}async function Nh(t,e){return j(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2055
+ `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return as(t,e)}var XI,kh=L(()=>{"use strict";id();ce();XI="usage: lmctl script [--check|--dry-run|--lint] [--no-preflight] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] [--module SPEC=FILE]... <file>|-| -e <code> [args...]"});import{execFileSync as Ah}from"node:child_process";import{dirname as GI,resolve as aB}from"node:path";function VI(t){return(0,Rh.formatCount)(t)}async function Nh(t,e){return j(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2056
2056
  WHERE target_teamfile = ? AND target_alias = ? AND config_warnings IS NOT NULL
2057
- 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 aa(t,e,n,r){let s=ke(t,e);if(n.has(s))return[];n.add(s);let o=zt(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(...aa(aB(GI(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 la(t,e){try{let n=await j(t,r=>e.map(s=>{let o=Jt(r,s.teamfile,s.alias);return[po(s.teamfile,s.alias),lB(o)]}));return new Map(n)}catch{return new Map}}function po(t,e){return`${t}\0${e.toLowerCase()}`}function lB(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}:ad(t.reclaimable===void 0?null:{source:t.reclaimable.source,holderPid:t.reclaimable.holder_pid,holderHost:t.reclaimable.holder_host,reason:t.reclaimable.reason})}function ad(t=null){return{state:"idle",reason:null,inFlight:null,terminalLock:null,terminalInvocation:null,reclaimable:t}}function ld(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 xh(t){return t.resets_at!==null?t.resets_at:t.timezone!==null?`${t.reset_time} (${t.timezone})`:t.reset_time}function xt(t){return t==null?"unknown":(0,Rh.formatCount)(t)}function JI(t){return t==="n/a"?t:xt(t)}function KI(t,e,n=String){return t!==void 0?n(t):e?"n/a":"unknown"}function Lh(t){let e=GI(t),n;try{Ah("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=Ah("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:cB(e)}}function cB(t){let e;try{e=Ah("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 Ch(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 Oh(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 Rh,Dh=x(()=>{"use strict";Rh=Ct(kt(),1);Pt();ce();Qt()});async function YI(t,e){return j(e,n=>{let r=[];for(let s of n.listRootTeams())try{for(let o of Se(s.teamfile_path).members)!o.teamfile&&o.session===t&&r.push({file:s.teamfile_path,member:o})}catch{}return r})}async function cd(t,e){let n=await $e(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 Mh(t,e,n){let r=await j(e,i=>aa(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 la(e,s);return Promise.all(s.map(async i=>{let a=i.sessionid?await cd(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(po(i.teamfile,i.alias))?.state??"unknown":"not seeded"}}))}function dd(t,e){let n=t.map(r=>[r.alias??"-",r.provider,r.model??"n/a",r.running,r.ageMs===null?"n/a":(0,wr.formatDuration)(r.ageMs),r.context===null?"n/a":(0,wr.formatCount)(r.context),r.sessionid??"-"].map(wr.escapeCell));e.stdout.write(`${(0,wr.formatTable)(n,{headers:["ALIAS","PROVIDER","MODEL","RUNNING","AGE","CONTEXT","SESSION"],margin:2})}
2057
+ 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 aa(t,e,n,r){let s=ke(t,e);if(n.has(s))return[];n.add(s);let o=zt(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(...aa(aB(GI(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 la(t,e){try{let n=await j(t,r=>e.map(s=>{let o=Jt(r,s.teamfile,s.alias);return[po(s.teamfile,s.alias),lB(o)]}));return new Map(n)}catch{return new Map}}function po(t,e){return`${t}\0${e.toLowerCase()}`}function lB(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}:ad(t.reclaimable===void 0?null:{source:t.reclaimable.source,holderPid:t.reclaimable.holder_pid,holderHost:t.reclaimable.holder_host,reason:t.reclaimable.reason})}function ad(t=null){return{state:"idle",reason:null,inFlight:null,terminalLock:null,terminalInvocation:null,reclaimable:t}}function ld(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 Lh(t){return t.resets_at!==null?t.resets_at:t.timezone!==null?`${t.reset_time} (${t.timezone})`:t.reset_time}function Lt(t){return t==null?"unknown":(0,Rh.formatCount)(t)}function JI(t){return t==="n/a"?t:Lt(t)}function KI(t,e,n=String){return t!==void 0?n(t):e?"n/a":"unknown"}function xh(t){let e=GI(t),n;try{Ah("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=Ah("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:cB(e)}}function cB(t){let e;try{e=Ah("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 Ch(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 Oh(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 Rh,Dh=L(()=>{"use strict";Rh=Ct(kt(),1);Pt();ce();Qt()});async function YI(t,e){return j(e,n=>{let r=[];for(let s of n.listRootTeams())try{for(let o of Se(s.teamfile_path).members)!o.teamfile&&o.session===t&&r.push({file:s.teamfile_path,member:o})}catch{}return r})}async function cd(t,e){let n=await $e(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 Mh(t,e,n){let r=await j(e,i=>aa(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 la(e,s);return Promise.all(s.map(async i=>{let a=i.sessionid?await cd(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(po(i.teamfile,i.alias))?.state??"unknown":"not seeded"}}))}function dd(t,e){let n=t.map(r=>[r.alias??"-",r.provider,r.model??"n/a",r.running,r.ageMs===null?"n/a":(0,wr.formatDuration)(r.ageMs),r.context===null?"n/a":(0,wr.formatCount)(r.context),r.sessionid??"-"].map(wr.escapeCell));e.stdout.write(`${(0,wr.formatTable)(n,{headers:["ALIAS","PROVIDER","MODEL","RUNNING","AGE","CONTEXT","SESSION"],margin:2})}
2058
2058
  `),e.stdout.write(`Context is the last completed turn; unavailable values are n/a.
2059
- `)}function zI(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function QI(t,e,n,r){return j(r,async s=>{if(Jt(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=Zn(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=Se(t).members.find(a=>a.alias.toLowerCase()===e.toLowerCase());if(!i||i.session!==n)throw new Error("Session binding changed; refresh cancelled.");if((await cd(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await ao(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var wr,ZI=x(()=>{"use strict";je();ln();Dh();ce();wr=Ct(kt(),1);Pt();un()});var $h={};me($h,{runInferred:()=>_B,runInferredBatch:()=>sk,sendInferredPrompt:()=>ho});import{existsSync as nk,mkdtempSync as dB,readFileSync as uB,rmSync as fB,writeFileSync as mB}from"node:fs";import{tmpdir as pB}from"node:os";import{resolve as ud,join as ek}from"node:path";async function ho(t,e,n,r={}){let s=dB(ek(pB(),"lmctl-intent-prompt-")),o=ek(s,"prompt.txt");try{return mB(o,`${e}\r
2059
+ `)}function zI(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function QI(t,e,n,r){return j(r,async s=>{if(Jt(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=Zn(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=Se(t).members.find(a=>a.alias.toLowerCase()===e.toLowerCase());if(!i||i.session!==n)throw new Error("Session binding changed; refresh cancelled.");if((await cd(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await ao(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var wr,ZI=L(()=>{"use strict";je();ln();Dh();ce();wr=Ct(kt(),1);Pt();un()});var $h={};me($h,{runInferred:()=>_B,runInferredBatch:()=>sk,sendInferredPrompt:()=>ho});import{existsSync as nk,mkdtempSync as dB,readFileSync as uB,rmSync as fB,writeFileSync as mB}from"node:fs";import{tmpdir as pB}from"node:os";import{resolve as ud,join as ek}from"node:path";async function ho(t,e,n,r={}){let s=dB(ek(pB(),"lmctl-intent-prompt-")),o=ek(s,"prompt.txt");try{return mB(o,`${e}\r
2060
2060
  `,{encoding:"utf8",mode:384}),await(r.chat??wh)([...t,"--prompt-file",o],n)}finally{fB(s,{recursive:!0,force:!0})}}async function tk(t,e,n,r,s){let o=await(s.rows??Mh)(t,r,e);dd(o,r);for(let i of o)if(!(!i.file||!i.alias||!i.sessionid||!zI(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.
2061
2061
  `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??QI)(i.file,i.alias,i.sessionid,r);if(a)return a;dd(await(s.rows??Mh)(t,r,e),r)}return 0}async function rk(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 hB(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=Mc(a,fo),c=[];if(l.length){let p=await n.choose("Provider:",l);if(i<0&&e===void 0&&o===void 0)return(s.model??Fc)([],r,{selections:[{provider:p}]});let _=await(s.models??no)(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=Mc(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($n.map(async h=>({provider:h,names:await(s.models??no)(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})=>Mc(t,g).map(E=>({provider:h,model:E})))),!c.length)return null}if(o!==void 0){let p=await rk(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??Fc)([],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 gh(u.provider,u.model,r.cwd??process.cwd(),n),m=await oa(f.file,n,r,s,f.alias);return m||ho([f.file,f.alias],e,r,s)}async function sk(t,e,n,r={}){let s=new Mn(n,r.ask);try{let o=ud(n.cwd??process.cwd(),t);if(!nk(o))throw new Error(`Batch file not found: ${o}`);if(!uB(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]?ud(n.cwd??process.cwd(),e[0]):await _h(s,n.cwd??process.cwd()),a=await oa(i,s,n,r,e[1]);if(a)return a;let l=await ia(i,e[1],s);return(r.batch??Fh)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2062
2062
  `),2}finally{s.close()}}async function _B(t,e,n={}){let r=new Mn(e,n.ask);try{let s=Cb(t);if(!s)return null;if(s.kind==="script")return await Ih([ud(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),sk(s.file,s.rest,e,n);if(s.kind==="models")return await hB(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await rk(s.pendingPrompt,r);if(d===null)return 0;s.prompt=d}if(s.kind==="team"){let d=ud(e.cwd??process.cwd(),s.file),u=s.alias;if(nk(d)&&(u!==void 0||s.prompt!==void 0)){let m=Se(d);if(!m.parseErrors.length&&m.members.length){u=await ia(d,u,r);let p=m.members.find(_=>_.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await ho([d,u],s.prompt,e,n)}}let f=await oa(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await ia(d,u,r):void 0,s.prompt!==void 0?await ho([d,u],s.prompt,e,n):await tk(d,u,r,e,n))}let o=await(n.registrations??YI)(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 ho([u.file,u.member.alias],s.prompt,e,n):await tk(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??_r)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",fo),l=await(n.summary??cd)(a,s.id);dd([l],e);let c=await yh(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 ho([c.file,c.alias],s.prompt,e,n)}return 0}catch(s){return e.stderr.write(`error: ${s instanceof Error?s.message:String(s)}
2063
- `),2}finally{r.close()}}var Ph=x(()=>{"use strict";je();Oc();Ob();Uc();sd();kh();Uh();ln();nd();ZI()});var ak={};me(ak,{runBatch:()=>Fh});import{readFileSync as gB}from"node:fs";async function Fh(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(ok),0;let n=le(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(()=>(Ph(),$h));return E(n.positionals[0],[],e)}if(n.positionals.length!==3)return D(e,ok.trimEnd());let[r,s,o]=n.positionals,i=n.flags["--legacy"]===!0,a=n.flags["--single"]===!0,l,c;try{let E=gB(o,"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2064
- `);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=We(r,s,e.dal)}catch(E){return D(e,`batch: ${E instanceof Error?E.message:String(E)}`)}let d=!i&&l.length>1&&await TB(c),u={...e.env??process.env},f=await wB(e,{member:c,batchfile:o,promptCount:l.length,parentInvocationId:xs(u.LMCTL_INVOCATION_ID)}),m={status:"error",error:"batch exited without a terminal outcome"},p=E=>{m=E},_=E=>{f!==null&&(SB(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 ${Wr()}: starting ${l.length} prompt${l.length===1?"":"s"} -> ${c.alias} (teamfile=${r} input=${o})
2063
+ `),2}finally{r.close()}}var Ph=L(()=>{"use strict";je();Oc();Ob();Uc();sd();kh();Uh();ln();nd();ZI()});var ak={};me(ak,{runBatch:()=>Fh});import{readFileSync as gB}from"node:fs";async function Fh(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(ok),0;let n=le(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(()=>(Ph(),$h));return E(n.positionals[0],[],e)}if(n.positionals.length!==3)return D(e,ok.trimEnd());let[r,s,o]=n.positionals,i=n.flags["--legacy"]===!0,a=n.flags["--single"]===!0,l,c;try{let E=gB(o,"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2064
+ `);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=We(r,s,e.dal)}catch(E){return D(e,`batch: ${E instanceof Error?E.message:String(E)}`)}let d=!i&&l.length>1&&await TB(c),u={...e.env??process.env},f=await wB(e,{member:c,batchfile:o,promptCount:l.length,parentInvocationId:Ls(u.LMCTL_INVOCATION_ID)}),m={status:"error",error:"batch exited without a terminal outcome"},p=E=>{m=E},_=E=>{f!==null&&(SB(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 ${Wr()}: starting ${l.length} prompt${l.length===1?"":"s"} -> ${c.alias} (teamfile=${r} input=${o})
2065
2065
  `);try{return d?await yB(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 vB(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(`
2066
2066
  batch ${Wr()}: prompt ${o+1}/${r.length} -> ${n.alias}
2067
2067
  ${i}${i.endsWith(`
2068
2068
  `)?"":`
2069
2069
  `}
2070
2070
  `);let a=zo(t,l=>`batch ${Wr()}: prompt ${o+1}/${r.length} still running (${l}s elapsed)
2071
- `);try{let l=await Lc({teamfile:n.teamfile,alias:n.alias,prompt:i,expectedSession:{provider:n.provider,sessionid:n.sessionid},permissionMode:"yolo",env:{...s},messageType:"batch",...e.heldLease!==void 0?{heldLease:e.heldLease}:{},...e.bundleSession!==void 0?{bundleSession:e.bundleSession}:{},io:t,onEvent:c=>{if(c.kind==="warning")a.poke(),t.stderr.write(c.message);else if(c.kind==="progress"&&c.event.kind!=="text"){let d=c.event,u=d.summary?.trim();if(!u&&!d.tool)return;a.poke(),t.stderr.write(`[${n.alias}] ${d.kind}${d.tool?` ${d.tool}`:""}${u?`: ${u}`:""}
2071
+ `);try{let l=await xc({teamfile:n.teamfile,alias:n.alias,prompt:i,expectedSession:{provider:n.provider,sessionid:n.sessionid},permissionMode:"yolo",env:{...s},messageType:"batch",...e.heldLease!==void 0?{heldLease:e.heldLease}:{},...e.bundleSession!==void 0?{bundleSession:e.bundleSession}:{},io:t,onEvent:c=>{if(c.kind==="warning")a.poke(),t.stderr.write(c.message);else if(c.kind==="progress"&&c.event.kind!=="text"){let d=c.event,u=d.summary?.trim();if(!u&&!d.tool)return;a.poke(),t.stderr.write(`[${n.alias}] ${d.kind}${d.tool?` ${d.tool}`:""}${u?`: ${u}`:""}
2072
2072
  `)}}});if(a.stop(),(l.status==="ok"||l.status==="stalled"||l.status==="empty")&&l.replyText&&(t.stderr.write(`batch ${Wr()}: response ${o+1}/${r.length} <- ${n.alias}
2073
2073
  `),t.stdout.write(`${l.replyText}${l.replyText.endsWith(`
2074
2074
  `)?"":`
2075
2075
  `}
2076
2076
  `)),l.status!=="ok"){let c=l.status==="stalled"?"provider stalled":l.status==="empty"?"provider returned no content and no observed activity for this turn":l.message,d=`batch: stopped at prompt ${o+1}/${r.length} (${o} completed): ${c}; later prompts were not sent`;return e.setRootFinish({status:l.status==="busy"?"busy":"error",exit_code:1,error:d,result_summary:`${o}/${r.length} prompts completed`}),D(t,d)}}catch(l){let c=`batch: stopped at prompt ${o+1}/${r.length} (${o} completed): ${l instanceof Error?l.message:String(l)}; later prompts were not sent`;return e.setRootFinish({status:"error",exit_code:1,error:c,result_summary:`${o}/${r.length} prompts completed`}),D(t,c)}finally{a.stop()}}return t.stderr.write(`batch ${Wr()}: completed ${r.length}/${r.length} prompts
2077
2077
  `),e.setRootFinish({status:"done",exit_code:0,result_summary:`batch completed ${r.length}/${r.length} prompts`}),0}async function yB(t,e){let{member:n,prompts:r,env:s}=e,o=await j(t,f=>(kl(f,n.teamfile,n.alias),Jt(f,n.teamfile,n.alias)));if(o.busy){let f=o.reason==="in-flight"?`${n.alias} is servicing ${o.inFlight.sender_alias} (${o.inFlight.sender_teamfile}) since ${o.inFlight.started_at} \u2014 wait and retry`:o.source==="terminal-lock"?Ui(o.terminalLock):`${n.alias} is busy (interactive terminal); wait and retry`;return e.setRootFinish({status:"busy",exit_code:1,error:f,result_summary:"0 prompts completed"}),D(t,`batch: cannot start bundle: ${f}`)}let i=await j(t,f=>EB(s,f)),a=await j(t,f=>Zn(f,{receiver_teamfile:n.teamfile,receiver_alias:n.alias,sender_teamfile:i?.teamfile??n.teamfile,sender_alias:i?.alias??"operator",ttlMs:or()}));if(!a.acquired){let f=`${n.alias} is servicing ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} \u2014 wait and retry`;return e.setRootFinish({status:"busy",exit_code:1,error:f,result_summary:"0 prompts completed"}),D(t,`batch: cannot start bundle: ${f}`)}let l={row:a.lease,leaseId:a.leaseId},c=Qa(f=>j(t,m=>m.heartbeatAgentInflight(l.row,l.leaseId,f))),d,u=zo(t,f=>`batch ${Wr()}: opening provider session (${f}s elapsed)
2078
- `);try{let f={...s};try{let m=await j(t,p=>p.getRootTeam(n.teamfile)?.name??null);m!==null&&(f.LMBEE_TEAM_NAME=m)}catch{}d=await wp({provider:n.provider,sessionId:n.sessionid,cwd:n.sessiondir,env:f,...n.model!==void 0?{model:n.model}:{},...n.effort!==void 0?{effort:n.effort}:{},alias:n.alias,isLead:n.isLead,permissionMode:"yolo",holdOpen:xp(t,{teamfile:n.teamfile,alias:n.alias},f)})}catch(f){return F({event:"persistent_session_open_failed",provider:n.provider,session_id:n.sessionid,error_message:f instanceof Error?f.message:String(f)}),clearInterval(c),await ik(t,l),jh(t,{member:n,prompts:r,env:s,setRootFinish:e.setRootFinish,teamfile:e.teamfile,batchfile:e.batchfile})}finally{u.stop()}try{return await jh(t,{member:n,prompts:r,env:s,setRootFinish:e.setRootFinish,teamfile:e.teamfile,batchfile:e.batchfile,heldLease:l,bundleSession:d})}finally{await d.close(),clearInterval(c),await ik(t,l)}}async function ik(t,e){try{await j(t,n=>{n.releaseAgentInflight(e.row,e.leaseId)})}catch(n){t.stderr.write(`warning: failed to release batch bundle lease: ${n instanceof Error?n.message:String(n)}
2079
- `)}}function EB(t,e){let n=Nc(t,e);if(n.ok)return Qr(n.identity);if(n.reason==="unset")return null;throw new Error(zr("batch",t,e))}async function TB(t){let e=t.provider.trim().toLowerCase();return Rl(e,Ll(),Pi())}async function wB(t,e){try{let{member:n}=e;return await j(t,r=>r.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:n.teamfile,from_identity:`${n.teamfile}:batch`,target_teamfile:n.teamfile,target_alias:n.alias,root_teamfile:n.teamfile,cwd:n.sessiondir,command:`lmctl batch ${n.teamfile} ${n.alias} ${e.batchfile}`,holder_pid:process.pid,launch_source:"exec",parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({batchfile:e.batchfile,prompt_count:e.promptCount,provider:n.provider,sessionid:n.sessionid,...n.model!==void 0?{model:n.model}:{}})}).id)}catch(n){return t.stderr.write(`warning: failed to start batch root invocation: ${n instanceof Error?n.message:String(n)}
2078
+ `);try{let f={...s};try{let m=await j(t,p=>p.getRootTeam(n.teamfile)?.name??null);m!==null&&(f.LMBEE_TEAM_NAME=m)}catch{}d=await wp({provider:n.provider,sessionId:n.sessionid,cwd:n.sessiondir,env:f,...n.model!==void 0?{model:n.model}:{},...n.effort!==void 0?{effort:n.effort}:{},alias:n.alias,isLead:n.isLead,permissionMode:"yolo",holdOpen:Lp(t,{teamfile:n.teamfile,alias:n.alias},f)})}catch(f){return F({event:"persistent_session_open_failed",provider:n.provider,session_id:n.sessionid,error_message:f instanceof Error?f.message:String(f)}),clearInterval(c),await ik(t,l),jh(t,{member:n,prompts:r,env:s,setRootFinish:e.setRootFinish,teamfile:e.teamfile,batchfile:e.batchfile})}finally{u.stop()}try{return await jh(t,{member:n,prompts:r,env:s,setRootFinish:e.setRootFinish,teamfile:e.teamfile,batchfile:e.batchfile,heldLease:l,bundleSession:d})}finally{await d.close(),clearInterval(c),await ik(t,l)}}async function ik(t,e){try{await j(t,n=>{n.releaseAgentInflight(e.row,e.leaseId)})}catch(n){t.stderr.write(`warning: failed to release batch bundle lease: ${n instanceof Error?n.message:String(n)}
2079
+ `)}}function EB(t,e){let n=Nc(t,e);if(n.ok)return Qr(n.identity);if(n.reason==="unset")return null;throw new Error(zr("batch",t,e))}async function TB(t){let e=t.provider.trim().toLowerCase();return Rl(e,xl(),Pi())}async function wB(t,e){try{let{member:n}=e;return await j(t,r=>r.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:n.teamfile,from_identity:`${n.teamfile}:batch`,target_teamfile:n.teamfile,target_alias:n.alias,root_teamfile:n.teamfile,cwd:n.sessiondir,command:`lmctl batch ${n.teamfile} ${n.alias} ${e.batchfile}`,holder_pid:process.pid,launch_source:"exec",parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({batchfile:e.batchfile,prompt_count:e.promptCount,provider:n.provider,sessionid:n.sessionid,...n.model!==void 0?{model:n.model}:{}})}).id)}catch(n){return t.stderr.write(`warning: failed to start batch root invocation: ${n instanceof Error?n.message:String(n)}
2080
2080
  `),null}}async function vB(t,e,n){try{await j(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){t.stderr.write(`warning: failed to finish batch root invocation: ${r instanceof Error?r.message:String(r)}
2081
- `)}}function SB(t,e,n){try{if(t.dal!==void 0){t.dal.finishTrackedInvocation(e,n);return}let r=qe({path:Ge()});try{r.finishTrackedInvocation(e,n)}finally{r.close()}}catch{}}var ok,Uh=x(()=>{"use strict";oe();Op();ce();bn();Qe();Ft();Pt();Al();Il();Rc();ji();xc();Cl();Lp();Dn();ok=`usage: lmctl batch <teamfile> <alias> <batchfile> [--legacy] [--single]
2081
+ `)}}function SB(t,e,n){try{if(t.dal!==void 0){t.dal.finishTrackedInvocation(e,n);return}let r=qe({path:Ge()});try{r.finishTrackedInvocation(e,n)}finally{r.close()}}catch{}}var ok,Uh=L(()=>{"use strict";oe();Op();ce();bn();Qe();Ft();Pt();Al();Il();Rc();ji();Lc();Cl();xp();Dn();ok=`usage: lmctl batch <teamfile> <alias> <batchfile> [--legacy] [--single]
2082
2082
  lmctl batch <file.lmb> (infer or ask for teamfile and member)
2083
2083
 
2084
2084
  Send blank-line-separated paragraphs as prompts, one completed turn at a
@@ -2106,29 +2106,29 @@ lease) -- the pre-bundle behavior -- as an opt-out while bundle is new.
2106
2106
  --single sends the WHOLE file as ONE prompt: blank lines are content, not
2107
2107
  separators. A single prompt (one paragraph, or --single) never bundles and
2108
2108
  never takes a batch-level lease -- one plain turn.
2109
- `});import{mkdtempSync as bB,readFileSync as IB,rmSync as kB,writeFileSync as AB}from"node:fs";import{tmpdir as RB}from"node:os";import{spawnSync as NB}from"node:child_process";import{basename as fd,extname as Wh,join as Bh,resolve as Hh}from"node:path";import*as lk from"node:readline";function xB(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";NB(n,[e],{stdio:"inherit"})}}async function ck(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=lk.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=Hh(n,s.output),f=fd(u,Wh(u));else{let g=Hh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:Hh(n,E),T=`${fd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),v=w===""?T:w,b=Wh(v)?v:`${v}.lmctl`;u=Bh(y,b),f=fd(b,Wh(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=gr(Nt(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)"}
2109
+ `});import{mkdtempSync as bB,readFileSync as IB,rmSync as kB,writeFileSync as AB}from"node:fs";import{tmpdir as RB}from"node:os";import{spawnSync as NB}from"node:child_process";import{basename as fd,extname as Wh,join as Bh,resolve as Hh}from"node:path";import*as lk from"node:readline";function LB(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";NB(n,[e],{stdio:"inherit"})}}async function ck(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=lk.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=Hh(n,s.output),f=fd(u,Wh(u));else{let g=Hh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:Hh(n,E),T=`${fd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),v=w===""?T:w,b=Wh(v)?v:`${v}.lmctl`;u=Bh(y,b),f=fd(b,Wh(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=gr(Nt(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)"}
2110
2110
  `),e.stdout.write(`You can type another provider.
2111
- `);let y=s.provider??(E.length===1?E[0]:void 0),T=y;for(;T===void 0;){let k=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),L=k===""?y:k;if(L===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2112
- `),d(),null;continue}if(Tt({alias:"Probe",provider:L})!==void 0){e.stdout.write(`unknown provider "${L}" (known: ${Object.keys(oo).join(", ")})
2113
- `),y=void 0;continue}T=L}let w=s.pattern??"3",v;for(;v===void 0;){e.stdout.write(`Patterns: 1) Lead 2) Lead+Reviewer 3) Lead+Coder+Reviewer c) custom
2114
- `);let k=(await c(`Pattern [${w}]: `)).toLowerCase(),L=k===""?w:k;if(L==="c"||L==="custom"){v=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
2111
+ `);let y=s.provider??(E.length===1?E[0]:void 0),T=y;for(;T===void 0;){let k=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),x=k===""?y:k;if(x===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2112
+ `),d(),null;continue}if(Tt({alias:"Probe",provider:x})!==void 0){e.stdout.write(`unknown provider "${x}" (known: ${Object.keys(oo).join(", ")})
2113
+ `),y=void 0;continue}T=x}let w=s.pattern??"3",v;for(;v===void 0;){e.stdout.write(`Patterns: 1) Lead 2) Lead+Reviewer 3) Lead+Coder+Reviewer c) custom
2114
+ `);let k=(await c(`Pattern [${w}]: `)).toLowerCase(),x=k===""?w:k;if(x==="c"||x==="custom"){v=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
2115
2115
  `);;){let C=await c(`Member ${v.length+1} alias: `);if(C===""){if(v.length===0){if(l)return e.stderr.write(`error: stdin closed (EOF) before any member alias was entered
2116
2116
  `),d(),null;e.stdout.write(`at least one member is required
2117
2117
  `);continue}break}let S=Tt({alias:C,provider:T});if(S!==void 0){e.stdout.write(`${S}
2118
2118
  `);continue}if(v.length===0&&C.toLowerCase()!=="lead"){e.stdout.write(`the first member must be Lead
2119
2119
  `);continue}let A=C.toLowerCase();if(O.has(A)){e.stdout.write(`duplicate member alias "${C}"
2120
- `);continue}O.add(A),v.push(C)}}else v=mh[L],v===void 0&&e.stdout.write(`unknown pattern "${L}"
2121
- `)}m=[];let b=new Map;for(let k of v){let L;for(;;){let I=await c(`Provider for ${k} [${T}]: `);L=I===""?T:I;let N=Tt({alias:k,provider:L});if(N===void 0)break;if(e.stdout.write(`error: ${N}. Enter a provider name, not a model; press Enter to use ${T}.
2120
+ `);continue}O.add(A),v.push(C)}}else v=mh[x],v===void 0&&e.stdout.write(`unknown pattern "${x}"
2121
+ `)}m=[];let b=new Map;for(let k of v){let x;for(;;){let I=await c(`Provider for ${k} [${T}]: `);x=I===""?T:I;let N=Tt({alias:k,provider:x});if(N===void 0)break;if(e.stdout.write(`error: ${N}. Enter a provider name, not a model; press Enter to use ${T}.
2122
2122
  `),l&&i.length===0)return e.stderr.write(`error: stdin closed (EOF) before a valid member provider was entered
2123
- `),d(),null}if(!b.has(L)){e.stdout.write(`Loading model suggestions for ${L}...
2124
- `);try{b.set(L,await(t.loadModels??Ji)(L))}catch{b.set(L,[])}}let O=b.get(L),C=Pc(L)?"some OpenAI, Anthropic, and Google Gemini models only; not a complete list":"suggestions; availability may vary";e.stdout.write(`Models for ${L} (${C}):
2123
+ `),d(),null}if(!b.has(x)){e.stdout.write(`Loading model suggestions for ${x}...
2124
+ `);try{b.set(x,await(t.loadModels??Ji)(x))}catch{b.set(x,[])}}let O=b.get(x),C=Pc(x)?"some OpenAI, Anthropic, and Google Gemini models only; not a complete list":"suggestions; availability may vary";e.stdout.write(`Models for ${x} (${C}):
2125
2125
  `),O.length===0&&e.stdout.write(` No model suggestions available.
2126
2126
  `);for(let I of O)e.stdout.write(` ${I}
2127
2127
  `);e.stdout.write(`Type a model name, including one not listed, or leave blank to ${s.model!==void 0?"keep the default":"omit"}.
2128
- `);let S=s.model,A=await c(`Model for ${k}${S!==void 0?` [${S}]`:" (blank to omit)"}: `),R=A===""?S:A;m.push({alias:k,provider:L,...R!==void 0?{model:R}:{}})}}let p=Er({teamName:f,members:m}),_=t.editFile??xB(r),h=s.seed??!0;for(;;){e.stdout.write(`
2128
+ `);let S=s.model,A=await c(`Model for ${k}${S!==void 0?` [${S}]`:" (blank to omit)"}: `),R=A===""?S:A;m.push({alias:k,provider:x,...R!==void 0?{model:R}:{}})}}let p=Er({teamName:f,members:m}),_=t.editFile??LB(r),h=s.seed??!0;for(;;){e.stdout.write(`
2129
2129
  --- ${u} ---
2130
2130
  ${p}---
2131
- `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=bB(Bh(RB(),"lmctl-plan-edit-"));try{let T=Bh(y,fd(u));AB(T,p,"utf8"),_(T),p=IB(T,"utf8")}finally{kB(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 dk(t){return zc(t)}var uk=x(()=>{"use strict";Jc();rs();Hp();un();Qc()});var Ek={};me(Ek,{readPlanSource:()=>vr,runPlan:()=>FB});import{existsSync as pk,mkdirSync as LB,readdirSync as CB,readFileSync as fk,statSync as OB,writeFileSync as DB}from"node:fs";import{basename as hk,dirname as MB,extname as $B,join as _k,resolve as qh}from"node:path";async function FB(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(PB),0;let r=[],s=[];for(let C=0;C<t.length;C+=1){let S=t[C];if(S==="--member"){let A=t[C+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2131
+ `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=bB(Bh(RB(),"lmctl-plan-edit-"));try{let T=Bh(y,fd(u));AB(T,p,"utf8"),_(T),p=IB(T,"utf8")}finally{kB(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 dk(t){return zc(t)}var uk=L(()=>{"use strict";Jc();rs();Hp();un();Qc()});var Ek={};me(Ek,{readPlanSource:()=>vr,runPlan:()=>FB});import{existsSync as pk,mkdirSync as xB,readdirSync as CB,readFileSync as fk,statSync as OB,writeFileSync as DB}from"node:fs";import{basename as hk,dirname as MB,extname as $B,join as _k,resolve as qh}from"node:path";async function FB(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(PB),0;let r=[],s=[];for(let C=0;C<t.length;C+=1){let S=t[C];if(S==="--member"){let A=t[C+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2132
2132
  `),2;r.push(A),C+=1;continue}s.push(S)}let o=le(s,["--pattern","--provider","--model","--from","--output"],["--json","--stdout","--force","--seed","--no-seed","--wizard","--non-interactive","--no-interactive"]);if(o.error!==void 0)return e.stderr.write(`error: ${o.error}
2133
2133
  `),e.stderr.write(`usage: lmctl plan [directory] [options]
2134
2134
  `),2;if(o.positionals.length>1)return e.stderr.write(`usage: lmctl plan [directory] [options]
@@ -2138,21 +2138,21 @@ ${p}---
2138
2138
  `),2;if(E&&p)return e.stderr.write(`error: --wizard cannot be combined with --stdout
2139
2139
  `),2;if(E&&m)return e.stderr.write(`error: --wizard cannot be combined with --json
2140
2140
  `),2;if(E&&y)return e.stderr.write(`error: --wizard requires interactive mode
2141
- `),2;let T=l!==void 0||c!==void 0||d!==void 0||u!==void 0||r.length>0,w=e.stdin??process.stdin,v=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&&v,L;if(k){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2141
+ `),2;let T=l!==void 0||c!==void 0||d!==void 0||u!==void 0||r.length>0,w=e.stdin??process.stdin,v=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&&v,x;if(k){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2142
2142
  `),2;if(l!==void 0&&r.length>0)return e.stderr.write(`error: --pattern and --member are mutually exclusive
2143
2143
  `),2;let C=yk(r,d,S=>{e.stderr.write(`error: ${S}
2144
- `)});if(C.error!==void 0)return 1;L=await UB(e,w,i,a,{provider:c,model:d,pattern:l,members:C.members,seed:!g,output:f},n)}else{if(!T)return e.stderr.write(`error: ${gk}
2144
+ `)});if(C.error!==void 0)return 1;x=await UB(e,w,i,a,{provider:c,model:d,pattern:l,members:C.members,seed:!g,output:f},n)}else{if(!T)return e.stderr.write(`error: ${gk}
2145
2145
  `),2;let C=await jB({pattern:l,provider:c,model:d,from:u,memberRaws:r,output:f,directory:a,cwd:i,seedFlag:h,deps:{...n,initConfigPath:Nt(e.env??process.env,n.initConfigPath)}},S=>{e.stderr.write(`error: ${S}
2146
- `)});if(typeof C=="number")return C;L=C}if(L===null)return e.stderr.write(`aborted
2147
- `),1;if(p)return e.stdout.write(L.text),0;let O=L.destPath;return BB(L,O,{asJson:m,force:_,seed:L.seed},e)}async function UB(t,e,n,r,s,o){let i=await ck({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:dk(i.text),seed:i.seed}}async function jB(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(gk),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=WB(a,l,c);if(o!==void 0){let h;try{h=await vr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=OI(h),E=zc(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=yk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=xI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${Yc})`),2;if(r!==void 0){let g=Tt({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=gr(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 _=hk(m,$B(m));return{text:Er({teamName:_,members:p}),destPath:m,members:p,seed:d}}function yk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=LI(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 WB(t,e,n){if(t!==void 0)return qh(n,t);let r=qh(n,e??".");return _k(r,`${hk(r)}.lmctl`)}async function BB(t,e,n,r){if(pk(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2148
- `),1;LB(MB(e),{recursive:!0}),DB(e,t.text,"utf8");let s=n.asJson?{...r,stdout:{write:()=>{}}}:r;if(!(await yr([e],s)===0))return n.seed&&r.stderr.write(`error: refusing to seed \u2014 lint failed
2146
+ `)});if(typeof C=="number")return C;x=C}if(x===null)return e.stderr.write(`aborted
2147
+ `),1;if(p)return e.stdout.write(x.text),0;let O=x.destPath;return BB(x,O,{asJson:m,force:_,seed:x.seed},e)}async function UB(t,e,n,r,s,o){let i=await ck({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:dk(i.text),seed:i.seed}}async function jB(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(gk),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=WB(a,l,c);if(o!==void 0){let h;try{h=await vr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=OI(h),E=zc(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=yk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=LI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${Yc})`),2;if(r!==void 0){let g=Tt({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=gr(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 _=hk(m,$B(m));return{text:Er({teamName:_,members:p}),destPath:m,members:p,seed:d}}function yk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=xI(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 WB(t,e,n){if(t!==void 0)return qh(n,t);let r=qh(n,e??".");return _k(r,`${hk(r)}.lmctl`)}async function BB(t,e,n,r){if(pk(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2148
+ `),1;xB(MB(e),{recursive:!0}),DB(e,t.text,"utf8");let s=n.asJson?{...r,stdout:{write:()=>{}}}:r;if(!(await yr([e],s)===0))return n.seed&&r.stderr.write(`error: refusing to seed \u2014 lint failed
2149
2149
  `),n.asJson&&ee(r,Xh(e,!1,!1,t.members)),1;let a=!1;if(n.seed){let l=await ra([e],s);return a=l===0,n.asJson&&ee(r,Xh(e,!0,a,t.members)),l}return n.asJson?(ee(r,Xh(e,!0,!1,t.members)),0):(r.stdout.write(`Created ${e}
2150
2150
  `),r.stdout.write(`This is a starting point, not a finished teamfile -- edit it freely.
2151
2151
  `),r.stdout.write(`Only _MEMBER_ lines are parsed; everything else is free-form.
2152
2152
  `),r.stdout.write(`Format, and what lint/seed each do: https://lmctl.com/lmctl/docs/manuals/teamfile-format
2153
2153
  `),r.stdout.write(`After editing, run: lmctl lint ${e}
2154
2154
  `),r.stdout.write(`Then run: lmctl seed ${e}
2155
- `),0)}function Xh(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 vr(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 XB(t,e);let r=qh(n,t);if(!pk(r))throw new Error(`source not found: ${t}`);if(!OB(r).isDirectory())return fk(r,"utf8");let o=CB(r).filter(i=>Ne(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 fk(_k(r,o[0]),"utf8")}async function XB(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(!HB.has(s.status)){if(!s.ok)throw new Error(`HTTP ${s.status}`);return await s.text()}if(r>=mk)throw new Error(`too many HTTPS redirects (maximum ${mk})`);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 PB,gk,HB,mk,ca=x(()=>{"use strict";je();ce();uk();un();rs();Qc();PB=`usage: lmctl plan [directory] [options]
2155
+ `),0)}function Xh(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 vr(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 XB(t,e);let r=qh(n,t);if(!pk(r))throw new Error(`source not found: ${t}`);if(!OB(r).isDirectory())return fk(r,"utf8");let o=CB(r).filter(i=>Ne(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 fk(_k(r,o[0]),"utf8")}async function XB(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(!HB.has(s.status)){if(!s.ok)throw new Error(`HTTP ${s.status}`);return await s.text()}if(r>=mk)throw new Error(`too many HTTPS redirects (maximum ${mk})`);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 PB,gk,HB,mk,ca=L(()=>{"use strict";je();ce();uk();un();rs();Qc();PB=`usage: lmctl plan [directory] [options]
2156
2156
 
2157
2157
  Generate an lmctl teamfile. With no config flags and a TTY, an interactive
2158
2158
  wizard completes missing information; complete flags run immediately.
@@ -2201,17 +2201,17 @@ Examples:
2201
2201
  `),1;if(ZB(l))return t.stderr.write(`error: --save-script: ${a} did not return a script (looks like an HTML page, not lmscript)
2202
2202
  `),1;let c=KB(r);GB(c,{recursive:!0});let d=zB(c,`.save-script-${process.pid}-${Date.now()}.tmp`);return JB(d,l,"utf8"),VB(d,r),t.stdout.write(`Saved ${a} to ${r}
2203
2203
  `),0}async function eH(t,e,n,r,s={}){let o=wk(n,e,s);if(o.error!==void 0)return t.stderr.write(`error: ${o.error}
2204
- `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:vk(t,o.request)}var QB,Tk,pd=x(()=>{"use strict";ca();QB="https://lmctl.com/lmscript/commands",Tk=/^[A-Za-z0-9._-]+$/});var da,Ate,Gh=x(()=>{"use strict";da=[{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}],Ate=da.length});import{spawn as tH}from"node:child_process";async function bk(t,e,n){let r=rH.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 sH(r.name,s)}function sH(t,e){return t==="lmctl_chat"?oH(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function oH(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 ge()&&Ve(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),iH(s,process.cwd())}function iH(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=tH("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=aH(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){ge()&&Ve(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2205
- `).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 aH(t){let e=t.LMCTL_MCP_CHAT_TIMEOUT_MS;if(e===void 0||e.trim().length===0)return Sk;let n=Number(e);return!Number.isFinite(n)||n<=0?Sk:n}function Vh(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:nH),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 nH,Sk,rH,Jh=x(()=>{"use strict";Gh();oe();nH="http://127.0.0.1:8787",Sk=30*60*1e3,rH=new Map(da.map(t=>[t.name,t]))});async function uH(t,e){let n=t.id===void 0,r=t.id??null;if(t.method==="exit")return n||e.io.write(Kh({jsonrpc:"2.0",id:r,result:null})),{kind:"exit"};if(t.method==="initialize")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{protocolVersion:lH,capabilities:{tools:{listChanged:!1}},serverInfo:{name:cH,version:dH}}}};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:da.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 bk(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 Kh(t){return`${JSON.stringify(t)}
2204
+ `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:vk(t,o.request)}var QB,Tk,pd=L(()=>{"use strict";ca();QB="https://lmctl.com/lmscript/commands",Tk=/^[A-Za-z0-9._-]+$/});var da,Ate,Gh=L(()=>{"use strict";da=[{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}],Ate=da.length});import{spawn as tH}from"node:child_process";async function bk(t,e,n){let r=rH.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 sH(r.name,s)}function sH(t,e){return t==="lmctl_chat"?oH(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function oH(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 ge()&&Ve(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),iH(s,process.cwd())}function iH(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=tH("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=aH(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){ge()&&Ve(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2205
+ `).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 aH(t){let e=t.LMCTL_MCP_CHAT_TIMEOUT_MS;if(e===void 0||e.trim().length===0)return Sk;let n=Number(e);return!Number.isFinite(n)||n<=0?Sk:n}function Vh(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:nH),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 nH,Sk,rH,Jh=L(()=>{"use strict";Gh();oe();nH="http://127.0.0.1:8787",Sk=30*60*1e3,rH=new Map(da.map(t=>[t.name,t]))});async function uH(t,e){let n=t.id===void 0,r=t.id??null;if(t.method==="exit")return n||e.io.write(Kh({jsonrpc:"2.0",id:r,result:null})),{kind:"exit"};if(t.method==="initialize")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{protocolVersion:lH,capabilities:{tools:{listChanged:!1}},serverInfo:{name:cH,version:dH}}}};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:da.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 bk(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 Kh(t){return`${JSON.stringify(t)}
2206
2206
  `}async function Ik(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(Kh({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 uH(l,t);c.kind==="response"?t.io.write(Kh(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(`
2207
2207
  `);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(`
2208
2208
  `)}};e.setEncoding("utf8"),e.on("data",u=>{r+=u,d()}),e.on("end",()=>{r.trim().length>0&&(a=a.then(()=>o(r))),a.finally(()=>c(0))}),e.on("error",u=>{t.io.log?.(`mcp: stdin error: ${u.message}
2209
- `),a.finally(()=>c(1))})})}var lH,cH,dH,kk=x(()=>{"use strict";Gh();Jh();lH="2025-06-18",cH="lmctl",dH="0.0.1"});var Rk={};me(Rk,{runMcp:()=>mH});async function mH(t,e={stdout:process.stdout,stderr:process.stderr},n=process.stdin){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(fH),0;if(t.length>0)return e.stderr.write(`usage: lmctl mcp
2210
- `),2;F({event:"mcp_bridge_start",pid:process.pid});let r=e.dal===void 0,s=e.dal??pH(),o=1;try{let i=s===void 0?Vh({getConfig:()=>null},process.env):Vh(s,process.env);return o=await Ik({io:{write:l=>e.stdout.write(l),log:l=>e.stderr.write(l)},dispatch:{config:i,...s!==void 0?{dal:s}:{}}},n),o}finally{F({event:"mcp_bridge_exit",pid:process.pid,exit_code:o}),r&&s!==void 0&&s.close()}}function pH(){let t=Ge(),e=3;for(let n=1;n<=e;n+=1)try{return qe({path:t})}catch(r){let s=r instanceof Error?r.message:String(r);if(F({event:"mcp_bridge_db_open_failed",pid:process.pid,attempt:n,db_path:t,error_message:s}),n<e&&Ak(s))hH(50*n);else if(!Ak(s))break}}function Ak(t){return/SQLITE_BUSY|database is locked|database is busy/i.test(t)}function hH(t){let e=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(e,0,0,t)}var fH,Nk=x(()=>{"use strict";Ft();Jh();kk();oe();bn();fH=`usage: lmctl mcp
2209
+ `),a.finally(()=>c(1))})})}var lH,cH,dH,kk=L(()=>{"use strict";Gh();Jh();lH="2025-06-18",cH="lmctl",dH="0.0.1"});var Rk={};me(Rk,{runMcp:()=>mH});async function mH(t,e={stdout:process.stdout,stderr:process.stderr},n=process.stdin){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(fH),0;if(t.length>0)return e.stderr.write(`usage: lmctl mcp
2210
+ `),2;F({event:"mcp_bridge_start",pid:process.pid});let r=e.dal===void 0,s=e.dal??pH(),o=1;try{let i=s===void 0?Vh({getConfig:()=>null},process.env):Vh(s,process.env);return o=await Ik({io:{write:l=>e.stdout.write(l),log:l=>e.stderr.write(l)},dispatch:{config:i,...s!==void 0?{dal:s}:{}}},n),o}finally{F({event:"mcp_bridge_exit",pid:process.pid,exit_code:o}),r&&s!==void 0&&s.close()}}function pH(){let t=Ge(),e=3;for(let n=1;n<=e;n+=1)try{return qe({path:t})}catch(r){let s=r instanceof Error?r.message:String(r);if(F({event:"mcp_bridge_db_open_failed",pid:process.pid,attempt:n,db_path:t,error_message:s}),n<e&&Ak(s))hH(50*n);else if(!Ak(s))break}}function Ak(t){return/SQLITE_BUSY|database is locked|database is busy/i.test(t)}function hH(t){let e=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(e,0,0,t)}var fH,Nk=L(()=>{"use strict";Ft();Jh();kk();oe();bn();fH=`usage: lmctl mcp
2211
2211
 
2212
2212
  Start the stdio MCP bridge. The bridge resolves api.url and api.token from
2213
2213
  local config, then uses stdin/stdout for JSON-RPC frames.
2214
- `});function xk(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 Lk=x(()=>{"use strict"});var Wk={};me(Wk,{applyMaxBytes:()=>gd,parseTailSince:()=>Uk,renderMessage:()=>Fk,runTail:()=>TH});async function TH(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${EH}
2214
+ `});function Lk(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 xk=L(()=>{"use strict"});var Wk={};me(Wk,{applyMaxBytes:()=>gd,parseTailSince:()=>Uk,renderMessage:()=>Fk,runTail:()=>TH});async function TH(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${EH}
2215
2215
  `),0;let n=le(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
2216
2216
  `),2;let s=V(n,"--since"),o=Uk(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
2217
2217
  `),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?gH: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
@@ -2228,7 +2228,7 @@ ${i.map(a=>` ${a}`).join(`
2228
2228
  `)}`}function Ok(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 wH(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)ee(t,{schema_version:hd,run_id:n,truncated:d.length<c.length,events:Ok(d)});else{let f=d.map(m=>`${$k(m)}
2229
2229
  `).join("");t.stdout.write(r.kind==="bytes"?gd(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){ee(t,{schema_version:hd,run_id:n,truncated:!1,events:Ok(h)});return}let g=h.map(E=>`${$k(E)}
2230
2230
  `).join("");t.stdout.write(r.kind==="bytes"?gd(g,r.maxBytes):g)}catch(h){t.stderr.write(`tail: ${h instanceof Error?h.message:String(h)}
2231
- `)}},o*1e3),_=()=>{clearInterval(p),f(0)};process.once("SIGINT",_),process.once("SIGTERM",_)}):0}function gd(t,e){if(e===0||Buffer.byteLength(t,"utf8")<=e)return t;let r=Buffer.byteLength(Dk,"utf8");if(r>=e)return Mk(t,e);let s=e-r,o=Mk(t,s);return`${Dk}${o}`}function Mk(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 $k(t){let e=jk(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 Uk(t){return xk(t,"--since")}function jk(t){if(t===void 0)return;let e=(0,Pk.formatLocalTimestamp)(t);return e==="unknown"?void 0:e}var Pk,_H,gH,yH,hd,EH,_d,Dk,Bk=x(()=>{"use strict";ln();Pk=Ct(kt(),1);ce();Qe();je();Qt();Lk();_H={name:"tail",allowsBareTeamfile:!0,supportsRaw:!0},gH=4096,yH=2,hd=1,EH=`usage: lmctl tail [target] [alias]
2231
+ `)}},o*1e3),_=()=>{clearInterval(p),f(0)};process.once("SIGINT",_),process.once("SIGTERM",_)}):0}function gd(t,e){if(e===0||Buffer.byteLength(t,"utf8")<=e)return t;let r=Buffer.byteLength(Dk,"utf8");if(r>=e)return Mk(t,e);let s=e-r,o=Mk(t,s);return`${Dk}${o}`}function Mk(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 $k(t){let e=jk(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 Uk(t){return Lk(t,"--since")}function jk(t){if(t===void 0)return;let e=(0,Pk.formatLocalTimestamp)(t);return e==="unknown"?void 0:e}var Pk,_H,gH,yH,hd,EH,_d,Dk,Bk=L(()=>{"use strict";ln();Pk=Ct(kt(),1);ce();Qe();je();Qt();xk();_H={name:"tail",allowsBareTeamfile:!0,supportsRaw:!0},gH=4096,yH=2,hd=1,EH=`usage: lmctl tail [target] [alias]
2232
2232
  lmctl tail --session <id> [--provider <name>]
2233
2233
  lmctl tail --run <id>
2234
2234
  [--lines N | --max-bytes N] [--since <duration|ISO8601>]
@@ -2261,7 +2261,7 @@ nothing new prints no line at all, same as text mode.`;_d=-2;Dk=`\u2026 [truncat
2261
2261
  ${m.content}`);return f.length>0&&e.stdout.write(`${f.join(`
2262
2262
 
2263
2263
  `)}
2264
- `),0}var Hk,Gk=x(()=>{"use strict";ln();Dn();Be();Ae();ce();Qe();Hk=`usage: lmctl export <teamfile> <alias> [--prompt-only | --json]
2264
+ `),0}var Hk,Gk=L(()=>{"use strict";ln();Dn();Be();Ae();ce();Qe();Hk=`usage: lmctl export <teamfile> <alias> [--prompt-only | --json]
2265
2265
  lmctl export <sessionid> --provider <name> [--json]
2266
2266
 
2267
2267
  Export all user and assistant messages from a member's provider session.
@@ -2281,7 +2281,7 @@ ${Vk}`),2}let i;try{let a={groups:[],total:Qk(),reasons:{usage:{},cost:{}}},l=Fe
2281
2281
  `);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"?IH(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(" ")+`
2282
2282
  `);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+`
2283
2283
  `)}}return 0}catch(a){return e.stderr.write(`error: cannot read usage: ${a instanceof Error?a.message:String(a)}
2284
- `),1}finally{i?.close()}}var Yk,Vk,Kk,eA=x(()=>{"use strict";ga();ce();Yk={day:"day",provider:"provider",model:"model",team:"team",alias:"alias",session:"native_session_id",dir:"cwd"},Vk=`usage: lmctl usage [--since D] [--until D] [--by day|provider|model|team|alias|session|dir] [--json]
2284
+ `),1}finally{i?.close()}}var Yk,Vk,Kk,eA=L(()=>{"use strict";ga();ce();Yk={day:"day",provider:"provider",model:"model",team:"team",alias:"alias",session:"native_session_id",dir:"cwd"},Vk=`usage: lmctl usage [--since D] [--until D] [--by day|provider|model|team|alias|session|dir] [--json]
2285
2285
 
2286
2286
  Stored team and direct turn usage, not session estimates. Default: last 7 days, grouped by UTC day.
2287
2287
  --since is inclusive; --until is exclusive. ISO dates mean midnight UTC.
@@ -2293,8 +2293,8 @@ Model keys use reported names first; alias-like keys mean the model was not repo
2293
2293
  SUM(cost_usd) AS costUsd,
2294
2294
  100.0*SUM(CASE WHEN usage_source IS NOT NULL THEN COALESCE(tok_cache_read,0) ELSE 0 END)
2295
2295
  /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,
2296
- COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var nA={};me(nA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>tA,normalizeModelId:()=>Ed,runCost:()=>LH});function Ed(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function RH(t,e,n,r){let s=new Set,o=[];for(let i of e){let a=n===null?null:Ga(t,i,n,r),l=a?.kind==="priced"||a?.kind==="estimated"?`id:${a.model.normalizedId}`:a?.kind==="known-unpriced"?`id:${a.id}`:`raw:${i.trim().toLowerCase()}`;s.has(l)||(s.add(l),o.push(i))}return o}async function LH(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${xH}
2297
- `),0;let n=le(t,["--provider"],["--json"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <target> [alias]`);let r=z(n,"--json"),s=Zt(AH,{target:n.positionals[0],alias:n.positionals[1],flags:{provider:V(n,"--provider")}});if(s.mode==="error")return D(e,s.message);if(s.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let o,i;if(s.mode==="ai-team")try{let N=await j(e,P=>We(s.teamfile,s.alias,P));o=N.provider,i=N.sessionid}catch(N){if(N instanceof _e)return D(e,N.message);throw N}else if(i=s.sessionid,s.provider!==void 0)o=s.provider;else{let N=await _r(i);if(N.length===0)return D(e,`cost: session "${i}" not found in any provider store`);if(N.length>1)return D(e,`cost: session "${i}" matches multiple providers (${N.join(", ")}); pass --provider`);o=N[0]}let a;try{a=await $e(i,o)}catch(N){return D(e,`cost: failed to load session: ${N instanceof Error?N.message:String(N)}`)}if(a===null)return D(e,`cost: session not found: ${i} (provider=${o})`);let l=[...new Set([...a.messages.map(N=>N.model),...(a.responses??[]).map(N=>N.model??void 0)].filter(N=>N!==void 0&&N!=="<synthetic>"))],c=[...a.messages].reverse().find(N=>N.model!==void 0&&N.model!=="<synthetic>")?.model,d=a.model??c??null,u=Hn(a.responses??[],a.captureStatus!=="partial"),f=o==="gemini"&&(a.totalOutputTokens!==void 0||a.totalReasoningOutputTokens!==void 0)?(a.totalOutputTokens??0)+(a.totalReasoningOutputTokens??0):a.totalOutputTokens??null,m={input:a.responses?u.input_uncached:a.totalInputTokens??null,output:a.responses?u.output:f,cachedInput:a.responses?u.input_cached:a.totalCachedInputTokens??null},p=await Ot(),_=RH(o,l,p.catalog,p.aliases),h=a.responses===void 0&&_.length>1,g="unavailable",E=null,y=null,T=null,w=null,v=!1,b=null,k=null;if(d!==null&&p.catalog!==null){let N=Dt(o,d,p.catalog,p.aliases);if(g=N.state.kind,N.offer!==null)k=N.offer.pricing,E=N.offer.route,y=N.offer.source,T=N.offer.sourceModelId,w=N.provenance,v=N.offer.estimated;else switch(N.state.kind){case"unresolved":b=`alias "${N.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":b=`"${N.state.id}" is a known model with no published price row`;break;case"unknown":b=`model "${d}" not found in lmprice catalog for provider "${o}"`;break;case"wrong-provider":b=`model "${d}" is not offered by provider "${o}" (found under: ${N.state.otherProviders.join(", ")})`;break;default:b=`no lmprice catalog coverage for provider "${o}"`;break}}else d!==null&&(b="lmprice catalog unavailable");let L=k===null?null:{inputPer1m:k.input_per_1m_tokens,outputPer1m:k.output_per_1m_tokens,cachedInputPer1m:k.input_cache_read_per_1m_tokens},O=m.cachedInput??0,C=a.totalCacheWriteInputTokens??0,S=["claude","codex","gemini","qwen","copilot"].includes(o),A=m.input===null?null:Math.max(0,m.input-(S?O:0)-(o==="claude"||o==="copilot"?C:0)),R=m.input===null||m.output===null?null:Wo({input:A,output:m.output,cachedInput:O,...C>0?{cacheWrite:C,...a.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:a.totalCacheWrite5mInputTokens},...a.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:a.totalCacheWrite1hInputTokens}}:{}},k);if(R===null&&O>0&&k!==null&&k.input_cache_read_per_1m_tokens==null&&(b="no applicable cache-read price rate"),a.responses)if(R=null,!a.responses.length||a.captureStatus==="partial"||new Set(a.responses.map(N=>N.response_id)).size!==a.responses.length)b="session accounting coverage is incomplete";else if(!p.catalog)b="lmprice catalog unavailable";else{let N=0,P=null;for(let $ of a.responses){let q=$.tokens;if(!$.model){P="a response lacks a model";break}let M=a.turns?.flatMap(St=>St.rawUsage??[]).find(St=>St.responseId===$.response_id)?.values,se=M?.promptTokens??M?.prompt_tokens,B=M?.input_tokens,Z=M?.cache_read_tokens??M?.input_cache_read_tokens,be=M?.cache_write_tokens??M?.input_cache_write_tokens;if(typeof B=="number"&&typeof Z=="number"&&Z>B||typeof se=="number"&&typeof Z=="number"&&Z>se||typeof se=="number"&&typeof be=="number"&&be>se||typeof se=="number"&&typeof Z=="number"&&typeof be=="number"&&Z+be>se){P=`${o} reported contradictory token counters`;break}if(q.output===null){P=`${o} does not record output tokens`;break}if(q.input_cached===null){P=`${o} does not record cached input tokens`;break}let Ht=$.model_provider??o,cs=Ed($.model??""),wo=(Ht==="deepseek"||$.model_provider==="deepseek")&&($.model_provider===void 0||$.model_provider==="deepseek")&&tA.has(cs),Wn=q.input_cache_write;if(Wn===null&&!wo){P=`${o} does not record cache-write input tokens`;break}if(o==="agy"&&(Wn??0)>0){P="cache-write inclusion in input is not verified";break}let U=["kimi","opencode","miniplayer"].includes(o),X=Dt(Ht,$.model,p.catalog,p.aliases),re=X.offer??Dt(o,$.model,p.catalog,p.aliases).offer;if(re===null){switch(X.state.kind){case"no-catalog":P=`no lmprice catalog coverage for provider "${o}"`;break;case"unresolved":P=`alias "${X.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":P=`"${X.state.id}" is a known model with no published price row`;break;case"unknown":P=`model "${$.model}" not found in lmprice catalog for provider "${o}"`;break;case"wrong-provider":P=`model "${$.model}" is not offered by provider "${o}" (found under: ${X.state.otherProviders.join(", ")})`;break;default:P=`no applicable price for response model "${$.model}"`;break}break}if(Wn===null){let St=(re.route??"").toLowerCase(),ha=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(St),vo=Ed(re.sourceModelId??""),jd=re.provider==="deepseek"&&re.source!=="openrouter"&&!ha&&vo===cs;if(wo&&jd)Wn=0;else{P=`${o} does not record cache-write input tokens`;break}}if(q.input_uncached===null){P=`${o} does not record uncached input tokens`;break}let Ce=Wo({input:Math.max(0,q.input_uncached-(U?Wn:0)),cachedInput:q.input_cached,cacheWrite:Wn,output:q.output},re?.pricing??null);if(Ce===null){P=`no applicable price for response model "${$.model}"`;break}N+=Ce,!E&&re&&(E=re.route,g="priced")}R=P?null:N,b=P}R===null&&(!a.responses&&m.input===null&&m.output===null?b=`${o} does not record token usage`:!a.responses&&m.input===null&&!b?b=`${o} does not record input tokens`:!a.responses&&m.output===null&&!b?b=`${o} does not record output tokens`:b||(b=`no lmprice entry for "${d??"unknown"}"`),(g==="priced"||g==="estimated")&&(g="unavailable",E=null,y=null,T=null,w=null,L=null));let I={schema_version:NH,provider:o,sessionId:i,model:d,modelsUsed:_,approximate:h,tokens:m,pricePerModel:L,costUsd:R,priceResolution:g,priceRoute:E,priceSource:y,priceSourceModelId:T,priceProvenance:w,priceEstimated:v,costUnavailableReason:b,priceDataSource:p.source,priceDataGeneratedAt:p.generatedAt};return r?(ee(e,I),0):(e.stdout.write(`Session: ${i}
2296
+ COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var nA={};me(nA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>tA,normalizeModelId:()=>Ed,runCost:()=>xH});function Ed(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function RH(t,e,n,r){let s=new Set,o=[];for(let i of e){let a=n===null?null:Ga(t,i,n,r),l=a?.kind==="priced"||a?.kind==="estimated"?`id:${a.model.normalizedId}`:a?.kind==="known-unpriced"?`id:${a.id}`:`raw:${i.trim().toLowerCase()}`;s.has(l)||(s.add(l),o.push(i))}return o}async function xH(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${LH}
2297
+ `),0;let n=le(t,["--provider"],["--json"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <target> [alias]`);let r=z(n,"--json"),s=Zt(AH,{target:n.positionals[0],alias:n.positionals[1],flags:{provider:V(n,"--provider")}});if(s.mode==="error")return D(e,s.message);if(s.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let o,i;if(s.mode==="ai-team")try{let N=await j(e,P=>We(s.teamfile,s.alias,P));o=N.provider,i=N.sessionid}catch(N){if(N instanceof _e)return D(e,N.message);throw N}else if(i=s.sessionid,s.provider!==void 0)o=s.provider;else{let N=await _r(i);if(N.length===0)return D(e,`cost: session "${i}" not found in any provider store`);if(N.length>1)return D(e,`cost: session "${i}" matches multiple providers (${N.join(", ")}); pass --provider`);o=N[0]}let a;try{a=await $e(i,o)}catch(N){return D(e,`cost: failed to load session: ${N instanceof Error?N.message:String(N)}`)}if(a===null)return D(e,`cost: session not found: ${i} (provider=${o})`);let l=[...new Set([...a.messages.map(N=>N.model),...(a.responses??[]).map(N=>N.model??void 0)].filter(N=>N!==void 0&&N!=="<synthetic>"))],c=[...a.messages].reverse().find(N=>N.model!==void 0&&N.model!=="<synthetic>")?.model,d=a.model??c??null,u=Hn(a.responses??[],a.captureStatus!=="partial"),f=o==="gemini"&&(a.totalOutputTokens!==void 0||a.totalReasoningOutputTokens!==void 0)?(a.totalOutputTokens??0)+(a.totalReasoningOutputTokens??0):a.totalOutputTokens??null,m={input:a.responses?u.input_uncached:a.totalInputTokens??null,output:a.responses?u.output:f,cachedInput:a.responses?u.input_cached:a.totalCachedInputTokens??null},p=await Ot(),_=RH(o,l,p.catalog,p.aliases),h=a.responses===void 0&&_.length>1,g="unavailable",E=null,y=null,T=null,w=null,v=!1,b=null,k=null;if(d!==null&&p.catalog!==null){let N=Dt(o,d,p.catalog,p.aliases);if(g=N.state.kind,N.offer!==null)k=N.offer.pricing,E=N.offer.route,y=N.offer.source,T=N.offer.sourceModelId,w=N.provenance,v=N.offer.estimated;else switch(N.state.kind){case"unresolved":b=`alias "${N.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":b=`"${N.state.id}" is a known model with no published price row`;break;case"unknown":b=`model "${d}" not found in lmprice catalog for provider "${o}"`;break;case"wrong-provider":b=`model "${d}" is not offered by provider "${o}" (found under: ${N.state.otherProviders.join(", ")})`;break;default:b=`no lmprice catalog coverage for provider "${o}"`;break}}else d!==null&&(b="lmprice catalog unavailable");let x=k===null?null:{inputPer1m:k.input_per_1m_tokens,outputPer1m:k.output_per_1m_tokens,cachedInputPer1m:k.input_cache_read_per_1m_tokens},O=m.cachedInput??0,C=a.totalCacheWriteInputTokens??0,S=["claude","codex","gemini","qwen","copilot"].includes(o),A=m.input===null?null:Math.max(0,m.input-(S?O:0)-(o==="claude"||o==="copilot"?C:0)),R=m.input===null||m.output===null?null:Wo({input:A,output:m.output,cachedInput:O,...C>0?{cacheWrite:C,...a.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:a.totalCacheWrite5mInputTokens},...a.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:a.totalCacheWrite1hInputTokens}}:{}},k);if(R===null&&O>0&&k!==null&&k.input_cache_read_per_1m_tokens==null&&(b="no applicable cache-read price rate"),a.responses)if(R=null,!a.responses.length||a.captureStatus==="partial"||new Set(a.responses.map(N=>N.response_id)).size!==a.responses.length)b="session accounting coverage is incomplete";else if(!p.catalog)b="lmprice catalog unavailable";else{let N=0,P=null;for(let $ of a.responses){let q=$.tokens;if(!$.model){P="a response lacks a model";break}let M=a.turns?.flatMap(St=>St.rawUsage??[]).find(St=>St.responseId===$.response_id)?.values,se=M?.promptTokens??M?.prompt_tokens,B=M?.input_tokens,Z=M?.cache_read_tokens??M?.input_cache_read_tokens,be=M?.cache_write_tokens??M?.input_cache_write_tokens;if(typeof B=="number"&&typeof Z=="number"&&Z>B||typeof se=="number"&&typeof Z=="number"&&Z>se||typeof se=="number"&&typeof be=="number"&&be>se||typeof se=="number"&&typeof Z=="number"&&typeof be=="number"&&Z+be>se){P=`${o} reported contradictory token counters`;break}if(q.output===null){P=`${o} does not record output tokens`;break}if(q.input_cached===null){P=`${o} does not record cached input tokens`;break}let Ht=$.model_provider??o,cs=Ed($.model??""),wo=(Ht==="deepseek"||$.model_provider==="deepseek")&&($.model_provider===void 0||$.model_provider==="deepseek")&&tA.has(cs),Wn=q.input_cache_write;if(Wn===null&&!wo){P=`${o} does not record cache-write input tokens`;break}if(o==="agy"&&(Wn??0)>0){P="cache-write inclusion in input is not verified";break}let U=["kimi","opencode","miniplayer"].includes(o),X=Dt(Ht,$.model,p.catalog,p.aliases),re=X.offer??Dt(o,$.model,p.catalog,p.aliases).offer;if(re===null){switch(X.state.kind){case"no-catalog":P=`no lmprice catalog coverage for provider "${o}"`;break;case"unresolved":P=`alias "${X.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":P=`"${X.state.id}" is a known model with no published price row`;break;case"unknown":P=`model "${$.model}" not found in lmprice catalog for provider "${o}"`;break;case"wrong-provider":P=`model "${$.model}" is not offered by provider "${o}" (found under: ${X.state.otherProviders.join(", ")})`;break;default:P=`no applicable price for response model "${$.model}"`;break}break}if(Wn===null){let St=(re.route??"").toLowerCase(),ha=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(St),vo=Ed(re.sourceModelId??""),jd=re.provider==="deepseek"&&re.source!=="openrouter"&&!ha&&vo===cs;if(wo&&jd)Wn=0;else{P=`${o} does not record cache-write input tokens`;break}}if(q.input_uncached===null){P=`${o} does not record uncached input tokens`;break}let Ce=Wo({input:Math.max(0,q.input_uncached-(U?Wn:0)),cachedInput:q.input_cached,cacheWrite:Wn,output:q.output},re?.pricing??null);if(Ce===null){P=`no applicable price for response model "${$.model}"`;break}N+=Ce,!E&&re&&(E=re.route,g="priced")}R=P?null:N,b=P}R===null&&(!a.responses&&m.input===null&&m.output===null?b=`${o} does not record token usage`:!a.responses&&m.input===null&&!b?b=`${o} does not record input tokens`:!a.responses&&m.output===null&&!b?b=`${o} does not record output tokens`:b||(b=`no lmprice entry for "${d??"unknown"}"`),(g==="priced"||g==="estimated")&&(g="unavailable",E=null,y=null,T=null,w=null,x=null));let I={schema_version:NH,provider:o,sessionId:i,model:d,modelsUsed:_,approximate:h,tokens:m,pricePerModel:x,costUsd:R,priceResolution:g,priceRoute:E,priceSource:y,priceSourceModelId:T,priceProvenance:w,priceEstimated:v,costUnavailableReason:b,priceDataSource:p.source,priceDataGeneratedAt:p.generatedAt};return r?(ee(e,I),0):(e.stdout.write(`Session: ${i}
2298
2298
  `),e.stdout.write(` Provider: ${o}
2299
2299
  `),e.stdout.write(` Model: ${d??"(unknown)"}
2300
2300
  `),h&&e.stdout.write(` NOTE: this session used multiple models (${_.join(", ")}) -- cost below is approximate, priced at ${d}'s rate for the whole session.
@@ -2303,7 +2303,7 @@ Model keys use reported names first; alias-like keys mean the model was not repo
2303
2303
  `):e.stdout.write(` Cost: ~$${R.toFixed(4)}${h?" (approximate)":""}${v?" (estimated rate)":""}
2304
2304
  `),E!==null&&e.stdout.write(` Price route: ${E}${v?" (manual/estimated row)":""}
2305
2305
  `),e.stdout.write(` Price data: ${p.source}${p.generatedAt?` (generated ${p.generatedAt})`:""}
2306
- `),0)}var yd,AH,tA,NH,xH,rA=x(()=>{"use strict";ko();ln();yd=Ct(kt(),1);En();$r();ce();Qe();Vi();AH={name:"cost",allowsBareTeamfile:!1,supportsRaw:!0};tA=new Set([...Zs,...eo,"deepseek-v4.1-flash","deepseek-chat","deepseek-reasoner","deepseek-coder","deepseek-v3","deepseek-v3.2","deepseek-r1"].map(Ed));NH=1,xH=`usage: lmctl cost <target> [alias] [--json]
2306
+ `),0)}var yd,AH,tA,NH,LH,rA=L(()=>{"use strict";ko();ln();yd=Ct(kt(),1);En();$r();ce();Qe();Vi();AH={name:"cost",allowsBareTeamfile:!1,supportsRaw:!0};tA=new Set([...Zs,...eo,"deepseek-v4.1-flash","deepseek-chat","deepseek-reasoner","deepseek-coder","deepseek-v3","deepseek-v3.2","deepseek-r1"].map(Ed));NH=1,LH=`usage: lmctl cost <target> [alias] [--json]
2307
2307
  lmctl cost <sessionid> [--provider <name>]
2308
2308
 
2309
2309
  Estimate a session's dollar cost: aggregate token usage x the model's
@@ -2326,15 +2326,15 @@ unavailable) and
2326
2326
  \`priceDataGeneratedAt\` says how fresh it is -- the online check has a
2327
2327
  strict short timeout and NEVER blocks or fails this command: any network
2328
2328
  error degrades silently to the local cache, then the bundled built-in
2329
- copy, in that order.`});function sA(t,e={}){return t.query("SELECT * FROM run ORDER BY id DESC LIMIT ?",e.limit??100)}var oA=x(()=>{"use strict"});var aA={};me(aA,{runLs:()=>MH});import{resolve as Yh}from"node:path";function DH(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 MH(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${CH}
2329
+ copy, in that order.`});function sA(t,e={}){return t.query("SELECT * FROM run ORDER BY id DESC LIMIT ?",e.limit??100)}var oA=L(()=>{"use strict"});var aA={};me(aA,{runLs:()=>MH});import{resolve as Yh}from"node:path";function DH(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 MH(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${CH}
2330
2330
  `),0;let n=le(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=OH;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 j(e,async h=>$H(e,h,p,_))}catch(h){return At(e,h)}}let i=PH(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 vp(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?Yh(c):Yh(process.cwd());f=f.filter(p=>{let _=Yh(p.cwd);return d?_===m||_.startsWith(`${m}/`):_===m})}if(f=DH(f),a==="json")return ee(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}.
2331
2331
  `)}return 0}if(a==="teamfile"){for(let m of f)e.stdout.write(`_MEMBER_ alias=- provider=${m.provider} sessionid=${m.sessionId} sessiondir=${m.cwd}
2332
2332
  `);return 0}return(0,tt.printTable)(f.map(m=>[(0,tt.escapeCell)(m.sessionId),(0,tt.escapeCell)(m.provider),(0,tt.escapeCell)(m.cwd.length>36?`\u2026${m.cwd.slice(-35)}`:m.cwd),(0,tt.formatRelativeTime)(m.modifiedAt)]),{headers:["SESSION","PROVIDER","SESSIONDIR","MODIFIED"],stream:e.stdout}),0}async function $H(t,e,n,r){let s=sA(e,{limit:n});return r==="json"?(ee(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.
2333
- `),0):((0,tt.printTable)(s.map(o=>[(0,tt.escapeCell)(o.id),(0,tt.escapeCell)(o.workflow_id),(0,tt.escapeCell)(o.team_id),(0,tt.escapeCell)(o.current_state??""),(0,tt.escapeCell)(o.terminal_state??""),(0,tt.escapeCell)(o.started_at)]),{headers:["RUN_ID","WORKFLOW","TEAM","STATE","TERMINAL","STARTED"],stream:t.stdout}),0)}function PH(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 tt,CH,OH,iA,lA=x(()=>{"use strict";tt=Ct(kt(),1);Dn();ce();oA();CH=`usage: lmctl ls [--provider <name>] [--sessiondir <path>]
2333
+ `),0):((0,tt.printTable)(s.map(o=>[(0,tt.escapeCell)(o.id),(0,tt.escapeCell)(o.workflow_id),(0,tt.escapeCell)(o.team_id),(0,tt.escapeCell)(o.current_state??""),(0,tt.escapeCell)(o.terminal_state??""),(0,tt.escapeCell)(o.started_at)]),{headers:["RUN_ID","WORKFLOW","TEAM","STATE","TERMINAL","STARTED"],stream:t.stdout}),0)}function PH(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 tt,CH,OH,iA,lA=L(()=>{"use strict";tt=Ct(kt(),1);Dn();ce();oA();CH=`usage: lmctl ls [--provider <name>] [--sessiondir <path>]
2334
2334
  [--recursive] [--all] [--format table|teamfile|json] [--json]
2335
2335
  lmctl ls --runs [--limit N] [--format table|json] [--json]
2336
2336
 
2337
- List native provider sessions in scope, or list recent managed runs with --runs.`,OH=50,iA=500});import{closeSync as cA,openSync as FH,writeFileSync as dA,fsyncSync as UH,renameSync as jH,unlinkSync as WH,lstatSync as zh,readFileSync as BH}from"node:fs";import{randomUUID as HH}from"node:crypto";import{dirname as XH,join as qH}from"node:path";function Td(t,e,n){let r=()=>n===null?(()=>{try{return zh(t),!0}catch(a){if(a.code==="ENOENT")return!1;throw a}})():!BH(t).equals(Buffer.from(n,"utf8")),s=384;if(n!==null){let a=zh(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=qH(XH(t),".init-"+HH()+".tmp"),i;try{if(i=FH(o,"wx",s),dA(i,e,"utf8"),UH(i),cA(i),i=void 0,r())throw new Error("Profile changed concurrently: "+t);if(n!==null){let a=t+".bak";try{if(!zh(a).isFile())throw new Error("Backup path is not a regular file: "+a)}catch(l){if(l.code!=="ENOENT")throw l}if(dA(a,n,{encoding:"utf8",flag:"w",mode:s}),r())throw new Error("Profile changed concurrently: "+t)}jH(o,t)}finally{i!==void 0&&cA(i);try{WH(o)}catch(a){if(a.code!=="ENOENT")throw a}}}var uA=x(()=>{"use strict"});var fA={};me(fA,{runInit:()=>KH});import{mkdirSync as GH}from"node:fs";import{dirname as VH}from"node:path";async function KH(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(JH),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}
2337
+ List native provider sessions in scope, or list recent managed runs with --runs.`,OH=50,iA=500});import{closeSync as cA,openSync as FH,writeFileSync as dA,fsyncSync as UH,renameSync as jH,unlinkSync as WH,lstatSync as zh,readFileSync as BH}from"node:fs";import{randomUUID as HH}from"node:crypto";import{dirname as XH,join as qH}from"node:path";function Td(t,e,n){let r=()=>n===null?(()=>{try{return zh(t),!0}catch(a){if(a.code==="ENOENT")return!1;throw a}})():!BH(t).equals(Buffer.from(n,"utf8")),s=384;if(n!==null){let a=zh(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=qH(XH(t),".init-"+HH()+".tmp"),i;try{if(i=FH(o,"wx",s),dA(i,e,"utf8"),UH(i),cA(i),i=void 0,r())throw new Error("Profile changed concurrently: "+t);if(n!==null){let a=t+".bak";try{if(!zh(a).isFile())throw new Error("Backup path is not a regular file: "+a)}catch(l){if(l.code!=="ENOENT")throw l}if(dA(a,n,{encoding:"utf8",flag:"w",mode:s}),r())throw new Error("Profile changed concurrently: "+t)}jH(o,t)}finally{i!==void 0&&cA(i);try{WH(o)}catch(a){if(a.code!=="ENOENT")throw a}}}var uA=L(()=>{"use strict"});var fA={};me(fA,{runInit:()=>KH});import{mkdirSync as GH}from"node:fs";import{dirname as VH}from"node:path";async function KH(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(JH),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}
2338
2338
  `),2;let o=Nt(e.env??process.env,n.configPath);try{let i=(n.detectProviders??fI)(),a=uI(i),l=()=>{i.length===0?e.stderr.write(`warning: no supported provider (claude, codex, agy, kimi) was detected on this machine -- using claude as a placeholder for all three slots. Edit the file to match what you actually have.
2339
2339
  `):i.length<3&&e.stderr.write(`notice: only ${i.length} provider${i.length===1?" was":"s were"} detected (${i.join(", ")}) -- duplicated to fill the remaining slot${i.length===1?"s":""}. Spreading slots across different providers (where you have them) balances load, but is never required.
2340
2340
  `)},c=null;try{c=ns(o).raw}catch(d){if(!(d instanceof Et)||d.kind!=="missing")throw d}if(c!==null&&i.length===0)return e.stdout.write(`${o} is unchanged -- no supported provider was detected; existing values were kept.
@@ -2356,7 +2356,7 @@ ${Qh}
2356
2356
  This is a starting point, not a fixed answer -- edit provider/model1/model2/model3 above before running lmctl plan or lmctl quickrun if it is not right.
2357
2357
  `),e.stdout.write(`${Qh}
2358
2358
  `),l(),0}catch(i){return e.stderr.write("error: cannot update "+o+": "+(i instanceof Error?i.message:String(i))+`
2359
- `),1}}var Qh,JH,mA=x(()=>{"use strict";uA();rs();Qh="These are lmctl properties: lmscript reads PROPS.Provider1.Provider and PROPS.Provider1.Model1; legacy plan/quickrun templates use them as ${Provider1}/${Model1}.",JH=`usage: lmctl init [--force]
2359
+ `),1}}var Qh,JH,mA=L(()=>{"use strict";uA();rs();Qh="These are lmctl properties: lmscript reads PROPS.Provider1.Provider and PROPS.Provider1.Model1; legacy plan/quickrun templates use them as ${Provider1}/${Model1}.",JH=`usage: lmctl init [--force]
2360
2360
 
2361
2361
  Writes ~/.lmctl/init.toml if it does not exist: three provider slots
2362
2362
  (Provider1/2/3), each resolved to a provider and a starting model,
@@ -2387,10 +2387,10 @@ it is expected.
2387
2387
  (previous file saved as init.toml.bak). No detection keeps
2388
2388
  an existing profile unchanged, including with --force.
2389
2389
  -h, --help display help for command
2390
- `});function pA(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","model2","model3"].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 hA=x(()=>{"use strict"});import{execFileSync as YH}from"node:child_process";import{resolve as _A}from"node:path";function zH(t){return t.filter(e=>e.state!=="retired")}function gA(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=YH("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=_A(s),i=e.listProjects().find(a=>_A(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 yA(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 EA(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=zH(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 TA=x(()=>{"use strict";ce()});function wA(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 vA=x(()=>{"use strict"});var kA={};me(kA,{SIZE_WARN_EST_TOKENS:()=>ua,estimateTokens:()=>IA,runTeamTerminal:()=>n2,runTerminal:()=>Zh});import{constants as QH}from"node:os";import{spawn as ZH}from"node:child_process";import{statSync as e2}from"node:fs";async function Zh(t,e){if(t.includes("--help")||t.includes("-h"))return a2(e);let n=le(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(In(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 j(e,async i=>{let a=V(n,"--alias"),l=wA(i,s,a);return"err"in l?D(e,l.err):e_(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 At(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=Zt(t2,{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 j(e,l=>bA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await j(e,async s=>{let o=s2(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?i2(e,s,o,i,z(n,"--json")):o2(e,s,o,i)})}catch(s){return At(e,s)}}async function n2(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=We(e,n,r)}catch(A){return A instanceof _e?D(t,A.message):At(t,A)}let a=Zn(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:or(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,R=A===null?null:Ye(A)?"live":"dead",I=`${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?(ee(t,{status:"error",errorKind:"busy",message:I,holder_pid:A,holder_liveness:R}),1):D(t,I)}let l=yb({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 I=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(R)}finally{try{r.db.pragma(`busy_timeout=${I}`)}catch(N){R.push(`busy timeout restore: ${N instanceof Error?N.message:String(N)}`)}}},v=(A,R)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let N=r.getTrackedInvocation(d);N==null||N.status==="running"?R.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(I){R.push(`tracked terminal finish: ${I instanceof Error?I.message:String(I)}`)}},b=A=>{if(p)return;p=!0;let R=[];try{w(I=>{T(I),v({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},I)},R)}catch(I){R.push(I instanceof Error?I.message:String(I))}R.length>0&&(_=Error(R.join("; ")))},k=!o,L=k?new AbortController:void 0,O=()=>L?.abort("SIGINT"),C=()=>L?.abort("SIGTERM");k&&(process.once("SIGINT",O),process.once("SIGTERM",C));let S=o??{env:m,signal:L?.signal};S.env=m;try{if(S.cancel=b,S.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let I,N;E=new Promise(($,q)=>{I=$,N=q});let P=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let $=5e3-(performance.now()-P),q;try{if($<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise((M,se)=>{q=setTimeout(()=>se(Error("terminal close deadline exceeded")),$)})])}catch(M){throw _=M instanceof Error?M:Error(String(M)),_}finally{clearTimeout(q)}}})().then(I,N),E},finalizeSync(I){if(b(I),o.stop?.(I),_)throw _}}),p||S.signal?.aborted){let I=S.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(I),I==="SIGINT"?130:143}r.setTerminalLock(l),d=r2(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 I=new Date().toISOString(),N=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,I);N&&r.heartbeatAgentInflight(a.lease,a.leaseId,I),!N&&c!==null&&(clearInterval(c),c=null)}catch{}},Eb(m)),c.unref?.();try{Fs(t,Se(i.teamfile),i.teamfile)}catch{}let R=S;return g=e_(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},I=>{f.push(`${I.provider} terminal ignored model=${I.model}: ${I.reason}`)},R),u=await g,u}catch(A){throw y=A,A}finally{if(k&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",C)),!p){p=!0;let A=[];try{w(R=>{T(R),v({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+`
2391
- `)}catch{}}}}function r2(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:xs(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 e_(t,e,n,r){let{provider:s,sessionid:o,sessiondir:i,model:a}=e;if(!Ac(s))return D(t,`no resume incantation for provider "${s}"`);if(!lb.test(o))return D(t,"refusing to resume: malformed sessionid");let l=Ip(s,o,{isLead:e.isLead,model:a,onModelIgnored:p=>{let _=`warning: ${p.provider} terminal ignored model=${p.model}: ${p.reason}`;t.stderr.write(`${_}
2392
- `),Ue({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=xe(r?.env??t.env??process.env,i,o,"terminal"),d=await cb(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+`
2393
- `),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=ZH(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{}ue(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},v=()=>w(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=w);let b=()=>{r?.signal?.removeEventListener("abort",v),_&&!g&&(_.stdin.unpipe(E.stdin),y||_.stdin.pause(),E.stdout?.unpipe(_.stdout),E.stderr?.unpipe(_.stderr))};r?.signal?.addEventListener("abort",v,{once:!0}),r?.signal?.aborted&&v(),E.stdin?.on("error",()=>{}),E.on("error",k=>{b(),p(D(t,`failed to launch ${m}: ${k.message}`))}),E.on("exit",(k,L)=>{b(),r&&(r.signalObserved=L);let O=k??(L?128+(QH.signals[L]??1):1),C=db(s);C&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+C+`
2390
+ `});function pA(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","model2","model3"].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 hA=L(()=>{"use strict"});import{execFileSync as YH}from"node:child_process";import{resolve as _A}from"node:path";function zH(t){return t.filter(e=>e.state!=="retired")}function gA(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=YH("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=_A(s),i=e.listProjects().find(a=>_A(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 yA(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 EA(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=zH(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 TA=L(()=>{"use strict";ce()});function wA(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 vA=L(()=>{"use strict"});var kA={};me(kA,{SIZE_WARN_EST_TOKENS:()=>ua,estimateTokens:()=>IA,runTeamTerminal:()=>n2,runTerminal:()=>Zh});import{constants as QH}from"node:os";import{spawn as ZH}from"node:child_process";import{statSync as e2}from"node:fs";async function Zh(t,e){if(t.includes("--help")||t.includes("-h"))return a2(e);let n=le(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(In(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 j(e,async i=>{let a=V(n,"--alias"),l=wA(i,s,a);return"err"in l?D(e,l.err):e_(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 At(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=Zt(t2,{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 j(e,l=>bA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await j(e,async s=>{let o=s2(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?i2(e,s,o,i,z(n,"--json")):o2(e,s,o,i)})}catch(s){return At(e,s)}}async function n2(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=We(e,n,r)}catch(A){return A instanceof _e?D(t,A.message):At(t,A)}let a=Zn(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:or(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,R=A===null?null:Ye(A)?"live":"dead",I=`${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?(ee(t,{status:"error",errorKind:"busy",message:I,holder_pid:A,holder_liveness:R}),1):D(t,I)}let l=yb({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 I=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(R)}finally{try{r.db.pragma(`busy_timeout=${I}`)}catch(N){R.push(`busy timeout restore: ${N instanceof Error?N.message:String(N)}`)}}},v=(A,R)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let N=r.getTrackedInvocation(d);N==null||N.status==="running"?R.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(I){R.push(`tracked terminal finish: ${I instanceof Error?I.message:String(I)}`)}},b=A=>{if(p)return;p=!0;let R=[];try{w(I=>{T(I),v({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},I)},R)}catch(I){R.push(I instanceof Error?I.message:String(I))}R.length>0&&(_=Error(R.join("; ")))},k=!o,x=k?new AbortController:void 0,O=()=>x?.abort("SIGINT"),C=()=>x?.abort("SIGTERM");k&&(process.once("SIGINT",O),process.once("SIGTERM",C));let S=o??{env:m,signal:x?.signal};S.env=m;try{if(S.cancel=b,S.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let I,N;E=new Promise(($,q)=>{I=$,N=q});let P=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let $=5e3-(performance.now()-P),q;try{if($<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise((M,se)=>{q=setTimeout(()=>se(Error("terminal close deadline exceeded")),$)})])}catch(M){throw _=M instanceof Error?M:Error(String(M)),_}finally{clearTimeout(q)}}})().then(I,N),E},finalizeSync(I){if(b(I),o.stop?.(I),_)throw _}}),p||S.signal?.aborted){let I=S.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(I),I==="SIGINT"?130:143}r.setTerminalLock(l),d=r2(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 I=new Date().toISOString(),N=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,I);N&&r.heartbeatAgentInflight(a.lease,a.leaseId,I),!N&&c!==null&&(clearInterval(c),c=null)}catch{}},Eb(m)),c.unref?.();try{Fs(t,Se(i.teamfile),i.teamfile)}catch{}let R=S;return g=e_(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},I=>{f.push(`${I.provider} terminal ignored model=${I.model}: ${I.reason}`)},R),u=await g,u}catch(A){throw y=A,A}finally{if(k&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",C)),!p){p=!0;let A=[];try{w(R=>{T(R),v({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+`
2391
+ `)}catch{}}}}function r2(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:Ls(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 e_(t,e,n,r){let{provider:s,sessionid:o,sessiondir:i,model:a}=e;if(!Ac(s))return D(t,`no resume incantation for provider "${s}"`);if(!lb.test(o))return D(t,"refusing to resume: malformed sessionid");let l=Ip(s,o,{isLead:e.isLead,model:a,onModelIgnored:p=>{let _=`warning: ${p.provider} terminal ignored model=${p.model}: ${p.reason}`;t.stderr.write(`${_}
2392
+ `),Ue({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=Le(r?.env??t.env??process.env,i,o,"terminal"),d=await cb(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+`
2393
+ `),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=ZH(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{}ue(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},v=()=>w(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=w);let b=()=>{r?.signal?.removeEventListener("abort",v),_&&!g&&(_.stdin.unpipe(E.stdin),y||_.stdin.pause(),E.stdout?.unpipe(_.stdout),E.stderr?.unpipe(_.stderr))};r?.signal?.addEventListener("abort",v,{once:!0}),r?.signal?.aborted&&v(),E.stdin?.on("error",()=>{}),E.on("error",k=>{b(),p(D(t,`failed to launch ${m}: ${k.message}`))}),E.on("exit",(k,x)=>{b(),r&&(r.signalObserved=x);let O=k??(x?128+(QH.signals[x]??1):1),C=db(s);C&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+C+`
2394
2394
  `),p(O)})})}function s2(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=gA(t,e,V(n,"--project"));return typeof s=="number"?s:yA(t,e,s,void 0)}async function o2(t,e,n,r){let s=EA(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 e_(t,{provider:Bu(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 IA(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=e2(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 i2(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=Bu(a),d=a.model??null,u=null;Ac(c)&&(u=await $e(l,c));let f=IA(u),m=f.est>ua;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?ub(c,l,d!==null?{model:d}:{}):null})}if(s)return ee(t,{estimate:!0,legend:SA,guide_tokens:ua,members:i}),0;t.stdout.write(`session size \u2014 ESTIMATE only (nothing is changed automatically)
2395
2395
  `),t.stdout.write(`${SA}
2396
2396
  `);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)
@@ -2432,7 +2432,7 @@ it is expected.
2432
2432
  tokens it surfaces the resume incantation so YOU can
2433
2433
  open & self-compact. Nothing is ever changed
2434
2434
  automatically; ${ua} is a guide, not a gate.
2435
- `),0}var t2,ua,SA,t_=x(()=>{"use strict";Gr();Ft();ln();ce();TA();Qe();je();Ut();bl();Pt();Il();Rc();vA();oe();Ur();t2={name:"terminal",allowsBareTeamfile:!1,supportsRaw:!1},ua=2e5,SA="est = rough local heuristic (~4 chars/token), NOT an exact provider token count \u2014 open the session to verify before acting."});var LA={};me(LA,{runQuickrun:()=>g2});import{mkdtempSync as l2,rmSync as c2}from"node:fs";import{tmpdir as d2}from"node:os";import{existsSync as r_,mkdirSync as u2,readFileSync as f2,statSync as m2,writeFileSync as RA}from"node:fs";import{basename as p2,dirname as NA,join as vd,resolve as wd}from"node:path";async function AA(t,e){let n=await e(t,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status} fetching ${t}`);return n.text()}function h2(t){let e=p2(t),n=vd(t,`${e}.lmctl`),r=2;for(;r_(n);)n=vd(t,`${e}${r}.lmctl`),r+=1;return n}async function _2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(xA),0;let r=t.includes("--no-seed");if(In(e)&&!r&&!t.includes("--no-terminal"))return e.stderr.write(`error: quickrun opens a TUI; use --no-terminal in non-interactive mode
2435
+ `),0}var t2,ua,SA,t_=L(()=>{"use strict";Gr();Ft();ln();ce();TA();Qe();je();Ut();bl();Pt();Il();Rc();vA();oe();Ur();t2={name:"terminal",allowsBareTeamfile:!1,supportsRaw:!1},ua=2e5,SA="est = rough local heuristic (~4 chars/token), NOT an exact provider token count \u2014 open the session to verify before acting."});var xA={};me(xA,{runQuickrun:()=>g2});import{mkdtempSync as l2,rmSync as c2}from"node:fs";import{tmpdir as d2}from"node:os";import{existsSync as r_,mkdirSync as u2,readFileSync as f2,statSync as m2,writeFileSync as RA}from"node:fs";import{basename as p2,dirname as NA,join as vd,resolve as wd}from"node:path";async function AA(t,e){let n=await e(t,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status} fetching ${t}`);return n.text()}function h2(t){let e=p2(t),n=vd(t,`${e}.lmctl`),r=2;for(;r_(n);)n=vd(t,`${e}${r}.lmctl`),r+=1;return n}async function _2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(LA),0;let r=t.includes("--no-seed");if(In(e)&&!r&&!t.includes("--no-terminal"))return e.stderr.write(`error: quickrun opens a TUI; use --no-terminal in non-interactive mode
2436
2436
  `),2;let s=t.includes("--no-terminal"),o=t.filter(h=>h!=="--no-seed"&&h!=="--no-terminal"&&h!=="--help"&&h!=="-h");if(o.length!==1)return e.stderr.write(`usage: lmctl quickrun <url-or-path>
2437
2437
  `),2;let i=o[0],a=n.cwd??process.cwd(),l=n.fetchFn??fetch,c;try{c=ns(Nt(e.env??process.env,n.initConfigPath))}catch(h){return e.stderr.write(h instanceof Et&&h.kind==="missing"?"error: no ~/.lmctl/init.toml found. Run `lmctl init` first, then try quickrun again.\n":"error: "+(h instanceof Error?h.message:String(h))+`
2438
2438
  `),1}let d;try{d=await vr(i,l,a)}catch(h){return e.stderr.write(`error: could not fetch ${i}: ${h instanceof Error?h.message:String(h)}
@@ -2440,11 +2440,11 @@ it is expected.
2440
2440
  `),1}let f=h2(a);if(u2(NA(f),{recursive:!0}),RA(f,u,"utf8"),e.stdout.write(`Wrote ${f}
2441
2441
  `),await yr([f],e)!==0)return e.stderr.write(`error: ${f} failed lint after substitution -- check the values in ~/.lmctl/init.toml.
2442
2442
  `),1;if(r)return e.stdout.write(`Edit ${f} if needed, then run: lmctl seed ${f}
2443
- `),0;let p=await ra([f],e);return p!==0?p:s?0:(n.openTerminal??Zh)([f,"Lead"],e)}async function g2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(xA),0;let r=n.fetchFn??fetch,s=n.cwd??e.cwd??process.cwd();try{if(t.length===0){let m=await AA(`${n_}/index.txt`,r);return e.stdout.write(m.endsWith(`
2443
+ `),0;let p=await ra([f],e);return p!==0?p:s?0:(n.openTerminal??Zh)([f,"Lead"],e)}async function g2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(LA),0;let r=n.fetchFn??fetch,s=n.cwd??e.cwd??process.cwd();try{if(t.length===0){let m=await AA(`${n_}/index.txt`,r);return e.stdout.write(m.endsWith(`
2444
2444
  `)?m:`${m}
2445
2445
  `),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&&r_(wd(s,i))&&m2(wd(s,i)).isDirectory())return _2(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=`${n_}/${l}.lms`;else if(/^https?:\/\//i.test(l))d=l;else if(r_(wd(s,l))||l.includes("/")||l.includes("\\"))u=wd(s,l);else if(/^[a-zA-Z0-9][a-zA-Z0-9_-]*(?:\.lms)?$/.test(l))d=`${n_}/${l.replace(/\.lms$/,"")}.lms`;else throw new Error("Expected a sample name, script URL, or local .lms file.");let f=d?await AA(d,r):f2(u,"utf8");e.stderr.write(`Running ${d??u}
2446
2446
  `);{let m=n.launch??as,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:NA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let _=l2(vd(d2(),"lmctl-quickrun-"));try{let h=vd(_,"download.lms");return RA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{c2(_,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2447
- `),1}}var n_,xA,CA=x(()=>{"use strict";hA();id();ce();rs();ca();un();t_();n_="https://lmctl.com/quickrun",xA=`usage: lmctl quickrun
2447
+ `),1}}var n_,LA,CA=L(()=>{"use strict";hA();id();ce();rs();ca();un();t_();n_="https://lmctl.com/quickrun",LA=`usage: lmctl quickrun
2448
2448
  lmctl quickrun <sample|url|file.lms> [script arguments...]
2449
2449
 
2450
2450
  List current samples from lmctl.com/quickrun/index.txt, or fetch and execute
@@ -2458,7 +2458,7 @@ to the website without a CLI release.
2458
2458
  Bare names always select hosted samples; use ./paths for local scripts or directories.
2459
2459
  Explicit URLs are also accepted. Only run scripts you trust.
2460
2460
  Legacy .lmctl templates still accept --no-seed and --no-terminal.
2461
- `});function OA(t){let e=String(t);return e.length>0&&/^[a-zA-Z0-9_./@=-]+$/.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'"}var DA=x(()=>{"use strict"});var UA={};me(UA,{runHello:()=>w2});import{existsSync as y2,writeFileSync as E2,rmSync as MA}from"node:fs";import{join as $A}from"node:path";async function w2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(T2),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
2461
+ `});function OA(t){let e=String(t);return e.length>0&&/^[a-zA-Z0-9_./@=-]+$/.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'"}var DA=L(()=>{"use strict"});var UA={};me(UA,{runHello:()=>w2});import{existsSync as y2,writeFileSync as E2,rmSync as MA}from"node:fs";import{join as $A}from"node:path";async function w2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(T2),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
2462
2462
  `),2;o=t[T+1],T+=1;continue}if(w.startsWith("-"))return e.stderr.write(`error: unknown option ${w}
2463
2463
  `),2;i.push(w)}if(i.length>1)return e.stderr.write(`error: hello takes one provider
2464
2464
  `),2;r=i[0];let a=new Mn(e,n.ask);try{if(!r){let T=gr(),w=T?[...new Set([T.provider1.provider,T.provider2.provider,T.provider3.provider])]:[];w.length&&e.stdout.write(`Providers from init: ${w.join(", ")}
@@ -2476,7 +2476,7 @@ Continue with this team:
2476
2476
  Send a prompt: lmctl prompt ${y} Lead "your next prompt"
2477
2477
  `),E}function S2(t,e,n){let r=!1,s=/\s/u.test(n)?`"${n}"`:n,o=t.split(`
2478
2478
  `).map(d=>{let u=d.endsWith("\r")?"\r":"",f=u?d.slice(0,-1):d;if(!/^\s*_MEMBER_\s+\S/u.test(f))return d;let m=[...f.matchAll(v2)],p=h=>{let g=m.filter(E=>E[1]===h).at(-1);return g===void 0?void 0:g[2]??g[3]??""};if(p("alias")?.toLowerCase()!=="lead")return d;if(p("provider")!==e)throw new Error(`The hosted ${e} hello sample declares Lead provider=${p("provider")??"(none)"}.`);r=!0;let _=f;for(let h of m.filter(g=>g[1]==="model").reverse()){let g=h.index;_=_.slice(0,g).replace(/\s+$/u,"")+_.slice(g+h[0].length)}return`${_.trimEnd()} model=${s}${u}`});if(!r)throw new Error(`The hosted ${e} hello sample has no Lead to assign a model to.`);let i=o.join(`
2479
- `),a,l;try{a=Rn(t,"hello").members,l=Rn(i,"hello").members}catch{return i}if(!(a.length===l.length&&l.every((d,u)=>{let f=a[u],m=d.alias.toLowerCase()==="lead";return JSON.stringify({...d,model:void 0})===JSON.stringify({...f,model:void 0})&&(m?d.model===n:d.model===f.model)})))throw new Error(`Could not set model=${s} on the Lead of the hosted ${e} hello sample without changing something else.`);return i}var FA,PA,T2,v2,jA=x(()=>{"use strict";ca();id();Oc();rs();Jc();je();un();DA();FA="https://lmctl.com/helloexample",PA=3,T2=`usage: lmctl hello <provider> -p "<prompt>"
2479
+ `),a,l;try{a=Rn(t,"hello").members,l=Rn(i,"hello").members}catch{return i}if(!(a.length===l.length&&l.every((d,u)=>{let f=a[u],m=d.alias.toLowerCase()==="lead";return JSON.stringify({...d,model:void 0})===JSON.stringify({...f,model:void 0})&&(m?d.model===n:d.model===f.model)})))throw new Error(`Could not set model=${s} on the Lead of the hosted ${e} hello sample without changing something else.`);return i}var FA,PA,T2,v2,jA=L(()=>{"use strict";ca();id();Oc();rs();Jc();je();un();DA();FA="https://lmctl.com/helloexample",PA=3,T2=`usage: lmctl hello <provider> -p "<prompt>"
2480
2480
 
2481
2481
  Downloads ${FA}/<provider>.lmctl, saves it as
2482
2482
  <provider>_hello.lmctl in the current directory, seeds it, sends your
@@ -2492,8 +2492,8 @@ An omitted model uses the provider default. Existing teamfiles are preserved.
2492
2492
 
2493
2493
  Example:
2494
2494
  lmctl hello claude -p "hi"
2495
- `;v2=/(\w+)=(?:"([^"]*)"|(\S*))/g});function s_(t){for(let e=t.length-1;e>=0;e-=1){let n=t[e],r=b2.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:I2(n.timestamp,s,o,i,a),reset_time:l,timezone:a,detected_at:n.timestamp.toISOString()}}return null}function I2(t,e,n,r,s){if(!Number.isFinite(t.getTime())||e<1||e>12||n<0||n>59)return null;let o=k2(e,r);try{let i=A2(t,s),a=WA(i.year,i.month,i.day,o,n,s);if(a.getTime()<=t.getTime()){let l=L2(i,1);a=WA(l.year,l.month,l.day,o,n,s)}return a.toISOString()}catch{return null}}function k2(t,e){return e==="am"?t===12?0:t:t===12?12:t+12}function A2(t,e){let n=BA(e,!1).formatToParts(t);return{year:Un(n,"year"),month:Un(n,"month"),day:Un(n,"day")}}function WA(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=R2(new Date(i),o);i=Date.UTC(t,e-1,n,r,s,0,0)-l}return new Date(i)}function R2(t,e){let n=BA(e,!0).formatToParts(t);return Date.UTC(Un(n,"year"),Un(n,"month")-1,Un(n,"day"),Un(n,"hour"),Un(n,"minute"),Un(n,"second"),0)-t.getTime()}function BA(t,e){let n=e?x2:N2,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 Un(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 L2(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 b2,N2,x2,HA=x(()=>{"use strict";b2=/you['\u2019]ve hit your session limit\s*(?:\u00b7|-|:)?\s*resets\s+([0-9]{1,2})(?::([0-9]{2}))?\s*(am|pm)\s*(?:\(([^)]+)\))?/i;N2=new Map,x2=new Map});var nR={};me(nR,{appendIntent:()=>i_,formatAge:()=>fa,formatDuration:()=>Id,resolveIntentLogPath:()=>JA,runStatus:()=>B2,shortIdentity:()=>fn});import{appendFileSync as C2,existsSync as O2,mkdirSync as D2}from"node:fs";import{homedir as M2}from"node:os";import{basename as $2,dirname as VA,isAbsolute as P2,join as F2,resolve as U2}from"node:path";function JA(){return process.env.LMCTL_INTENT_LOG??F2(M2(),".lmctl","recent-intents.log")}function i_(t){try{let e=JA();D2(VA(e),{recursive:!0});let n=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});C2(e,`${n}
2496
- `)}catch{}}async function B2(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(j2),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=le(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 X2(e,r.positionals,{json:s,details:o,since:V(r,"--since")});return a===0&&i_({verb:"status",args:t}),a}if(o)return D(e,"--details only applies with a teamfile argument (lmctl status <teamfile> --details)");let i=dX(V(r,"--since"));if("error"in i)return D(e,i.error);try{let a=e.env??process.env;if(s){let l=await j(e,c=>qA(c,a));ee(e,{schema_version:f_,...l})}else{let l=await j(e,async c=>nX(await qA(c,a),{sinceIso:i.iso}));e.stdout.write(l)}return i_({verb:"status",args:t}),0}catch(a){return D(e,a instanceof Error?a.message:String(a))}}async function X2(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=Zt(H2,{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 uX(t,r.teamfile,n.json,n.details):await gX(t,r.teamfile,r.alias,n.json)}catch(s){return s instanceof _e?D(t,s.message):D(t,`status: ${s instanceof Error?s.message:String(s)}`)}}async function qA(t,e){let n=Np(e,t);if(!n.ok){if(n.reason==="not-found")throw new Error(zr("status",e,t));return await G2(t)}return await q2(t,n.identity,e)}async function q2(t,e,n){let r=Qr(e),s=t.getRootTeam(r.teamfile);if(s===null)throw new Error(zr("status",n,t));let o=zt(s.teamfile_path,t),i=l_(bd(t,{from:r.value})),a=l_(bd(t,{target_teamfile:r.teamfile,target_alias:r.alias})),l=Y2([...a_(t,{from:r.value}),...a_(t,{target_teamfile:r.teamfile,target_alias:r.alias})]);return{scope:"self",identity:r.value,...KA(),team:{name:o.name,teamfile:s.teamfile_path},members:o.members.map(c=>J2(t,s.teamfile_path,c)),activity:{from_me:i.map(c=>c_(c)),to_me:a.map(c=>c_(c))},transcript_harvest:await YA(l)}}function KA(){let t=null;try{t=sw(Ll())}catch{}return{db_path:Ge(),site_name:t}}async function G2(t){let e=t.listRootTeams();return{scope:"db",identity:null,...KA(),teams:e.map(n=>V2(t,n)),activity:l_(bd(t)).map(n=>c_(n)),transcript_harvest:await YA(a_(t))}}function V2(t,e){if(!O2(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=zt(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 J2(t,e,n){let r=n.teamfile===void 0?null:ke(P2(n.teamfile)?n.teamfile:U2(VA(e),n.teamfile),t),s=Jt(t,e,n.alias),o=s.busy&&s.reason==="in-flight"?K2(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 K2(t,e,n,r){let s=r.sender_alias==="operator"?"operator":`${r.sender_teamfile}:${r.sender_alias}`,i=t.db.prepare(`
2495
+ `;v2=/(\w+)=(?:"([^"]*)"|(\S*))/g});function s_(t){for(let e=t.length-1;e>=0;e-=1){let n=t[e],r=b2.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:I2(n.timestamp,s,o,i,a),reset_time:l,timezone:a,detected_at:n.timestamp.toISOString()}}return null}function I2(t,e,n,r,s){if(!Number.isFinite(t.getTime())||e<1||e>12||n<0||n>59)return null;let o=k2(e,r);try{let i=A2(t,s),a=WA(i.year,i.month,i.day,o,n,s);if(a.getTime()<=t.getTime()){let l=x2(i,1);a=WA(l.year,l.month,l.day,o,n,s)}return a.toISOString()}catch{return null}}function k2(t,e){return e==="am"?t===12?0:t:t===12?12:t+12}function A2(t,e){let n=BA(e,!1).formatToParts(t);return{year:Un(n,"year"),month:Un(n,"month"),day:Un(n,"day")}}function WA(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=R2(new Date(i),o);i=Date.UTC(t,e-1,n,r,s,0,0)-l}return new Date(i)}function R2(t,e){let n=BA(e,!0).formatToParts(t);return Date.UTC(Un(n,"year"),Un(n,"month")-1,Un(n,"day"),Un(n,"hour"),Un(n,"minute"),Un(n,"second"),0)-t.getTime()}function BA(t,e){let n=e?L2:N2,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 Un(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 x2(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 b2,N2,L2,HA=L(()=>{"use strict";b2=/you['\u2019]ve hit your session limit\s*(?:\u00b7|-|:)?\s*resets\s+([0-9]{1,2})(?::([0-9]{2}))?\s*(am|pm)\s*(?:\(([^)]+)\))?/i;N2=new Map,L2=new Map});var nR={};me(nR,{appendIntent:()=>i_,formatAge:()=>fa,formatDuration:()=>Id,resolveIntentLogPath:()=>JA,runStatus:()=>B2,shortIdentity:()=>fn});import{appendFileSync as C2,existsSync as O2,mkdirSync as D2}from"node:fs";import{homedir as M2}from"node:os";import{basename as $2,dirname as VA,isAbsolute as P2,join as F2,resolve as U2}from"node:path";function JA(){return process.env.LMCTL_INTENT_LOG??F2(M2(),".lmctl","recent-intents.log")}function i_(t){try{let e=JA();D2(VA(e),{recursive:!0});let n=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});C2(e,`${n}
2496
+ `)}catch{}}async function B2(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(j2),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=le(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 X2(e,r.positionals,{json:s,details:o,since:V(r,"--since")});return a===0&&i_({verb:"status",args:t}),a}if(o)return D(e,"--details only applies with a teamfile argument (lmctl status <teamfile> --details)");let i=dX(V(r,"--since"));if("error"in i)return D(e,i.error);try{let a=e.env??process.env;if(s){let l=await j(e,c=>qA(c,a));ee(e,{schema_version:f_,...l})}else{let l=await j(e,async c=>nX(await qA(c,a),{sinceIso:i.iso}));e.stdout.write(l)}return i_({verb:"status",args:t}),0}catch(a){return D(e,a instanceof Error?a.message:String(a))}}async function X2(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=Zt(H2,{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 uX(t,r.teamfile,n.json,n.details):await gX(t,r.teamfile,r.alias,n.json)}catch(s){return s instanceof _e?D(t,s.message):D(t,`status: ${s instanceof Error?s.message:String(s)}`)}}async function qA(t,e){let n=Np(e,t);if(!n.ok){if(n.reason==="not-found")throw new Error(zr("status",e,t));return await G2(t)}return await q2(t,n.identity,e)}async function q2(t,e,n){let r=Qr(e),s=t.getRootTeam(r.teamfile);if(s===null)throw new Error(zr("status",n,t));let o=zt(s.teamfile_path,t),i=l_(bd(t,{from:r.value})),a=l_(bd(t,{target_teamfile:r.teamfile,target_alias:r.alias})),l=Y2([...a_(t,{from:r.value}),...a_(t,{target_teamfile:r.teamfile,target_alias:r.alias})]);return{scope:"self",identity:r.value,...KA(),team:{name:o.name,teamfile:s.teamfile_path},members:o.members.map(c=>J2(t,s.teamfile_path,c)),activity:{from_me:i.map(c=>c_(c)),to_me:a.map(c=>c_(c))},transcript_harvest:await YA(l)}}function KA(){let t=null;try{t=sw(xl())}catch{}return{db_path:Ge(),site_name:t}}async function G2(t){let e=t.listRootTeams();return{scope:"db",identity:null,...KA(),teams:e.map(n=>V2(t,n)),activity:l_(bd(t)).map(n=>c_(n)),transcript_harvest:await YA(a_(t))}}function V2(t,e){if(!O2(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=zt(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 J2(t,e,n){let r=n.teamfile===void 0?null:ke(P2(n.teamfile)?n.teamfile:U2(VA(e),n.teamfile),t),s=Jt(t,e,n.alias),o=s.busy&&s.reason==="in-flight"?K2(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 K2(t,e,n,r){let s=r.sender_alias==="operator"?"operator":`${r.sender_teamfile}:${r.sender_alias}`,i=t.db.prepare(`
2497
2497
  SELECT * FROM tracked_invocation
2498
2498
  WHERE kind = 'chat'
2499
2499
  AND status = 'running'
@@ -2511,19 +2511,19 @@ Example:
2511
2511
 
2512
2512
  `),assistantTimestamp:eX(s[s.length-1]?.timestamp)}}function eX(t){if(t===void 0)return null;let e=t.getTime();return Number.isFinite(e)?t.toISOString():null}function tX(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 c_(t){let e=tX(t.config_warnings),n={id:t.id,kind:t.kind,origin:t.origin,status:t.status,holder_liveness:er(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:GA(t.result_summary),error:GA(t.error),...e!==void 0?{config_warnings:e}:{}};return t.error!==null&&ZA.set(n,t.error),n}function nX(t,e){return t.scope==="self"?sX(t,e):oX(t,e)}function rX(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 sX(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"?rX(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:"),QA(n,t.transcript_harvest,"self"),n.push(""),n.push("activity from me:"),d_(n,u_(t.activity.from_me,e.sinceIso),"from-me"),n.push(""),n.push("activity to me:"),d_(n,u_(t.activity.to_me,e.sinceIso),"to-me"),n.push(""),n.push(zA(t)),n.join(`
2513
2513
  `)}function oX(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:"),QA(n,t.transcript_harvest,"db"),n.push(""),n.push("recent activity:"),d_(n,u_(t.activity,e.sinceIso),"db"),n.push(""),n.push(zA(t)),n.join(`
2514
- `)}function zA(t){return Yo(t.db_path)}function d_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Sd))iX(t,r,n);eR(t,e.length,Sd,"older")}function QA(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Sd)){let s=n==="db"?` from ${fn(r.from_identity)} -> ${fn(r.target)}`:` -> ${fn(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}`)}eR(t,e.length,Sd,"more transcript harvest rows")}function u_(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 iX(t,e,n){let r=lX(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=ll(ZA.get(e)??"",o_),a=o===null?"":` "${i??tR(o)}"`;if(t.push(` #${e.id} ${aX(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 aX(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.status.toUpperCase()}function lX(t,e){if(e==="from-me")return t.target===null?"":` -> ${fn(t.target)}`;if(e==="to-me")return` from ${fn(t.from_identity)}`;let n=t.target===null?"":` -> ${fn(t.target)}`;return` from ${fn(t.from_identity)}${n}`}function eR(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function GA(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function tR(t){let e=iT(t).replace(/\s+/g," ").trim();return e.length<=o_?e:`${e.slice(0,o_-3)}...`}function cX(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=XA?e:`${e.slice(0,XA-3)}...`}function Id(t){return(0,nt.formatDuration)(t)}function fa(t){return(0,nt.formatRelativeTime)(t)}function fn(t){if(t==="operator")return t;try{let e=Qr(t);return`${$2(e.teamfile)}:${e.alias}`}catch{return t}}function dX(t){if(t===void 0)return{iso:new Date(Date.now()-W2).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 uX(t,e,n,r){let s=await j(t,d=>{let u=ke(e,d),f=zt(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:aa(u,d,new Set,[])}}),o=Lh(s.teamfile),i=o.kind==="repo"?o:null,a=await la(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(po(d.teamfile,d.alias))??ad(),probed:!1,detailLoaded:!1},f=await Nh(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 $e(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)}
2515
- `)}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:s_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:Ch(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:Oh(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(ee(t,{schema_version:f_,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(pX(s.teamName,s.teamfile,o,l,r,c)),0)}function fX(t){return t.sessionid??"(not seeded)"}function mX(t){return t.sessionid===null?"not seeded":ld(t.liveness)}function pX(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: ${xt(n.working.uncommittedTracked)} changed (tracked), ${xt(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}: ${ld(_.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(`
2514
+ `)}function zA(t){return Yo(t.db_path)}function d_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Sd))iX(t,r,n);eR(t,e.length,Sd,"older")}function QA(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Sd)){let s=n==="db"?` from ${fn(r.from_identity)} -> ${fn(r.target)}`:` -> ${fn(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}`)}eR(t,e.length,Sd,"more transcript harvest rows")}function u_(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 iX(t,e,n){let r=lX(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=ll(ZA.get(e)??"",o_),a=o===null?"":` "${i??tR(o)}"`;if(t.push(` #${e.id} ${aX(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 aX(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.status.toUpperCase()}function lX(t,e){if(e==="from-me")return t.target===null?"":` -> ${fn(t.target)}`;if(e==="to-me")return` from ${fn(t.from_identity)}`;let n=t.target===null?"":` -> ${fn(t.target)}`;return` from ${fn(t.from_identity)}${n}`}function eR(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function GA(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function tR(t){let e=iT(t).replace(/\s+/g," ").trim();return e.length<=o_?e:`${e.slice(0,o_-3)}...`}function cX(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=XA?e:`${e.slice(0,XA-3)}...`}function Id(t){return(0,nt.formatDuration)(t)}function fa(t){return(0,nt.formatRelativeTime)(t)}function fn(t){if(t==="operator")return t;try{let e=Qr(t);return`${$2(e.teamfile)}:${e.alias}`}catch{return t}}function dX(t){if(t===void 0)return{iso:new Date(Date.now()-W2).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 uX(t,e,n,r){let s=await j(t,d=>{let u=ke(e,d),f=zt(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:aa(u,d,new Set,[])}}),o=xh(s.teamfile),i=o.kind==="repo"?o:null,a=await la(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(po(d.teamfile,d.alias))??ad(),probed:!1,detailLoaded:!1},f=await Nh(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 $e(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)}
2515
+ `)}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:s_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:Ch(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:Oh(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(ee(t,{schema_version:f_,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(pX(s.teamName,s.teamfile,o,l,r,c)),0)}function fX(t){return t.sessionid??"(not seeded)"}function mX(t){return t.sessionid===null?"not seeded":ld(t.liveness)}function pX(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: ${Lt(n.working.uncommittedTracked)} changed (tracked), ${Lt(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}: ${ld(_.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(`
2516
2516
  `)}
2517
- `}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=KI(_.lastContext??void 0,_.detailLoaded,VI);(h==="n/a"||_.cumulativeTokens==="n/a")&&(d=!0);let g=[(0,nt.escapeCell)(fX(_)),(0,nt.escapeCell)(_.reportPath),(0,nt.escapeCell)(_.provider),(0,nt.escapeCell)(_.observedModel??"(unknown)"),mX(_),xt(_.messageCount),h];a!==null&&g.push(xt(_.activitySinceLastCommit?.messageCount),xt(_.activitySinceLastCommit?.tokens),JI(_.cumulativeTokens)),f.push(g)}let m=["TOTAL","","","","",xt(o)];a!==null&&m.push("",xt(hX(r)),xt(null),xt(_X(r))),f.push(m);let p=(0,nt.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2517
+ `}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=KI(_.lastContext??void 0,_.detailLoaded,VI);(h==="n/a"||_.cumulativeTokens==="n/a")&&(d=!0);let g=[(0,nt.escapeCell)(fX(_)),(0,nt.escapeCell)(_.reportPath),(0,nt.escapeCell)(_.provider),(0,nt.escapeCell)(_.observedModel??"(unknown)"),mX(_),Lt(_.messageCount),h];a!==null&&g.push(Lt(_.activitySinceLastCommit?.messageCount),Lt(_.activitySinceLastCommit?.tokens),JI(_.cumulativeTokens)),f.push(g)}let m=["TOTAL","","","","",Lt(o)];a!==null&&m.push("",Lt(hX(r)),Lt(null),Lt(_X(r))),f.push(m);let p=(0,nt.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2518
2518
  `);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.
2519
2519
  Right after a compaction the last completed turn IS the summarisation request, which carried the
2520
2520
  full pre-compaction prompt \u2014 so this reads the OLD large number while the live context is already
2521
- 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=${xh(_.sessionLimit)}`)}return`${i.join(`
2521
+ 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=${Lh(_.sessionLimit)}`)}return`${i.join(`
2522
2522
  `)}
2523
- `}function hX(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 _X(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 gX(t,e,n,r){let s=await j(t,p=>We(e,n,p)),o;try{o=await $e(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=s_(o.messages),l=(await la(t,[{teamfile:s.teamfile,alias:s.alias}])).get(po(s.teamfile,s.alias))??ad(),c=await Nh(t,{teamfile:s.teamfile,alias:s.alias}),d=Lh(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:Ch(o,u.since),tokens:null},cumulativeTokens:Oh(o)}:{},createdAt:o.createdAt.toISOString(),modifiedAt:o.modifiedAt.toISOString()};if(r)return ee(t,{schema_version:f_,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: ${ld(l)}`),m.push(` CWD: ${o.cwd}`),m.push(` Messages: ${xt(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,nt.formatCount)(o.totalInputTokens)} in / ${(0,nt.formatCount)(o.totalOutputTokens)} out`;f.totalCachedInputTokens!==void 0&&(p+=` (cached: ${(0,nt.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
2524
- compaction it still reports the pre-compaction size (the summarisation request itself).`),i!==null&&m.push(` SessionLimit: LIMITED resets_at=${xh(i)}`),m.push(` Created: ${f.createdAt}`),m.push(` Modified: ${f.modifiedAt}`),t.stdout.write(`${m.join(`
2523
+ `}function hX(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 _X(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 gX(t,e,n,r){let s=await j(t,p=>We(e,n,p)),o;try{o=await $e(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=s_(o.messages),l=(await la(t,[{teamfile:s.teamfile,alias:s.alias}])).get(po(s.teamfile,s.alias))??ad(),c=await Nh(t,{teamfile:s.teamfile,alias:s.alias}),d=xh(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:Ch(o,u.since),tokens:null},cumulativeTokens:Oh(o)}:{},createdAt:o.createdAt.toISOString(),modifiedAt:o.modifiedAt.toISOString()};if(r)return ee(t,{schema_version:f_,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: ${ld(l)}`),m.push(` CWD: ${o.cwd}`),m.push(` Messages: ${Lt(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,nt.formatCount)(o.totalInputTokens)} in / ${(0,nt.formatCount)(o.totalOutputTokens)} out`;f.totalCachedInputTokens!==void 0&&(p+=` (cached: ${(0,nt.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
2524
+ compaction it still reports the pre-compaction size (the summarisation request itself).`),i!==null&&m.push(` SessionLimit: LIMITED resets_at=${Lh(i)}`),m.push(` Created: ${f.createdAt}`),m.push(` Modified: ${f.modifiedAt}`),t.stdout.write(`${m.join(`
2525
2525
  `)}
2526
- `),0}var nt,j2,f_,Sd,W2,o_,XA,H2,ZA,m_=x(()=>{"use strict";nt=Ct(kt(),1);Pt();_t();ce();xc();bn();ji();Qt();Qe();Dh();Cl();ln();HA();_l();j2=`usage: lmctl status [--json] [--since <duration|ISO8601>]
2526
+ `),0}var nt,j2,f_,Sd,W2,o_,XA,H2,ZA,m_=L(()=>{"use strict";nt=Ct(kt(),1);Pt();_t();ce();Lc();bn();ji();Qt();Qe();Dh();Cl();ln();HA();_l();j2=`usage: lmctl status [--json] [--since <duration|ISO8601>]
2527
2527
  lmctl status <teamfile> [--details] [--json]
2528
2528
  lmctl status <teamfile> <alias> [--json]
2529
2529
 
@@ -2542,21 +2542,21 @@ With a teamfile and an alias: single-member deep view (session detail, token
2542
2542
  breakdown, liveness with terminal-lock/in-flight holder info).
2543
2543
 
2544
2544
  --json emits { schema_version: 2, scope: 'self'|'db'|'team'|'member', ... }.
2545
- `,f_=2,Sd=5,W2=24*60*60*1e3,o_=72,XA=80;H2={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};ZA=new WeakMap});import{isAbsolute as yX,resolve as rR,join as sR}from"node:path";function iR(t){let e=oR.get(t);if(!e)throw Error("Unknown context");return e.dal()}function lR(t){return t!==null&&typeof t=="object"&&aR.has(t)}function cR(t){try{if(!t||typeof t!="object"||Array.isArray(t))return dt("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 dt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!yX(e.cwd))return dt("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 dt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return dt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return dt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return dt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return dt("invalid_argument","pid must be a positive integer");let s=rR(e.cwd),o=r.LMCTL_HOME||(r.HOME?sR(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?sR(o,"state.db"):void 0)))return dt("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(es(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:rR(s,Ge(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(es(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);for(let E of[...f])try{E.finalizeSync(_),g.released++,f.delete(E)}catch(y){h.push(es(y))}return u.abort(_),h.length||m(h),g}});return oR.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=qe({path:p.dbPath})}}),aR.add(p),EX.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return dt("invalid_argument","Invalid context: "+es(e))}}var oR,EX,aR,kd=x(()=>{"use strict";Ft();bn();jc();oR=new WeakMap;EX=new WeakMap,aR=new WeakSet});var Sr,hR,Pre,Fre,Ure,jre,Wre,fe,p_,mn,Ad,_o,Rd,xd,Nd,dR,uR,fR,go,TX,mR,pR,_R,h_=x(()=>{"use strict";Sr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Sr(e);Object.freeze(t)}return t},hR=Sr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal"]),Pre=Sr({status:"string",error:"string|null",code:"ErrorCode?"}),Fre=Sr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),Ure=Sr(["Provider1.Provider","Provider1.Model1","Provider1.Model2","Provider1.Model3","Provider2.Provider","Provider2.Model1","Provider2.Model2","Provider2.Model3","Provider3.Provider","Provider3.Model1","Provider3.Model2","Provider3.Model3"]),jre=Sr(["Provider1","Provider2","Provider3"]),Wre=Sr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),fe={name:"ctx",type:"context"},p_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},mn={name:"teamfile",type:"string"},Ad={name:"alias",type:"string"},_o={name:"prompt",type:"string"},Rd={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"}]},xd=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],Nd={name:"options",type:"map",optional:!0,keys:xd},dR={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},uR={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},fR={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},go={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},TX=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],mR={name:"options",type:"map",optional:!0,keys:TX},pR={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},_R=Sr([{name:"resolveProfilePath",implemented:!0,params:[fe,p_],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[fe,p_],statuses:["ok","error"],results:{error:"string|null",profile:"{path,raw,config}",values:"{Provider1..3,Model1..3,Directory,NonInteractive}",path:"string?",line:"number?",column:"number?"},effects:["file-read"],summary:"Read and validate the complete init profile without discovery or writes."},{name:"profileValues",implemented:!0,params:[{name:"config",type:"map"}],statuses:["ok","error"],results:{error:"string|null",Provider1:"string",Provider2:"string",Provider3:"string",Model1:"string",Model2:"string",Model3:"string"},effects:[],summary:"Validate and map slots to first-model environment values."},{name:"readPrompts",implemented:!0,params:[fe,{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:[fe,mn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[mn]}},{name:"resolveMember",implemented:!0,params:[fe,mn,Ad],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:[mn,Ad]}},{name:"lintTeam",implemented:!0,params:[fe,mn],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:[mn]}},{name:"seedTeam",implemented:!0,params:[fe,mn,dR],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:[mn,dR]}},{name:"promptAgent",implemented:!0,params:[fe,Rd,_o,Nd],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...pR,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Rd,_o,Nd]}},{name:"promptMember",implemented:!0,params:[fe,{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"},...xd]}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn a team member through native team admission.",scriptBinding:{name:"lm_prompt",params:[mn,Ad,_o,{name:"options",type:"map",optional:!0,keys:[...xd,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[fe,{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:[fe,go,fR],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:[Rd,{...fR,optional:!0}]}},{name:"getSession",implemented:!0,params:[fe,go],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:[go]}},{name:"reserveSession",implemented:!0,params:[fe,go],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:[fe,go,{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:[fe,{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"},...xd]}],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:[fe,{name:"batch",type:"BatchRef"},_o,{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:[fe,{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:[fe,uR],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:[uR]}},{name:"openTerminal",implemented:!0,params:[fe,{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:[mn,Ad]}},{name:"sessionAdmission",implemented:!0,params:[fe,go],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:[fe,{name:"reservation",type:"SessionReservation"},Rd,_o,Nd],statuses:["ok","busy","stalled","empty","error"],results:{...pR,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[fe,{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:[fe,{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:[fe,{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"}]},Nd],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:[fe,{name:"session",type:"NativeSessionRef"},_o],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:[fe,{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:[fe,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Critical synchronous native conversation lease release."},{name:"loadProperties",implemented:!0,params:[fe,p_],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:[fe,mR],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:[mR]}}])});function gR(t){if(!lR(t))return dt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return dt("cancelled","Context is closed")}function yR(t){return _R.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var ER=x(()=>{"use strict";h_();kd();jc()});import{isAbsolute as wX,resolve as vX}from"node:path";function Cd(t){return Number.isFinite(t)&&Math.abs(t)<=SX}function bX(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(hR.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 y_(t,e=Date.now()){if(t===void 0)return{windowMs:TR};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||!Cd(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!Cd(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return Cd(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function Ld(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function g_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return __;let s=e.get(n);if(s===void 0){try{s=Se(n)}catch{s=null}e.set(n,s)}return s===null?__:gl(s,r)?.model??__}async function wR(t,e={}){let n=gR(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=yR("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=TR;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!Cd(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=y_(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=iR(t),i=e?.teamfile!==void 0?wX(e.teamfile)?e.teamfile:vX(t.cwd,e.teamfile):void 0,a=i!==void 0?ke(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=er(y),w=r-new Date(y.started_at).getTime(),v={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:Ld(y),model:g_(y,u),started_at:y.started_at,parent_invocation_id:y.parent_invocation_id};if(T==="dead"){if(yf(o,y)!==null)continue;m.push({...v,stale_for_ms:w})}else f.push({...v,running_for_ms:w,holder_liveness:T??"unknown"})}let p=new Set(d.map(Ld).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=Ld(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:g_(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(v=>!y.has(v.id)&&c(v));if(w.length===0)break;T=[];for(let v of w){y.add(v.id),T.push(v.id);let b=Ld(v);E.push({id:v.id,kind:v.kind,origin:v.origin,from_identity:v.from_identity,target:b,model:g_(v,u),status:v.status,started_at:v.started_at,ended_at:v.ended_at,idle_ms:r-new Date(v.ended_at).getTime(),ran_ms:new Date(v.ended_at).getTime()-new Date(v.started_at).getTime(),error:v.error,parent_invocation_id:v.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:bX(o),running:[],dead:[],idle:[]}}}var TR,SX,__,vR=x(()=>{"use strict";kd();ER();h_();Pt();Al();je();Qt();TR=24*60*60*1e3,SX=864e13;__="default"});var RR={};me(RR,{_setRunningWatchMaxTicksForTests:()=>AX,runRunning:()=>$X});import{resolve as IX}from"node:path";function AX(t){T_=t??void 0}function NX(t){let e=t.split(`
2546
- `,1)[0];return e.length<=w_?e:`${e.slice(0,w_)}\u2026`}function v_(t){return t.target!==null?fn(t.target):t.from_identity}function bR(t){return[(0,Lt.escapeCell)(v_(t)),t.kind,"running",t.holder_liveness,(0,Lt.escapeCell)(t.model),fa(t.started_at)]}function IR(t){return[(0,Lt.escapeCell)(v_(t)),t.kind,"DEAD","",(0,Lt.escapeCell)(t.model),`stale ${fa(t.started_at)}, holder process confirmed dead`]}function kR(t){let e=`ran ${Id(t.ran_ms)}, idle ${fa(t.ended_at)}`;return t.status==="error"&&t.error!==null&&t.error!==""&&(e+=` \u2014 ${(0,Lt.escapeCell)(ll(t.error,w_)??NX(t.error))}`),[(0,Lt.escapeCell)(v_(t)),t.kind,t.status,"",(0,Lt.escapeCell)(t.model),e]}function E_(t){return t.filter(e=>e!=="").join(" ")}function AR(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 LX(t){let{roots:e,childrenByParent:n}=AR(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 CX(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}=AR(r),i=a=>({...a,children:(o.get(a.id)??[]).map(i)});return s.map(i)}function OX(t,e){return e?{schema_version:SR,tree:CX(t.running,t.dead,t.idle)}:{schema_version:SR,running:t.running,dead:t.dead,idle:t.idle}}function DX(t){let e=[...t.running.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:E_(bR(r))})),...t.dead.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:E_(IR(r))})),...t.idle.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:E_(kR(r))}))],n=LX(e);return`${n.length>0?n.join(`
2545
+ `,f_=2,Sd=5,W2=24*60*60*1e3,o_=72,XA=80;H2={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};ZA=new WeakMap});import{isAbsolute as yX,resolve as rR,join as sR}from"node:path";function iR(t){let e=oR.get(t);if(!e)throw Error("Unknown context");return e.dal()}function lR(t){return t!==null&&typeof t=="object"&&aR.has(t)}function cR(t){try{if(!t||typeof t!="object"||Array.isArray(t))return dt("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 dt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!yX(e.cwd))return dt("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 dt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return dt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return dt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return dt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return dt("invalid_argument","pid must be a positive integer");let s=rR(e.cwd),o=r.LMCTL_HOME||(r.HOME?sR(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?sR(o,"state.db"):void 0)))return dt("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(es(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:rR(s,Ge(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(es(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);for(let E of[...f])try{E.finalizeSync(_),g.released++,f.delete(E)}catch(y){h.push(es(y))}return u.abort(_),h.length||m(h),g}});return oR.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=qe({path:p.dbPath})}}),aR.add(p),EX.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return dt("invalid_argument","Invalid context: "+es(e))}}var oR,EX,aR,kd=L(()=>{"use strict";Ft();bn();jc();oR=new WeakMap;EX=new WeakMap,aR=new WeakSet});var Sr,hR,Pre,Fre,Ure,jre,Wre,fe,p_,mn,Ad,_o,Rd,Ld,Nd,dR,uR,fR,go,TX,mR,pR,_R,h_=L(()=>{"use strict";Sr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Sr(e);Object.freeze(t)}return t},hR=Sr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal"]),Pre=Sr({status:"string",error:"string|null",code:"ErrorCode?"}),Fre=Sr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),Ure=Sr(["Provider1.Provider","Provider1.Model1","Provider1.Model2","Provider1.Model3","Provider2.Provider","Provider2.Model1","Provider2.Model2","Provider2.Model3","Provider3.Provider","Provider3.Model1","Provider3.Model2","Provider3.Model3"]),jre=Sr(["Provider1","Provider2","Provider3"]),Wre=Sr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),fe={name:"ctx",type:"context"},p_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},mn={name:"teamfile",type:"string"},Ad={name:"alias",type:"string"},_o={name:"prompt",type:"string"},Rd={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"}]},Ld=[{name:"permissionMode",type:"string",values:["yolo","plan"]},{name:"idleTimeoutMs",type:"number"}],Nd={name:"options",type:"map",optional:!0,keys:Ld},dR={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},uR={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},fR={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},go={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},TX=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],mR={name:"options",type:"map",optional:!0,keys:TX},pR={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},_R=Sr([{name:"resolveProfilePath",implemented:!0,params:[fe,p_],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[fe,p_],statuses:["ok","error"],results:{error:"string|null",profile:"{path,raw,config}",values:"{Provider1..3,Model1..3,Directory,NonInteractive}",path:"string?",line:"number?",column:"number?"},effects:["file-read"],summary:"Read and validate the complete init profile without discovery or writes."},{name:"profileValues",implemented:!0,params:[{name:"config",type:"map"}],statuses:["ok","error"],results:{error:"string|null",Provider1:"string",Provider2:"string",Provider3:"string",Model1:"string",Model2:"string",Model3:"string"},effects:[],summary:"Validate and map slots to first-model environment values."},{name:"readPrompts",implemented:!0,params:[fe,{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:[fe,mn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[mn]}},{name:"resolveMember",implemented:!0,params:[fe,mn,Ad],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:[mn,Ad]}},{name:"lintTeam",implemented:!0,params:[fe,mn],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:[mn]}},{name:"seedTeam",implemented:!0,params:[fe,mn,dR],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:[mn,dR]}},{name:"promptAgent",implemented:!0,params:[fe,Rd,_o,Nd],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...pR,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Rd,_o,Nd]}},{name:"promptMember",implemented:!0,params:[fe,{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"},...Ld]}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn a team member through native team admission.",scriptBinding:{name:"lm_prompt",params:[mn,Ad,_o,{name:"options",type:"map",optional:!0,keys:[...Ld,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[fe,{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:[fe,go,fR],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:[Rd,{...fR,optional:!0}]}},{name:"getSession",implemented:!0,params:[fe,go],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:[go]}},{name:"reserveSession",implemented:!0,params:[fe,go],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:[fe,go,{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:[fe,{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"},...Ld]}],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:[fe,{name:"batch",type:"BatchRef"},_o,{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:[fe,{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:[fe,uR],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:[uR]}},{name:"openTerminal",implemented:!0,params:[fe,{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:[mn,Ad]}},{name:"sessionAdmission",implemented:!0,params:[fe,go],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:[fe,{name:"reservation",type:"SessionReservation"},Rd,_o,Nd],statuses:["ok","busy","stalled","empty","error"],results:{...pR,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[fe,{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:[fe,{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:[fe,{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"}]},Nd],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:[fe,{name:"session",type:"NativeSessionRef"},_o],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:[fe,{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:[fe,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Critical synchronous native conversation lease release."},{name:"loadProperties",implemented:!0,params:[fe,p_],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:[fe,mR],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:[mR]}}])});function gR(t){if(!lR(t))return dt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return dt("cancelled","Context is closed")}function yR(t){return _R.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var ER=L(()=>{"use strict";h_();kd();jc()});import{isAbsolute as wX,resolve as vX}from"node:path";function Cd(t){return Number.isFinite(t)&&Math.abs(t)<=SX}function bX(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(hR.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 y_(t,e=Date.now()){if(t===void 0)return{windowMs:TR};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||!Cd(e-l)?{error:`invalid --since duration: ${t} (cutoff out of representable date range)`}:{windowMs:l}}let r=Date.parse(t);if(!Number.isFinite(r)||!Cd(r))return{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`};let s=Math.max(0,e-r);return Cd(e-s)?{windowMs:s}:{error:`invalid --since value: ${t} (cutoff out of representable date range)`}}function xd(t){return t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`}function g_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return __;let s=e.get(n);if(s===void 0){try{s=Se(n)}catch{s=null}e.set(n,s)}return s===null?__:gl(s,r)?.model??__}async function wR(t,e={}){let n=gR(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=yR("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=TR;if(e?.since!==void 0)if(typeof e.since=="number"){if(!Number.isFinite(e.since)||e.since<0||!Cd(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=y_(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=iR(t),i=e?.teamfile!==void 0?wX(e.teamfile)?e.teamfile:vX(t.cwd,e.teamfile):void 0,a=i!==void 0?ke(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=er(y),w=r-new Date(y.started_at).getTime(),v={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:xd(y),model:g_(y,u),started_at:y.started_at,parent_invocation_id:y.parent_invocation_id};if(T==="dead"){if(yf(o,y)!==null)continue;m.push({...v,stale_for_ms:w})}else f.push({...v,running_for_ms:w,holder_liveness:T??"unknown"})}let p=new Set(d.map(xd).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=xd(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:g_(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(v=>!y.has(v.id)&&c(v));if(w.length===0)break;T=[];for(let v of w){y.add(v.id),T.push(v.id);let b=xd(v);E.push({id:v.id,kind:v.kind,origin:v.origin,from_identity:v.from_identity,target:b,model:g_(v,u),status:v.status,started_at:v.started_at,ended_at:v.ended_at,idle_ms:r-new Date(v.ended_at).getTime(),ran_ms:new Date(v.ended_at).getTime()-new Date(v.started_at).getTime(),error:v.error,parent_invocation_id:v.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:bX(o),running:[],dead:[],idle:[]}}}var TR,SX,__,vR=L(()=>{"use strict";kd();ER();h_();Pt();Al();je();Qt();TR=24*60*60*1e3,SX=864e13;__="default"});var RR={};me(RR,{_setRunningWatchMaxTicksForTests:()=>AX,runRunning:()=>$X});import{resolve as IX}from"node:path";function AX(t){T_=t??void 0}function NX(t){let e=t.split(`
2546
+ `,1)[0];return e.length<=w_?e:`${e.slice(0,w_)}\u2026`}function v_(t){return t.target!==null?fn(t.target):t.from_identity}function bR(t){return[(0,xt.escapeCell)(v_(t)),t.kind,"running",t.holder_liveness,(0,xt.escapeCell)(t.model),fa(t.started_at)]}function IR(t){return[(0,xt.escapeCell)(v_(t)),t.kind,"DEAD","",(0,xt.escapeCell)(t.model),`stale ${fa(t.started_at)}, holder process confirmed dead`]}function kR(t){let e=`ran ${Id(t.ran_ms)}, idle ${fa(t.ended_at)}`;return t.status==="error"&&t.error!==null&&t.error!==""&&(e+=` \u2014 ${(0,xt.escapeCell)(ll(t.error,w_)??NX(t.error))}`),[(0,xt.escapeCell)(v_(t)),t.kind,t.status,"",(0,xt.escapeCell)(t.model),e]}function E_(t){return t.filter(e=>e!=="").join(" ")}function AR(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 xX(t){let{roots:e,childrenByParent:n}=AR(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 CX(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}=AR(r),i=a=>({...a,children:(o.get(a.id)??[]).map(i)});return s.map(i)}function OX(t,e){return e?{schema_version:SR,tree:CX(t.running,t.dead,t.idle)}:{schema_version:SR,running:t.running,dead:t.dead,idle:t.idle}}function DX(t){let e=[...t.running.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:E_(bR(r))})),...t.dead.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:E_(IR(r))})),...t.idle.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:E_(kR(r))}))],n=xX(e);return`${n.length>0?n.join(`
2547
2547
  `):" none"}
2548
- `}function MX(t,e){let n=[{title:`Running (${t.running.length}):`,rows:t.running.map(bR)},{title:`Dead (reclaimable) (${t.dead.length}):`,rows:t.dead.map(IR)},{title:`Idle, finished in the last ${Id(e)} (${t.idle.length}):`,rows:t.idle.map(kR)}],r=["MEMBER","KIND","STATE","LIVENESS","MODEL","TIMING"],s=(0,Lt.measureColumns)([{rows:[],headers:r},...n.map(a=>a.rows)],{max:xX}),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,Lt.renderGrid)(a.rows,{widths:s,margin:2,...c?{headers:r}:{}}))}),`${i.join(`
2548
+ `}function MX(t,e){let n=[{title:`Running (${t.running.length}):`,rows:t.running.map(bR)},{title:`Dead (reclaimable) (${t.dead.length}):`,rows:t.dead.map(IR)},{title:`Idle, finished in the last ${Id(e)} (${t.idle.length}):`,rows:t.idle.map(kR)}],r=["MEMBER","KIND","STATE","LIVENESS","MODEL","TIMING"],s=(0,xt.measureColumns)([{rows:[],headers:r},...n.map(a=>a.rows)],{max:LX}),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,xt.renderGrid)(a.rows,{widths:s,margin:2,...c?{headers:r}:{}}))}),`${i.join(`
2549
2549
  `)}
2550
2550
  `}async function $X(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${RX}
2551
2551
  `),0;let n=le(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=y_(V(n,"--since"));if("error"in l)return D(e,l.error);let c=V(n,"--watch-interval"),d=c===void 0?kX: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=()=>j(e,async f=>{let m=cR({cwd:IX(e.cwd??process.cwd()),env:e.env??process.env,dal:f,dbPath:Fe(e)});if(m.status!=="ok")return D(e,m.error);let p=await wR(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 _=OX(p,s);return o?e.stdout.write(`${JSON.stringify(_)}
2552
2552
  `):ee(e,_),0}return e.stdout.write(s?DX(p):MX(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)}
2553
- `)}finally{p=!1}m+=1,T_!==void 0&&m>=T_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var Lt,SR,kX,T_,RX,w_,xX,NR=x(()=>{"use strict";Lt=Ct(kt(),1);kd();vR();ce();m_();_t();SR=3,kX=2;RX=["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(`
2554
- `),w_=120;xX=[26,void 0,void 0,void 0,24,void 0]});var CR={};me(CR,{runPrices:()=>jX});import{existsSync as PX}from"node:fs";import{resolve as xR}from"node:path";function Od(t,e,n="price snapshot unavailable"){return e?ee(t,{schema_version:1,status:"unavailable",reason:n}):t.stdout.write(`unavailable: ${n}
2555
- `),0}function FX(t){let e=t?.code;return typeof e=="string"&&/SQLITE_(BUSY|LOCKED|READONLY|CANTOPEN)/.test(e)}function LR(t){return t.dal!==void 0?{db:t.dal,owned:!1}:{db:qe({path:Fe(t),recover:!1}),owned:!0}}function UX(t){if(t.owned)try{t.db.close()}catch{}}async function jX(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Dd),0;let n=t[0];return n!=="update"&&n!=="show"?(e.stderr.write(`error: expected update or show
2553
+ `)}finally{p=!1}m+=1,T_!==void 0&&m>=T_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var xt,SR,kX,T_,RX,w_,LX,NR=L(()=>{"use strict";xt=Ct(kt(),1);kd();vR();ce();m_();_t();SR=3,kX=2;RX=["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(`
2554
+ `),w_=120;LX=[26,void 0,void 0,void 0,24,void 0]});var CR={};me(CR,{runPrices:()=>jX});import{existsSync as PX}from"node:fs";import{resolve as LR}from"node:path";function Od(t,e,n="price snapshot unavailable"){return e?ee(t,{schema_version:1,status:"unavailable",reason:n}):t.stdout.write(`unavailable: ${n}
2555
+ `),0}function FX(t){let e=t?.code;return typeof e=="string"&&/SQLITE_(BUSY|LOCKED|READONLY|CANTOPEN)/.test(e)}function xR(t){return t.dal!==void 0?{db:t.dal,owned:!1}:{db:qe({path:Fe(t),recover:!1}),owned:!0}}function UX(t){if(t.owned)try{t.db.close()}catch{}}async function jX(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Dd),0;let n=t[0];return n!=="update"&&n!=="show"?(e.stderr.write(`error: expected update or show
2556
2556
  ${Dd}`),2):n==="update"?WX(t.slice(1),e):BX(t.slice(1),e)}async function WX(t,e){let n=le(t,["--aliases"],["--json"]);if(n.error||n.positionals.length>1)return e.stderr.write(`error: ${n.error??"update accepts at most one FILE"}
2557
- ${Dd}`),2;let r=z(n,"--json"),s=n.positionals[0],o=V(n,"--aliases"),i;try{if(s!==void 0){let l=xR(e.cwd??process.cwd(),s),c=o===void 0?void 0:xR(e.cwd??process.cwd(),o),d=tf(l,c);i=LR(e);let u=nf(i.db.db,d);return r?ee(e,{...S_(Os(i.db.db),e.env??process.env),status:u}):e.stdout.write(`${u}
2557
+ ${Dd}`),2;let r=z(n,"--json"),s=n.positionals[0],o=V(n,"--aliases"),i;try{if(s!==void 0){let l=LR(e.cwd??process.cwd(),s),c=o===void 0?void 0:LR(e.cwd??process.cwd(),o),d=tf(l,c);i=xR(e);let u=nf(i.db.db,d);return r?ee(e,{...S_(Os(i.db.db),e.env??process.env),status:u}):e.stdout.write(`${u}
2558
2558
  `),0}if(o!==void 0)return e.stderr.write(`error: --aliases requires FILE
2559
- `),2;i=LR(e);let a=await rf(i.db.db,{env:e.env??process.env,force:!0});return r?ee(e,{...S_(a.snapshot,e.env??process.env),status:a.status}):e.stdout.write(`${a.status}
2559
+ `),2;i=xR(e);let a=await rf(i.db.db,{env:e.env??process.env,force:!0});return r?ee(e,{...S_(a.snapshot,e.env??process.env),status:a.status}):e.stdout.write(`${a.status}
2560
2560
  `),0}catch(a){return FX(a)?(r?ee(e,{schema_version:1,status:"deferred",reason:"database busy or read-only"}):e.stdout.write(`deferred
2561
2561
  `),0):(e.stderr.write(`error: ${a instanceof Error?a.message:String(a)}
2562
2562
  `),1)}finally{i!==void 0&&UX(i)}}function S_(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>Ss(e)/1e3}}async function BX(t,e){let n=le(t,["--provider"],["--json"]);if(n.error||n.positionals.length>1)return e.stderr.write(`error: ${n.error??"show accepts at most one MODEL"}
@@ -2575,7 +2575,7 @@ input: ${String(y.rates.input_per_1m_tokens??"n/a")}
2575
2575
  output: ${String(y.rates.output_per_1m_tokens??"n/a")}
2576
2576
  cache read: ${String(y.rates.input_cache_read_per_1m_tokens??"n/a")}
2577
2577
  cache write: ${String(y.rates.input_cache_write_per_1m_tokens??"n/a")}
2578
- `),y.resolution.kind==="unknown"||y.resolution.kind==="unresolved"||y.resolution.kind==="wrong-provider"||y.resolution.kind==="no-catalog"?1:0}catch(a){return Od(e,r,a instanceof Error?a.message:"database unavailable")}finally{if(!i)try{o.close()}catch{}}}var Dd,OR=x(()=>{"use strict";Ft();ga();ml();$r();En();ce();ce();Dd=`usage: lmctl prices <update|show> [MODEL|FILE] [options]
2578
+ `),y.resolution.kind==="unknown"||y.resolution.kind==="unresolved"||y.resolution.kind==="wrong-provider"||y.resolution.kind==="no-catalog"?1:0}catch(a){return Od(e,r,a instanceof Error?a.message:"database unavailable")}finally{if(!i)try{o.close()}catch{}}}var Dd,OR=L(()=>{"use strict";Ft();ga();ml();$r();En();ce();ce();Dd=`usage: lmctl prices <update|show> [MODEL|FILE] [options]
2579
2579
 
2580
2580
  update [FILE] [--aliases FILE] [--json]
2581
2581
  Load JSON catalog or JSONL records plus sibling aliases.json atomically.
@@ -2585,18 +2585,18 @@ cache write: ${String(y.rates.input_cache_write_per_1m_tokens??"n/a")}
2585
2585
  Read the stored snapshot without files/network, or show its source and age.
2586
2586
  Rates are base-tier USD per million; 1-hour write blends need turn counters.
2587
2587
  `});function rt(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 pn(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return rt(e==="percent"?n/100:n)}function DR(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 MR(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function $R(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 PR(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 yo(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 XX)n=n.replace(r,"***REDACTED***");return n}function wt(t){let e=rt(t.used_fraction),n=rt(t.remaining_fraction),r=t.resets_at==null?MR(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?DR(r):DR(MR(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:rt(1-n)),remaining_fraction:n??(e===null?null:rt(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 He(t,e,n={}){let r={$schema:HX,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 ut(t,e,n,r,s,o=[],i){return He(t,e,{source:s??null,reason:n,...r==null?{}:{detail:yo(r,o)},...i==null?{}:{retry_after_seconds:i}})}function FR(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 vt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=yo(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:
2588
- ${o}`)}function Eo(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=yo(r,n);return{...t,detail:s,provider_message:s}}var HX,XX,jn=x(()=>{"use strict";HX="https://lmctl.com/schemas/lmratelimit-v1.json";XX=[/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 qX}from"node:child_process";import{readdirSync as GX,readFileSync as VX}from"node:fs";import{join as JX}from"node:path";function rq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function sq(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 oq(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 iq(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=oq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=rt(i/100);n.push(wt({bucket_id:`${sq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:rt(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 ma(t,e,n){return ut("agy","provider_unavailable",t,e,"agy_cli_print")}function aq(t,e,n={}){try{let r=eq(Math.max(t,60)*1e3,rq(e));if(vt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return ma("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return ma("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return ma("cli_failed",r.error.message,t);let s=iq(r.stdout??"");return s.length===0?ma("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):He("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return ma("cli_failed",r instanceof Error?r.message:String(r),t)}}function WR(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 lq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=WR(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[UR],t[jR],-1);try{for(let s of GX("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of VX(JX("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[UR],o[jR],Number(s))}catch{}}catch{}return e}function cq(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=pn(l.remainingFraction,"fraction");r.push(wt({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:PR(l.window),used_fraction:c===null?null:rt(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??""))),He("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function dq(t,e,n={}){try{let s=nq(e).map(([a,l,c])=>[WR(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ut("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 tq(`http://${a}${KX}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(vt(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=cq(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 ut("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 ut("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function BR(t){let e=await dq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=aq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ut("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 UR,jR,KX,YX,zX,QX,ZX,eq,tq,nq,HR=x(()=>{"use strict";jn();jn();UR="ANTIGRAVITY_LS_ADDRESS",jR="ANTIGRAVITY_CSRF_TOKEN",KX="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",YX=["-p","/usage"],zX=(t,e)=>{let n=qX("agy",YX,{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}},QX=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()}},ZX=t=>lq(t),eq=zX,tq=QX,nq=ZX});import{randomUUID as GR}from"node:crypto";import{mkdirSync as uq,readFileSync as b_,realpathSync as fq,renameSync as mq,rmSync as I_,statSync as XR,writeFileSync as VR}from"node:fs";import{homedir as pq}from"node:os";import{join as k_}from"node:path";import{setTimeout as hq}from"node:timers/promises";function N_(t){return k_(t.CLAUDE_CONFIG_DIR??k_(t.HOME??pq(),".claude"),".credentials.json")}function A_(t){let e=JSON.parse(b_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function R_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function JR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=N_(t);try{let n=R_(A_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:fq(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 Md(t){return typeof t.expiresAt=="number"&&Date.now()+yq>=t.expiresAt}function qR(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Eq(t,e){let n=`${t}.lmctl-refresh.lock`,r=k_(n,"owner.json"),s=GR();for(;;){e.throwIfAborted();try{uq(n,{mode:448});try{VR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw I_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(b_(r,"utf8")).token===s&&I_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(b_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-XR(n).mtimeMs>6e4}catch{try{i=Date.now()-XR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await hq(50,void 0,{signal:e})}}}async function KR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Eq(t.path,e);try{let r=R_(A_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!qR(r,t.oauth)&&!Md(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(gq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:_q})});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=A_(t.path),l=R_(a);if(!l||!qR(r,l)){if(l&&typeof l.accessToken=="string"&&!Md(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}.${GR()}.tmp`;try{VR(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),mq(d,t.path)}finally{I_(d,{force:!0})}return c}finally{n()}}var _q,gq,yq,YR=x(()=>{"use strict";_q="9d1c250a-e61b-44d9-88ed-5944d1962f5e",gq="https://console.anthropic.com/v1/oauth/token",yq=3e5});import{spawnSync as ZR}from"node:child_process";function vq(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 eN(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Sq(t){try{let e=ZR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:eN(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Bt(t,e,n,r="claude_oauth_api",s){return ut("claude",t,e,n,r,void 0,s)}function bq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function Iq(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 Aq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=kq.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(wt({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:pn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:Iq(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 Rq(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 Nq(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=pn(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 QR(t,e,n,r={}){try{let s=ZR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:eN(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";vt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Aq(o);if(!i.length)return;let a=Rq(o);return He("claude",Xe.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 tN({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=JR(e);if(s.error==="not_claude_ai_subscriber")return Bt(Xe.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Bt(Xe.unavailable,"credentials_missing",`credentials file not found: ${N_(e)}`);if(s.error)return Bt(Xe.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(zR))return Bt(Xe.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${zR} 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 KR({...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 Bt(Xe.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Bt(Xe.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 v=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Bt(v?Xe.expired:Xe.unavailable,v?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${v?"; renew Claude login":"; try again later"}`)}};if(Md(o)){let T=await E();if(T)return T}let y=()=>fetch(`${Tq}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":wq,"Content-Type":"application/json","User-Agent":Sq(e)},signal:a.signal});if(c=await y(),d=await c.text(),vt({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(),vt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await QR(o,e,t,{debug:n,onRawResponse:r});return E||Bt(Xe.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>Eo(Bt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Xe.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Xe.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=bq(c.headers),E=await QR(o,e,t,{debug:n,onRawResponse:r});return E||u(Xe.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Xe.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Bt(Xe.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Bt(Xe.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=vq(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[wt({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:pn(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"?[]:[wt({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:pn(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=Nq(m.spend,m.extra_usage);return He("claude",Xe.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 Tq,wq,zR,Xe,kq,nN=x(()=>{"use strict";jn();YR();jn();Tq="https://api.anthropic.com",wq="oauth-2025-04-20",zR="user:profile";Xe={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};kq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as oN}from"node:crypto";import{mkdirSync as xq,readFileSync as x_,realpathSync as Lq,renameSync as Cq,rmSync as L_,statSync as rN,writeFileSync as iN}from"node:fs";import{homedir as Oq}from"node:os";import{join as C_}from"node:path";import{setTimeout as Dq}from"node:timers/promises";function pa(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function D_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||C_(t.HOME||Oq(),".codex");return C_(e,"auth.json")}function O_(t){let e=pa(JSON.parse(x_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function aN(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=D_(t);try{let n=pa(O_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:Lq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function sN(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 Pq(t,e){let n=`${t}.lmctl-refresh.lock`,r=C_(n,"owner.json"),s=oN();for(;;){e.throwIfAborted();try{xq(n,{mode:448});try{iN(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw L_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(x_(r,"utf8")).token===s&&L_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(x_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-rN(n).mtimeMs>6e4}catch{try{i=Date.now()-rN(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Dq(50,void 0,{signal:e})}}}async function lN(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await Pq(t.path,e);try{let r=O_(t.path),s=pa(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!sN(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(Mq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:$q})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=pa(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=O_(t.path),l=pa(a.tokens);if(!l||!sN(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}.${oN()}.tmp`;try{iN(u,JSON.stringify(d),{flag:"wx",mode:384}),Cq(u,t.path)}finally{L_(u,{force:!0})}return c}finally{n()}}var Mq,$q,cN=x(()=>{"use strict";Mq="https://auth.openai.com/oauth/token",$q="app_EMoamEEZ73f0CkXaXp7hrann"});function hn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function dN(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 uN(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function jq(t){if(hn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function Wq(t){let e=[],n=hn(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=hn(n[i])?n[i]:void 0;if(!a)continue;let l=dN(a.limit_window_seconds);e.push(wt({bucket_id:`codex-${uN(l)}`,group_name:"codex",window_type:l,used_fraction:pn(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(!hn(i))continue;let a=hn(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=hn(a[m])?a[m]:void 0;if(!p)continue;let _=dN(p.limit_window_seconds);e.push(wt({bucket_id:`${d}-${uN(_)}`,group_name:l||d,window_type:_,used_fraction:pn(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 Bq(t){let e=hn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=hn(t.spend_control)?t.spend_control:void 0,s=hn(t.credits)?t.credits:void 0;return He("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:Wq(t),...s?{credits:jq(s)}:{},...r?{spend_control:r}:{}})}async function fN(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=aN(n),i=o.tokens;if(!i||typeof i.access_token!="string")return He("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${D_(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=(v,b)=>Eo(He("codex",v,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let v=await lN({...o,tokens:{...i,refresh_token:f}},a.signal);typeof v.access_token=="string"&&(d.add(v.access_token),c=v.access_token),u=typeof v.account_id=="string"?v.account_id:u,typeof v.refresh_token=="string"&&(d.add(v.refresh_token),f=v.refresh_token),typeof v.id_token=="string"&&(d.add(v.id_token),m=v.id_token),g=!0;return}catch(v){let b=v instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(v.message)?v.message:"refresh_failed",k=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return He("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 v={Authorization:`Bearer ${c}`,"User-Agent":Uq,"Content-Type":"application/json",Accept:"application/json"};u&&(v["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||Fq).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:v,signal:a.signal})},T=await y();if(p=await T.text(),vt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status),T.status===401&&o.path&&f){let v=await E();if(v)return v;T=await y(),p=await T.text(),vt({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 v=T.headers.get("retry-after"),b=v===null?void 0:Number.parseInt(v,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(v){return He("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:yo(String(v),d)})}return hn(w)?Bq(w):He("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 He("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:yo(f,d)})}finally{clearTimeout(l)}}var Fq,Uq,mN=x(()=>{"use strict";jn();cN();jn();Fq="https://chatgpt.com/backend-api",Uq="codex-cli"});import{createHash as Hq,randomUUID as Xq}from"node:crypto";import{readFileSync as yN,openSync as qq,fsyncSync as Gq,closeSync as Vq,mkdirSync as pN,writeFileSync as EN,renameSync as Jq,rmSync as Kq,rmdirSync as Yq,statSync as M_,utimesSync as zq}from"node:fs";import{homedir as Qq}from"node:os";import{basename as Zq,dirname as eG,join as $d}from"node:path";import{setTimeout as TN}from"node:timers/promises";function nG(t){let e;try{e=yN(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 Pd(t){let e;try{e=JSON.parse(yN(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 wN(t){let e=t.KIMI_CODE_HOME??$d(t.HOME??Qq(),".kimi-code"),n=nG(t.KIMI_CODE_CONFIG_PATH??$d(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=_N(t.KIMI_CODE_BASE_URL??n.base_url??hN),o=_N(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?$_:n["oauth.oauth_host"]??$_)),i=s===hN&&o===$_?"kimi-code":`kimi-code-env-${Hq("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??$d(e,"credentials",`${i}.json`),l=Pd(a),c=a,d=Zq(a,".json");return{home:e,path:c,lockTarget:$d(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function Fd(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 gN(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 rG(t,e){pN(eG(t),{recursive:!0}),EN(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{pN(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-M_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await TN(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=M_(n),s=()=>{let i;try{i=M_(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;zq(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),Yq(n)}catch{}}}}async function vN(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await rG(t.lockTarget,e);try{let r=Pd(t.path);if(!gN(r,t.token)&&!Fd(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:tG,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 TN(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Pd(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=Pd(t.path);if(!gN(l,r)){if(!Fd(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}.${Xq()}.tmp`;try{let u=qq(d,"wx",384);try{EN(u,JSON.stringify(c,null,2)+`
2589
- `),Gq(u)}finally{Vq(u)}n.assertOwned(),Jq(d,t.path)}finally{Kq(d,{force:!0})}return c}finally{n.release()}}var hN,$_,tG,_N,SN=x(()=>{"use strict";hN="https://api.kimi.com/coding/v1",$_="https://auth.kimi.com",tG="17e5f671-d194-4dfb-9706-5516cb48c098",_N=t=>t.trim().replace(/\/+$/,"")});function bN(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 IN({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=wN(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 ut("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 vN({...s,token:o},i.signal),_=!0};Fd(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(),vt({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(),vt({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 ut("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Eo(ut("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 _=FR(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 ut("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ut("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(wt(_))}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=$R(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=bN(g);if(!w)continue;let{used:v,limit:b,remaining:k}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:rt(v/b),remaining_fraction:rt(k/b),resets_at_iso:g.resetTime,raw_value:v,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=bN(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:rt(_.used/_.limit),remaining_fraction:rt(_.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(wt({bucket_id:g,window_type:E,used_fraction:rt(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return He("kimi","ok",{source:"kimi_http",buckets:f})}var kN=x(()=>{"use strict";jn();SN();jn()});async function AN(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(a=>typeof a!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let a of e)if(!Ud.includes(a))return{status:"error",error:`unknown provider: ${a} (valid targets: ${Ud.join(", ")})`,readings:[]};let n=t.timeoutSeconds??sG;if(!Number.isFinite(n)||n<=0)return{status:"error",error:"timeoutSeconds must be a positive finite number",readings:[]};let r=t.env??process.env,s=new Set(e.includes("all")?["codex","agy","claude","kimi"]:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let i=Object.entries({codex:fN,agy:BR,claude:tN,kimi:IN}).filter(([a])=>s.has(a)).map(async([,a])=>{let l=[],c=await a({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:d=>l.push(d)}:{}});return t.includeRaw?{...c,raw_responses:l}:c});try{return{status:"ok",readings:(await Promise.all(i)).filter(Boolean)}}catch(a){return{status:"error",error:String(a),readings:[]}}}var Ud,sG,RN=x(()=>{"use strict";HR();nN();mN();kN();Ud=["all","codex","agy","claude","kimi"],sG=15});var CN={};me(CN,{runRatelimit:()=>dG});function P_(t){return typeof t=="object"&&t!==null}function oG(t){return(0,Pe.formatPercent)(typeof t=="number"?t:null)}function iG(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,Pe.escapeCell)(n)}function lG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,Pe.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,Pe.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=aG[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,Pe.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,Pe.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,Pe.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=[iG(t,e),`${(0,Pe.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${oG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function cG(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,Pe.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&LN.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,Pe.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(P_).map(d=>lG(a,d)):[],c=[];if(P_(t.credits)){let d=t.credits,u=[];typeof d.has_credits=="boolean"&&u.push(`has_credits=${d.has_credits}`),d.unlimited===!0&&u.push("unlimited"),d.balance!==void 0&&d.balance!==null&&u.push(`balance=${String(d.balance)}`),c.push(` credits: ${u.length>0?u.join(" "):"present"}`)}if(P_(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 F_(t,e){return t.stderr.write(`error: ${e}
2590
- ${xN}
2591
- `),2}async function dG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${xN}
2588
+ ${o}`)}function Eo(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=yo(r,n);return{...t,detail:s,provider_message:s}}var HX,XX,jn=L(()=>{"use strict";HX="https://lmctl.com/schemas/lmratelimit-v1.json";XX=[/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 qX}from"node:child_process";import{readdirSync as GX,readFileSync as VX}from"node:fs";import{join as JX}from"node:path";function rq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function sq(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 oq(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 iq(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=oq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=rt(i/100);n.push(wt({bucket_id:`${sq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:rt(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 ma(t,e,n){return ut("agy","provider_unavailable",t,e,"agy_cli_print")}function aq(t,e,n={}){try{let r=eq(Math.max(t,60)*1e3,rq(e));if(vt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return ma("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return ma("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return ma("cli_failed",r.error.message,t);let s=iq(r.stdout??"");return s.length===0?ma("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):He("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return ma("cli_failed",r instanceof Error?r.message:String(r),t)}}function WR(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 lq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=WR(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[UR],t[jR],-1);try{for(let s of GX("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of VX(JX("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[UR],o[jR],Number(s))}catch{}}catch{}return e}function cq(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=pn(l.remainingFraction,"fraction");r.push(wt({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:PR(l.window),used_fraction:c===null?null:rt(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??""))),He("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function dq(t,e,n={}){try{let s=nq(e).map(([a,l,c])=>[WR(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ut("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 tq(`http://${a}${KX}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(vt(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=cq(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 ut("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 ut("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function BR(t){let e=await dq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=aq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ut("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 UR,jR,KX,YX,zX,QX,ZX,eq,tq,nq,HR=L(()=>{"use strict";jn();jn();UR="ANTIGRAVITY_LS_ADDRESS",jR="ANTIGRAVITY_CSRF_TOKEN",KX="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",YX=["-p","/usage"],zX=(t,e)=>{let n=qX("agy",YX,{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}},QX=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()}},ZX=t=>lq(t),eq=zX,tq=QX,nq=ZX});import{randomUUID as GR}from"node:crypto";import{mkdirSync as uq,readFileSync as b_,realpathSync as fq,renameSync as mq,rmSync as I_,statSync as XR,writeFileSync as VR}from"node:fs";import{homedir as pq}from"node:os";import{join as k_}from"node:path";import{setTimeout as hq}from"node:timers/promises";function N_(t){return k_(t.CLAUDE_CONFIG_DIR??k_(t.HOME??pq(),".claude"),".credentials.json")}function A_(t){let e=JSON.parse(b_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function R_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function JR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=N_(t);try{let n=R_(A_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:fq(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 Md(t){return typeof t.expiresAt=="number"&&Date.now()+yq>=t.expiresAt}function qR(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Eq(t,e){let n=`${t}.lmctl-refresh.lock`,r=k_(n,"owner.json"),s=GR();for(;;){e.throwIfAborted();try{uq(n,{mode:448});try{VR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw I_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(b_(r,"utf8")).token===s&&I_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(b_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-XR(n).mtimeMs>6e4}catch{try{i=Date.now()-XR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await hq(50,void 0,{signal:e})}}}async function KR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Eq(t.path,e);try{let r=R_(A_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!qR(r,t.oauth)&&!Md(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(gq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:_q})});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=A_(t.path),l=R_(a);if(!l||!qR(r,l)){if(l&&typeof l.accessToken=="string"&&!Md(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}.${GR()}.tmp`;try{VR(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),mq(d,t.path)}finally{I_(d,{force:!0})}return c}finally{n()}}var _q,gq,yq,YR=L(()=>{"use strict";_q="9d1c250a-e61b-44d9-88ed-5944d1962f5e",gq="https://console.anthropic.com/v1/oauth/token",yq=3e5});import{spawnSync as ZR}from"node:child_process";function vq(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 eN(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Sq(t){try{let e=ZR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:eN(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Bt(t,e,n,r="claude_oauth_api",s){return ut("claude",t,e,n,r,void 0,s)}function bq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function Iq(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 Aq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=kq.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(wt({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:pn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:Iq(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 Rq(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 Nq(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=pn(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 QR(t,e,n,r={}){try{let s=ZR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:eN(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";vt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Aq(o);if(!i.length)return;let a=Rq(o);return He("claude",Xe.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 tN({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=JR(e);if(s.error==="not_claude_ai_subscriber")return Bt(Xe.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Bt(Xe.unavailable,"credentials_missing",`credentials file not found: ${N_(e)}`);if(s.error)return Bt(Xe.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(zR))return Bt(Xe.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${zR} 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 KR({...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 Bt(Xe.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Bt(Xe.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 v=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Bt(v?Xe.expired:Xe.unavailable,v?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${v?"; renew Claude login":"; try again later"}`)}};if(Md(o)){let T=await E();if(T)return T}let y=()=>fetch(`${Tq}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":wq,"Content-Type":"application/json","User-Agent":Sq(e)},signal:a.signal});if(c=await y(),d=await c.text(),vt({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(),vt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await QR(o,e,t,{debug:n,onRawResponse:r});return E||Bt(Xe.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>Eo(Bt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Xe.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Xe.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=bq(c.headers),E=await QR(o,e,t,{debug:n,onRawResponse:r});return E||u(Xe.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Xe.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Bt(Xe.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Bt(Xe.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=vq(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[wt({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:pn(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"?[]:[wt({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:pn(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=Nq(m.spend,m.extra_usage);return He("claude",Xe.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 Tq,wq,zR,Xe,kq,nN=L(()=>{"use strict";jn();YR();jn();Tq="https://api.anthropic.com",wq="oauth-2025-04-20",zR="user:profile";Xe={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};kq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as oN}from"node:crypto";import{mkdirSync as Lq,readFileSync as L_,realpathSync as xq,renameSync as Cq,rmSync as x_,statSync as rN,writeFileSync as iN}from"node:fs";import{homedir as Oq}from"node:os";import{join as C_}from"node:path";import{setTimeout as Dq}from"node:timers/promises";function pa(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function D_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||C_(t.HOME||Oq(),".codex");return C_(e,"auth.json")}function O_(t){let e=pa(JSON.parse(L_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function aN(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=D_(t);try{let n=pa(O_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:xq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function sN(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 Pq(t,e){let n=`${t}.lmctl-refresh.lock`,r=C_(n,"owner.json"),s=oN();for(;;){e.throwIfAborted();try{Lq(n,{mode:448});try{iN(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw x_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(L_(r,"utf8")).token===s&&x_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(L_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-rN(n).mtimeMs>6e4}catch{try{i=Date.now()-rN(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Dq(50,void 0,{signal:e})}}}async function lN(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await Pq(t.path,e);try{let r=O_(t.path),s=pa(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!sN(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(Mq,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:$q})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=pa(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=O_(t.path),l=pa(a.tokens);if(!l||!sN(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}.${oN()}.tmp`;try{iN(u,JSON.stringify(d),{flag:"wx",mode:384}),Cq(u,t.path)}finally{x_(u,{force:!0})}return c}finally{n()}}var Mq,$q,cN=L(()=>{"use strict";Mq="https://auth.openai.com/oauth/token",$q="app_EMoamEEZ73f0CkXaXp7hrann"});function hn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function dN(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 uN(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function jq(t){if(hn(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function Wq(t){let e=[],n=hn(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=hn(n[i])?n[i]:void 0;if(!a)continue;let l=dN(a.limit_window_seconds);e.push(wt({bucket_id:`codex-${uN(l)}`,group_name:"codex",window_type:l,used_fraction:pn(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(!hn(i))continue;let a=hn(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=hn(a[m])?a[m]:void 0;if(!p)continue;let _=dN(p.limit_window_seconds);e.push(wt({bucket_id:`${d}-${uN(_)}`,group_name:l||d,window_type:_,used_fraction:pn(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 Bq(t){let e=hn(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=hn(t.spend_control)?t.spend_control:void 0,s=hn(t.credits)?t.credits:void 0;return He("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:Wq(t),...s?{credits:jq(s)}:{},...r?{spend_control:r}:{}})}async function fN(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=aN(n),i=o.tokens;if(!i||typeof i.access_token!="string")return He("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${D_(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=(v,b)=>Eo(He("codex",v,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let v=await lN({...o,tokens:{...i,refresh_token:f}},a.signal);typeof v.access_token=="string"&&(d.add(v.access_token),c=v.access_token),u=typeof v.account_id=="string"?v.account_id:u,typeof v.refresh_token=="string"&&(d.add(v.refresh_token),f=v.refresh_token),typeof v.id_token=="string"&&(d.add(v.id_token),m=v.id_token),g=!0;return}catch(v){let b=v instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(v.message)?v.message:"refresh_failed",k=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return He("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 v={Authorization:`Bearer ${c}`,"User-Agent":Uq,"Content-Type":"application/json",Accept:"application/json"};u&&(v["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||Fq).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:v,signal:a.signal})},T=await y();if(p=await T.text(),vt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status),T.status===401&&o.path&&f){let v=await E();if(v)return v;T=await y(),p=await T.text(),vt({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 v=T.headers.get("retry-after"),b=v===null?void 0:Number.parseInt(v,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(v){return He("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:yo(String(v),d)})}return hn(w)?Bq(w):He("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 He("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:yo(f,d)})}finally{clearTimeout(l)}}var Fq,Uq,mN=L(()=>{"use strict";jn();cN();jn();Fq="https://chatgpt.com/backend-api",Uq="codex-cli"});import{createHash as Hq,randomUUID as Xq}from"node:crypto";import{readFileSync as yN,openSync as qq,fsyncSync as Gq,closeSync as Vq,mkdirSync as pN,writeFileSync as EN,renameSync as Jq,rmSync as Kq,rmdirSync as Yq,statSync as M_,utimesSync as zq}from"node:fs";import{homedir as Qq}from"node:os";import{basename as Zq,dirname as eG,join as $d}from"node:path";import{setTimeout as TN}from"node:timers/promises";function nG(t){let e;try{e=yN(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 Pd(t){let e;try{e=JSON.parse(yN(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 wN(t){let e=t.KIMI_CODE_HOME??$d(t.HOME??Qq(),".kimi-code"),n=nG(t.KIMI_CODE_CONFIG_PATH??$d(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=_N(t.KIMI_CODE_BASE_URL??n.base_url??hN),o=_N(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?$_:n["oauth.oauth_host"]??$_)),i=s===hN&&o===$_?"kimi-code":`kimi-code-env-${Hq("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??$d(e,"credentials",`${i}.json`),l=Pd(a),c=a,d=Zq(a,".json");return{home:e,path:c,lockTarget:$d(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function Fd(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 gN(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 rG(t,e){pN(eG(t),{recursive:!0}),EN(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{pN(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-M_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await TN(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=M_(n),s=()=>{let i;try{i=M_(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;zq(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),Yq(n)}catch{}}}}async function vN(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await rG(t.lockTarget,e);try{let r=Pd(t.path);if(!gN(r,t.token)&&!Fd(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:tG,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 TN(1e3*2**u,void 0,{signal:e})}if(!s)throw new Error("refresh_request_failed");if(!s.ok){try{let u=Pd(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=Pd(t.path);if(!gN(l,r)){if(!Fd(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}.${Xq()}.tmp`;try{let u=qq(d,"wx",384);try{EN(u,JSON.stringify(c,null,2)+`
2589
+ `),Gq(u)}finally{Vq(u)}n.assertOwned(),Jq(d,t.path)}finally{Kq(d,{force:!0})}return c}finally{n.release()}}var hN,$_,tG,_N,SN=L(()=>{"use strict";hN="https://api.kimi.com/coding/v1",$_="https://auth.kimi.com",tG="17e5f671-d194-4dfb-9706-5516cb48c098",_N=t=>t.trim().replace(/\/+$/,"")});function bN(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 IN({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=wN(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 ut("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 vN({...s,token:o},i.signal),_=!0};Fd(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(),vt({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(),vt({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 ut("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>Eo(ut("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 _=FR(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 ut("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ut("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(wt(_))}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=$R(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=bN(g);if(!w)continue;let{used:v,limit:b,remaining:k}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:rt(v/b),remaining_fraction:rt(k/b),resets_at_iso:g.resetTime,raw_value:v,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=bN(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:rt(_.used/_.limit),remaining_fraction:rt(_.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(wt({bucket_id:g,window_type:E,used_fraction:rt(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return He("kimi","ok",{source:"kimi_http",buckets:f})}var kN=L(()=>{"use strict";jn();SN();jn()});async function AN(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(a=>typeof a!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let a of e)if(!Ud.includes(a))return{status:"error",error:`unknown provider: ${a} (valid targets: ${Ud.join(", ")})`,readings:[]};let n=t.timeoutSeconds??sG;if(!Number.isFinite(n)||n<=0)return{status:"error",error:"timeoutSeconds must be a positive finite number",readings:[]};let r=t.env??process.env,s=new Set(e.includes("all")?["codex","agy","claude","kimi"]:e);t.progress?.(`querying ${e.join(" ")} live (timeout ${n}s per provider) ...`);let i=Object.entries({codex:fN,agy:BR,claude:tN,kimi:IN}).filter(([a])=>s.has(a)).map(async([,a])=>{let l=[],c=await a({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:d=>l.push(d)}:{}});return t.includeRaw?{...c,raw_responses:l}:c});try{return{status:"ok",readings:(await Promise.all(i)).filter(Boolean)}}catch(a){return{status:"error",error:String(a),readings:[]}}}var Ud,sG,RN=L(()=>{"use strict";HR();nN();mN();kN();Ud=["all","codex","agy","claude","kimi"],sG=15});var CN={};me(CN,{runRatelimit:()=>dG});function P_(t){return typeof t=="object"&&t!==null}function oG(t){return(0,Pe.formatPercent)(typeof t=="number"?t:null)}function iG(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,Pe.escapeCell)(n)}function lG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,Pe.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,Pe.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=aG[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,Pe.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,Pe.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,Pe.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=[iG(t,e),`${(0,Pe.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${oG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function cG(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,Pe.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&xN.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,Pe.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(P_).map(d=>lG(a,d)):[],c=[];if(P_(t.credits)){let d=t.credits,u=[];typeof d.has_credits=="boolean"&&u.push(`has_credits=${d.has_credits}`),d.unlimited===!0&&u.push("unlimited"),d.balance!==void 0&&d.balance!==null&&u.push(`balance=${String(d.balance)}`),c.push(` credits: ${u.length>0?u.join(" "):"present"}`)}if(P_(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 F_(t,e){return t.stderr.write(`error: ${e}
2590
+ ${LN}
2591
+ `),2}async function dG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${LN}
2592
2592
  `),0;let n=le(t,["--timeout"],["--json"]);if(n.error!==void 0)return F_(e,n.error);let r=z(n,"--json");for(let g of n.positionals)if(!NN.includes(g))return F_(e,`unknown provider: ${g} (valid targets: ${NN.join(", ")})`);let s=n.positionals.length>0?n.positionals:["all"],o=15,i=V(n,"--timeout");if(i!==void 0){let g=Number(i);if(!Number.isFinite(g)||g<=0)return F_(e,`invalid --timeout "${i}" (expected a positive number of seconds)`);o=g}let a=await AN({targets:s,timeoutSeconds:o,includeRaw:r,env:e.env??process.env,progress:g=>e.stderr.write(`${g}
2593
2593
  `),...ni()||e.env?.LMCTL_DEBUG==="1"?{debug:g=>e.stderr.write(`${g}
2594
2594
  `)}:{}});if(a.status==="error")return e.stderr.write(`error: ${a.error}
2595
- `),1;let l=a.readings;if(r)return ee(e,{readings:l}),0;let c=new Set(n.positionals),d=l.filter(g=>{let E=typeof g.status=="string"?g.status:"",y=typeof g.reason=="string"?g.reason:"";return E!=="provider_unavailable"||!LN.has(y)?!0:c.has(typeof g.provider=="string"?g.provider:"")});if(d.length===0)return e.stdout.write(`rate-limit: no readings returned.
2595
+ `),1;let l=a.readings;if(r)return ee(e,{readings:l}),0;let c=new Set(n.positionals),d=l.filter(g=>{let E=typeof g.status=="string"?g.status:"",y=typeof g.reason=="string"?g.reason:"";return E!=="provider_unavailable"||!xN.has(y)?!0:c.has(typeof g.provider=="string"?g.provider:"")});if(d.length===0)return e.stdout.write(`rate-limit: no readings returned.
2596
2596
  `),0;let u=["LIMIT","USED","RESET TIME","OVERSTOCK"],f=["left","left","left"],m=d.map(cG),p=(0,Pe.measureColumns)([{rows:[],headers:u},...m.map(g=>g.bucketRows)]),_=!1,h=[];for(let g of m){if(h.length>0&&h.push(""),h.push(g.head),g.bucketRows.length>0){let E=!_;_=!0,h.push((0,Pe.renderGrid)(g.bucketRows,{widths:p,margin:2,align:f,...E?{headers:u}:{}}))}h.push(...g.footers)}return e.stdout.write(`${h.join(`
2597
2597
  `)}
2598
- `),0}var Pe,xN,LN,NN,aG,ON=x(()=>{"use strict";oe();Pe=Ct(kt(),1);ce();RN();xN=["usage: lmctl ratelimit [provider ...] [--json] [--debug] [--timeout <seconds>]",""," Queries provider subscription rate limits in REAL TIME via the TypeScript"," provider readers -- stateless: nothing is read from or written to any"," database.",""," Providers: all (default), codex, agy, claude, kimi. Multiple allowed.",""," --debug Print raw quota responses to stderr before parsing."," Credentials are redacted; JSON stdout stays clean."," --timeout <seconds> Per-provider reader timeout (default 15).",' --json Emit {"readings": [...]} in the lmratelimit-v1 schema'," with every raw field preserved verbatim -- the same"," shape lmbee's collector parses. raw_responses carries"," source, HTTP status and original response text"," (credentials redacted). Unknown future"," fields pass through.","",' Prints a "querying ..." note on stderr before the readers run.'].join(`
2599
- `),LN=new Set(["agy_not_found","credentials_missing"]),NN=Ud;aG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});ce();bn();import{pathToFileURL as uG}from"node:url";import{execFileSync as TD}from"node:child_process";import{readFileSync as wD}from"node:fs";import{join as vD}from"node:path";import{fileURLToPath as SD}from"node:url";function rT(){return SD(new URL("../..",import.meta.url))}function Vu(t=rT()){try{let e=JSON.parse(wD(vD(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function Qo(t,e){try{return TD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function Zo(t=rT()){let e=Vu(t);if(Qo(t,["rev-parse","--is-inside-work-tree"])!=="true"||Qo(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=Qo(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=Qo(t,["describe","--tags","--exact-match","HEAD"]),s=Qo(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}oe();import{mkdirSync as sM,readFileSync as oM,renameSync as iM,writeFileSync as aM}from"node:fs";import{homedir as lM}from"node:os";import{dirname as cM,join as dM}from"node:path";function pT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function nM(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function rM(t,e){return!nM(t)||pT(t)?null:`${e} must use https://: ${t}`}async function hT(t,e){let n=rM(t,e.description);if(n!==null||!pT(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 mT(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 mT(t,e.description,r,a)}}finally{clearTimeout(o)}}function mT(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 uM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",fM=60*60*1e3,mM=1500;function pM(){let t=process.env.HOME??lM();return dM(t,".lmctl",".update-check.json")}function hM(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 Qu(t,e){return!!(process.env.LMCTL_NO_UPDATE_NOTIFIER==="1"||!hM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function gM(t,e){try{let n=JSON.parse(oM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<fM)return n.latest}catch{}return null}function yM(t,e){sM(cM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;aM(n,`${JSON.stringify(e)}
2598
+ `),0}var Pe,LN,xN,NN,aG,ON=L(()=>{"use strict";oe();Pe=Ct(kt(),1);ce();RN();LN=["usage: lmctl ratelimit [provider ...] [--json] [--debug] [--timeout <seconds>]",""," Queries provider subscription rate limits in REAL TIME via the TypeScript"," provider readers -- stateless: nothing is read from or written to any"," database.",""," Providers: all (default), codex, agy, claude, kimi. Multiple allowed.",""," --debug Print raw quota responses to stderr before parsing."," Credentials are redacted; JSON stdout stays clean."," --timeout <seconds> Per-provider reader timeout (default 15).",' --json Emit {"readings": [...]} in the lmratelimit-v1 schema'," with every raw field preserved verbatim -- the same"," shape lmbee's collector parses. raw_responses carries"," source, HTTP status and original response text"," (credentials redacted). Unknown future"," fields pass through.","",' Prints a "querying ..." note on stderr before the readers run.'].join(`
2599
+ `),xN=new Set(["agy_not_found","credentials_missing"]),NN=Ud;aG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});ce();bn();import{pathToFileURL as uG}from"node:url";import{execFileSync as TD}from"node:child_process";import{readFileSync as wD}from"node:fs";import{join as vD}from"node:path";import{fileURLToPath as SD}from"node:url";function rT(){return SD(new URL("../..",import.meta.url))}function Vu(t=rT()){try{let e=JSON.parse(wD(vD(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function Qo(t,e){try{return TD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function Zo(t=rT()){let e=Vu(t);if(Qo(t,["rev-parse","--is-inside-work-tree"])!=="true"||Qo(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=Qo(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=Qo(t,["describe","--tags","--exact-match","HEAD"]),s=Qo(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}oe();import{mkdirSync as sM,readFileSync as oM,renameSync as iM,writeFileSync as aM}from"node:fs";import{homedir as lM}from"node:os";import{dirname as cM,join as dM}from"node:path";function pT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function nM(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function rM(t,e){return!nM(t)||pT(t)?null:`${e} must use https://: ${t}`}async function hT(t,e){let n=rM(t,e.description);if(n!==null||!pT(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 mT(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 mT(t,e.description,r,a)}}finally{clearTimeout(o)}}function mT(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 uM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",fM=60*60*1e3,mM=1500;function pM(){let t=process.env.HOME??lM();return dM(t,".lmctl",".update-check.json")}function hM(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 Qu(t,e){return!!(process.env.LMCTL_NO_UPDATE_NOTIFIER==="1"||!hM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function gM(t,e){try{let n=JSON.parse(oM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<fM)return n.latest}catch{}return null}function yM(t,e){sM(cM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;aM(n,`${JSON.stringify(e)}
2600
2600
  `,"utf8"),iM(n,t)}async function EM(){let t=await hT(uM,{description:"lmctl npm metadata",timeoutMs:mM}),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 _T(t,e=[],n={}){try{if(Qu(e,t)||(n.displayVersion?.()??Zo()).includes("+"))return;let r=n.now?.()??Date.now(),s=n.cachePath??pM();if(gM(s,r)!==null)return;let i=await(n.fetchLatest??EM)();try{yM(s,{checkedAt:r,latest:i})}catch{return}let a=n.currentVersion?.()??Vu();_M(i,a)>0&&t.stderr.write(`update available: ${a} \u2192 ${i} run: npm i -g @lmctl-ai/lmctl@latest
2601
2601
  `)}catch{}}za();var To=`usage: lmctl [--db PATH] [--debug] [--non-interactive] <command|target> [args]
2602
2602
  `,U_=`${To}
@@ -2672,7 +2672,7 @@ ${To}Run 'lmctl help' for usage.
2672
2672
  `),s instanceof $t?1:ni()?(r.stderr.write(`(debug details written to ~/.lmctl/debug-*.log)
2673
2673
  `),1):(r.stderr.write(`(re-run with --debug for the full stack trace and context in ~/.lmctl/debug-*.log)
2674
2674
  `),1))}function gG(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 MN(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Uh(),ak));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(kh(),qI));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(sd(),vh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(pd(),md));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)
2675
- `);let{runChat:r}=await Promise.resolve().then(()=>(sd(),vh));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Nk(),Rk));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(Bk(),Wk));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(Gk(),qk));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(eA(),Zk));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(rA(),nA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(lA(),aA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(un(),uh));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(un(),uh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(pd(),md));return s(n,"seed",e,o=>r(o,n))}case"plan":{let{runPlan:r}=await Promise.resolve().then(()=>(ca(),Ek)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(pd(),md));return s(n,"plan",e,o=>r(o,n),{ownsForce:!0,extension:".txt"})}case"init":{let{runInit:r}=await Promise.resolve().then(()=>(mA(),fA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(CA(),LA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(jA(),UA));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(t_(),kA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(m_(),nR));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(NR(),RR));return r(e,n)}case"model":{let{runModel:r}=await Promise.resolve().then(()=>(Uc(),qb));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(OR(),CR));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(ON(),CN));return r(e,n)}case"db":return yG(e,n);default:if(!fG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(Ph(),$h)),s=await r([t,...e],n);if(s!==null)return s}return $N(n,t)}}async function yG(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2675
+ `);let{runChat:r}=await Promise.resolve().then(()=>(sd(),vh));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Nk(),Rk));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(Bk(),Wk));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(Gk(),qk));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(eA(),Zk));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(rA(),nA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(lA(),aA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(un(),uh));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(un(),uh)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(pd(),md));return s(n,"seed",e,o=>r(o,n))}case"plan":{let{runPlan:r}=await Promise.resolve().then(()=>(ca(),Ek)),{runWithSaveScript:s}=await Promise.resolve().then(()=>(pd(),md));return s(n,"plan",e,o=>r(o,n),{ownsForce:!0,extension:".txt"})}case"init":{let{runInit:r}=await Promise.resolve().then(()=>(mA(),fA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(CA(),xA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(jA(),UA));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(t_(),kA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(m_(),nR));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(NR(),RR));return r(e,n)}case"model":{let{runModel:r}=await Promise.resolve().then(()=>(Uc(),qb));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(OR(),CR));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(ON(),CN));return r(e,n)}case"db":return yG(e,n);default:if(!fG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(Ph(),$h)),s=await r([t,...e],n);if(s!==null)return s}return $N(n,t)}}async function yG(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2676
2676
 
2677
2677
  backfill-events Replay the legacy tables into the event-log
2678
2678
  (with --db <copy>) substrate and rebuild projections. Idempotent;
@@ -2682,5 +2682,5 @@ ${To}Run 'lmctl help' for usage.
2682
2682
  resolved target: ${r}
2683
2683
  run against a COPY: cp <state.db> copy.db && lmctl --db copy.db db backfill-events
2684
2684
  (or pass --allow-live to target the resolved DB deliberately).
2685
- `),1;let{migrate:o}=await Promise.resolve().then(()=>(za(),tE)),{backfillEventLog:i}=await Promise.resolve().then(()=>(Lu(),Gy)),a=o({dbPath:r});try{let l=i(a);return e.stdout.write(`${JSON.stringify(l,null,2)}
2685
+ `),1;let{migrate:o}=await Promise.resolve().then(()=>(za(),tE)),{backfillEventLog:i}=await Promise.resolve().then(()=>(xu(),Gy)),a=o({dbPath:r});try{let l=i(a);return e.stdout.write(`${JSON.stringify(l,null,2)}
2686
2686
  `),0}finally{a.close()}}if(process.argv[1]!==void 0&&import.meta.url===uG(process.argv[1]).href){let t=await pG(process.argv.slice(2));process.exitCode=t}export{DN as COMMANDS,pG as runCli};