@lmctl-ai/lmctl 0.2.265 → 0.2.267

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
1
  var QR=Object.create;var Wd=Object.defineProperty;var ZR=Object.getOwnPropertyDescriptor;var e0=Object.getOwnPropertyNames;var t0=Object.getPrototypeOf,n0=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var r0=(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})},s0=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of e0(e))!n0.call(t,s)&&s!==n&&Wd(t,s,{get:()=>e[s],enumerable:!(r=ZR(e,s))||r.enumerable});return t};var Ut=(t,e,n)=>(n=t!=null?QR(t0(t)):{},s0(e||!t||!t.__esModule?Wd(n,"default",{value:t,enumerable:!0}):n,t));function V_(t){return t.prepare("PRAGMA table_info(team_chat_log)").all().some(e=>e.name==="accounting_only")?Io:G_}var G_,Io,Hd=x(()=>{"use strict";G_="root_teamfile <> '(direct)'",Io=G_+" AND COALESCE(accounting_only,0)=0"});import{existsSync as o0}from"node:fs";import{createRequire as i0}from"node:module";function a0(){return Bd===null&&(Bd=i0(import.meta.url)("node:sqlite").DatabaseSync),Bd}function d0(t){let e=c0[t];if(e!==void 0)return e;let n=l0[t&255];return n!==void 0?n:`SQLITE_UNKNOWN_${t}`}function Lr(t){throw t&&typeof t=="object"&&"errcode"in t&&typeof t.errcode=="number"&&(t.code=d0(t.errcode)),t}function u0(t){return t instanceof Error&&/cannot rollback - no transaction is active/i.test(t.message)}function f0(t){return t instanceof Error&&/no such savepoint:/i.test(t.message)}function Xd(t){return t.length===1&&m0(t[0])?[t[0]]:t}function m0(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 Bd,l0,c0,qd,ms,Gd,_a=x(()=>{"use strict";Bd=null;l0={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"},c0={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:"&&!o0(e))throw new Error("unable to open database file");this.name=e;try{this.handle=new(a0())(e,{readOnly:n.readonly===!0})}catch(r){Lr(r)}this.exec("PRAGMA busy_timeout = 5000"),this.exec(`PRAGMA foreign_keys = ${n.foreignKeys===!0?"ON":"OFF"}`)}prepare(e){try{return new Gd(this.handle.prepare(e))}catch(n){Lr(n)}}exec(e){try{this.handle.exec(e)}catch(n){Lr(n)}}pragma(e,n){let r=`PRAGMA ${e}`;if(e.includes("=")){this.exec(r);return}if(n?.simple===!0){let s=this.prepare(r).get();return s===void 0?void 0:Object.values(s)[0]}return this.prepare(r).all()}transaction(e){let n=(...r)=>this.runTransaction("BEGIN",e,r);return n.immediate=(...r)=>this.runTransaction("BEGIN IMMEDIATE",e,r),n}get inTransaction(){return this.handle.isTransaction}close(){try{this.handle.close()}catch(e){Lr(e)}}runTransaction(e,n,r){if(!this.inTransaction){this.exec(e);try{let o=n(...r);return this.exec("COMMIT"),o}catch(o){if(this.inTransaction)try{this.exec("ROLLBACK")}catch(i){if(!u0(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(!f0(i))throw i}throw o}}};ms=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){Lr(n)}}all(...e){try{return this.handle.all(...Xd(e)).map(n=>this.normalizeRow(n))}catch(n){Lr(n)}}run(...e){try{let n=this.handle.run(...Xd(e));return{changes:Number(n.changes),lastInsertRowid:Number(n.lastInsertRowid)}}catch(n){Lr(n)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Vd(e)?Object.values(e):Vd(e)?{...e}:e}}});function xr(t){return new ms(t,{readonly:!0,fileMustExist:!0})}var ga=x(()=>{"use strict";_a()});import{createHash as p0}from"node:crypto";import{lstat as h0,readFile as _0,realpath as J_,stat as K_}from"node:fs/promises";import{isAbsolute as Y_,relative as g0,resolve as y0,sep as E0}from"node:path";function B(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function K(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function ko(t){return K(t)}function yt(t){if(typeof t!="string"&&typeof t!="number")return null;let e=new Date(t);return Number.isFinite(e.getTime())?e.toISOString():null}function oe(t){if(!Number.isSafeInteger(t.maxBytes)||t.maxBytes<=0)throw new Error("maxBytes must be a positive safe integer");if(!Number.isSafeInteger(t.maxRows)||t.maxRows<=0)throw new Error("maxRows must be a positive safe integer");t.signal.throwIfAborted()}function pe(t,e){return t<e?-1:t>e?1:0}function Ze(t,e,n){if(t===null||e===null)return null;let r=n==="written"?"write":"read",s=0;for(let o of t){if(o.bytes===null)return null;s+=o.bytes}for(let o of e)if(o.direction===r){if(o.bytes===null)return null;s+=o.bytes}return s}function Jt(t,e,n){let r={},s=ko(t.cacheWrite5m),o=ko(t.cacheWrite1h),i=ko(t.reasoning),a=ko(t.webSearch),l=ko(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 Xn(t){return typeof t=="string"&&w0.has(t.toLowerCase())}function be(t,e){t.record({direction:"read",kind:"unattributed",id:e,ref:null,bytes:null,basis:"unknown"}),t.record({direction:"write",kind:"unattributed",id:e,ref:null,bytes:null,basis:"unknown"})}function ps(t){let e=B(t);return e&&typeof e.content=="string"?Buffer.byteLength(e.content,"utf8"):null}async function Me(t,e){if(!Y_(t))return null;let n=await h0(t).catch(()=>null);if(!n?.isFile()||n.isSymbolicLink())return null;let r=await J_(t).catch(()=>null);if(!r)return null;for(let s of e){let o=await J_(s).catch(()=>y0(s)),i=g0(o,r);if(i===""||!i.startsWith(`..${E0}`)&&i!==".."&&!Y_(i))return r}return null}async function ct(t,e){oe(e);let n=await K_(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await _0(t,{signal:e.signal});e.signal.throwIfAborted();let s=await K_(t).catch(()=>null);return!s?.isFile()||n.dev!==s.dev||n.ino!==s.ino||n.size!==s.size||n.mtimeMs!==s.mtimeMs?null:{revision:`${Ao}:sha256:${p0("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=B(JSON.parse(o));if(!i)return null;s.push(i)}catch{return null}return s}var Ao,lt,_t,T0,gt,w0,Tn=x(()=>{"use strict";Ao="bx3",lt={input_uncached:null,input_cached:null,input_cache_write:null,output:null};_t=class{map=new Map;record(e,n,r,s){if(typeof r!="string"||r.length===0||r.includes("\0"))return;let o=`${e}\0${n}\0${r}`;this.map.has(o)||this.map.set(o,{direction:n,path:r,bytes:s})}files(e){let n=[];for(let r of this.map.values())r.direction===e&&n.push({path:r.path,bytes:r.bytes});return n}},T0=0,gt=class{map=new Map;record(e){let n;e.id!==null?n=`id\0${e.id}\0${e.direction}\0${e.kind}`:e.bytes===null?n=`mark\0${e.direction}\0${e.kind}\0${e.basis}\0${e.ref??""}`:n=`seq\0${T0++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};w0=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as v0}from"node:fs/promises";import{join as z_,sep as Q_}from"node:path";var hs,Jd=x(()=>{"use strict";Tn();hs=class{format;constructor(e){this.format=e}async discover(e,n,r){oe(e);let s=[],o=0,i=!1,a=async(l,c)=>{if(e.signal.throwIfAborted(),c>8||o>e.maxRows){i=!0;return}let d=await v0(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>z_(l,f.name)+(f.isDirectory()?Q_:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=z_(l,f.name),p=f.isDirectory()&&r?.startsWith(m+Q_);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 g=this.format.sessionId(m);g&&s.push({provider:this.format.provider,sessionid:g,source_id:m})}if(s.length>=n){i=!0;break}}}};return await a(this.format.root,0),s.sort((l,c)=>pe(l.source_id,c.source_id)),{sources:s.slice(0,n),truncated:i||s.length>n}}async bytes(e,n){if(oe(n),e.provider!==this.format.provider||this.format.sessionId(e.source_id)!==e.sessionid)return null;let r=await Me(e.source_id,[this.format.root]);if(!r)return null;let s=await ct(r,n).catch(()=>(n.signal.throwIfAborted(),null));return s&&{...s,revision:`${this.format.revision}:${s.revision}`}}async inspect(e,n){let r=await this.bytes(e,n);return r?{status:"ready",revision:r.revision}:{status:"partial"}}async read(e,n,r){let s=await this.bytes(e,r);if(!s||s.revision!==n)return{status:"partial"};let o=this.format.decode(s.data,e.sessionid,e.source_id,r);return!o||!o.responses?{status:"partial"}:{status:"complete",source:e,revision:n,checkpoint:null,responses:o.responses,...o.captureStatus?{capture_status:o.captureStatus}:{}}}}});function qn(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 No=x(()=>{"use strict"});import{createReadStream as Z_}from"node:fs";import{createInterface as eg}from"node:readline";import{stat as S0}from"node:fs/promises";import{homedir as b0}from"node:os";function tg(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=Z_(t,{encoding:"utf-8"}),r=eg({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=tg(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function Et(t,e){let n=[],r=Z_(t,{encoding:"utf-8"}),s=eg({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=tg(i);if(a!==void 0&&n.push(a),n.length>=e)break}}finally{s.close(),r.destroy()}return n}async function Ae(t){let e=await S0(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function _e(t){return t.replace(/\\n/g,`
3
- `).replace(/\\t/g," ").replace(/\\r/g,"\r")}function G(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function At(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var Q,Re=x(()=>{"use strict";Q=b0()});import{readdir as I0}from"node:fs/promises";import{join as _s,resolve as k0}from"node:path";function Ta(t){return k0(t||process.env.XDG_DATA_HOME||_s(Q,".local","share"))}function A0(t){return _s(Ta(t),"muse","sessions")}function N0(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 sg(t,e){let n,r,s,o,i,a=[],l=new Map,c=new Map,d=new Set,u,f,m=()=>{f="partial"},p=_=>{if(typeof _!="string"||_.length===0){m();return}let E=l.get(_);return E||(E={id:_,turn:{id:_,status:"unknown"},responseIds:[]},l.set(_,E)),E},g=_=>{if(_.retained_frame&&Array.isArray(_.children)){for(let b of _.children)try{if(typeof b?.record_json!="string")throw new Error("missing record_json");g(JSON.parse(b.record_json))}catch{m()}return}if(_.stream?.kind!=="session"||_.stream?.id!==t)return;if(_.schema_version!==1){m();return}if(_.payload_type?.startsWith("runtime.session")&&_.payload_schema_version!==1){m();return}let E=_.payload?.source_run_record_id;for(let b of[_.id,E])if(!(typeof b!="string"||b.length===0)&&d.has(b))return;for(let b of[_.id,E])typeof b=="string"&&b.length>0&&d.add(b);let y=typeof _.recorded_at=="number"&&Number.isFinite(_.recorded_at)?new Date(_.recorded_at/1e3):void 0;if(_.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=_.payload;if(_.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)),_.payload_type!=="runtime.session"||T?.kind!=="run")return;let w=T.event,S=p(T.run_id);if(!w||!y||!S){w||m();return}if(w.kind==="started"&&typeof w.prompt=="string")a.push({role:"user",content:w.prompt,timestamp:y}),S.turn.startedAt=y,S.turn.prompt=w.prompt,S.turn.status="in_progress",i="in_progress";else if(w.kind==="assistant_message_committed"&&typeof w.text=="string")a.push({role:"assistant",content:w.text,timestamp:y});else if(w.kind==="terminal")S.turn.completedAt=y,S.turn.status=w.terminal==="completed"?"complete":"aborted",i=S.turn.status;else if(w.kind==="model_completed"){typeof w.model=="string"&&w.model.length>0&&(r=w.model,S.turn.model=w.model);let b=typeof E=="string"&&E.length>0?E:typeof _.id=="string"&&_.id.length>0?_.id:void 0;if(!b)m();else{S.responseIds.push(b);let q={};if(w.usage&&typeof w.usage=="object")for(let M of["input_tokens","output_tokens","cached_tokens","reasoning_tokens","input_uncached_tokens","cache_read_tokens","input_cache_read_tokens","cache_write_tokens","input_cache_write_tokens","promptTokens","prompt_tokens"]){let ue=w.usage[M];typeof ue=="number"&&Number.isSafeInteger(ue)&&ue>=0&&(q[M]=ue)}Object.keys(q).length>0&&(S.turn.rawUsage=[...S.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,N0(b,y,w.model,q))}if(!w.usage)return;let I={},L=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,k=w.usage.cache_write_tokens??w.usage.input_cache_write_tokens,v=typeof w.usage.promptTokens=="number"?w.usage.promptTokens:typeof w.usage.prompt_tokens=="number"?w.usage.prompt_tokens:void 0,A=typeof L=="number"&&typeof O=="number"&&O>L||typeof v=="number"&&typeof O=="number"&&O>v||typeof v=="number"&&typeof k=="number"&&k>v||typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&O+k>v,N=A?void 0:typeof O=="number"?O:void 0,R=A?void 0:typeof k=="number"?k:void 0,C;A||(typeof w.usage.input_uncached_tokens=="number"?C=w.usage.input_uncached_tokens:typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&v>=O+k&&(C=v-O-k)),C!==void 0&&C<0&&(C=void 0);let $=w.usage.output_tokens,P=w.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(I.inputTokens=C),typeof N=="number"&&Number.isSafeInteger(N)&&N>=0&&(I.cachedInputTokens=N),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(I.cacheWriteInputTokens=R),typeof $=="number"&&Number.isSafeInteger($)&&$>=0&&(I.outputTokens=$),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(I.reasoningOutputTokens=P),u=I}};return{visit:g,finish:()=>{if(!n||!s||!o)return null;let _=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=qn(y,f!=="partial");return{provider:"muse",sessionId:t,filePath:e,cwd:n,createdAt:s,modifiedAt:o,model:r,messages:a,messageCount:a.length,firstUserMessage:_[0],lastUserMessage:_.at(-1),userPrompts:_,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 R0(t,e,n){let r=sg(e,n);for(let s of t)r.visit(s);return r.finish()}function L0(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 g;try{if(typeof p?.record_json!="string")throw new Error("missing record_json");g=JSON.parse(p.record_json)}catch{l=!0;continue}d(g)}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=R0(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function og(t){return{provider:"muse",root:A0(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:L0}}async function rg(t,e){let n=sg(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var ng,Ea,Kd=x(()=>{"use strict";No();Re();ng=/^[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 _s(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await I0(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(_s(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(_s(e,o.name),n+1));return s}async resolveSessionPath(e){return ng.test(e)?(await this.files()).find(n=>n.endsWith(_s(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?rg(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!ng.test(r))continue;let s=await rg(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as ig,readdir as x0,rm as C0,stat as ag}from"node:fs/promises";import{basename as O0,join as gs,resolve as D0}from"node:path";function Sa(t){return D0(t||process.env.MINIPLAYER_HOME||gs(process.env.XDG_DATA_HOME||gs(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 lg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function cg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function dg(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 ug(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 mg(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 g=new Date(p);return Number.isFinite(g.getTime())?g: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,g=new Set;for(let h of r.turns){if(!h||typeof h.responseId!="string"||!h.responseId||typeof h.input?.text!="string")return null;if(p.has(h.responseId)){d=!0;continue}p.add(h.responseId);let _=s(h.startedAt),E=s(h.completedAt??h.endedAt);if(!_)return null;let y=typeof h.model=="string"?h.model:void 0;["complete","running","failed","aborted"].includes(h.status)||(d=!0);let T=h.status==="complete"?"complete":h.status==="running"?"in_progress":h.status==="failed"?"failed":h.status==="aborted"?"aborted":"unknown";u=T==="failed"||T==="unknown"?"aborted":T,(T!=="complete"||h.partial===!0)&&(d=!0);let w=Array.isArray(h.modelResponses),S=w?h.modelResponses:[],b=[];l.push({id:h.responseId,startedAt:_,completedAt:E,model:y,prompt:h.input.text,status:T,responseIds:b}),a.push({role:"user",timestamp:_,content:h.input.text});let I=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!w&&!I){let A=h.usage??{},N=ug({...h,usage:A});Object.keys(N.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:N.rawUsage}]),b.push(h.responseId),c.push({response_id:h.responseId,timestamp:(E??_).toISOString(),model:y??null,model_provider:typeof h.provider=="string"?h.provider:null,tokens:N.tokens,files_read:[],files_written:[],read_bytes:Buffer.byteLength(h.input.text,"utf8"),write_bytes:0,external_io:[{direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"}],pricing_facts:N.pricingFacts}),T!=="complete"&&!h.usage&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??_,content:h.output.text,model:y});continue}let L=new Map,O=new Map,k=new Set,v=[];for(let A of S){if(!A||typeof A!="object"||typeof A.responseId!="string"||!A.responseId){d=!0;continue}if(b.includes(A.responseId)){d=!0;continue}let N=A,R=v.length;v.push({response:N,index:R,filesRead:[],filesWritten:[],io:[]}),b.push(A.responseId),g.has(A.responseId)&&(d=!0),g.add(A.responseId),N.toolCalls!==void 0&&!Array.isArray(N.toolCalls)&&(d=!0,v[R].io.push({direction:"read",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"}));for(let C of Array.isArray(N.toolCalls)?N.toolCalls:[]){let $=lg(C),P=Yd(C);if($)L.set($,R),O.set($,P);else{d=!0;let q=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",M=P==="write_file"||P==="shell"||P==="tool";q&&v[R].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),M&&v[R].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}b.length===0&&S.length>0&&(d=!0);for(let A of Array.isArray(h.toolEvents)?h.toolEvents:[]){let N=A&&typeof A=="object"?A:{},R=lg(N),C=R?L.get(R):void 0,$=Yd(N),P=cg(N.result),q=N.status==="failed"||N.error!==void 0;if(N.type==="tool_call"?a.push({role:"tool_use",timestamp:s(N?.timestamp)??_,content:wa(N?.input??N?.args),toolName:$,toolInput:wa(N?.input??N?.args),toolInputData:cg(N?.input??N?.args)??void 0,...R?{toolCallId:R}:{}}):a.push({role:"tool_result",timestamp:s(N?.timestamp)??E??_,content:wa(q?N?.error:N?.result),toolName:$,...R?{toolCallId:R}:{}}),C===void 0){d=!0;continue}let M=v[C];(N.type==="tool_result"||q||N.result!==void 0)&&k.add(R);let ue=P?.path,H=K(P?.bytesRead??P?.bytesWritten);N.type!=="tool_call"&&($==="read_file"&&!q&&typeof ue=="string"&&H!==null?M.filesRead.push({path:ue,bytes:H}):$==="write_file"&&!q&&typeof ue=="string"&&H!==null?M.filesWritten.push({path:ue,bytes:H}):$==="webget"&&!q&&H!==null?M.io.push({direction:"read",kind:"web",id:R,ref:dg(P?.finalUrl??P?.url),bytes:H,basis:"certified_counter"}):$==="shell"||q?($!=="write_file"&&M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}),($==="shell"||$==="write_file")&&M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"})):$==="list_directory"||$==="read_file"||$==="webget"?M.io.push({direction:"read",kind:$==="webget"?"web":"unattributed",id:R,ref:$==="webget"?dg(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):$==="write_file"?M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}):M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}))}for(let[A,N]of O)if(!k.has(A)){let R=v[L.get(A)],C=N==="list_directory"||N==="read_file"||N==="webget"||N==="shell",$=N==="write_file"||N==="shell";C&&R.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),$&&R.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of v){let N=A.response,R=ug(N),C=s(N.completedAt??N.startedAt)??E??_;new Set((Array.isArray(N.toolCalls)?N.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:N.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:N.responseId,ref:null,bytes:null,basis:"unknown"}),A.index===0&&A.io.unshift({direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"});let P=A.io.some(M=>M.direction==="read"&&M.bytes===null),q=A.io.some(M=>M.direction==="write"&&M.bytes===null);if(c.push({response_id:N.responseId,timestamp:C.toISOString(),model:typeof N.model=="string"?N.model:null,model_provider:typeof N.provider=="string"?N.provider:typeof h.provider=="string"?h.provider:null,tokens:R.tokens,files_read:P?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:P?null:A.filesRead.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="read").reduce((M,ue)=>M+(ue.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="write").reduce((M,ue)=>M+(ue.bytes??0),0),external_io:A.io,pricing_facts:R.pricingFacts}),Object.keys(R.rawUsage).length){let M=l.at(-1);M.rawUsage=[...M.rawUsage??[],{responseId:N.responseId,values:R.rawUsage}]}}l.at(-1).responseIds=b,b.length!==S.length&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??_,content:h.output.text,model:y})}}let f=a.filter(p=>p.role==="user").map(p=>p.content),m=qn(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:gs(Sa(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=O0(e,".json");return e.endsWith(".json")&&fg.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:mg(o,n,r)}catch{return null}}}}var fg,va,Ia=x(()=>{"use strict";No();Re();Tn();fg=/^[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:gs(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await x0(gs(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(!fg.test(e))return null;let n=gs(this.home,"sessions",`${e}.json`);try{return(await ag(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=mg(JSON.parse(await ig(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await ig(`${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 ag(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await C0(n),!0}}});import{createHash as M0}from"node:crypto";import{createRequire as $0}from"node:module";import{readdir as P0,realpath as U0}from"node:fs/promises";import{basename as pg,dirname as F0,join as hg,resolve as _g}from"node:path";function W0(){return j0("node:sqlite").DatabaseSync}function H0(){return process.env.HOME||process.env.USERPROFILE||""}function Cr(t){let e=[],n=0,r=()=>{let s=0n,o=0n;for(;;){if(n>=t.length||o>63n)return null;let i=t[n++];if(s|=BigInt(i&127)<<o,o+=7n,!(i&128))break}return s<=BigInt(Number.MAX_SAFE_INTEGER)?Number(s):null};for(;n<t.length;){let s=r();if(s===null)return e;let o=s>>>3,i=s&7;if(o===0)return e;if(i===0){let a=r();if(a===null)return e;e.push({field:o,wire:i,varint:a})}else if(i===1){if(n+8>t.length)return e;n+=8,e.push({field:o,wire:i})}else if(i===5){if(n+4>t.length)return e;n+=4,e.push({field:o,wire:i})}else if(i===2){let a=r();if(a===null||n+a>t.length)return e;e.push({field:o,wire:i,bytes:t.subarray(n,n+a)}),n+=a}else return e}return e}function Kt(t,e){return t.find(n=>n.field===e)}function B0(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=Cr(n.bytes),s=Kt(r,1)?.bytes,o=Kt(r,2)?.bytes;if(s===void 0||o===void 0)continue;let i=s.toString("utf8");e.has(i)||e.set(i,o.toString("utf8"))}return e}function X0(t){let e=Kt(Cr(t),5)?.bytes;if(e===void 0)return null;let n=Kt(Cr(e),1)?.bytes;if(n===void 0)return null;let r=Cr(n),s=Kt(r,1)?.varint;if(s===void 0)return null;let o=Kt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function q0(t){let e=Kt(t,4)?.bytes,n=e!==void 0?Cr(e):[],r=s=>{let o=Kt(n,s)?.varint;return o===void 0?null:K(o)};return{tokens:{input_uncached:r(2),input_cached:r(5),input_cache_write:r(4),output:r(3)},thinkingOutputTokens:r(9)}}function G0(t){let e=Kt(Cr(t),1)?.bytes;if(e===void 0)return null;let n=Cr(e),r=B0(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=Kt(n,19)?.bytes,i=o!==void 0&&o.length>0?o.toString("utf8"):null,a=r.get("last_step_index"),l=a===void 0?Number.NaN:Number(a),c=Number.isSafeInteger(l)&&l>=0?l:null,{tokens:d,thinkingOutputTokens:u}=q0(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function gg(t,e){oe(e);let n=t.prepare("SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) AS total FROM gen_metadata").get(),r=K(n?.total);if(r===null||r>e.maxBytes)return null;let s=t.prepare("SELECT idx, data FROM gen_metadata ORDER BY idx LIMIT ?").all(e.maxRows+1);if(s.length>e.maxRows)return null;let o=M0("sha256");o.update("rev:").update(ka).update(`
2
+ `),s=[];for(let o of r)if(e.signal.throwIfAborted(),!!o.trim())try{let i=B(JSON.parse(o));if(!i)return null;s.push(i)}catch{return null}return s}var Ao,lt,_t,T0,gt,w0,Tn=x(()=>{"use strict";Ao="bx3",lt={input_uncached:null,input_cached:null,input_cache_write:null,output:null};_t=class{map=new Map;record(e,n,r,s){if(typeof r!="string"||r.length===0||r.includes("\0"))return;let o=`${e}\0${n}\0${r}`;this.map.has(o)||this.map.set(o,{direction:n,path:r,bytes:s})}files(e){let n=[];for(let r of this.map.values())r.direction===e&&n.push({path:r.path,bytes:r.bytes});return n}},T0=0,gt=class{map=new Map;record(e){let n;e.id!==null?n=`id\0${e.id}\0${e.direction}\0${e.kind}`:e.bytes===null?n=`mark\0${e.direction}\0${e.kind}\0${e.basis}\0${e.ref??""}`:n=`seq\0${T0++}`,this.map.has(n)||this.map.set(n,e)}entries(){return[...this.map.values()]}};w0=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"])});import{readdir as v0}from"node:fs/promises";import{join as z_,sep as Q_}from"node:path";var hs,Jd=x(()=>{"use strict";Tn();hs=class{format;constructor(e){this.format=e}async discover(e,n,r){oe(e);let s=[],o=0,i=!1,a=async(l,c)=>{if(e.signal.throwIfAborted(),c>8||o>e.maxRows){i=!0;return}let d=await v0(l,{withFileTypes:!0}).catch(f=>(f.code!=="ENOENT"&&(i=!0),[])),u=f=>z_(l,f.name)+(f.isDirectory()?Q_:"");for(let f of d.sort((m,p)=>pe(u(m),u(p)))){e.signal.throwIfAborted();let m=z_(l,f.name),p=f.isDirectory()&&r?.startsWith(m+Q_);if(!(r&&!p&&pe(u(f),r)<=0)){if(!p&&++o>e.maxRows){i=!0;break}if(f.isDirectory())await a(m,c+1);else if(f.isFile()){let _=this.format.sessionId(m);_&&s.push({provider:this.format.provider,sessionid:_,source_id:m})}if(s.length>=n){i=!0;break}}}};return await a(this.format.root,0),s.sort((l,c)=>pe(l.source_id,c.source_id)),{sources:s.slice(0,n),truncated:i||s.length>n}}async bytes(e,n){if(oe(n),e.provider!==this.format.provider||this.format.sessionId(e.source_id)!==e.sessionid)return null;let r=await Me(e.source_id,[this.format.root]);if(!r)return null;let s=await ct(r,n).catch(()=>(n.signal.throwIfAborted(),null));return s&&{...s,revision:`${this.format.revision}:${s.revision}`}}async inspect(e,n){let r=await this.bytes(e,n);return r?{status:"ready",revision:r.revision}:{status:"partial"}}async read(e,n,r){let s=await this.bytes(e,r);if(!s||s.revision!==n)return{status:"partial"};let o=this.format.decode(s.data,e.sessionid,e.source_id,r);return!o||!o.responses?{status:"partial"}:{status:"complete",source:e,revision:n,checkpoint:null,responses:o.responses,...o.captureStatus?{capture_status:o.captureStatus}:{}}}}});function qn(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 No=x(()=>{"use strict"});import{createReadStream as Z_}from"node:fs";import{createInterface as eg}from"node:readline";import{stat as S0}from"node:fs/promises";import{homedir as b0}from"node:os";function tg(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=Z_(t,{encoding:"utf-8"}),r=eg({input:n,crlfDelay:1/0});try{for await(let s of r){let o=s.trim();if(!o)continue;let i=tg(o);i!==void 0?yield i:e?.()}}finally{n.destroy()}}async function Et(t,e){let n=[],r=Z_(t,{encoding:"utf-8"}),s=eg({input:r,crlfDelay:1/0});try{for await(let o of s){let i=o.trim();if(!i)continue;let a=tg(i);if(a!==void 0&&n.push(a),n.length>=e)break}}finally{s.close(),r.destroy()}return n}async function Ae(t){let e=await S0(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function _e(t){return t.replace(/\\n/g,`
3
+ `).replace(/\\t/g," ").replace(/\\r/g,"\r")}function G(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function At(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var Q,Re=x(()=>{"use strict";Q=b0()});import{readdir as I0}from"node:fs/promises";import{join as _s,resolve as k0}from"node:path";function Ta(t){return k0(t||process.env.XDG_DATA_HOME||_s(Q,".local","share"))}function A0(t){return _s(Ta(t),"muse","sessions")}function N0(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 sg(t,e){let n,r,s,o,i,a=[],l=new Map,c=new Map,d=new Set,u,f,m=()=>{f="partial"},p=g=>{if(typeof g!="string"||g.length===0){m();return}let E=l.get(g);return E||(E={id:g,turn:{id:g,status:"unknown"},responseIds:[]},l.set(g,E)),E},_=g=>{if(g.retained_frame&&Array.isArray(g.children)){for(let b of g.children)try{if(typeof b?.record_json!="string")throw new Error("missing record_json");_(JSON.parse(b.record_json))}catch{m()}return}if(g.stream?.kind!=="session"||g.stream?.id!==t)return;if(g.schema_version!==1){m();return}if(g.payload_type?.startsWith("runtime.session")&&g.payload_schema_version!==1){m();return}let E=g.payload?.source_run_record_id;for(let b of[g.id,E])if(!(typeof b!="string"||b.length===0)&&d.has(b))return;for(let b of[g.id,E])typeof b=="string"&&b.length>0&&d.add(b);let y=typeof g.recorded_at=="number"&&Number.isFinite(g.recorded_at)?new Date(g.recorded_at/1e3):void 0;if(g.recorded_at!==void 0&&(!y||!Number.isFinite(y.getTime()))){m();return}y&&Number.isFinite(y.getTime())&&((!s||y<s)&&(s=y),(!o||y>o)&&(o=y));let T=g.payload;if(g.payload_type==="runtime.session.metadata"&&(typeof T?.record?.workspace_root=="string"&&(n=T.record.workspace_root),typeof T?.record?.model_id=="string"&&(r=T.record.model_id)),g.payload_type!=="runtime.session"||T?.kind!=="run")return;let w=T.event,S=p(T.run_id);if(!w||!y||!S){w||m();return}if(w.kind==="started"&&typeof w.prompt=="string")a.push({role:"user",content:w.prompt,timestamp:y}),S.turn.startedAt=y,S.turn.prompt=w.prompt,S.turn.status="in_progress",i="in_progress";else if(w.kind==="assistant_message_committed"&&typeof w.text=="string")a.push({role:"assistant",content:w.text,timestamp:y});else if(w.kind==="terminal")S.turn.completedAt=y,S.turn.status=w.terminal==="completed"?"complete":"aborted",i=S.turn.status;else if(w.kind==="model_completed"){typeof w.model=="string"&&w.model.length>0&&(r=w.model,S.turn.model=w.model);let b=typeof E=="string"&&E.length>0?E:typeof g.id=="string"&&g.id.length>0?g.id:void 0;if(!b)m();else{S.responseIds.push(b);let q={};if(w.usage&&typeof w.usage=="object")for(let M of["input_tokens","output_tokens","cached_tokens","reasoning_tokens","input_uncached_tokens","cache_read_tokens","input_cache_read_tokens","cache_write_tokens","input_cache_write_tokens","promptTokens","prompt_tokens"]){let ue=w.usage[M];typeof ue=="number"&&Number.isSafeInteger(ue)&&ue>=0&&(q[M]=ue)}Object.keys(q).length>0&&(S.turn.rawUsage=[...S.turn.rawUsage??[],{responseId:b,values:q}]),c.set(b,N0(b,y,w.model,q))}if(!w.usage)return;let I={},L=w.usage.input_tokens,O=w.usage.cache_read_tokens??w.usage.input_cache_read_tokens,k=w.usage.cache_write_tokens??w.usage.input_cache_write_tokens,v=typeof w.usage.promptTokens=="number"?w.usage.promptTokens:typeof w.usage.prompt_tokens=="number"?w.usage.prompt_tokens:void 0,A=typeof L=="number"&&typeof O=="number"&&O>L||typeof v=="number"&&typeof O=="number"&&O>v||typeof v=="number"&&typeof k=="number"&&k>v||typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&O+k>v,N=A?void 0:typeof O=="number"?O:void 0,R=A?void 0:typeof k=="number"?k:void 0,C;A||(typeof w.usage.input_uncached_tokens=="number"?C=w.usage.input_uncached_tokens:typeof v=="number"&&typeof O=="number"&&typeof k=="number"&&v>=O+k&&(C=v-O-k)),C!==void 0&&C<0&&(C=void 0);let $=w.usage.output_tokens,P=w.usage.reasoning_tokens;typeof C=="number"&&Number.isSafeInteger(C)&&C>=0&&(I.inputTokens=C),typeof N=="number"&&Number.isSafeInteger(N)&&N>=0&&(I.cachedInputTokens=N),typeof R=="number"&&Number.isSafeInteger(R)&&R>=0&&(I.cacheWriteInputTokens=R),typeof $=="number"&&Number.isSafeInteger($)&&$>=0&&(I.outputTokens=$),typeof P=="number"&&Number.isSafeInteger(P)&&P>=0&&(I.reasoningOutputTokens=P),u=I}};return{visit:_,finish:()=>{if(!n||!s||!o)return null;let g=a.filter(w=>w.role==="user").map(w=>w.content),E=[...l.values()].map(w=>({...w.turn,...w.responseIds.length>0?{responseIds:[...w.responseIds]}:{}})),y=[...c.values()],T=qn(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 R0(t,e,n){let r=sg(e,n);for(let s of t)r.visit(s);return r.finish()}function L0(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=R0(a,e,n);return u&&l&&(u.captureStatus="partial"),u}function og(t){return{provider:"muse",root:A0(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:L0}}async function rg(t,e){let n=sg(t,e);for await(let r of Ee(e,n.markPartial))n.visit(r);return n.finish()}var ng,Ea,Kd=x(()=>{"use strict";No();Re();ng=/^[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 _s(this.dataHome,"muse","sessions")}getWatchPaths(){return[{directory:this.root,filePattern:/session\.jsonl$/}]}async files(e=this.root,n=0){let r;try{r=await I0(e,{withFileTypes:!0})}catch{return[]}let s=[];for(let o of r)o.isFile()&&o.name==="session.jsonl"?s.push(_s(e,o.name)):o.isDirectory()&&n<4&&s.push(...await this.files(_s(e,o.name),n+1));return s}async resolveSessionPath(e){return ng.test(e)?(await this.files()).find(n=>n.endsWith(_s(e,"session.jsonl")))??null:null}async loadSession(e){let n=await this.resolveSessionPath(e);return n?rg(e,n):null}async discoverSessions(){let e=[];for(let n of await this.files())try{let r=n.split(/[\\/]/).at(-2);if(!ng.test(r))continue;let s=await rg(r,n);s&&e.push(s)}catch{}return e}async deleteSession(){return!1}}});import{readFile as ig,readdir as x0,rm as C0,stat as ag}from"node:fs/promises";import{basename as O0,join as gs,resolve as D0}from"node:path";function Sa(t){return D0(t||process.env.MINIPLAYER_HOME||gs(process.env.XDG_DATA_HOME||gs(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 lg(t){if(!t||typeof t!="object")return null;let e=t.toolCallId??t.id;return typeof e=="string"&&e.length>0?e:null}function cg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function dg(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 ug(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 mg(t,e,n){if(!t||typeof t!="object")return null;let r=t;if(![1,2].includes(r.version)||r.id!==e||typeof r.cwd!="string")return null;let s=p=>{if(typeof p!="string")return;let _=new Date(p);return Number.isFinite(_.getTime())?_:void 0},o=s(r.createdAt),i=s(r.updatedAt);if(!o||!i)return null;let a=[],l=[],c=[],d=r.version===1,u="complete";if(r.version===1){if(!Array.isArray(r.messages))return null;for(let p of r.messages){if(!p||!["user","assistant"].includes(p.role)||typeof p.content!="string")return null;a.push({role:p.role,content:p.content,timestamp:s(p.timestamp)??i})}}else{if(!Array.isArray(r.turns))return null;let p=new Set,_=new Set;for(let h of r.turns){if(!h||typeof h.responseId!="string"||!h.responseId||typeof h.input?.text!="string")return null;if(p.has(h.responseId)){d=!0;continue}p.add(h.responseId);let g=s(h.startedAt),E=s(h.completedAt??h.endedAt);if(!g)return null;let y=typeof h.model=="string"?h.model:void 0;["complete","running","failed","aborted"].includes(h.status)||(d=!0);let T=h.status==="complete"?"complete":h.status==="running"?"in_progress":h.status==="failed"?"failed":h.status==="aborted"?"aborted":"unknown";u=T==="failed"||T==="unknown"?"aborted":T,(T!=="complete"||h.partial===!0)&&(d=!0);let w=Array.isArray(h.modelResponses),S=w?h.modelResponses:[],b=[];l.push({id:h.responseId,startedAt:g,completedAt:E,model:y,prompt:h.input.text,status:T,responseIds:b}),a.push({role:"user",timestamp:g,content:h.input.text});let I=Array.isArray(h.toolEvents)&&h.toolEvents.length>0;if(!w&&!I){let A=h.usage??{},N=ug({...h,usage:A});Object.keys(N.rawUsage).length&&(l.at(-1).rawUsage=[{responseId:h.responseId,values:N.rawUsage}]),b.push(h.responseId),c.push({response_id:h.responseId,timestamp:(E??g).toISOString(),model:y??null,model_provider:typeof h.provider=="string"?h.provider:null,tokens:N.tokens,files_read:[],files_written:[],read_bytes:Buffer.byteLength(h.input.text,"utf8"),write_bytes:0,external_io:[{direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"}],pricing_facts:N.pricingFacts}),T!=="complete"&&!h.usage&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??g,content:h.output.text,model:y});continue}let L=new Map,O=new Map,k=new Set,v=[];for(let A of S){if(!A||typeof A!="object"||typeof A.responseId!="string"||!A.responseId){d=!0;continue}if(b.includes(A.responseId)){d=!0;continue}let N=A,R=v.length;v.push({response:N,index:R,filesRead:[],filesWritten:[],io:[]}),b.push(A.responseId),_.has(A.responseId)&&(d=!0),_.add(A.responseId),N.toolCalls!==void 0&&!Array.isArray(N.toolCalls)&&(d=!0,v[R].io.push({direction:"read",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:A.responseId,ref:null,bytes:null,basis:"unknown"}));for(let C of Array.isArray(N.toolCalls)?N.toolCalls:[]){let $=lg(C),P=Yd(C);if($)L.set($,R),O.set($,P);else{d=!0;let q=P==="list_directory"||P==="read_file"||P==="webget"||P==="shell"||P==="tool",M=P==="write_file"||P==="shell"||P==="tool";q&&v[R].io.push({direction:"read",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"}),M&&v[R].io.push({direction:"write",kind:"unattributed",id:null,ref:null,bytes:null,basis:"unknown"})}}}b.length===0&&S.length>0&&(d=!0);for(let A of Array.isArray(h.toolEvents)?h.toolEvents:[]){let N=A&&typeof A=="object"?A:{},R=lg(N),C=R?L.get(R):void 0,$=Yd(N),P=cg(N.result),q=N.status==="failed"||N.error!==void 0;if(N.type==="tool_call"?a.push({role:"tool_use",timestamp:s(N?.timestamp)??g,content:wa(N?.input??N?.args),toolName:$,toolInput:wa(N?.input??N?.args),toolInputData:cg(N?.input??N?.args)??void 0,...R?{toolCallId:R}:{}}):a.push({role:"tool_result",timestamp:s(N?.timestamp)??E??g,content:wa(q?N?.error:N?.result),toolName:$,...R?{toolCallId:R}:{}}),C===void 0){d=!0;continue}let M=v[C];(N.type==="tool_result"||q||N.result!==void 0)&&k.add(R);let ue=P?.path,H=K(P?.bytesRead??P?.bytesWritten);N.type!=="tool_call"&&($==="read_file"&&!q&&typeof ue=="string"&&H!==null?M.filesRead.push({path:ue,bytes:H}):$==="write_file"&&!q&&typeof ue=="string"&&H!==null?M.filesWritten.push({path:ue,bytes:H}):$==="webget"&&!q&&H!==null?M.io.push({direction:"read",kind:"web",id:R,ref:dg(P?.finalUrl??P?.url),bytes:H,basis:"certified_counter"}):$==="shell"||q?($!=="write_file"&&M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}),($==="shell"||$==="write_file")&&M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"})):$==="list_directory"||$==="read_file"||$==="webget"?M.io.push({direction:"read",kind:$==="webget"?"web":"unattributed",id:R,ref:$==="webget"?dg(P?.finalUrl??P?.url):null,bytes:null,basis:"unknown"}):$==="write_file"?M.io.push({direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}):M.io.push({direction:"read",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:R,ref:null,bytes:null,basis:"unknown"}))}for(let[A,N]of O)if(!k.has(A)){let R=v[L.get(A)],C=N==="list_directory"||N==="read_file"||N==="webget"||N==="shell",$=N==="write_file"||N==="shell";C&&R.io.push({direction:"read",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),$&&R.io.push({direction:"write",kind:"unattributed",id:A,ref:null,bytes:null,basis:"unknown"}),d=!0}for(let A of v){let N=A.response,R=ug(N),C=s(N.completedAt??N.startedAt)??E??g;new Set((Array.isArray(N.toolCalls)?N.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:N.responseId,ref:null,bytes:null,basis:"unknown"},{direction:"write",kind:"unattributed",id:N.responseId,ref:null,bytes:null,basis:"unknown"}),A.index===0&&A.io.unshift({direction:"read",kind:"prompt",id:h.responseId,ref:null,bytes:Buffer.byteLength(h.input.text,"utf8"),basis:"input_text"});let P=A.io.some(M=>M.direction==="read"&&M.bytes===null),q=A.io.some(M=>M.direction==="write"&&M.bytes===null);if(c.push({response_id:N.responseId,timestamp:C.toISOString(),model:typeof N.model=="string"?N.model:null,model_provider:typeof N.provider=="string"?N.provider:typeof h.provider=="string"?h.provider:null,tokens:R.tokens,files_read:P?null:A.filesRead,files_written:q?null:A.filesWritten,read_bytes:P?null:A.filesRead.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="read").reduce((M,ue)=>M+(ue.bytes??0),0),write_bytes:q?null:A.filesWritten.reduce((M,ue)=>M+(ue.bytes??0),0)+A.io.filter(M=>M.direction==="write").reduce((M,ue)=>M+(ue.bytes??0),0),external_io:A.io,pricing_facts:R.pricingFacts}),Object.keys(R.rawUsage).length){let M=l.at(-1);M.rawUsage=[...M.rawUsage??[],{responseId:N.responseId,values:R.rawUsage}]}}l.at(-1).responseIds=b,b.length!==S.length&&(d=!0),typeof h.output?.text=="string"&&a.push({role:"assistant",timestamp:E??g,content:h.output.text,model:y})}}let f=a.filter(p=>p.role==="user").map(p=>p.content),m=qn(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:gs(Sa(t),"sessions"),revision:"miniplayer-data-v3",sessionId(e){let n=O0(e,".json");return e.endsWith(".json")&&fg.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:mg(o,n,r)}catch{return null}}}}var fg,va,Ia=x(()=>{"use strict";No();Re();Tn();fg=/^[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:gs(this.home,"sessions"),filePattern:/\.json$/}]}async discoverSessions(){let e;try{e=await x0(gs(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(!fg.test(e))return null;let n=gs(this.home,"sessions",`${e}.json`);try{return(await ag(n)).isFile()?n:null}catch{return null}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;try{let r=mg(JSON.parse(await ig(n,"utf8")),e,n);if(!r)return null;let s="complete";try{let o=JSON.parse(await ig(`${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 ag(`${n}.lock`),new Error("Cannot delete a locked miniplayer session")}catch(r){if(r.code!=="ENOENT")throw r}return await C0(n),!0}}});import{createHash as M0}from"node:crypto";import{createRequire as $0}from"node:module";import{readdir as P0,realpath as U0}from"node:fs/promises";import{basename as pg,dirname as F0,join as hg,resolve as _g}from"node:path";function W0(){return j0("node:sqlite").DatabaseSync}function H0(){return process.env.HOME||process.env.USERPROFILE||""}function Cr(t){let e=[],n=0,r=()=>{let s=0n,o=0n;for(;;){if(n>=t.length||o>63n)return null;let i=t[n++];if(s|=BigInt(i&127)<<o,o+=7n,!(i&128))break}return s<=BigInt(Number.MAX_SAFE_INTEGER)?Number(s):null};for(;n<t.length;){let s=r();if(s===null)return e;let o=s>>>3,i=s&7;if(o===0)return e;if(i===0){let a=r();if(a===null)return e;e.push({field:o,wire:i,varint:a})}else if(i===1){if(n+8>t.length)return e;n+=8,e.push({field:o,wire:i})}else if(i===5){if(n+4>t.length)return e;n+=4,e.push({field:o,wire:i})}else if(i===2){let a=r();if(a===null||n+a>t.length)return e;e.push({field:o,wire:i,bytes:t.subarray(n,n+a)}),n+=a}else return e}return e}function Kt(t,e){return t.find(n=>n.field===e)}function B0(t){let e=new Map;for(let n of t){if(n.field!==20||n.bytes===void 0)continue;let r=Cr(n.bytes),s=Kt(r,1)?.bytes,o=Kt(r,2)?.bytes;if(s===void 0||o===void 0)continue;let i=s.toString("utf8");e.has(i)||e.set(i,o.toString("utf8"))}return e}function X0(t){let e=Kt(Cr(t),5)?.bytes;if(e===void 0)return null;let n=Kt(Cr(e),1)?.bytes;if(n===void 0)return null;let r=Cr(n),s=Kt(r,1)?.varint;if(s===void 0)return null;let o=Kt(r,2)?.varint??0,i=s*1e3+Math.floor(o/1e6),a=new Date(i);return Number.isFinite(a.getTime())?a.toISOString():null}function q0(t){let e=Kt(t,4)?.bytes,n=e!==void 0?Cr(e):[],r=s=>{let o=Kt(n,s)?.varint;return o===void 0?null:K(o)};return{tokens:{input_uncached:r(2),input_cached:r(5),input_cache_write:r(4),output:r(3)},thinkingOutputTokens:r(9)}}function G0(t){let e=Kt(Cr(t),1)?.bytes;if(e===void 0)return null;let n=Cr(e),r=B0(n),s=r.get("request_id");if(s===void 0||s.length===0)return null;let o=Kt(n,19)?.bytes,i=o!==void 0&&o.length>0?o.toString("utf8"):null,a=r.get("last_step_index"),l=a===void 0?Number.NaN:Number(a),c=Number.isSafeInteger(l)&&l>=0?l:null,{tokens:d,thinkingOutputTokens:u}=q0(n);return{requestId:s,model:i,lastStepIndex:c,tokens:d,thinkingOutputTokens:u}}function gg(t,e){oe(e);let n=t.prepare("SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) AS total FROM gen_metadata").get(),r=K(n?.total);if(r===null||r>e.maxBytes)return null;let s=t.prepare("SELECT idx, data FROM gen_metadata ORDER BY idx LIMIT ?").all(e.maxRows+1);if(s.length>e.maxRows)return null;let o=M0("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=G0(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 g=X0(p);g!==null&&c.set(u,g)}return{revision:`${Ao}+${ka}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function V0(t){return t.generations.map(e=>({response_id:e.requestId,timestamp:e.lastStepIndex===null?null:t.timestamps.get(e.lastStepIndex)??null,model:e.model,tokens:e.tokens,files_read:null,files_written:null,external_io:null,read_bytes:null,write_bytes:null,model_provider:null,pricing_facts:Jt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function yg(t={}){return new Ro(t)}var Gn,ka,j0,Ro,zd=x(()=>{"use strict";Tn();Gn="agy",ka="agy-tokens-v1",j0=$0(import.meta.url);Ro=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=_g(e.agyConversationsDir??hg(H0(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){oe(e);let s=await P0(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 U0(hg(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:Gn,sessionid:pg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await Me(e.source_id,[this.conversationsDir]);if(n===null||pg(n,".db")!==e.sessionid||_g(F0(n))!==this.conversationsDir)return null;try{let r=new(W0())(n,{open:!0,readOnly:!0});return r.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),r}catch{return null}}async inspect(e,n){if(oe(n),e.provider!==Gn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=gg(r,n);return s?{status:"ready",revision:s.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}async read(e,n,r){if(oe(r),e.provider!==Gn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=gg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=V0(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 J0 from"node:zlib";function rL(t,e){return t[e]===Y0&&t[e+1]===z0&&t[e+2]===Q0&&t[e+3]===Z0}function Eg(t,e){return(t[e]&240)===80&&t[e+1]===eL&&t[e+2]===tL&&t[e+3]===nL}function sL(t,e){if(Eg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!rL(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 Lo(t){let e=[],n=0;for(;n+4<=t.length;){let r=sL(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 Lo(t))Eg(n,0)||e.push(K0(n).toString("utf8"));return e.join("")}var K0,Y0,z0,Q0,Z0,eL,tL,nL,Na=x(()=>{"use strict";K0=J0.zstdDecompressSync,Y0=40,z0=181,Q0=47,Z0=253,eL=42,tL=77,nL=24});import{readdir as oL,realpath as iL}from"node:fs/promises";import{basename as Qd,dirname as Tg,join as Sg,resolve as bg}from"node:path";import aL from"node:zlib";function Ig(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function mL(t){return fL.has(t)||Xn(t)}function pL(){return process.env.HOME||process.env.USERPROFILE||""}function hL(t){if(typeof t=="string")return Buffer.byteLength(t,"utf8");if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function wg(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 _L(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function gL(t,e){let n=Lo(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(),_L(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=lL(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 yL(t){let e=[];for(let n of t.split(`
7
- `)){if(!n.trim())continue;let r;try{r=JSON.parse(n)}catch{continue}let s=typeof r.type=="string"?r.type:"";s.endsWith("-chunks")||s==="assistant/chunk"&&B(B(r.data)?.chunk)?.type!=="usage"||e.push(r)}return e}function EL(t){if(typeof t=="string")try{return B(JSON.parse(t))}catch{return null}return B(t)}function vg(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function TL(t,e,n,r){let s=new Map,o=[],i=new Set,a=new Map,l=null,c=null,d=null;for(let f of t){r.signal.throwIfAborted();let m=B(f.data);if(f.type==="assistant/chunk"){let p=B(m?.chunk),g=B(p?.usage),h=vg(m?.turn,m?.step);g&&h!==null&&typeof m?.turn=="number"&&typeof m?.step=="number"&&a.set(h,{turn:m.turn,step:m.step,usage:g,time:f.time});continue}if(f.type==="request/header"){let p=B(B(m?.header)?.config);typeof p?.provider=="string"&&p.provider&&(l=p.provider),typeof p?.model=="string"&&p.model&&(c=p.model);continue}if(f.type==="user/message"){if(B(m?.source)?.kind!=="user")continue;let g=typeof m?.id=="string"&&m.id?m.id:null;o.push({id:g,bytes:hL(m?.content)});continue}if(f.type==="assistant/message"){let p=B(m?.message),g=B(p?.source),h=typeof p?.id=="string"&&p.id?p.id:null,_=vg(m?.turn,m?.step),E;if(_!==null)i.add(_),E=`dsh:turn-step:${m.turn}/${m.step}`;else{if(B(m?.usage))return{status:"partial"};E=h}if(E===null)return{status:"partial"};let y=wg(B(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(typeof f.time=="number"?f.time:null),model:(typeof g?.model=="string"&&g.model?g.model:null)??c,tokens:y??{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,reasoning:null,provider:typeof g?.provider=="string"&&g.provider?g.provider:null},s.set(E,T),s.size>r.maxRows)return{status:"partial"};for(let w of o)T.io.record({direction:"read",kind:"prompt",id:w.id,ref:null,bytes:w.bytes,basis:w.bytes===null?"unknown":"input_text"});o.length=0}if(y){T.meta.tokens=y;let w=K(B(m?.usage)?.reasoningTokens);w!==null&&(T.reasoning=w)}d=E;continue}if(f.type==="tool/call"){let p=d!==null?s.get(d):void 0;if(!p)continue;let g=typeof m?.callId=="string"&&m.callId?m.callId:null,h=typeof m?.name=="string"?m.name.toLowerCase():"",_=EL(m?.arguments),E=(typeof _?.file_path=="string"&&_.file_path?_.file_path:null)??(typeof _?.path=="string"&&_.path?_.path:null);dL.has(h)?E!==null?p.obs.record(g??"","read",E,null):be(p.io,g):uL.has(h)?E!==null?p.obs.record(g??"","written",E,ps(_)):be(p.io,g):mL(h)||be(p.io,g);continue}}for(let[f,{turn:m,step:p,usage:g,time:h}]of a){if(i.has(f))continue;r.signal.throwIfAborted();let _=wg(g),E=new gt;be(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:yt(typeof h=="number"?h:null),model:c,tokens:_??{...lt},files_read:[],files_written:[]},obs:new _t,io:E,reasoning:K(g.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:g,provider:h}of s.values()){let _=m.files("read"),E=m.files("written"),y=p.entries();u.push({...f,files_read:_,files_written:E,external_io:y,read_bytes:Ze(_,y,"read"),write_bytes:Ze(E,y,"written"),model_provider:l??h,pricing_facts:Jt({reasoning:g??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function wL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await oL(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=Sg(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()&&Ig(f.name)){let p=await iL(m).catch(()=>bg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function kg(t={}){return new Zd(t)}var Vn,lL,cL,dL,uL,fL,Zd,Ag=x(()=>{"use strict";Tn();Na();Vn="dsh",lL=aL.zstdDecompressSync;cL=5e5,dL=new Set(["read","read_image"]),uL=new Set(["write","edit"]),fL=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??Sg(pL(),".dsh");this.sessionsDir=bg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):cL}async discover(e,n,r=null){oe(e);let{paths:s,truncated:o}=await wL(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:Vn,sessionid:Qd(Tg(i)),source_id:i})),truncated:o}}matches(e,n){return Ig(Qd(n))&&Qd(Tg(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Vn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Vn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=gL(o.data,r);return a?{status:"partial"}:TL(yL(i),e,n,r)}}});import{readdir as vL,realpath as SL}from"node:fs/promises";import{basename as Ra,dirname as bL,join as eu,resolve as Ng}from"node:path";function LL(){return process.env.HOME||process.env.USERPROFILE||""}function xL(){let t=LL();return[eu(t,".qwen","projects"),eu(t,".qwen.bk1","projects")]}function CL(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:B(B(t.systemPayload)?.uiEvent)}function OL(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function DL(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 ML(t){let e=B(t)?.parts;if(!Array.isArray(e))return null;let n=0,r=!1;for(let s of e){let o=B(s);!o||o.thought===!0||typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}return r?n:null}function $L(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=ML(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 PL(t,e,n,r){let{promptBytes:s,resolve:o}=$L(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=CL(d);if(u===null)continue;let f=OL(u);if(f===IL){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=DL(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,thoughts:null},a.set(E,T),a.size>r.maxRows)return{status:"partial"};let S=typeof d.uuid=="string"&&d.uuid?d.uuid:null,b=S===null?{kind:"broken"}:o(S);if(b.kind==="broken")T.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"});else if(b.kind==="found"&&!i.has(b.uuid)){i.add(b.uuid);let I=s.get(b.uuid)??null;T.io.record({direction:"read",kind:"prompt",id:b.uuid,ref:null,bytes:I,basis:I===null?"unknown":"input_text"})}}T.meta.tokens=y,typeof u.model=="string"&&u.model&&(T.meta.model=u.model);let w=K(u.thoughts_token_count);w!==null&&(T.thoughts=w);continue}if(f!==kL)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 g=typeof u.function_name=="string"?u.function_name.toLowerCase():"",h=B(u.function_args),_=`tool-${l++}`;if(AL.has(g)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(_,"read",E,null):be(p.io,_)}else if(NL.has(g)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(_,"written",E,ps(h)):be(p.io,_)}else Xn(g)||be(p.io,_)}let c=[];for(let{meta:d,obs:u,io:f,thoughts:m}of a.values()){let p=u.files("read"),g=u.files("written"),h=f.entries();c.push({...d,files_read:p,files_written:g,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(g,h,"written"),model_provider:null,pricing_facts:Jt({reasoning:m??void 0},d.tokens.output,d.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:c}}async function UL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await vL(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")&&Ra(c)===Rg){let m=await SL(f).catch(()=>Ng(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function FL(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 Lg(t={}){return new tu(t)}var Jn,IL,kL,Rg,AL,NL,RL,tu,xg=x(()=>{"use strict";Tn();Jn="qwen",IL="qwen-code.api_response",kL="qwen-code.tool_call",Rg="chats",AL=new Set(["read_file"]),NL=new Set(["write_file"]),RL=5e5;tu=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??xL()).map(n=>Ng(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):RL}async discover(e,n,r=null){oe(e);let s=new Map,o=!1;for(let a of this.roots){e.signal.throwIfAborted();let l=await UL(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:Jn,sessionid:Ra(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Ra(n,".jsonl")===e.sessionid&&Ra(bL(n))===Rg}async inspect(e,n){if(oe(n),e.provider!==Jn)return{status:"unsupported"};let r=await Me(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Jn)return{status:"unsupported"};let s=await Me(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ya(o.data,r);return i?FL(i,e.sessionid)?PL(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as jL}from"node:crypto";import{createRequire as WL}from"node:module";import{join as xo,resolve as nu}from"node:path";function BL(){return HL("node:sqlite").DatabaseSync}function Cg(){return process.env.HOME||process.env.USERPROFILE||""}function XL(){let t=process.env.XDG_DATA_HOME||xo(Cg(),".local","share"),e=process.env.XDG_CONFIG_HOME||xo(Cg(),".config");return[xo(t,"opencode","opencode.db"),xo(t,"opencode","opencode-local.db"),xo(e,"opencode","opencode.db")]}function KL(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":qL.includes(e)?"read":GL.includes(e)?"written":null}function Og(t,e=VL){let n=B(t);if(!n)return null;for(let r of e){let s=n[r];if(typeof s=="string"&&s.length>0)return s;if(Array.isArray(s)){for(let o of s)if(typeof o=="string"&&o.length>0)return o}}return null}function YL(t){let e=B(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=B(r),o=s?.newString??s?.new_string;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function zL(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
6
+ `);let _=X0(p);_!==null&&c.set(u,_)}return{revision:`${Ao}+${ka}:sha256:${o.digest("hex")}`,generations:i,timestamps:c}}function V0(t){return t.generations.map(e=>({response_id:e.requestId,timestamp:e.lastStepIndex===null?null:t.timestamps.get(e.lastStepIndex)??null,model:e.model,tokens:e.tokens,files_read:null,files_written:null,external_io:null,read_bytes:null,write_bytes:null,model_provider:null,pricing_facts:Jt({reasoning:e.thinkingOutputTokens},e.tokens.output,e.tokens.input_cache_write)}))}function yg(t={}){return new Ro(t)}var Gn,ka,j0,Ro,zd=x(()=>{"use strict";Tn();Gn="agy",ka="agy-tokens-v1",j0=$0(import.meta.url);Ro=class{conversationsDir;sqliteBusyTimeoutMs;constructor(e={}){this.conversationsDir=_g(e.agyConversationsDir??hg(H0(),".gemini","antigravity-cli","conversations")),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}async discover(e,n,r=null){oe(e);let s=await P0(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 U0(hg(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:Gn,sessionid:pg(i,".db"),source_id:i})),truncated:!1}}async open(e){let n=await Me(e.source_id,[this.conversationsDir]);if(n===null||pg(n,".db")!==e.sessionid||_g(F0(n))!==this.conversationsDir)return null;try{let r=new(W0())(n,{open:!0,readOnly:!0});return r.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),r}catch{return null}}async inspect(e,n){if(oe(n),e.provider!==Gn)return{status:"unsupported"};let r=await this.open(e);if(r===null)return{status:"unavailable"};try{let s=gg(r,n);return s?{status:"ready",revision:s.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}async read(e,n,r){if(oe(r),e.provider!==Gn)return{status:"unsupported"};let s=await this.open(e);if(s===null)return{status:"unavailable"};try{s.exec("BEGIN");let o=gg(s,r);if(o===null||o.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let i=V0(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 J0 from"node:zlib";function rL(t,e){return t[e]===Y0&&t[e+1]===z0&&t[e+2]===Q0&&t[e+3]===Z0}function Eg(t,e){return(t[e]&240)===80&&t[e+1]===eL&&t[e+2]===tL&&t[e+3]===nL}function sL(t,e){if(Eg(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!rL(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 Lo(t){let e=[],n=0;for(;n+4<=t.length;){let r=sL(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 Lo(t))Eg(n,0)||e.push(K0(n).toString("utf8"));return e.join("")}var K0,Y0,z0,Q0,Z0,eL,tL,nL,Na=x(()=>{"use strict";K0=J0.zstdDecompressSync,Y0=40,z0=181,Q0=47,Z0=253,eL=42,tL=77,nL=24});import{readdir as oL,realpath as iL}from"node:fs/promises";import{basename as Qd,dirname as Tg,join as Sg,resolve as bg}from"node:path";import aL from"node:zlib";function Ig(t){return/^session(\.v\d+)?\.jsonl\.zstd$/.test(t)}function mL(t){return fL.has(t)||Xn(t)}function pL(){return process.env.HOME||process.env.USERPROFILE||""}function hL(t){if(typeof t=="string")return Buffer.byteLength(t,"utf8");if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function wg(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 _L(t){return t.length>=4&&(t[0]&240)===80&&t[1]===42&&t[2]===77&&t[3]===24}function gL(t,e){let n=Lo(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(),_L(i))continue;if(i.length>e.maxBytes)return{text:s.join(""),truncated:!0};let a;try{a=lL(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 yL(t){let e=[];for(let n of t.split(`
7
+ `)){if(!n.trim())continue;let r;try{r=JSON.parse(n)}catch{continue}let s=typeof r.type=="string"?r.type:"";s.endsWith("-chunks")||s==="assistant/chunk"&&B(B(r.data)?.chunk)?.type!=="usage"||e.push(r)}return e}function EL(t){if(typeof t=="string")try{return B(JSON.parse(t))}catch{return null}return B(t)}function vg(t,e){return typeof t!="number"||typeof e!="number"?null:`${t}\0${e}`}function TL(t,e,n,r){let s=new Map,o=[],i=new Set,a=new Map,l=null,c=null,d=null;for(let f of t){r.signal.throwIfAborted();let m=B(f.data);if(f.type==="assistant/chunk"){let p=B(m?.chunk),_=B(p?.usage),h=vg(m?.turn,m?.step);_&&h!==null&&typeof m?.turn=="number"&&typeof m?.step=="number"&&a.set(h,{turn:m.turn,step:m.step,usage:_,time:f.time});continue}if(f.type==="request/header"){let p=B(B(m?.header)?.config);typeof p?.provider=="string"&&p.provider&&(l=p.provider),typeof p?.model=="string"&&p.model&&(c=p.model);continue}if(f.type==="user/message"){if(B(m?.source)?.kind!=="user")continue;let _=typeof m?.id=="string"&&m.id?m.id:null;o.push({id:_,bytes:hL(m?.content)});continue}if(f.type==="assistant/message"){let p=B(m?.message),_=B(p?.source),h=typeof p?.id=="string"&&p.id?p.id:null,g=vg(m?.turn,m?.step),E;if(g!==null)i.add(g),E=`dsh:turn-step:${m.turn}/${m.step}`;else{if(B(m?.usage))return{status:"partial"};E=h}if(E===null)return{status:"partial"};let y=wg(B(m?.usage)),T=s.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(typeof f.time=="number"?f.time:null),model:(typeof _?.model=="string"&&_.model?_.model:null)??c,tokens:y??{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,reasoning:null,provider:typeof _?.provider=="string"&&_.provider?_.provider:null},s.set(E,T),s.size>r.maxRows)return{status:"partial"};for(let w of o)T.io.record({direction:"read",kind:"prompt",id:w.id,ref:null,bytes:w.bytes,basis:w.bytes===null?"unknown":"input_text"});o.length=0}if(y){T.meta.tokens=y;let w=K(B(m?.usage)?.reasoningTokens);w!==null&&(T.reasoning=w)}d=E;continue}if(f.type==="tool/call"){let p=d!==null?s.get(d):void 0;if(!p)continue;let _=typeof m?.callId=="string"&&m.callId?m.callId:null,h=typeof m?.name=="string"?m.name.toLowerCase():"",g=EL(m?.arguments),E=(typeof g?.file_path=="string"&&g.file_path?g.file_path:null)??(typeof g?.path=="string"&&g.path?g.path:null);dL.has(h)?E!==null?p.obs.record(_??"","read",E,null):be(p.io,_):uL.has(h)?E!==null?p.obs.record(_??"","written",E,ps(g)):be(p.io,_):mL(h)||be(p.io,_);continue}}for(let[f,{turn:m,step:p,usage:_,time:h}]of a){if(i.has(f))continue;r.signal.throwIfAborted();let g=wg(_),E=new gt;be(E,null);let y={meta:{response_id:`dsh:turn-step:${m}/${p}`,timestamp:yt(typeof h=="number"?h:null),model:c,tokens:g??{...lt},files_read:[],files_written:[]},obs:new _t,io:E,reasoning:K(_.reasoningTokens),provider:l};if(s.set(y.meta.response_id,y),s.size>r.maxRows)return{status:"partial"}}let u=[];for(let{meta:f,obs:m,io:p,reasoning:_,provider:h}of s.values()){let g=m.files("read"),E=m.files("written"),y=p.entries();u.push({...f,files_read:g,files_written:E,external_io:y,read_bytes:Ze(g,y,"read"),write_bytes:Ze(E,y,"written"),model_provider:l??h,pricing_facts:Jt({reasoning:_??void 0},f.tokens.output,f.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:u}}async function wL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c,d){r.signal.throwIfAborted();let u=await oL(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=Sg(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()&&Ig(f.name)){let p=await iL(m).catch(()=>bg(m));(s===null||pe(p,s)>0)&&o.push(p)}}}return await l(t,0),{paths:o.sort(pe),truncated:a}}function kg(t={}){return new Zd(t)}var Vn,lL,cL,dL,uL,fL,Zd,Ag=x(()=>{"use strict";Tn();Na();Vn="dsh",lL=aL.zstdDecompressSync;cL=5e5,dL=new Set(["read","read_image"]),uL=new Set(["write","edit"]),fL=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??Sg(pL(),".dsh");this.sessionsDir=bg(n,"sessions"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):cL}async discover(e,n,r=null){oe(e);let{paths:s,truncated:o}=await wL(this.sessionsDir,n,this.maxDiscoveryTraversalVisits,e,r);return{sources:s.map(i=>({provider:Vn,sessionid:Qd(Tg(i)),source_id:i})),truncated:o}}matches(e,n){return Ig(Qd(n))&&Qd(Tg(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Vn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Vn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let{text:i,truncated:a}=gL(o.data,r);return a?{status:"partial"}:TL(yL(i),e,n,r)}}});import{readdir as vL,realpath as SL}from"node:fs/promises";import{basename as Ra,dirname as bL,join as eu,resolve as Ng}from"node:path";function LL(){return process.env.HOME||process.env.USERPROFILE||""}function xL(){let t=LL();return[eu(t,".qwen","projects"),eu(t,".qwen.bk1","projects")]}function CL(t){return t.type!=="system"||t.subtype!=="ui_telemetry"?null:B(B(t.systemPayload)?.uiEvent)}function OL(t){let e=t["event.name"];return typeof e=="string"&&e.length>0?e:null}function DL(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 ML(t){let e=B(t)?.parts;if(!Array.isArray(e))return null;let n=0,r=!1;for(let s of e){let o=B(s);!o||o.thought===!0||typeof o.text=="string"&&(n+=Buffer.byteLength(o.text,"utf8"),r=!0)}return r?n:null}function $L(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=ML(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 PL(t,e,n,r){let{promptBytes:s,resolve:o}=$L(t),i=new Set,a=new Map,l=0;for(let d of t){r.signal.throwIfAborted();let u=CL(d);if(u===null)continue;let f=OL(u);if(f===IL){let E=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(E===null)return{status:"unsupported"};let y=DL(u);if(y===null)return{status:"partial"};let T=a.get(E);if(!T){if(T={meta:{response_id:E,timestamp:yt(u["event.timestamp"]??d.timestamp),model:typeof u.model=="string"&&u.model?u.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,thoughts:null},a.set(E,T),a.size>r.maxRows)return{status:"partial"};let S=typeof d.uuid=="string"&&d.uuid?d.uuid:null,b=S===null?{kind:"broken"}:o(S);if(b.kind==="broken")T.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"});else if(b.kind==="found"&&!i.has(b.uuid)){i.add(b.uuid);let I=s.get(b.uuid)??null;T.io.record({direction:"read",kind:"prompt",id:b.uuid,ref:null,bytes:I,basis:I===null?"unknown":"input_text"})}}T.meta.tokens=y,typeof u.model=="string"&&u.model&&(T.meta.model=u.model);let w=K(u.thoughts_token_count);w!==null&&(T.thoughts=w);continue}if(f!==kL)continue;let m=typeof u.response_id=="string"&&u.response_id?u.response_id:null;if(m===null)continue;let p=a.get(m);if(p===void 0)return{status:"partial"};let _=typeof u.function_name=="string"?u.function_name.toLowerCase():"",h=B(u.function_args),g=`tool-${l++}`;if(AL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"read",E,null):be(p.io,g)}else if(NL.has(_)){let E=typeof h?.file_path=="string"?h.file_path:null;E!==null?p.obs.record(g,"written",E,ps(h)):be(p.io,g)}else Xn(_)||be(p.io,g)}let c=[];for(let{meta:d,obs:u,io:f,thoughts:m}of a.values()){let p=u.files("read"),_=u.files("written"),h=f.entries();c.push({...d,files_read:p,files_written:_,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(_,h,"written"),model_provider:null,pricing_facts:Jt({reasoning:m??void 0},d.tokens.output,d.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:c}}async function UL(t,e,n,r,s){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await vL(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")&&Ra(c)===Rg){let m=await SL(f).catch(()=>Ng(f));(s===null||pe(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(pe),truncated:a}}function FL(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 Lg(t={}){return new tu(t)}var Jn,IL,kL,Rg,AL,NL,RL,tu,xg=x(()=>{"use strict";Tn();Jn="qwen",IL="qwen-code.api_response",kL="qwen-code.tool_call",Rg="chats",AL=new Set(["read_file"]),NL=new Set(["write_file"]),RL=5e5;tu=class{roots;maxDiscoveryTraversalVisits;constructor(e={}){this.roots=(e.qwenProjectsDirs??xL()).map(n=>Ng(n)),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):RL}async discover(e,n,r=null){oe(e);let s=new Map,o=!1;for(let a of this.roots){e.signal.throwIfAborted();let l=await UL(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:Jn,sessionid:Ra(a,".jsonl"),source_id:a})),truncated:o}}matches(e,n){return Ra(n,".jsonl")===e.sessionid&&Ra(bL(n))===Rg}async inspect(e,n){if(oe(n),e.provider!==Jn)return{status:"unsupported"};let r=await Me(e.source_id,[...this.roots]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Jn)return{status:"unsupported"};let s=await Me(e.source_id,[...this.roots]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=ya(o.data,r);return i?FL(i,e.sessionid)?PL(i,e,n,r):{status:"unavailable"}:{status:"partial"}}}});import{createHash as jL}from"node:crypto";import{createRequire as WL}from"node:module";import{join as xo,resolve as nu}from"node:path";function BL(){return HL("node:sqlite").DatabaseSync}function Cg(){return process.env.HOME||process.env.USERPROFILE||""}function XL(){let t=process.env.XDG_DATA_HOME||xo(Cg(),".local","share"),e=process.env.XDG_CONFIG_HOME||xo(Cg(),".config");return[xo(t,"opencode","opencode.db"),xo(t,"opencode","opencode-local.db"),xo(e,"opencode","opencode.db")]}function KL(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":qL.includes(e)?"read":GL.includes(e)?"written":null}function Og(t,e=VL){let n=B(t);if(!n)return null;for(let r of e){let s=n[r];if(typeof s=="string"&&s.length>0)return s;if(Array.isArray(s)){for(let o of s)if(typeof o=="string"&&o.length>0)return o}}return null}function YL(t){let e=B(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=B(r),o=s?.newString??s?.new_string;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function zL(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
8
8
  `)){let o=s.replace(/\r$/,""),i=/^\*\*\* (?:Add|Update|Delete) File: (.+)$/.exec(o);if(i){r(),n={path:i[1].trim(),bytes:0};continue}let a=/^\*\*\* Move to: (.+)$/.exec(o);if(a){n&&(n.path=a[1].trim());continue}if(o.startsWith("*** ")){r();continue}n&&o.startsWith("+")&&(n.bytes+=Buffer.byteLength(o.slice(1),"utf8")+1)}return r(),[...e].map(([s,o])=>({path:s,bytes:o}))}function QL(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 ZL(t,e=!1){let n=B(t);if(!n)return{...lt};let r=n.input===void 0?e?null:0:K(n.input),s=n.output===void 0?e?null:0:K(n.output),o=n.reasoning===void 0?e?null:0:K(n.reasoning),i=B(n.cache),a=i?.read===void 0?e?null:0:K(i.read),l=i?.write===void 0?e?null:0:K(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...lt}:e?{input_uncached:r!==null&&l!==null&&Number.isSafeInteger(r+l)?r+l:null,input_cached:a,input_cache_write:l,output:s!==null&&o!==null&&Number.isSafeInteger(s+o)?s+o:null}:r===null||s===null||o===null||a===null||l===null?{...lt}:r+s+o+a+l===0?{...lt}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function Dg(t,e,n){oe(n);let r=n.maxRows*20,s=t.prepare("SELECT (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS total").get(e,e),o=K(s?.total);if(o===null||o>n.maxBytes)return null;let i=t.prepare("SELECT id,time_created,time_updated,data FROM message WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1),a=t.prepare("SELECT id,message_id,time_created,time_updated,data FROM part WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1);if(i.length+a.length>r)return null;let l=0,c=jL("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:`${Ao}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function ex(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=B(JSON.parse(s.data))}catch{continue}let i=typeof o?.type=="string"?o.type:"";o?.synthetic===!0||o?.ignored===!0||(i==="text"&&typeof o.text=="string"?(e+=Buffer.byteLength(o.text,"utf8"),n=!0):i&&!JL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function tx(t,e,n,r){let s=new Map;for(let c of n.parts){let d=s.get(c.message_id)??[];d.push(c),s.set(c.message_id,d)}let o=new Map;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=ex(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="assistant")continue;let u=typeof d.parentID=="string"?d.parentID:null;u!==null&&o.has(u)&&!a.has(u)&&(a.add(u),i.set(c.id,{id:u,bytes:o.get(u)}))}let l=[];for(let c of n.messages){r.signal.throwIfAborted();let d;try{d=B(JSON.parse(c.data))}catch{return{status:"partial"}}if(r.requireBillingCounters&&d&&Object.hasOwn(d,"tokens")&&d.role!=="assistant")return{status:"partial"};if(!d||d.role!=="assistant")continue;let u=new _t,f=new gt,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let b of s.get(c.id)??[]){let I;try{I=B(JSON.parse(b.data))}catch{return{status:"partial"}}if(I?.type!=="tool")continue;let L=typeof I.tool=="string"?I.tool.toLowerCase():"",O=KL(I.tool),k=B(I.state),v=B(k?.input),A=typeof I.callID=="string"&&I.callID?I.callID:typeof k?.callID=="string"&&k.callID?k.callID:b.id;if(O==="written")u.record(A,"written",Og(v),YL(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of zL(N))u.record(A,"written",R.path,R.bytes);else be(f,A)}else if(O==="read"){let N=Og(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=B(B(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:QL(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else Xn(I.tool)||be(f,A)}let g=B(d.time),h=B(d.model)?.modelID??d.modelID,_=ZL(d.tokens,r.requireBillingCounters),E=B(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=Jt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},_.output,_.input_cache_write);if(l.push({response_id:c.id,timestamp:yt(g?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:_,files_read:y,files_written:T,external_io:w,read_bytes:Ze(y,w,"read"),write_bytes:Ze(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}function Mg(t={}){return new Co(t)}var Or,HL,qL,GL,VL,JL,Co,ru=x(()=>{"use strict";Tn();Or="opencode",HL=WL(import.meta.url);qL=["read","read_file","view","view_file","view_image"],GL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],VL=["filePath","path","file","file_path","filepath","notebook_path","paths"],JL=new Set(["session-job-notification"]);Co=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??XL()).map(n=>nu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(nu(e)))return null;try{let n=new(BL())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discover(e,n,r=null){oe(e);let s=new Map;for(let i of this.dbPaths){e.signal.throwIfAborted();let a=await Me(i,[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:Or,sessionid:u.id,source_id:a})}catch{}finally{l.close()}}return{sources:[...s.values()].sort((i,a)=>pe(`${i.source_id}\0${i.sessionid}`,`${a.source_id}\0${a.sessionid}`)).slice(0,n),truncated:!1}}inspect(e,n){if(oe(n),e.provider!==Or)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=Dg(r,e.sessionid,n);return o?{status:"ready",revision:o.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}read(e,n,r){if(oe(r),e.provider!==Or)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=Dg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=tx(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as nx,realpath as rx,stat as sx}from"node:fs/promises";import{basename as $g,dirname as ox,join as Pg,resolve as Ug}from"node:path";function lx(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 cx(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function dx(t,e,n){let r=B(t);if(!r)return{entry:null,incomplete:t!=null};let s=[],o=!1;for(let[a,l]of Object.entries(r)){let c=B(l);if(!c){o=!0;continue}let d=B(c.usage),u=B(c.requests),f=B(c.tokenDetails),m=B(f?.input);s.push({model:a,requests_count:u?K(u.count):null,input_tokens:d?K(d.inputTokens):null,input_other_tokens:m?K(m.tokenCount):null,cache_read_tokens:d?K(d.cacheReadTokens):null,cache_write_tokens:d?K(d.cacheWriteTokens):null,output_tokens:d?K(d.outputTokens):null,reasoning_tokens:d?K(d.reasoningTokens):null})}s.sort((a,l)=>pe(a.model,l.model));let i=o||s.length>0;return e===null?{entry:null,incomplete:i}:{entry:{native_id:e,recorded_at:n,kind:"copilot_session_shutdown",semantics:"reported_scope_unknown",models:s},incomplete:o}}function ux(t,e,n,r){let s=new Map;for(let u of t){if(u.type!=="user.message")continue;let f=B(u.data),m=typeof f?.interactionId=="string"?f.interactionId:null;if(m===null)continue;let p=cx(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 _=typeof u.id=="string"&&u.id?u.id:null,E=yt(u.timestamp),{entry:y,incomplete:T}=dx(B(u.data)?.modelMetrics,_,E);if(T&&(l=!0),y){let w=a.get(y.native_id);if(w&&JSON.stringify(w)!==JSON.stringify(y))l=!0;else if(a.set(y.native_id,y),a.size>c)return{snapshot:{status:"partial"},sessionUsage:null}}continue}if(u.type!=="assistant.message")continue;let f=B(u.data);if(!f)continue;let m=typeof f.messageId=="string"&&f.messageId?f.messageId:typeof u.id=="string"&&u.id?u.id:null;if(m===null)continue;let p=typeof f.interactionId=="string"?f.interactionId:null,g=o.get(m);if(!g){if(g={meta:{response_id:m,timestamp:yt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,promptRecorded:!1},o.set(m,g),o.size>r.maxRows)return{snapshot:{status:"partial"},sessionUsage:null};if(p!==null&&s.has(p)){if(!i.has(p)){i.add(p);let _=s.get(p);g.io.record({direction:"read",kind:"prompt",id:p,ref:null,bytes:_,basis:_===null?"unknown":"input_text"}),g.promptRecorded=!0}}else g.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"})}let h=K(f.outputTokens);if(h!==null&&(g.meta.tokens.output=(g.meta.tokens.output??0)+h),g.meta.model===null&&typeof f.model=="string"&&f.model&&(g.meta.model=f.model),Array.isArray(f.toolRequests))for(let _ of f.toolRequests){let E=B(_);if(!E)continue;let y=typeof E.name=="string"?E.name.toLowerCase():"",T=typeof E.toolCallId=="string"&&E.toolCallId?E.toolCallId:null,w=E.arguments;if(y==="create"){let S=B(w),b=typeof S?.path=="string"?S.path:null,I=typeof S?.file_text=="string"?Buffer.byteLength(S.file_text,"utf8"):null;b!==null?g.obs.record(T??m,"written",b,I):be(g.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let S=lx(w);if(S.length>0)for(let b of S)g.obs.record(T??m,"written",b.path,b.bytes);else be(g.io,T)}else be(g.io,T);else if(ax.has(y)){let S=B(w),b=typeof S?.path=="string"?S.path:null;b!==null?g.obs.record(T??m,"read",b,null):be(g.io,T)}else ix.has(y)||be(g.io,T)}}let d=[];for(let{meta:u,obs:f,io:m}of o.values()){let p=f.files("read"),g=f.files("written"),h=m.entries();d.push({...u,files_read:p,files_written:g,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(g,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 fx(){return process.env.HOME||process.env.USERPROFILE||""}function jg(t={}){return new su(t)}var Kn,Fg,ix,ax,su,Wg=x(()=>{"use strict";Tn();Kn="copilot",Fg="events.jsonl",ix=new Set(["report_intent"]),ax=new Set(["view"]);su=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Ug(e.copilotSessionStateDir??Pg(fx(),".copilot","session-state"))}async discover(e,n,r=null){oe(e);let s;try{s=await nx(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Pg(this.sessionStateDir,i,Fg);if(!(await sx(a).catch(()=>null))?.isFile())continue;let c=await rx(a).catch(()=>Ug(a)),d={provider:Kn,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 $g(n)===Fg&&$g(ox(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Kn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){return(await this.readWithUsage(e,n,r)).snapshot}async readWithUsage(e,n,r){if(oe(r),e.provider!==Kn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await Me(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ct(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ya(o.data,r);return i?ux(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Hg,readFile as mx,realpath as ou,stat as Bg}from"node:fs/promises";import{basename as Do,dirname as Es,isAbsolute as au,join as ys,relative as Gg,resolve as Oo,sep as Vg}from"node:path";function Tx(t){return Ex.has(t)||Xn(t)}function wx(){return process.env.HOME||process.env.USERPROFILE||""}function vx(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=B(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function Xg(t){let e=B(t);if(!e)return null;let n=K(e.inputOther),r=K(e.inputCacheRead),s=K(e.inputCacheCreation),o=K(e.output);return n===null||r===null||s===null||o===null?null:{input_uncached:n+s,input_cached:r,input_cache_write:s,output:o}}function Sx(t){if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function Ix(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&&!px.has(o))return{status:"unsupported"};let i=kx(e.source_id),a=new Map,l=new Map,c=[],d=new Set,u=new Set,f=null,m=!1,p=E=>`${i}/${E}`,g=(E,y)=>{let T=p(E),w=a.get(T);return w||(w={meta:{response_id:T,timestamp:yt(typeof y=="number"?y:null),model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,turnStepKey:null,tokensSource:"none"},a.set(T,w)),w},h=(E,y)=>{if(E.turnStepKey!==null)return;let T=y.turnId===void 0?null:String(y.turnId),w=y.step===void 0?null:String(y.step);T!==null&&w!==null&&(E.turnStepKey=`${T}.${w}`)};for(let E of t){if(r.signal.throwIfAborted(),E.type==="turn.prompt"){let T=B(E.origin),w=typeof T?.kind=="string"?T.kind:null,S=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(w!==null&&bx.has(w))continue;if(S!==null){if(d.has(S))continue;d.add(S)}w==="user"?c.push({bytes:Sx(E.input),id:S}):c.push({bytes:null,id:S});continue}if(E.type==="usage.record"){if(u.size>1){m=!0;continue}if(u.size===0){f===null&&(m=!0);continue}let[T]=u,w=a.get(p(T));if(!w){m=!0;continue}if(w.tokensSource==="record"){m=!0;continue}let S=Xg(E.usage);S&&(w.meta.tokens=S,w.tokensSource="record");continue}if(E.type==="llm.request"){let T=typeof E.turnStep=="string"?E.turnStep:null,w=(typeof E.modelAlias=="string"&&E.modelAlias?E.modelAlias:null)??(typeof E.model=="string"&&E.model?E.model:null);T!==null&&w!==null&&(l.has(T)?l.get(T)!==w&&l.set(T,null):l.set(T,w));continue}if(E.type!=="context.append_loop_event")continue;let y=B(E.event);if(y){if(y.type==="step.begin"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=g(T,E.time);if(a.size>r.maxRows)return{status:"partial"};if(u.add(T),h(w,y),c.length>0){for(let S of c)w.io.record({direction:"read",kind:"prompt",id:S.id,ref:null,bytes:S.bytes,basis:S.bytes===null?"unknown":"input_text"});c.length=0}continue}if(y.type==="step.end"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=g(T,E.time);if(a.size>r.maxRows)return{status:"partial"};u.delete(T),f=T,h(w,y);let S=Xg(y.usage);S&&(w.meta.tokens=S),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=yt(typeof E.time=="number"?E.time:null));continue}if(y.type==="tool.call"){let T=typeof y.stepUuid=="string"&&y.stepUuid?y.stepUuid:null;if(T===null)continue;let w=g(T,E.time);if(a.size>r.maxRows)return{status:"partial"};let S=typeof y.name=="string"?y.name.toLowerCase():"",b=typeof y.toolCallId=="string"&&y.toolCallId?y.toolCallId:null,I=B(y.args),L=typeof I?.path=="string"&&I.path?I.path:typeof I?.file_path=="string"&&I.file_path?I.file_path:null;gx.has(S)?L!==null?w.obs.record(b??"","read",L,null):be(w.io,b):yx.has(S)?L!==null?w.obs.record(b??"","written",L,ps(I)):be(w.io,b):Tx(S)||be(w.io,b);continue}}}let _=[];for(let{meta:E,obs:y,io:T,turnStepKey:w}of a.values()){E.model===null&&w!==null&&(E.model=l.get(w)??null);let S=y.files("read"),b=y.files("written"),I=T.entries();_.push({...E,files_read:S,files_written:b,external_io:I,read_bytes:Ze(S,I,"read"),write_bytes:Ze(b,I,"written"),model_provider:null,pricing_facts:Jt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:_,...m?{capture_status:"partial"}:{}}}function iu(t){return Do(t)===lu&&Do(Es(Es(t)))===Jg}function qg(t){return Do(Es(Es(Es(t))))}function kx(t){return Do(Es(t))}function Ax(t,e){let n=Gg(e,t);return n===""||!n.startsWith(`..${Vg}`)&&n!==".."&&!au(n)}function Nx(t){if(t instanceof Error&&t.name==="AbortError")throw t}function Kg(t={}){return new Mo(t)}var Yn,lu,Jg,px,hx,_x,gx,yx,Ex,bx,Mo,cu=x(()=>{"use strict";Tn();Yn="kimi",lu="wire.jsonl",Jg="agents",px=new Set(["1.4","1.5"]),hx=5e5,_x=8*1024*1024,gx=new Set(["read"]),yx=new Set(["write","edit"]),Ex=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);bx=new Set(["system_trigger","cron_job","task"]);Mo=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Oo(e.kimiHome??process.env.KIMI_CODE_HOME??ys(wx(),".kimi-code")),this.sessionsDir=ys(this.home,"sessions"),this.indexPath=ys(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):hx}async discover(e,n,r=null){oe(e);let s=new Set,o=!1,i=await ou(this.sessionsDir).catch(()=>Oo(this.sessionsDir)),a=f=>{iu(f)&&Ax(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Hg(f,{withFileTypes:!0}).catch(()=>[]);p.sort((g,h)=>pe(g.name,h.name));for(let g of p){if(e.signal.throwIfAborted(),l+=1,l>this.maxDiscoveryTraversalVisits){o=!0;return}let h=ys(f,g.name);if(g.isDirectory()&&!g.isSymbolicLink()&&m<4){if(await c(h,m+1),o)return}else g.isFile()&&g.name===lu&&iu(h)&&a(await ou(h).catch(()=>Oo(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){Nx(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:Yn,sessionid:qg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Bg(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>_x)return;let s=await mx(this.indexPath,{signal:n.signal});for(let o of s.toString("utf8").split(`
9
+ `)}return{revision:`${Ao}:sha256:${c.digest("hex")}`,messages:i,parts:a}}function ex(t){let e=0,n=!1,r=!1;for(let s of t){let o;try{o=B(JSON.parse(s.data))}catch{continue}let i=typeof o?.type=="string"?o.type:"";o?.synthetic===!0||o?.ignored===!0||(i==="text"&&typeof o.text=="string"?(e+=Buffer.byteLength(o.text,"utf8"),n=!0):i&&!JL.has(i)&&(r=!0))}return n?e:r?"unknown":null}function tx(t,e,n,r){let s=new Map;for(let c of n.parts){let d=s.get(c.message_id)??[];d.push(c),s.set(c.message_id,d)}let o=new Map;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="user")continue;let u=ex(s.get(c.id)??[]);u==="unknown"?o.set(c.id,null):u!==null&&o.set(c.id,u)}let i=new Map,a=new Set;for(let c of n.messages){let d;try{d=B(JSON.parse(c.data))}catch{continue}if(d?.role!=="assistant")continue;let u=typeof d.parentID=="string"?d.parentID:null;u!==null&&o.has(u)&&!a.has(u)&&(a.add(u),i.set(c.id,{id:u,bytes:o.get(u)}))}let l=[];for(let c of n.messages){r.signal.throwIfAborted();let d;try{d=B(JSON.parse(c.data))}catch{return{status:"partial"}}if(r.requireBillingCounters&&d&&Object.hasOwn(d,"tokens")&&d.role!=="assistant")return{status:"partial"};if(!d||d.role!=="assistant")continue;let u=new _t,f=new gt,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let b of s.get(c.id)??[]){let I;try{I=B(JSON.parse(b.data))}catch{return{status:"partial"}}if(I?.type!=="tool")continue;let L=typeof I.tool=="string"?I.tool.toLowerCase():"",O=KL(I.tool),k=B(I.state),v=B(k?.input),A=typeof I.callID=="string"&&I.callID?I.callID:typeof k?.callID=="string"&&k.callID?k.callID:b.id;if(O==="written")u.record(A,"written",Og(v),YL(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of zL(N))u.record(A,"written",R.path,R.bytes);else be(f,A)}else if(O==="read"){let N=Og(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=B(B(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:QL(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else Xn(I.tool)||be(f,A)}let _=B(d.time),h=B(d.model)?.modelID??d.modelID,g=ZL(d.tokens,r.requireBillingCounters),E=B(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=Jt({reasoning:E?.reasoning,webFetch:m>0?m:void 0},g.output,g.input_cache_write);if(l.push({response_id:c.id,timestamp:yt(_?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:g,files_read:y,files_written:T,external_io:w,read_bytes:Ze(y,w,"read"),write_bytes:Ze(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}function Mg(t={}){return new Co(t)}var Or,HL,qL,GL,VL,JL,Co,ru=x(()=>{"use strict";Tn();Or="opencode",HL=WL(import.meta.url);qL=["read","read_file","view","view_file","view_image"],GL=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],VL=["filePath","path","file","file_path","filepath","notebook_path","paths"],JL=new Set(["session-job-notification"]);Co=class{dbPaths;sqliteBusyTimeoutMs;constructor(e={}){this.dbPaths=(e.dbPaths??XL()).map(n=>nu(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3}openDb(e){if(!this.dbPaths.includes(nu(e)))return null;try{let n=new(BL())(e,{open:!0,readOnly:!0});return n.exec(`PRAGMA busy_timeout = ${this.sqliteBusyTimeoutMs}`),n}catch{return null}}async discover(e,n,r=null){oe(e);let s=new Map;for(let i of this.dbPaths){e.signal.throwIfAborted();let a=await Me(i,[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:Or,sessionid:u.id,source_id:a})}catch{}finally{l.close()}}return{sources:[...s.values()].sort((i,a)=>pe(`${i.source_id}\0${i.sessionid}`,`${a.source_id}\0${a.sessionid}`)).slice(0,n),truncated:!1}}inspect(e,n){if(oe(n),e.provider!==Or)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=Dg(r,e.sessionid,n);return o?{status:"ready",revision:o.revision}:{status:"partial"}}catch{return{status:"unsupported"}}finally{r.close()}}read(e,n,r){if(oe(r),e.provider!==Or)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=Dg(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=tx(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});import{readdir as nx,realpath as rx,stat as sx}from"node:fs/promises";import{basename as $g,dirname as ox,join as Pg,resolve as Ug}from"node:path";function lx(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 cx(t){let e=t?.content;return typeof e=="string"?Buffer.byteLength(e,"utf8"):null}function dx(t,e,n){let r=B(t);if(!r)return{entry:null,incomplete:t!=null};let s=[],o=!1;for(let[a,l]of Object.entries(r)){let c=B(l);if(!c){o=!0;continue}let d=B(c.usage),u=B(c.requests),f=B(c.tokenDetails),m=B(f?.input);s.push({model:a,requests_count:u?K(u.count):null,input_tokens:d?K(d.inputTokens):null,input_other_tokens:m?K(m.tokenCount):null,cache_read_tokens:d?K(d.cacheReadTokens):null,cache_write_tokens:d?K(d.cacheWriteTokens):null,output_tokens:d?K(d.outputTokens):null,reasoning_tokens:d?K(d.reasoningTokens):null})}s.sort((a,l)=>pe(a.model,l.model));let i=o||s.length>0;return e===null?{entry:null,incomplete:i}:{entry:{native_id:e,recorded_at:n,kind:"copilot_session_shutdown",semantics:"reported_scope_unknown",models:s},incomplete:o}}function ux(t,e,n,r){let s=new Map;for(let u of t){if(u.type!=="user.message")continue;let f=B(u.data),m=typeof f?.interactionId=="string"?f.interactionId:null;if(m===null)continue;let p=cx(f);s.has(m)?s.get(m)===null&&p!==null&&s.set(m,p):s.set(m,p)}let o=new Map,i=new Set,a=new Map,l=!1,c=1e3;for(let u of t){if(r.signal.throwIfAborted(),u.type==="session.shutdown"){let g=typeof u.id=="string"&&u.id?u.id:null,E=yt(u.timestamp),{entry:y,incomplete:T}=dx(B(u.data)?.modelMetrics,g,E);if(T&&(l=!0),y){let w=a.get(y.native_id);if(w&&JSON.stringify(w)!==JSON.stringify(y))l=!0;else if(a.set(y.native_id,y),a.size>c)return{snapshot:{status:"partial"},sessionUsage:null}}continue}if(u.type!=="assistant.message")continue;let f=B(u.data);if(!f)continue;let m=typeof f.messageId=="string"&&f.messageId?f.messageId:typeof u.id=="string"&&u.id?u.id:null;if(m===null)continue;let p=typeof f.interactionId=="string"?f.interactionId:null,_=o.get(m);if(!_){if(_={meta:{response_id:m,timestamp:yt(u.timestamp),model:typeof f.model=="string"&&f.model?f.model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,promptRecorded:!1},o.set(m,_),o.size>r.maxRows)return{snapshot:{status:"partial"},sessionUsage:null};if(p!==null&&s.has(p)){if(!i.has(p)){i.add(p);let g=s.get(p);_.io.record({direction:"read",kind:"prompt",id:p,ref:null,bytes:g,basis:g===null?"unknown":"input_text"}),_.promptRecorded=!0}}else _.io.record({direction:"read",kind:"prompt",id:null,ref:null,bytes:null,basis:"unknown"})}let h=K(f.outputTokens);if(h!==null&&(_.meta.tokens.output=(_.meta.tokens.output??0)+h),_.meta.model===null&&typeof f.model=="string"&&f.model&&(_.meta.model=f.model),Array.isArray(f.toolRequests))for(let g of f.toolRequests){let E=B(g);if(!E)continue;let y=typeof E.name=="string"?E.name.toLowerCase():"",T=typeof E.toolCallId=="string"&&E.toolCallId?E.toolCallId:null,w=E.arguments;if(y==="create"){let S=B(w),b=typeof S?.path=="string"?S.path:null,I=typeof S?.file_text=="string"?Buffer.byteLength(S.file_text,"utf8"):null;b!==null?_.obs.record(T??m,"written",b,I):be(_.io,T)}else if(y==="apply_patch")if(typeof w=="string"){let S=lx(w);if(S.length>0)for(let b of S)_.obs.record(T??m,"written",b.path,b.bytes);else be(_.io,T)}else be(_.io,T);else if(ax.has(y)){let S=B(w),b=typeof S?.path=="string"?S.path:null;b!==null?_.obs.record(T??m,"read",b,null):be(_.io,T)}else ix.has(y)||be(_.io,T)}}let d=[];for(let{meta:u,obs:f,io:m}of o.values()){let p=f.files("read"),_=f.files("written"),h=m.entries();d.push({...u,files_read:p,files_written:_,external_io:h,read_bytes:Ze(p,h,"read"),write_bytes:Ze(_,h,"written"),model_provider:null,pricing_facts:null})}return l?{snapshot:{status:"partial"},sessionUsage:null}:{snapshot:{status:"complete",source:e,revision:n,checkpoint:n,responses:d},sessionUsage:a.size>0?[...a.values()]:null}}function fx(){return process.env.HOME||process.env.USERPROFILE||""}function jg(t={}){return new su(t)}var Kn,Fg,ix,ax,su,Wg=x(()=>{"use strict";Tn();Kn="copilot",Fg="events.jsonl",ix=new Set(["report_intent"]),ax=new Set(["view"]);su=class{sessionStateDir;constructor(e={}){this.sessionStateDir=Ug(e.copilotSessionStateDir??Pg(fx(),".copilot","session-state"))}async discover(e,n,r=null){oe(e);let s;try{s=await nx(this.sessionStateDir)}catch{return{sources:[],truncated:!1}}let o=[];for(let i of s.sort(pe)){e.signal.throwIfAborted();let a=Pg(this.sessionStateDir,i,Fg);if(!(await sx(a).catch(()=>null))?.isFile())continue;let c=await rx(a).catch(()=>Ug(a)),d={provider:Kn,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 $g(n)===Fg&&$g(ox(n))===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Kn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionStateDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){return(await this.readWithUsage(e,n,r)).snapshot}async readWithUsage(e,n,r){if(oe(r),e.provider!==Kn)return{snapshot:{status:"unsupported"},sessionUsage:null};let s=await Me(e.source_id,[this.sessionStateDir]);if(!s||!this.matches(e,s))return{snapshot:{status:"unavailable"},sessionUsage:null};let o=await ct(s,r).catch(()=>null);if(!o||o.revision!==n)return{snapshot:{status:"partial"},sessionUsage:null};let i=ya(o.data,r);return i?ux(i,e,n,r):{snapshot:{status:"partial"},sessionUsage:null}}}});import{readdir as Hg,readFile as mx,realpath as ou,stat as Bg}from"node:fs/promises";import{basename as Do,dirname as Es,isAbsolute as au,join as ys,relative as Gg,resolve as Oo,sep as Vg}from"node:path";function Tx(t){return Ex.has(t)||Xn(t)}function wx(){return process.env.HOME||process.env.USERPROFILE||""}function vx(t,e){if(t.length>0&&t[t.length-1]!==10)return null;let n=[],r=0;for(;r<t.length;){e.signal.throwIfAborted();let s=t.indexOf(10,r);s===-1&&(s=t.length);let o=t.toString("utf8",r,s);if(r=s+1,!!o.trim())try{let i=B(JSON.parse(o));if(!i)return null;n.push(i)}catch{return null}}return n}function Xg(t){let e=B(t);if(!e)return null;let n=K(e.inputOther),r=K(e.inputCacheRead),s=K(e.inputCacheCreation),o=K(e.output);return n===null||r===null||s===null||o===null?null:{input_uncached:n+s,input_cached:r,input_cache_write:s,output:o}}function Sx(t){if(!Array.isArray(t))return null;let e=0,n=!1;for(let r of t){let s=B(r);s?.type==="text"&&typeof s.text=="string"&&(e+=Buffer.byteLength(s.text,"utf8"),n=!0)}return n?e:null}function Ix(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&&!px.has(o))return{status:"unsupported"};let i=kx(e.source_id),a=new Map,l=new Map,c=[],d=new Set,u=new Set,f=null,m=!1,p=E=>`${i}/${E}`,_=(E,y)=>{let T=p(E),w=a.get(T);return w||(w={meta:{response_id:T,timestamp:yt(typeof y=="number"?y:null),model:null,tokens:{...lt},files_read:[],files_written:[]},obs:new _t,io:new gt,turnStepKey:null,tokensSource:"none"},a.set(T,w)),w},h=(E,y)=>{if(E.turnStepKey!==null)return;let T=y.turnId===void 0?null:String(y.turnId),w=y.step===void 0?null:String(y.step);T!==null&&w!==null&&(E.turnStepKey=`${T}.${w}`)};for(let E of t){if(r.signal.throwIfAborted(),E.type==="turn.prompt"){let T=B(E.origin),w=typeof T?.kind=="string"?T.kind:null,S=typeof E.promptId=="string"&&E.promptId?E.promptId:null;if(w!==null&&bx.has(w))continue;if(S!==null){if(d.has(S))continue;d.add(S)}w==="user"?c.push({bytes:Sx(E.input),id:S}):c.push({bytes:null,id:S});continue}if(E.type==="usage.record"){if(u.size>1){m=!0;continue}if(u.size===0){f===null&&(m=!0);continue}let[T]=u,w=a.get(p(T));if(!w){m=!0;continue}if(w.tokensSource==="record"){m=!0;continue}let S=Xg(E.usage);S&&(w.meta.tokens=S,w.tokensSource="record");continue}if(E.type==="llm.request"){let T=typeof E.turnStep=="string"?E.turnStep:null,w=(typeof E.modelAlias=="string"&&E.modelAlias?E.modelAlias:null)??(typeof E.model=="string"&&E.model?E.model:null);T!==null&&w!==null&&(l.has(T)?l.get(T)!==w&&l.set(T,null):l.set(T,w));continue}if(E.type!=="context.append_loop_event")continue;let y=B(E.event);if(y){if(y.type==="step.begin"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};if(u.add(T),h(w,y),c.length>0){for(let S of c)w.io.record({direction:"read",kind:"prompt",id:S.id,ref:null,bytes:S.bytes,basis:S.bytes===null?"unknown":"input_text"});c.length=0}continue}if(y.type==="step.end"){let T=typeof y.uuid=="string"&&y.uuid?y.uuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};u.delete(T),f=T,h(w,y);let S=Xg(y.usage);S&&(w.meta.tokens=S),w.tokensSource="end",w.meta.timestamp===null&&(w.meta.timestamp=yt(typeof E.time=="number"?E.time:null));continue}if(y.type==="tool.call"){let T=typeof y.stepUuid=="string"&&y.stepUuid?y.stepUuid:null;if(T===null)continue;let w=_(T,E.time);if(a.size>r.maxRows)return{status:"partial"};let S=typeof y.name=="string"?y.name.toLowerCase():"",b=typeof y.toolCallId=="string"&&y.toolCallId?y.toolCallId:null,I=B(y.args),L=typeof I?.path=="string"&&I.path?I.path:typeof I?.file_path=="string"&&I.file_path?I.file_path:null;gx.has(S)?L!==null?w.obs.record(b??"","read",L,null):be(w.io,b):yx.has(S)?L!==null?w.obs.record(b??"","written",L,ps(I)):be(w.io,b):Tx(S)||be(w.io,b);continue}}}let g=[];for(let{meta:E,obs:y,io:T,turnStepKey:w}of a.values()){E.model===null&&w!==null&&(E.model=l.get(w)??null);let S=y.files("read"),b=y.files("written"),I=T.entries();g.push({...E,files_read:S,files_written:b,external_io:I,read_bytes:Ze(S,I,"read"),write_bytes:Ze(b,I,"written"),model_provider:null,pricing_facts:Jt({},E.tokens.output,E.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:g,...m?{capture_status:"partial"}:{}}}function iu(t){return Do(t)===lu&&Do(Es(Es(t)))===Jg}function qg(t){return Do(Es(Es(Es(t))))}function kx(t){return Do(Es(t))}function Ax(t,e){let n=Gg(e,t);return n===""||!n.startsWith(`..${Vg}`)&&n!==".."&&!au(n)}function Nx(t){if(t instanceof Error&&t.name==="AbortError")throw t}function Kg(t={}){return new Mo(t)}var Yn,lu,Jg,px,hx,_x,gx,yx,Ex,bx,Mo,cu=x(()=>{"use strict";Tn();Yn="kimi",lu="wire.jsonl",Jg="agents",px=new Set(["1.4","1.5"]),hx=5e5,_x=8*1024*1024,gx=new Set(["read"]),yx=new Set(["write","edit"]),Ex=new Set(["todolist","tasklist","taskoutput","taskstop","waitfor","creategoal","updategoal","getgoal","enterplanmode","exitplanmode","agentswarm","agent","skill","croncreate","crondelete","cronlist"]);bx=new Set(["system_trigger","cron_job","task"]);Mo=class{home;sessionsDir;indexPath;maxDiscoveryTraversalVisits;constructor(e={}){this.home=Oo(e.kimiHome??process.env.KIMI_CODE_HOME??ys(wx(),".kimi-code")),this.sessionsDir=ys(this.home,"sessions"),this.indexPath=ys(this.home,"session_index.jsonl"),this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):hx}async discover(e,n,r=null){oe(e);let s=new Set,o=!1,i=await ou(this.sessionsDir).catch(()=>Oo(this.sessionsDir)),a=f=>{iu(f)&&Ax(f,i)&&s.add(f)},l=0,c=async(f,m)=>{if(e.signal.throwIfAborted(),o)return;let p=await Hg(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=ys(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(()=>Oo(h)))}};await c(this.sessionsDir,0);try{await this.unionIndex(a,e)}catch(f){Nx(f)}let d=[...s].sort(pe);return{sources:(r===null?d:d.filter(f=>pe(f,r)>0)).slice(0,n).map(f=>({provider:Yn,sessionid:qg(f),source_id:f})),truncated:o}}async unionIndex(e,n){let r=await Bg(this.indexPath).catch(()=>null);if(!r?.isFile()||r.size>_x)return;let s=await mx(this.indexPath,{signal:n.signal});for(let o of s.toString("utf8").split(`
11
11
  `)){if(n.signal.throwIfAborted(),!o.trim())continue;let i;try{i=B(JSON.parse(o))}catch{continue}let a=typeof i?.sessionId=="string"?i.sessionId:null,l=typeof i?.sessionDir=="string"?i.sessionDir:null;if(!a||!l||!au(l)||Do(l)!==a)continue;let c=Gg(this.sessionsDir,Oo(l));if(c.startsWith(`..${Vg}`)||c===".."||au(c))continue;let d=ys(l,Jg),u=await Hg(d,{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory())continue;let m=ys(d,f.name,lu);(await Bg(m).catch(()=>null))?.isFile()&&e(await ou(m).catch(()=>Oo(m)))}}}matches(e,n){return iu(n)&&qg(n)===e.sessionid}async inspect(e,n){if(oe(n),e.provider!==Yn)return{status:"unsupported"};let r=await Me(e.source_id,[this.sessionsDir]);if(!r||!this.matches(e,r))return{status:"unavailable"};let s=await ct(r,n).catch(()=>null);return s?{status:"ready",revision:s.revision}:{status:"partial"}}async read(e,n,r){if(oe(r),e.provider!==Yn)return{status:"unsupported"};let s=await Me(e.source_id,[this.sessionsDir]);if(!s||!this.matches(e,s))return{status:"unavailable"};let o=await ct(s,r).catch(()=>null);if(!o)return{status:"partial"};if(o.revision!==n)return{status:"partial"};let i=vx(o.data,r);return i?Ix(i,e,n,r):{status:"partial"}}}});import{createHash as hu}from"node:crypto";import{createRequire as Rx}from"node:module";import{lstat as Lx,readFile as xx,readdir as Cx,realpath as mu,stat as Yg}from"node:fs/promises";import{basename as La,dirname as Ox,isAbsolute as zg,join as Dr,relative as Dx,resolve as wn,sep as Mx}from"node:path";function _u(t){return typeof t=="string"&&Px.has(t.toLowerCase())}function Uo(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 ry(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 vs(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 ws(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function gu(t,e,n){let r={},s=ws(t.cacheWrite5m),o=ws(t.cacheWrite1h),i=ws(t.reasoning),a=ws(t.webSearch),l=ws(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 jx(){if(process.env.OPENCODE_DB)return[wn(process.env.OPENCODE_DB)];let t=process.env.XDG_DATA_HOME||Dr(xa(),".local","share");return[Dr(t,"lmplayer","opencode-local.db"),Dr(t,"lmplayer","opencode-dev.db")]}function Wx(){return Fx("node:sqlite").DatabaseSync}function Y(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}function dt(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null}function 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 Po(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 Hx(t){let e={version:2,pos:t.pos,done:t.done,rr:t.rr};return Buffer.from(JSON.stringify(e),"utf8").toString("base64url")}function Qg(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 Bx(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=Qg({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,Qg(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 sy(t){if(typeof t!="string")return null;let e=t.toLowerCase();return e==="apply_patch"?"apply_patch":Xx.includes(e)?"read":qx.includes(e)?"written":null}function Vx(t){return typeof t=="string"?(()=>{try{return JSON.parse(t)}catch{return t}})():t}function Oa(t,e=Gx){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 oy(t){let e=Y(t);if(!e)return null;if(typeof e.content=="string")return Buffer.byteLength(e.content,"utf8");if(typeof e.new_string=="string")return Buffer.byteLength(e.new_string,"utf8");if(typeof e.newString=="string")return Buffer.byteLength(e.newString,"utf8");if(typeof e.new_source=="string")return Buffer.byteLength(e.new_source,"utf8");if(typeof e.newSource=="string")return Buffer.byteLength(e.newSource,"utf8");if(Array.isArray(e.edits)){let n=0;for(let r of e.edits){let s=Y(r),o=s?.new_string??s?.newString;if(typeof o!="string")return null;n+=Buffer.byteLength(o,"utf8")}return n}return null}function Da(t){let e=new Map,n=null,r=()=>{n&&(e.set(n.path,(e.get(n.path)??0)+n.bytes),n=null)};for(let s of t.split(`
12
12
  `)){let o=s.replace(/\r$/,""),i=/^\*\*\* (?:Add|Update|Delete) File: (.+)$/.exec(o);if(i){r(),n={path:i[1].trim(),bytes:0};continue}let a=/^\*\*\* Move to: (.+)$/.exec(o);if(a){n&&(n.path=a[1].trim());continue}if(o.startsWith("*** ")){r();continue}n&&o.startsWith("+")&&(n.bytes+=Buffer.byteLength(o.slice(1),"utf8")+1)}return r(),[...e].map(([s,o])=>({path:s,bytes:o}))}function Kx(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 Jx)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 Zg(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 ey(t,e){Po(e);let n=await Yg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await xx(t,{signal:e.signal});e.signal.throwIfAborted();let s=await Yg(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 Yx(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 zx(t){return La(Ox(t))==="subagents"}function Qx(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:dt(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:dt(e.cache_creation_input_tokens);return s===null||o===null?null:{input_uncached:n+o,input_cached:s,input_cache_write:o,output:r}}function Zx(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=Zg(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=Zg(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 eC(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 tC(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 nC(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),tC(i))){n.add(a);let l=eC(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 rC(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=ws(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 sC(t,e,n,r,s=!1){let o=Zx(t,r),{promptBytes:i,parent:a,resolve:l}=nC(t),c=new Set,d=(p,g)=>{let h=i.get(g)??null;p.record({direction:"read",kind:"prompt",id:g,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 g=Y(p.message);if(!g||typeof g.id!="string"||g.id.length===0)continue;let h=f.get(g.id);if(!h){if(h={meta:{response_id:g.id,timestamp:Eu(p.timestamp),model:null,tokens:{...$o},files_read:[],files_written:[]},obs:new zn,io:new Qn,pricingRaw:{}},f.set(g.id,h),f.size>r.maxRows)return{status:"partial"};let E=typeof p.uuid=="string"&&p.uuid?p.uuid:null;if(E===null)u(h.io);else{let y=l(E);if(y.kind==="broken")u(h.io);else if(y.kind==="found"){let T=[],w=y.uuid;for(;w!==null&&!c.has(w);){let S=w;c.add(S),T.push(S);let b=a.get(S)??null;if(b===null){w=null;continue}let I=l(b);w=I.kind==="found"?I.uuid:null}for(let S=T.length-1;S>=0;S-=1)d(h.io,T[S])}}}let _=Y(g.usage);if(_){let E=Qx(_);E&&(h.meta.tokens=E),rC(h.pricingRaw,_)}if(typeof g.model=="string"&&g.model&&(h.meta.model=g.model),Array.isArray(g.content))for(let E of g.content){let y=Y(E);if(y?.type!=="tool_use")continue;let T=typeof y.id=="string"&&y.id?y.id:g.id,w=sy(y.name),S=Vx(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let I=Oa(S,["file_path","filePath","path","file"]);if(I===null)continue;let L=o.get(T),O=L===void 0||L.cleanPath!==null&&L.cleanPath!==I?null:L.bytes;h.obs.record(T,"read",I,O)}else if(w==="written")h.obs.record(T,"written",Oa(S),oy(S));else if(w==="apply_patch"){let I=typeof S=="string"?S:Y(S)?.input;if(typeof I=="string")for(let L of Da(I))h.obs.record(T,"written",L.path,L.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:ry(Y(S)?.url),bytes:null,basis:"unknown"}):_u(y.name)||Uo(h.io,T)}}let m=[];for(let{meta:p,obs:g,io:h,pricingRaw:_}of f.values()){let E=g.files("read"),y=g.files("written"),T=h.entries();m.push({...p,files_read:E,files_written:y,external_io:T,read_bytes:vs(E,T,"read"),write_bytes:vs(y,T,"written"),model_provider:null,pricing_facts:gu(_,p.tokens.output,p.tokens.input_cache_write)})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:m}}function oC(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.cached_input_tokens),s=dt(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:dt(e.cache_write_input_tokens);return e.cache_write_input_tokens!==void 0&&o===null?null:{input_uncached:n-r,input_cached:r,input_cache_write:o,output:s}}function iC(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=Kx(o);if(i!==null){if(r!==null)for(let a of Da(i))e.record(r,"written",a.path,a.bytes);return}}_u(s)||Uo(n,r)}function aC(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 lC(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new zn,c=new Qn,d=0,u=!1,f=!0,m=new Set;for(let g of t){r.signal.throwIfAborted();let h=Y(g.payload);if(g.type==="session_meta"&&h&&typeof h.model_provider=="string"&&h.model_provider){a=h.model_provider;continue}if(g.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(g.type==="response_item"&&h){if(h.type==="function_call"||h.type==="custom_tool_call")iC(h,l,c);else if(h.type==="local_shell_call")Uo(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=aC(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(g.type==="event_msg"&&h?.type==="token_count"){u=!0,f&&(l=new zn,c=new Qn,d=0);continue}if(g.type!=="token_usage_record"||!h)continue;if(typeof h.response_id!="string"||h.response_id.length===0)return{status:"unsupported"};let _=oC(h.usage);if(!_)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:_,files_read:[],files_written:[]},obs:new zn,io:new Qn,rawUsage:null,webSearch:0},s.set(h.response_id,y),s.size>r.maxRows))return{status:"partial"};f=!1,y.meta.timestamp=Eu(g.timestamp),y.meta.model=E??null,y.meta.tokens=_,y.rawUsage=Y(h.usage),y.obs.absorb(l),y.io.absorb(c),y.webSearch+=d,l=new zn,c=new Qn,d=0}if(u&&s.size===0)return{status:"unsupported"};let p=[];for(let{meta:g,obs:h,io:_,rawUsage:E,webSearch:y}of s.values()){let T=h.files("read"),w=h.files("written"),S=_.entries(),b=Y(E),I=gu({reasoning:b?.reasoning_output_tokens,webSearch:y>0?y:void 0},g.tokens.output,g.tokens.input_cache_write);p.push({...g,files_read:T,files_written:w,external_io:S,read_bytes:vs(T,S,"read"),write_bytes:vs(w,S,"written"),model_provider:a,pricing_facts:I})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function cC(t,e=!1){let n=Y(t);if(!n)return{...$o};let r=n.input===void 0?e?null:0:dt(n.input),s=n.output===void 0?e?null:0:dt(n.output),o=n.reasoning===void 0?e?null:0:dt(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:dt(i.read),l=i?.write===void 0?e?null:0:dt(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...$o}: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?{...$o}:r+s+o+a+l===0?{...$o}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function ty(t,e,n){Po(n);let r=n.maxRows*20,s=t.prepare("SELECT (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS total").get(e,e),o=dt(s?.total);if(o===null||o>n.maxBytes)return null;let i=t.prepare("SELECT id,time_created,time_updated,data FROM message WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1),a=t.prepare("SELECT id,message_id,time_created,time_updated,data FROM part WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1);if(i.length+a.length>r)return null;let l=0,c=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 uC(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&&!dC.has(i)&&(r=!0))}return n?e:r?"unknown":null}function fC(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=uC(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 zn,f=new Qn,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let b of s.get(c.id)??[]){let I;try{I=Y(JSON.parse(b.data))}catch{return{status:"partial"}}if(I?.type!=="tool")continue;let L=typeof I.tool=="string"?I.tool.toLowerCase():"",O=sy(I.tool),k=Y(I.state),v=Y(k?.input),A=typeof I.callID=="string"&&I.callID?I.callID:typeof k?.callID=="string"&&k.callID?k.callID:b.id;if(O==="written")u.record(A,"written",Oa(v),oy(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of Da(N))u.record(A,"written",R.path,R.bytes);else Uo(f,A)}else if(O==="read"){let N=Oa(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=Y(Y(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:ry(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else _u(I.tool)||Uo(f,A)}let g=Y(d.time),h=Y(d.model)?.modelID??d.modelID,_=cC(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=gu({reasoning:E?.reasoning,webFetch:m>0?m:void 0},_.output,_.input_cache_write);if(l.push({response_id:c.id,timestamp:Eu(g?.created??c.time_created),model:typeof h=="string"&&h?h:null,tokens:_,files_read:y,files_written:T,external_io:w,read_bytes:vs(y,w,"read"),write_bytes:vs(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}async function fu(t,e){if(!zg(t))return null;let n=await Lx(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(()=>wn(s)),i=Dx(o,r);if(i===""||!i.startsWith(`..${Mx}`)&&i!==".."&&!zg(i))return r}return null}async function ny(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await Cx(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=Dr(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(()=>wn(f));(s===null||Zn(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(Zn),truncated:a}}function mC(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 iy(t={}){return new pu(t)}var zn,$x,Qn,Px,Ts,$o,Ux,yu,Fx,uu,Xx,qx,Gx,Jx,dC,pu,ay=x(()=>{"use strict";Jd();Kd();Ia();zd();Ag();xg();ru();Wg();cu();zn=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)}},$x=0,Qn=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${$x++}`,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)}},Px=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);Ts=["claude","codex","lmplayer",Gn,Vn,Or,Kn,Jn,Yn,"muse","miniplayer"],$o={input_uncached:null,input_cached:null,input_cache_write:null,output:null},Ux=5e5,yu="bx3",Fx=Rx(import.meta.url);uu=["claude","codex","lmplayer"];Xx=["read","read_file","view","view_file","view_image"],qx=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],Gx=["filePath","path","file","file_path","filepath","notebook_path","paths"];Jx=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];dC=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([og(e.museDataHome),ba(e.miniplayerHome)].map(n=>[n.provider,new hs(n)])),this.claudeProjectsDir=wn(e.claudeProjectsDir??Dr(xa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Dr(xa(),".codex","sessions"),Dr(xa(),".code","sessions")]).map(n=>wn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??jx()).map(n=>wn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):Ux,this.agyReader=yg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=kg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=Lg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=Mg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=jg(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=Kg(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:[...Ts],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Jn]:"per_response",[Vn]:"per_response",[Gn]:"partial",[Kn]:"partial",[Yn]:"per_response"}}}async discover(e){if(Po(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=Bx(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=Ts.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 _=r.get(h)??null,{sources:E,truncated:y}=await this.discoverProvider(Ts.indexOf(h),e,e.maxSources+1,_);if(y)throw new Error(`passive session discovery exceeded the traversal budget for provider "${h}"; cannot certify a complete or progressing sweep`);let T=_?Ca({provider:h,source_id:_.source_id,sessionid:_.sessionid}):null,w=T===null?E:E.filter(S=>Zn(Ca(S),T)>0);l.set(h,w.length>e.maxSources),a.set(h,w.slice(0,e.maxSources))}let c=o%i.length,d=i.map((h,_)=>i[(_+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 _=a.get(h),E=u.get(h);E<_.length&&(f.push(_[E]),u.set(h,E+1),m=!0)}}let p={},g=[...s];for(let h of i){let _=a.get(h),E=u.get(h);if(!l.get(h)&&E===_.length){g.push(h);continue}if(E>0){let T=_[E-1];p[h]={source_id:T.source_id,sessionid:T.sessionid}}else{let T=r.get(h);T&&(p[h]=T)}}return Ts.every(h=>g.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:Hx({pos:p,done:g,rr:o+1})}}async inspect(e,n){if(Po(n),!Ts.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 ey(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===Gn?this.agyReader.inspect(e,n):e.provider===Vn?this.dshReader.inspect(e,n):e.provider===Or?this.opencodeReader.inspect(e,n):e.provider===Kn?this.copilotReader.inspect(e,n):e.provider===Jn?this.qwenReader.inspect(e,n):e.provider===Yn?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Po(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 ey(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=Yx(i.data,r);return a?e.provider==="claude"?sC(a,e,n,r,zx(o)):lC(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===Gn)return this.agyReader.read(e,n,r);if(e.provider===Vn)return this.dshReader.read(e,n,r);if(e.provider===Or)return this.opencodeReader.read(e,n,r);if(e.provider===Jn)return this.qwenReader.read(e,n,r);if(e.provider===Kn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===Yn?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 ny(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 ny(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[Ts[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(wn(e)))return null;try{let n=new(Wx())(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=>wn(a)))].sort(Zn);for(let a of o){e.signal.throwIfAborted();let l=await fu(a,[wn(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:mC(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=ty(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=ty(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=fC(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Fo(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 Mr(t){let e=Fo(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 ey(t,e){Po(e);let n=await Yg(t).catch(()=>null);if(!n?.isFile()||n.size>e.maxBytes)return null;let r=await xx(t,{signal:e.signal});e.signal.throwIfAborted();let s=await Yg(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 Yx(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 zx(t){return La(Ox(t))==="subagents"}function Qx(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.output_tokens);if(n===null||r===null)return null;let s=e.cache_read_input_tokens===void 0?0:dt(e.cache_read_input_tokens),o=e.cache_creation_input_tokens===void 0?0:dt(e.cache_creation_input_tokens);return s===null||o===null?null:{input_uncached:n+o,input_cached:s,input_cache_write:o,output:r}}function Zx(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=Zg(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=Zg(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 eC(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 tC(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 nC(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),tC(i))){n.add(a);let l=eC(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 rC(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=ws(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 sC(t,e,n,r,s=!1){let o=Zx(t,r),{promptBytes:i,parent:a,resolve:l}=nC(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:{...$o},files_read:[],files_written:[]},obs:new zn,io:new Qn,pricingRaw:{}},f.set(_.id,h),f.size>r.maxRows)return{status:"partial"};let E=typeof p.uuid=="string"&&p.uuid?p.uuid:null;if(E===null)u(h.io);else{let y=l(E);if(y.kind==="broken")u(h.io);else if(y.kind==="found"){let T=[],w=y.uuid;for(;w!==null&&!c.has(w);){let S=w;c.add(S),T.push(S);let b=a.get(S)??null;if(b===null){w=null;continue}let I=l(b);w=I.kind==="found"?I.uuid:null}for(let S=T.length-1;S>=0;S-=1)d(h.io,T[S])}}}let g=Y(_.usage);if(g){let E=Qx(g);E&&(h.meta.tokens=E),rC(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=sy(y.name),S=Vx(y.input),b=typeof y.name=="string"?y.name.toLowerCase():"";if(w==="read"){let I=Oa(S,["file_path","filePath","path","file"]);if(I===null)continue;let L=o.get(T),O=L===void 0||L.cleanPath!==null&&L.cleanPath!==I?null:L.bytes;h.obs.record(T,"read",I,O)}else if(w==="written")h.obs.record(T,"written",Oa(S),oy(S));else if(w==="apply_patch"){let I=typeof S=="string"?S:Y(S)?.input;if(typeof I=="string")for(let L of Da(I))h.obs.record(T,"written",L.path,L.bytes)}else b==="webfetch"||b==="websearch"?h.io.record({direction:"read",kind:"web",id:T,ref:ry(Y(S)?.url),bytes:null,basis:"unknown"}):_u(y.name)||Uo(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:vs(E,T,"read"),write_bytes:vs(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 oC(t){let e=Y(t);if(!e)return null;let n=dt(e.input_tokens),r=dt(e.cached_input_tokens),s=dt(e.output_tokens);if(n===null||r===null||s===null||r>n)return null;let o=e.cache_write_input_tokens===void 0?null:dt(e.cache_write_input_tokens);return e.cache_write_input_tokens!==void 0&&o===null?null:{input_uncached:n-r,input_cached:r,input_cache_write:o,output:s}}function iC(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=Kx(o);if(i!==null){if(r!==null)for(let a of Da(i))e.record(r,"written",a.path,a.bytes);return}}_u(s)||Uo(n,r)}function aC(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 lC(t,e,n,r){let s=new Map,o=new Map,i=null,a=null,l=new zn,c=new Qn,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")iC(h,l,c);else if(h.type==="local_shell_call")Uo(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=aC(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 zn,c=new Qn,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=oC(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 zn,io:new Qn,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 zn,c=new Qn,d=0}if(u&&s.size===0)return{status:"unsupported"};let p=[];for(let{meta:_,obs:h,io:g,rawUsage:E,webSearch:y}of s.values()){let T=h.files("read"),w=h.files("written"),S=g.entries(),b=Y(E),I=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:S,read_bytes:vs(T,S,"read"),write_bytes:vs(w,S,"written"),model_provider:a,pricing_facts:I})}return{status:"complete",source:e,revision:n,checkpoint:n,responses:p,...u?{capture_status:"partial"}:{}}}function cC(t,e=!1){let n=Y(t);if(!n)return{...$o};let r=n.input===void 0?e?null:0:dt(n.input),s=n.output===void 0?e?null:0:dt(n.output),o=n.reasoning===void 0?e?null:0:dt(n.reasoning),i=Y(n.cache),a=i?.read===void 0?e?null:0:dt(i.read),l=i?.write===void 0?e?null:0:dt(i.write);return e&&r===0&&s===0&&o===0&&a===0&&l===0?{...$o}: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?{...$o}:r+s+o+a+l===0?{...$o}:{input_uncached:r+l,input_cached:a,input_cache_write:l,output:s+o}}function ty(t,e,n){Po(n);let r=n.maxRows*20,s=t.prepare("SELECT (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM message WHERE session_id=?) + (SELECT COALESCE(SUM(LENGTH(CAST(data AS BLOB))),0) FROM part WHERE session_id=?) AS total").get(e,e),o=dt(s?.total);if(o===null||o>n.maxBytes)return null;let i=t.prepare("SELECT id,time_created,time_updated,data FROM message WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1),a=t.prepare("SELECT id,message_id,time_created,time_updated,data FROM part WHERE session_id=? ORDER BY time_created,id LIMIT ?").all(e,r+1);if(i.length+a.length>r)return null;let l=0,c=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 uC(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&&!dC.has(i)&&(r=!0))}return n?e:r?"unknown":null}function fC(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=uC(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 zn,f=new Qn,m=0,p=i.get(c.id);p&&f.record({direction:"read",kind:"prompt",id:p.id,ref:null,bytes:p.bytes,basis:p.bytes===null?"unknown":"input_text"});for(let b of s.get(c.id)??[]){let I;try{I=Y(JSON.parse(b.data))}catch{return{status:"partial"}}if(I?.type!=="tool")continue;let L=typeof I.tool=="string"?I.tool.toLowerCase():"",O=sy(I.tool),k=Y(I.state),v=Y(k?.input),A=typeof I.callID=="string"&&I.callID?I.callID:typeof k?.callID=="string"&&k.callID?k.callID:b.id;if(O==="written")u.record(A,"written",Oa(v),oy(v));else if(O==="apply_patch"){let N=v?.patchText;if(typeof N=="string")for(let R of Da(N))u.record(A,"written",R.path,R.bytes);else Uo(f,A)}else if(O==="read"){let N=Oa(v,["filePath","path","file","file_path"]);if(N===null)continue;let R=null;if(k?.status==="completed"){let C=Y(Y(k.metadata)?.display);C?.type==="file"&&typeof C.text=="string"&&(R=Buffer.byteLength(C.text,"utf8"))}u.record(A,"read",N,R)}else if(L==="webfetch"){m+=1;let N=k?.status==="completed"?k.output:void 0;f.record({direction:"read",kind:"web",id:A,ref:ry(v?.url),bytes:typeof N=="string"?Buffer.byteLength(N,"utf8"):null,basis:typeof N=="string"?"normalized_content":"unknown"})}else _u(I.tool)||Uo(f,A)}let _=Y(d.time),h=Y(d.model)?.modelID??d.modelID,g=cC(d.tokens,r.requireBillingCounters),E=Y(d.tokens),y=u.files("read"),T=u.files("written"),w=f.entries(),S=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:vs(y,w,"read"),write_bytes:vs(T,w,"written"),model_provider:typeof d.providerID=="string"&&d.providerID?d.providerID:null,pricing_facts:S}),l.length>r.maxRows)return{status:"partial"}}return{status:"complete",source:t,revision:e,checkpoint:e,responses:l}}async function fu(t,e){if(!zg(t))return null;let n=await Lx(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(()=>wn(s)),i=Dx(o,r);if(i===""||!i.startsWith(`..${Mx}`)&&i!==".."&&!zg(i))return r}return null}async function ny(t,e,n,r,s=null){let o=[],i=0,a=!1;async function l(c){r.signal.throwIfAborted();let d=await Cx(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=Dr(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(()=>wn(f));(s===null||Zn(m,s)>0)&&o.push(m)}}}return await l(t),{paths:o.sort(Zn),truncated:a}}function mC(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 iy(t={}){return new pu(t)}var zn,$x,Qn,Px,Ts,$o,Ux,yu,Fx,uu,Xx,qx,Gx,Jx,dC,pu,ay=x(()=>{"use strict";Jd();Kd();Ia();zd();Ag();xg();ru();Wg();cu();zn=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)}},$x=0,Qn=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${$x++}`,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)}},Px=new Set(["schedulewakeup","taskcreate","taskupdate","taskoutput","taskstop","todowrite","todoread","croncreate","crondelete","cronlist","monitor","listagents","toolsearch","askuserquestion","exitplanmode","agent","skill","job"]);Ts=["claude","codex","lmplayer",Gn,Vn,Or,Kn,Jn,Yn,"muse","miniplayer"],$o={input_uncached:null,input_cached:null,input_cache_write:null,output:null},Ux=5e5,yu="bx3",Fx=Rx(import.meta.url);uu=["claude","codex","lmplayer"];Xx=["read","read_file","view","view_file","view_image"],qx=["write","write_file","edit","edit_file","multiedit","notebookedit","notebook_edit"],Gx=["filePath","path","file","file_path","filepath","notebook_path","paths"];Jx=[["text(await tools.apply_patch(",2],["await tools.apply_patch(",1],["tools.apply_patch(",1]];dC=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([og(e.museDataHome),ba(e.miniplayerHome)].map(n=>[n.provider,new hs(n)])),this.claudeProjectsDir=wn(e.claudeProjectsDir??Dr(xa(),".claude","projects")),this.codexSessionDirs=(e.codexSessionDirs??[Dr(xa(),".codex","sessions"),Dr(xa(),".code","sessions")]).map(n=>wn(n)),this.lmplayerDbPaths=(e.lmplayerDbPaths??jx()).map(n=>wn(n)),this.sqliteBusyTimeoutMs=e.sqliteBusyTimeoutMs??5e3,this.maxDiscoveryTraversalVisits=e.maxDiscoveryTraversalVisits&&e.maxDiscoveryTraversalVisits>0?Math.trunc(e.maxDiscoveryTraversalVisits):Ux,this.agyReader=yg(e.agyConversationsDir?{agyConversationsDir:e.agyConversationsDir}:{}),this.dshReader=kg(e.dshHome?{dshHome:e.dshHome}:{}),this.qwenReader=Lg(e.qwenProjectsDirs?{qwenProjectsDirs:e.qwenProjectsDirs}:{}),this.opencodeReader=Mg(e.opencodeDbPaths?{dbPaths:e.opencodeDbPaths}:{}),this.copilotReader=jg(e.copilotSessionStateDir?{copilotSessionStateDir:e.copilotSessionStateDir}:{}),this.kimiReader=Kg(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:[...Ts],metering:{muse:"partial",miniplayer:"partial",claude:"per_response",codex:"per_response",lmplayer:"per_response",opencode:"per_response",[Jn]:"per_response",[Vn]:"per_response",[Gn]:"partial",[Kn]:"partial",[Yn]:"per_response"}}}async discover(e){if(Po(e),!Number.isSafeInteger(e.maxSources)||e.maxSources<=0)throw new Error("maxSources must be a positive safe integer");let n=Bx(e.after),r=n?.pos??new Map,s=n?.done??new Set,o=n?.rr??0,i=Ts.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(Ts.indexOf(h),e,e.maxSources+1,g);if(y)throw new Error(`passive session discovery exceeded the traversal budget for provider "${h}"; cannot certify a complete or progressing sweep`);let T=g?Ca({provider:h,source_id:g.source_id,sessionid:g.sessionid}):null,w=T===null?E:E.filter(S=>Zn(Ca(S),T)>0);l.set(h,w.length>e.maxSources),a.set(h,w.slice(0,e.maxSources))}let c=o%i.length,d=i.map((h,g)=>i[(g+c)%i.length]),u=new Map(i.map(h=>[h,0])),f=[],m=!0;for(;f.length<e.maxSources&&m;){m=!1;for(let h of d){if(f.length>=e.maxSources)break;let g=a.get(h),E=u.get(h);E<g.length&&(f.push(g[E]),u.set(h,E+1),m=!0)}}let p={},_=[...s];for(let h of i){let g=a.get(h),E=u.get(h);if(!l.get(h)&&E===g.length){_.push(h);continue}if(E>0){let T=g[E-1];p[h]={source_id:T.source_id,sessionid:T.sessionid}}else{let T=r.get(h);T&&(p[h]=T)}}return Ts.every(h=>_.includes(h))?{sources:f,complete:!0,cursor:null}:{sources:f,complete:!1,cursor:Hx({pos:p,done:_,rr:o+1})}}async inspect(e,n){if(Po(n),!Ts.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 ey(s,n).catch(()=>null);return o?{status:"ready",revision:o.revision}:{status:"partial"}}return e.provider==="lmplayer"?this.inspectLmplayer(e,n):e.provider===Gn?this.agyReader.inspect(e,n):e.provider===Vn?this.dshReader.inspect(e,n):e.provider===Or?this.opencodeReader.inspect(e,n):e.provider===Kn?this.copilotReader.inspect(e,n):e.provider===Jn?this.qwenReader.inspect(e,n):e.provider===Yn?this.kimiReader.inspect(e,n):this.sessionDataReaders[e.provider]?.inspect(e,n)??{status:"unsupported"}}async read(e,n,r){if(Po(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 ey(o,r).catch(()=>null);if(!i)return{status:"partial"};if(i.revision!==n)return{status:"partial"};let a=Yx(i.data,r);return a?e.provider==="claude"?sC(a,e,n,r,zx(o)):lC(a,e,n,r):{status:"partial"}}if(e.provider==="lmplayer")return this.readLmplayer(e,n,r);if(e.provider===Gn)return this.agyReader.read(e,n,r);if(e.provider===Vn)return this.dshReader.read(e,n,r);if(e.provider===Or)return this.opencodeReader.read(e,n,r);if(e.provider===Jn)return this.qwenReader.read(e,n,r);if(e.provider===Kn){let{snapshot:s,sessionUsage:o}=await this.copilotReader.readWithUsage(e,n,r);return s.status!=="complete"?s:{...s,session_usage:o}}return e.provider===Yn?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 ny(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 ny(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[Ts[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(wn(e)))return null;try{let n=new(Wx())(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=>wn(a)))].sort(Zn);for(let a of o){e.signal.throwIfAborted();let l=await fu(a,[wn(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:mC(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=ty(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=ty(s,e.sessionid,r);if(!i||i.revision!==n)return s.exec("ROLLBACK"),{status:"partial"};let a=fC(e,n,i,r);return s.exec("COMMIT"),a}catch{try{s.exec("ROLLBACK")}catch{}return{status:"unsupported"}}finally{s.close()}}}});function Fo(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 Mr(t){let e=Fo(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?pC(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 pC(t,e){for(let[n,r]of Object.entries(e))if(r!==void 0){if(n==="tokens"&&ly(t.tokens)&&ly(r)){t.tokens={...t.tokens,...r};continue}t[n]=r}}function ly(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function cy(t,e){if(e==="json")return JSON.stringify(t,null,2);let{messages:n,...r}=t,s=[JSON.stringify(r)];for(let o of n)s.push(JSON.stringify(o));return s.join(`
18
18
  `)+`
19
19
  `}var Ma=x(()=>{"use strict"});import{createHash as dy}from"node:crypto";import{opendir as hC,open as _C,realpath as uy}from"node:fs/promises";import{constants as Tu}from"node:fs";import{join as gC,relative as yC,isAbsolute as EC,basename as TC,dirname as wC}from"node:path";function SC(t,e,n){try{if(t==="pi"){let d=e.split(`
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,g=fy(f.id,f.timestamp,m.model);if(!p||typeof p!="object")return;g.tokens={input_uncached:vn(p.input),input_cached:vn(p.cacheRead),input_cache_write:vn(p.cacheWrite),output:vn(p.output)},g.pricing_facts={reasoning_output_tokens:vn(p.reasoning)},g.providerCostUsd=typeof p.cost?.total=="number"&&Number.isFinite(p.cost.total)&&p.cost.total>=0?p.cost.total:null,u.push(g)}return u}let r;try{r=JSON.parse(e)}catch{}let s=Array.isArray(r?.messages)?r.messages:e.split(`
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=Mr(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=vn(u.input),m=vn(u.cached),p=vn(u.output),g=vn(u.thoughts),h=fy(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&&g!==null&&Number.isSafeInteger(p+g)?p+g:null},h.pricing_facts={reasoning_output_tokens:g},c.push(h)}return c}catch{return}}function wu(t,e){let n=async(s,o)=>{o.signal.throwIfAborted();let i=await uy(s),a=await uy(e),l=yC(a,i);if(l===".."||l.startsWith("../")||l.startsWith("..\\")||EC(l))throw Error("outside native root");let c=await _C(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(`
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,_=fy(f.id,f.timestamp,m.model);if(!p||typeof p!="object")return;_.tokens={input_uncached:vn(p.input),input_cached:vn(p.cacheRead),input_cache_write:vn(p.cacheWrite),output:vn(p.output)},_.pricing_facts={reasoning_output_tokens:vn(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
+ `).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=Mr(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=vn(u.input),m=vn(u.cached),p=vn(u.output),_=vn(u.thoughts),h=fy(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 uy(s),a=await uy(e),l=yC(a,i);if(l===".."||l.startsWith("../")||l.startsWith("..\\")||EC(l))throw Error("outside native root");let c=await _C(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
- `))).id:Mr(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 hC(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=gC(c,f.name);if(f.isDirectory())await l(m,d+1);else if(f.isFile()&&/\.jsonl?$/.test(f.name)&&(t!=="gemini"||TC(wC(m))==="chats"&&f.name.startsWith("session-"))){let p=await n(m,s).catch(()=>{});if(p===void 0){s.signal.throwIfAborted(),a=!1;continue}let g=r(p);typeof g=="string"&&g?o.push({provider:t,sessionid:g,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:dy("sha256").update(i).digest("hex")}},async read(s,o,i){let a=await n(s.source_id,i);if(dy("sha256").update(a).digest("hex")!==o)return{status:"partial"};if(a.split(`
24
- `).length>i.maxRows)return{status:"partial"};let l=SC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var vn,vC,fy,my=x(()=>{"use strict";Ma();vn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,vC=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},fy=(t,e,n)=>({response_id:t,timestamp:vC(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 bC,realpath as IC}from"node:fs/promises";import{join as ut,resolve as hy}from"node:path";import{homedir as kC}from"node:os";function AC(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 g of Object.values(u))g!==null&&vu(g)===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=qn(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 py(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=hy(i),l;try{if(!(await bC(a)).isFile())return{sources:s,complete:!1};let c=await IC(a);if(o.has(c))continue;o.add(c),l=xr(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 NC(t,e,n){let r=e.HOME||e.USERPROFILE||kC(),s=e.XDG_DATA_HOME||ut(r,".local","share"),o=e.XDG_CONFIG_HOME||ut(r,".config");if(t==="pi")return wu("pi",e.PI_CODING_AGENT_DIR?ut(e.PI_CODING_AGENT_DIR,"sessions"):ut(r,".pi","agent","sessions"));if(t==="gemini")return wu("gemini",ut(e.GEMINI_CLI_HOME||ut(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new hs(ba(e.MINIPLAYER_HOME||ut(s,"miniplayer")));return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}if(t==="opencode"){let l=[ut(s,"opencode","opencode.db"),ut(s,"opencode","opencode-local.db"),ut(o,"opencode","opencode.db")].map(d=>hy(d)),c=new Co({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>py(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 Mo({kimiHome:e.KIMI_CODE_HOME||ut(r,".kimi-code")}):new Ro({agyConversationsDir:ut(r,".gemini","antigravity-cli","conversations"),sqliteBusyTimeoutMs:0});return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}let i=e.OPENCODE_DB?[e.OPENCODE_DB]:[ut(s,"lmplayer","opencode-local.db"),ut(s,"lmplayer","opencode-dev.db")],a=iy({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>py(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function _y(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=xr(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??NC(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 g=await d.inspect(p,c);if(g.status!=="ready")return;let h=await d.read(p,g.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!==g.revision)return;let _=Date.parse(t.startedAt),E=Date.parse(n);if(!Number.isFinite(_)||!Number.isFinite(E)||E<_)return;let y=h.responses;if(!Array.isArray(y)||y.some(S=>!S.timestamp||!Number.isFinite(Date.parse(S.timestamp))))return;let T=y.filter(S=>Date.parse(S.timestamp)>=_&&Date.parse(S.timestamp)<=E);if(!T.length)continue;if(m)return;let w=l.pragma("busy_timeout",{simple:!0});try{l.pragma("busy_timeout = 0");let S=l.prepare("SELECT 1 FROM team_chat_log WHERE attempt_key IS NOT NULL AND attempt_key<>? AND provider=? AND (native_session_id=? OR native_session_id IS NULL) AND julianday(created_at)<=julianday(?) AND (ended_at IS NULL OR julianday(ended_at)>=julianday(?)) LIMIT 1");for(let b of T){let I=new Date(b.timestamp).toISOString();if(S.get(t.attempt_key,t.provider,e,I,I))return}}finally{l.pragma("busy_timeout = "+w)}m=T}return m?AC(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,gy=x(()=>{"use strict";ga();ay();cu();ru();zd();Jd();Ia();No();my();$a=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],vu=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Yt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var jo=x(()=>{"use strict"});var Pa,yy,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"},yy=`CREATE UNIQUE INDEX IF NOT EXISTS idx_team_chat_attempt_unique ON team_chat_log(attempt_key) WHERE attempt_key IS NOT NULL;
23
+ `))).id:Mr(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 hC(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=gC(c,f.name);if(f.isDirectory())await l(m,d+1);else if(f.isFile()&&/\.jsonl?$/.test(f.name)&&(t!=="gemini"||TC(wC(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:dy("sha256").update(i).digest("hex")}},async read(s,o,i){let a=await n(s.source_id,i);if(dy("sha256").update(a).digest("hex")!==o)return{status:"partial"};if(a.split(`
24
+ `).length>i.maxRows)return{status:"partial"};let l=SC(t,a,s.sessionid);return l&&l.length<=i.maxRows?{status:"complete",source:s,revision:o,responses:l}:{status:"partial"}}}}var vn,vC,fy,my=x(()=>{"use strict";Ma();vn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,vC=t=>{let e=typeof t=="number"||typeof t=="string"?new Date(t):null;return e&&Number.isFinite(e.getTime())?e.toISOString():null},fy=(t,e,n)=>({response_id:t,timestamp:vC(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 bC,realpath as IC}from"node:fs/promises";import{join as ut,resolve as hy}from"node:path";import{homedir as kC}from"node:os";function AC(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=qn(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 py(t,e,n,r){let s=[],o=new Set;for(let i of t){r.signal?.throwIfAborted();let a=hy(i),l;try{if(!(await bC(a)).isFile())return{sources:s,complete:!1};let c=await IC(a);if(o.has(c))continue;o.add(c),l=xr(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 NC(t,e,n){let r=e.HOME||e.USERPROFILE||kC(),s=e.XDG_DATA_HOME||ut(r,".local","share"),o=e.XDG_CONFIG_HOME||ut(r,".config");if(t==="pi")return wu("pi",e.PI_CODING_AGENT_DIR?ut(e.PI_CODING_AGENT_DIR,"sessions"):ut(r,".pi","agent","sessions"));if(t==="gemini")return wu("gemini",ut(e.GEMINI_CLI_HOME||ut(r,".gemini"),"tmp"));if(t==="miniplayer"){let l=new hs(ba(e.MINIPLAYER_HOME||ut(s,"miniplayer")));return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}if(t==="opencode"){let l=[ut(s,"opencode","opencode.db"),ut(s,"opencode","opencode-local.db"),ut(o,"opencode","opencode.db")].map(d=>hy(d)),c=new Co({dbPaths:l,sqliteBusyTimeoutMs:0});return{discover:d=>py(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 Mo({kimiHome:e.KIMI_CODE_HOME||ut(r,".kimi-code")}):new Ro({agyConversationsDir:ut(r,".gemini","antigravity-cli","conversations"),sqliteBusyTimeoutMs:0});return{discover:async c=>{let d=await l.discover(c,c.maxSources,null);return{...d,complete:!d.truncated&&d.sources.length<c.maxSources}},inspect:(c,d)=>l.inspect(c,d),read:(c,d,u)=>l.read(c,d,u)}}let i=e.OPENCODE_DB?[e.OPENCODE_DB]:[ut(s,"lmplayer","opencode-local.db"),ut(s,"lmplayer","opencode-dev.db")],a=iy({lmplayerDbPaths:i,sqliteBusyTimeoutMs:0});return{discover:l=>py(i,t,n,l),inspect:(l,c)=>a.inspect(l,c),read:(l,c,d)=>a.read(l,c,d)}}async function _y(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=xr(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??NC(t.provider,r.env??process.env,e),u=await d.discover(c);if(u.complete!==!0)return;let f=u.sources.filter(p=>p.provider===t.provider&&(p.sessionid===e||t.provider==="lmplayer"&&p.sessionid==="")).map(p=>({...p,sessionid:e}));if(!f.length)return;let m;for(let p of f){s.signal.throwIfAborted();let _=await d.inspect(p,c);if(_.status!=="ready")return;let h=await d.read(p,_.revision,c);if(s.signal.throwIfAborted(),h.status!=="complete"||h.capture_status!==void 0||h.source?.provider!==t.provider||h.source?.sessionid!==e||h.source?.source_id!==p.source_id||h.revision!==_.revision)return;let g=Date.parse(t.startedAt),E=Date.parse(n);if(!Number.isFinite(g)||!Number.isFinite(E)||E<g)return;let y=h.responses;if(!Array.isArray(y)||y.some(S=>!S.timestamp||!Number.isFinite(Date.parse(S.timestamp))))return;let T=y.filter(S=>Date.parse(S.timestamp)>=g&&Date.parse(S.timestamp)<=E);if(!T.length)continue;if(m)return;let w=l.pragma("busy_timeout",{simple:!0});try{l.pragma("busy_timeout = 0");let S=l.prepare("SELECT 1 FROM team_chat_log WHERE attempt_key IS NOT NULL AND attempt_key<>? AND provider=? AND (native_session_id=? OR native_session_id IS NULL) AND julianday(created_at)<=julianday(?) AND (ended_at IS NULL OR julianday(ended_at)>=julianday(?)) LIMIT 1");for(let b of T){let I=new Date(b.timestamp).toISOString();if(S.get(t.attempt_key,t.provider,e,I,I))return}}finally{l.pragma("busy_timeout = "+w)}m=T}return m?AC(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,gy=x(()=>{"use strict";ga();ay();cu();ru();zd();Jd();Ia();No();my();$a=["kimi","opencode","gemini","miniplayer","pi","agy","lmplayer"],vu=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function Yt(t){return t.some(e=>e!=null&&(typeof e!="number"||!Number.isSafeInteger(e)||e<0))}var jo=x(()=>{"use strict"});var Pa,yy,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"},yy=`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 Ay}from"node:crypto";import{mkdirSync as Ny,readFileSync as RC,renameSync as LC,writeFileSync as xC,existsSync as Ry}from"node:fs";import{homedir as CC}from"node:os";import{dirname as Ly,join as Wa,resolve as Ha}from"node:path";import{fileURLToPath as OC}from"node:url";function UC(){return Wa(CC(),".lmctl","cache","lmprice")}function Is(t,e){return Wa(t,e)}function Ba(t,e){if(!t||!e)return null;let n=Wo.get(t),r=Wo.get(e);return n===void 0||r===void 0?null:Ay("sha256").update(n).update(r).digest("hex")}function $r(t){try{let e=RC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&Wo.set(n,e),n}catch{return null}}function Cy(t,e){let n=`${t}.tmp-${process.pid}`;xC(n,e),LC(n,t)}function bu(t){return t===null||typeof t=="number"}function Pr(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 Ur(t){if(typeof t!="object"||t===null)return!1;let e=t;if(e.schema_version!==1||!Array.isArray(e.standards)||!Array.isArray(e.aliases))return!1;let n=e.standards.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.standard_slug=="string"&&(o.catalog_record_id===null||typeof o.catalog_record_id=="string")}),r=e.aliases.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.alias=="string"&&(o.standard_slug===null||typeof o.standard_slug=="string")&&typeof o.evidence=="string"&&jC.has(o.evidence)});return n&&r}function WC(t){let e=$r(Is(t,xy)),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=$r(Is(t,FC));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 HC(t){let e=WC(t),n=$r(Is(t,Fa)),r=$r(Is(t,ja));return e.pair_sha256&&Ba(Pr(n)?n:null,Ur(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{...Ty},aliases:{...Ty}}}:{catalog:Pr(n)?n:null,aliases:Ur(r)?r:null,meta:e}}function wy(t,e){try{return Ny(t,{recursive:!0}),Cy(Is(t,xy),JSON.stringify(e)),!0}catch{return!1}}function Iu(t){return(t&&typeof t=="object"?Wo.get(t):void 0)??JSON.stringify(t)}function Ua(t,e,n){try{Ny(t,{recursive:!0}),Cy(Is(t,e),Iu(n))}catch{}}function BC(t,e){let n=XC(t),r=n?[Ha(n,"data",e)]:[Ha(t,"..","..","data",e)];for(let s of r)if(Ry(s))return s;return null}function XC(t){let e=Ha(t);for(;;){if(Ry(Ha(e,"package.json")))return e;let n=Ly(e);if(n===e)return null;e=n}}function vy(t,e,n){let r=n!==void 0?n:BC(t,e);return r===null?null:$r(r)}function ks(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return Ey;let n=Number(e);return!Number.isFinite(n)||n<0?Ey:n*1e3}function qC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function Sy(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout($C)});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(PC)});if(!i.ok)return{kind:"failed"};let a=await i.text(),l=JSON.parse(a);return l&&typeof l=="object"&&Wo.set(l,a),{kind:"payload",payload:l,etag:i.headers.get("etag")??o}}catch{return{kind:"failed"}}}function Ft(t={}){return Object.keys(t).length===0?(by??=Iy(t),by):Iy(t)}async function Iy(t){let e=Ly(OC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:qC();if(n!==null&&n!==""){let g=$r(Wa(n,Fa)),h=$r(Wa(n,ja));if(Pr(g)&&Ur(h)){let _={sha256:Ba(g,h),catalog:g,aliases:h,source:"pinned",generatedAt:g.generated_at??null};return ku=_.generatedAt,_}return ky(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??UC(),o=t.now??Date.now(),i=t.ttlMs??ks(),a=HC(s),l=(g,h)=>g!==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 g=await Sy(r,DC,c,a.meta.model_list.etag);g.kind==="failed"&&(f=!0),g.kind==="match"?(m.model_list.last_checked=new Date(o).toISOString(),p=!0):g.kind==="payload"&&(Pr(g.payload)?(m.model_list.last_checked=new Date(o).toISOString(),p=!0,c=g.payload,g.etag!==null&&(m.model_list.etag=g.etag),u=!0):f=!0)}if(!l(d,a.meta.aliases)){let g=await Sy(r,MC,d,a.meta.aliases.etag);g.kind==="failed"&&(f=!0),g.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):g.kind==="payload"&&(Ur(g.payload)?(m.aliases.last_checked=new Date(o).toISOString(),p=!0,d=g.payload,g.etag!==null&&(m.aliases.etag=g.etag),u=!0):f=!0)}if(!f&&(p||u))if(c!==null&&d!==null){let g=Ay("sha256").update(Iu(c)).update(Iu(d)).digest("hex");wy(s,{...m,pair_sha256:g})&&g!==a.meta.pair_sha256&&(Ua(s,Fa,c),Ua(s,ja,d))}else c!==a.catalog&&c!==null&&Ua(s,Fa,c),d!==a.aliases&&d!==null&&Ua(s,ja,d),wy(s,m);if(c!==null||d!==null){let g={catalog:c,aliases:d,sha256:Ba(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return ku=g.generatedAt,g}return{...ky(t,e),refreshFailed:f}}function ky(t,e){let n=vy(e,"price-data.json",t.bundledPath),r=vy(e,"price-aliases.json",t.bundledAliasesPath),s=Pr(n)?n:null,o=Ur(r)?r:null,i={catalog:s,aliases:o,sha256:Ba(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return ku=i.generatedAt,i}function Oy(t){if(t.cacheWrite!==void 0)return bs(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=bs(t.cacheWrite5m),n=bs(t.cacheWrite1h);return e===null||n===null?null:bs(e+n)}function Au(t,e){let n=bs(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=bs(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 Ho(t,e){let n=Ss(e.input_per_1m_tokens),r=Ss(e.output_per_1m_tokens),s=Ss(e.input_cache_read_per_1m_tokens),o=Ss(e.source_cost_fields?.cache_creation_input_token_cost),i=Ss(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=Ss(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Oy(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 Bo(t,e){if(e===null)return null;let n=Ho(t,e),r=Oy(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 DC,MC,$C,PC,Ey,Fa,ja,xy,FC,Wo,jC,Ty,ku,by,Ss,bs,Sn=x(()=>{"use strict";DC="https://lmctl.com/dataset/model_list.json",MC="https://lmctl.com/dataset/aliases.json",$C=1e3,PC=1e4,Ey=6*60*60*1e3;Fa="model_list.json",ja="aliases.json",xy="meta.json",FC="model_list.meta.json";Wo=new WeakMap;jC=new Set(["established","asserted","unresolved"]);Ty={etag:null,last_checked:null};ku=null,by=null;Ss=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,bs=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function jr(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function Fr(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return jr(n)}function My(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(jr(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function GC(t,e){let n=new Set,r=l=>{n.add(jr(l))},s=t.trim().toLowerCase(),o=null,i=s.indexOf(":");i>0&&!s.slice(0,i).includes("/")&&(o=s.slice(0,i),r(s),s=s.slice(i+1)),r(s);let a=s.slice(s.lastIndexOf("/")+1);r(a);for(let l of e)r(`${l}/${a}`);return o!==null&&r(`${o}/${a}`),[...n]}function Wr(t){let e=r=>!(r.mode!==void 0&&r.mode!==null&&r.mode!=="chat"||t.nonChatName&&t.nonChatName.test(r.source_model_id.toLowerCase())),n=r=>e(r)&&t.family.test(r.source_model_id.toLowerCase());return{firstPartyProviders:t.firstPartyProviders,isChatModel:e,coversRecord:n,normalize:r=>GC(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=My(r);return s.some(i=>o.has(i))}}}function JC(t){let e=t.trim(),n=VC.exec(e);return n?{model:e.slice(0,n.index).trim(),effort:n[1].trim()}:{model:e,effort:null}}function QC(t,e,n){let r=e.trim().toLowerCase(),s=jr(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 ZC(t,e,n){let r=[];for(let[s,o]of Object.entries(zt))s!==n&&QC(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 eO(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 tO(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}${jr(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!eO(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 By(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 Xy(t,e){return t.map(By).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 nO(t,e,n){let r=tO(t),s=Xy(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 Nu(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=nO(t,e,n);if(r!==void 0){let i=t.map(By),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 rO(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function sO(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=Fr(l),d=n.records.filter(u=>Fr(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:Nu(d,c,Ru)}function qy(t,e,n,r){if(n===null||!Array.isArray(n.records))return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};if(r!==null){let g=[e.trim().toLowerCase()];g.push(`${t.toLowerCase()}/${g[0]}`);let h=r.aliases.find(_=>g.includes(_.alias.toLowerCase()));if(h){if(h.evidence==="unresolved"||h.standard_slug===null)return{state:{kind:"unresolved",alias:h.alias},viaAlias:!0,pinRoute:null};let _=rO(r,h.standard_slug);return{state:sO(h,_,n),viaAlias:!0,pinRoute:_?.catalog_record_id??null}}}let s=zt[t];if(!s)return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};let o=e.trim().toLowerCase(),i=s.normalize(e),a=g=>({state:g,viaAlias:!1,pinRoute:null}),l=jr(o),c=n.records.filter(g=>g.source_model_id.toLowerCase()===o&&s.matchRow(g,[l]));if(c.length>0){let g=Fr(c[0]),h=n.records.filter(_=>s.matchRow(_,[g])&&Fr(_)===g);return a(Nu(h.length>0?h:c,g,Dy[t]??Ru,t==="codex"?"openai":void 0))}let d=n.records.filter(g=>s.matchRow(g,i));if(d.length===0){let g=ZC(e,n,t);return g.length>0?a({kind:"wrong-provider",declared:e,otherProviders:g}):a({kind:"unknown",declared:e})}let u=new Map;for(let g of d){let h=Fr(g),_=u.get(h);_?_.push(g):u.set(h,[g])}let f=Dy[t]??Ru,m=null,p=null;for(let g of u.values()){let h=Xy(g,f);(p===null||oO(h[0],p[0],f)<0)&&(m=g,p=h)}return a(Nu(m,Fr(m[0]),f,t==="codex"?"openai":void 0))}function Ga(t,e,n,r){return qy(t,e,n,r).state}function jt(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=qy(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 Gy(t,e){let n=zt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(Fr(s));return r.size}function oO(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 $y,Py,Uy,Fy,jy,Wy,VC,KC,YC,zC,Hy,zt,Dy,Ru,Hr=x(()=>{"use strict";$y=Wr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),Py=Wr({vendorPrefixes:["openai"],family:/(^|\/)(gpt-|o\d|chatgpt|ft:gpt)|openai\//,firstPartyProviders:["openai"],nonChatName:/(^|[-/])(tts|transcribe(?:-\w+)?|realtime(?:-\w+)?|search(?:-\w+)*|image(?:-\w+)?|audio(?:-\w+)?|whisper(?:-\w+)?|dall-e(?:-\w+)?|embedding|moderation)(-|$)/}),Uy=Wr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),Fy=Wr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),jy=Wr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),Wy=Wr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),VC=/\s*\(([^()]+)\)\s*$/;KC={"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"},YC=["gemini","google","vertex_ai-language-models","anthropic"],zC={normalize(t){let{model:e}=JC(t),n=KC[e.toLowerCase()];return n===void 0?[]:[jr(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=My(t);return e.some(r=>n.has(r))}},Hy=Wr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),zt={claude:$y,codex:Py,gemini:Uy,agy:zC,kimi:Fy,qwen:jy,hermes:Wy,deepseek:Hy},Dy={claude:$y.firstPartyProviders,codex:Py.firstPartyProviders,gemini:Uy.firstPartyProviders,agy:YC,kimi:Fy.firstPartyProviders,qwen:jy.firstPartyProviders,hermes:Wy.firstPartyProviders,deepseek:Hy.firstPartyProviders};Ru=[]});import{randomUUID as iO}from"node:crypto";function Va(t){return{startedAt:new Date().toISOString(),attempt_key:iO(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function As(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function Xo(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 _y(t,e.sessionId||String(t.native_session_id??""),String(s.ended_at),r):void 0;if(e.status!=="cancelled"&&(o?.outcome==="cancelled"||o?.outcome==="error")&&(s.turn_outcome=o.outcome),!o||o.source===null)return s.usage_source=null,s.usage_reason=t.provider==="ClaudeMock"?"mock_estimate":s.turn_outcome!=="ok"?"turn_not_completed":["copilot","hermes"].includes(t.provider)?"session_totals_only":"native_record_missing",s.cost_reason="usage_unavailable",s;if(Object.assign(s,{usage_source:o.source,usage_reason:o.reason,tok_input_uncached:bn(o.inputUncached),tok_cache_read:bn(o.cacheRead),tok_cache_write:bn(o.cacheWrite),tok_output:bn(o.output),tok_reasoning:bn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:aO(o.providerCostUsd)}),o.invalidCounters||Yt([o.inputUncached,o.cacheRead,o.cacheWrite,o.output,o.reasoning]))return s.usage_reason="counter_not_exposed",s.cost_reason="usage_unavailable",s;if(o.mixedModels)return s.cost_reason="mixed_models",s.model_reported=null,s;let i=o.modelReported||t.model_requested;if(!i)return s.cost_reason="model_unknown",s;let a,l=await Promise.race([n(),new Promise(p=>{a=setTimeout(()=>p(null),1e3)})]).finally(()=>{a&&clearTimeout(a)});if(!l||!l.catalog)return s.cost_reason="price_data_unavailable",s;let c=jt(t.provider,i,l.catalog,l.aliases);if(!c.offer)return s.cost_reason=c.state.kind==="unresolved"?"model_unresolved":c.state.kind==="unknown"||c.state.kind==="wrong-provider"?"model_unknown":"model_unpriced",s;let d=l.catalog.records.find(p=>(p.record_id??p.source+":"+p.source_model_id)===c.offer.route),u=c.offer.pricing,f={input:bn(o.inputUncached)??0,output:bn(o.output)??0,cachedInput:bn(o.cacheRead)??0,cacheWrite:bn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=Ho(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=Bo(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Br(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Pa,s));if(!r.length)return;t.prepare(`UPDATE team_chat_log SET ${r.map(([s])=>`${s}=?`).join(",")} WHERE id=? AND ended_at IS NULL`).run(...r.map(([,s])=>s??null),e)}catch(r){for(let o of["usage_source","model_reported","tok_input_uncached","tok_cache_read","tok_cache_write","tok_output","tok_reasoning","price_record_id","price_snapshot_sha256","rate_input_1m","rate_output_1m","rate_cache_read_1m","rate_cache_write_1m","provider_cost_usd"])n[o]=null;n.usage_reason="recorder_failed",n.cost_reason="usage_unavailable";let s=r?.code??"";if(/^SQLITE_(?:BUSY|LOCKED)(?:_|$)/.test(s))return;try{t.prepare("UPDATE team_chat_log SET attempt_key=COALESCE(attempt_key,?),provider=COALESCE(provider,?),native_session_id=COALESCE(native_session_id,?),cwd=COALESCE(cwd,?),model_requested=COALESCE(model_requested,?),ended_at=COALESCE(ended_at,?),turn_outcome=COALESCE(turn_outcome,?),usage_reason='recorder_failed',cost_reason='usage_unavailable' WHERE id=? AND ended_at IS NULL").run(n.attempt_key??null,n.provider??null,n.native_session_id??null,n.cwd??null,n.model_requested??null,n.ended_at??null,n.turn_outcome??null,e)}catch{}}}var bn,aO,qo=x(()=>{"use strict";gy();jo();Su();Sn();Hr();bn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,aO=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var Vy,Jy=x(()=>{"use strict";Vy=`
43
+ `});import{createHash as Ay}from"node:crypto";import{mkdirSync as Ny,readFileSync as RC,renameSync as LC,writeFileSync as xC,existsSync as Ry}from"node:fs";import{homedir as CC}from"node:os";import{dirname as Ly,join as Wa,resolve as Ha}from"node:path";import{fileURLToPath as OC}from"node:url";function UC(){return Wa(CC(),".lmctl","cache","lmprice")}function Is(t,e){return Wa(t,e)}function Ba(t,e){if(!t||!e)return null;let n=Wo.get(t),r=Wo.get(e);return n===void 0||r===void 0?null:Ay("sha256").update(n).update(r).digest("hex")}function $r(t){try{let e=RC(t,"utf-8"),n=JSON.parse(e);return n&&typeof n=="object"&&Wo.set(n,e),n}catch{return null}}function Cy(t,e){let n=`${t}.tmp-${process.pid}`;xC(n,e),LC(n,t)}function bu(t){return t===null||typeof t=="number"}function Pr(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 Ur(t){if(typeof t!="object"||t===null)return!1;let e=t;if(e.schema_version!==1||!Array.isArray(e.standards)||!Array.isArray(e.aliases))return!1;let n=e.standards.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.standard_slug=="string"&&(o.catalog_record_id===null||typeof o.catalog_record_id=="string")}),r=e.aliases.every(s=>{if(typeof s!="object"||s===null)return!1;let o=s;return typeof o.alias=="string"&&(o.standard_slug===null||typeof o.standard_slug=="string")&&typeof o.evidence=="string"&&jC.has(o.evidence)});return n&&r}function WC(t){let e=$r(Is(t,xy)),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=$r(Is(t,FC));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 HC(t){let e=WC(t),n=$r(Is(t,Fa)),r=$r(Is(t,ja));return e.pair_sha256&&Ba(Pr(n)?n:null,Ur(r)?r:null)!==e.pair_sha256?{catalog:null,aliases:null,meta:{model_list:{...Ty},aliases:{...Ty}}}:{catalog:Pr(n)?n:null,aliases:Ur(r)?r:null,meta:e}}function wy(t,e){try{return Ny(t,{recursive:!0}),Cy(Is(t,xy),JSON.stringify(e)),!0}catch{return!1}}function Iu(t){return(t&&typeof t=="object"?Wo.get(t):void 0)??JSON.stringify(t)}function Ua(t,e,n){try{Ny(t,{recursive:!0}),Cy(Is(t,e),Iu(n))}catch{}}function BC(t,e){let n=XC(t),r=n?[Ha(n,"data",e)]:[Ha(t,"..","..","data",e)];for(let s of r)if(Ry(s))return s;return null}function XC(t){let e=Ha(t);for(;;){if(Ry(Ha(e,"package.json")))return e;let n=Ly(e);if(n===e)return null;e=n}}function vy(t,e,n){let r=n!==void 0?n:BC(t,e);return r===null?null:$r(r)}function ks(t=process.env){let e=t.LMCTL_PRICE_TTL;if(e===void 0||e==="")return Ey;let n=Number(e);return!Number.isFinite(n)||n<0?Ey:n*1e3}function qC(){let t=process.env.LMCTL_PRICE_DATA;return t!==void 0&&t!==""?t:null}async function Sy(t,e,n,r){try{let s=await t(e,{method:"HEAD",signal:AbortSignal.timeout($C)});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(PC)});if(!i.ok)return{kind:"failed"};let a=await i.text(),l=JSON.parse(a);return l&&typeof l=="object"&&Wo.set(l,a),{kind:"payload",payload:l,etag:i.headers.get("etag")??o}}catch{return{kind:"failed"}}}function Ft(t={}){return Object.keys(t).length===0?(by??=Iy(t),by):Iy(t)}async function Iy(t){let e=Ly(OC(import.meta.url)),n=t.pinDir!==void 0?t.pinDir:qC();if(n!==null&&n!==""){let _=$r(Wa(n,Fa)),h=$r(Wa(n,ja));if(Pr(_)&&Ur(h)){let g={sha256:Ba(_,h),catalog:_,aliases:h,source:"pinned",generatedAt:_.generated_at??null};return ku=g.generatedAt,g}return ky(t,e)}let r=t.fetchImpl??fetch,s=t.cacheDir??UC(),o=t.now??Date.now(),i=t.ttlMs??ks(),a=HC(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 Sy(r,DC,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"&&(Pr(_.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 Sy(r,MC,d,a.meta.aliases.etag);_.kind==="failed"&&(f=!0),_.kind==="match"?(m.aliases.last_checked=new Date(o).toISOString(),p=!0):_.kind==="payload"&&(Ur(_.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 _=Ay("sha256").update(Iu(c)).update(Iu(d)).digest("hex");wy(s,{...m,pair_sha256:_})&&_!==a.meta.pair_sha256&&(Ua(s,Fa,c),Ua(s,ja,d))}else c!==a.catalog&&c!==null&&Ua(s,Fa,c),d!==a.aliases&&d!==null&&Ua(s,ja,d),wy(s,m);if(c!==null||d!==null){let _={catalog:c,aliases:d,sha256:Ba(c,d),source:u?"network":"cache",refreshFailed:f,generatedAt:c?.generated_at??null};return ku=_.generatedAt,_}return{...ky(t,e),refreshFailed:f}}function ky(t,e){let n=vy(e,"price-data.json",t.bundledPath),r=vy(e,"price-aliases.json",t.bundledAliasesPath),s=Pr(n)?n:null,o=Ur(r)?r:null,i={catalog:s,aliases:o,sha256:Ba(s,o),source:s!==null||o!==null?"bundled":"unavailable",generatedAt:s?.generated_at??null};return ku=i.generatedAt,i}function Oy(t){if(t.cacheWrite!==void 0)return bs(t.cacheWrite);if(t.cacheWrite5m===void 0&&t.cacheWrite1h===void 0)return 0;let e=bs(t.cacheWrite5m),n=bs(t.cacheWrite1h);return e===null||n===null?null:bs(e+n)}function Au(t,e){let n=bs(t.cacheWrite5m===void 0?0:t.cacheWrite5m),r=bs(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 Ho(t,e){let n=Ss(e.input_per_1m_tokens),r=Ss(e.output_per_1m_tokens),s=Ss(e.input_cache_read_per_1m_tokens),o=Ss(e.source_cost_fields?.cache_creation_input_token_cost),i=Ss(e.input_cache_write_per_1m_tokens)??(o===null?n:o*1e6),a=Ss(e.source_cost_fields?.cache_creation_input_token_cost_above_1hr),l=a===null?i:a*1e6,c=Oy(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 Bo(t,e){if(e===null)return null;let n=Ho(t,e),r=Oy(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 DC,MC,$C,PC,Ey,Fa,ja,xy,FC,Wo,jC,Ty,ku,by,Ss,bs,Sn=x(()=>{"use strict";DC="https://lmctl.com/dataset/model_list.json",MC="https://lmctl.com/dataset/aliases.json",$C=1e3,PC=1e4,Ey=6*60*60*1e3;Fa="model_list.json",ja="aliases.json",xy="meta.json",FC="model_list.meta.json";Wo=new WeakMap;jC=new Set(["established","asserted","unresolved"]);Ty={etag:null,last_checked:null};ku=null,by=null;Ss=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null,bs=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null});function jr(t){return t.toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function Fr(t){let e=t.source_model_id.toLowerCase(),n=e.slice(e.lastIndexOf("/")+1);return jr(n)}function My(t){let e=new Set,n=r=>{let s=r.toLowerCase().split("/");for(let o=0;o<s.length;o+=1)e.add(jr(s.slice(o).join("/")))};return n(t.source_model_id),t.gateway_id&&n(t.gateway_id),e}function GC(t,e){let n=new Set,r=l=>{n.add(jr(l))},s=t.trim().toLowerCase(),o=null,i=s.indexOf(":");i>0&&!s.slice(0,i).includes("/")&&(o=s.slice(0,i),r(s),s=s.slice(i+1)),r(s);let a=s.slice(s.lastIndexOf("/")+1);r(a);for(let l of e)r(`${l}/${a}`);return o!==null&&r(`${o}/${a}`),[...n]}function Wr(t){let e=r=>!(r.mode!==void 0&&r.mode!==null&&r.mode!=="chat"||t.nonChatName&&t.nonChatName.test(r.source_model_id.toLowerCase())),n=r=>e(r)&&t.family.test(r.source_model_id.toLowerCase());return{firstPartyProviders:t.firstPartyProviders,isChatModel:e,coversRecord:n,normalize:r=>GC(r,t.vendorPrefixes),matchRow(r,s){if(!n(r))return!1;let o=My(r);return s.some(i=>o.has(i))}}}function JC(t){let e=t.trim(),n=VC.exec(e);return n?{model:e.slice(0,n.index).trim(),effort:n[1].trim()}:{model:e,effort:null}}function QC(t,e,n){let r=e.trim().toLowerCase(),s=jr(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 ZC(t,e,n){let r=[];for(let[s,o]of Object.entries(zt))s!==n&&QC(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 eO(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 tO(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}${jr(a)}`,c=e.get(l);if(c===void 0){e.set(l,r);continue}if(!eO(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 By(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 Xy(t,e){return t.map(By).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 nO(t,e,n){let r=tO(t),s=Xy(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 Nu(t,e,n,r){if(t.length===0)return{kind:"known-unpriced",id:e};let s=nO(t,e,n);if(r!==void 0){let i=t.map(By),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 rO(t,e){return t.standards.find(n=>n.standard_slug.toLowerCase()===e.toLowerCase())??null}function sO(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=Fr(l),d=n.records.filter(u=>Fr(u)!==c?!1:u.mode===void 0||u.mode===null||u.mode==="chat");return d.length===0?{kind:"known-unpriced",id:r}:Nu(d,c,Ru)}function qy(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=rO(r,h.standard_slug);return{state:sO(h,g,n),viaAlias:!0,pinRoute:g?.catalog_record_id??null}}}let s=zt[t];if(!s)return{state:{kind:"no-catalog"},viaAlias:!1,pinRoute:null};let o=e.trim().toLowerCase(),i=s.normalize(e),a=_=>({state:_,viaAlias:!1,pinRoute:null}),l=jr(o),c=n.records.filter(_=>_.source_model_id.toLowerCase()===o&&s.matchRow(_,[l]));if(c.length>0){let _=Fr(c[0]),h=n.records.filter(g=>s.matchRow(g,[_])&&Fr(g)===_);return a(Nu(h.length>0?h:c,_,Dy[t]??Ru,t==="codex"?"openai":void 0))}let d=n.records.filter(_=>s.matchRow(_,i));if(d.length===0){let _=ZC(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=Fr(_),g=u.get(h);g?g.push(_):u.set(h,[_])}let f=Dy[t]??Ru,m=null,p=null;for(let _ of u.values()){let h=Xy(_,f);(p===null||oO(h[0],p[0],f)<0)&&(m=_,p=h)}return a(Nu(m,Fr(m[0]),f,t==="codex"?"openai":void 0))}function Ga(t,e,n,r){return qy(t,e,n,r).state}function jt(t,e,n,r){let{state:s,viaAlias:o,pinRoute:i}=qy(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 Gy(t,e){let n=zt[e];if(!n)return null;let r=new Set;for(let s of t.records)n.coversRecord(s)&&r.add(Fr(s));return r.size}function oO(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 $y,Py,Uy,Fy,jy,Wy,VC,KC,YC,zC,Hy,zt,Dy,Ru,Hr=x(()=>{"use strict";$y=Wr({vendorPrefixes:["anthropic"],family:/claude/,firstPartyProviders:["anthropic"]}),Py=Wr({vendorPrefixes:["openai"],family:/(^|\/)(gpt-|o\d|chatgpt|ft:gpt)|openai\//,firstPartyProviders:["openai"],nonChatName:/(^|[-/])(tts|transcribe(?:-\w+)?|realtime(?:-\w+)?|search(?:-\w+)*|image(?:-\w+)?|audio(?:-\w+)?|whisper(?:-\w+)?|dall-e(?:-\w+)?|embedding|moderation)(-|$)/}),Uy=Wr({vendorPrefixes:["google","gemini"],family:/gemini|gemma/,firstPartyProviders:["gemini","google","vertex_ai-language-models"],nonChatName:/embedding|imagen|-image|tts|audio|veo|lyria|live|realtime|video/}),Fy=Wr({vendorPrefixes:["moonshot","moonshotai"],family:/kimi|moonshot/,firstPartyProviders:["moonshot"]}),jy=Wr({vendorPrefixes:["dashscope","qwen"],family:/qwen/,firstPartyProviders:["dashscope"]}),Wy=Wr({vendorPrefixes:["deepseek","nousresearch"],family:/deepseek|nous|hermes-\d/,firstPartyProviders:["deepseek","nousresearch"]}),VC=/\s*\(([^()]+)\)\s*$/;KC={"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"},YC=["gemini","google","vertex_ai-language-models","anthropic"],zC={normalize(t){let{model:e}=JC(t),n=KC[e.toLowerCase()];return n===void 0?[]:[jr(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=My(t);return e.some(r=>n.has(r))}},Hy=Wr({vendorPrefixes:["deepseek"],family:/deepseek/,firstPartyProviders:["deepseek"]}),zt={claude:$y,codex:Py,gemini:Uy,agy:zC,kimi:Fy,qwen:jy,hermes:Wy,deepseek:Hy},Dy={claude:$y.firstPartyProviders,codex:Py.firstPartyProviders,gemini:Uy.firstPartyProviders,agy:YC,kimi:Fy.firstPartyProviders,qwen:jy.firstPartyProviders,hermes:Wy.firstPartyProviders,deepseek:Hy.firstPartyProviders};Ru=[]});import{randomUUID as iO}from"node:crypto";function Va(t){return{startedAt:new Date().toISOString(),attempt_key:iO(),provider:t.provider,model_requested:t.modelRequested,cwd:t.cwd,native_session_id:t.sessionId||null}}function As(t,e){return e?"cancelled":/\bstall(?:ed|ing)?\b/i.test(t)?"stalled":"error"}async function Xo(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 _y(t,e.sessionId||String(t.native_session_id??""),String(s.ended_at),r):void 0;if(e.status!=="cancelled"&&(o?.outcome==="cancelled"||o?.outcome==="error")&&(s.turn_outcome=o.outcome),!o||o.source===null)return s.usage_source=null,s.usage_reason=t.provider==="ClaudeMock"?"mock_estimate":s.turn_outcome!=="ok"?"turn_not_completed":["copilot","hermes"].includes(t.provider)?"session_totals_only":"native_record_missing",s.cost_reason="usage_unavailable",s;if(Object.assign(s,{usage_source:o.source,usage_reason:o.reason,tok_input_uncached:bn(o.inputUncached),tok_cache_read:bn(o.cacheRead),tok_cache_write:bn(o.cacheWrite),tok_output:bn(o.output),tok_reasoning:bn(o.reasoning),model_reported:o.modelReported,provider_cost_usd:aO(o.providerCostUsd)}),o.invalidCounters||Yt([o.inputUncached,o.cacheRead,o.cacheWrite,o.output,o.reasoning]))return s.usage_reason="counter_not_exposed",s.cost_reason="usage_unavailable",s;if(o.mixedModels)return s.cost_reason="mixed_models",s.model_reported=null,s;let i=o.modelReported||t.model_requested;if(!i)return s.cost_reason="model_unknown",s;let a,l=await Promise.race([n(),new Promise(p=>{a=setTimeout(()=>p(null),1e3)})]).finally(()=>{a&&clearTimeout(a)});if(!l||!l.catalog)return s.cost_reason="price_data_unavailable",s;let c=jt(t.provider,i,l.catalog,l.aliases);if(!c.offer)return s.cost_reason=c.state.kind==="unresolved"?"model_unresolved":c.state.kind==="unknown"||c.state.kind==="wrong-provider"?"model_unknown":"model_unpriced",s;let d=l.catalog.records.find(p=>(p.record_id??p.source+":"+p.source_model_id)===c.offer.route),u=c.offer.pricing,f={input:bn(o.inputUncached)??0,output:bn(o.output)??0,cachedInput:bn(o.cacheRead)??0,cacheWrite:bn(o.cacheWrite)??0,...o.cacheWrite5m==null?{}:{cacheWrite5m:o.cacheWrite5m},...o.cacheWrite1h==null?{}:{cacheWrite1h:o.cacheWrite1h}},m=Ho(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=Bo(f,u)===null?"rate_missing":null,s}catch{return{...s,usage_reason:"recorder_failed",cost_reason:"usage_unavailable"}}}function Br(t,e,n){try{let r=Object.entries(n).filter(([s])=>Object.hasOwn(Pa,s));if(!r.length)return;t.prepare(`UPDATE team_chat_log SET ${r.map(([s])=>`${s}=?`).join(",")} WHERE id=? AND ended_at IS NULL`).run(...r.map(([,s])=>s??null),e)}catch(r){for(let o of["usage_source","model_reported","tok_input_uncached","tok_cache_read","tok_cache_write","tok_output","tok_reasoning","price_record_id","price_snapshot_sha256","rate_input_1m","rate_output_1m","rate_cache_read_1m","rate_cache_write_1m","provider_cost_usd"])n[o]=null;n.usage_reason="recorder_failed",n.cost_reason="usage_unavailable";let s=r?.code??"";if(/^SQLITE_(?:BUSY|LOCKED)(?:_|$)/.test(s))return;try{t.prepare("UPDATE team_chat_log SET attempt_key=COALESCE(attempt_key,?),provider=COALESCE(provider,?),native_session_id=COALESCE(native_session_id,?),cwd=COALESCE(cwd,?),model_requested=COALESCE(model_requested,?),ended_at=COALESCE(ended_at,?),turn_outcome=COALESCE(turn_outcome,?),usage_reason='recorder_failed',cost_reason='usage_unavailable' WHERE id=? AND ended_at IS NULL").run(n.attempt_key??null,n.provider??null,n.native_session_id??null,n.cwd??null,n.model_requested??null,n.ended_at??null,n.turn_outcome??null,e)}catch{}}}var bn,aO,qo=x(()=>{"use strict";gy();jo();Su();Sn();Hr();bn=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,aO=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:null});var Vy,Jy=x(()=>{"use strict";Vy=`
44
44
  CREATE TABLE IF NOT EXISTS price_snapshot (
45
45
  sha256 TEXT PRIMARY KEY,
46
46
  generated_at TEXT,
@@ -1281,7 +1281,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1281
1281
  status, started_at, last_heartbeat_at, last_seq)
1282
1282
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'running', ?, ?, ?)`).run(n,e.kind,e.origin,e.launch_source??e.kind,e.from_identity,e.target_teamfile,e.target_alias,e.root_teamfile,e.cwd,e.command,e.team_chat_log_id===null?null:`msg_tcl_${e.team_chat_log_id}`,e.request_payload,e.holder_pid,e.holder_host,e.started_at,e.last_heartbeat_at,o),Fu(e)&&TE(t,o,{invocationId:n,targetTeamfile:e.target_teamfile,targetAlias:e.target_alias??"",holderPid:e.holder_pid,holderHost:e.holder_host,heartbeatAt:s})})}function nl(t,e){let n=Gr(e.id),r=SE(t,n);return r===null?!1:(ft(t,{stream_id:n,event_type:VO,observedLastSeq:r.last_seq,ts:e.ended_at??e.started_at,payload:{invocation_id:n,status:e.status,ended_at:e.ended_at,exit_code:e.exit_code,signal:e.signal,result_summary:e.result_summary,error:e.error,legacy:{table:"tracked_invocation",id:e.id}}},s=>{if(t.prepare(`UPDATE invocation_state
1283
1283
  SET status = ?, ended_at = ?, result_summary = ?, error = ?, last_seq = ?
1284
- WHERE invocation_id = ? AND last_seq = ?`).run(e.status,e.ended_at,e.result_summary,e.error,s,n,r.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_FINISH for ${n}`);Fu(e)&&vE(t,s,n)}),!0)}function IE(t,e,n,r){let s=Gr(e.id),o=SE(t,s);return o===null?!1:(ft(t,{stream_id:s,event_type:JO,observedLastSeq:o.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},i=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,i,s,o.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function kE(t,e,n){let r=Gr(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Fu(e)&&wE(t,r,n)}function AE(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,Gr(e))}function NE(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,Gr(e))}var GO,VO,JO,RE=x(()=>{"use strict";Ja();tl();GO="INVOCATION_START",VO="INVOCATION_FINISH",JO="INVOCATION_NOTIFY_CLAIM"});var KO,YO,vK,LE,xE,CE,OE=x(()=>{"use strict";KO="other",YO=["not_enough_information","dont_know","other_work"],vK=new Set([KO,...YO]),LE="@abort",xE="invalid_decision",CE="workflow_escalation"});import{randomUUID as DE}from"node:crypto";import{existsSync as UE,mkdirSync as zO,renameSync as QO,rmdirSync as ZO}from"node:fs";import{hostname as Wu}from"node:os";function Hu(t){return t.provider_resolved??t.provider}function X(){return new Date().toISOString()}function eD(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!UE(t))return e;let n;try{n=new ms(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 tD(t){if(t===":memory:"||!UE(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{QO(r,`${e}${n}`)}catch{}}return e}function ME(t,e){let n=e instanceof Error?e.message:String(e);try{let r=eD(t),s=tD(t),o=new rl(Vo({dbPath:t}));for(let i of r.rootTeams)o.upsertRootTeam(i);for(let{key:i,value:a}of r.config)o.setConfig(i,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${In} (${n}); started a fresh database instead. Preserved ${r.rootTeams.length} team registration(s) and ${r.config.length} config value(s).`+(s!==null?` Old database backed up at ${s}.
1284
+ WHERE invocation_id = ? AND last_seq = ?`).run(e.status,e.ended_at,e.result_summary,e.error,s,n,r.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_FINISH for ${n}`);Fu(e)&&vE(t,s,n)}),!0)}function IE(t,e,n,r){let s=Gr(e.id),o=SE(t,s);return o===null?!1:(ft(t,{stream_id:s,event_type:JO,observedLastSeq:o.last_seq,ts:r,payload:{invocation_id:s,notified_by:n,notified_at:r,legacy:{table:"tracked_invocation",id:e.id}}},i=>{if(t.prepare("UPDATE invocation_state SET notified_by = ?, notified_at = ?, last_seq = ? WHERE invocation_id = ? AND last_seq = ?").run(n,r,i,s,o.last_seq).changes!==1)throw new Error(`invocation_state CAS failed during INVOCATION_NOTIFY_CLAIM for ${s}`)}),!0)}function kE(t,e,n){let r=Gr(e.id);t.prepare("UPDATE invocation_state SET last_heartbeat_at = ? WHERE invocation_id = ?").run(n,r),Fu(e)&&wE(t,r,n)}function AE(t,e,n){t.prepare("UPDATE invocation_state SET request_payload = ? WHERE invocation_id = ?").run(n,Gr(e))}function NE(t,e,n){t.prepare("UPDATE invocation_state SET request_message_id = ? WHERE invocation_id = ?").run(n,Gr(e))}var GO,VO,JO,RE=x(()=>{"use strict";Ja();tl();GO="INVOCATION_START",VO="INVOCATION_FINISH",JO="INVOCATION_NOTIFY_CLAIM"});var KO,YO,SK,LE,xE,CE,OE=x(()=>{"use strict";KO="other",YO=["not_enough_information","dont_know","other_work"],SK=new Set([KO,...YO]),LE="@abort",xE="invalid_decision",CE="workflow_escalation"});import{randomUUID as DE}from"node:crypto";import{existsSync as UE,mkdirSync as zO,renameSync as QO,rmdirSync as ZO}from"node:fs";import{hostname as Wu}from"node:os";function Hu(t){return t.provider_resolved??t.provider}function X(){return new Date().toISOString()}function eD(t){let e={rootTeams:[],config:[]};if(t===":memory:"||!UE(t))return e;let n;try{n=new ms(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 tD(t){if(t===":memory:"||!UE(t))return null;let e=`${t}.bak-${Date.now()}-${process.pid}`;for(let n of["","-wal","-shm"]){let r=`${t}${n}`;try{QO(r,`${e}${n}`)}catch{}}return e}function ME(t,e){let n=e instanceof Error?e.message:String(e);try{let r=eD(t),s=tD(t),o=new rl(Vo({dbPath:t}));for(let i of r.rootTeams)o.upsertRootTeam(i);for(let{key:i,value:a}of r.config)o.setConfig(i,a);return process.stderr.write(`lmctl: couldn't migrate ${t} to schema v${In} (${n}); started a fresh database instead. Preserved ${r.rootTeams.length} team registration(s) and ${r.config.length} config value(s).`+(s!==null?` Old database backed up at ${s}.
1285
1285
  `:`
1286
1286
  `)),o}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`${t}: unusable (${n}), and recovery into a fresh database also failed (${s}). Check that the containing directory is writable, or move the file aside manually and retry.`)}}function ju(t,e){let n;try{return n=Vo({dbPath:t,allowSchemaSkew:e}),{dal:new rl(n)}}catch(r){if(r instanceof Wt)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 oD(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function iD(t){if(t===":memory:")return!0;try{return zO(`${t}${FE}`),!0}catch{return!1}}function aD(t){if(t!==":memory:")try{ZO(`${t}${FE}`)}catch{}}function $e(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<nD;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>In){let s=n.cause instanceof Error?n.cause.message:String(n.cause);throw new Wt(t.path,n.dbVersion,In,s)}for(let s=0;s<rD;s+=1){if(iD(t.path))try{return ME(t.path,n.cause)}finally{aD(t.path)}oD(sD);let o=ju(t.path,e);if(o.dal!==void 0)return o.dal}return ME(t.path,n.cause)}function $E(t,e,n){let r=PE(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 PE(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 PE(t){let e=lD(t),n=e===null?null:cD(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 lD(t){try{let e=JSON.parse(t);return sl(e)?e:null}catch{return null}}function cD(t,e){let n=t[e];return sl(n)?n:null}function sl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function dD(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 uD(t,e){return t===null?!0:t.holder_host===Wu()?!et(t.holder_pid):t.last_heartbeat<e}function fD(t){return{getRuntimeState:t.prepare("SELECT * FROM runtime_state WHERE scope = ? AND key = ? AND kind = ?"),upsertRuntimeState:t.prepare(`
1287
1287
  INSERT INTO runtime_state (scope, key, kind, data, updated_at)
@@ -1697,7 +1697,7 @@ CREATE INDEX IF NOT EXISTS idx_prompt_task_reassignments_prompt ON prompt_task_r
1697
1697
  AND ended_at >= ?
1698
1698
  ORDER BY started_at ASC, id ASC
1699
1699
  `).all(...e,n)}finishTrackedInvocation(e,n){return this.db.transaction(()=>{let r=n.ended_at??X();if(this.stmts.finishTrackedInvocation.run(n.status,r,n.exit_code??null,n.signal??null,Rt(n.result_summary),Rt(n.error),n.team_chat_log_id??null,Rt(n.meta),Rt(n.config_warnings),r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return nl(this.db,o),o.status==="cancelled"&&o.signal!==null&&o.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(o.team_chat_log_id,o.error??`holder received ${o.signal}`),o})()}reclaimTrackedInvocationIfUnchanged(e,n,r){return this.db.transaction(()=>{let s=r.ended_at??X();if(this.stmts.reclaimTrackedInvocationIfUnchanged.run(r.status,s,r.exit_code??null,r.signal??null,Rt(r.result_summary),Rt(r.error),r.team_chat_log_id??null,Rt(r.meta),Rt(r.config_warnings),s,e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let i=this.getTrackedInvocation(e);return nl(this.db,i),i})()}heartbeatTrackedInvocation(e,n=X()){return this.db.transaction(()=>{if(this.stmts.heartbeatTrackedInvocation.run(n,e).changes!==1)return null;let s=this.getTrackedInvocation(e);return kE(this.db,s,n),s})()}updateTrackedInvocationRequestPayload(e,n){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(n,e).changes!==1?null:(AE(this.db,e,n),this.getTrackedInvocation(e)))()}linkTrackedInvocationMessage(e,n){return this.db.transaction(()=>this.stmts.linkTrackedInvocationChatLog.run(n,e).changes!==1?null:(NE(this.db,e,kn(n)),this.getTrackedInvocation(e)))()}abortTrackedInvocationAndTerminalizeMessage(e,n,r){return this.db.transaction(()=>{let s=X();if(this.stmts.abortTrackedInvocationIfUnchanged.run(s,Rt(r),e,n.holder_pid,n.holder_host,n.started_at,n.last_heartbeat_at).changes!==1)return null;let i=this.getTrackedInvocation(e);return nl(this.db,i),i.team_chat_log_id!==null&&this.terminalizeLinkedChatMessage(i.team_chat_log_id,r),i})()}terminalizeLinkedChatMessage(e,n){let r=this.stmts.getTeamChatLogById.get(e);r===void 0||r.status!=="running"||this.stmts.terminalizeTeamChatLogIfRunning.run("error",n,e).changes!==1||el(this.db,e,{root_teamfile:r.root_teamfile,sender_teamfile:r.sender_teamfile,sender_alias:r.sender_alias,receiver_teamfile:r.receiver_teamfile,receiver_alias:r.receiver_alias,message:r.message,response:null,origin:r.origin,status:"error",error_detail:n,truncated:r.truncated,created_at:X()})}listClaimableTerminalTrackedInvocations(e){let n=["status IN ('done', 'error', 'busy', 'cancelled', 'aborted')","ended_at IS NOT NULL","notified_by IS NULL"],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.scope_teamfile!==void 0&&(n.push("scope_teamfile = ?"),r.push(e.scope_teamfile));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));return r.push(s),this.db.prepare(`SELECT * FROM tracked_invocation WHERE ${n.join(" AND ")} ORDER BY ended_at ASC, id ASC LIMIT ?`).all(...r)}claimTrackedInvocationNotification(e,n,r=X()){return this.db.transaction(()=>{if(this.stmts.claimTrackedInvocationNotification.run(n,r,e).changes!==1)return null;let o=this.getTrackedInvocation(e);return IE(this.db,o,n,r),o})()}listTrackedInvocations(e={}){let n=[],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.scope_teamfile!==void 0&&(n.push("scope_teamfile = ?"),r.push(e.scope_teamfile)),e.status!==void 0&&(n.push("status = ?"),r.push(e.status)),e.kind!==void 0&&(n.push("kind = ?"),r.push(e.kind)),e.origin!==void 0&&(n.push("origin = ?"),r.push(e.origin));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));r.push(s);let o=n.length===0?"":` WHERE ${n.join(" AND ")}`;return this.db.prepare(`SELECT * FROM tracked_invocation${o} ORDER BY started_at DESC, id DESC LIMIT ?`).all(...r)}maxTrackedInvocationId(e={}){let n=[],r=[];e.from!==void 0&&(n.push("from_identity = ?"),r.push(e.from)),e.scope_teamfile!==void 0&&(n.push("scope_teamfile = ?"),r.push(e.scope_teamfile));let s=n.length===0?"":` WHERE ${n.join(" AND ")}`,o=this.db.prepare(`SELECT COALESCE(MAX(id), 0) AS max_id FROM tracked_invocation${s}`).get(...r);return Number(o?.max_id??0)}listRunningTrackedInvocations(e={}){return this.listTrackedInvocations({...e,status:"running"})}updateTeamChatLogResponse(e,n){this.stmts.updateTeamChatLogResponse.run(n.response,n.status,n.error_detail,n.truncated,e)}getAgentInflight(e,n){return this.stmts.getAgentInflight.get(e,n)??null}listAgentInflight(){return this.stmts.listAgentInflight.all()}tryAcquireAgentInflight(e,n){return this.tryAcquireAgentInflightTxn(e,n)}tryAcquireNativeHolder(e,n){return this.tryAcquireAgentInflightTxn(e,{nativeHolder:n})}findNativeHolder(e,n){return this.stmts.getNativeHolder.get(e,n)??null}updateNativeHolderPhase(e,n,r,s){return this.stmts.updateNativeHolderPhase.run(s,e,n,r,r).changes===1}publishNativeHolder(e,n,r,s,o="ready"){return this.stmts.publishNativeHolder.run(s,o,e,n,r,r).changes===1}clearNativeHolder(e,n,r){return this.stmts.clearNativeHolderFenced.run(e,n,r,r).changes===1}heartbeatAgentInflight(e,n,r=X()){return this.db.transaction(()=>{let s=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);return s===null||s.sender_teamfile!==e.sender_teamfile||s.sender_alias!==e.sender_alias||s.started_at!==e.started_at?!1:yE(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&&zo(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&&zo(this.db,o,"INFLIGHT_RELEASE"),i.changes===1})()}releaseAgentInflight(e,n){this.db.exec("BEGIN IMMEDIATE");try{let r=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);if(r===null||r.sender_teamfile!==e.sender_teamfile||r.sender_alias!==e.sender_alias)return this.db.exec("COMMIT"),!1;if(n!==void 0&&this.db.prepare(`SELECT lease_id FROM agent_state
1700
- WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e.receiver_teamfile,e.receiver_alias)?.lease_id!==n)return this.db.exec("COMMIT"),!1;if(r.active_count<=1){let o=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return o.changes===1&&zo(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&&(zo(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Jo,Yo(e,n),Ko);return r===void 0?null:uE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&Uu(this.db,r,!0),this.stmts.upsertRuntimeState.run(Jo,Yo(e.teamfile,e.alias),Ko,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&EE(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(Jo,Yo(e,n),Ko,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(Jo,Yo(e,n),Ko);return o.changes===1&&Uu(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:dD(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,o=X()){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i!==null&&!uD(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:DE(),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,X(),e),this.stmts.getRun.get(e)??null}pauseJob(e){return this.stmts.pauseJob.run(e),this.getJob(e)}resumeRun(e,n){return this.resumeRunTxn(e,n,X())}insertStep(e){let n=this.stmts.insertStep.run(e.run_id,e.parent_step_id??null,e.state_name,e.outcome??null,e.status_detail??null,X());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,X(),e),this.stmts.getStep.get(e)??null}listStepsForRun(e){return this.stmts.listStepsForRun.all(e)}listLatestStepOutcomesByState(e){let n=this.stmts.listLatestStepOutcomesByState.all(e),r={};for(let s of n)r[s.state_name]=s.outcome;return r}insertSubmittedPr(e){let n=this.stmts.insertSubmittedPr.run(e.repo,e.pr_url,e.issue_url??null,e.local_path??null,e.branch??null,e.head_sha??null,e.status??"watching",e.submitted_at??X(),e.last_known_state??null,e.created_by_run_id??null);return this.stmts.getSubmittedPr.get(n.lastInsertRowid)}listSubmittedPrs(e){return e?.status!==void 0?this.stmts.listSubmittedPrsByStatus.all(e.status):this.stmts.listSubmittedPrs.all()}getSubmittedPr(e){return this.stmts.getSubmittedPr.get(e)??null}findSubmittedPrByUrl(e){return this.stmts.findSubmittedPrByUrl.get(e)??null}insertStepArtifact(e){let n=this.stmts.insertStepArtifact.run(e.step_id,e.kind,e.path??null,e.content??null,e.sha??null,e.provider_call_mode??null,X());return this.stmts.getStepArtifact.get(n.lastInsertRowid)}insertExternalObject(e){let r=this.stmts.insertExternalObject.run(e.type,e.provider,e.project_id,e.run_id??null,e.external_id,e.url??null,e.status??null,e.metadata??null,e.last_seen_at??null,X()).changes===1;return{row:this.stmts.findExternalObjectByUnique.get(e.provider,e.type,e.external_id),inserted:r}}insertExternalSignal(e){let n=this.stmts.insertExternalSignal.run(e.object_id,e.kind,e.source??null,e.occurred_at??null,e.payload??null,e.signal_hash??null,null,X()),r=n.changes===1;return{row:e.signal_hash===void 0||e.signal_hash===null?this.stmts.getExternalSignal.get(n.lastInsertRowid):this.stmts.findExternalSignalByUnique.get(e.object_id,e.kind,e.signal_hash),inserted:r}}raiseAttention(e){let n=this.stmts.insertAttention.run(e.kind,e.severity??"warn",e.project_id??null,e.run_id??null,e.external_object_id??null,e.requires_user===!0?1:0,e.payload??null,X());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(X(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=X();return this.stmts.upsertDurableMemory.run(e.project_id,e.type,e.name,e.description??null,e.body,n,n),this.stmts.getDurableMemoryByName.get(e.project_id,e.name)}getDurableMemoryByName(e,n){return this.stmts.getDurableMemoryByName.get(e,n)??null}deleteDurableMemory(e,n){return this.stmts.deleteDurableMemory.run(e,n).changes>0}listDurableMemory(e,n){return n!==void 0?this.stmts.listDurableMemoryByType.all(e,n):this.stmts.listDurableMemory.all(e)}indexDurableMemory(e,n){return n!==void 0&&n.length>0?this.stmts.listDurableMemory.all(e).filter(s=>n.includes(s.type)).map(({name:s,description:o,type:i,updated_at:a})=>({name:s,description:o,type:i,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:r,description:s,type:o,updated_at:i})=>({name:r,description:s,type:o,updated_at:i}))}recordSessionSize(e){let n=this.stmts.insertSessionSize.run(e.team_name,e.alias,e.sessionid,e.input_tokens??null,e.cache_tokens??null,e.output_tokens??null,e.total_tokens??null,e.observed_at??X());return this.stmts.getSessionSize.get(n.lastInsertRowid)}latestSessionSizes(){return this.stmts.latestSessionSizes.all()}sessionSizeHistory(e,n,r=20){return this.stmts.sessionSizeHistory.all(e,n,r)}insertSessionEvent(e){let n=this.stmts.insertSessionEvent.run(e.run_id,e.step_id??null,e.kind,e.timestamp_ms,e.payload,e.payload_truncated??0,e.overflow_artifact_id??null);return this.stmts.getSessionEvent.get(n.lastInsertRowid)}listSessionEvents(e,n){return n!==void 0?this.stmts.listSessionEventsSince.all(e,n):this.stmts.listSessionEvents.all(e)}listSessionEventsSince(e,n=1e3){return this.stmts.listAllEventsSince.all(e,n)}latestAgentCall(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call' ORDER BY id DESC LIMIT 1").get(e);if(n===void 0)return null;try{let r=JSON.parse(n.payload);return typeof r.alias!="string"||typeof r.provider!="string"?null:{alias:r.alias,provider:r.provider,...typeof r.model=="string"?{model:r.model}:{}}}catch{return null}}agentCallTokenTotals(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call'").all(e),r=0,s=0,o=0;for(let i of n)try{let a=JSON.parse(i.payload);typeof a.tokens_in=="number"&&(r+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),o+=1}catch{}return{totalInputTokens:r,totalOutputTokens:s,agentCallCount:o}}addRollupValue(e){this.stmts.upsertRollupStat.run(e.run_id,e.step_id??null,e.metric_kind,e.value,e.bucket_start_ms,e.bucket_end_ms,e.updated_at)}listRollupStats(e){return this.stmts.listRollupStats.all(e)}getRollupCursor(){return this.stmts.getRollupCursor.get("last_event_id")?.value??0}setRollupCursor(e){this.stmts.setRollupCursor.run("last_event_id",e)}insertDriftSignal(e){let n=this.stmts.insertDriftSignal.run(e.team_member_id,e.project_id??null,e.signal_kind,e.severity,e.description,e.detected_at,e.expires_at??null,e.payload??null);return this.stmts.getDriftSignal.get(n.lastInsertRowid)}listDriftSignals(e={}){return e.team_member_id!==void 0&&e.unacked?this.stmts.listUnackedDriftByMember.all(e.team_member_id):e.team_member_id!==void 0?this.stmts.listDriftByMember.all(e.team_member_id):e.project_id!==void 0?this.stmts.listDriftByProject.all(e.project_id):this.stmts.listAllDrift.all()}hasUnackedDriftSignal(e,n,r){return this.stmts.findUnackedDrift.get(e,n??null,r)!==void 0}acknowledgeDriftSignal(e){return this.stmts.ackDriftSignal.run(Date.now(),e),this.stmts.getDriftSignal.get(e)??null}insertInteractiveSession(e){let n=Date.now();return this.stmts.insertInteractiveSession.run(e.run_id,e.step_id,e.state_name,e.status,n,n),this.stmts.getInteractiveSessionByStepId.get(e.step_id)}getInteractiveSessionByStepId(e){return this.stmts.getInteractiveSessionByStepId.get(e)??null}getInteractiveSessionByRunAndState(e,n){return this.stmts.getInteractiveSessionByRunAndState.get(e,n)??null}setInteractiveAgentOutput(e,n,r){this.stmts.setInteractiveAgentOutput.run(n,r,Date.now(),e)}resumeInteractive(e,n,r){return this.resumeInteractiveTxn(e,n,r,X())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,X())}}});var xt=r0(tt=>{"use strict";function Cs(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 WE(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError('align must be an array of "left", "right", or "decimal" per column');return t.map(e=>{if(e!=="left"&&e!=="right"&&e!=="decimal")throw new TypeError('align entries must be "left", "right", or "decimal"');return e})}function An(t){let e=0;for(let n of t){let r=n.codePointAt(0);if(!(r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r>=917760&&r<=917999)){if(r>=4352&&r<=4447||r>=11904&&r<=12350||r>=12353&&r<=13311||r>=13312&&r<=19903||r>=19968&&r<=40959||r>=40960&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510||r>=9728&&r<=10175||r>=126976&&r<=129791||r>=131072&&r<=262141){e+=2;continue}e+=1}}return e}function Bu(t,e,n){let r=" ".repeat(Math.max(0,e-An(t)));return n?r+t:t+r}function HE(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 pD(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 hD(t,e,n="\u2026"){if(An(t)<=e)return t;let r=An(n)>e?"\u2026":n,s=An(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=An(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function _D(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 BE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function gD(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 XE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=HE(n);r.headers!==void 0&&Cs(r.headers);for(let s of r.rows.map(Cs))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,BE(o)?.places??0)})}return e}tt.measureDecimalPlaces=XE;function qE(t,e,n){let r=gD(n)??[],s=e.includes("decimal")?XE(t):[];return Array.from({length:Math.max(r.length,s.length)},(o,i)=>Math.max(r[i]??0,s[i]??0))}function GE(t,e){let n=BE(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 VE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=_D(e),o=WE(n),i=qE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=HE(c);d.headers!==void 0&&Cs(d.headers).forEach((u,f)=>{l(f,An(u))});for(let u of d.rows.map(Cs))u.forEach((f,m)=>{let p=o[m]==="decimal"?GE(f,i[m]??0)??f:f;l(m,An(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}tt.measureColumns=VE;function yD(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 JE(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=yD(i),u=WE(r),f=pD(l),m=qE([t],u,c),p=e??VE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),g=t.map(Cs);n!==void 0&&g.unshift(Cs(n));let h=g.map((_,E)=>{let y=_.length-1;for(;y>=0&&_[y]==="";)y--;return _.slice(0,y+1).map((T,w)=>{let S=p[w]||0,b=s&&S>0&&(w!==y||o)?hD(T,S,f):T;if(u[w]==="decimal"){let I=n!==void 0&&E===0?null:GE(T,m[w]??0),L=Bu(I!==null&&An(I)<=S?I:b,S,!0);return w===y&&I!==null?L.trimEnd():L}return u[w]==="right"?Bu(b,S,!0):w===y?b:Bu(b,S,!1)}).join(" ")}).join(`
1700
+ WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e.receiver_teamfile,e.receiver_alias)?.lease_id!==n)return this.db.exec("COMMIT"),!1;if(r.active_count<=1){let o=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return o.changes===1&&zo(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&&(zo(this.db,o,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,n){let r=this.stmts.getRuntimeState.get(Jo,Yo(e,n),Ko);return r===void 0?null:uE(r.data)}setTerminalLock(e){this.db.transaction(()=>{let r=this.getTerminalLock(e.teamfile,e.alias);r!==null&&r.lock_id!==e.lock_id&&Uu(this.db,r,!0),this.stmts.upsertRuntimeState.run(Jo,Yo(e.teamfile,e.alias),Ko,JSON.stringify(e),e.last_heartbeat),r?.lock_id!==e.lock_id&&EE(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(Jo,Yo(e,n),Ko,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(Jo,Yo(e,n),Ko);return o.changes===1&&Uu(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:dD(s.data)}tryAcquireRuntimeProcessLock(e,n,r,s,o=X()){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,n,r);if(i!==null&&!uD(i,s))return this.db.exec("COMMIT"),{acquired:!1,current:i};let a={lock_id:DE(),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,X(),e),this.stmts.getRun.get(e)??null}pauseJob(e){return this.stmts.pauseJob.run(e),this.getJob(e)}resumeRun(e,n){return this.resumeRunTxn(e,n,X())}insertStep(e){let n=this.stmts.insertStep.run(e.run_id,e.parent_step_id??null,e.state_name,e.outcome??null,e.status_detail??null,X());return this.stmts.getStep.get(n.lastInsertRowid)}finishStep(e,n,r){return this.stmts.finishStep.run(n??null,r??null,X(),e),this.stmts.getStep.get(e)??null}listStepsForRun(e){return this.stmts.listStepsForRun.all(e)}listLatestStepOutcomesByState(e){let n=this.stmts.listLatestStepOutcomesByState.all(e),r={};for(let s of n)r[s.state_name]=s.outcome;return r}insertSubmittedPr(e){let n=this.stmts.insertSubmittedPr.run(e.repo,e.pr_url,e.issue_url??null,e.local_path??null,e.branch??null,e.head_sha??null,e.status??"watching",e.submitted_at??X(),e.last_known_state??null,e.created_by_run_id??null);return this.stmts.getSubmittedPr.get(n.lastInsertRowid)}listSubmittedPrs(e){return e?.status!==void 0?this.stmts.listSubmittedPrsByStatus.all(e.status):this.stmts.listSubmittedPrs.all()}getSubmittedPr(e){return this.stmts.getSubmittedPr.get(e)??null}findSubmittedPrByUrl(e){return this.stmts.findSubmittedPrByUrl.get(e)??null}insertStepArtifact(e){let n=this.stmts.insertStepArtifact.run(e.step_id,e.kind,e.path??null,e.content??null,e.sha??null,e.provider_call_mode??null,X());return this.stmts.getStepArtifact.get(n.lastInsertRowid)}insertExternalObject(e){let r=this.stmts.insertExternalObject.run(e.type,e.provider,e.project_id,e.run_id??null,e.external_id,e.url??null,e.status??null,e.metadata??null,e.last_seen_at??null,X()).changes===1;return{row:this.stmts.findExternalObjectByUnique.get(e.provider,e.type,e.external_id),inserted:r}}insertExternalSignal(e){let n=this.stmts.insertExternalSignal.run(e.object_id,e.kind,e.source??null,e.occurred_at??null,e.payload??null,e.signal_hash??null,null,X()),r=n.changes===1;return{row:e.signal_hash===void 0||e.signal_hash===null?this.stmts.getExternalSignal.get(n.lastInsertRowid):this.stmts.findExternalSignalByUnique.get(e.object_id,e.kind,e.signal_hash),inserted:r}}raiseAttention(e){let n=this.stmts.insertAttention.run(e.kind,e.severity??"warn",e.project_id??null,e.run_id??null,e.external_object_id??null,e.requires_user===!0?1:0,e.payload??null,X());return this.stmts.getAttention.get(n.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(X(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let n=X();return this.stmts.upsertDurableMemory.run(e.project_id,e.type,e.name,e.description??null,e.body,n,n),this.stmts.getDurableMemoryByName.get(e.project_id,e.name)}getDurableMemoryByName(e,n){return this.stmts.getDurableMemoryByName.get(e,n)??null}deleteDurableMemory(e,n){return this.stmts.deleteDurableMemory.run(e,n).changes>0}listDurableMemory(e,n){return n!==void 0?this.stmts.listDurableMemoryByType.all(e,n):this.stmts.listDurableMemory.all(e)}indexDurableMemory(e,n){return n!==void 0&&n.length>0?this.stmts.listDurableMemory.all(e).filter(s=>n.includes(s.type)).map(({name:s,description:o,type:i,updated_at:a})=>({name:s,description:o,type:i,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:r,description:s,type:o,updated_at:i})=>({name:r,description:s,type:o,updated_at:i}))}recordSessionSize(e){let n=this.stmts.insertSessionSize.run(e.team_name,e.alias,e.sessionid,e.input_tokens??null,e.cache_tokens??null,e.output_tokens??null,e.total_tokens??null,e.observed_at??X());return this.stmts.getSessionSize.get(n.lastInsertRowid)}latestSessionSizes(){return this.stmts.latestSessionSizes.all()}sessionSizeHistory(e,n,r=20){return this.stmts.sessionSizeHistory.all(e,n,r)}insertSessionEvent(e){let n=this.stmts.insertSessionEvent.run(e.run_id,e.step_id??null,e.kind,e.timestamp_ms,e.payload,e.payload_truncated??0,e.overflow_artifact_id??null);return this.stmts.getSessionEvent.get(n.lastInsertRowid)}listSessionEvents(e,n){return n!==void 0?this.stmts.listSessionEventsSince.all(e,n):this.stmts.listSessionEvents.all(e)}listSessionEventsSince(e,n=1e3){return this.stmts.listAllEventsSince.all(e,n)}latestAgentCall(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call' ORDER BY id DESC LIMIT 1").get(e);if(n===void 0)return null;try{let r=JSON.parse(n.payload);return typeof r.alias!="string"||typeof r.provider!="string"?null:{alias:r.alias,provider:r.provider,...typeof r.model=="string"?{model:r.model}:{}}}catch{return null}}agentCallTokenTotals(e){let n=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call'").all(e),r=0,s=0,o=0;for(let i of n)try{let a=JSON.parse(i.payload);typeof a.tokens_in=="number"&&(r+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),o+=1}catch{}return{totalInputTokens:r,totalOutputTokens:s,agentCallCount:o}}addRollupValue(e){this.stmts.upsertRollupStat.run(e.run_id,e.step_id??null,e.metric_kind,e.value,e.bucket_start_ms,e.bucket_end_ms,e.updated_at)}listRollupStats(e){return this.stmts.listRollupStats.all(e)}getRollupCursor(){return this.stmts.getRollupCursor.get("last_event_id")?.value??0}setRollupCursor(e){this.stmts.setRollupCursor.run("last_event_id",e)}insertDriftSignal(e){let n=this.stmts.insertDriftSignal.run(e.team_member_id,e.project_id??null,e.signal_kind,e.severity,e.description,e.detected_at,e.expires_at??null,e.payload??null);return this.stmts.getDriftSignal.get(n.lastInsertRowid)}listDriftSignals(e={}){return e.team_member_id!==void 0&&e.unacked?this.stmts.listUnackedDriftByMember.all(e.team_member_id):e.team_member_id!==void 0?this.stmts.listDriftByMember.all(e.team_member_id):e.project_id!==void 0?this.stmts.listDriftByProject.all(e.project_id):this.stmts.listAllDrift.all()}hasUnackedDriftSignal(e,n,r){return this.stmts.findUnackedDrift.get(e,n??null,r)!==void 0}acknowledgeDriftSignal(e){return this.stmts.ackDriftSignal.run(Date.now(),e),this.stmts.getDriftSignal.get(e)??null}insertInteractiveSession(e){let n=Date.now();return this.stmts.insertInteractiveSession.run(e.run_id,e.step_id,e.state_name,e.status,n,n),this.stmts.getInteractiveSessionByStepId.get(e.step_id)}getInteractiveSessionByStepId(e){return this.stmts.getInteractiveSessionByStepId.get(e)??null}getInteractiveSessionByRunAndState(e,n){return this.stmts.getInteractiveSessionByRunAndState.get(e,n)??null}setInteractiveAgentOutput(e,n,r){this.stmts.setInteractiveAgentOutput.run(n,r,Date.now(),e)}resumeInteractive(e,n,r){return this.resumeInteractiveTxn(e,n,r,X())}resumeEscalation(e,n){return this.resumeEscalationTxn(e,n,X())}}});var xt=r0(tt=>{"use strict";function Cs(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 WE(t){if(t===void 0)return[];if(!Array.isArray(t))throw new TypeError('align must be an array of "left", "right", or "decimal" per column');return t.map(e=>{if(e!=="left"&&e!=="right"&&e!=="decimal")throw new TypeError('align entries must be "left", "right", or "decimal"');return e})}function An(t){let e=0;for(let n of t){let r=n.codePointAt(0);if(!(r>=768&&r<=879||r>=6832&&r<=6911||r>=7616&&r<=7679||r>=8400&&r<=8447||r>=65024&&r<=65039||r>=65056&&r<=65071||r===8203||r>=917760&&r<=917999)){if(r>=4352&&r<=4447||r>=11904&&r<=12350||r>=12353&&r<=13311||r>=13312&&r<=19903||r>=19968&&r<=40959||r>=40960&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65072&&r<=65135||r>=65280&&r<=65376||r>=65504&&r<=65510||r>=9728&&r<=10175||r>=126976&&r<=129791||r>=131072&&r<=262141){e+=2;continue}e+=1}}return e}function Bu(t,e,n){let r=" ".repeat(Math.max(0,e-An(t)));return n?r+t:t+r}function HE(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 pD(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 hD(t,e,n="\u2026"){if(An(t)<=e)return t;let r=An(n)>e?"\u2026":n,s=An(r);if(e<=s)return r;let o="",i=0;for(let a of t){let l=An(a);if(i+l>e-s)break;o+=a,i+=l}return`${o}${r}`}function _D(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 BE(t){let e=/^(?:[+-]?\$?|\$[+-]?)(?:\d+|\d{1,3}(?:,\d{3})+|(?=\.))(?:\.(\d+))?$/.exec(t);return!e||!/\d/.test(t)?null:{places:e[1]?.length??0}}function gD(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 XE(t){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let e=[];for(let n of t){let r=HE(n);r.headers!==void 0&&Cs(r.headers);for(let s of r.rows.map(Cs))s.forEach((o,i)=>{e[i]=Math.max(e[i]??0,BE(o)?.places??0)})}return e}tt.measureDecimalPlaces=XE;function qE(t,e,n){let r=gD(n)??[],s=e.includes("decimal")?XE(t):[];return Array.from({length:Math.max(r.length,s.length)},(o,i)=>Math.max(r[i]??0,s[i]??0))}function GE(t,e){let n=BE(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 VE(t,{max:e,align:n,decimalPlaces:r}={}){if(!Array.isArray(t))throw new TypeError("grids must be an array of grids");let s=_D(e),o=WE(n),i=qE(t,o,r),a=[],l=(c,d)=>{a[c]=Math.max(a[c]??0,d)};for(let c of t){let d=HE(c);d.headers!==void 0&&Cs(d.headers).forEach((u,f)=>{l(f,An(u))});for(let u of d.rows.map(Cs))u.forEach((f,m)=>{let p=o[m]==="decimal"?GE(f,i[m]??0)??f:f;l(m,An(p))})}return a.map((c,d)=>{let u=s[d];return u===void 0?c:Math.min(c,u)})}tt.measureColumns=VE;function yD(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 JE(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=yD(i),u=WE(r),f=pD(l),m=qE([t],u,c),p=e??VE([{rows:t,headers:n}],{max:a,align:u,decimalPlaces:m}),_=t.map(Cs);n!==void 0&&_.unshift(Cs(n));let h=_.map((g,E)=>{let y=g.length-1;for(;y>=0&&g[y]==="";)y--;return g.slice(0,y+1).map((T,w)=>{let S=p[w]||0,b=s&&S>0&&(w!==y||o)?hD(T,S,f):T;if(u[w]==="decimal"){let I=n!==void 0&&E===0?null:GE(T,m[w]??0),L=Bu(I!==null&&An(I)<=S?I:b,S,!0);return w===y&&I!==null?L.trimEnd():L}return u[w]==="right"?Bu(b,S,!0):w===y?b:Bu(b,S,!1)}).join(" ")}).join(`
1701
1701
  `);return h===""||d===""?h:`${d}${h.split(`
1702
1702
  `).join(`
1703
1703
  ${d}`)}`}tt.renderGrid=JE;function KE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l}={}){return JE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l})}function ED(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l,stream:c=process.stdout}={}){let d=KE(t,{headers:e,align:n,truncate:r,truncateTrailing:s,margin:o,max:i,ellipsis:a,decimalPlaces:l});d&&c.write(`${d}
@@ -1705,7 +1705,7 @@ ${d}`)}`}tt.renderGrid=JE;function KE(t,{headers:e,align:n,truncate:r,truncateTr
1705
1705
  `?"\\n":n===" "?"\\t":n==="\r"?"\\r":`\\x${n.codePointAt(0).toString(16).padStart(2,"0")}`)}tt.escapeCell=AD});var nT={};me(nT,{defaultDbPath:()=>qu,describeStateLocation:()=>Qo,isSlowWslMount:()=>tT,lmctlNextHome:()=>eT,resolveDbPath:()=>Je,warnIfSlowDbPath:()=>Gu});import{platform as QE}from"node:os";import{homedir as ND}from"node:os";import{join as ZE}from"node:path";function eT(t=process.env){let e=t.LMCTL_HOME;return e!==void 0&&e.length>0?e:ZE(t.HOME||ND(),RD)}function qu(t=process.env){return ZE(eT(t),LD)}function Je(t,e=process.env){return t!==void 0&&t.length>0?t:e.LMCTL_DB!==void 0&&e.LMCTL_DB.length>0?e.LMCTL_DB:qu(e)}function Qo(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 tT(t,e=QE()){return e!=="linux"?!1:t.startsWith("/mnt/c/")||t==="/mnt/c"}function Gu(t,e=process.stderr,n=QE()){tT(t,n)&&e.write(`warning: DB on /mnt/c is slow; consider moving to ~/.lmctl/state.db (set LMCTL_DB or use --db)
1706
1706
  `)}var RD,LD,Nn=x(()=>{"use strict";RD=".lmctl",LD="state.db"});function Rn(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 Pe(t){let e=t.env?.LMCTL_DB;return e!==void 0&&e.length>0?e:Je(void 0,{...process.env,...t.env})}async function W(t,e){if(t.dal!==void 0)return e(t.dal);let n=$e({path:Pe(t)});try{return await e(n)}finally{n.close()}}function ae(t,e,n=["--json"]){let r=new Set(e),s=new Set(n),o=[],i={};for(let a=0;a<t.length;a+=1){let l=t[a];if(!l.startsWith("--")){o.push(l);continue}if(s.has(l)){i[l]=!0;continue}if(!r.has(l))return{positionals:o,flags:i,error:`unknown flag: ${l}`};let c=t[a+1];if(c===void 0||c.startsWith("--"))return{positionals:o,flags:i,error:`missing value for ${l}`};i[l]=c,a+=1}return{positionals:o,flags:i}}function V(t,e){let n=t.flags[e];return typeof n=="string"?n:void 0}function z(t,e){return t.flags[e]===!0}function te(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
1707
1707
  `)}function D(t,e){return t.stderr.write(`error: ${e}
1708
- `),1}function Vr(){return(0,oT.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 xD(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 CD(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:!xD(e)}function OD(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"?rT(e.event):rT(e)}function rT(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 iT(t,e){if(CD(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 g=Date.now();if(g-d<l)return;let h=Math.round((g-c)/1e3),_=e.alias+": turn still running ("+h+"s elapsed)";f?(m=!0,t.stderr.write("\r\x1B[K"+_)):t.stderr.write(_+`
1708
+ `),1}function Vr(){return(0,oT.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 xD(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 CD(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:!xD(e)}function OD(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"?rT(e.event):rT(e)}function rT(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 iT(t,e){if(CD(t)){let l=e.intervalMs??5e3,c=Date.now(),d=c,u=t.env??process.env,f=t.stderr.isTTY===!0&&u.TERM!=="dumb",m=!1,p=setInterval(()=>{let _=Date.now();if(_-d<l)return;let h=Math.round((_-c)/1e3),g=e.alias+": turn still running ("+h+"s elapsed)";f?(m=!0,t.stderr.write("\r\x1B[K"+g)):t.stderr.write(g+`
1709
1709
  `)},l);return p.unref(),{poke:()=>{d=Date.now()},stop:()=>{clearInterval(p),f&&m&&t.stderr.write("\r\x1B[K")}}}let n=t.env??process.env,r=e.stallThresholdMs;if(r===void 0){if(n.LMCTL_STALL_THRESHOLD_MS){let l=Number(n.LMCTL_STALL_THRESHOLD_MS);Number.isFinite(l)&&l>0&&(r=l)}else if(n.LMCTL_STALL_MINUTES){let l=Number(n.LMCTL_STALL_MINUTES);Number.isFinite(l)&&l>0&&(r=l*6e4)}}(r===void 0||r<=0)&&(r=10*6e4);let s=Math.min(1e3,r),o=Date.now(),i=!1,a=setInterval(()=>{let c=Date.now()-o;if(c>=r&&!i){i=!0;let d=Math.max(1,Math.floor(c/6e4)),u=e.alias+": no assistant output or tool activity for "+d+" min (reasoning events may still be arriving; inspect with: lmctl tail "+e.teamfile+" "+e.alias+`)
1710
1710
  `;t.stderr.write(u)}},s);return a.unref(),{poke:l=>{OD(l)&&(o=Date.now(),i=!1)},stop:()=>{clearInterval(a)}}}function Ct(t,e){let n=e instanceof Error?e.message:String(e);return t.stderr.write(`internal error: ${n}
1711
1711
  `),2}function Os(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||sT)return;sT=!0;let e=n=>{throw n.code==="EPIPE"&&process.exit(0),process.stdout.off("error",e),n};process.stdout.on("error",e)}var oT,sT,le=x(()=>{"use strict";Lt();oT=Ut(xt(),1);Nn();sT=!1});function Jr(t){return t.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"")}var al=x(()=>{"use strict"});import{randomUUID as UD}from"node:crypto";import{chmodSync as lT,mkdirSync as FD,readdirSync as jD,statSync as WD,unlinkSync as HD,writeFileSync as BD}from"node:fs";import{homedir as XD,tmpdir as qD}from"node:os";import{join as ni}from"node:path";function Ju(t){return Jr(t.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\|$)/g,"")).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g,"\uFFFD")}function ri(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(zD,"$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 QD(){let t=process.env.LMCTL_HOME||(process.env.NODE_ENV==="test"?ni(qD(),`lmctl-test-${process.pid}`,".lmctl"):ni(process.env.HOME||XD(),".lmctl"));return ni(t,"provider-errors")}function ZD(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)}
@@ -1724,10 +1724,10 @@ ${ZD(t,VD,"provider output not saved")}
1724
1724
  \u2026 ${s} characters of provider stderr dropped \u2026
1725
1725
  ${r}`}}}function Ds(t,e){return e===""?t:`${t}:${e.includes(`
1726
1726
  `)?`
1727
- `:" "}${e}`}var GD,VD,JD,KD,YD,zD,Tt=x(()=>{"use strict";al();GD=500,VD=1e6,JD=50,KD=20*1024*1024,YD=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,zD=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as pT,appendFileSync as oM,mkdirSync as iM,existsSync as o6,readdirSync as i6,unlinkSync as a6}from"node:fs";import{join as dl,dirname as aM}from"node:path";import{homedir as lM}from"node:os";function Yu(){return dl(lM(),".lmctl")}function zu(){Ms=!0,process.env.LMCTL_DEBUG="1"}function hT(){return{cliDebug:Ms,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function _T(t){Ms=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ye(){if(Ms||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-mT>=cM&&(fT=mM(),mT=t),fT}function si(){return Ms||process.env.LMCTL_DEBUG==="1"}function dM(){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 ri(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 uM(t){return Ku(t)}function He(t,e){if(e?.verbose){if(!Ms)return}else if(!e?.always&&!ye())return;try{fM();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,...uM(t)};oM(cl,JSON.stringify(n)+`
1727
+ `:" "}${e}`}var GD,VD,JD,KD,YD,zD,Tt=x(()=>{"use strict";al();GD=500,VD=1e6,JD=50,KD=20*1024*1024,YD=/^stderr-\d+-\d+-[0-9a-f-]{36}\.log$/,zD=/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password|authorization|token|secret|credential)["']?\s*[:=]\s*)(?:"(?:\\.|[^"\\])*"|'[^']*'|(?:(?:Bearer|Basic)\s+)?[^\s,;}]+)/gi});import{readFileSync as pT,appendFileSync as oM,mkdirSync as iM,existsSync as i6,readdirSync as a6,unlinkSync as l6}from"node:fs";import{join as dl,dirname as aM}from"node:path";import{homedir as lM}from"node:os";function Yu(){return dl(lM(),".lmctl")}function zu(){Ms=!0,process.env.LMCTL_DEBUG="1"}function hT(){return{cliDebug:Ms,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function _T(t){Ms=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ye(){if(Ms||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-mT>=cM&&(fT=mM(),mT=t),fT}function si(){return Ms||process.env.LMCTL_DEBUG==="1"}function dM(){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 ri(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 uM(t){return Ku(t)}function He(t,e){if(e?.verbose){if(!Ms)return}else if(!e?.always&&!ye())return;try{fM();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,...uM(t)};oM(cl,JSON.stringify(n)+`
1728
1728
  `)}catch{}}function fM(){if(!cl){let e=dM().slice(0,13).replace("T","-");cl=dl(Yu(),`debug-${e}.log`)}iM(aM(cl),{recursive:!0})}function Ke(...t){He({event:"legacy",msg:t.join(" ")})}function Ue(...t){He({event:"legacy",msg:t.join(" ")},{verbose:!0})}function U(t){He(t,{always:!0})}function mM(){return pM()||hM()}function pM(){try{let t=pT(dl(Yu(),"config.toml"),"utf-8");for(let e of t.split(`
1729
1729
  `)){let n=e.trim();if(!n||n.startsWith("#"))continue;if(n.startsWith("["))break;let r=/^debug\s*=\s*(.+)$/.exec(n);if(r){let s=r[1].trim().toLowerCase().replace(/^["']|["']$/g,"");return s==="true"||s==="1"}}}catch{}return!1}function hM(){try{let t=pT(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 Ms,fT,mT,cM,cl,re=x(()=>{"use strict";Tt();Ms=!1,fT=!1,mT=0,cM=5e3;cl=null});import{openSync as DM,closeSync as MM,fstatSync as $M,readSync as PM,constants as wT}from"node:fs";import{dirname as UM,join as ul}from"node:path";import{createHash as FM}from"node:crypto";function ef(t){if(!Pr(t.catalog)||!Ur(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=IT(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(!vT(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&&!vT(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 ST(t){let e=DM(t,wT.O_RDONLY|wT.O_NONBLOCK);try{let n=$M(e);if(!n.isFile()||n.size>jM)throw Error("price file must be a regular file within the 64 MiB size limit");let r=Buffer.alloc(n.size+1),s=0;for(;s<r.length;){let o=PM(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{MM(e)}}function tf(t,e=ul(UM(t),"aliases.json")){let n=ST(t),r=ST(e),s;try{s=bT(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=bT(r),i={catalog:s,aliases:o,source:"pinned",generatedAt:s?.generated_at||null,sha256:FM("sha256").update(n).update(r).digest("hex")};return ef(i),i}function $s(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(IT(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=$s(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<ks(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"))):Ft({cacheDir:r.LMCTL_HOME?ul(r.LMCTL_HOME,"cache","lmprice"):r.HOME?ul(r.HOME,".lmctl","cache","lmprice"):void 0,ttlMs:e.force?0:ks(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=$s(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??oi}catch(n){if(/^SQLITE_(BUSY|LOCKED)(_|$)/.test(String(n?.code)))return oi;try{return $s(t)??oi}catch{return oi}}}async function sf(t){if(t.dal)return fl(t.dal.db,t.env);let e;try{return e=$e({path:Pe(t),recover:!1}),await fl(e.db,t.env)}catch{return oi}finally{try{e?.close()}catch{}}}var oi,IT,vT,jM,bT,Zu,ml=x(()=>{"use strict";Sn();Lt();le();oi={catalog:null,aliases:null,source:"unavailable",generatedAt:null,sha256:null},IT=t=>t.record_id??t.source+":"+t.source_model_id,vT=t=>t===null||typeof t=="number"&&Number.isFinite(t)&&t>=0;jM=64*1024*1024;bT=t=>JSON.parse(t.replace(/^\uFEFF/,""));Zu=new WeakMap});function xn(t){return t!=="gemini"}function pl(t){if(!xn(t))throw new Error(sr)}var sr,Ps=x(()=>{"use strict";sr="Standalone Gemini CLI support is disabled; use provider=agy with an Agy-supported Gemini model."});function kT(t){if(t.length===0||!t.startsWith("---"))throw new en("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
1730
- `);if(e[0]!=="---")throw new en("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 en(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!WM.has(c))throw new en(`unknown frontmatter key "${c}" \u2014 allowed keys: ${hl.join(", ")}`);n[c]=d}if(r===-1)throw new en("frontmatter not closed (missing trailing `---` on its own line)");for(let i of hl)if(n[i]===void 0)throw new en(`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,WM,en,AT=x(()=>{"use strict";hl=["title","description","members"],WM=new Set(hl),en=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function ii(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 HM,writeFileSync as x6,renameSync as C6,existsSync as RT}from"node:fs";import{basename as BM,resolve as Us,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 qM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function GM(t){return/^\s*_SESSION_\s+\S/.test(t)}function VM(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function xe(t){return/\.(?:lmctl|lmc)$/i.test(t)}function ai(t){return BM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ie(t){let e=HM(t,"utf-8"),n=af(Us(t)),r=Cn(e,ai(t),{baseDir:n,sourcePath:Us(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Us(n,s.sessiondir));return r}function Cn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1730
+ `);if(e[0]!=="---")throw new en("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 en(`malformed frontmatter line ${i+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let c=l[1],d=l[2].trim();if(!WM.has(c))throw new en(`unknown frontmatter key "${c}" \u2014 allowed keys: ${hl.join(", ")}`);n[c]=d}if(r===-1)throw new en("frontmatter not closed (missing trailing `---` on its own line)");for(let i of hl)if(n[i]===void 0)throw new en(`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,WM,en,AT=x(()=>{"use strict";hl=["title","description","members"],WM=new Set(hl),en=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});function ii(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 HM,writeFileSync as C6,renameSync as O6,existsSync as RT}from"node:fs";import{basename as BM,resolve as Us,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 qM(t){return/^\s*_MEMBER_\s+\S/.test(t)}function GM(t){return/^\s*_SESSION_\s+\S/.test(t)}function VM(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function xe(t){return/\.(?:lmctl|lmc)$/i.test(t)}function ai(t){return BM(t).replace(/\.(?:lmctl|lmc)$/i,"")}function Ie(t){let e=HM(t,"utf-8"),n=af(Us(t)),r=Cn(e,ai(t),{baseDir:n,sourcePath:Us(t)});for(let s of r.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=Us(n,s.sessiondir));return r}function Cn(t,e,n={}){let r=[],s=[];n.sourcePath,n.baseDir;let o=t;if(o.startsWith("#teamfile:")){let l=o.indexOf(`
1731
1731
  `);o=l>=0?o.slice(l+1):""}let i=null;if(o.startsWith("---"))try{i=kT(o)}catch(l){if(l instanceof en)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
1732
1732
  `);for(let l=0;l<a.length;l++){let c=a[l],d=l+1;if(GM(c))throw new Error(`line ${d}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${c.trim()})`);if(VM(c)||!qM(c))continue;let u=XM(c);for(let m of Object.keys(u))if(!NT.includes(m))throw new Error(`line ${d}: unknown key "${m}" on _MEMBER_ line: ${c.trim()}
1733
1733
  allowed keys: ${NT.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 li(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?Us(e,o.teamfile):Us(o.teamfile);if(!RT(a))n.push({field:o.alias,message:`Teamfile not found: ${a}`});else{let l=Ie(a),c=Fs(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)?xn(o.provider)||n.push({field:o.alias,message:sr}):n.push({field:o.alias,message:`Invalid provider "${o.provider}"`});o.sessiondir!==void 0&&o.sessiondir===""&&n.push({field:o.alias,message:"sessiondir is empty"})}return n}function Fs(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=Us(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),!RT(o))throw new Error(`Teamfile not found: ${o} (referenced by alias "${t.alias}")`);let a=Ie(o),l=Fs(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,NT,Be=x(()=>{"use strict";Ps();AT();_l();lf="Lead";NT=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as JM}from"node:crypto";import{existsSync as LT,readFileSync as xT,realpathSync as KM}from"node:fs";import{dirname as YM,resolve as CT}from"node:path";function Ne(t,e){let n=CT(t);if(LT(n))return KM(n);if(e!==void 0){let r=QM(t,n,e);if(r!==null)return r}return n}function El(t,e){let n=YM(e),r=Cn(t,ai(e),{baseDir:n});for(let s of r.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=CT(n,s.sessiondir));return r}function tn(t,e,n=r=>{process.stderr.write(`warning: ${r}
@@ -1743,11 +1743,11 @@ ${r}`}}}function Ds(t,e){return e===""?t:`${t}:${e.includes(`
1743
1743
  FROM tracked_invocation
1744
1744
  WHERE target_teamfile = ?
1745
1745
  AND target_alias = ?
1746
- 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";nt();Lt();Ht()});function Nl(t,e,n){return xn(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function Dn(t,e,n,r,s){if(t.provider!==e)throw new Error(`bundle session provider mismatch: session serves "${t.provider}", turn targets "${e}"`);if(t.sessionId!==n)throw new Hs(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new Hs(`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 Rl(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 g=()=>p.abort();m.signal?.addEventListener("abort",g,{once:!0});try{let h=o?await Dn(o,t.name,a,f,{...m,signal:p.signal}):await t.sendTurn(f,{...e,...m,signal:p.signal,requireResume:n,timeoutMs:e.timeoutMs??0});if(p.signal.aborted)throw Object.assign(new Error("Aborted"),{usage:h.usage,sessionId:h.sessionId});if(n&&h.sessionId!==e.sessionId)throw c=!0,Object.assign(new Hs(`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 Hs&&(c=!0,await o?.close()),h}finally{m.signal?.removeEventListener("abort",g),d=void 0}},close(){return u||(c=!0,d?.abort(),u=o?o.close():Promise.resolve()),u}}}var Hs,Bs=x(()=>{"use strict";Ps();Hs=class extends Error{}});import{realpathSync as W$}from"node:fs";import{resolve as H$}from"node:path";function Ef(t){let e=H$(t);try{return W$(e)}catch{return e}}var sw=x(()=>{"use strict"});import{platform as ow}from"node:os";function Xs(t){let e=new fi;for(let n of t)e.registerAdapter(n);return e}var fi,Tf=x(()=>{"use strict";sw();fi=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=ow()==="darwin"||ow()==="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(`
1746
+ 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";nt();Lt();Ht()});function Nl(t,e,n){return xn(t)&&e.tools[t]?.agent===void 0&&n.includes(t)}async function Dn(t,e,n,r,s){if(t.provider!==e)throw new Error(`bundle session provider mismatch: session serves "${t.provider}", turn targets "${e}"`);if(t.sessionId!==n)throw new Hs(`session identity mismatch: expected "${n}", got "${t.sessionId}"`);let o=await t.sendTurn(r,s);if(o.sessionId!==n)throw Object.assign(new Hs(`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 Rl(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 Dn(o,t.name,a,f,{...m,signal:p.signal}):await t.sendTurn(f,{...e,...m,signal:p.signal,requireResume:n,timeoutMs:e.timeoutMs??0});if(p.signal.aborted)throw Object.assign(new Error("Aborted"),{usage:h.usage,sessionId:h.sessionId});if(n&&h.sessionId!==e.sessionId)throw c=!0,Object.assign(new Hs(`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 Hs&&(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 Hs,Bs=x(()=>{"use strict";Ps();Hs=class extends Error{}});import{realpathSync as W$}from"node:fs";import{resolve as H$}from"node:path";function Ef(t){let e=H$(t);try{return W$(e)}catch{return e}}var sw=x(()=>{"use strict"});import{platform as ow}from"node:os";function Xs(t){let e=new fi;for(let n of t)e.registerAdapter(n);return e}var fi,Tf=x(()=>{"use strict";sw();fi=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=ow()==="darwin"||ow()==="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(`
1747
1747
  `)){let r;try{r=JSON.parse(n)}catch{continue}let s=r.type;typeof s=="string"&&(s.endsWith(".started")&&(e=!0),["turn.completed","turn.failed","turn.aborted","turn.cancelled","error"].includes(s)&&(e=!1))}return e}function kf(t){let e=t.trimEnd().split(`
1748
1748
  `).at(-1)?.trimStart()??"";if(!e.startsWith("{"))return!1;try{return JSON.parse(e),!1}catch{return!0}}function iw(t){let e,n=!1,r=!1,s;for(let o of t.split(`
1749
- `)){let i;try{i=JSON.parse(o)}catch{continue}if(i.type==="thread.started"&&typeof i.thread_id=="string"&&(e=i.thread_id),i.type==="turn.started"&&(n=!0),i.type!=="turn.completed"||!n||r)continue;r=!0;let a=i.usage;if(!a)continue;let l=st(a.input_tokens),c=st(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:st(a.output_tokens),reasoning:st(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:Yt([a.input_tokens,a.cached_input_tokens,a.output_tokens,a.reasoning_output_tokens])||l!==null&&c!==null&&c>l},[s.inputUncached,s.cacheRead,s.output].includes(null)&&(s.reason="counter_not_exposed")}return(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 st,B$,wf,vf,Sf,Af=x(()=>{"use strict";jo();st=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,B$=(t,e)=>t===null||e===null?null:st(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(S=>w[S]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(w=>st(a.total[w])!==null)?l(a.total):null,d=typeof e.id=="string"&&e.id.length>0||typeof e.id=="number"&&Number.isSafeInteger(e.id)?e.id:null,u=st(e.emittedAtMs)??d,f=st(e.ordinal)??st(r.ordinal),m=JSON.stringify([this.thread,this.id,c,l(a.last),u,d,f]),p=u!==null||f!==null;if(p&&this.session.seen.has(m))return!1;p&&this.session.seen.add(m);let g=a.last,h=st(g.inputTokens),_=st(g.cachedInputTokens),y={source:"wire",inputUncached:h===null||_===null||_>h?null:h-_,cacheRead:_,cacheWrite:st(g.cacheWriteInputTokens??0),output:st(g.outputTokens),reasoning:st(g.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:Yt([g.inputTokens,g.cachedInputTokens,g.cacheWriteInputTokens,g.outputTokens,g.reasoningOutputTokens])||h!==null&&_!==null&&_>h};[y.inputUncached,y.cacheRead,y.cacheWrite,y.output].includes(null)&&(y.reason="counter_not_exposed");let T=r.model??g.model;if(typeof T=="string"&&T&&T!=="<synthetic>"&&this.reported.add(T),!this.value)this.value=y;else{for(let w of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let S=this.value[w],b=y[w];S!==null&&b!==null&&st(S+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=B$(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 T3,mkdirSync as w3}from"node:fs";import{join as q$,dirname as S3}from"node:path";import{homedir as G$}from"node:os";function J$(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function K$(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=J$(t.slice(e+1).trim());return n?{key:n,value:r}:null}function Y$(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Ll(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function z$(){return q$(G$(),".lmctl","config.toml")}function xl(t){let e=t??z$(),n;try{n=X$(e,"utf-8")}catch{return{tools:{}}}return Q$(n)}function aw(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 Q$(t){let e={},n={},r=t.split(`
1750
- `),s={kind:"none"},o={},i=!1,a={};function l(){if(s.kind==="tool"){let u=e[s.tool]??{};if(s.profile){let f=u.profiles?.[s.profile]??{};o.description&&(f.description=o.description),o.flags!==void 0&&(f.flags=o.flags),u.profiles||(u.profiles={}),u.profiles[s.profile]=f}else o.start&&(u.start=o.start),o.resume&&(u.resume=o.resume),o.agent&&(u.agent=o.agent),o.profile_flag!==void 0&&(u.profile_flag=o.profile_flag);e[s.tool]=u}else if(s.kind==="compact"){let u=s.provider?n.providers?.[s.provider]??{}:n.global??{};if(o.min!==void 0){let f=aw(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=aw(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=Y$(f);if(m!==null){if(i=!0,l(),m.startsWith("tool.")){let g=".profile.",h=m.indexOf(g);h!==-1?s={kind:"tool",tool:m.slice(5,h),profile:m.slice(h+g.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=K$(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 lw(t){return t.site_name??null}function Z$(t,e,n){if(!n)return"";let r=t.tools[e]??Nf[e],s=r?.profiles?.[n]?.flags??Nf[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 cw(t,e){return!!t.tools[e]}function dw(t,e,n,r,s){let o=t.tools[e]??Nf[e],i;if(o?.agent){let l=Ll(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=V$[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=Z$(t,e,s);return a&&(i+=" "+a),i}var Nf,V$,Cl=x(()=>{"use strict";Nf={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:""}}}},V$={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 uw(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 fw=x(()=>{"use strict"});function Dl(t){let e=t?.prompt??Z;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${Z}${pw}${t.teamfile}:
1749
+ `)){let i;try{i=JSON.parse(o)}catch{continue}if(i.type==="thread.started"&&typeof i.thread_id=="string"&&(e=i.thread_id),i.type==="turn.started"&&(n=!0),i.type!=="turn.completed"||!n||r)continue;r=!0;let a=i.usage;if(!a)continue;let l=st(a.input_tokens),c=st(a.cached_input_tokens);s={source:"wire",inputUncached:l===null||c===null||c>l?null:l-c,cacheRead:c,cacheWrite:0,output:st(a.output_tokens),reasoning:st(a.reasoning_output_tokens),modelReported:typeof i.model=="string"?i.model:null,providerCostUsd:null,reason:null,invalidCounters:Yt([a.input_tokens,a.cached_input_tokens,a.output_tokens,a.reasoning_output_tokens])||l!==null&&c!==null&&c>l},[s.inputUncached,s.cacheRead,s.output].includes(null)&&(s.reason="counter_not_exposed")}return(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 st,B$,wf,vf,Sf,Af=x(()=>{"use strict";jo();st=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,B$=(t,e)=>t===null||e===null?null:st(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(S=>w[S]??null),c=a.total&&["inputTokens","cachedInputTokens","outputTokens"].every(w=>st(a.total[w])!==null)?l(a.total):null,d=typeof e.id=="string"&&e.id.length>0||typeof e.id=="number"&&Number.isSafeInteger(e.id)?e.id:null,u=st(e.emittedAtMs)??d,f=st(e.ordinal)??st(r.ordinal),m=JSON.stringify([this.thread,this.id,c,l(a.last),u,d,f]),p=u!==null||f!==null;if(p&&this.session.seen.has(m))return!1;p&&this.session.seen.add(m);let _=a.last,h=st(_.inputTokens),g=st(_.cachedInputTokens),y={source:"wire",inputUncached:h===null||g===null||g>h?null:h-g,cacheRead:g,cacheWrite:st(_.cacheWriteInputTokens??0),output:st(_.outputTokens),reasoning:st(_.reasoningOutputTokens),modelReported:null,providerCostUsd:null,reason:null,invalidCounters:Yt([_.inputTokens,_.cachedInputTokens,_.cacheWriteInputTokens,_.outputTokens,_.reasoningOutputTokens])||h!==null&&g!==null&&g>h};[y.inputUncached,y.cacheRead,y.cacheWrite,y.output].includes(null)&&(y.reason="counter_not_exposed");let T=r.model??_.model;if(typeof T=="string"&&T&&T!=="<synthetic>"&&this.reported.add(T),!this.value)this.value=y;else{for(let w of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let S=this.value[w],b=y[w];S!==null&&b!==null&&st(S+b)===null&&(this.value.invalidCounters=!0,this.value.reason="counter_not_exposed"),this.value[w]=B$(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 w3,mkdirSync as v3}from"node:fs";import{join as q$,dirname as b3}from"node:path";import{homedir as G$}from"node:os";function J$(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function K$(t){let e=t.indexOf("=");if(e===-1)return null;let n=t.slice(0,e).trim(),r=J$(t.slice(e+1).trim());return n?{key:n,value:r}:null}function Y$(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Ll(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function z$(){return q$(G$(),".lmctl","config.toml")}function xl(t){let e=t??z$(),n;try{n=X$(e,"utf-8")}catch{return{tools:{}}}return Q$(n)}function aw(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 Q$(t){let e={},n={},r=t.split(`
1750
+ `),s={kind:"none"},o={},i=!1,a={};function l(){if(s.kind==="tool"){let u=e[s.tool]??{};if(s.profile){let f=u.profiles?.[s.profile]??{};o.description&&(f.description=o.description),o.flags!==void 0&&(f.flags=o.flags),u.profiles||(u.profiles={}),u.profiles[s.profile]=f}else o.start&&(u.start=o.start),o.resume&&(u.resume=o.resume),o.agent&&(u.agent=o.agent),o.profile_flag!==void 0&&(u.profile_flag=o.profile_flag);e[s.tool]=u}else if(s.kind==="compact"){let u=s.provider?n.providers?.[s.provider]??{}:n.global??{};if(o.min!==void 0){let f=aw(o.min);f!==null&&(u.min=f)}if(o.max!==void 0){let f=aw(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=Y$(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=K$(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 lw(t){return t.site_name??null}function Z$(t,e,n){if(!n)return"";let r=t.tools[e]??Nf[e],s=r?.profiles?.[n]?.flags??Nf[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 cw(t,e){return!!t.tools[e]}function dw(t,e,n,r,s){let o=t.tools[e]??Nf[e],i;if(o?.agent){let l=Ll(r);i=o.agent.replace(/\{\{session_id\}\}/g,n).replace(/\{\{prompt\}\}/g,l)}else{let l=V$[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=Z$(t,e,s);return a&&(i+=" "+a),i}var Nf,V$,Cl=x(()=>{"use strict";Nf={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:""}}}},V$={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 uw(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 fw=x(()=>{"use strict"});function Dl(t){let e=t?.prompt??Z;if(t?.teamfile!==void 0){let n=t.teamfileContent??"";e=`${Z}${pw}${t.teamfile}:
1751
1751
  ${n}${Lf}${JSON.stringify(t.teamfile)}${xf}`}return t?.flightToken&&(e=`${t.flightToken.startsWith("[lmctl-seed:")?t.flightToken:`[lmctl-seed:${t.flightToken}]`}
1752
1752
  ${e}`),e}function mw(t){let e=t.trim(),n=e.match(/^\[lmctl-seed:[0-9a-zA-Z_-]+\](?:\r?\n|\s+)/);if(n&&(e=e.slice(n[0].length).trim()),e===Z)return!0;let r=`${Z}${pw}`;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}:
1753
1753
  `;return!(!s.startsWith(c)||c.length>i)}function mi(t){if(typeof t!="string")return!1;let e=t.trim().replace(/\r\n/g,`
@@ -1756,37 +1756,37 @@ ${e}`),e}function mw(t){let e=t.trim(),n=e.match(/^\[lmctl-seed:[0-9a-zA-Z_-]+\]
1756
1756
  Teamfile `,Lf=`
1757
1757
 
1758
1758
  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 eP}from"node:fs";function hw(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&&!eP(e);if(!n&&!r)return t;U({event:"claude_execpath_sanitized",reason:n?"wrong_platform_exe":"missing_file",value:e,platform:process.platform});let s={...t};return delete s.CLAUDE_CODE_EXECPATH,s}function qs(t,e){let n={...t??process.env,PWD:e};return delete n.OLDPWD,n}function nP(t,e){return e===void 0||e.length===0?t:{...t??process.env,[Of]:e}}function Ce(t,e,n,r="chat"){return{...nP(qs(t,e),n),[tP]:r}}var Of,tP,Bt=x(()=>{"use strict";re();Of="LMCTL_SELF_SESSIONID",tP="LMCTL_LAUNCH_SOURCE"});function hi(t,e){let n;if(e&&typeof e=="object"){let r=e.code;typeof r=="number"&&(n=r)}return new pi(t,n,e)}var lr,Te,ve,Ml,pi,cr=x(()=>{"use strict";lr=class extends Error{constructor(e,n){super(e,n),this.name=this.constructor.name}},Te=class extends lr{},ve=class extends lr{exitCode;signal;stderr;constructor(e,n,r=null,s){super(e),this.exitCode=n,this.signal=r,this.stderr=s}},Ml=class extends lr{line;constructor(e,n,r){super(e,{cause:r}),this.line=n}},pi=class extends lr{rpcCode;rpcData;constructor(e,n,r){super(e),n!==void 0&&(this.rpcCode=n),r!==void 0&&(this.rpcData=r)}}});import{spawn as _w}from"node:child_process";import{mkdirSync as rP}from"node:fs";var Yr,ce,Ye=x(()=>{"use strict";Af();Cl();fw();Fe();Bt();al();Tt();cr();Yr=class t extends Error{cancelReason;constructor(e,n){super(e),this.name="TurnAbortError",this.cancelReason=n,Object.setPrototypeOf(this,t.prototype)}},ce=class t{name;capabilities;injection;protocol;provider;binary;seedArgs;seedTimeoutMs;seedStdin;resumeTemplate;startTemplate;transportFn;constructor(e){this.protocol=e.protocol,this.name=e.provider.name,this.provider=e.provider,this.capabilities=e.capabilities,this.injection=e.injection,this.binary=e.binary,this.seedArgs=e.seedArgs,this.seedTimeoutMs=e.seedTimeoutMs??6e4,this.seedStdin=e.seedStdin,this.resumeTemplate=e.resumeTemplate,this.startTemplate=e.startTemplate,this.transportFn=e.transport}discover(){return this.provider.discoverSessions()}load(e){return this.provider.loadSession(e)}resolvePath(e){return this.provider.resolveSessionPath(e)}delete(e){return this.provider.deleteSession(e)}getWatchPaths(){return this.provider.getWatchPaths?.()??[]}seedArgsFor(e){let n=e?.prompt;return n===void 0?this.seedArgs:this.seedArgs.map(r=>r===Z?n:r)}turnOptsFor(e){return e}get seedBinary(){return this.binary}seed(e,n){return n?.signal?.aborted?Promise.resolve({success:!1,error:"seed cancelled before dispatch",errorCode:"ABORT_ERR"}):(rP(e,{recursive:!0}),new Promise(r=>{let s;try{try{n?.onDispatch?.()}catch{}s=_w(this.binary,this.seedArgsFor(n),{cwd:e,env:qs(n?.env,e),signal:n?.signal,stdio:["pipe","pipe","pipe"],timeout:this.seedTimeoutMs})}catch(l){return r({success:!1,error:l instanceof Error?l.message:String(l)})}let o="",i="";s.stdout?.on("data",l=>{o+=l.toString()}),s.stderr?.on("data",l=>{i+=l.toString()});let a=n?.prompt!==void 0&&this.seedStdin!==void 0?`${n.prompt}
1759
- `:this.seedStdin;a&&s.stdin?.write(a),s.stdin?.end(),s.on("exit",(l,c)=>{if(l===0&&!c)r({success:!0});else{let d=Jr(i).trim(),u=Jr(o).trim(),f=d||u;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:f?we(f,{provider:this.name}):c?`terminated by ${c}`:`exit code ${l}`})}}),s.on("error",l=>{r({success:!1,error:l.message,errorCode:l.code})})}))}resumeCommand(e,n){return this.resumeTemplate.replace(/\{\{session_id\}\}/g,e)}startCommand(e){return this.startTemplate}manualSeedHint(e){return{launchCommand:`cd ${e} && ${this.binary}`,postLaunchNote: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&&cw(r.userConfig,this.name)){let o=r.userConfig.tools[this.name];if(o?.agent)return this.runOneShotAgent(e,r,o.agent)}let s=r.timeoutMs??t.DEFAULT_IDLE_TIMEOUT_MS;return s<=0&&!r.signal?this.transportFn(e,{...r,binary:this.binary}):this.withTimeouts(s,e,r)}withTimeouts(e,n,r){let s=new AbortController,o,i,a="",l,c=r.sessionId,d,u=()=>{e<=0||(clearTimeout(o),o=setTimeout(()=>{r.onIdleWarning?.(e),f(),s.abort(),d&&d({text:a,...l?{usage:l}:{},sessionId:c,durationMs:e,status:"stalled",stalledAfterMs:e})},e))},f=()=>{clearTimeout(o)};r.signal&&(r.signal.aborted?(i="external",s.abort()):r.signal.addEventListener("abort",()=>{i="external",s.abort()},{once:!0})),u();let m={...r,binary:this.binary,signal:s.signal,onUsage:h=>{l=h,r.onUsage?.(h)},onSessionId:h=>{h&&(c=h),r.onSessionId?.(h)},onDelta:h=>{a+=h,u(),r.onDelta?.(h)},onProgress:h=>{h.kind!=="api_retry"&&u(),r.onProgress?.(h)}},p=this.transportFn(n,m).then(h=>(f(),{...h,status:h.status??"ok"})).catch(h=>{throw f(),i==="external"?Object.assign(new Yr("Turn cancelled","external"),{usage:h.usage??l,sessionId:c}):h}),g=new Promise(h=>{d=h});return Promise.race([p,g])}runOneShotAgent(e,n,r){let s=dw(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:uw(n.env),c=_w(s,{shell:!0,cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),d=!1,u=!1,f,m,p=!1,g=null,h=null,_=()=>{clearTimeout(f),f=setTimeout(()=>{!kf(y)&&!If(y)&&w(g,h)},100)},E=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&w(null)},l):void 0,y="",T="";if(c.stdout?.on("data",S=>{let b=S.toString();y+=b,n.onDelta?.(b),p&&!d&&_()}),c.stderr?.on("data",S=>{T+=S.toString(),p&&!d&&_()}),n.signal){if(n.signal.aborted)return clearTimeout(E),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let w=(S,b=null)=>{if(d)return;d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let I=Date.now()-o,L=this.name==="codex"?iw(y):{};L.usage&&n.onUsage?.(L.usage),L.sessionId&&n.onSessionId?.(L.sessionId);let O=k=>Object.assign(k,{usage:L.usage,sessionId:L.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new Yr("Turn cancelled","external")));else if(u)a(O(new Error(`Agent command timed out after ${l}ms`)));else if(S===0||S===null&&b===null)i({text:y.trim(),sessionId:L.sessionId??n.sessionId,durationMs:I,...L.usage?{usage:L.usage}:{}});else{let k=T.trim();a(O(new ve(k?we(k,{provider:this.name}):b?`Agent command terminated by ${b}`:`Agent command exited with code ${S}`,S,b,T)))}};this.name==="codex"?(c.on("close",(S,b)=>w(S,b)),c.on("exit",(S,b)=>{d||(p=!0,g=S,h=b,_(),m=setTimeout(()=>w(S,b),5e3))})):c.on("exit",(S,b)=>w(S,b)),c.on("error",S=>{d||(d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),a(S))})})}}});function yw(t){if(!t.length)return;let e={...t[0]},n=new Set(t.map(r=>r.modelReported).filter(r=>r!==null));for(let r of t.slice(1)){for(let s of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let o=e[s],i=r[s];o!==null&&i!==null&&Oe(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Oe(o+i)}e.invalidCounters||=r.invalidCounters,e.reason||=r.reason}return e.modelReported=n.size===1?[...n][0]:null,e.mixedModels=n.size>1,(e.invalidCounters||["inputUncached","cacheRead","cacheWrite","output"].some(r=>e[r]===null))&&(e.reason="counter_not_exposed"),e}var Oe,dr,gw,$l,Gs,Pl=x(()=>{"use strict";jo();Oe=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,dr=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,gw=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});$l=class{session;seen;parts=[];constructor(e,n){this.session=e,this.seen=n}event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=dr(r?.first?.id),o=dr(r?.last?.id),i=dr(r?.stream?.id),a=dr(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):dr(e.viewCursor)?JSON.stringify([this.session,e.viewCursor]):null;if(l&&this.seen.has(l))return!1;l&&this.seen.add(l);let c=e.usage,d=Oe(e.promptTokens),u=Oe(c.outputTokens),f=Oe(c.cacheReadTokens),m=Oe(c.cacheWriteTokens),p=d===0,g=f??(p?0:null),h=m??(p?0:null),_=d!==null&&g!==null&&h!==null&&g+h<=d?d-g-h:null,E=(g??0)>0||(h??0)>0,y={...gw(),inputUncached:_,cacheRead:g,cacheWrite:h,output:u,reasoning:Oe(c.reasoningTokens),modelReported:dr(e.modelId),invalidCounters:Yt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||_===null||u===null||Oe(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Oe(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return yw(this.parts)}},Gs=class{session;boundary;seen;parts=new Map;ownershipUncertain=!1;latestSnapshot;invalidateOwnership(){this.ownershipUncertain=!0,this.latestSnapshot&&(this.latestSnapshot.invalidCounters=!0,this.latestSnapshot.reason="counter_not_exposed")}constructor(e,n,r){this.session=e,this.boundary=n,this.seen=r}update(e,n=1/0){let r=e.filter(l=>Oe(l.seq)!==null&&l.seq>this.boundary&&l.seq<=n),s=r.find(l=>l.type==="turn/start")?.data?.turn,o=new Set(r.map(l=>l.data?.turn).filter(l=>Oe(l)!==null)),i=this.ownershipUncertain||o.size>1,a=new Map;for(let l of r){let c=l.data;if(!c||s!==void 0&&c.turn!==s)continue;let d=l.type==="assistant/message",u=d?c.usage:l.type==="assistant/chunk"&&c.chunk?.type==="usage"?c.chunk.usage:void 0;if(!u||typeof u!="object")continue;let f=Oe(c.turn)!==null&&Oe(c.step)!==null?["step",c.turn,c.step]:dr(c.message?.id)?["message",c.message.id]:["seq",l.seq],m=JSON.stringify([this.session,...f]);if(this.seen.has(m))continue;let p=a.get(m);(!p||d||!p.final)&&a.set(m,{record:l,final:d})}this.parts=new Map;for(let[l,{record:c,final:d}]of a){let u=c.data,f=d?u.usage:u.chunk.usage;this.parts.set(l,{...gw(),inputUncached:Oe(f.inputTokens),cacheRead:Oe(f.cacheReadTokens),output:Oe(f.outputTokens),reasoning:Oe(f.reasoningTokens),modelReported:dr(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Oe(m)===null)||Yt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Oe(f.reasoningTokens)!==null&&Oe(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=yw([...this.parts.values()]);return e&&this.ownershipUncertain&&(e.invalidCounters=!0,e.reason="counter_not_exposed"),this.latestSnapshot=e,e}finish(){for(let e of this.parts.keys())this.seen.add(e)}}});import{createInterface as sP}from"node:readline";function ur(t,e){let n=e.protocol??"acp",r=sP({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=oP++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});He({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1759
+ `:this.seedStdin;a&&s.stdin?.write(a),s.stdin?.end(),s.on("exit",(l,c)=>{if(l===0&&!c)r({success:!0});else{let d=Jr(i).trim(),u=Jr(o).trim(),f=d||u;r({success:!1,...n?.signal?.aborted?{errorCode:"ABORT_ERR"}:{},error:f?we(f,{provider:this.name}):c?`terminated by ${c}`:`exit code ${l}`})}}),s.on("error",l=>{r({success:!1,error:l.message,errorCode:l.code})})}))}resumeCommand(e,n){return this.resumeTemplate.replace(/\{\{session_id\}\}/g,e)}startCommand(e){return this.startTemplate}manualSeedHint(e){return{launchCommand:`cd ${e} && ${this.binary}`,postLaunchNote: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&&cw(r.userConfig,this.name)){let o=r.userConfig.tools[this.name];if(o?.agent)return this.runOneShotAgent(e,r,o.agent)}let s=r.timeoutMs??t.DEFAULT_IDLE_TIMEOUT_MS;return s<=0&&!r.signal?this.transportFn(e,{...r,binary:this.binary}):this.withTimeouts(s,e,r)}withTimeouts(e,n,r){let s=new AbortController,o,i,a="",l,c=r.sessionId,d,u=()=>{e<=0||(clearTimeout(o),o=setTimeout(()=>{r.onIdleWarning?.(e),f(),s.abort(),d&&d({text:a,...l?{usage:l}:{},sessionId:c,durationMs:e,status:"stalled",stalledAfterMs:e})},e))},f=()=>{clearTimeout(o)};r.signal&&(r.signal.aborted?(i="external",s.abort()):r.signal.addEventListener("abort",()=>{i="external",s.abort()},{once:!0})),u();let m={...r,binary:this.binary,signal:s.signal,onUsage:h=>{l=h,r.onUsage?.(h)},onSessionId:h=>{h&&(c=h),r.onSessionId?.(h)},onDelta:h=>{a+=h,u(),r.onDelta?.(h)},onProgress:h=>{h.kind!=="api_retry"&&u(),r.onProgress?.(h)}},p=this.transportFn(n,m).then(h=>(f(),{...h,status:h.status??"ok"})).catch(h=>{throw f(),i==="external"?Object.assign(new Yr("Turn cancelled","external"),{usage:h.usage??l,sessionId:c}):h}),_=new Promise(h=>{d=h});return Promise.race([p,_])}runOneShotAgent(e,n,r){let s=dw(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:uw(n.env),c=_w(s,{shell:!0,cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),stdio:["pipe","pipe","pipe"]}),d=!1,u=!1,f,m,p=!1,_=null,h=null,g=()=>{clearTimeout(f),f=setTimeout(()=>{!kf(y)&&!If(y)&&w(_,h)},100)},E=l>0?setTimeout(()=>{u=!0,c.kill(),this.name==="codex"&&w(null)},l):void 0,y="",T="";if(c.stdout?.on("data",S=>{let b=S.toString();y+=b,n.onDelta?.(b),p&&!d&&g()}),c.stderr?.on("data",S=>{T+=S.toString(),p&&!d&&g()}),n.signal){if(n.signal.aborted)return clearTimeout(E),c.kill(),a(new Error("Aborted"));n.signal.addEventListener("abort",()=>c.kill(),{once:!0})}let w=(S,b=null)=>{if(d)return;d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),this.name==="codex"&&(c.stdout?.destroy(),c.stderr?.destroy());let I=Date.now()-o,L=this.name==="codex"?iw(y):{};L.usage&&n.onUsage?.(L.usage),L.sessionId&&n.onSessionId?.(L.sessionId);let O=k=>Object.assign(k,{usage:L.usage,sessionId:L.sessionId??n.sessionId});if(this.name==="codex"&&n.signal?.aborted)a(O(new Yr("Turn cancelled","external")));else if(u)a(O(new Error(`Agent command timed out after ${l}ms`)));else if(S===0||S===null&&b===null)i({text:y.trim(),sessionId:L.sessionId??n.sessionId,durationMs:I,...L.usage?{usage:L.usage}:{}});else{let k=T.trim();a(O(new ve(k?we(k,{provider:this.name}):b?`Agent command terminated by ${b}`:`Agent command exited with code ${S}`,S,b,T)))}};this.name==="codex"?(c.on("close",(S,b)=>w(S,b)),c.on("exit",(S,b)=>{d||(p=!0,_=S,h=b,g(),m=setTimeout(()=>w(S,b),5e3))})):c.on("exit",(S,b)=>w(S,b)),c.on("error",S=>{d||(d=!0,clearTimeout(E),clearTimeout(f),clearTimeout(m),a(S))})})}}});function yw(t){if(!t.length)return;let e={...t[0]},n=new Set(t.map(r=>r.modelReported).filter(r=>r!==null));for(let r of t.slice(1)){for(let s of["inputUncached","cacheRead","cacheWrite","output","reasoning"]){let o=e[s],i=r[s];o!==null&&i!==null&&Oe(o+i)===null&&(e.invalidCounters=!0),e[s]=o===null||i===null?null:Oe(o+i)}e.invalidCounters||=r.invalidCounters,e.reason||=r.reason}return e.modelReported=n.size===1?[...n][0]:null,e.mixedModels=n.size>1,(e.invalidCounters||["inputUncached","cacheRead","cacheWrite","output"].some(r=>e[r]===null))&&(e.reason="counter_not_exposed"),e}var Oe,dr,gw,$l,Gs,Pl=x(()=>{"use strict";jo();Oe=t=>typeof t=="number"&&Number.isSafeInteger(t)&&t>=0?t:null,dr=t=>typeof t=="string"&&t.length>0&&t!=="<synthetic>"?t:null,gw=()=>({source:"wire",inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:null});$l=class{session;seen;parts=[];constructor(e,n){this.session=e,this.seen=n}event(e,n){if(e.sessionId!==this.session||e.turnId!==n||!e.usage||typeof e.usage!="object")return!1;let r=e.sourceRange,s=dr(r?.first?.id),o=dr(r?.last?.id),i=dr(r?.stream?.id),a=dr(r?.stream?.kind),l=s&&o&&i&&a?JSON.stringify([this.session,a,i,s,o]):dr(e.viewCursor)?JSON.stringify([this.session,e.viewCursor]):null;if(l&&this.seen.has(l))return!1;l&&this.seen.add(l);let c=e.usage,d=Oe(e.promptTokens),u=Oe(c.outputTokens),f=Oe(c.cacheReadTokens),m=Oe(c.cacheWriteTokens),p=d===0,_=f??(p?0:null),h=m??(p?0:null),g=d!==null&&_!==null&&h!==null&&_+h<=d?d-_-h:null,E=(_??0)>0||(h??0)>0,y={...gw(),inputUncached:g,cacheRead:_,cacheWrite:h,output:u,reasoning:Oe(c.reasoningTokens),modelReported:dr(e.modelId),invalidCounters:Yt([e.promptTokens,e.totalTokens,c.inputTokens,c.cachedTokens,c.cacheReadTokens,c.cacheWriteTokens,c.outputTokens,c.reasoningTokens])||E||g===null||u===null||Oe(e.totalTokens)!==null&&d!==null&&u!==null&&e.totalTokens!==d+u||Oe(c.reasoningTokens)!==null&&u!==null&&c.reasoningTokens>u};return this.parts.push(y),!0}usage(){return yw(this.parts)}},Gs=class{session;boundary;seen;parts=new Map;ownershipUncertain=!1;latestSnapshot;invalidateOwnership(){this.ownershipUncertain=!0,this.latestSnapshot&&(this.latestSnapshot.invalidCounters=!0,this.latestSnapshot.reason="counter_not_exposed")}constructor(e,n,r){this.session=e,this.boundary=n,this.seen=r}update(e,n=1/0){let r=e.filter(l=>Oe(l.seq)!==null&&l.seq>this.boundary&&l.seq<=n),s=r.find(l=>l.type==="turn/start")?.data?.turn,o=new Set(r.map(l=>l.data?.turn).filter(l=>Oe(l)!==null)),i=this.ownershipUncertain||o.size>1,a=new Map;for(let l of r){let c=l.data;if(!c||s!==void 0&&c.turn!==s)continue;let d=l.type==="assistant/message",u=d?c.usage:l.type==="assistant/chunk"&&c.chunk?.type==="usage"?c.chunk.usage:void 0;if(!u||typeof u!="object")continue;let f=Oe(c.turn)!==null&&Oe(c.step)!==null?["step",c.turn,c.step]:dr(c.message?.id)?["message",c.message.id]:["seq",l.seq],m=JSON.stringify([this.session,...f]);if(this.seen.has(m))continue;let p=a.get(m);(!p||d||!p.final)&&a.set(m,{record:l,final:d})}this.parts=new Map;for(let[l,{record:c,final:d}]of a){let u=c.data,f=d?u.usage:u.chunk.usage;this.parts.set(l,{...gw(),inputUncached:Oe(f.inputTokens),cacheRead:Oe(f.cacheReadTokens),output:Oe(f.outputTokens),reasoning:Oe(f.reasoningTokens),modelReported:dr(u.message?.source?.model),invalidCounters:i||[f.inputTokens,f.cacheReadTokens,f.outputTokens].some(m=>Oe(m)===null)||Yt([f.inputTokens,f.cacheReadTokens,f.outputTokens,f.reasoningTokens])||Oe(f.reasoningTokens)!==null&&Oe(f.outputTokens)!==null&&f.reasoningTokens>f.outputTokens})}}lastUsage(){let e=[...this.parts.values()].at(-1);return e?{...e}:void 0}usage(){let e=yw([...this.parts.values()]);return e&&this.ownershipUncertain&&(e.invalidCounters=!0,e.reason="counter_not_exposed"),this.latestSnapshot=e,e}finish(){for(let e of this.parts.keys())this.seen.add(e)}}});import{createInterface as sP}from"node:readline";function ur(t,e){let n=e.protocol??"acp",r=sP({input:t.stdout}),s=new Map,o=(a,l={},c)=>new Promise((d,u)=>{let f=oP++;s.set(f,{resolve:d,reject:u,onResponse:c});let m=JSON.stringify({jsonrpc:"2.0",id:f,method:a,params:l});He({event:`${n}_send`,direction:"SEND",provider:e.provider,method:a,id:f,params:l}),t.stdin?.write(`${m}
1760
1760
  `)}),i=(a,l={})=>{t.stdin?.write(`${JSON.stringify({jsonrpc:"2.0",method:a,params:l})}
1761
1761
  `)};return r.on("line",a=>{let l=u=>{if(!e.onProtocolError)return;let f=a.slice(0,512);U({event:`${n}_protocol_error`,provider:e.provider,reason:u,raw_preview:f,truncated:a.length>512}),e.onProtocolError(new Error(`${n.toUpperCase()} ${u}: ${JSON.stringify(f)}${a.length>512?" (truncated)":""}`))},c;try{c=JSON.parse(a)}catch{l("returned malformed JSON");return}if(!c||typeof c!="object"||Array.isArray(c)){l("returned an invalid message");return}if(He({event:`${n}_recv`,direction:"RECV",provider:e.provider,id:typeof c.id=="number"?c.id:void 0,method:typeof c.method=="string"?c.method:void 0,preview:JSON.stringify(c).slice(0,300)}),e.onEvent?.(c),typeof c.method!="string"&&typeof c.id=="number"&&s.has(c.id)){let u=s.get(c.id);s.delete(c.id);try{u.onResponse?.(c)}catch(f){u.reject(f instanceof Error?f:new Error(String(f)));return}if(c.error){let f=c.error,m=typeof f?.message=="string"&&f.message.length>0?f.message:JSON.stringify(c.error);u.reject(hi(`${n.toUpperCase()} RPC error: ${m}`,f))}else u.resolve(c);return}let d=c.method;if(!d){l("returned an uncorrelated response");return}if(typeof c.id=="number"||typeof c.id=="string"){U({event:`${n}_unhandled_request`,provider:e.provider,method:d,id:c.id,params:c.params});let u=JSON.stringify({jsonrpc:"2.0",id:c.id,error:{code:-32601,message:`Method not found: ${d} (lmctl does not implement server-side ${n.toUpperCase()} methods)`}});He({event:`${n}_send`,direction:"SEND",provider:e.provider,replyTo:c.id,error:"method not found"}),t.stdin?.write(`${u}
1762
- `);return}e.onNotification?.(c)}),{sendRpc:o,sendNotification:i,close(a=new Te(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var oP,Df=x(()=>{"use strict";re();cr();oP=1});import*as $f from"node:child_process";function aP(t){if(typeof $f.spawnSync=="function")try{$f.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function Ew(t){return t.exitCode!==null||t.signalCode!==null}function Mf(t,e){return Ew(t)?Promise.resolve(!0):new Promise(n=>{let r=!1,s=()=>{r||(r=!0,clearTimeout(o),n(!0))},o=setTimeout(()=>{r||(r=!0,t.removeListener("exit",s),n(!1))},e);t.once("exit",s)})}async function de(t,e={}){let n=Date.now(),r=e.stdinEnd!==!1,s=e.softDelayMs??5e3,o=e.killDelayMs??5e3,i=e.platform??process.platform,a=e.runTaskkill??aP;if(Ew(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,iP)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var iP,zr=x(()=>{"use strict";iP=1e3});async function Fl(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 on(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();fP(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function fP(t,e,n,r){let s=t.pollMs??lP,o=t.maxHoldMs??Ul,i=t.settleMs??cP,a=t.backgroundGraceMs??dP,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 Fl(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 g=a-(Date.now()-n);await new Promise(h=>setTimeout(h,Math.max(0,Math.min(s,uP,g))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),Ue(`${e.label}: dispatched work cleared \u2014 settling ${i}ms before closing stdin`));let p=Math.max(c,e.lastEventAtMs());if(!e.isTurnInFlight()&&Date.now()-p>=i)return d("cleared")}if(l||(l=!0,t.onHold?.(),Ue(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=o)return U({event:"transport_hold_open_max_wait",provider:e.label,elapsed_ms:Date.now()-n}),d("max-hold");let m=Math.max(0,Math.min(s,o-(Date.now()-n)));await new Promise(p=>setTimeout(p,m).unref?.())}}var lP,Ul,cP,dP,uP,Pf,_i=x(()=>{"use strict";re();lP=2e3,Ul=8*60*60*1e3,cP=5e3,dP=1e3,uP=50,Pf=Symbol("check-timed-out")});function Tw(t){ye()&&He({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function fr(t,e){let n=pP[t];if(n)return n[e]??n.yolo}function _P(t,e){if(e.length===0)return!0;for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let s=0;s<e.length;s++)if(t[n+s]!==e[s]){r=!1;break}if(r)return!0}return!1}function De(t,e,n="yolo"){if(hP.has(t)){Tw(`YOLO ${t} [mode=${n}]: ${t==="codex"?`JSON-RPC params (approvalPolicy=never, sandbox=${n==="plan"?"read-only":"danger-full-access"})`:t==="opencode"?".opencode/opencode.json (permission=allow)":t==="kimi"?`ACP session/set_config_option (configId=mode, value=${n==="plan"?"plan":"auto"})`:t==="dsh"?"DSH_PERMISSION_MODE=danger-full-access env var on the sidecar spawn \u2014 no argv flag":t==="hermes"?"HERMES_YOLO_MODE=1 shell gate + ACP session/set_mode (modeId=dont_ask) edit gate":t==="pi"?"no tool-permission prompts exist in pi by design \u2014 nothing to bypass":t==="muse"?"MSP approval mode plus fixed host sandbox/write/shell posture":t==="miniplayer"?"native tools always granted; no permission mode":"protocol/config (out-of-band)"} \u2014 no argv flag`);return}let r=n==="plan"?fr(t,"plan"):mP[t];if(!r){let s=`unknown provider "${t}" \u2014 YOLO contract not configured. Add an entry to YOLO_FLAGS in src/providers/yolo-contract.ts before spawning this provider.`;throw U({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new Te(s)}if(!_P(e,r)){let s=r.join(" "),o=`${t} spawn missing YOLO flag '${s}' \u2014 YOLO is mandatory for every provider; see src/providers/yolo-contract.ts. Got argv: [${e.map(i=>JSON.stringify(i)).join(", ")}]`;throw U({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:o}),new Te(o)}Tw(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var mP,pP,hP,an=x(()=>{"use strict";cr();re();mP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},pP={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"]}};hP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as gP}from"node:child_process";import{randomBytes as yP}from"node:crypto";import{realpath as jl}from"node:fs/promises";function gi(){let t=yP(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]:[]];De("muse",n,t.permissionMode??"yolo");let r=gP(t.progPath??"muse",n,{cwd:t.cwd,env:Ce(t.env,t.cwd,t.sessionId),stdio:["pipe","pipe","pipe"]}),s,o=new Set,i=new Set,a,l,c=!1,d=!1,u=!1,f=!1,m=0,p=uT(),g=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",v=>{p.append(v)});let _=(v,A,N)=>{if(s===v){if(s=void 0,v.id&&i.add(v.id),A){let R=v.usage.usage()??(v.outcome?{source:null,inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:"turn_not_completed"}:void 0);Object.assign(A,{usage:R?{...R,outcome:v.outcome}:void 0,sessionId:h})}else N&&(N.usage=v.usage.usage());v.cleanup(),v.drained(),v.settled||(v.settled=!0,A?v.reject(A):(m++,v.resolve(N)))}},E=v=>{a||(a=v,s&&_(s,a),T.close(a),!f&&!c&&de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},y=(v,A)=>{let N=A.params;if(!N||N.sessionId!==h)return;let R=A.method;if(R==="view/gap"||R==="session/closed"){E(new Error(`Muse ${R}: the conversation cannot continue without reopening`));return}if(R==="turn/unqueued"&&N.turnId===v.id){v.outcome="cancelled",_(v,new Yr("Muse queued turn cancelled","external"));return}R==="turn/started"&&N.turnId===v.id&&(v.queued=!1);let C=N.item,$=N.turnId??C?.turnId;if($&&$!==v.id||R==="session/tokenUsage"&&(v.settled||N.turnId!==v.id||!v.usage.event(N,v.id)))return;v.opts.onEvent?.(A);let P={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(R)&&C?.turnId===v.id&&typeof C.itemId=="string"){let M=v.items.get(C.itemId);if(M&&typeof C.revision=="number"&&C.revision<=M.revision)return;v.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&R!=="item/updated"?P={kind:R==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...R==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:A}:C.kind==="reasoning"?P={kind:"thinking",raw:A}:C.kind==="agentMessage"&&(P={kind:"text",raw:A})}else if(R==="item/delta"&&typeof N.itemId=="string"&&typeof N.delta=="string"){let M=v.items.get(N.itemId);if(!M)return;M.kind==="agentMessage"&&(N.field===void 0||N.field==="text")?(M.text=(M.text??"")+N.delta,v.cancelled||v.opts.onDelta?.(N.delta),P={kind:"text",raw:A}):M.kind==="reasoning"&&(P={kind:"thinking",raw:A})}if(v.cancelled||v.opts.onProgress?.(P),R!=="turn/completed"||N.turnId!==v.id)return;if(!["completed","failed","cancelled"].includes(N.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(N.terminal)}`));return}if(v.cancelled||N.terminal==="cancelled"){v.outcome="cancelled",_(v,new Yr("Muse turn cancelled",v.cancelled?"external":"provider"));return}if(N.terminal!=="completed"){v.outcome="error",_(v,new Error(N.error?.message??N.reason??`Muse turn ended with ${String(N.terminal)}`));return}let q=[...v.items.values()].filter(M=>M.kind==="agentMessage");_(v,void 0,{text:q.map(M=>typeof M.text=="string"?M.text:"").join(`
1763
- `),sessionId:h,durationMs:typeof N.durationMs=="number"?N.durationMs:Date.now()-v.started,stopReason:N.terminal,...q.some(M=>M.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=ur(r,{provider:"muse",protocol:"msp",onProtocolError:E,onNotification:v=>{if(g=Date.now(),v.method==="view/gap"||v.method==="session/closed"){v.params?.sessionId===h&&!c&&E(new Error(`Muse ${v.method}: session must be reopened`));return}let A=s;A&&(A.id?y(A,v):A.events.push(v))}}),w=async(v,A,N=gi())=>(await T.sendRpc(v,{...A,commandId:N})).result,S=v=>{!v.id||v.interruptSent||s!==v||(v.interruptSent=!0,w("turn/interrupt",{sessionId:h,turnId:v.id}).catch(A=>{s===v&&E(A instanceof Error?A:new Error(String(A)))}))},b=v=>{!v.id||v.unqueueSent||s!==v||(v.unqueueSent=!0,w("turn/unqueue",{sessionId:h,turnId:v.id}).catch(A=>{let N=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(N)?(v.queued=!1,S(v)):s===v&&E(A instanceof Error?A:new Error(N))}))},I=v=>{v.queued?b(v):S(v)};r.on("error",v=>E(new Error(`Unable to start Muse: ${v.message}`)));let L=()=>{c||f||a||u||(u=!0,de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(v=>E(v instanceof Error?v:new Error(String(v)))))};r.stdin.on("error",L),r.stdout.on("end",L),r.on("exit",()=>{f=!0}),r.on("close",(v,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(Ds(`Muse exited (${A??v}) after ${m} completed prompt(s)`,p.text().trim()?we(p.text(),{provider:"muse"}):""))),s&&_(s,new Error("Muse session closed"))});let O=()=>{if(l)return l;c=!0;let v=!!s;return s&&(s.cancelled=!0,I(s)),l=(async()=>{f||(await new Promise(A=>on(d?t.holdOpen:void 0,{isAborted:()=>v,hasChildExited:()=>f,isTurnInFlight:()=>!!s,lastEventAtMs:()=>g,closeStdin:()=>{r.stdin.end(),A()},label:"muse"})),await de(r,{stdinEnd:!1,softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{})),s&&_(s,new Error("Muse session closed")),T.close(new Error("Muse session closed"))})(),l},k=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",k,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let v=(await T.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(v?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof v.museHome!="string"||await jl(v.museHome)!==await jl(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(v.sessionDurability!==void 0&&v.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");T.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",R=(t.create?await w("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:A,...t.model?{modelId:t.model}:{}}):await w("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(R?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof R.workspaceRoot!="string"||await jl(R.workspaceRoot)!==await jl(t.cwd))throw new Error("Muse session belongs to a different working directory");if(R.activeTurnId||R.status!=="idle")throw new Error(`Muse session is not idle (${String(R.status)})`);if((await w("session/setApprovalMode",{sessionId:h,mode:A}))?.effectiveMode?.mode!==A)throw new Error("Muse did not apply the requested approval mode");if(!t.create&&t.model&&R.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...R.providerId?{providerId:R.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(v){throw await O(),a??v}finally{t.signal?.removeEventListener("abort",k)}return{provider:"muse",sessionId:h,get completedTurns(){return m},close:O,async sendTurn(v,A={}){if(s?.cancelled&&await s.drain,a)throw new Error(a.message);if(c)throw new Error("Muse session is closed");if(s)throw new Error("Muse already has an active turn");if(A.signal?.aborted)throw new Error("Aborted");return new Promise((N,R)=>{let C,$=new Promise(M=>{C=M}),P={usage:new $l(h,o),commandId:gi(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:N,reject:R,drain:$,drained:C,cleanup:()=>{}};s=P;let q=()=>{P.cancelled=!0,P.settled=!0,R(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),I(P)};P.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),w("turn/start",{sessionId:h,input:[{type:"text",text:v}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then(M=>{if(s===P){if(M?.commandId!==P.commandId||M.status!=="accepted"||!["started","queued"].includes(M.disposition)||typeof M.turnId!="string"||M.turnId.length===0||i.has(M.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=M.turnId,P.queued=M.disposition==="queued",P.cancelled&&I(P);for(let ue of P.events)s===P&&y(P,ue);P.events=[]}},M=>{s===P&&_(P,M instanceof Error?M:new Error(String(M)))})})}}}var ww=x(()=>{"use strict";Pl();Ye();Df();zr();Bt();_i();an();Tt()});import{join as Uf}from"node:path";import{mkdir as EP}from"node:fs/promises";function Ff(t={}){let e=Ta(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Dn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||gi(),a=await Wl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:Uf(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends ce{constructor(){super({provider:new Ea({museDataHome:e}),protocol:{transport:"muse-msp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"muse",seedArgs:[],startTemplate:"muse",resumeTemplate:"muse resume {{session_id}}",transport:r})}openSession(s){return Wl({...s,env:n(s.env),expectedHome:Uf(e,"muse")})}async seed(s,o){await EP(s,{recursive:!0});let i=gi(),a,l;try{a=await Wl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:Uf(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??Z,{signal:o?.signal});if(l=c.usage,await a.close(),!await this.load(i))throw new Error("Muse seed did not persist a readable native session");return{success:!0,sessionId:i,usage:c.usage}}catch(c){return{success:!1,sessionId:i,usage:c?.usage??l,error:`Muse seed failed: ${c instanceof Error?c.message:String(c)}`}}finally{await a?.close()}}}}var jf=x(()=>{"use strict";Ye();Kd();ww();Bs();Fe()});function Sw(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(`
1762
+ `);return}e.onNotification?.(c)}),{sendRpc:o,sendNotification:i,close(a=new Te(`${n.toUpperCase()} RPC channel closed`)){r.close();for(let l of s.values())l.reject(a);s.clear()}}}var oP,Df=x(()=>{"use strict";re();cr();oP=1});import*as $f from"node:child_process";function aP(t){if(typeof $f.spawnSync=="function")try{$f.spawnSync("taskkill",["/T","/F","/PID",String(t)],{windowsHide:!0})}catch{}}function Ew(t){return t.exitCode!==null||t.signalCode!==null}function Mf(t,e){return Ew(t)?Promise.resolve(!0):new Promise(n=>{let r=!1,s=()=>{r||(r=!0,clearTimeout(o),n(!0))},o=setTimeout(()=>{r||(r=!0,t.removeListener("exit",s),n(!1))},e);t.once("exit",s)})}async function de(t,e={}){let n=Date.now(),r=e.stdinEnd!==!1,s=e.softDelayMs??5e3,o=e.killDelayMs??5e3,i=e.platform??process.platform,a=e.runTaskkill??aP;if(Ew(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,iP)?{signal:"SIGKILL",elapsedMs:Date.now()-n}:{signal:"abandoned",elapsedMs:Date.now()-n}}var iP,zr=x(()=>{"use strict";iP=1e3});async function Fl(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 on(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();fP(t,e,s,r).catch(()=>{r({startedMs:s,held:!1,reason:"check-error"})})}async function fP(t,e,n,r){let s=t.pollMs??lP,o=t.maxHoldMs??Ul,i=t.settleMs??cP,a=t.backgroundGraceMs??dP,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 Fl(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,uP,_))).unref?.());continue}if(!l||i<=0)return d("cleared");c===null&&(c=Date.now(),Ue(`${e.label}: dispatched work cleared \u2014 settling ${i}ms before closing stdin`));let p=Math.max(c,e.lastEventAtMs());if(!e.isTurnInFlight()&&Date.now()-p>=i)return d("cleared")}if(l||(l=!0,t.onHold?.(),Ue(`${e.label}: deferring stdin close \u2014 outstanding dispatched work (poll ${s}ms)`)),Date.now()-n>=o)return U({event:"transport_hold_open_max_wait",provider:e.label,elapsed_ms:Date.now()-n}),d("max-hold");let m=Math.max(0,Math.min(s,o-(Date.now()-n)));await new Promise(p=>setTimeout(p,m).unref?.())}}var lP,Ul,cP,dP,uP,Pf,_i=x(()=>{"use strict";re();lP=2e3,Ul=8*60*60*1e3,cP=5e3,dP=1e3,uP=50,Pf=Symbol("check-timed-out")});function Tw(t){ye()&&He({event:"legacy",msg:`[debug] ${t}`},{always:!0})}function fr(t,e){let n=pP[t];if(n)return n[e]??n.yolo}function _P(t,e){if(e.length===0)return!0;for(let n=0;n+e.length<=t.length;n++){let r=!0;for(let s=0;s<e.length;s++)if(t[n+s]!==e[s]){r=!1;break}if(r)return!0}return!1}function De(t,e,n="yolo"){if(hP.has(t)){Tw(`YOLO ${t} [mode=${n}]: ${t==="codex"?`JSON-RPC params (approvalPolicy=never, sandbox=${n==="plan"?"read-only":"danger-full-access"})`:t==="opencode"?".opencode/opencode.json (permission=allow)":t==="kimi"?`ACP session/set_config_option (configId=mode, value=${n==="plan"?"plan":"auto"})`:t==="dsh"?"DSH_PERMISSION_MODE=danger-full-access env var on the sidecar spawn \u2014 no argv flag":t==="hermes"?"HERMES_YOLO_MODE=1 shell gate + ACP session/set_mode (modeId=dont_ask) edit gate":t==="pi"?"no tool-permission prompts exist in pi by design \u2014 nothing to bypass":t==="muse"?"MSP approval mode plus fixed host sandbox/write/shell posture":t==="miniplayer"?"native tools always granted; no permission mode":"protocol/config (out-of-band)"} \u2014 no argv flag`);return}let r=n==="plan"?fr(t,"plan"):mP[t];if(!r){let s=`unknown provider "${t}" \u2014 YOLO contract not configured. Add an entry to YOLO_FLAGS in src/providers/yolo-contract.ts before spawning this provider.`;throw U({event:"yolo_assert_failed",provider:t,reason:"unconfigured_provider",args:e.join(" "),message:s}),new Te(s)}if(!_P(e,r)){let s=r.join(" "),o=`${t} spawn missing YOLO flag '${s}' \u2014 YOLO is mandatory for every provider; see src/providers/yolo-contract.ts. Got argv: [${e.map(i=>JSON.stringify(i)).join(", ")}]`;throw U({event:"yolo_assert_failed",provider:t,reason:"flag_missing",required_flag:s,mode:n,args:e.join(" "),message:o}),new Te(o)}Tw(`YOLO ${t} [mode=${n}]: argv flag '${r.join(" ")}'`)}var mP,pP,hP,an=x(()=>{"use strict";cr();re();mP={claude:["--dangerously-skip-permissions"],qwen:["--approval-mode","yolo"],gemini:["-y"],copilot:["--yolo"],agy:["--dangerously-skip-permissions"],lmplayer:["--dangerously-skip-permissions"]},pP={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"]}};hP=new Set(["codex","opencode","kimi","dsh","hermes","pi","miniplayer","muse"])});import{spawn as gP}from"node:child_process";import{randomBytes as yP}from"node:crypto";import{realpath as jl}from"node:fs/promises";function gi(){let t=yP(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]:[]];De("muse",n,t.permissionMode??"yolo");let r=gP(t.progPath??"muse",n,{cwd:t.cwd,env:Ce(t.env,t.cwd,t.sessionId),stdio:["pipe","pipe","pipe"]}),s,o=new Set,i=new Set,a,l,c=!1,d=!1,u=!1,f=!1,m=0,p=uT(),_=Date.now(),h=t.sessionId;r.stderr.setEncoding("utf8"),r.stderr.on("data",v=>{p.append(v)});let g=(v,A,N)=>{if(s===v){if(s=void 0,v.id&&i.add(v.id),A){let R=v.usage.usage()??(v.outcome?{source:null,inputUncached:null,cacheRead:null,cacheWrite:null,output:null,reasoning:null,modelReported:null,providerCostUsd:null,reason:"turn_not_completed"}:void 0);Object.assign(A,{usage:R?{...R,outcome:v.outcome}:void 0,sessionId:h})}else N&&(N.usage=v.usage.usage());v.cleanup(),v.drained(),v.settled||(v.settled=!0,A?v.reject(A):(m++,v.resolve(N)))}},E=v=>{a||(a=v,s&&g(s,a),T.close(a),!f&&!c&&de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{}))},y=(v,A)=>{let N=A.params;if(!N||N.sessionId!==h)return;let R=A.method;if(R==="view/gap"||R==="session/closed"){E(new Error(`Muse ${R}: the conversation cannot continue without reopening`));return}if(R==="turn/unqueued"&&N.turnId===v.id){v.outcome="cancelled",g(v,new Yr("Muse queued turn cancelled","external"));return}R==="turn/started"&&N.turnId===v.id&&(v.queued=!1);let C=N.item,$=N.turnId??C?.turnId;if($&&$!==v.id||R==="session/tokenUsage"&&(v.settled||N.turnId!==v.id||!v.usage.event(N,v.id)))return;v.opts.onEvent?.(A);let P={kind:"other",raw:A};if(["item/started","item/updated","item/completed"].includes(R)&&C?.turnId===v.id&&typeof C.itemId=="string"){let M=v.items.get(C.itemId);if(M&&typeof C.revision=="number"&&C.revision<=M.revision)return;v.items.set(C.itemId,{...C}),(C.kind==="toolCall"||C.kind==="userShell")&&R!=="item/updated"?P={kind:R==="item/completed"?"tool_result":"tool_use",id:C.itemId,tool:C.tool??C.kind,summary:C.failureReason??C.fallbackText,...R==="item/completed"?{status:C.status==="completed"?"ok":"error"}:{},...C.durationMs!==void 0?{elapsedMs:C.durationMs}:{},raw:A}:C.kind==="reasoning"?P={kind:"thinking",raw:A}:C.kind==="agentMessage"&&(P={kind:"text",raw:A})}else if(R==="item/delta"&&typeof N.itemId=="string"&&typeof N.delta=="string"){let M=v.items.get(N.itemId);if(!M)return;M.kind==="agentMessage"&&(N.field===void 0||N.field==="text")?(M.text=(M.text??"")+N.delta,v.cancelled||v.opts.onDelta?.(N.delta),P={kind:"text",raw:A}):M.kind==="reasoning"&&(P={kind:"thinking",raw:A})}if(v.cancelled||v.opts.onProgress?.(P),R!=="turn/completed"||N.turnId!==v.id)return;if(!["completed","failed","cancelled"].includes(N.terminal)){E(new Error(`Muse returned an unknown turn terminal: ${String(N.terminal)}`));return}if(v.cancelled||N.terminal==="cancelled"){v.outcome="cancelled",g(v,new Yr("Muse turn cancelled",v.cancelled?"external":"provider"));return}if(N.terminal!=="completed"){v.outcome="error",g(v,new Error(N.error?.message??N.reason??`Muse turn ended with ${String(N.terminal)}`));return}let q=[...v.items.values()].filter(M=>M.kind==="agentMessage");g(v,void 0,{text:q.map(M=>typeof M.text=="string"?M.text:"").join(`
1763
+ `),sessionId:h,durationMs:typeof N.durationMs=="number"?N.durationMs:Date.now()-v.started,stopReason:N.terminal,...q.some(M=>M.truncated)?{warnings:["Muse reported a truncated response; inspect the native transcript for complete content"]}:{}})},T=ur(r,{provider:"muse",protocol:"msp",onProtocolError:E,onNotification:v=>{if(_=Date.now(),v.method==="view/gap"||v.method==="session/closed"){v.params?.sessionId===h&&!c&&E(new Error(`Muse ${v.method}: session must be reopened`));return}let A=s;A&&(A.id?y(A,v):A.events.push(v))}}),w=async(v,A,N=gi())=>(await T.sendRpc(v,{...A,commandId:N})).result,S=v=>{!v.id||v.interruptSent||s!==v||(v.interruptSent=!0,w("turn/interrupt",{sessionId:h,turnId:v.id}).catch(A=>{s===v&&E(A instanceof Error?A:new Error(String(A)))}))},b=v=>{!v.id||v.unqueueSent||s!==v||(v.unqueueSent=!0,w("turn/unqueue",{sessionId:h,turnId:v.id}).catch(A=>{let N=A instanceof Error?A.message:String(A);/already started|not queued|launch boundary|turn is running/i.test(N)?(v.queued=!1,S(v)):s===v&&E(A instanceof Error?A:new Error(N))}))},I=v=>{v.queued?b(v):S(v)};r.on("error",v=>E(new Error(`Unable to start Muse: ${v.message}`)));let L=()=>{c||f||a||u||(u=!0,de(r,{softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(v=>E(v instanceof Error?v:new Error(String(v)))))};r.stdin.on("error",L),r.stdout.on("end",L),r.on("exit",()=>{f=!0}),r.on("close",(v,A)=>{f=!0,c?T.close(new Error("Muse session closed")):E(new Error(Ds(`Muse exited (${A??v}) after ${m} completed prompt(s)`,p.text().trim()?we(p.text(),{provider:"muse"}):""))),s&&g(s,new Error("Muse session closed"))});let O=()=>{if(l)return l;c=!0;let v=!!s;return s&&(s.cancelled=!0,I(s)),l=(async()=>{f||(await new Promise(A=>on(d?t.holdOpen:void 0,{isAborted:()=>v,hasChildExited:()=>f,isTurnInFlight:()=>!!s,lastEventAtMs:()=>_,closeStdin:()=>{r.stdin.end(),A()},label:"muse"})),await de(r,{stdinEnd:!1,softDelayMs:t.closeTimeoutMs??2e3,killDelayMs:t.closeTimeoutMs??2e3}).catch(()=>{})),s&&g(s,new Error("Muse session closed")),T.close(new Error("Muse session closed"))})(),l},k=()=>{E(new Error("Aborted")),O()};t.signal?.addEventListener("abort",k,{once:!0});try{if(t.signal?.aborted)throw new Error("Aborted");let v=(await T.sendRpc("initialize",{clientInfo:{name:"lmctl",version:"1"}})).result;if(v?.schema?.version!==1)throw new Error("Muse MSP schema version is unsupported");if(t.expectedHome&&(typeof v.museHome!="string"||await jl(v.museHome)!==await jl(t.expectedHome)))throw new Error("Muse data home does not match the configured session reader");if(v.sessionDurability!==void 0&&v.sessionDurability!=="durable")throw new Error("Muse did not provide durable sessions");T.sendNotification("initialized");let A=e?"denyUnmatched":"allowAll",R=(t.create?await w("session/start",{sessionId:h,workspaceRoot:t.cwd,approvalMode:A,...t.model?{modelId:t.model}:{}}):await w("session/resume",{sessionId:h,excludeItems:!0}))?.session;if(R?.sessionId!==h)throw new Error(`Muse did not return requested session "${h}"`);if(typeof R.workspaceRoot!="string"||await jl(R.workspaceRoot)!==await jl(t.cwd))throw new Error("Muse session belongs to a different working directory");if(R.activeTurnId||R.status!=="idle")throw new Error(`Muse session is not idle (${String(R.status)})`);if((await w("session/setApprovalMode",{sessionId:h,mode:A}))?.effectiveMode?.mode!==A)throw new Error("Muse did not apply the requested approval mode");if(!t.create&&t.model&&R.modelId!==t.model&&(await w("session/setModel",{sessionId:h,model:{modelId:t.model,...R.providerId?{providerId:R.providerId}:{}}}))?.status!=="accepted")throw new Error("Muse did not accept the requested model");d=!0}catch(v){throw await O(),a??v}finally{t.signal?.removeEventListener("abort",k)}return{provider:"muse",sessionId:h,get completedTurns(){return m},close:O,async sendTurn(v,A={}){if(s?.cancelled&&await s.drain,a)throw new Error(a.message);if(c)throw new Error("Muse session is closed");if(s)throw new Error("Muse already has an active turn");if(A.signal?.aborted)throw new Error("Aborted");return new Promise((N,R)=>{let C,$=new Promise(M=>{C=M}),P={usage:new $l(h,o),commandId:gi(),events:[],items:new Map,opts:A,started:Date.now(),cancelled:!1,interruptSent:!1,unqueueSent:!1,queued:!1,settled:!1,resolve:N,reject:R,drain:$,drained:C,cleanup:()=>{}};s=P;let q=()=>{P.cancelled=!0,P.settled=!0,R(Object.assign(new Error("Aborted"),{usage:P.usage.usage(),sessionId:h})),I(P)};P.cleanup=()=>A.signal?.removeEventListener("abort",q),A.signal?.addEventListener("abort",q,{once:!0}),w("turn/start",{sessionId:h,input:[{type:"text",text:v}],...t.effort?{reasoningEffort:t.effort}:{}},P.commandId).then(M=>{if(s===P){if(M?.commandId!==P.commandId||M.status!=="accepted"||!["started","queued"].includes(M.disposition)||typeof M.turnId!="string"||M.turnId.length===0||i.has(M.turnId)){E(new Error("Muse did not admit a fresh turn; refusing ambiguous dispatch"));return}P.id=M.turnId,P.queued=M.disposition==="queued",P.cancelled&&I(P);for(let ue of P.events)s===P&&y(P,ue);P.events=[]}},M=>{s===P&&g(P,M instanceof Error?M:new Error(String(M)))})})}}}var ww=x(()=>{"use strict";Pl();Ye();Df();zr();Bt();_i();an();Tt()});import{join as Uf}from"node:path";import{mkdir as EP}from"node:fs/promises";function Ff(t={}){let e=Ta(t.museDataHome),n=s=>({...s??process.env,XDG_DATA_HOME:e}),r=async(s,o)=>{if(o.bundleSession)return Dn(o.bundleSession,"muse",o.sessionId,s,o);let i=o.sessionId||gi(),a=await Wl({...o,sessionId:i,create:o.sessionId==="",env:n(o.env),expectedHome:Uf(e,"muse")});try{return await a.sendTurn(s,o)}finally{await a.close()}};return new class extends ce{constructor(){super({provider:new Ea({museDataHome:e}),protocol:{transport:"muse-msp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"muse",seedArgs:[],startTemplate:"muse",resumeTemplate:"muse resume {{session_id}}",transport:r})}openSession(s){return Wl({...s,env:n(s.env),expectedHome:Uf(e,"muse")})}async seed(s,o){await EP(s,{recursive:!0});let i=gi(),a,l;try{a=await Wl({sessionId:i,cwd:s,create:!0,env:n(o?.env),signal:o?.signal,expectedHome:Uf(e,"muse"),model:o?.model,effort:o?.effort}),o?.signal?.throwIfAborted();try{o?.onDispatch?.()}catch{}let c=await a.sendTurn(o?.prompt??Z,{signal:o?.signal});if(l=c.usage,await a.close(),!await this.load(i))throw new Error("Muse seed did not persist a readable native session");return{success:!0,sessionId:i,usage:c.usage}}catch(c){return{success:!1,sessionId:i,usage:c?.usage??l,error:`Muse seed failed: ${c instanceof Error?c.message:String(c)}`}}finally{await a?.close()}}}}var jf=x(()=>{"use strict";Ye();Kd();ww();Bs();Fe()});function Sw(t){if(t.length===0)return"";if(t.length===1)return t[0];let e=[];for(let n=0;n<t.length;n++)n===0?e.push(t[n]):e.push(`
1764
1764
 
1765
1765
  --- additional response (turn ${n+1} of ${t.length}; likely an injected mid-call notification) ---
1766
1766
 
1767
- `+t[n]);return e.join("")}function Hl(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=Hf(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&&(vw(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 g=p?.content;if(Array.isArray(g))for(let h of g)h.type==="text"&&h.text&&t.onText?.(h.text)}if(m==="result"&&(r=!0,e.push(u),s)){vw(s,typeof u.session_id=="string"?u.session_id:n);let p=u.usage,g=u.total_cost_usd,h=typeof g=="number"&&Number.isFinite(g)&&g>=0,_=s.cost,E=h&&_!==null&&g>=_?g-_:null;if(s.cost=h?g: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),S=p.output_tokens_details,b={source:"wire",inputUncached:l(p.input_tokens),cacheRead:l(p.cache_read_input_tokens),cacheWrite:l(p.cache_creation_input_tokens),output:l(p.output_tokens),reasoning:l(S?.thinking_tokens),modelReported:null,providerCostUsd:E,reason:E===null?"cumulative_only":null,cacheWrite5m:w?.five??null,cacheWrite1h:w?.one??null,invalidCounters:Yt([p.input_tokens,p.cache_read_input_tokens,p.cache_creation_input_tokens,p.output_tokens,S?.thinking_tokens])};if([b.inputUncached,b.cacheRead,b.cacheWrite,b.output].includes(null)&&(b.reason="counter_not_exposed"),!o)o=b;else{for(let I of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])o[I]=c(o[I]??null,b[I]??null);o.reason=o.reason||b.reason,o.invalidCounters||=b.invalidCounters}}}},usage(){if(o)return{...o,modelReported:i.size>1?null:[...i][0]??s?.model??null,mixedModels:i.size>1}},sawResult(){return r},finalize(){if(!r)return null;let d=bw(e),u=Sw(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 bw(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 vw(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Hf(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 Bf=x(()=>{"use strict";jo();Sn()});import{spawn as kw}from"node:child_process";import{existsSync as Aw}from"node:fs";import{join as Bl}from"node:path";import{readdir as TP}from"node:fs/promises";function Nw(){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 Rw(){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 Lw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function vP(t){let e=t.stderr.trim(),n=t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`,r=`lmctl: ${t.tool} ${n} before returning a final result event.
1767
+ `+t[n]);return e.join("")}function Hl(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=Hf(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&&(vw(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)){vw(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),S=p.output_tokens_details,b={source:"wire",inputUncached:l(p.input_tokens),cacheRead:l(p.cache_read_input_tokens),cacheWrite:l(p.cache_creation_input_tokens),output:l(p.output_tokens),reasoning:l(S?.thinking_tokens),modelReported:null,providerCostUsd:E,reason:E===null?"cumulative_only":null,cacheWrite5m:w?.five??null,cacheWrite1h:w?.one??null,invalidCounters:Yt([p.input_tokens,p.cache_read_input_tokens,p.cache_creation_input_tokens,p.output_tokens,S?.thinking_tokens])};if([b.inputUncached,b.cacheRead,b.cacheWrite,b.output].includes(null)&&(b.reason="counter_not_exposed"),!o)o=b;else{for(let I of["inputUncached","cacheRead","cacheWrite","output","reasoning","cacheWrite5m","cacheWrite1h","providerCostUsd"])o[I]=c(o[I]??null,b[I]??null);o.reason=o.reason||b.reason,o.invalidCounters||=b.invalidCounters}}}},usage(){if(o)return{...o,modelReported:i.size>1?null:[...i][0]??s?.model??null,mixedModels:i.size>1}},sawResult(){return r},finalize(){if(!r)return null;let d=bw(e),u=Sw(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 bw(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 vw(t,e){e&&(t.sessionId!==null&&t.sessionId!==e&&(t.cost=null,t.model=null),t.sessionId=e)}function Hf(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 Bf=x(()=>{"use strict";jo();Sn()});import{spawn as kw}from"node:child_process";import{existsSync as Aw}from"node:fs";import{join as Bl}from"node:path";import{readdir as TP}from"node:fs/promises";function Nw(){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 Rw(){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 Lw(t){let n=t.message?.content;return Array.isArray(n)?n.some(r=>r?.type==="tool_use"):!1}function vP(t){let e=t.stderr.trim(),n=t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`,r=`lmctl: ${t.tool} ${n} before returning a final result event.
1768
1768
  One possible cause: the provider stream ended before a complete response was delivered; for Claude Code this can appear as "API Error: Stream idle timeout - partial response received".`;return e?`Original provider error:
1769
1769
  ${we(e,{provider:t.tool})}
1770
1770
 
1771
- ${r}`:r}function xw(t){let e=t.tool||"claude",n=t.binaryPath||wP[e]||"claude",r=["-p","","--output-format","stream-json","--input-format","stream-json"];e==="claude"&&r.push("--verbose"),t.sessionId&&r.push("--resume",t.sessionId),t.model&&r.push("--model",t.model);let s=t.permissionMode??"yolo",o=fr(e,s)??SP[e]??["--dangerously-skip-permissions"];if(r.push(...o),De(e,r,s),t.cwd&&!Aw(t.cwd))throw U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=Ce(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?hw(i):i}}function Cw(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=xw(e))}catch(H){return r(H instanceof Error?H:new Error(String(H)))}let c=kw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",H=>{Ue(`stream-json: stdin pipe error, ignored (exit handler reports): ${H.message}`)});let d=!1;if(e.signal){if(e.signal.aborted)return d=!0,U({event:"transport_abort",provider:o,phase:"pre_spawn"}),de(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,U({event:"transport_abort",provider:o}),de(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:$.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,g=!1,h="",_="",E,y,T=null,w=null,S=!1,b=!1,I=Nw(),L=Rw();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function k(){y!==void 0&&(clearTimeout(y),y=void 0)}let v=null;function A(){return f||d||$.sawResult()}function N(H){return H==="text_done"?I:L}async function R(H){if(H==="text_done"?E=void 0:y=void 0,A()||T!==null)return;v??=Date.now();let ne=N(H);if(e.holdOpen){let ze=(e.holdOpen.maxHoldMs??Ul)-(Date.now()-v),Qe=ze>0?await Fl(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),ze,e.signal):!1;if(A()||(H==="text_done"?E!==void 0:y!==void 0))return;if(Qe===!0){U({event:"transport_stall_grace_deferred",provider:o,grace_kind:H,grace_ms:ne,reason:"outstanding_dispatched_work"}),C(H);return}}w=H,T=H==="text_done"?`${o} finished responding but never emitted its closing result event (${ne}ms of silence after its last message)`:`${o} went silent mid-turn and never emitted its closing result event (${ne}ms of silence)`,U({event:"transport_stall_grace_fired",provider:o,grace_kind:H,grace_ms:ne}),de(c).catch(()=>{})}function C(H){let ne=setTimeout(()=>{R(H)},N(H));ne.unref?.(),H==="text_done"?(O(),E=ne):(k(),y=ne)}let $=Hl({usageState:o==="claude"?Wf(!!e.sessionId):void 0,onEvent:H=>{p=Date.now(),g=H.type!=="result",H.type==="system"&&H.subtype==="init"&&(_=H.session_id||_),H.type==="assistant"?(S=!Lw(H),b=S&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(S=!1,b=!1),O(),o==="claude"&&S&&!b&&!$.sawResult()&&C("text_done"),k(),o==="claude"&&!$.sawResult()&&C("tool_use_silence"),e.onEvent?.(H)},onText:H=>{h+=H,e.onText?.(H)}});function P(){m||(m=!0,on(e.holdOpen,{isAborted:()=>d,hasChildExited:()=>f,isTurnInFlight:()=>g,lastEventAtMs:()=>p,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function q(H){let ne=$.sawResult();$.processLine(H);let fe=$.usage();fe&&e.onUsage?.(fe),!ne&&$.sawResult()&&P()}c.stdout?.on("data",H=>{u+=H.toString();let ne=u.split(`
1772
- `);u=ne.pop()||"";for(let fe of ne)q(fe)});let M="";c.stderr?.on("data",H=>{M+=H.toString()}),c.on("error",H=>{U({event:"transport_error",provider:o,error_class:"TransportConnectionError",error_message:H.message}),r(new Te(`Failed to spawn ${i}: ${H.message}`,{cause:H}))}),c.on("exit",(H,ne)=>{if(f=!0,O(),k(),d)return;u.trim()&&q(u);let fe=$.finalize();if(fe?.isError)U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_result_error",error_message:fe.errorMessage}),r(Object.assign(new Error(`${o} reported an error for this turn (no assistant output)`+(e.sessionId?` \u2014 session=${e.sessionId}`:"")+`: ${fe.errorMessage??"unknown error"}`),{usage:fe.usage,sessionId:fe.sessionId}));else if(fe)Ue(`stream-json: result ${fe.result.slice(0,80)}${fe.result.length>80?"...":""} (${fe.durationMs}ms)`),n({result:fe.result,sessionId:fe.sessionId,durationMs:fe.durationMs,numTurns:fe.numTurns,usage:fe.usage,exitCode:H});else if(T!==null&&w==="text_done"&&h.trim().length>0)U({event:"transport_stall_finalized",provider:o,reason:T,text_len:h.length}),n({result:h,sessionId:_||e.sessionId||"",durationMs:Date.now()-s,numTurns:1,exitCode:H,warnings:[T]});else if(T!==null&&w==="tool_use_silence"){let ze=M.trim()?`
1771
+ ${r}`:r}function xw(t){let e=t.tool||"claude",n=t.binaryPath||wP[e]||"claude",r=["-p","","--output-format","stream-json","--input-format","stream-json"];e==="claude"&&r.push("--verbose"),t.sessionId&&r.push("--resume",t.sessionId),t.model&&r.push("--model",t.model);let s=t.permissionMode??"yolo",o=fr(e,s)??SP[e]??["--dangerously-skip-permissions"];if(r.push(...o),De(e,r,s),t.cwd&&!Aw(t.cwd))throw U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`,elapsed_ms:0}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});let i=Ce(t.env,t.cwd,t.sessionId);return{tool:e,binary:n,args:r,spawnEnv:e==="claude"?hw(i):i}}function Cw(t,e){return new Promise((n,r)=>{let s=Date.now(),o,i,a,l;try{({tool:o,binary:i,args:a,spawnEnv:l}=xw(e))}catch(H){return r(H instanceof Error?H:new Error(String(H)))}let c=kw(i,a,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:l});c.stdin?.on("error",H=>{Ue(`stream-json: stdin pipe error, ignored (exit handler reports): ${H.message}`)});let d=!1;if(e.signal){if(e.signal.aborted)return d=!0,U({event:"transport_abort",provider:o,phase:"pre_spawn"}),de(c).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{d=!0,U({event:"transport_abort",provider:o}),de(c).catch(()=>{}),r(Object.assign(new Error("Aborted"),{usage:$.usage()}))},{once:!0})}let u="",f=!1,m=!1,p=0,_=!1,h="",g="",E,y,T=null,w=null,S=!1,b=!1,I=Nw(),L=Rw();function O(){E!==void 0&&(clearTimeout(E),E=void 0)}function k(){y!==void 0&&(clearTimeout(y),y=void 0)}let v=null;function A(){return f||d||$.sawResult()}function N(H){return H==="text_done"?I:L}async function R(H){if(H==="text_done"?E=void 0:y=void 0,A()||T!==null)return;v??=Date.now();let ne=N(H);if(e.holdOpen){let ze=(e.holdOpen.maxHoldMs??Ul)-(Date.now()-v),Qe=ze>0?await Fl(Promise.resolve(e.holdOpen.hasOutstandingWork()).catch(()=>!1),ze,e.signal):!1;if(A()||(H==="text_done"?E!==void 0:y!==void 0))return;if(Qe===!0){U({event:"transport_stall_grace_deferred",provider:o,grace_kind:H,grace_ms:ne,reason:"outstanding_dispatched_work"}),C(H);return}}w=H,T=H==="text_done"?`${o} finished responding but never emitted its closing result event (${ne}ms of silence after its last message)`:`${o} went silent mid-turn and never emitted its closing result event (${ne}ms of silence)`,U({event:"transport_stall_grace_fired",provider:o,grace_kind:H,grace_ms:ne}),de(c).catch(()=>{})}function C(H){let ne=setTimeout(()=>{R(H)},N(H));ne.unref?.(),H==="text_done"?(O(),E=ne):(k(),y=ne)}let $=Hl({usageState:o==="claude"?Wf(!!e.sessionId):void 0,onEvent:H=>{p=Date.now(),_=H.type!=="result",H.type==="system"&&H.subtype==="init"&&(g=H.session_id||g),H.type==="assistant"?(S=!Lw(H),b=S&&H.message?.stop_reason==="pause_turn"):(H.type==="result"||H.type==="user")&&(S=!1,b=!1),O(),o==="claude"&&S&&!b&&!$.sawResult()&&C("text_done"),k(),o==="claude"&&!$.sawResult()&&C("tool_use_silence"),e.onEvent?.(H)},onText:H=>{h+=H,e.onText?.(H)}});function P(){m||(m=!0,on(e.holdOpen,{isAborted:()=>d,hasChildExited:()=>f,isTurnInFlight:()=>_,lastEventAtMs:()=>p,closeStdin:()=>{c.stdin?.end()},signal:e.signal,label:e.tool||"claude"}))}function q(H){let ne=$.sawResult();$.processLine(H);let fe=$.usage();fe&&e.onUsage?.(fe),!ne&&$.sawResult()&&P()}c.stdout?.on("data",H=>{u+=H.toString();let ne=u.split(`
1772
+ `);u=ne.pop()||"";for(let fe of ne)q(fe)});let M="";c.stderr?.on("data",H=>{M+=H.toString()}),c.on("error",H=>{U({event:"transport_error",provider:o,error_class:"TransportConnectionError",error_message:H.message}),r(new Te(`Failed to spawn ${i}: ${H.message}`,{cause:H}))}),c.on("exit",(H,ne)=>{if(f=!0,O(),k(),d)return;u.trim()&&q(u);let fe=$.finalize();if(fe?.isError)U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_result_error",error_message:fe.errorMessage}),r(Object.assign(new Error(`${o} reported an error for this turn (no assistant output)`+(e.sessionId?` \u2014 session=${e.sessionId}`:"")+`: ${fe.errorMessage??"unknown error"}`),{usage:fe.usage,sessionId:fe.sessionId}));else if(fe)Ue(`stream-json: result ${fe.result.slice(0,80)}${fe.result.length>80?"...":""} (${fe.durationMs}ms)`),n({result:fe.result,sessionId:fe.sessionId,durationMs:fe.durationMs,numTurns:fe.numTurns,usage:fe.usage,exitCode:H});else if(T!==null&&w==="text_done"&&h.trim().length>0)U({event:"transport_stall_finalized",provider:o,reason:T,text_len:h.length}),n({result:h,sessionId:g||e.sessionId||"",durationMs:Date.now()-s,numTurns:1,exitCode:H,warnings:[T]});else if(T!==null&&w==="tool_use_silence"){let ze=M.trim()?`
1773
1773
  ${we(M,{provider:o})}`:"",Qe=`${T} \u2014 a tool call was still in flight, so any streamed text is incomplete mid-turn narration, not a real answer`+(e.sessionId?` (session=${e.sessionId})`:"")+ze;U({event:"transport_error",provider:o,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:H,signal:ne,stderr_summary:Qe}),r(new ve(Qe,H,ne,M))}else{let ze=T!==null?`${T} \u2014 and produced no usable content to fall back on`+(e.sessionId?` (session=${e.sessionId})`:"")+(M.trim()?`
1774
1774
  ${we(M,{provider:o})}`:""):vP({tool:o,exitCode:H,signal:ne,stderr:M});U({event:"transport_error",provider:o,error_class:"Error",reason:T!==null?"provider_stalled_no_content":"provider_no_result",exit_code:H,signal:ne,stderr_summary:ze}),r(new ve(ze,H,ne,M))}});let ue=JSON.stringify({type:"user",message:{role:"user",content:t}});c.stdin?.write(ue+`
1775
- `),Ue(`stream-json: prompt sent (${t.length} chars)`)})}function bP(t){return t==="qwen"?[Bl(Q,".qwen","projects")]:[Bl(Q,".claude","projects")]}async function Iw(t,e,n){let r=n??bP(t),s=null;for(let a of r){let l;try{l=await TP(a)}catch{continue}for(let c of l){for(let d of[Bl(a,c,`${e}.jsonl`),Bl(a,c,"chats",`${e}.jsonl`)])if(Aw(d)){s=d;break}if(s!==null)break}if(s!==null)break}if(s===null)throw new Error(`stream-json bundle: no session file for session "${e}" under ${r.join(", ")} \u2014 the session must exist on disk before a bundle can resume it`);let i=(await Et(s,5).catch(()=>[])).map(a=>a?.sessionId).find(a=>typeof a=="string"&&a.length>0);if(i!==e)throw new Error(`stream-json bundle: session file ${s} header does not match the requested session (expected "${e}", header carries ${i??"no sessionId"}) \u2014 the session was likely re-seeded externally; aborting instead of writing into the wrong session`)}async function Ow(t){let{tool:e,binary:n,args:r,spawnEnv:s}=xw(t),o=kw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",F=>{Ue(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${F.message}`)});let a={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnActive:!1,completedTurns:0,closed:!1,closing:null},l=t.sessionId||"",c=e==="claude"?Wf(!!t.sessionId):void 0,d=c?.resultIds??new Set,u=null,f="";o.stderr?.on("data",F=>{f+=F.toString()});let m="",p="",g=!1,h=!1,_=null,E=null,y=null,T,w,S=Nw(),b=Rw(),I=null,L=[],O=()=>a.exited?Promise.resolve():new Promise(F=>{L.push(F)}),k=()=>new ve(`stream-json bundle process (${e}) exited${a.signal!==null?` by ${a.signal}`:a.exitCode!==null?` with code ${a.exitCode}`:""} after ${a.completedTurns} completed prompt(s); the bundle cannot continue`,a.exitCode,a.signal,f);function v(){T!==void 0&&(clearTimeout(T),T=void 0)}function A(){w!==void 0&&(clearTimeout(w),w=void 0)}function N(){return a.exited||I===null||I.aborted||I.processor.sawResult()}function R(F){return F==="text_done"?S:b}async function C(F){if(F==="text_done"?T=void 0:w=void 0,N()||_!==null)return;y??=Date.now();let j=R(F);if(t.holdOpen){let ke=(t.holdOpen.maxHoldMs??Ul)-(Date.now()-y),Pt=ke>0?await Fl(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),ke,void 0):!1;if(N()||(F==="text_done"?T!==void 0:w!==void 0))return;if(Pt===!0){U({event:"transport_stall_grace_deferred",provider:e,grace_kind:F,grace_ms:j,reason:"outstanding_dispatched_work"}),$(F);return}}E=F,_=F==="text_done"?`${e} finished responding but never emitted its closing result event (${j}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${j}ms of silence)`,U({event:"transport_stall_grace_fired",provider:e,grace_kind:F,grace_ms:j}),de(o).catch(()=>{})}function $(F){if(t.serviceHosted)return;let j=setTimeout(()=>{C(F)},R(F));j.unref?.(),F==="text_done"?(v(),T=j):(A(),w=j)}let P=!1,q,M,ue=new Promise((F,j)=>{q=F,M=j});ue.catch(()=>{});let H=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,M(new Error(`stream-json bundle: ${e} emitted no init event within the open timeout \u2014 cannot verify the resumed session identity`)))},t.closeTimeoutMs!==void 0?Math.max(t.closeTimeoutMs,5e3):3e4);H?.unref?.();function ne(F){P||(P=!0,H!==void 0&&clearTimeout(H),F?M(F):q())}let fe="";function ze(F){if(a.lastEventAtMs=Date.now(),F.type==="system"&&F.subtype==="init"){if(c&&typeof F.model=="string"&&(c.model=F.model),p=F.session_id||p,t.sessionId&&typeof F.session_id=="string"&&F.session_id.length>0&&F.session_id!==t.sessionId){let he=new Error(`stream-json bundle: provider resumed a different session (init reported "${F.session_id}", expected "${t.sessionId}")`);ne(he),de(o).catch(()=>{});return}ne()}let j=I?.processor.sawResult()??!0;F.type==="assistant"?(g=!Lw(F),h=g&&F.message?.stop_reason==="pause_turn"):(F.type==="result"||F.type==="user")&&(g=!1,h=!1),v(),e==="claude"&&a.turnActive&&g&&!h&&!j&&$("text_done"),A(),e==="claude"&&a.turnActive&&!j&&$("tool_use_silence")}function Qe(){let F=I;if(F===null)return;let j=F.processor.finalize();if(j!==null){if(I=null,a.turnActive=!1,v(),A(),j.isError){U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:j.errorMessage}),F.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${j.errorMessage??"unknown error"}`),{usage:j.usage,sessionId:j.sessionId}));return}a.completedTurns+=1,l=j.sessionId||l,Ue(`stream-json bundle: result ${j.result.slice(0,80)}${j.result.length>80?"...":""} (${j.durationMs}ms)`),F.resolve({result:j.result,sessionId:j.sessionId||l,durationMs:j.durationMs,numTurns:j.numTurns,usage:j.usage})}}function bo(F){if(!F.trim())return;let j;try{j=JSON.parse(F)}catch{return}let he=Hf(j,p||l);if(he&&d.has(he))return;let ke=I;if(ke===null&&he&&(d.add(he),c&&(c.cost=null)),ze(j),ke!==null){let Pt=ke.processor.sawResult();ke.processor.processLine(F),ke.onEventForward?.(j),!Pt&&ke.processor.sawResult()&&Qe()}}o.stdout?.on("data",F=>{fe+=F.toString();let j=fe.split(`
1776
- `);fe=j.pop()||"";for(let he of j)bo(he)}),o.on("error",F=>{if(u=new Te(`Failed to spawn ${n}: ${F.message}`,{cause:F}),U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:F.message}),ne(u),I!==null){let j=I;I=null,a.turnActive=!1,j.reject(u)}}),o.on("exit",(F,j)=>{a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),fe.trim()&&bo(fe),ne(a.exited&&!P?new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`exited (code ${String(F)})`} before its init event`,F,j):void 0);let he=I;if(he!==null&&(I=null,a.turnActive=!1,!he.aborted))if(_!==null&&E==="text_done"&&m.trim().length>0)U({event:"transport_stall_finalized",provider:e,reason:_,text_len:m.length}),he.resolve({result:m,sessionId:p||t.sessionId||"",durationMs:Date.now()-he.startMs,numTurns:1,warnings:[_]});else if(_!==null&&E==="tool_use_silence"){let ke=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:F,signal:j,...ke?{stderr_summary:ke}:{}}),he.reject(new ve(`${_} \u2014 a tool call was still in flight, so any streamed text is incomplete mid-turn narration, not a real answer`+(t.sessionId?` (session=${t.sessionId})`:"")+(ke?`
1777
- ${ke}`:""),F,j,f))}else{let ke=k(),Pt=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:_!==null?"provider_stalled_no_content":"provider_no_result",exit_code:F,signal:j,...Pt?{stderr_summary:Pt}:{}}),he.reject(new ve(Pt?`${ke.message}
1778
- ${Pt}`:ke.message,F,j,f))}for(let ke of L.splice(0))ke()}),o.on("close",(F,j)=>{if(!a.exited){a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),P||ne(new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`closed (code ${String(F)})`} before its init event`,F,j));for(let he of L.splice(0))he()}});try{t.sessionId&&await Iw(e,t.sessionId,t.sessionFileRoots),await ue}catch(F){let j=u??(F instanceof Error?F:new Error(String(F)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)o.stdin?.end(),await O();else{let he=t.closeTimeoutMs??2e3;await de(o,{softDelayMs:Math.min(1e3,he),killDelayMs:Math.min(1e3,he)}).catch(()=>{})}throw j}let Rr=F=>new Promise(j=>{setTimeout(j,F).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(F,j={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw k();if(I!==null)throw new Error(`stream-json bundle session (${e}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);let he=()=>(a.closed=!0,de(o).catch(()=>{}),new Error("Aborted"));if(j.signal?.aborted)throw he();if(t.sessionId&&(await Iw(e,t.sessionId,t.sessionFileRoots),a.exited))throw k();if(j.signal?.aborted)throw he();return m="",g=!1,h=!1,_=null,E=null,y=null,new Promise((ke,Pt)=>{let X_=Hl({usageState:c,resultIds:d,sessionId:p||l,onText:q_=>{m+=q_,j.onText?.(q_)}}),jd={processor:X_,resolve:ke,reject:Pt,startMs:Date.now(),aborted:!1,onEventForward:j.onEvent};I=jd,a.turnActive=!0;let YR=()=>{jd.aborted=!0,U({event:"transport_abort",provider:e}),a.closed=!0,de(o).catch(()=>{}),I===jd&&(I=null,a.turnActive=!1),Pt(Object.assign(new Error("Aborted"),{usage:X_.usage()}))};j.signal?.addEventListener("abort",YR,{once:!0});let zR=JSON.stringify({type:"user",message:{role:"user",content:F}});o.stdin?.write(`${zR}
1775
+ `),Ue(`stream-json: prompt sent (${t.length} chars)`)})}function bP(t){return t==="qwen"?[Bl(Q,".qwen","projects")]:[Bl(Q,".claude","projects")]}async function Iw(t,e,n){let r=n??bP(t),s=null;for(let a of r){let l;try{l=await TP(a)}catch{continue}for(let c of l){for(let d of[Bl(a,c,`${e}.jsonl`),Bl(a,c,"chats",`${e}.jsonl`)])if(Aw(d)){s=d;break}if(s!==null)break}if(s!==null)break}if(s===null)throw new Error(`stream-json bundle: no session file for session "${e}" under ${r.join(", ")} \u2014 the session must exist on disk before a bundle can resume it`);let i=(await Et(s,5).catch(()=>[])).map(a=>a?.sessionId).find(a=>typeof a=="string"&&a.length>0);if(i!==e)throw new Error(`stream-json bundle: session file ${s} header does not match the requested session (expected "${e}", header carries ${i??"no sessionId"}) \u2014 the session was likely re-seeded externally; aborting instead of writing into the wrong session`)}async function Ow(t){let{tool:e,binary:n,args:r,spawnEnv:s}=xw(t),o=kw(n,r,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:s}),i=Date.now();o.stdin?.on("error",F=>{Ue(`stream-json bundle: stdin pipe error, ignored (exit handler reports): ${F.message}`)});let a={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnActive:!1,completedTurns:0,closed:!1,closing:null},l=t.sessionId||"",c=e==="claude"?Wf(!!t.sessionId):void 0,d=c?.resultIds??new Set,u=null,f="";o.stderr?.on("data",F=>{f+=F.toString()});let m="",p="",_=!1,h=!1,g=null,E=null,y=null,T,w,S=Nw(),b=Rw(),I=null,L=[],O=()=>a.exited?Promise.resolve():new Promise(F=>{L.push(F)}),k=()=>new ve(`stream-json bundle process (${e}) exited${a.signal!==null?` by ${a.signal}`:a.exitCode!==null?` with code ${a.exitCode}`:""} after ${a.completedTurns} completed prompt(s); the bundle cannot continue`,a.exitCode,a.signal,f);function v(){T!==void 0&&(clearTimeout(T),T=void 0)}function A(){w!==void 0&&(clearTimeout(w),w=void 0)}function N(){return a.exited||I===null||I.aborted||I.processor.sawResult()}function R(F){return F==="text_done"?S:b}async function C(F){if(F==="text_done"?T=void 0:w=void 0,N()||g!==null)return;y??=Date.now();let j=R(F);if(t.holdOpen){let ke=(t.holdOpen.maxHoldMs??Ul)-(Date.now()-y),Pt=ke>0?await Fl(Promise.resolve(t.holdOpen.hasOutstandingWork()).catch(()=>!1),ke,void 0):!1;if(N()||(F==="text_done"?T!==void 0:w!==void 0))return;if(Pt===!0){U({event:"transport_stall_grace_deferred",provider:e,grace_kind:F,grace_ms:j,reason:"outstanding_dispatched_work"}),$(F);return}}E=F,g=F==="text_done"?`${e} finished responding but never emitted its closing result event (${j}ms of silence after its last message)`:`${e} went silent mid-turn and never emitted its closing result event (${j}ms of silence)`,U({event:"transport_stall_grace_fired",provider:e,grace_kind:F,grace_ms:j}),de(o).catch(()=>{})}function $(F){if(t.serviceHosted)return;let j=setTimeout(()=>{C(F)},R(F));j.unref?.(),F==="text_done"?(v(),T=j):(A(),w=j)}let P=!1,q,M,ue=new Promise((F,j)=>{q=F,M=j});ue.catch(()=>{});let H=t.serviceHosted&&t.closeTimeoutMs===void 0?void 0:setTimeout(()=>{P||(P=!0,M(new Error(`stream-json bundle: ${e} emitted no init event within the open timeout \u2014 cannot verify the resumed session identity`)))},t.closeTimeoutMs!==void 0?Math.max(t.closeTimeoutMs,5e3):3e4);H?.unref?.();function ne(F){P||(P=!0,H!==void 0&&clearTimeout(H),F?M(F):q())}let fe="";function ze(F){if(a.lastEventAtMs=Date.now(),F.type==="system"&&F.subtype==="init"){if(c&&typeof F.model=="string"&&(c.model=F.model),p=F.session_id||p,t.sessionId&&typeof F.session_id=="string"&&F.session_id.length>0&&F.session_id!==t.sessionId){let he=new Error(`stream-json bundle: provider resumed a different session (init reported "${F.session_id}", expected "${t.sessionId}")`);ne(he),de(o).catch(()=>{});return}ne()}let j=I?.processor.sawResult()??!0;F.type==="assistant"?(_=!Lw(F),h=_&&F.message?.stop_reason==="pause_turn"):(F.type==="result"||F.type==="user")&&(_=!1,h=!1),v(),e==="claude"&&a.turnActive&&_&&!h&&!j&&$("text_done"),A(),e==="claude"&&a.turnActive&&!j&&$("tool_use_silence")}function Qe(){let F=I;if(F===null)return;let j=F.processor.finalize();if(j!==null){if(I=null,a.turnActive=!1,v(),A(),j.isError){U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_result_error",error_message:j.errorMessage}),F.reject(Object.assign(new Error(`${e} reported an error for this turn (no assistant output)`+(t.sessionId?` \u2014 session=${t.sessionId}`:"")+`: ${j.errorMessage??"unknown error"}`),{usage:j.usage,sessionId:j.sessionId}));return}a.completedTurns+=1,l=j.sessionId||l,Ue(`stream-json bundle: result ${j.result.slice(0,80)}${j.result.length>80?"...":""} (${j.durationMs}ms)`),F.resolve({result:j.result,sessionId:j.sessionId||l,durationMs:j.durationMs,numTurns:j.numTurns,usage:j.usage})}}function bo(F){if(!F.trim())return;let j;try{j=JSON.parse(F)}catch{return}let he=Hf(j,p||l);if(he&&d.has(he))return;let ke=I;if(ke===null&&he&&(d.add(he),c&&(c.cost=null)),ze(j),ke!==null){let Pt=ke.processor.sawResult();ke.processor.processLine(F),ke.onEventForward?.(j),!Pt&&ke.processor.sawResult()&&Qe()}}o.stdout?.on("data",F=>{fe+=F.toString();let j=fe.split(`
1776
+ `);fe=j.pop()||"";for(let he of j)bo(he)}),o.on("error",F=>{if(u=new Te(`Failed to spawn ${n}: ${F.message}`,{cause:F}),U({event:"transport_error",provider:e,error_class:"TransportConnectionError",error_message:F.message}),ne(u),I!==null){let j=I;I=null,a.turnActive=!1,j.reject(u)}}),o.on("exit",(F,j)=>{a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),fe.trim()&&bo(fe),ne(a.exited&&!P?new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`exited (code ${String(F)})`} before its init event`,F,j):void 0);let he=I;if(he!==null&&(I=null,a.turnActive=!1,!he.aborted))if(g!==null&&E==="text_done"&&m.trim().length>0)U({event:"transport_stall_finalized",provider:e,reason:g,text_len:m.length}),he.resolve({result:m,sessionId:p||t.sessionId||"",durationMs:Date.now()-he.startMs,numTurns:1,warnings:[g]});else if(g!==null&&E==="tool_use_silence"){let ke=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:"provider_stalled_mid_turn",exit_code:F,signal:j,...ke?{stderr_summary:ke}:{}}),he.reject(new ve(`${g} \u2014 a tool call was still in flight, so any streamed text is incomplete mid-turn narration, not a real answer`+(t.sessionId?` (session=${t.sessionId})`:"")+(ke?`
1777
+ ${ke}`:""),F,j,f))}else{let ke=k(),Pt=f.trim()?we(f,{provider:e}):"";U({event:"transport_error",provider:e,error_class:"Error",reason:g!==null?"provider_stalled_no_content":"provider_no_result",exit_code:F,signal:j,...Pt?{stderr_summary:Pt}:{}}),he.reject(new ve(Pt?`${ke.message}
1778
+ ${Pt}`:ke.message,F,j,f))}for(let ke of L.splice(0))ke()}),o.on("close",(F,j)=>{if(!a.exited){a.exited=!0,a.exitCode=F,a.signal=j,v(),A(),P||ne(new ve(`stream-json bundle: ${e} ${j?`terminated by ${j}`:`closed (code ${String(F)})`} before its init event`,F,j));for(let he of L.splice(0))he()}});try{t.sessionId&&await Iw(e,t.sessionId,t.sessionFileRoots),await ue}catch(F){let j=u??(F instanceof Error?F:new Error(String(F)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)o.stdin?.end(),await O();else{let he=t.closeTimeoutMs??2e3;await de(o,{softDelayMs:Math.min(1e3,he),killDelayMs:Math.min(1e3,he)}).catch(()=>{})}throw j}let Rr=F=>new Promise(j=>{setTimeout(j,F).unref?.()});return{tool:e,get sessionId(){return l},get completedTurns(){return a.completedTurns},async sendTurn(F,j={}){if(a.closed||a.closing!==null)throw new Error(`stream-json bundle session (${e}) is closed`);if(a.exited)throw k();if(I!==null)throw new Error(`stream-json bundle session (${e}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);let he=()=>(a.closed=!0,de(o).catch(()=>{}),new Error("Aborted"));if(j.signal?.aborted)throw he();if(t.sessionId&&(await Iw(e,t.sessionId,t.sessionFileRoots),a.exited))throw k();if(j.signal?.aborted)throw he();return m="",_=!1,h=!1,g=null,E=null,y=null,new Promise((ke,Pt)=>{let X_=Hl({usageState:c,resultIds:d,sessionId:p||l,onText:q_=>{m+=q_,j.onText?.(q_)}}),jd={processor:X_,resolve:ke,reject:Pt,startMs:Date.now(),aborted:!1,onEventForward:j.onEvent};I=jd,a.turnActive=!0;let YR=()=>{jd.aborted=!0,U({event:"transport_abort",provider:e}),a.closed=!0,de(o).catch(()=>{}),I===jd&&(I=null,a.turnActive=!1),Pt(Object.assign(new Error("Aborted"),{usage:X_.usage()}))};j.signal?.addEventListener("abort",YR,{once:!0});let zR=JSON.stringify({type:"user",message:{role:"user",content:F}});o.stdin?.write(`${zR}
1779
1779
  `),Ue(`stream-json bundle: prompt sent (${F.length} chars)`)})},close(){return a.closing!==null||(a.closing=(async()=>{if(a.closed=!0,!a.exited&&(t.holdOpen!==void 0?await new Promise(F=>{on(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>a.exited,isTurnInFlight:()=>a.turnActive,lastEventAtMs:()=>a.lastEventAtMs,closeStdin:()=>{o.stdin?.end(),F()},label:e})}):o.stdin?.end(),!a.exited)){let F=t.closeTimeoutMs;if(F===void 0&&t.serviceHosted)await O();else{let j=F??2e3;await Promise.race([O(),Rr(j)]),a.exited||await de(o,{stdinEnd:!1,softDelayMs:Math.min(1e3,j),killDelayMs:Math.min(1e3,j)}).catch(()=>{})}}})()),a.closing}}}var wP,SP,Xf=x(()=>{"use strict";cr();zr();an();re();_i();Bt();Bf();Re();Tt();Bf();wP={claude:"claude",qwen:"qwen"};SP={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 Dw(t="0.0.0"){return{clientInfo:{name:"lmctl",title:"lmctl",version:t},capabilities:{experimentalApi:!1}}}function ql(){return{agentItems:new Map,resultText:""}}function Vs(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 Mw(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=Mw(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 $w}from"node:child_process";import{createInterface as Pw}from"node:readline";import{existsSync as IP,readFileSync as kP}from"node:fs";import{fileURLToPath as AP}from"node:url";function Uw(){return Dw(NP)}function mr(t,e){Ue(`[codex:${t}] ${JSON.stringify(e)}`)}function RP(t){let e=t.stderr.trim(),n=`lmctl: codex app-server ${t.signal?`terminated by ${t.signal}`:`exited with code ${t.exitCode}`} before completing the turn.
1780
1780
  One possible cause: Codex stopped before delivering a terminal turn/completed event.`;return e?`Original provider error:
1781
1781
  ${we(e,{provider:"codex"})}
1782
1782
 
1783
- ${n}`:n}function Fw(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),ye()&&Ke(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(De("codex",n,o),t.cwd&&!IP(t.cwd))throw U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:i,permissionMode:o,spawnEnv:Ce(t.env,t.cwd,t.threadId)}}function jw(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 Ww(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=Fw(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=$w(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:Ce(e.env,e.cwd,e.threadId)}),l=bf(),c=l.turn(e.threadId||""),d=O=>Object.assign(O,{usage:c.usage(),sessionId:g}),u=!1;if(e.signal){if(e.signal.aborted)return u=!0,U({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),de(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,U({event:"transport_abort",provider:"codex"}),de(a).catch(()=>{}),r(d(new Error("Aborted")))},{once:!0})}let f=Pw({input:a.stdout}),m=new Map,p=1,g=e.threadId||"",h="",_=!1,E=!1,y=Date.now(),T=ql(),w=Vl();function S(O,k={}){return new Promise((v,A)=>{let N=p++;m.set(N,{resolve:v,reject:A});let R=JSON.stringify({jsonrpc:"2.0",id:N,method:O,params:k});a.stdin?.write(R+`
1783
+ ${n}`:n}function Fw(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),ye()&&Ke(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(De("codex",n,o),t.cwd&&!IP(t.cwd))throw U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:`sessiondir missing: ${t.cwd}`}),new Te(`sessiondir missing: ${t.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:e,codexArgs:n,sandbox:i,permissionMode:o,spawnEnv:Ce(t.env,t.cwd,t.threadId)}}function jw(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 Ww(t,e){return new Promise((n,r)=>{let s,o,i;try{({binary:s,codexArgs:o,sandbox:i}=Fw(e))}catch(O){return r(O instanceof Error?O:new Error(String(O)))}let a=$w(s,o,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:Ce(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,U({event:"transport_abort",provider:"codex",phase:"pre_spawn"}),de(a).catch(()=>{}),r(new Error("Aborted"));e.signal.addEventListener("abort",()=>{u=!0,U({event:"transport_abort",provider:"codex"}),de(a).catch(()=>{}),r(d(new Error("Aborted")))},{once:!0})}let f=Pw({input:a.stdout}),m=new Map,p=1,_=e.threadId||"",h="",g=!1,E=!1,y=Date.now(),T=ql(),w=Vl();function S(O,k={}){return new Promise((v,A)=>{let N=p++;m.set(N,{resolve:v,reject:A});let R=JSON.stringify({jsonrpc:"2.0",id:N,method:O,params:k});a.stdin?.write(R+`
1784
1784
  `)})}function b(O,k={}){let v=JSON.stringify({jsonrpc:"2.0",method:O,params:k});a.stdin?.write(v+`
1785
- `)}f.on("line",O=>{let k;try{k=JSON.parse(O)}catch{return}if(typeof k.id=="number"&&m.has(k.id)){jw(l,k);let R=m.get(k.id);if(m.delete(k.id),k.error){let C=k.error,$=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(k.error);R.reject(hi(`codex app-server error: ${$}`,C))}else R.resolve(k);e.onEvent?.(k);return}let v=k.method;if(!v){e.onEvent?.(k);return}if(u||!c.event(k))return;let A=c.usage();if(A&&e.onUsage?.(A),v==="thread/started"){let C=k.params?.thread;C?.id&&(g=C.id,e.onSessionId?.(g))}let N=ye()?R=>{mr("item.text/buffer-mismatch",{itemId:R.itemId,threadId:R.threadId??null,turnId:R.turnId??null,expectedFromItemText:R.expectedFromItemText,gotFromBuffer:R.gotFromBuffer,expectedLen:R.expectedFromItemText.length,gotLen:R.gotFromBuffer.length})}:void 0;if(v==="turn/started"){let R=k.params,C=R?.turn;C?.id&&(h=C.id),Vs(k,T,e.onDelta,N),ye()&&mr("turn/started",{params:R??null})}if(ye()&&(v==="item/started"||v==="item/completed")){let R=k.params;R?.item?.type==="agentMessage"&&mr(v,{params:R??null})}if(v==="item/started"||v==="item/agentMessage/delta"||v==="item/completed"){if(v==="item/agentMessage/delta"){let R=k.params;ye()&&mr("agentMessage/delta",{params:R??null})}Vs(k,T,e.onDelta,N)}if(v==="turn/completed"){c.finish();let R=k.params;if(ye())for(let[$,P]of T.agentItems.entries())P.buffer&&mr("turn/completed/unflushed-item",{itemId:$,phase:P.phase,bufferLen:P.buffer.length});Gl(T),ye()&&mr("turn/completed",{params:R??null});let C=Kl(k,w);C.shouldReject?(ye()&&mr("turn/completed/terminal-reject",{message:C.turnError.message}),E=!0,_=!0,a.stdin?.end(),r(d(C.turnError))):(_=!0,a.stdin?.end())}if(v==="error"){let R=Jl(k,w);if(ye()){let C=k.params,$=C?.error,P=typeof $?.message=="string"?$.message:"(no message)";mr(R.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:R.willRetry,params:C??null})}}e.onEvent?.(k)});let I="";a.stderr?.on("data",O=>{I+=O.toString()});let L=O=>{U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let k=new Te(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let v of m.values())v.reject(d(k));m.clear(),r(d(k))};a.on("error",L),a.stdin?.on("error",L),a.on("exit",(O,k)=>{if(u||E)return;if(_){n({result:T.resultText,usage:c.usage(),threadId:g,turnId:h,durationMs:Date.now()-y,exitCode:O});return}if(w.pendingCodexError){r(d(w.pendingCodexError));return}let v=RP({exitCode:O,signal:k,stderr:I});U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:k,stderr_summary:v}),r(d(new ve(v,O,k,I)))}),(async()=>{try{if(await S("initialize",Uw()),b("initialized",{}),e.threadId)try{let O=S("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),k,v=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((A,N)=>{k=setTimeout(()=>N(new Error("resume timeout")),3e4)});try{let N=(await Promise.race([O,v])).result?.thread?.id;if(e.requireResume&&N!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${N??"unknown"}")`)}finally{clearTimeout(k)}g=e.threadId,e.onSessionId?.(g)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1786
- `),U({event:"codex_thread_resume_fallback",provider:"codex",thread_id:e.threadId,error_message:O instanceof Error?O.message:String(O)});let v=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;v?.id&&(g=v.id,e.onSessionId?.(g))}else{let k=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;k?.id&&(g=k.id,e.onSessionId?.(g))}c=l.turn(g),await S("turn/start",{threadId:g,input:[{type:"text",text:t}],...e.model?{model:e.model}:{}})}catch(O){de(a).catch(()=>{}),r(O instanceof Error?O:new Error(String(O)))}})()})}async function Hw(t){let{binary:e,codexArgs:n,sandbox:r}=Fw(t),s=$w(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ce(t.env,t.cwd,t.threadId)}),o=Date.now(),i={exited:!1,exitCode:null,signal:null,completedTurns:0,closed:!1,closing:null},a=t.threadId||"",l=bf(),c=null,d="";s.stderr?.on("data",k=>{d+=k.toString()});let u=Pw({input:s.stdout}),f=new Map,m=1;function p(k,v={}){return new Promise((A,N)=>{let R=m++;f.set(R,{resolve:A,reject:N});let C=JSON.stringify({jsonrpc:"2.0",id:R,method:k,params:v});s.stdin?.write(C+`
1787
- `)})}function g(k,v={}){let A=JSON.stringify({jsonrpc:"2.0",method:k,params:v});s.stdin?.write(A+`
1788
- `)}let h=[],_=()=>i.exited?Promise.resolve():new Promise(k=>{h.push(k)}),E=()=>new ve(`codex bundle process exited${i.signal!==null?` by ${i.signal}`:i.exitCode!==null?` with code ${i.exitCode}`:""} after ${i.completedTurns} completed prompt(s); the bundle cannot continue`,i.exitCode,i.signal,d),y=null,T=null,w,S,b=k=>{k.turnId&&p("turn/interrupt",{threadId:a,turnId:k.turnId}).catch(()=>{})};function I(k){let v=y;v===null||v.settled||(v.settled=!0,y=null,v.usage.finish(),k&&v.reject(Object.assign(k,{usage:v.usage.usage(),sessionId:a})))}u.on("line",k=>{let v;try{v=JSON.parse(k)}catch{return}if(typeof v.id=="number"&&f.has(v.id)){jw(l,v);let P=f.get(v.id);if(f.delete(v.id),v.error){let q=v.error,M=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(v.error);P.reject(hi(`codex app-server error: ${M}`,q))}else P.resolve(v);y?.onEvent?.(v);return}let A=v.method;if(!A){y?.onEvent?.(v);return}if(A==="thread/started"){let q=v.params?.thread;q?.id&&(a=q.id,t.onSessionId?.(a))}let N=v.params,R=N?.turnId??N?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&R&&(T.usage.bind(R),T.usage.finish(),T.turnId=R,b(T)),A==="turn/completed"&&R===T.turnId&&(l.remember(a,R),T=null,S?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let C=y;if(R&&C?.turnId&&R!==C.turnId||C!==null&&!C.usage.event(v))return;let $=C?.usage.usage();if($&&C?.onUsage?.($),A==="turn/started"&&C!==null){let q=v.params?.turn;q?.id&&(C.turnId=q.id),Vs(v,C.agentState,C.onDelta,void 0)}if(C!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&Vs(v,C.agentState,C.onDelta,void 0),A==="turn/completed"&&C!==null&&!C.settled){Gl(C.agentState);let P=Kl(v,C.turnState);C.settled=!0,C.usage.finish(),y=null,P.shouldReject?C.reject(Object.assign(P.turnError,{usage:C.usage.usage(),sessionId:a})):(i.completedTurns+=1,C.resolve({text:C.agentState.resultText,usage:C.usage.usage(),sessionId:a,turnId:C.turnId,durationMs:Date.now()-C.startMs}))}A==="error"&&C!==null&&Jl(v,C.turnState),C?.onEvent?.(v)});let L=k=>{c=new Te(`Failed to spawn codex app-server: ${k.message}`,{cause:k}),U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:k.message});for(let v of f.values())v.reject(c);f.clear(),I(c)};s.on("error",L),s.stdin?.on("error",L),s.on("exit",(k,v)=>{i.exited=!0,S?.(),i.exitCode=k,i.signal=v;let A=E();for(let R of f.values())R.reject(A);f.clear();let N=y;if(N!==null&&!N.settled)if(N.settled=!0,N.usage.finish(),y=null,N.turnState.pendingCodexError)N.reject(Object.assign(N.turnState.pendingCodexError,{usage:N.usage.usage(),sessionId:a}));else{let R=d.trim()?we(d,{provider:"codex"}):"";U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:k,signal:v,...R?{stderr_summary:R}:{}}),N.reject(Object.assign(new ve(R?`${A.message}
1789
- ${R}`:A.message,k,v,d),{usage:N.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()}),s.on("close",(k,v)=>{if(!i.exited){i.exited=!0,i.exitCode=k,i.signal=v;for(let A of h.splice(0))A()}});try{if(await p("initialize",Uw()),g("initialized",{}),t.threadId){let k;try{k=await p("thread/resume",{threadId:t.threadId,sandbox:r,approvalPolicy:"never",...t.model?{model:t.model}:{}})}catch(A){throw new Error(`Cannot resume codex thread ${t.threadId} for a bundle: ${A instanceof Error?A.message:String(A)} (the thread/start fallback is disabled in bundle mode)`)}let v=k.result?.thread;if(v?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${v?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let v=(await p("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;v?.id&&(a=v.id,t.onSessionId?.(a))}}catch(k){let v=c??(k instanceof Error?k:new Error(String(k)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)s.stdin?.end(),await _();else{let A=t.closeTimeoutMs??2e3;await de(s,{softDelayMs:Math.min(1e3,A),killDelayMs:Math.min(1e3,A)}).catch(()=>{})}throw v}let O=k=>new Promise(v=>{setTimeout(v,k).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(k,v={}){if(w&&await w,i.closed||i.closing!==null)throw new Error("codex bundle session is closed");if(i.exited)throw E();if(y!==null)throw new Error("codex bundle session has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending");if(v.signal?.aborted)throw new Error("Aborted");return new Promise((A,N)=>{let R={usage:l.turn(a),onUsage:v.onUsage,agentState:ql(),turnState:Vl(),resolve:A,reject:N,startMs:Date.now(),turnId:"",onDelta:v.onDelta,onEvent:v.onEvent,settled:!1};y=R;let C=()=>{R.settled||(R.settled=!0,y=null,T=R,w=new Promise($=>{S=$}),b(R),v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(new Error("Aborted"),{usage:R.usage.usage(),sessionId:a})))};v.signal?.addEventListener("abort",C,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:k}],...t.model?{model:t.model}:{}}).then($=>{R.usage.bind($.result?.turn?.id)}).catch($=>{if(R.settled){T===R&&(T=null,S?.());return}R.settled=!0,y=null,v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(i.exited?E():$ instanceof Error?$:new Error(String($)),{usage:R.usage.usage(),sessionId:a}))})})},close(){return i.closing!==null||(i.closing=(async()=>{if(i.closed=!0,S?.(),!i.exited&&(t.holdOpen!==void 0?await new Promise(k=>{on(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),k()},label:"codex"})}):s.stdin?.end(),!i.exited)){let k=t.closeTimeoutMs;if(k===void 0&&t.serviceHosted)await _();else{let v=k??2e3;await Promise.race([_(),O(v)]),i.exited||await de(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,v),killDelayMs:Math.min(1e3,v)}).catch(()=>{})}}})()),i.closing}}}var NP,Bw=x(()=>{"use strict";Af();re();re();cr();zr();_i();an();qf();re();Bt();Tt();Vf();Vf();NP=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(kP(AP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Yl(t){let e=[...t.matchAll(LP)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return Xw(t.slice(r).trimStart())}return Xw(MP(t.replace(xP,"")))}function MP(t){let e=CP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(OP)];if(r.length<2)return t;let s=r[0],o=(s.index??0)+s[0].length;return n.slice(o).trimStart()}function Xw(t){let e=[...t.matchAll(DP)];if(e.length===0)return t;let n=e[e.length-1],r=(n.index??0)+n[0].length;return t.slice(r).trimStart()}function Mn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function Gw(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=Gw(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&&$P.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 qw,LP,xP,CP,OP,DP,$P,yi=x(()=>{"use strict";qw="(?:png|jpe?g|webp|heic|pdf)",LP=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${qw}\\s*`,"gi"),xP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${qw}\\s*`,"i"),CP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,OP=/^STANCE:\s+\S+\s*$/gim,DP=/\[Thought:\s*true\]\s*/gi;$P=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var Jf=x(()=>{"use strict";Df()});var Ql,Vw=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 PP,readdirSync as Jw}from"node:fs";import{join as Zl}from"node:path";function Kw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Zl(Q,".gemini"),r=Zl(n,"tmp"),s;try{s=Jw(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=Jw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=PP(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 Ei,Yw=x(()=>{"use strict";yi();Re();an();Ei={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...Ei.baseArgs];if(t.permissionMode==="plan"){let n=fr("gemini","plan"),r=fr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Yl,sessionIdentity:{verifyLoadedSession:t=>{Kw(t.requestedSessionId,t.env)},recheckSession:t=>{Kw(t.requestedSessionId,t.env)}}}});import{existsSync as UP,readFileSync as FP}from"node:fs";import{join as Kf}from"node:path";function zw(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(!UP(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=FP(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 Ti,Qw=x(()=>{"use strict";re();Re();Ti={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.
1785
+ `)}f.on("line",O=>{let k;try{k=JSON.parse(O)}catch{return}if(typeof k.id=="number"&&m.has(k.id)){jw(l,k);let R=m.get(k.id);if(m.delete(k.id),k.error){let C=k.error,$=typeof C?.message=="string"&&C.message.length>0?C.message:JSON.stringify(k.error);R.reject(hi(`codex app-server error: ${$}`,C))}else R.resolve(k);e.onEvent?.(k);return}let v=k.method;if(!v){e.onEvent?.(k);return}if(u||!c.event(k))return;let A=c.usage();if(A&&e.onUsage?.(A),v==="thread/started"){let C=k.params?.thread;C?.id&&(_=C.id,e.onSessionId?.(_))}let N=ye()?R=>{mr("item.text/buffer-mismatch",{itemId:R.itemId,threadId:R.threadId??null,turnId:R.turnId??null,expectedFromItemText:R.expectedFromItemText,gotFromBuffer:R.gotFromBuffer,expectedLen:R.expectedFromItemText.length,gotLen:R.gotFromBuffer.length})}:void 0;if(v==="turn/started"){let R=k.params,C=R?.turn;C?.id&&(h=C.id),Vs(k,T,e.onDelta,N),ye()&&mr("turn/started",{params:R??null})}if(ye()&&(v==="item/started"||v==="item/completed")){let R=k.params;R?.item?.type==="agentMessage"&&mr(v,{params:R??null})}if(v==="item/started"||v==="item/agentMessage/delta"||v==="item/completed"){if(v==="item/agentMessage/delta"){let R=k.params;ye()&&mr("agentMessage/delta",{params:R??null})}Vs(k,T,e.onDelta,N)}if(v==="turn/completed"){c.finish();let R=k.params;if(ye())for(let[$,P]of T.agentItems.entries())P.buffer&&mr("turn/completed/unflushed-item",{itemId:$,phase:P.phase,bufferLen:P.buffer.length});Gl(T),ye()&&mr("turn/completed",{params:R??null});let C=Kl(k,w);C.shouldReject?(ye()&&mr("turn/completed/terminal-reject",{message:C.turnError.message}),E=!0,g=!0,a.stdin?.end(),r(d(C.turnError))):(g=!0,a.stdin?.end())}if(v==="error"){let R=Jl(k,w);if(ye()){let C=k.params,$=C?.error,P=typeof $?.message=="string"?$.message:"(no message)";mr(R.willRetry?"error/retry":"error/terminal-deferred",{message:P,willRetry:R.willRetry,params:C??null})}}e.onEvent?.(k)});let I="";a.stderr?.on("data",O=>{I+=O.toString()});let L=O=>{U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:O.message});let k=new Te(`Failed to spawn codex app-server: ${O.message}`,{cause:O});for(let v of m.values())v.reject(d(k));m.clear(),r(d(k))};a.on("error",L),a.stdin?.on("error",L),a.on("exit",(O,k)=>{if(u||E)return;if(g){n({result:T.resultText,usage:c.usage(),threadId:_,turnId:h,durationMs:Date.now()-y,exitCode:O});return}if(w.pendingCodexError){r(d(w.pendingCodexError));return}let v=RP({exitCode:O,signal:k,stderr:I});U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:O,signal:k,stderr_summary:v}),r(d(new ve(v,O,k,I)))}),(async()=>{try{if(await S("initialize",Uw()),b("initialized",{}),e.threadId)try{let O=S("thread/resume",{threadId:e.threadId,sandbox:i,approvalPolicy:"never",...e.model?{model:e.model}:{}}),k,v=e.serviceHosted&&e.closeTimeoutMs===void 0?new Promise(()=>{}):new Promise((A,N)=>{k=setTimeout(()=>N(new Error("resume timeout")),3e4)});try{let N=(await Promise.race([O,v])).result?.thread?.id;if(e.requireResume&&N!==e.threadId)throw new Error(`thread/resume did not return the requested thread "${e.threadId}" (got "${N??"unknown"}")`)}finally{clearTimeout(k)}_=e.threadId,e.onSessionId?.(_)}catch(O){if(e.requireResume)throw O;process.stderr.write(`[codex] thread/resume failed, creating new thread
1786
+ `),U({event:"codex_thread_resume_fallback",provider:"codex",thread_id:e.threadId,error_message:O instanceof Error?O.message:String(O)});let v=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;v?.id&&(_=v.id,e.onSessionId?.(_))}else{let k=(await S("thread/start",{cwd:e.cwd,approvalPolicy:"never",sandbox:i,...e.model?{model:e.model}:{}})).result?.thread;k?.id&&(_=k.id,e.onSessionId?.(_))}c=l.turn(_),await S("turn/start",{threadId:_,input:[{type:"text",text:t}],...e.model?{model:e.model}:{}})}catch(O){de(a).catch(()=>{}),r(O instanceof Error?O:new Error(String(O)))}})()})}async function Hw(t){let{binary:e,codexArgs:n,sandbox:r}=Fw(t),s=$w(e,n,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Ce(t.env,t.cwd,t.threadId)}),o=Date.now(),i={exited:!1,exitCode:null,signal:null,completedTurns:0,closed:!1,closing:null},a=t.threadId||"",l=bf(),c=null,d="";s.stderr?.on("data",k=>{d+=k.toString()});let u=Pw({input:s.stdout}),f=new Map,m=1;function p(k,v={}){return new Promise((A,N)=>{let R=m++;f.set(R,{resolve:A,reject:N});let C=JSON.stringify({jsonrpc:"2.0",id:R,method:k,params:v});s.stdin?.write(C+`
1787
+ `)})}function _(k,v={}){let A=JSON.stringify({jsonrpc:"2.0",method:k,params:v});s.stdin?.write(A+`
1788
+ `)}let h=[],g=()=>i.exited?Promise.resolve():new Promise(k=>{h.push(k)}),E=()=>new ve(`codex bundle process exited${i.signal!==null?` by ${i.signal}`:i.exitCode!==null?` with code ${i.exitCode}`:""} after ${i.completedTurns} completed prompt(s); the bundle cannot continue`,i.exitCode,i.signal,d),y=null,T=null,w,S,b=k=>{k.turnId&&p("turn/interrupt",{threadId:a,turnId:k.turnId}).catch(()=>{})};function I(k){let v=y;v===null||v.settled||(v.settled=!0,y=null,v.usage.finish(),k&&v.reject(Object.assign(k,{usage:v.usage.usage(),sessionId:a})))}u.on("line",k=>{let v;try{v=JSON.parse(k)}catch{return}if(typeof v.id=="number"&&f.has(v.id)){jw(l,v);let P=f.get(v.id);if(f.delete(v.id),v.error){let q=v.error,M=typeof q?.message=="string"&&q.message.length>0?q.message:JSON.stringify(v.error);P.reject(hi(`codex app-server error: ${M}`,q))}else P.resolve(v);y?.onEvent?.(v);return}let A=v.method;if(!A){y?.onEvent?.(v);return}if(A==="thread/started"){let q=v.params?.thread;q?.id&&(a=q.id,t.onSessionId?.(a))}let N=v.params,R=N?.turnId??N?.turn?.id;if(T&&(A==="turn/started"&&!T.turnId&&R&&(T.usage.bind(R),T.usage.finish(),T.turnId=R,b(T)),A==="turn/completed"&&R===T.turnId&&(l.remember(a,R),T=null,S?.()),A.startsWith("turn/")||A.startsWith("item/")||A==="error"))return;let C=y;if(R&&C?.turnId&&R!==C.turnId||C!==null&&!C.usage.event(v))return;let $=C?.usage.usage();if($&&C?.onUsage?.($),A==="turn/started"&&C!==null){let q=v.params?.turn;q?.id&&(C.turnId=q.id),Vs(v,C.agentState,C.onDelta,void 0)}if(C!==null&&(A==="item/started"||A==="item/agentMessage/delta"||A==="item/completed")&&Vs(v,C.agentState,C.onDelta,void 0),A==="turn/completed"&&C!==null&&!C.settled){Gl(C.agentState);let P=Kl(v,C.turnState);C.settled=!0,C.usage.finish(),y=null,P.shouldReject?C.reject(Object.assign(P.turnError,{usage:C.usage.usage(),sessionId:a})):(i.completedTurns+=1,C.resolve({text:C.agentState.resultText,usage:C.usage.usage(),sessionId:a,turnId:C.turnId,durationMs:Date.now()-C.startMs}))}A==="error"&&C!==null&&Jl(v,C.turnState),C?.onEvent?.(v)});let L=k=>{c=new Te(`Failed to spawn codex app-server: ${k.message}`,{cause:k}),U({event:"transport_error",provider:"codex",error_class:"TransportConnectionError",error_message:k.message});for(let v of f.values())v.reject(c);f.clear(),I(c)};s.on("error",L),s.stdin?.on("error",L),s.on("exit",(k,v)=>{i.exited=!0,S?.(),i.exitCode=k,i.signal=v;let A=E();for(let R of f.values())R.reject(A);f.clear();let N=y;if(N!==null&&!N.settled)if(N.settled=!0,N.usage.finish(),y=null,N.turnState.pendingCodexError)N.reject(Object.assign(N.turnState.pendingCodexError,{usage:N.usage.usage(),sessionId:a}));else{let R=d.trim()?we(d,{provider:"codex"}):"";U({event:"transport_error",provider:"codex",error_class:"Error",reason:"provider_no_result",exit_code:k,signal:v,...R?{stderr_summary:R}:{}}),N.reject(Object.assign(new ve(R?`${A.message}
1789
+ ${R}`:A.message,k,v,d),{usage:N.usage.usage(),sessionId:a}))}for(let R of h.splice(0))R()}),s.on("close",(k,v)=>{if(!i.exited){i.exited=!0,i.exitCode=k,i.signal=v;for(let A of h.splice(0))A()}});try{if(await p("initialize",Uw()),_("initialized",{}),t.threadId){let k;try{k=await p("thread/resume",{threadId:t.threadId,sandbox:r,approvalPolicy:"never",...t.model?{model:t.model}:{}})}catch(A){throw new Error(`Cannot resume codex thread ${t.threadId} for a bundle: ${A instanceof Error?A.message:String(A)} (the thread/start fallback is disabled in bundle mode)`)}let v=k.result?.thread;if(v?.id!==t.threadId)throw new Error(`codex thread/resume did not return the requested thread id: expected "${t.threadId}", received "${v?.id??"unknown"}"`);a=t.threadId,t.onSessionId?.(a)}else{let v=(await p("thread/start",{cwd:t.cwd,approvalPolicy:"never",sandbox:r,...t.model?{model:t.model}:{}})).result?.thread;v?.id&&(a=v.id,t.onSessionId?.(a))}}catch(k){let v=c??(k instanceof Error?k:new Error(String(k)));if(t.serviceHosted&&t.closeTimeoutMs===void 0)s.stdin?.end(),await g();else{let A=t.closeTimeoutMs??2e3;await de(s,{softDelayMs:Math.min(1e3,A),killDelayMs:Math.min(1e3,A)}).catch(()=>{})}throw v}let O=k=>new Promise(v=>{setTimeout(v,k).unref?.()});return{provider:"codex",get sessionId(){return a},get completedTurns(){return i.completedTurns},async sendTurn(k,v={}){if(w&&await w,i.closed||i.closing!==null)throw new Error("codex bundle session is closed");if(i.exited)throw E();if(y!==null)throw new Error("codex bundle session has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending");if(v.signal?.aborted)throw new Error("Aborted");return new Promise((A,N)=>{let R={usage:l.turn(a),onUsage:v.onUsage,agentState:ql(),turnState:Vl(),resolve:A,reject:N,startMs:Date.now(),turnId:"",onDelta:v.onDelta,onEvent:v.onEvent,settled:!1};y=R;let C=()=>{R.settled||(R.settled=!0,y=null,T=R,w=new Promise($=>{S=$}),b(R),v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(new Error("Aborted"),{usage:R.usage.usage(),sessionId:a})))};v.signal?.addEventListener("abort",C,{once:!0}),p("turn/start",{threadId:a,input:[{type:"text",text:k}],...t.model?{model:t.model}:{}}).then($=>{R.usage.bind($.result?.turn?.id)}).catch($=>{if(R.settled){T===R&&(T=null,S?.());return}R.settled=!0,y=null,v.signal?.removeEventListener("abort",C),R.usage.finish(),N(Object.assign(i.exited?E():$ instanceof Error?$:new Error(String($)),{usage:R.usage.usage(),sessionId:a}))})})},close(){return i.closing!==null||(i.closing=(async()=>{if(i.closed=!0,S?.(),!i.exited&&(t.holdOpen!==void 0?await new Promise(k=>{on(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>i.exited,isTurnInFlight:()=>y!==null,lastEventAtMs:()=>o,closeStdin:()=>{s.stdin?.end(),k()},label:"codex"})}):s.stdin?.end(),!i.exited)){let k=t.closeTimeoutMs;if(k===void 0&&t.serviceHosted)await g();else{let v=k??2e3;await Promise.race([g(),O(v)]),i.exited||await de(s,{stdinEnd:!1,softDelayMs:Math.min(1e3,v),killDelayMs:Math.min(1e3,v)}).catch(()=>{})}}})()),i.closing}}}var NP,Bw=x(()=>{"use strict";Af();re();re();cr();zr();_i();an();qf();re();Bt();Tt();Vf();Vf();NP=(()=>{try{let t=new URL("../../../package.json",import.meta.url),e=JSON.parse(kP(AP(t),"utf8"));return typeof e.version=="string"?e.version:"0.0.0"}catch{return"0.0.0"}})()});function Yl(t){let e=[...t.matchAll(LP)];if(e.length>0){let n=e[e.length-1],r=(n.index??0)+n[0].length;return Xw(t.slice(r).trimStart())}return Xw(MP(t.replace(xP,"")))}function MP(t){let e=CP.exec(t);if(e===null)return t;let n=t.slice(e[0].length),r=[...n.matchAll(OP)];if(r.length<2)return t;let s=r[0],o=(s.index??0)+s[0].length;return n.slice(o).trimStart()}function Xw(t){let e=[...t.matchAll(DP)];if(e.length===0)return t;let n=e[e.length-1],r=(n.index??0)+n[0].length;return t.slice(r).trimStart()}function Mn(t,e=""){let n=t.result;return typeof n?.sessionId=="string"&&n.sessionId.length>0?n.sessionId:e}function Gw(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=Gw(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&&$P.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 qw,LP,xP,CP,OP,DP,$P,yi=x(()=>{"use strict";qw="(?:png|jpe?g|webp|heic|pdf)",LP=new RegExp(`\\bSTANCE:\\s*\\S+_\\d{6,}\\.${qw}\\s*`,"gi"),xP=new RegExp(`^ACK:\\s*waiting for explicit lmctl task\\.\\d{6,}\\.${qw}\\s*`,"i"),CP=/^ACK:\s*waiting for explicit lmctl task[._]?\s*/i,OP=/^STANCE:\s+\S+\s*$/gim,DP=/\[Thought:\s*true\]\s*/gi;$P=new Set(["agent_message_chunk","agent_thought_chunk","tool_call","tool_call_update","plan"])});var Jf=x(()=>{"use strict";Df()});var Ql,Vw=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 PP,readdirSync as Jw}from"node:fs";import{join as Zl}from"node:path";function Kw(t,e){let n=e.GEMINI_DIR??process.env.GEMINI_DIR??Zl(Q,".gemini"),r=Zl(n,"tmp"),s;try{s=Jw(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=Jw(l)}catch{continue}for(let d of c){if(!d.endsWith(".json"))continue;let u;try{u=PP(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 Ei,Yw=x(()=>{"use strict";yi();Re();an();Ei={name:"gemini",binary:"gemini",baseArgs:["--acp","-y","--skip-trust"],argv(t){let e=[...Ei.baseArgs];if(t.permissionMode==="plan"){let n=fr("gemini","plan"),r=fr("gemini","yolo");e=e.filter(s=>!(r??[]).includes(s)),n&&e.push(...n)}return t.model&&e.push("--model",t.model),e},isolateResult:Yl,sessionIdentity:{verifyLoadedSession:t=>{Kw(t.requestedSessionId,t.env)},recheckSession:t=>{Kw(t.requestedSessionId,t.env)}}}});import{existsSync as UP,readFileSync as FP}from"node:fs";import{join as Kf}from"node:path";function zw(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(!UP(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=FP(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 Ti,Qw=x(()=>{"use strict";re();Re();Ti={name:"copilot",binary:"copilot",baseArgs:["--acp","--yolo"],argv(t){return t.permissionMode==="plan"&&(process.stderr.write(`[acp] copilot has no plan-mode flag in --acp mode; --permission-mode plan is not honored (running yolo). See src/providers/yolo-contract.ts.
1790
1790
  `),U({event:"acp_plan_mode_unsupported",provider:"copilot",requested_mode:"plan",effective_mode:"yolo"})),t.model&&(process.stderr.write(`[acp] copilot does not support per-session model selection in --acp mode (model="${t.model}" ignored). Set the default via copilot's /model slash command in an interactive \`lmctl terminal\` session.
1791
1791
  `),U({event:"acp_model_unsupported",provider:"copilot",model:t.model})),[...Ti.baseArgs]},yoloAssertion:"always-yolo",sessionIdentity:{verifyLoadedSession:t=>{zw(t.requestedSessionId,t.env)},recheckSession:t=>{zw(t.requestedSessionId,t.env)}}}});import{existsSync as tv,mkdirSync as jP,readFileSync as nv,writeFileSync as Zw}from"node:fs";import{join as wi,resolve as WP}from"node:path";function rv(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:tv,readFileSync:nv}){let r=[];for(let s of t){if(s.provider.trim().toLowerCase()!=="opencode")continue;let o=WP(e,s.sessiondir??e);for(let i of HP(o)){let a=BP(i,n);a!==void 0&&Object.prototype.hasOwnProperty.call(a,"permission")&&(rv(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 HP(t){return[wi(t,".opencode","opencode.jsonc"),wi(t,"opencode.jsonc"),wi(t,"opencode.json")]}function BP(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]!==`
1792
1792
  `;)o+=1;o<t.length&&(e+=t[o]);continue}if(i==="/"&&a==="*"){for(o+=2;o<t.length&&!(t[o]==="*"&&t[o+1]==="/");)o+=1;o+=1;continue}e+=i}return e.replace(/,\s*([}\]])/g,"$1")}function sv(t,e={}){let n=wi(t,".opencode"),r=wi(n,"opencode.json");if(!tv(r)){jP(n,{recursive:!0});let i=JSON.stringify({permission:"allow"},null,2);return Zw(r,i+`
@@ -1795,8 +1795,8 @@ ${R}`:A.message,k,v,d),{usage:N.usage.usage(),sessionId:a}))}for(let R of h.spli
1795
1795
  s.time_created, s.time_updated
1796
1796
  FROM session s
1797
1797
  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
1798
- WHERE m.session_id = ? ORDER BY m.time_created ASC`).all(a.id),u=0,f,m,p,g=iv(),h=[];for(let E of d){let y;try{y=JSON.parse(E.data)}catch{continue}p||(p=y.model?.modelID||y.modelID),(y.role==="user"||y.role==="assistant")&&u++,y.role==="user"&&h.push(E.id),y.role==="assistant"&&av(g,y.tokens)}let _=[...h.length>0?[h[0]]:[],...h.length>1?[h[h.length-1]]:[]];for(let E of _){let y=r.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(E),T=this.extractText(y);T&&(f||(f=G(T,80)),m=G(T,80))}e.push({provider:this.name,sessionId:a.id,slug:a.slug,cwd:c,createdAt:new Date(a.time_created),modifiedAt:new Date(a.time_updated),model:p,startCommand:this.startCommand,firstUserMessage:f,lastUserMessage:m,messageCount:u,filePath:n,...lv(g)})}}catch(s){U({event:"opencode_discover_sessions_failed",provider:this.name,db_path:n,error_message:s instanceof Error?s.message:String(s)})}finally{r.close()}}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=this.findSessionRow(r,e);if(!s)continue;return this.buildSessionDetail(r,s,n)}catch{}finally{r.close()}}return null}buildSessionDetail(e,n,r){let s=e.prepare("SELECT id, worktree, name FROM project WHERE id = ?").get(n.project_id),o=n.directory||s?.worktree||"(unknown)",i=e.prepare(`SELECT id, session_id, time_created, time_updated, data
1799
- FROM message WHERE session_id = ? ORDER BY time_created ASC`).all(n.id),a=[],l=[],c=0,d,u,f,m=iv();for(let p of i){let g;try{g=JSON.parse(p.data)}catch{continue}d||(d=g.model?.modelID||g.modelID);let h=g.model?.modelID||g.modelID,_=new Date(g.time?.created||p.time_created),E=e.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(p.id);if(g.role==="user"){let y=this.extractText(E),T=this.extractText(E,!0);T&&l.push(T),y&&(u||(u=G(y,80)),f=G(y,80)),a.push({role:"user",timestamp:_,content:y||"(empty)"}),c++}else if(g.role==="assistant"){av(m,g.tokens);for(let y of E){let T;try{T=JSON.parse(y.data)}catch{continue}T.type==="text"&&T.text?a.push({role:"assistant",timestamp:_,content:T.text,model:h}):T.type==="reasoning"&&T.text?a.push({role:"thinking",timestamp:_,content:T.text}):T.type==="tool"&&T.tool&&(a.push({role:"tool_use",timestamp:_,content:`${T.tool}`,toolName:T.tool,toolCallId:T.callID,toolInput:T.state?.input?JSON.stringify(T.state.input):void 0,toolInputData:At(T.state?.input)}),T.state&&(T.state.status==="completed"||T.state.status==="error"||T.state.output!==void 0||T.state.error!==void 0)&&a.push({role:"tool_result",timestamp:_,content:T.state.error??T.state.output??"",toolCallId:T.callID}))}c++}}return{provider:this.name,sessionId:n.id,slug:n.slug,cwd:o,createdAt:new Date(n.time_created),modifiedAt:new Date(n.time_updated),model:d,startCommand:this.startCommand,firstUserMessage:u,lastUserMessage:f,messageCount:c,filePath:r,...lv(m),messages:a,userPrompts:l}}extractText(e,n=!1){let r=[];for(let s of e){let o;try{o=JSON.parse(s.data)}catch{continue}n&&(o.synthetic===!0||o.ignored===!0)||o.type==="text"&&o.text&&r.push(o.text)}return r.join(`
1798
+ WHERE m.session_id = ? ORDER BY m.time_created ASC`).all(a.id),u=0,f,m,p,_=iv(),h=[];for(let E of d){let y;try{y=JSON.parse(E.data)}catch{continue}p||(p=y.model?.modelID||y.modelID),(y.role==="user"||y.role==="assistant")&&u++,y.role==="user"&&h.push(E.id),y.role==="assistant"&&av(_,y.tokens)}let g=[...h.length>0?[h[0]]:[],...h.length>1?[h[h.length-1]]:[]];for(let E of g){let y=r.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(E),T=this.extractText(y);T&&(f||(f=G(T,80)),m=G(T,80))}e.push({provider:this.name,sessionId:a.id,slug:a.slug,cwd:c,createdAt:new Date(a.time_created),modifiedAt:new Date(a.time_updated),model:p,startCommand:this.startCommand,firstUserMessage:f,lastUserMessage:m,messageCount:u,filePath:n,...lv(_)})}}catch(s){U({event:"opencode_discover_sessions_failed",provider:this.name,db_path:n,error_message:s instanceof Error?s.message:String(s)})}finally{r.close()}}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{let s=this.findSessionRow(r,e);if(!s)continue;return this.buildSessionDetail(r,s,n)}catch{}finally{r.close()}}return null}buildSessionDetail(e,n,r){let s=e.prepare("SELECT id, worktree, name FROM project WHERE id = ?").get(n.project_id),o=n.directory||s?.worktree||"(unknown)",i=e.prepare(`SELECT id, session_id, time_created, time_updated, data
1799
+ FROM message WHERE session_id = ? ORDER BY time_created ASC`).all(n.id),a=[],l=[],c=0,d,u,f,m=iv();for(let p of i){let _;try{_=JSON.parse(p.data)}catch{continue}d||(d=_.model?.modelID||_.modelID);let h=_.model?.modelID||_.modelID,g=new Date(_.time?.created||p.time_created),E=e.prepare("SELECT id, data FROM part WHERE message_id = ? ORDER BY time_created ASC").all(p.id);if(_.role==="user"){let y=this.extractText(E),T=this.extractText(E,!0);T&&l.push(T),y&&(u||(u=G(y,80)),f=G(y,80)),a.push({role:"user",timestamp:g,content:y||"(empty)"}),c++}else if(_.role==="assistant"){av(m,_.tokens);for(let y of E){let T;try{T=JSON.parse(y.data)}catch{continue}T.type==="text"&&T.text?a.push({role:"assistant",timestamp:g,content:T.text,model:h}):T.type==="reasoning"&&T.text?a.push({role:"thinking",timestamp:g,content:T.text}):T.type==="tool"&&T.tool&&(a.push({role:"tool_use",timestamp:g,content:`${T.tool}`,toolName:T.tool,toolCallId:T.callID,toolInput:T.state?.input?JSON.stringify(T.state.input):void 0,toolInputData:At(T.state?.input)}),T.state&&(T.state.status==="completed"||T.state.status==="error"||T.state.output!==void 0||T.state.error!==void 0)&&a.push({role:"tool_result",timestamp:g,content:T.state.error??T.state.output??"",toolCallId:T.callID}))}c++}}return{provider:this.name,sessionId:n.id,slug:n.slug,cwd:o,createdAt:new Date(n.time_created),modifiedAt:new Date(n.time_updated),model:d,startCommand:this.startCommand,firstUserMessage:u,lastUserMessage:f,messageCount:c,filePath:r,...lv(m),messages:a,userPrompts:l}}extractText(e,n=!1){let r=[];for(let s of e){let o;try{o=JSON.parse(s.data)}catch{continue}n&&(o.synthetic===!0||o.ignored===!0)||o.type==="text"&&o.text&&r.push(o.text)}return r.join(`
1800
1800
  `).trim()}async resolveSessionPath(e){for(let n of this.existingDbPaths()){let r=this.openDb(n);if(r)try{if(this.findSessionRow(r,e))return n}catch{}finally{r.close()}}return null}async deleteSession(e){for(let n of this.existingDbPaths()){let r=new(em())(n,{open:!0});try{let s=this.findSessionRow(r,e);if(!s)continue;return r.prepare("DELETE FROM session WHERE id = ?").run(s.id).changes>0}catch{}finally{r.close()}}return!1}findSessionRow(e,n){let r=e.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
1801
1801
  s.time_created, s.time_updated
1802
1802
  FROM session s WHERE s.id = ?`).get(n);if(r)return r;let s=e.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
@@ -1813,42 +1813,42 @@ One possible cause: the provider process failed before a complete ACP response w
1813
1813
  ${we(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
1814
1814
 
1815
1815
  ${n}`:n}function i1(t,e){return ki(t)?.filterExpectedStderr?.(e)??e}function gv(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 yv(t,e,n,r){for(let s of t.sessionSetup??[]){let o={...e,sessionId:n.sessionId,response:n.response,sendRpc:r};if(s.applies(o))try{await s.run(o),s.successLog&&Ue(s.successLog(o))}catch(i){let a=s.describeFailure(o,i);if(U({event:a.event,provider:t.name,...a.fields}),a.stderrLine&&process.stderr.write(a.stderrLine),a.warning&&e.warnings.push(a.warning),s.onFailure==="fail-closed")throw new Error(a.message)}}}function Ev(t,e,n){let r=Ce(e.env,e.cwd,e.sessionId);t.preSpawn?.({...n,cwd:e.cwd,env:r});let s=e.binaryPath||t.binary,o=t.argv(n),i=t.yoloAssertion==="always-yolo"?"yolo":n.permissionMode;if(De(e.tool,o,i),e.cwd&&!s1(e.cwd))throw U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new Te(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function Tv(t){let{sendRpc:e,sendNotification:n,opts:r,outputProcessor:s}=t,o=t.strictSessionIdentity===!0,i=await e("initialize",{protocolVersion:1,clientInfo:{name:"lmctl",version:"0.1.0"},clientCapabilities:{}});n("notifications/initialized");let a=r.sessionId||"",l;if(r.sessionId){let c;try{if(i.result?.agentCapabilities?.loadSession===!1)throw new Error("provider advertises loadSession=false");c=await e("session/load",{sessionId:r.sessionId,cwd:r.cwd,mcpServers:[]})}catch(u){if(o||r.requireResume)throw new Error(`Cannot resume session ${r.sessionId} via ACP: ${u instanceof Error?u.message:String(u)}`);process.stderr.write(`[acp] session/load failed for ${r.sessionId}, creating new session
1816
- `),U({event:"acp_session_resume_fallback",provider:r.tool,session_id:r.sessionId,error_message:u instanceof Error?u.message:String(u)});let f=await e("session/new",{cwd:r.cwd,mcpServers:[]});return a=Mn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Mn(c);if(r.requireResume&&d!==""&&d!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${d}"`);if(o){let u=Mn(c);if(u!==""&&u!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${u}"`);if(u===""){if(t.verifyLoadResponse===void 0)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received none`);await t.verifyLoadResponse(c)}a=r.sessionId}else a=Mn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Mn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function wv(t,e){let n=ki(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{_v(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let o=e.permissionMode??"yolo",i=[],a={permissionMode:o,...e.model!==void 0?{model:e.model}:{},...e.effort!==void 0?{effort:e.effort}:{},...e.acpMode!==void 0?{acpMode:e.acpMode}:{},purpose:"chat",warnings:{push:I=>{i.push(I)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=Ev(n,e,a))}catch(I){return s(I instanceof Error?I:new Error(String(I)))}let u=hv(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:d}),f=Date.now(),m=!1,p=!1,g=0,h=!1,_=!1;if(e.signal){if(e.signal.aborted)return m=!0,U({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),de(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,U({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),de(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=zl({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=ur(u,{provider:e.tool,onEvent:I=>{g=Date.now(),gv(I)&&(_=!0),e.onEvent?.(I)},onNotification:I=>{g=Date.now(),y.processMessage(I)}}),{sendRpc:w,sendNotification:S}=T,b="";u.stderr?.on("data",I=>{b+=I.toString()}),u.on("error",I=>{T.close(I),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:I.message,elapsed_ms:Date.now()-f}),s(new Te(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${I.message}`,{cause:I}))}),u.on("exit",(I,L)=>{if(p=!0,T.close(new ve(`ACP process ${L?`terminated by ${L}`:`exited with code ${String(I)}`}`,I,L)),m)return;let O=y.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:I}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-f,stopReason:O.stopReason,exitCode:I,sawActivity:O.sawActivity,...i.length>0?{warnings:i}:{}});else{let k=i1(e.tool,b),v=o1({tool:e.tool,exitCode:I,signal:L,stderr:k,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:I,signal:L,stderr_summary:v,elapsed_ms:Date.now()-f}),s(new ve(v,I,L,b))}}),(async()=>{try{let I=await Tv({sendRpc:w,sendNotification:S,opts:e,outputProcessor:y});E=I.sessionId,e.onSessionId?.(E);let L=I.sessionResponse;await yv(n,a,{sessionId:E,response:L},w),y.beginTurn(),h=!0,Ue(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},k=>{k.error?y.cancelTurn():O=y.completeTurn(k)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,Ue(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),on(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>g,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>_})}catch(I){de(u).catch(()=>{}),s(I instanceof Error?I:new Error(String(I)))}})()})}async function vv(t){let e=ki(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&_v(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}=Ev(e,t,o),c=hv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,g="";c.stderr?.on("data",L=>{g+=L.toString()});let h,_,E=zl({tool:t.tool,onDelta:L=>h?.(L),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=ur(c,{provider:t.tool,onEvent:L=>{u.lastEventAtMs=Date.now(),gv(L)&&(u.backgroundJobLaunched=!0),_?.(L)},onNotification:L=>{u.lastEventAtMs=Date.now(),E.processMessage(L)}}),T=()=>new ve(`ACP bundle process (${t.tool}) exited${u.signal!==null?` by ${u.signal}`:u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`,u.exitCode,u.signal,g),w=[],S=()=>u.exited?Promise.resolve():new Promise(L=>{w.push(L)}),b=null;c.on("error",L=>{p=new Te(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${L.message}`,{cause:L}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:L.message,elapsed_ms:Date.now()-d}),y.close(L)}),c.on("exit",(L,O)=>{if(u.exited=!0,u.exitCode=L,u.signal=O,y.close(new ve(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(L)}`}`,L,O)),!u.telemetryFired){u.telemetryFired=!0;let k=E.finalize();k!==null&&e.onExitFinalization?.({...o,sessionId:k.sessionId,result:k.result,stopReason:k.stopReason,exitCode:L})}if(b!==null){let k=b;b=null,k(T())}for(let k of w.splice(0))k()}),c.on("close",(L,O)=>{if(!u.exited){u.exited=!0,u.exitCode=L,u.signal=O;for(let k of w.splice(0))k()}});try{let L=await Tv({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 yv(e,o,{sessionId:L.sessionId,response:L.sessionResponse},y.sendRpc)}catch(L){let O=p??(L instanceof Error?L:new Error(String(L)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await S()):de(c).catch(()=>{}),O}let I=L=>new Promise(O=>{setTimeout(O,L).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(L,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,h=O.onDelta,_=O.onEvent;let k=Date.now();try{E.beginTurn(),Ue(`acp: bundle prompt sent (${L.length} chars)`);let v,A=!1;if(await new Promise((R,C)=>{b=C;let $,P=()=>{A=!0,f=Promise.resolve().then(()=>$).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),C(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",P,{once:!0}),$=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:L}]},M=>{A||(M.error?E.cancelTurn():v=E.completeTurn(M),h=void 0,_=void 0)}),$.then(M=>{q?.removeEventListener("abort",P),R(M)},M=>{q?.removeEventListener("abort",P),C(M instanceof Error?M:new Error(String(M)))})}),b=null,!v)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Ue(`acp: bundle result received (${v.result.length} chars, stopReason=${v.stopReason})`);let N=s&&r.length>0?[...r]:void 0;return s=!1,{result:v.result,sessionId:v.sessionId,stopReason:v.stopReason,durationMs:Date.now()-k,sawActivity:v.sawActivity,...N!==void 0?{warnings:N}:{}}}catch(v){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():v}finally{h=void 0,_=void 0}},close(){return u.closing!==null||(u.closing=(async()=>{if(u.closed=!0,u.exited||(t.holdOpen!==void 0?await new Promise(O=>{on(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let L=t.closeTimeoutMs;if(L===void 0&&t.serviceHosted)await S();else{let O=L??2e3;await Promise.race([S(),I(O)]),u.exited||await de(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),u.closing}}}var am=x(()=>{"use strict";re();cr();zr();_i();an();re();Bt();Tt();yi();Jf();pv();im();rm();yi()});function Se(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Sv(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=a1){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 bv(){let t=new Map;return(e,n)=>{l1(e,Sv(t,n))}}function l1(t,e){let n=t.type;if(n==="system"){let r=t.subtype;if(r==="api_retry"){let s=typeof t.attempt=="number"?t.attempt:void 0,o=typeof t.max_retries=="number"?t.max_retries:void 0,i=typeof t.error_status=="number"?t.error_status:void 0,a=typeof t.error=="string"?t.error:void 0,l=typeof t.retry_delay_ms=="number"?t.retry_delay_ms:void 0,c=[];s!==void 0&&c.push(o!==void 0?`attempt ${s}/${o}`:`attempt ${s}`),i!==void 0&&c.push(`HTTP ${i}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(Se(a,60));let d=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:d});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,o=typeof t.error=="string"?t.error:void 0,i=["api_error"];s!==void 0&&i.push(`HTTP ${s}`),o&&i.push(Se(o,80)),e({kind:"other",summary:i.join(": "),raw:t});return}e({kind:"system",summary:r||"system",raw:t});return}if(n==="assistant"||n==="user"){let s=t.message?.content;if(!Array.isArray(s))return;for(let o of s){let i=o.type;if(i==="text"){let a=o.text||"";a&&e({kind:"text",summary:Se(a),raw:o})}else if(i==="tool_use"){let a=o.name||"tool",l=typeof o.id=="string"?o.id:void 0,c=o.input,d="";c&&(typeof c.command=="string"?d=c.command:typeof c.file_path=="string"?d=c.file_path:typeof c.path=="string"?d=c.path:typeof c.pattern=="string"?d=c.pattern:typeof c.url=="string"?d=c.url:d=Se(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:Se(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:Se(a),raw:o})}else if(i==="tool_result"){let l=o.is_error===!0?"error":"ok",c=typeof o.tool_use_id=="string"?o.tool_use_id:void 0,d,u=o.content;if(typeof u=="string")d=`${u.split(`
1816
+ `),U({event:"acp_session_resume_fallback",provider:r.tool,session_id:r.sessionId,error_message:u instanceof Error?u.message:String(u)});let f=await e("session/new",{cwd:r.cwd,mcpServers:[]});return a=Mn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Mn(c);if(r.requireResume&&d!==""&&d!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${d}"`);if(o){let u=Mn(c);if(u!==""&&u!==r.sessionId)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received "${u}"`);if(u===""){if(t.verifyLoadResponse===void 0)throw new Error(`ACP session/load did not return the requested session id: expected "${r.sessionId}", received none`);await t.verifyLoadResponse(c)}a=r.sessionId}else a=Mn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Mn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function wv(t,e){let n=ki(e.tool);if(!n)return Promise.reject(new Error(`No ACP config for tool "${e.tool}"`));if(e.acpMode!==void 0)try{_v(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let o=e.permissionMode??"yolo",i=[],a={permissionMode:o,...e.model!==void 0?{model:e.model}:{},...e.effort!==void 0?{effort:e.effort}:{},...e.acpMode!==void 0?{acpMode:e.acpMode}:{},purpose:"chat",warnings:{push:I=>{i.push(I)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=Ev(n,e,a))}catch(I){return s(I instanceof Error?I:new Error(String(I)))}let u=hv(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:d}),f=Date.now(),m=!1,p=!1,_=0,h=!1,g=!1;if(e.signal){if(e.signal.aborted)return m=!0,U({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),de(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,U({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),de(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=zl({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=ur(u,{provider:e.tool,onEvent:I=>{_=Date.now(),gv(I)&&(g=!0),e.onEvent?.(I)},onNotification:I=>{_=Date.now(),y.processMessage(I)}}),{sendRpc:w,sendNotification:S}=T,b="";u.stderr?.on("data",I=>{b+=I.toString()}),u.on("error",I=>{T.close(I),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:I.message,elapsed_ms:Date.now()-f}),s(new Te(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${I.message}`,{cause:I}))}),u.on("exit",(I,L)=>{if(p=!0,T.close(new ve(`ACP process ${L?`terminated by ${L}`:`exited with code ${String(I)}`}`,I,L)),m)return;let O=y.finalize();if(O!==null)n.onExitFinalization?.({...a,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:I}),r({result:O.result,sessionId:O.sessionId,durationMs:Date.now()-f,stopReason:O.stopReason,exitCode:I,sawActivity:O.sawActivity,...i.length>0?{warnings:i}:{}});else{let k=i1(e.tool,b),v=o1({tool:e.tool,exitCode:I,signal:L,stderr:k,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:I,signal:L,stderr_summary:v,elapsed_ms:Date.now()-f}),s(new ve(v,I,L,b))}}),(async()=>{try{let I=await Tv({sendRpc:w,sendNotification:S,opts:e,outputProcessor:y});E=I.sessionId,e.onSessionId?.(E);let L=I.sessionResponse;await yv(n,a,{sessionId:E,response:L},w),y.beginTurn(),h=!0,Ue(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},k=>{k.error?y.cancelTurn():O=y.completeTurn(k)}),!O)throw new Error("ACP prompt completed without a result boundary");h=!1,Ue(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),on(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>h,lastEventAtMs:()=>_,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(I){de(u).catch(()=>{}),s(I instanceof Error?I:new Error(String(I)))}})()})}async function vv(t){let e=ki(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&_v(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}=Ev(e,t,o),c=hv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,signal:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,_="";c.stderr?.on("data",L=>{_+=L.toString()});let h,g,E=zl({tool:t.tool,onDelta:L=>h?.(L),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=ur(c,{provider:t.tool,onEvent:L=>{u.lastEventAtMs=Date.now(),gv(L)&&(u.backgroundJobLaunched=!0),g?.(L)},onNotification:L=>{u.lastEventAtMs=Date.now(),E.processMessage(L)}}),T=()=>new ve(`ACP bundle process (${t.tool}) exited${u.signal!==null?` by ${u.signal}`:u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`,u.exitCode,u.signal,_),w=[],S=()=>u.exited?Promise.resolve():new Promise(L=>{w.push(L)}),b=null;c.on("error",L=>{p=new Te(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${L.message}`,{cause:L}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:L.message,elapsed_ms:Date.now()-d}),y.close(L)}),c.on("exit",(L,O)=>{if(u.exited=!0,u.exitCode=L,u.signal=O,y.close(new ve(`ACP process ${O?`terminated by ${O}`:`exited with code ${String(L)}`}`,L,O)),!u.telemetryFired){u.telemetryFired=!0;let k=E.finalize();k!==null&&e.onExitFinalization?.({...o,sessionId:k.sessionId,result:k.result,stopReason:k.stopReason,exitCode:L})}if(b!==null){let k=b;b=null,k(T())}for(let k of w.splice(0))k()}),c.on("close",(L,O)=>{if(!u.exited){u.exited=!0,u.exitCode=L,u.signal=O;for(let k of w.splice(0))k()}});try{let L=await Tv({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 yv(e,o,{sessionId:L.sessionId,response:L.sessionResponse},y.sendRpc)}catch(L){let O=p??(L instanceof Error?L:new Error(String(L)));throw t.serviceHosted&&t.closeTimeoutMs===void 0?(c.stdin?.end(),await S()):de(c).catch(()=>{}),O}let I=L=>new Promise(O=>{setTimeout(O,L).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(L,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,h=O.onDelta,g=O.onEvent;let k=Date.now();try{E.beginTurn(),Ue(`acp: bundle prompt sent (${L.length} chars)`);let v,A=!1;if(await new Promise((R,C)=>{b=C;let $,P=()=>{A=!0,f=Promise.resolve().then(()=>$).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),C(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",P,{once:!0}),$=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:L}]},M=>{A||(M.error?E.cancelTurn():v=E.completeTurn(M),h=void 0,g=void 0)}),$.then(M=>{q?.removeEventListener("abort",P),R(M)},M=>{q?.removeEventListener("abort",P),C(M instanceof Error?M:new Error(String(M)))})}),b=null,!v)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Ue(`acp: bundle result received (${v.result.length} chars, stopReason=${v.stopReason})`);let N=s&&r.length>0?[...r]:void 0;return s=!1,{result:v.result,sessionId:v.sessionId,stopReason:v.stopReason,durationMs:Date.now()-k,sawActivity:v.sawActivity,...N!==void 0?{warnings:N}:{}}}catch(v){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():v}finally{h=void 0,g=void 0}},close(){return u.closing!==null||(u.closing=(async()=>{if(u.closed=!0,u.exited||(t.holdOpen!==void 0?await new Promise(O=>{on(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let L=t.closeTimeoutMs;if(L===void 0&&t.serviceHosted)await S();else{let O=L??2e3;await Promise.race([S(),I(O)]),u.exited||await de(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,O),killDelayMs:Math.min(1e3,O)}).catch(()=>{})}})()),u.closing}}}var am=x(()=>{"use strict";re();cr();zr();_i();an();re();Bt();Tt();yi();Jf();pv();im();rm();yi()});function Se(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Sv(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=a1){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 bv(){let t=new Map;return(e,n)=>{l1(e,Sv(t,n))}}function l1(t,e){let n=t.type;if(n==="system"){let r=t.subtype;if(r==="api_retry"){let s=typeof t.attempt=="number"?t.attempt:void 0,o=typeof t.max_retries=="number"?t.max_retries:void 0,i=typeof t.error_status=="number"?t.error_status:void 0,a=typeof t.error=="string"?t.error:void 0,l=typeof t.retry_delay_ms=="number"?t.retry_delay_ms:void 0,c=[];s!==void 0&&c.push(o!==void 0?`attempt ${s}/${o}`:`attempt ${s}`),i!==void 0&&c.push(`HTTP ${i}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(Se(a,60));let d=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:d});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,o=typeof t.error=="string"?t.error:void 0,i=["api_error"];s!==void 0&&i.push(`HTTP ${s}`),o&&i.push(Se(o,80)),e({kind:"other",summary:i.join(": "),raw:t});return}e({kind:"system",summary:r||"system",raw:t});return}if(n==="assistant"||n==="user"){let s=t.message?.content;if(!Array.isArray(s))return;for(let o of s){let i=o.type;if(i==="text"){let a=o.text||"";a&&e({kind:"text",summary:Se(a),raw:o})}else if(i==="tool_use"){let a=o.name||"tool",l=typeof o.id=="string"?o.id:void 0,c=o.input,d="";c&&(typeof c.command=="string"?d=c.command:typeof c.file_path=="string"?d=c.file_path:typeof c.path=="string"?d=c.path:typeof c.pattern=="string"?d=c.pattern:typeof c.url=="string"?d=c.url:d=Se(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:Se(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:Se(a),raw:o})}else if(i==="tool_result"){let l=o.is_error===!0?"error":"ok",c=typeof o.tool_use_id=="string"?o.tool_use_id:void 0,d,u=o.content;if(typeof u=="string")d=`${u.split(`
1817
1817
  `).length} lines, ${u.length} chars`;else if(Array.isArray(u)){let f=u.map(m=>typeof m=="object"&&m&&"text"in m?m.text:"").filter(Boolean).join("");f&&(d=`${f.split(`
1818
1818
  `).length} lines, ${f.length} chars`)}e({kind:"tool_result",status:l,summary:d,id:c,raw:o})}else i&&e({kind:"other",summary:i,raw:o})}return}if(n==="result"){e({kind:"system",summary:"result",raw:t});return}}async function tc(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?bv():void 0;if(e.bundleSession!==void 0)return Dn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await Cw(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 Ow({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=bv(),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 Iv(){let t=new Map;return(e,n)=>{c1(e,Sv(t,n))}}function c1(t,e){if(t.method!=="session/update")return;let s=t.params?.update;if(!s)return;let o=s.sessionUpdate;if(o){if(o==="agent_message_chunk"){let a=s.content?.text||"";a&&e({kind:"text",summary:Se(a)});return}if(o==="agent_thought_chunk"||o==="thought"||o==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:Se(a)});return}if(o==="tool_call"){let i=s.title||s.kind||"tool",a=typeof s.toolCallId=="string"?s.toolCallId:void 0,l="",c=s.rawInput;c&&(typeof c.command=="string"?l=c.command:typeof c.file_path=="string"?l=c.file_path:typeof c.path=="string"?l=c.path:l=Se(JSON.stringify(c))),e({kind:"tool_use",tool:i,summary:Se(l),id:a});return}if(o==="tool_call_update"){let i=s.status||"",a=typeof s.toolCallId=="string"?s.toolCallId:void 0;if(i==="completed"||i==="failed")e({kind:"tool_result",summary:i,status:i==="failed"?"error":"ok",id:a});else if(i==="in_progress"){let l=s.content,c=typeof l=="string"?l:typeof l?.text=="string"?l.text:"",d=c?`running\u2026 ${Se(c,80)}`:"running\u2026";e({kind:"other",summary:d,id:a})}return}e({kind:"other",summary:o})}}function kv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function Xt(t,e){let n=e.acpTool||e.binary,r=e.onProgress?Iv():void 0;if(e.bundleSession!==void 0)return Dn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=[];if(e.model&&n==="copilot"){let a="copilot --acp does not implement per-session model selection";He({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await wv(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,...kv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function ln(t){let e=t.acpTool||t.binary,n=await vv({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,effort:t.effort,alias:t.alias,permissionMode:t.permissionMode,acpMode:t.acpMode,requireResume:!0,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=Iv(),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,...kv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Av(t,e){let n=t.method;if(!n)return;let r=t.params;if(n==="turn/started"){e({kind:"system",summary:"turn started"});return}if(n==="turn/completed"){e({kind:"system",summary:"turn completed"});return}if(n==="error"){let s=r?.error,o=typeof s?.message=="string"?s.message:void 0,i=o&&o.length>0?o:"(no message)",a=r?.willRetry===!0;e(a?{kind:"api_retry",summary:`codex retry: ${Se(i,120)}`}:{kind:"other",summary:`codex error: ${Se(i,120)}`});return}if(n==="item/started"||n==="item/completed"){let s=r?.item;if(!s)return;let o=s.type,i=n==="item/started";switch(o){case"commandExecution":{let a=typeof s.id=="string"?s.id:void 0,l=s.command,c=Array.isArray(l)?l.join(" "):typeof l=="string"?l:"";if(i)e({kind:"tool_use",tool:"Bash",summary:Se(c||"(command)"),id:a});else{let d=s.exitCode,u=s.status||"",f=typeof s.durationMs=="number"?s.durationMs:void 0,m=typeof d=="number"?`exit ${d}`:u||"done",p=[];typeof d=="number"?p.push(`exit ${d}`):u&&p.push(u),typeof f=="number"&&p.push(`${Math.round(f/1e3)}s`),e({kind:"tool_result",summary:p.join(", ")||"done",status:m,elapsedMs:f,id:a})}return}case"fileChange":{let a=typeof s.id=="string"?s.id:void 0;if(i){let l=s.changes,c=Array.isArray(l)?l.map(d=>d.path||"").filter(Boolean).join(", "):"";e({kind:"tool_use",tool:"FileChange",summary:Se(c||"(edit)"),id:a})}else{let l=s.status||"done";e({kind:"tool_result",summary:l,status:l,id:a})}return}case"mcpToolCall":{let a=typeof s.id=="string"?s.id:void 0,l=s.server||"mcp",c=s.tool||"tool";if(i)e({kind:"tool_use",tool:`${l}/${c}`,summary:"",id:a});else{let d=s.status||"done";e({kind:"tool_result",summary:d,status:d,id:a})}return}case"webSearch":{let a=typeof s.id=="string"?s.id:void 0;e(i?{kind:"tool_use",tool:"WebSearch",summary:Se(s.query||""),id:a}:{kind:"tool_result",summary:"done",status:"done",id:a});return}case"reasoning":{i&&e({kind:"thinking",summary:""});return}case"agentMessage":case"userMessage":return;default:{o&&e({kind:i?"tool_use":"tool_result",tool:o,summary:""});return}}}if(n==="item/agentMessage/delta"){let s=r?.delta||"";if(s){let o=typeof r?._lmctlItemPhase=="string"?r._lmctlItemPhase:void 0;e(o==="commentary"?{kind:"thinking",summary:Se(s)}:{kind:"text",summary:Se(s)})}return}if(n.startsWith("item/reasoning/")||n==="item/reasoning/summaryTextDelta"||n==="item/reasoning/textDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";e({kind:"thinking",summary:Se(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let o=s.split(`
1819
1819
  `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${Se(i,60)}`:Se(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n==="item/commandExecution/terminalInteraction"||n==="item/commandExecution/outputChunk"||n==="item/commandExecution/output"){let s=(typeof r?.stdin=="string"?r.stdin:"")||(typeof r?.delta=="string"?r.delta:"")||(typeof r?.output=="string"?r.output:"")||(typeof r?.text=="string"?r.text:"")||(typeof r?.content=="string"?r.content:"")||(typeof r?.chunk=="string"?r.chunk:"")||"";if(s){let o=s.split(`
1820
- `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${Se(i,60)}`:Se(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n.startsWith("item/")){e({kind:"other",summary:n.slice(5)});return}}async function Nv(t,e){if(e.bundleSession!==void 0)return Dn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Ww(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=>Av(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 Rv(t){let e=await Hw({threadId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:"codex",get sessionId(){return e.sessionId},get completedTurns(){return e.completedTurns},async sendTurn(n,r={}){let s=await e.sendTurn(n,{...r,onEvent:o=>{r.onEvent?.(o),r.onProgress&&Av(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var a1,$n=x(()=>{"use strict";Xf();Xf();Bw();am();Bs();re();a1=256});function lm(t={}){let e=Sa(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ce{constructor(){super({provider:new va({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. A stored session can be resumed (history is rebuilt from its completed turns)."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>Xt(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return ln({...r,env:n(r.env),binary:"miniplayer",acpTool:"miniplayer"})}manualSeedHint(){return{launchCommand:"miniplayer --help",postLaunchNote:'Use lmctl prompt --provider miniplayer --model <model> "<prompt>". Each invocation creates a fresh run unless a session id is given.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal; use lmctl prompt or lmctl batch")}async seed(r,s){try{s?.signal?.throwIfAborted();try{s?.onDispatch?.()}catch{}let o=await Xt(s?.prompt??Z,{binary:"miniplayer",acpTool:"miniplayer",sessionId:"",requireResume:!1,cwd:r,env:n(s?.env),signal:s?.signal,model:s?.model});return{success:!0,sessionId:o.sessionId,usage:o.usage}}catch(o){return{success:!1,usage:o?.usage,error:`miniplayer seed failed: ${o instanceof Error?o.message:String(o)}`}}}}}var cm=x(()=>{"use strict";Ye();Ia();$n();Fe()});import{readdir as rc,stat as Lv,unlink as d1}from"node:fs/promises";import{join as Ks,basename as xv}from"node:path";function u1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function f1(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return _e(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}function m1(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 p1(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 h1(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 Cv(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 g=p.message.content;if(typeof g=="string"){if(g.includes("<command-name>")||g.includes("<local-command-"))continue;e++,l=G(g.trim(),80)}}else if(p.type==="assistant"&&p.message){let g=p.message.content;if(Array.isArray(g))for(let _ of g)_.type==="text"&&e++;let h=p.message.usage;if(h){let _=p1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?m1(T,_):c.set(E,_)}else d.push(_);let y=_.input+_.cacheWrite+_.cacheRead;y&&(i=y),a={inputTokens:_.input,cacheWriteInputTokens:_.cacheWrite,cachedInputTokens:_.cacheRead,outputTokens:_.output}}}}let u=0,f=0,m=p=>{let g=h1(p);n+=p.input+p.cacheRead+g.total,r+=p.cacheRead,s+=g.total,u+=g.fiveMinute,f+=g.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 _1(t){let e=g1(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 g1(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,Ov=x(()=>{"use strict";Re();sc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Ks(Q,".claude"),this.projectsDir=Ks(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=Ks(this.projectsDir,r);if(!(await Lv(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=xv(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Ks(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await Et(e,50),s=await Ae(e),o="",i,a,l,c,d,u;for(let m of r)if(!u1(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 Cv(e);return{provider:"claude",sessionId:n,slug:i,cwd:o,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:f.lastUserMessage??d,messageCount:f.messageCount,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:f.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:f.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:f.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u,f,m=e,p,g=[];for await(let _ of Ee(n))if(_.type!=="file-history-snapshot"&&!_.isSidechain){if(!o&&_.cwd&&(o=_.cwd),!i&&_.slug&&(i=_.slug),!a&&_.version&&(a=_.version),!c&&_.gitBranch&&(c=_.gitBranch),!f&&_.timestamp&&(f=new Date(_.timestamp)),_.sessionId&&(m=_.sessionId),_.type==="system"||_.type==="progress"||_.type==="queue-operation"){s.push({role:"system",timestamp:new Date(_.timestamp||0),content:f1(_)});continue}if(_.type==="user"&&_.message){if(_.isMeta)continue;let E=new Date(_.timestamp||0),y=_.message.content;if(_.isCompactSummary!==!0&&_.isVisibleInTranscriptOnly!==!0&&_.promptSource!=="system"&&_.toolUseResult===void 0&&_.origin?.kind!=="task-notification"&&_.interruptedMessageId===void 0&&_.interruptedByShutdown!==!0&&_.scheduledTaskId===void 0&&_.scheduledFireId===void 0&&!(Array.isArray(y)&&y.some(T=>T.type==="tool_result"))){let T=typeof y=="string"?y:Array.isArray(y)?y.filter(w=>w.type==="text"&&typeof w.text=="string").map(w=>w.text).join(`
1821
- `):"";T&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(T.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T.trim())&&!T.trimStart().startsWith("lmctl seed initial connection only.")&&g.push(T)}if(typeof y=="string"){let T=y.trim();if(T.includes("<command-name>")||T.includes("<local-command-")||/^<task-notification>\s*</u.test(T)||T.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T))continue;d||(d=G(y.trim(),80)),u=G(y.trim(),80),p=void 0,s.push({role:"user",timestamp:E,content:_e(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?_e(T.content):JSON.stringify(T.content);s.push({role:"tool_result",timestamp:E,content:w,toolCallId:T.tool_use_id})}}}if(_.type==="assistant"&&_.message){_.message.stop_reason===null||_.message.stop_reason==="tool_use"?p="in_progress":typeof _.message.stop_reason=="string"&&(p="complete"),_.message.model&&(l=_.message.model);let E=new Date(_.timestamp||0),y=_.message.content;if(Array.isArray(y))for(let T of y)T.type==="text"&&T.text?s.push({role:"assistant",timestamp:E,content:_e(T.text),model:_.message.model,...typeof _.message.stop_reason=="string"?{stopReason:_.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:_.message.model,...typeof _.message.stop_reason=="string"?{stopReason:_.message.stop_reason}:{}}):T.type==="thinking"&&T.thinking&&s.push({role:"thinking",timestamp:E,content:T.thinking})}}if(!o)return null;_1(s);let h=await Cv(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:g}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await d1(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=Ks(this.projectsDir,i);if(!(await Lv(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=xv(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Ks(a,d),fileSessionId:u})}}let s=r.find(i=>i.fileSessionId===e);if(s)return s.filePath;let o=r.filter(i=>i.fileSessionId.startsWith(e));if(o.length===1)return o[0].filePath;for(let i of r){let a=await Et(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Dv}from"node:path";function um(t){return new dm(t)}var dm,fm=x(()=>{"use strict";Ov();Ye();Re();$n();Fe();dm=class extends ce{claudeDir;constructor(e){super({provider:new sc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",Z,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:tc}),this.claudeDir=e?.claudeDir??Dv(Q,".claude")}openSession(e){return nc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Dv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as y1,stat as Mv,unlink as E1}from"node:fs/promises";import{join as Ai,basename as T1}from"node:path";function mm(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&w1.has(n)}function v1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Ni(t,e,n){let r=v1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function $v(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function S1(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 Ys(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 Ys(n)}).filter(n=>n.length>0).join(`
1822
- `);try{return JSON.stringify(t)}catch{return String(t)}}function b1(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 I1(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 Pv(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 g=f.content[p];mm(m,p)||g.type==="input_text"&&typeof g.text=="string"&&g.text&&(e++,d=G(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 g=JSON.stringify([u.timestamp??null,u.ordinal??null,f,m]);if(!l.has(g)){l.add(g);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((_,E)=>{a[E]+=_})}}let p=S1(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 w1,oc,Uv=x(()=>{"use strict";Re();w1=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=[Ai(Q,".codex"),Ai(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:Ai(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=Ai(n,"sessions");try{await Mv(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 y1(e)}catch{return n}for(let s of r){let o=Ai(e,s),i=await Mv(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=T1(e,".jsonl"),r=n.match(/rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/);return r?r[1]:n}async extractSummary(e){let n=await Et(e,30),r=await Ae(e),s=this.extractSessionIdFromFilename(e),o="",i,a,l,c,d,u,f;for(let p of n){if(p.type==="session_meta"&&p.payload&&(p.payload.id&&(s=p.payload.id),p.payload.cwd&&(o=p.payload.cwd),p.payload.cli_version&&(i=p.payload.cli_version),p.payload.timestamp&&(l=new Date(p.payload.timestamp)),p.payload.originator&&(u=p.payload.originator),p.payload.source&&(f=p.payload.source)),p.type==="turn_context"&&p.payload&&(p.payload.model&&(a=p.payload.model),!o&&p.payload.cwd&&(o=p.payload.cwd)),p.type==="event_msg"&&p.payload?.type==="user_message"){let g=p.payload.message||p.payload.text;g&&(c||(c=G(g.trim(),80)),d=G(g.trim(),80))}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload.role==="user"&&p.payload.content){let g=p.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let h=0;h<p.payload.content.length;h++){let _=p.payload.content[h];mm(g,h)||_.type==="input_text"&&typeof _.text=="string"&&_.text&&(c||(c=G(_.text.trim(),80)),d=G(_.text.trim(),80))}}}if(!o)return null;let m=await Pv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:$v(u,f),firstUserMessage:c,lastUserMessage:m.lastUserMessage??d,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:m.lastTokenUsage,modelContextWindow:m.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,g=[],h=new Set,_=[],E=(w,S)=>{let b=_.find(I=>!I.mirrored&&I.source!==S&&I.text===w);b?b.mirrored=!0:_.push({text:w,source:S,mirrored:!1})},y=()=>{g.push(..._.map(w=>w.text)),_=[]};for await(let w of Ee(n)){let S=w.timestamp?new Date(w.timestamp):new Date;if(w.type==="session_meta"&&w.payload){w.payload.id&&(u=w.payload.id),w.payload.cwd&&(o=w.payload.cwd),w.payload.cli_version&&(i=w.payload.cli_version),w.payload.timestamp&&(l=new Date(w.payload.timestamp)),f=$v(w.payload.originator,w.payload.source);continue}if(w.type==="turn_context"&&w.payload){w.payload.model&&(a=w.payload.model),!o&&w.payload.cwd&&(o=w.payload.cwd);continue}if(w.type==="response_item"&&w.payload){let b=w.payload;if(b.type==="message"){if(b.role==="user"&&b.content){let I=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(I)){let L=b.content.filter((O,k)=>I[k]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1820
+ `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${Se(i,60)}`:Se(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n.startsWith("item/")){e({kind:"other",summary:n.slice(5)});return}}async function Nv(t,e){if(e.bundleSession!==void 0)return Dn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Ww(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=>Av(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 Rv(t){let e=await Hw({threadId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,serviceHosted:t.serviceHosted});return{provider:"codex",get sessionId(){return e.sessionId},get completedTurns(){return e.completedTurns},async sendTurn(n,r={}){let s=await e.sendTurn(n,{...r,onEvent:o=>{r.onEvent?.(o),r.onProgress&&Av(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var a1,$n=x(()=>{"use strict";Xf();Xf();Bw();am();Bs();re();a1=256});function lm(t={}){let e=Sa(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ce{constructor(){super({provider:new va({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. A stored session can be resumed (history is rebuilt from its completed turns)."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>Xt(r,{...s,env:n(s.env),acpTool:"miniplayer"})})}openSession(r){return ln({...r,env:n(r.env),binary:"miniplayer",acpTool:"miniplayer"})}manualSeedHint(){return{launchCommand:"miniplayer --help",postLaunchNote:'Use lmctl prompt --provider miniplayer --model <model> "<prompt>". Each invocation creates a fresh run unless a session id is given.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal; use lmctl prompt or lmctl batch")}async seed(r,s){try{s?.signal?.throwIfAborted();try{s?.onDispatch?.()}catch{}let o=await Xt(s?.prompt??Z,{binary:"miniplayer",acpTool:"miniplayer",sessionId:"",requireResume:!1,cwd:r,env:n(s?.env),signal:s?.signal,model:s?.model});return{success:!0,sessionId:o.sessionId,usage:o.usage}}catch(o){return{success:!1,usage:o?.usage,error:`miniplayer seed failed: ${o instanceof Error?o.message:String(o)}`}}}}}var cm=x(()=>{"use strict";Ye();Ia();$n();Fe()});import{readdir as rc,stat as Lv,unlink as d1}from"node:fs/promises";import{join as Ks,basename as xv}from"node:path";function u1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function f1(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return _e(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}function m1(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 p1(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 h1(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 Cv(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=p1(h),E=p.message.id?.trim();if(E){let T=c.get(E);T?m1(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 _=h1(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 _1(t){let e=g1(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 g1(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,Ov=x(()=>{"use strict";Re();sc=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Ks(Q,".claude"),this.projectsDir=Ks(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=Ks(this.projectsDir,r);if(!(await Lv(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=xv(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Ks(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await Et(e,50),s=await Ae(e),o="",i,a,l,c,d,u;for(let m of r)if(!u1(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 Cv(e);return{provider:"claude",sessionId:n,slug:i,cwd:o,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:f.lastUserMessage??d,messageCount:f.messageCount,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:f.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:f.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:f.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u,f,m=e,p,_=[];for await(let g of Ee(n))if(g.type!=="file-history-snapshot"&&!g.isSidechain){if(!o&&g.cwd&&(o=g.cwd),!i&&g.slug&&(i=g.slug),!a&&g.version&&(a=g.version),!c&&g.gitBranch&&(c=g.gitBranch),!f&&g.timestamp&&(f=new Date(g.timestamp)),g.sessionId&&(m=g.sessionId),g.type==="system"||g.type==="progress"||g.type==="queue-operation"){s.push({role:"system",timestamp:new Date(g.timestamp||0),content:f1(g)});continue}if(g.type==="user"&&g.message){if(g.isMeta)continue;let E=new Date(g.timestamp||0),y=g.message.content;if(g.isCompactSummary!==!0&&g.isVisibleInTranscriptOnly!==!0&&g.promptSource!=="system"&&g.toolUseResult===void 0&&g.origin?.kind!=="task-notification"&&g.interruptedMessageId===void 0&&g.interruptedByShutdown!==!0&&g.scheduledTaskId===void 0&&g.scheduledFireId===void 0&&!(Array.isArray(y)&&y.some(T=>T.type==="tool_result"))){let T=typeof y=="string"?y:Array.isArray(y)?y.filter(w=>w.type==="text"&&typeof w.text=="string").map(w=>w.text).join(`
1821
+ `):"";T&&!/^<(?:command-name>|local-command-|task-notification>\s*<)/u.test(T.trimStart())&&!/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T.trim())&&!T.trimStart().startsWith("lmctl seed initial connection only.")&&_.push(T)}if(typeof y=="string"){let T=y.trim();if(T.includes("<command-name>")||T.includes("<local-command-")||/^<task-notification>\s*</u.test(T)||T.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T))continue;d||(d=G(y.trim(),80)),u=G(y.trim(),80),p=void 0,s.push({role:"user",timestamp:E,content:_e(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?_e(T.content):JSON.stringify(T.content);s.push({role:"tool_result",timestamp:E,content:w,toolCallId:T.tool_use_id})}}}if(g.type==="assistant"&&g.message){g.message.stop_reason===null||g.message.stop_reason==="tool_use"?p="in_progress":typeof g.message.stop_reason=="string"&&(p="complete"),g.message.model&&(l=g.message.model);let E=new Date(g.timestamp||0),y=g.message.content;if(Array.isArray(y))for(let T of y)T.type==="text"&&T.text?s.push({role:"assistant",timestamp:E,content:_e(T.text),model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="tool_use"?s.push({role:"tool_use",timestamp:E,content:T.name||"unknown tool",toolName:T.name,toolInput:JSON.stringify(T.input,null,2),toolInputData:T.input,toolCallId:T.id,model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="thinking"&&T.thinking&&s.push({role:"thinking",timestamp:E,content:T.thinking})}}if(!o)return null;_1(s);let h=await Cv(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 d1(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=Ks(this.projectsDir,i);if(!(await Lv(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=xv(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Ks(a,d),fileSessionId:u})}}let s=r.find(i=>i.fileSessionId===e);if(s)return s.filePath;let o=r.filter(i=>i.fileSessionId.startsWith(e));if(o.length===1)return o[0].filePath;for(let i of r){let a=await Et(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as Dv}from"node:path";function um(t){return new dm(t)}var dm,fm=x(()=>{"use strict";Ov();Ye();Re();$n();Fe();dm=class extends ce{claudeDir;constructor(e){super({provider:new sc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",Z,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:tc}),this.claudeDir=e?.claudeDir??Dv(Q,".claude")}openSession(e){return nc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[Dv(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as y1,stat as Mv,unlink as E1}from"node:fs/promises";import{join as Ai,basename as T1}from"node:path";function mm(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&w1.has(n)}function v1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Ni(t,e,n){let r=v1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function $v(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function S1(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 Ys(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 Ys(n)}).filter(n=>n.length>0).join(`
1822
+ `);try{return JSON.stringify(t)}catch{return String(t)}}function b1(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 I1(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 Pv(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=S1(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 w1,oc,Uv=x(()=>{"use strict";Re();w1=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=[Ai(Q,".codex"),Ai(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:Ai(e,"sessions"),filePattern:/\.jsonl$/}))}async getSessionsDirs(){let e=[];for(let n of this.codexDirs){let r=Ai(n,"sessions");try{await Mv(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 y1(e)}catch{return n}for(let s of r){let o=Ai(e,s),i=await Mv(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=T1(e,".jsonl"),r=n.match(/rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-(.+)$/);return r?r[1]:n}async extractSummary(e){let n=await Et(e,30),r=await Ae(e),s=this.extractSessionIdFromFilename(e),o="",i,a,l,c,d,u,f;for(let p of n){if(p.type==="session_meta"&&p.payload&&(p.payload.id&&(s=p.payload.id),p.payload.cwd&&(o=p.payload.cwd),p.payload.cli_version&&(i=p.payload.cli_version),p.payload.timestamp&&(l=new Date(p.payload.timestamp)),p.payload.originator&&(u=p.payload.originator),p.payload.source&&(f=p.payload.source)),p.type==="turn_context"&&p.payload&&(p.payload.model&&(a=p.payload.model),!o&&p.payload.cwd&&(o=p.payload.cwd)),p.type==="event_msg"&&p.payload?.type==="user_message"){let _=p.payload.message||p.payload.text;_&&(c||(c=G(_.trim(),80)),d=G(_.trim(),80))}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload.role==="user"&&p.payload.content){let _=p.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let h=0;h<p.payload.content.length;h++){let g=p.payload.content[h];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 Pv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:$v(u,f),firstUserMessage:c,lastUserMessage:m.lastUserMessage??d,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:m.lastTokenUsage,modelContextWindow:m.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ae(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,_=[],h=new Set,g=[],E=(w,S)=>{let b=g.find(I=>!I.mirrored&&I.source!==S&&I.text===w);b?b.mirrored=!0:g.push({text:w,source:S,mirrored:!1})},y=()=>{_.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let S=w.timestamp?new Date(w.timestamp):new Date;if(w.type==="session_meta"&&w.payload){w.payload.id&&(u=w.payload.id),w.payload.cwd&&(o=w.payload.cwd),w.payload.cli_version&&(i=w.payload.cli_version),w.payload.timestamp&&(l=new Date(w.payload.timestamp)),f=$v(w.payload.originator,w.payload.source);continue}if(w.type==="turn_context"&&w.payload){w.payload.model&&(a=w.payload.model),!o&&w.payload.cwd&&(o=w.payload.cwd);continue}if(w.type==="response_item"&&w.payload){let b=w.payload;if(b.type==="message"){if(b.role==="user"&&b.content){let I=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(I)){let L=b.content.filter((O,k)=>I[k]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1823
1823
  `);I.includes("user.text")&&L&&(!b.id||!h.has(b.id))&&(E(L,"metadata"),b.id&&h.add(b.id))}for(let L=0;L<b.content.length;L++){let O=b.content[L];if(!mm(I,L)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let k=O.text.trim();c||(c=G(k,80)),d=G(k,80),Ni(s,p,{role:"user",timestamp:S,content:_e(k)})}}continue}if(b.role==="assistant"&&b.content){for(let I of b.content)I.type==="output_text"&&typeof I.text=="string"&&I.text&&Ni(s,p,{role:"assistant",timestamp:S,content:_e(I.text),model:a});continue}if(b.role!=="user"&&b.role!=="assistant"&&b.content){for(let I of b.content)(I.type==="input_text"||I.type==="output_text")&&typeof I.text=="string"&&I.text&&Ni(s,p,{role:"system",timestamp:S,content:_e(I.text.trim())});continue}}if(b.type==="function_call"){s.push({role:"tool_use",timestamp:S,content:b.name||"unknown tool",toolName:b.name,toolInput:b.arguments!==void 0?_e(Ys(b.arguments)):void 0,toolInputData:b1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(Ys(b.output)),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:S,content:b.name||"unknown tool",toolName:b.name,toolInput:b.input!==void 0?_e(Ys(b.input)):void 0,toolInputData:I1(b.name,b.input),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:S,content:_e(Ys(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let I=b.summary.map(L=>Ys(L.text)).join(`
1824
- `);I.trim()&&Ni(s,p,{role:"thinking",timestamp:S,content:_e(I)});continue}}if(w.type==="event_msg"&&w.payload&&(w.payload.type==="task_started"?(y(),m="in_progress"):w.payload.type==="task_complete"?m="complete":w.payload.type==="turn_aborted"&&(m="aborted"),w.payload.type==="user_message"&&typeof w.payload.message=="string"&&E(w.payload.message,"event"),w.payload.type==="agent_reasoning")){let b=w.payload.message||w.payload.text;b&&Ni(s,p,{role:"thinking",timestamp:S,content:_e(b)})}}if(!o)return null;y();let T=await Pv(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:g}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await E1(n),!0):!1}async resolveSessionFile(e){let n=await this.getSessionsDirs(),r=[];for(let o of n){let i=await this.findSessionFiles(o);r.push(...i)}for(let o of r)if(this.extractSessionIdFromFilename(o)===e)return o;let s=[];for(let o of r)this.extractSessionIdFromFilename(o).startsWith(e)&&s.push(o);if(s.length===1)return s[0];for(let o of r){let i=await Et(o,1);if(i.length>0&&i[0].type==="session_meta"){let a=i[0].payload?.id;if(a===e||a&&a.startsWith(e))return o}}return null}}});import{execFile as k1}from"node:child_process";import{realpathSync as Fv,readdirSync as A1}from"node:fs";import{homedir as N1}from"node:os";import{join as ic,resolve as jv,sep as R1}from"node:path";function _m(t){return new hm(t)}var pm,hm,gm=x(()=>{"use strict";Uv();Ye();$n();Fe();pm="gpt-5.6-sol",hm=class extends ce{nativeLaunchFailureHint="If the message mentions a shared background server or feature mismatch, it could be a CLI/daemon version mismatch: compare codex --version with codex app-server daemon version (cliVersion vs appServerVersion) and search the web for the error text.";constructor(e){super({provider:new oc(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append"},binary:"codex",seedArgs:["exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","-"],seedStdin:`${Z}
1825
- `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:Nv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(L,O)=>new Promise(k=>{let v=Math.ceil(n-performance.now());if(v<=0){k(void 0);return}let A,N=()=>{try{A?.kill("SIGKILL")}catch{}},R=()=>{N()},C=()=>{N()},$=()=>{N()};process.once("exit",R),process.once("SIGINT",C),process.once("SIGTERM",$);let P=()=>{process.removeListener("exit",R),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",$)};A=k1(L,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:v,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{P(),k(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let L=s.match(/\{[\s\S]*\}/);if(L)try{o=JSON.parse(L[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=L=>typeof L=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(L)&&L.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,g=m+"; using the daemon's binary. "+p,h={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},_=jv(e.cwd,e.env.CODEX_HOME||ic(e.env.HOME||N1(),".codex")),E=[],y=[],T=process.platform==="win32"?"codex.exe":"codex",w=o.managedCodexPath??o.managed_codex_path;typeof w=="string"&&w.trim().length>0&&E.push(w.trim());let S=L=>L.replace(/\+.*$/,""),b=S(d),I=process.arch==="arm64"?"aarch64":"x86_64";for(let L of["app-server-daemon","standalone"]){let O=ic(_,"packages",L,"releases");try{y.push(Fv(O)+R1);let k=A1(O).filter(v=>process.arch==="x64"&&(v.includes("aarch64")||v.includes("arm64"))||process.arch==="arm64"&&(v.includes("x86_64")||v.includes("x64")||v.includes("i686"))?!1:v===d||v===b||v.startsWith(d+"-")||v.startsWith(b+"-"));k.sort((v,A)=>{let N=v.includes(I)?0:1,R=A.includes(I)?0:1;return N!==R?N-R:v.localeCompare(A)});for(let v of k)E.push(ic(O,v,"bin",T)),E.push(ic(O,v,T))}catch{}}for(let L of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Fv(jv(e.cwd,L)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let v=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(v&&(v===d||S(v)===b))return{kind:"use-binary",binary:O,message:g}}return h}openSession(e){return Rv({...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 L1}from"node:crypto";import{readdir as Ri,readFile as Wv,stat as ac,unlink as x1}from"node:fs/promises";import{join as wt,basename as C1,dirname as O1}from"node:path";import{cwd as D1}from"node:process";function ym(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Hv(t){return t==="user"}function Em(t){return t==="gemini"||t==="assistant"}function Zr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function M1(t){return`${t.sessionId}\0${t.cwd}`}function $1(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 Bv(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 P1(t){return L1("sha256").update(t).digest("hex")}function Li(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=O1(n);if(r===n)break;n=r}}var cc,Xv=x(()=>{"use strict";Re();Ma();re();cc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||wt(Q,".gemini");this.geminiProjectsFile=wt(n,"projects.json"),this.geminiTmpDir=wt(n,"tmp");let r=e.claudeDir||wt(Q,".claude");this.claudeProjectsDir=wt(r,"projects");let s=[wt(Q,".codex"),wt(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=>wt(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=M1(s),i=n.get(o);n.set(o,i?$1(i,s):s)}catch{}return[...n.values()]}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r;try{r=await this.readSessionFile(n)}catch{return null}if(!r)return null;let s=await Ae(n),o=[],i=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",d=await this.resolveWorkspace(c),u,f,m;for(let _ of a){let E=Zr(_.timestamp),y=_.type,T=_e(ym(_.content));if(Hv(y)){let S=ym(_.content);S&&i.push(S);let b=T.trim();b&&(u||(u=G(b,80)),f=G(b,80)),o.push({role:"user",timestamp:E,content:b||T});continue}if(Em(y)){_.model&&(m=_.model);for(let S of _.thoughts||[]){let b=[S.subject,S.description].filter(Boolean).join(`
1826
- `).trim();b&&o.push({role:"thinking",timestamp:Zr(S.timestamp,E),content:_e(b)})}o.push({role:"assistant",timestamp:E,content:T,model:_.model});continue}let w=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${w}${T}`.trim()})}let p=Zr(r.startTime,s.createdAt),g=Zr(r.lastUpdated,s.modifiedAt),h=Bv(a);return{provider:"gemini",sessionId:l,cwd:d,createdAt:p,modifiedAt:g,model:m,startCommand:"gemini",firstUserMessage:u,lastUserMessage:f,messageCount:o.filter(_=>_.role==="user"||_.role==="assistant").length,filePath:n,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCachedInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,totalReasoningOutputTokens:h.totalReasoningOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:o,userPrompts:i}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await Ae(e),s=n.messages||[],o=n.sessionId||this.extractSessionIdFromFilename(e),i=n.projectHash||"",a=await this.resolveWorkspace(i),l,c,d,u=0;for(let m of s)if(Hv(m.type)){u++;let p=ym(m.content).trim();p&&(l||(l=G(_e(p),80)),c=G(_e(p),80))}else Em(m.type)&&(u++,m.model&&(d=m.model));let f=Bv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Zr(n.startTime,r.createdAt),modifiedAt:Zr(n.lastUpdated,r.modifiedAt),model:d,startCommand:"gemini",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCachedInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,totalReasoningOutputTokens:f.totalReasoningOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async readSessionFile(e){let n=await Wv(e,"utf-8");if(Fo(n)==="unknown")return U({event:"gemini_session_format_unknown",provider:"gemini",file:e,preview:n.slice(0,120),message:`gemini session file at ${e} matches neither old (.json with messages[]) nor new (.jsonl with kind metadata) format. Skipping; lmctl ls / audit / stats will not see this session.`}),null;try{return Mr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=C1(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=wt(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(wt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await x1(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let o=await this.readSessionFile(s).catch(()=>null),i=this.extractSessionIdFromFilename(s),a=o?.sessionId||i,l=a===e||a.startsWith(e),c=i===e||i.startsWith(e)||i.length>=8&&e.startsWith(i);if(!l&&!c)continue;let d=await Ae(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Zr(o?.lastUpdated,d.modifiedAt)})}return r.sort((s,o)=>{let i=o.modifiedAt.getTime()-s.modifiedAt.getTime();return i!==0?i:o.filePath.localeCompare(s.filePath)}),r[0]?.filePath??null}async resolveWorkspace(e){return e?(await this.getWorkspaceHashMap()).get(e)||`[hash:${e.slice(0,16)}]`:"(unknown workspace)"}async getWorkspaceHashMap(){if(this.workspaceHashMap)return this.workspaceHashMap;let e=new Set;Li(e,D1());for(let r of this.extraWorkspacePaths)Li(e,r);for(let r of await this.collectGeminiProjectPaths())Li(e,r);for(let r of await this.collectCodexCwds())Li(e,r);for(let r of await this.collectClaudeCwds())Li(e,r);let n=new Map;for(let r of e)n.set(P1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Wv(this.geminiProjectsFile,"utf-8")}catch{return[]}try{let r=JSON.parse(e).projects;return!r||typeof r!="object"||Array.isArray(r)?[]:Object.keys(r)}catch{return[]}}async collectCodexCwds(){let e=new Set;for(let n of this.codexSessionDirs){let r=await this.findJsonlFiles(n);for(let s of r){let i=(await Et(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Ri(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=wt(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=wt(s,a),d=(await Et(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=wt(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 U1,writeFileSync as F1,mkdirSync as j1}from"node:fs";import{join as W1,dirname as H1}from"node:path";import{randomUUID as B1}from"node:crypto";function wm(t){return new Tm(t)}var Tm,vm=x(()=>{"use strict";Ps();Xv();Ye();Fe();Ma();Tm=class extends ce{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",Z,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(sr))})}seed(e,n){return Promise.resolve({success:!1,error:sr})}sendTurn(e,n){return Promise.reject(new Error(sr))}openSession(e){return Promise.reject(new Error(sr))}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
1824
+ `);I.trim()&&Ni(s,p,{role:"thinking",timestamp:S,content:_e(I)});continue}}if(w.type==="event_msg"&&w.payload&&(w.payload.type==="task_started"?(y(),m="in_progress"):w.payload.type==="task_complete"?m="complete":w.payload.type==="turn_aborted"&&(m="aborted"),w.payload.type==="user_message"&&typeof w.payload.message=="string"&&E(w.payload.message,"event"),w.payload.type==="agent_reasoning")){let b=w.payload.message||w.payload.text;b&&Ni(s,p,{role:"thinking",timestamp:S,content:_e(b)})}}if(!o)return null;y();let T=await Pv(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 E1(n),!0):!1}async resolveSessionFile(e){let n=await this.getSessionsDirs(),r=[];for(let o of n){let i=await this.findSessionFiles(o);r.push(...i)}for(let o of r)if(this.extractSessionIdFromFilename(o)===e)return o;let s=[];for(let o of r)this.extractSessionIdFromFilename(o).startsWith(e)&&s.push(o);if(s.length===1)return s[0];for(let o of r){let i=await Et(o,1);if(i.length>0&&i[0].type==="session_meta"){let a=i[0].payload?.id;if(a===e||a&&a.startsWith(e))return o}}return null}}});import{execFile as k1}from"node:child_process";import{realpathSync as Fv,readdirSync as A1}from"node:fs";import{homedir as N1}from"node:os";import{join as ic,resolve as jv,sep as R1}from"node:path";function _m(t){return new hm(t)}var pm,hm,gm=x(()=>{"use strict";Uv();Ye();$n();Fe();pm="gpt-5.6-sol",hm=class extends ce{nativeLaunchFailureHint="If the message mentions a shared background server or feature mismatch, it could be a CLI/daemon version mismatch: compare codex --version with codex app-server daemon version (cliVersion vs appServerVersion) and search the web for the error text.";constructor(e){super({provider:new oc(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append"},binary:"codex",seedArgs:["exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","-"],seedStdin:`${Z}
1825
+ `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:Nv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(L,O)=>new Promise(k=>{let v=Math.ceil(n-performance.now());if(v<=0){k(void 0);return}let A,N=()=>{try{A?.kill("SIGKILL")}catch{}},R=()=>{N()},C=()=>{N()},$=()=>{N()};process.once("exit",R),process.once("SIGINT",C),process.once("SIGTERM",$);let P=()=>{process.removeListener("exit",R),process.removeListener("SIGINT",C),process.removeListener("SIGTERM",$)};A=k1(L,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:v,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{P(),k(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let L=s.match(/\{[\s\S]*\}/);if(L)try{o=JSON.parse(L[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=L=>typeof L=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(L)&&L.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,_=m+"; using the daemon's binary. "+p,h={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},g=jv(e.cwd,e.env.CODEX_HOME||ic(e.env.HOME||N1(),".codex")),E=[],y=[],T=process.platform==="win32"?"codex.exe":"codex",w=o.managedCodexPath??o.managed_codex_path;typeof w=="string"&&w.trim().length>0&&E.push(w.trim());let S=L=>L.replace(/\+.*$/,""),b=S(d),I=process.arch==="arm64"?"aarch64":"x86_64";for(let L of["app-server-daemon","standalone"]){let O=ic(g,"packages",L,"releases");try{y.push(Fv(O)+R1);let k=A1(O).filter(v=>process.arch==="x64"&&(v.includes("aarch64")||v.includes("arm64"))||process.arch==="arm64"&&(v.includes("x86_64")||v.includes("x64")||v.includes("i686"))?!1:v===d||v===b||v.startsWith(d+"-")||v.startsWith(b+"-"));k.sort((v,A)=>{let N=v.includes(I)?0:1,R=A.includes(I)?0:1;return N!==R?N-R:v.localeCompare(A)});for(let v of k)E.push(ic(O,v,"bin",T)),E.push(ic(O,v,T))}catch{}}for(let L of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Fv(jv(e.cwd,L)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let v=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(v&&(v===d||S(v)===b))return{kind:"use-binary",binary:O,message:_}}return h}openSession(e){return Rv({...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 L1}from"node:crypto";import{readdir as Ri,readFile as Wv,stat as ac,unlink as x1}from"node:fs/promises";import{join as wt,basename as C1,dirname as O1}from"node:path";import{cwd as D1}from"node:process";function ym(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Hv(t){return t==="user"}function Em(t){return t==="gemini"||t==="assistant"}function Zr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function M1(t){return`${t.sessionId}\0${t.cwd}`}function $1(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 Bv(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 P1(t){return L1("sha256").update(t).digest("hex")}function Li(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=O1(n);if(r===n)break;n=r}}var cc,Xv=x(()=>{"use strict";Re();Ma();re();cc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||wt(Q,".gemini");this.geminiProjectsFile=wt(n,"projects.json"),this.geminiTmpDir=wt(n,"tmp");let r=e.claudeDir||wt(Q,".claude");this.claudeProjectsDir=wt(r,"projects");let s=[wt(Q,".codex"),wt(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=>wt(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=M1(s),i=n.get(o);n.set(o,i?$1(i,s):s)}catch{}return[...n.values()]}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r;try{r=await this.readSessionFile(n)}catch{return null}if(!r)return null;let s=await Ae(n),o=[],i=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",d=await this.resolveWorkspace(c),u,f,m;for(let g of a){let E=Zr(g.timestamp),y=g.type,T=_e(ym(g.content));if(Hv(y)){let S=ym(g.content);S&&i.push(S);let b=T.trim();b&&(u||(u=G(b,80)),f=G(b,80)),o.push({role:"user",timestamp:E,content:b||T});continue}if(Em(y)){g.model&&(m=g.model);for(let S of g.thoughts||[]){let b=[S.subject,S.description].filter(Boolean).join(`
1826
+ `).trim();b&&o.push({role:"thinking",timestamp:Zr(S.timestamp,E),content:_e(b)})}o.push({role:"assistant",timestamp:E,content:T,model:g.model});continue}let w=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${w}${T}`.trim()})}let p=Zr(r.startTime,s.createdAt),_=Zr(r.lastUpdated,s.modifiedAt),h=Bv(a);return{provider:"gemini",sessionId:l,cwd:d,createdAt:p,modifiedAt:_,model:m,startCommand:"gemini",firstUserMessage:u,lastUserMessage:f,messageCount:o.filter(g=>g.role==="user"||g.role==="assistant").length,filePath:n,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCachedInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,totalReasoningOutputTokens:h.totalReasoningOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:o,userPrompts:i}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await Ae(e),s=n.messages||[],o=n.sessionId||this.extractSessionIdFromFilename(e),i=n.projectHash||"",a=await this.resolveWorkspace(i),l,c,d,u=0;for(let m of s)if(Hv(m.type)){u++;let p=ym(m.content).trim();p&&(l||(l=G(_e(p),80)),c=G(_e(p),80))}else Em(m.type)&&(u++,m.model&&(d=m.model));let f=Bv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Zr(n.startTime,r.createdAt),modifiedAt:Zr(n.lastUpdated,r.modifiedAt),model:d,startCommand:"gemini",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCachedInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,totalReasoningOutputTokens:f.totalReasoningOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async readSessionFile(e){let n=await Wv(e,"utf-8");if(Fo(n)==="unknown")return U({event:"gemini_session_format_unknown",provider:"gemini",file:e,preview:n.slice(0,120),message:`gemini session file at ${e} matches neither old (.json with messages[]) nor new (.jsonl with kind metadata) format. Skipping; lmctl ls / audit / stats will not see this session.`}),null;try{return Mr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=C1(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=wt(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(wt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await x1(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let o=await this.readSessionFile(s).catch(()=>null),i=this.extractSessionIdFromFilename(s),a=o?.sessionId||i,l=a===e||a.startsWith(e),c=i===e||i.startsWith(e)||i.length>=8&&e.startsWith(i);if(!l&&!c)continue;let d=await Ae(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Zr(o?.lastUpdated,d.modifiedAt)})}return r.sort((s,o)=>{let i=o.modifiedAt.getTime()-s.modifiedAt.getTime();return i!==0?i:o.filePath.localeCompare(s.filePath)}),r[0]?.filePath??null}async resolveWorkspace(e){return e?(await this.getWorkspaceHashMap()).get(e)||`[hash:${e.slice(0,16)}]`:"(unknown workspace)"}async getWorkspaceHashMap(){if(this.workspaceHashMap)return this.workspaceHashMap;let e=new Set;Li(e,D1());for(let r of this.extraWorkspacePaths)Li(e,r);for(let r of await this.collectGeminiProjectPaths())Li(e,r);for(let r of await this.collectCodexCwds())Li(e,r);for(let r of await this.collectClaudeCwds())Li(e,r);let n=new Map;for(let r of e)n.set(P1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Wv(this.geminiProjectsFile,"utf-8")}catch{return[]}try{let r=JSON.parse(e).projects;return!r||typeof r!="object"||Array.isArray(r)?[]:Object.keys(r)}catch{return[]}}async collectCodexCwds(){let e=new Set;for(let n of this.codexSessionDirs){let r=await this.findJsonlFiles(n);for(let s of r){let i=(await Et(s,1).catch(()=>[]))[0]?.payload?.cwd;i&&e.add(i)}}return[...e]}async collectClaudeCwds(){let e=new Set,n;try{n=await Ri(this.claudeProjectsDir)}catch{return[]}for(let r of n){let s=wt(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=wt(s,a),d=(await Et(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=wt(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 U1,writeFileSync as F1,mkdirSync as j1}from"node:fs";import{join as W1,dirname as H1}from"node:path";import{randomUUID as B1}from"node:crypto";function wm(t){return new Tm(t)}var Tm,vm=x(()=>{"use strict";Ps();Xv();Ye();Fe();Ma();Tm=class extends ce{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",Z,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(sr))})}seed(e,n){return Promise.resolve({success:!1,error:sr})}sendTurn(e,n){return Promise.reject(new Error(sr))}openSession(e){return Promise.reject(new Error(sr))}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
1827
1827
  `)}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}manualSeedHint(e){return{launchCommand:`cd ${e} && gemini --skip-trust`,postLaunchNote: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=U1(r,"utf-8"),o=Fo(s),i=Mr(s),a=B1();i.sessionId=a,i.kind="main";let l=H1(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=W1(l,u);return j1(l,{recursive:!0}),F1(f,cy(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 qv,readFile as X1,rm as q1,stat as zs}from"node:fs/promises";import{basename as G1,join as qt}from"node:path";function V1(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 Vv(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=V1(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function Gv(t){let e=t.shutdownTotals,n=t.lastAssistantOutputTokens!==void 0?{outputTokens:t.lastAssistantOutputTokens}:void 0;return{totalInputTokens:e?.inputTokens,totalCachedInputTokens:e?.cacheReadTokens,totalCacheWriteInputTokens:e?.cacheWriteTokens,totalOutputTokens:e?.outputTokens??(t.lastAssistantOutputTokens===void 0?void 0:t.assistantOutputSum),totalReasoningOutputTokens:e?.reasoningTokens,lastTokenUsage:n}}function J1(t){let e={};for(let n of t.split(`
1828
1828
  `)){let r=n.match(/^(\w+):\s*(.*)$/);r&&(e[r[1]]=r[2].trim())}return{id:e.id,cwd:e.cwd,summary_count:e.summary_count?parseInt(e.summary_count,10):void 0,created_at:e.created_at,updated_at:e.updated_at,summary:e.summary}}function es(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function K1(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++;Vv(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function Y1(t){let e=z1(t),n=new Map;for(let r of t){if(r.role!=="tool_use"||r.toolCallId===void 0)continue;if(r.toolName==="bash"){let l=e.get(r.toolCallId),d=[l?.content,l?.toolDetailedContent].filter(f=>typeof f=="string").join(`
1829
- `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(d===void 0)continue;let u=`copilot-shell:${d}:${r.toolCallId}`;n.set(d,u),r.backgroundTaskId=u,l!==void 0&&(l.backgroundTaskId=u);continue}if(!["read_bash","write_bash","stop_bash"].includes(r.toolName??""))continue;let s=r.toolInputData?.shellId;if(typeof s!="string"&&typeof s!="number")continue;let o=String(s),i=n.get(o);if(i===void 0)continue;r.backgroundTaskId=i;let a=e.get(r.toolCallId);a!==void 0&&(a.backgroundTaskId=i)}}function z1(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,Jv=x(()=>{"use strict";Re();dc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||qt(Q,".copilot");this.sessionStateDir=qt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await qv(this.sessionStateDir)}catch{return e}for(let r of n){let s=qt(this.sessionStateDir,r);if((await zs(s).catch(()=>null))?.isDirectory())try{let i=await this.extractSummary(s,r);i&&e.push(i)}catch{}}return e}async loadSession(e){let n=await this.resolveSessionDir(e);if(!n)return null;let r=await this.readWorkspaceYaml(n),s=qt(n,"events.jsonl"),o=await zs(s).catch(()=>null),i=o?s:qt(n,"workspace.yaml"),a=await Ae(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,g,h,_=r?.id||G1(n)||e,E=Sm();if(o)for await(let y of Ee(s)){let T=es(y.timestamp)||a.modifiedAt;if(Vv(E,y),y.type==="session.start"&&y.data){y.data.sessionId&&(_=y.data.sessionId),y.data.copilotVersion&&(f=y.data.copilotVersion),y.data.startTime&&(h=es(y.data.startTime)),y.data.selectedModel&&(u=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){u=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let w=y.data.content||"";w&&c.push(w);let S=w.trim();S&&(p||(p=G(S,80)),g=G(S,80)),l.push({role:"user",timestamp:T,content:_e(S||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:_e(w),model:u}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments?JSON.stringify(S.arguments,null,2):void 0,toolInputData:At(S.arguments),toolCallId:S.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:_e(w),toolDetailedContent:S?_e(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:_e(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let w=y.data?.message||"";w.trim()&&l.push({role:"system",timestamp:T,content:_e(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return Y1(l),{provider:"copilot",sessionId:_,cwd:d,createdAt:h??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",gitBranch:m,firstUserMessage:p,lastUserMessage:g,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:i,...Gv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=qt(e,"events.jsonl"),o=await zs(s).catch(()=>null),i=o?s:qt(e,"workspace.yaml"),a=await Ae(o?s:e),l=o?await Et(s,20):[],c=r?.id||n,d=r?.cwd||"(unknown workspace)",u,f,m,p,g;for(let _ of l)if(_.type==="session.start"&&_.data&&(_.data.sessionId&&(c=_.data.sessionId),_.data.copilotVersion&&(f=_.data.copilotVersion),_.data.startTime&&(m=es(_.data.startTime)),_.data.selectedModel&&(u=_.data.selectedModel),_.data.context?.cwd&&(d=_.data.context.cwd)),_.type==="session.model_change"&&_.data?.newModel&&(u||(u=_.data.newModel)),_.type==="user.message"&&_.data){let E=(_.data.content||"").trim();E&&(p||(p=G(E,80)),g=G(E,80))}if(!p){let _=(r?.summary||"").trim();_&&(p=G(_,80))}let h=o?await K1(s):{messageCount:0,tokens:Sm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??g,messageCount:h.messageCount,filePath:i,...Gv(h.tokens)}}async readWorkspaceYaml(e){let n=qt(e,"workspace.yaml");try{let r=await X1(n,"utf-8");return J1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await q1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await qv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=qt(this.sessionStateDir,e);if((await zs(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=qt(this.sessionStateDir,s);(await zs(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=qt(this.sessionStateDir,s);if(!(await zs(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";Jv();Ye();$n();re();Fe();bm=class extends ce{copilotDir;constructor(e){super({provider:new dc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",Z,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>Xt(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return ln({...e,env:this.copilotDir!==void 0?{...e.env??process.env,COPILOT_HOME:this.copilotDir}:e.env,binary:"copilot",acpTool:"copilot"})}async seed(e,n){let r=await super.seed(e,n);if(n?.model===void 0||n.model.trim().length===0)return r;let s="copilot seed does not implement per-session model selection";return He({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function Nm(t){return new Am(t)}var Am,Rm=x(()=>{"use strict";ec();Ye();$n();Fe();Am=class extends ce{constructor(e){super({provider:new Js(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"custom-tool",leaderSetupHint:"OpenCode supports custom tools via .opencode/tools/ directory"},binary:"opencode",seedArgs:["run",Z],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>Xt(n,{...r,acpTool:"opencode"})})}openSession(e){return ln({...e,binary:"opencode",acpTool:"opencode"})}seedArgsFor(e){let n=["run"];return e?.model&&n.push("--model",e.model),e?.effort&&n.push("--variant",e.effort),n.push(e?.prompt??Z),n}}});import{appendFile as Q1,mkdir as Z1,readFile as Kv,readdir as Yv,rm as eU,stat as zv}from"node:fs/promises";import{basename as tU,dirname as nU,isAbsolute as Qv,join as ts,relative as rU,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 aU(t){return typeof t=="number"?new Date(t):xm(t)??new Date(0)}function Zv(t){return typeof t=="string"?t.trim():Array.isArray(t)?t.map(e=>e&&typeof e=="object"&&"text"in e&&typeof e.text=="string"?e.text:"").filter(Boolean).join(`
1829
+ `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(d===void 0)continue;let u=`copilot-shell:${d}:${r.toolCallId}`;n.set(d,u),r.backgroundTaskId=u,l!==void 0&&(l.backgroundTaskId=u);continue}if(!["read_bash","write_bash","stop_bash"].includes(r.toolName??""))continue;let s=r.toolInputData?.shellId;if(typeof s!="string"&&typeof s!="number")continue;let o=String(s),i=n.get(o);if(i===void 0)continue;r.backgroundTaskId=i;let a=e.get(r.toolCallId);a!==void 0&&(a.backgroundTaskId=i)}}function z1(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,Jv=x(()=>{"use strict";Re();dc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||qt(Q,".copilot");this.sessionStateDir=qt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await qv(this.sessionStateDir)}catch{return e}for(let r of n){let s=qt(this.sessionStateDir,r);if((await zs(s).catch(()=>null))?.isDirectory())try{let i=await this.extractSummary(s,r);i&&e.push(i)}catch{}}return e}async loadSession(e){let n=await this.resolveSessionDir(e);if(!n)return null;let r=await this.readWorkspaceYaml(n),s=qt(n,"events.jsonl"),o=await zs(s).catch(()=>null),i=o?s:qt(n,"workspace.yaml"),a=await Ae(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,_,h,g=r?.id||G1(n)||e,E=Sm();if(o)for await(let y of Ee(s)){let T=es(y.timestamp)||a.modifiedAt;if(Vv(E,y),y.type==="session.start"&&y.data){y.data.sessionId&&(g=y.data.sessionId),y.data.copilotVersion&&(f=y.data.copilotVersion),y.data.startTime&&(h=es(y.data.startTime)),y.data.selectedModel&&(u=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){u=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let w=y.data.content||"";w&&c.push(w);let S=w.trim();S&&(p||(p=G(S,80)),_=G(S,80)),l.push({role:"user",timestamp:T,content:_e(S||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:_e(w),model:u}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments?JSON.stringify(S.arguments,null,2):void 0,toolInputData:At(S.arguments),toolCallId:S.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:_e(w),toolDetailedContent:S?_e(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:_e(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let w=y.data?.message||"";w.trim()&&l.push({role:"system",timestamp:T,content:_e(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return Y1(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:h??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",gitBranch:m,firstUserMessage:p,lastUserMessage:_,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:i,...Gv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=qt(e,"events.jsonl"),o=await zs(s).catch(()=>null),i=o?s:qt(e,"workspace.yaml"),a=await Ae(o?s:e),l=o?await Et(s,20):[],c=r?.id||n,d=r?.cwd||"(unknown workspace)",u,f,m,p,_;for(let g of l)if(g.type==="session.start"&&g.data&&(g.data.sessionId&&(c=g.data.sessionId),g.data.copilotVersion&&(f=g.data.copilotVersion),g.data.startTime&&(m=es(g.data.startTime)),g.data.selectedModel&&(u=g.data.selectedModel),g.data.context?.cwd&&(d=g.data.context.cwd)),g.type==="session.model_change"&&g.data?.newModel&&(u||(u=g.data.newModel)),g.type==="user.message"&&g.data){let E=(g.data.content||"").trim();E&&(p||(p=G(E,80)),_=G(E,80))}if(!p){let g=(r?.summary||"").trim();g&&(p=G(g,80))}let h=o?await K1(s):{messageCount:0,tokens:Sm()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??es(r?.created_at)??a.createdAt,modifiedAt:es(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h.lastUserMessage??_,messageCount:h.messageCount,filePath:i,...Gv(h.tokens)}}async readWorkspaceYaml(e){let n=qt(e,"workspace.yaml");try{let r=await X1(n,"utf-8");return J1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await q1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await qv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=qt(this.sessionStateDir,e);if((await zs(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=qt(this.sessionStateDir,s);(await zs(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=qt(this.sessionStateDir,s);if(!(await zs(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";Jv();Ye();$n();re();Fe();bm=class extends ce{copilotDir;constructor(e){super({provider:new dc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",Z,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>Xt(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return ln({...e,env:this.copilotDir!==void 0?{...e.env??process.env,COPILOT_HOME:this.copilotDir}:e.env,binary:"copilot",acpTool:"copilot"})}async seed(e,n){let r=await super.seed(e,n);if(n?.model===void 0||n.model.trim().length===0)return r;let s="copilot seed does not implement per-session model selection";return He({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function Nm(t){return new Am(t)}var Am,Rm=x(()=>{"use strict";ec();Ye();$n();Fe();Am=class extends ce{constructor(e){super({provider:new Js(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"custom-tool",leaderSetupHint:"OpenCode supports custom tools via .opencode/tools/ directory"},binary:"opencode",seedArgs:["run",Z],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>Xt(n,{...r,acpTool:"opencode"})})}openSession(e){return ln({...e,binary:"opencode",acpTool:"opencode"})}seedArgsFor(e){let n=["run"];return e?.model&&n.push("--model",e.model),e?.effort&&n.push("--variant",e.effort),n.push(e?.prompt??Z),n}}});import{appendFile as Q1,mkdir as Z1,readFile as Kv,readdir as Yv,rm as eU,stat as zv}from"node:fs/promises";import{basename as tU,dirname as nU,isAbsolute as Qv,join as ts,relative as rU,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 aU(t){return typeof t=="number"?new Date(t):xm(t)??new Date(0)}function Zv(t){return typeof t=="string"?t.trim():Array.isArray(t)?t.map(e=>e&&typeof e=="object"&&"text"in e&&typeof e.text=="string"?e.text:"").filter(Boolean).join(`
1830
1830
  `).trim():""}function eS(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function lU(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:eS(t)??""}function cU(t){let e=dU(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 dU(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 sU,oU,iU,uc,tS=x(()=>{"use strict";Re();sU="1.4",oU="1.5",iU=new Set([sU,oU]),uc=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Lm(e?.kimiHome??process.env.KIMI_CODE_HOME??ts(Q,".kimi-code")),this.sessionsDir=ts(this.homeDir,"sessions")}async discoverSessions(){let e=[];for(let n of await this.sessionFiles())try{let r=await this.summary(n);r&&e.push(r)}catch{}return e.sort((n,r)=>r.modifiedAt.getTime()-n.modifiedAt.getTime())}async loadSession(e){let n=await this.findSession(e);if(!n)return null;let r=await this.summary(n);if(!r)return null;let s=await this.parseWire(n.wirePath);return{...r,messages:s.messages,userPrompts:s.userPrompts}}async resolveSessionPath(e){return(await this.findSession(e))?.wirePath??null}async deleteSession(e){let n=await this.findSession(e);return n?(await eU(n.sessionDir,{recursive:!0,force:!0}),await Z1(nU(this.indexPath()),{recursive:!0,mode:448}),await Q1(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1831
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return ts(this.homeDir,"session_index.jsonl")}async sessionFiles(){let e=await this.readIndex(),n=new Map;for(let s of e.values())this.validSessionDir(s.sessionDir,s.sessionId)&&n.set(s.sessionId,this.filesFor(s.sessionId,s.sessionDir,s.workDir));let r;try{r=await Yv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=ts(this.sessionsDir,s.name),i;try{i=await Yv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=ts(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await Kv(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:ts(n,"state.json"),wirePath:ts(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Qv(e)||tU(e)!==n)return!1;let r=rU(this.sessionsDir,Lm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Qv(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 Kv(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 zv(e.wirePath)}catch{return null}let s=await zv(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,g,h;for await(let _ of Ee(e)){let E=aU(_.time??_.created_at);if(o&&(o=!1,_.type==="metadata"&&!iU.has(_.protocol_version))){let T=`Kimi transcript wire protocol version ${JSON.stringify(_.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((_.type==="config.update"||_.type==="profile.bind")&&_.modelAlias&&(i=_.modelAlias),_.type==="usage.record"){_.model&&(i=_.model),m||=_.usage!==void 0;let T=_.usage?.inputOther??0,w=_.usage?.inputCacheRead??0,S=_.usage?.inputCacheCreation??0,b=_.usage?.output??0;c+=T,d+=w,u+=S,f+=b,_.usageScope==="turn"&&(g=T+w+S,h={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:S,outputTokens:b,totalTokens:g+b});continue}if(_.type==="turn.prompt"&&_.origin?.kind==="user"){let T=Zv(_.input);T&&((!_.promptId||!s.has(_.promptId))&&(r.push(T),_.promptId&&s.add(_.promptId)),a??=G(T,80),l=G(T,80),n.push({role:"user",timestamp:E,content:T}),p++);continue}if(_.type==="turn.steer"){let T=Zv(_.input);T&&(n.push({role:"system",timestamp:E,content:T}),p++);continue}if(_.type!=="context.append_loop_event"||!_.event)continue;let y=_.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:eS(y.args),toolInputData:At(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:lU(y.result),toolCallId:y.toolCallId,model:i})}return cU(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:g,lastTokenUsage:h}}}});function Om(t){return new Cm(t)}var Cm,Dm=x(()=>{"use strict";tS();Ye();$n();Fe();Cm=class extends ce{kimiHome;constructor(e){super({provider:new uc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Kimi supports skills through ~/.kimi-code/skills and --skills-dir."},binary:"kimi",seedArgs:["-p",Z,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Xt(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return ln({...e,env:this.kimiHome!==void 0?{...e.env??process.env,KIMI_CODE_HOME:this.kimiHome}:e.env,binary:"kimi",acpTool:"kimi"})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??Z,"--output-format","stream-json"),n}}});import{spawn as uU}from"node:child_process";import{mkdirSync as fU}from"node:fs";function $m(t){return new Mm(t)}async function mU(t,e){let n=Date.now(),r=nS({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});De("lmplayer",r,e.permissionMode??"yolo");let s=await sS(e.binary,r,{cwd:e.cwd,env:Ce(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(rS(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function nS(t){let e=["run"];return t.model&&e.push("--model",t.model),t.sessionId&&e.push("--session",t.sessionId),t.formatJson&&e.push("--format","json"),t.effort&&e.push("--effort",t.effort),e.push(...fr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function rS(t){let n=[Jr(t.stderr).trim(),t.error].filter(Boolean).join(`
1832
- `);return n?we(n,{provider:"lmplayer"}):`exit code ${t.code}`}function sS(t,e,n){return new Promise((r,s)=>{let o;try{o=uU(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(g){s(g);return}let i="",a="",l="",c,d,u,f=[],m=!1,p=g=>{let h=g.trim();if(!h)return;let _;try{_=JSON.parse(h)}catch{f.push(g),n.onText?.(g);return}if(!Qs(_))return;let E=fc(_,!1);c===void 0&&E!==void 0&&(c=E),d=fc(_,!0)??d;let y=pU(_);y!==void 0&&(u=y);let T=oS(_);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",g=>{let h=g.toString("utf8");i+=h,l+=h;let _=l.indexOf(`
1833
- `);for(;_>=0;){let E=l.slice(0,_);l=l.slice(_+1),p(E),_=l.indexOf(`
1834
- `)}}),o.stderr?.on("data",g=>{a+=g.toString("utf8")}),n.signal&&(n.signal.aborted?o.kill():n.signal.addEventListener("abort",()=>o.kill(),{once:!0})),o.on("exit",g=>{m||(m=!0,l.length>0&&p(l),r({code:g,stdout:i,stderr:a,sessionId:c??d,text:f.join(""),error:u}))}),o.on("error",g=>{m||(m=!0,s(g))})})}function pU(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Qs(e)){let n=e.data;if(Qs(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 oS(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(Qs(n)){let r=oS(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(Qs(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(Qs(s)){let o=fc(s,e);if(o!==void 0)return o}}}function Qs(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Mm,Pm=x(()=>{"use strict";ec();Ye();Fe();an();Bt();al();Tt();Mm=class extends ce{constructor(e){super({provider:new Js({providerName:"lmplayer",startCommand:"lmplayer",dbPaths:e?.lmplayerDbPaths,dbPath:e?.lmplayerDbPath}),protocol:{transport:"lmplayer",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none"},binary:"lmplayer",seedArgs:["run","--format","json","--dangerously-skip-permissions",Z],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:mU})}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 nS({prompt:e?.prompt??Z,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){fU(e,{recursive:!0});let r=this.seedArgsFor(n);De("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await sS(this.binary,r,{cwd:e,env:qs(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:rS(s)}:s.sessionId?{success:!0,sessionId:s.sessionId}:{success:!1,error:"lmplayer seed failed; provider did not report a sessionID"}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}manualSeedHint(e){return{launchCommand:`cd ${e} && lmplayer run --format json --dangerously-skip-permissions "${Z}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as mc,readFile as hU,rm as _U}from"node:fs/promises";import{basename as iS,join as hr}from"node:path";function gU(){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 yU(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 EU(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 aS(t){return t.type==="user"||t.message?.role==="user"}function lS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function cS(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(`
1831
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return ts(this.homeDir,"session_index.jsonl")}async sessionFiles(){let e=await this.readIndex(),n=new Map;for(let s of e.values())this.validSessionDir(s.sessionDir,s.sessionId)&&n.set(s.sessionId,this.filesFor(s.sessionId,s.sessionDir,s.workDir));let r;try{r=await Yv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=ts(this.sessionsDir,s.name),i;try{i=await Yv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=ts(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await Kv(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:ts(n,"state.json"),wirePath:ts(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Qv(e)||tU(e)!==n)return!1;let r=rU(this.sessionsDir,Lm(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Qv(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 Kv(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 zv(e.wirePath)}catch{return null}let s=await zv(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=aU(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!iU.has(g.protocol_version))){let T=`Kimi transcript wire protocol version ${JSON.stringify(g.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:E,content:T}],userPrompts:[],messageCount:1,firstUserMessage:T,lastUserMessage:T}}if((g.type==="config.update"||g.type==="profile.bind")&&g.modelAlias&&(i=g.modelAlias),g.type==="usage.record"){g.model&&(i=g.model),m||=g.usage!==void 0;let T=g.usage?.inputOther??0,w=g.usage?.inputCacheRead??0,S=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=T,d+=w,u+=S,f+=b,g.usageScope==="turn"&&(_=T+w+S,h={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:S,outputTokens:b,totalTokens:_+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=Zv(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=Zv(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:eS(y.args),toolInputData:At(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:lU(y.result),toolCallId:y.toolCallId,model:i})}return cU(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";tS();Ye();$n();Fe();Cm=class extends ce{kimiHome;constructor(e){super({provider:new uc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Kimi supports skills through ~/.kimi-code/skills and --skills-dir."},binary:"kimi",seedArgs:["-p",Z,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Xt(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return ln({...e,env:this.kimiHome!==void 0?{...e.env??process.env,KIMI_CODE_HOME:this.kimiHome}:e.env,binary:"kimi",acpTool:"kimi"})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??Z,"--output-format","stream-json"),n}}});import{spawn as uU}from"node:child_process";import{mkdirSync as fU}from"node:fs";function $m(t){return new Mm(t)}async function mU(t,e){let n=Date.now(),r=nS({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});De("lmplayer",r,e.permissionMode??"yolo");let s=await sS(e.binary,r,{cwd:e.cwd,env:Ce(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(rS(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function nS(t){let e=["run"];return t.model&&e.push("--model",t.model),t.sessionId&&e.push("--session",t.sessionId),t.formatJson&&e.push("--format","json"),t.effort&&e.push("--effort",t.effort),e.push(...fr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function rS(t){let n=[Jr(t.stderr).trim(),t.error].filter(Boolean).join(`
1832
+ `);return n?we(n,{provider:"lmplayer"}):`exit code ${t.code}`}function sS(t,e,n){return new Promise((r,s)=>{let o;try{o=uU(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(!Qs(g))return;let E=fc(g,!1);c===void 0&&E!==void 0&&(c=E),d=fc(g,!0)??d;let y=pU(g);y!==void 0&&(u=y);let T=oS(g);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",_=>{let h=_.toString("utf8");i+=h,l+=h;let g=l.indexOf(`
1833
+ `);for(;g>=0;){let E=l.slice(0,g);l=l.slice(g+1),p(E),g=l.indexOf(`
1834
+ `)}}),o.stderr?.on("data",_=>{a+=_.toString("utf8")}),n.signal&&(n.signal.aborted?o.kill():n.signal.addEventListener("abort",()=>o.kill(),{once:!0})),o.on("exit",_=>{m||(m=!0,l.length>0&&p(l),r({code:_,stdout:i,stderr:a,sessionId:c??d,text:f.join(""),error:u}))}),o.on("error",_=>{m||(m=!0,s(_))})})}function pU(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Qs(e)){let n=e.data;if(Qs(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 oS(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(Qs(n)){let r=oS(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(Qs(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(Qs(s)){let o=fc(s,e);if(o!==void 0)return o}}}function Qs(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Mm,Pm=x(()=>{"use strict";ec();Ye();Fe();an();Bt();al();Tt();Mm=class extends ce{constructor(e){super({provider:new Js({providerName:"lmplayer",startCommand:"lmplayer",dbPaths:e?.lmplayerDbPaths,dbPath:e?.lmplayerDbPath}),protocol:{transport:"lmplayer",perTurnCancellation:"process"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none"},binary:"lmplayer",seedArgs:["run","--format","json","--dangerously-skip-permissions",Z],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:mU})}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 nS({prompt:e?.prompt??Z,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){fU(e,{recursive:!0});let r=this.seedArgsFor(n);De("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await sS(this.binary,r,{cwd:e,env:qs(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:rS(s)}:s.sessionId?{success:!0,sessionId:s.sessionId}:{success:!1,error:"lmplayer seed failed; provider did not report a sessionID"}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}manualSeedHint(e){return{launchCommand:`cd ${e} && lmplayer run --format json --dangerously-skip-permissions "${Z}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as mc,readFile as hU,rm as _U}from"node:fs/promises";import{basename as iS,join as hr}from"node:path";function gU(){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 yU(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 EU(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 aS(t){return t.type==="user"||t.message?.role==="user"}function lS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function cS(t){let e=t.message;return e?typeof e.content=="string"?e.content:Array.isArray(e.content)?e.content.filter(n=>n.type==="text").map(n=>n.text||"").join(`
1835
1835
  `):Array.isArray(e.parts)?e.parts.filter(n=>!n.thought&&n.type!=="thinking").map(n=>n.text||"").join(`
1836
- `):"":""}function dS(t){return t.model||t.message?.model}function TU(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:fS(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Ci(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 wU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Ci(e.output??e.error??t)}return Ci(t)}function fS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function uS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Ci(t.args,!0),toolInputData:At(t.args),toolCallId:t.id,model:n}}var pc,mS=x(()=>{"use strict";Re();pc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||hr(Q,".qwen")}async discoverSessions(){let e=hr(this.baseDir,"projects"),n;try{n=await mc(e)}catch{return[]}let r=[];for(let s of n){let o=hr(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=hr(o,a);try{let d=await this.extractSummary(c,l);d&&r.push(d)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await Ae(e),o="(unknown)",i,a,l,c,d=0;for await(let u of Ee(e)){if(r=!0,u.cwd&&(o=u.cwd,u.version&&(a=u.version)),u.type==="system"&&u.cwd&&(o=u.cwd,u.version&&(a=u.version),u.model&&(i=u.model)),aS(u)){let f=cS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(lS(u)){let f=dS(u);f&&(i=f),d+=TU(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=iS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ae(e),s="(unknown)",o,i,a,l,c,d,u=[],f=gU();for await(let m of Ee(e)){if(yU(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,g=m.timestamp?new Date(m.timestamp):r.modifiedAt;if(m.type==="tool_result"){let h=fS(m).filter(_=>_.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:g,content:Ci(m.toolCallResult.resultDisplay??m.toolCallResult.error??m.toolCallResult.status)??"tool result",toolCallId:m.toolCallResult.callId});for(let _ of h){let E=_.functionResponse,y=wU(E.response),T=Ci(m.toolCallResult?.resultDisplay);u.push({role:"tool_result",timestamp:g,content:T??y??m.toolCallResult?.status??"tool result",toolName:E.name,toolCallId:m.toolCallResult?.callId??E.id,...y!==void 0?{toolDetailedContent:y}:{}})}}else if(aS(m)){let h=cS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:g,content:h})}else if(lS(m)){let h=dS(m);if(h&&(o=h),Array.isArray(p.content))for(let _ of p.content)_.type==="text"&&_.text?u.push({role:"assistant",timestamp:g,content:_.text,model:h}):_.type==="thinking"&&_.thinking?u.push({role:"thinking",timestamp:g,content:_.thinking}):_.functionCall&&u.push(uS(_.functionCall,g,h));else if(typeof p.content=="string")u.push({role:"assistant",timestamp:g,content:p.content,model:h});else if(Array.isArray(p.parts))for(let _ of p.parts)if(_.thought||_.type==="thinking"){let E=_.thinking||_.text;E&&u.push({role:"thinking",timestamp:g,content:E})}else _.functionCall?u.push(uS(_.functionCall,g,h)):_.text&&u.push({role:"assistant",timestamp:g,content:_.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,...EU(f),messages:u}}async resolveSessionPath(e){let n=hr(this.baseDir,"projects");try{let r=await mc(n),s=[];for(let o of r){let i=hr(n,o,"chats",`${e}.jsonl`);try{return await hU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=hr(n,o,"chats"),a;try{a=await mc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;iS(l,".jsonl").startsWith(e)&&s.push(hr(i,l))}}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{return await _U(n),!0}catch{return!1}}}});function Fm(t){return new Um(t)}var Um,jm=x(()=>{"use strict";mS();Ye();$n();Fe();Um=class extends ce{constructor(e){super({provider:new pc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",Z,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport: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 pS,readFile as hS,rm as _S,stat as gS}from"node:fs/promises";import{basename as Wm,join as cn}from"node:path";import{fileURLToPath as vU}from"node:url";async function SU(t){let e=await Promise.all(t.map(n=>Ae(n)));return{createdAt:new Date(Math.min(...e.map(n=>n.createdAt.getTime()))),modifiedAt:new Date(Math.max(...e.map(n=>n.modifiedAt.getTime())))}}function bU(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function yS(t){return t.type==="USER_INPUT"}function ES(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function IU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function TS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function wS(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 kU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function AU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=NU(s);if(o)return o}let r=RU(e.content);if(r)return r}return null}function NU(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 RU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function LU(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 xU(t,e){let n=new Set;for(let r of e){let s=CU(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 CU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:$U(n.event.content);if(r!==void 0)return vS(t.filter(o=>!e.has(o)&&PU(o)===r),n.event.step_index);let s=MU(n.event);if(s!==void 0)return vS(t.filter(o=>!e.has(o)&&OU(o.name,n.event.type)&&bS(DU(o))===s),n.event.step_index)}function vS(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 OU(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 DU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function MU(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]),bS(e)}function bS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return vU(e)}catch{return}}function $U(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function PU(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 SS(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,IS=x(()=>{"use strict";Re();hc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||cn(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:cn(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=cn(this.baseDir,"conversations"),n;try{n=await pS(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 cn(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return cn(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 gS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await SU([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=wS(u.content);if(f&&(a=f),yS(u)){let m=TS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else ES(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=SS(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=bU(f.created_at,s.modifiedAt),p=wS(f.content);if(p&&(a=p),yS(f)){let g=TS(f.content),h=g.trim();h&&(l||(l=G(h,80)),c=G(h,80)),i.push({role:"user",timestamp:m,content:g});continue}if(Array.isArray(f.tool_calls))for(let g of f.tool_calls){let h=g.name||"tool",_=kU(g.args),E=At(g.args),y={role:"tool_use",timestamp:m,content:_,toolName:h,toolInput:_,toolInputData:E};i.push(y),d.push({name:h,stepIndex:f.step_index,input:E,message:y})}if(ES(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(IU(f)&&f.content){let g=LU(f,r),h=g===void 0?null:await this.readTaskLog(r,g),_={role:"tool_result",timestamp:h?.modifiedAt??m,content:f.content,toolName:f.type?.toLowerCase(),backgroundTaskId:g,...h===null?{}:{toolDetailedContent:h.content}};i.push(_),u.push({event:f,message:_})}f.thinking&&i.push({role:"thinking",timestamp:m,content:f.thinking})}return xU(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 gS(n),n}catch{}let r=cn(this.baseDir,"conversations");try{let s=[];for(let o of await pS(r)){if(!o.endsWith(".db"))continue;Wm(o,".db").startsWith(e)&&s.push(cn(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=SS(n);return r?(await _S(this.conversationPath(r),{force:!0}),await _S(cn(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 AU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=cn(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await hS(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=cn(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([hS(r,"utf8"),Ae(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as UU}from"node:child_process";import{StringDecoder as kS}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 FU(t.label,n.binary,s,{cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:o.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function FU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=UU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new kS("utf8"),d=new kS("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}`,g=l.trim()||a.trim();o(new Error(Ds(`${t} failed (${p})`,g?we(g,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var Hm=x(()=>{"use strict";Bt();Tt()});import{basename as jU}from"node:path";import{randomUUID as WU}from"node:crypto";function Xm(t){return new Bm(t)}function BU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Bm,HU,qm=x(()=>{"use strict";IS();Ye();Fe();an();Hm();Bm=class extends ce{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",Z,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:HU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||jU(s)!==`${n.sessionId}.db`)throw new Error(`agy cannot resume missing conversation "${n.sessionId}"`)}let r=await super.sendTurn(e,n);return n.permissionMode==="plan"?{...r,warnings:[...r.warnings??[],"agy does not enforce plan mode; this turn used full permissions"]}:r}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}async seed(e,n){let r=WU(),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}`}}},HU=_c({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",BU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>De("agy",t,e.permissionMode??"yolo")})});import{existsSync as Oi,readdirSync as XU,statSync as AS}from"node:fs";import{readdir as Gm,rm as qU}from"node:fs/promises";import NS,{join as dn}from"node:path";function GU(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 VU(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Zs(t,e){let n=e??(process.platform==="win32"?NS.win32:NS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!Oi(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=XU(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);AS(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(Oi(t)&&AS(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 JU(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)n&&typeof n=="object"&&n.type==="reasoning"&&typeof n.text=="string"&&e.push(n.text);return e}function RS(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 JU(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 KU(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 LS(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,...YU(t)}}function YU(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 Gs("",-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,xS=x(()=>{"use strict";Pl();Re();Na();gc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||dn(Q,".dsh");this.sessionsDir=dn(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(dn(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=RS(r),o=LS(r,n.filePath,s);return o?{...o,turnStatus:KU(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 qU(dn(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=GU(e),s=VU(e),o=r,i=dn(this.sessionsDir,r,n),a=dn(this.sessionsDir,s,n);!Oi(i)&&Oi(a)&&(o=s);let l=dn(this.sessionsDir,o,n);return Zs(l)}async findSessionDir(e){let n;try{n=await Gm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=dn(this.sessionsDir,r,s);try{let i=Zs(o);if(Oi(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=dn(this.sessionsDir,e,n),o=Zs(s),i=await r(o),a=Aa(i),l=[];for(let c of a.split(`
1836
+ `):"":""}function dS(t){return t.model||t.message?.model}function TU(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:fS(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Ci(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 wU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Ci(e.output??e.error??t)}return Ci(t)}function fS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function uS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Ci(t.args,!0),toolInputData:At(t.args),toolCallId:t.id,model:n}}var pc,mS=x(()=>{"use strict";Re();pc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||hr(Q,".qwen")}async discoverSessions(){let e=hr(this.baseDir,"projects"),n;try{n=await mc(e)}catch{return[]}let r=[];for(let s of n){let o=hr(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=hr(o,a);try{let d=await this.extractSummary(c,l);d&&r.push(d)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await Ae(e),o="(unknown)",i,a,l,c,d=0;for await(let u of Ee(e)){if(r=!0,u.cwd&&(o=u.cwd,u.version&&(a=u.version)),u.type==="system"&&u.cwd&&(o=u.cwd,u.version&&(a=u.version),u.model&&(i=u.model)),aS(u)){let f=cS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(lS(u)){let f=dS(u);f&&(i=f),d+=TU(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=iS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ae(e),s="(unknown)",o,i,a,l,c,d,u=[],f=gU();for await(let m of Ee(e)){if(yU(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=fS(m).filter(g=>g.functionResponse!==void 0);h.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:_,content:Ci(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=wU(E.response),T=Ci(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(aS(m)){let h=cS(m);h.trim()&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80)),u.push({role:"user",timestamp:_,content:h})}else if(lS(m)){let h=dS(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(uS(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(uS(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,...EU(f),messages:u}}async resolveSessionPath(e){let n=hr(this.baseDir,"projects");try{let r=await mc(n),s=[];for(let o of r){let i=hr(n,o,"chats",`${e}.jsonl`);try{return await hU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=hr(n,o,"chats"),a;try{a=await mc(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;iS(l,".jsonl").startsWith(e)&&s.push(hr(i,l))}}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{return await _U(n),!0}catch{return!1}}}});function Fm(t){return new Um(t)}var Um,jm=x(()=>{"use strict";mS();Ye();$n();Fe();Um=class extends ce{constructor(e){super({provider:new pc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",Z,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport: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 pS,readFile as hS,rm as _S,stat as gS}from"node:fs/promises";import{basename as Wm,join as cn}from"node:path";import{fileURLToPath as vU}from"node:url";async function SU(t){let e=await Promise.all(t.map(n=>Ae(n)));return{createdAt:new Date(Math.min(...e.map(n=>n.createdAt.getTime()))),modifiedAt:new Date(Math.max(...e.map(n=>n.modifiedAt.getTime())))}}function bU(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function yS(t){return t.type==="USER_INPUT"}function ES(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function IU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function TS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function wS(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 kU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function AU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=NU(s);if(o)return o}let r=RU(e.content);if(r)return r}return null}function NU(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 RU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function LU(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 xU(t,e){let n=new Set;for(let r of e){let s=CU(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 CU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:$U(n.event.content);if(r!==void 0)return vS(t.filter(o=>!e.has(o)&&PU(o)===r),n.event.step_index);let s=MU(n.event);if(s!==void 0)return vS(t.filter(o=>!e.has(o)&&OU(o.name,n.event.type)&&bS(DU(o))===s),n.event.step_index)}function vS(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 OU(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 DU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function MU(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]),bS(e)}function bS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return vU(e)}catch{return}}function $U(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function PU(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 SS(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,IS=x(()=>{"use strict";Re();hc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||cn(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:cn(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=cn(this.baseDir,"conversations"),n;try{n=await pS(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 cn(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return cn(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 gS(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await SU([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=wS(u.content);if(f&&(a=f),yS(u)){let m=TS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else ES(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=SS(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=bU(f.created_at,s.modifiedAt),p=wS(f.content);if(p&&(a=p),yS(f)){let _=TS(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=kU(_.args),E=At(_.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(ES(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(IU(f)&&f.content){let _=LU(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 xU(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 gS(n),n}catch{}let r=cn(this.baseDir,"conversations");try{let s=[];for(let o of await pS(r)){if(!o.endsWith(".db"))continue;Wm(o,".db").startsWith(e)&&s.push(cn(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=SS(n);return r?(await _S(this.conversationPath(r),{force:!0}),await _S(cn(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 AU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=cn(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await hS(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=cn(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([hS(r,"utf8"),Ae(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as UU}from"node:child_process";import{StringDecoder as kS}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 FU(t.label,n.binary,s,{cwd:n.cwd,env:Ce(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:o.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function FU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=UU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new kS("utf8"),d=new kS("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(Ds(`${t} failed (${p})`,_?we(_,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var Hm=x(()=>{"use strict";Bt();Tt()});import{basename as jU}from"node:path";import{randomUUID as WU}from"node:crypto";function Xm(t){return new Bm(t)}function BU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Bm,HU,qm=x(()=>{"use strict";IS();Ye();Fe();an();Hm();Bm=class extends ce{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",Z,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:HU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||jU(s)!==`${n.sessionId}.db`)throw new Error(`agy cannot resume missing conversation "${n.sessionId}"`)}let r=await super.sendTurn(e,n);return n.permissionMode==="plan"?{...r,warnings:[...r.warnings??[],"agy does not enforce plan mode; this turn used full permissions"]}:r}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}async seed(e,n){let r=WU(),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}`}}},HU=_c({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",BU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>De("agy",t,e.permissionMode??"yolo")})});import{existsSync as Oi,readdirSync as XU,statSync as AS}from"node:fs";import{readdir as Gm,rm as qU}from"node:fs/promises";import NS,{join as dn}from"node:path";function GU(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 VU(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Zs(t,e){let n=e??(process.platform==="win32"?NS.win32:NS.posix),r=t,s="session.jsonl.zstd";if((t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl"))&&(r=n.dirname(t),s=n.basename(t)),!Oi(r))return t.endsWith(".jsonl.zstd")||t.endsWith(".jsonl")?t:n.join(t,s);try{let o=XU(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);AS(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(Oi(t)&&AS(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 JU(t){if(!Array.isArray(t))return[];let e=[];for(let n of t)n&&typeof n=="object"&&n.type==="reasoning"&&typeof n.text=="string"&&e.push(n.text);return e}function RS(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 JU(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 KU(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 LS(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,...YU(t)}}function YU(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 Gs("",-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,xS=x(()=>{"use strict";Pl();Re();Na();gc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||dn(Q,".dsh");this.sessionsDir=dn(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(dn(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=RS(r),o=LS(r,n.filePath,s);return o?{...o,turnStatus:KU(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 qU(dn(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=GU(e),s=VU(e),o=r,i=dn(this.sessionsDir,r,n),a=dn(this.sessionsDir,s,n);!Oi(i)&&Oi(a)&&(o=s);let l=dn(this.sessionsDir,o,n);return Zs(l)}async findSessionDir(e){let n;try{n=await Gm(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=dn(this.sessionsDir,r,s);try{let i=Zs(o);if(Oi(i))return{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=dn(this.sessionsDir,e,n),o=Zs(s),i=await r(o),a=Aa(i),l=[];for(let c of a.split(`
1837
1837
  `))if(c.trim())try{let d=JSON.parse(c);if(d.type?.endsWith("-chunks")||d.type==="assistant/chunk"&&d.data?.chunk?.type!=="usage")continue;l.push(d)}catch{}return l}async readSummary(e,n){let r=dn(this.sessionsDir,e,n),s=Zs(r),o=await this.readRecords(e,n);return o.length===0?null:LS(o,s,RS(o))}}});import{spawn as zU}from"node:child_process";import{randomUUID as QU}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 eF(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 OS(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(_r){let n=await _r.catch(()=>{});if(n?.alive)return n;_r=void 0}return _r=e(t),_r}async function Di(){if(!_r)return;(await _r.catch(()=>{}))?.shutdown(),_r=void 0}var ZU,CS,Pn,Km,_r,DS=x(()=>{"use strict";Tt();ZU=/dsh web:\s*(https?:\/\/\S+)/,CS=2e4;Pn=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=eF(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:QU()})}f&&typeof f=="object"&&"args"in f?a=f:a={args:{request:f}}}let l={"content-type":"application/json"};this.cookie&&(l.cookie=this.cookie);let c;try{c=await fetch(`${this.baseUrl}/api/${i}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:o,method:i,payload:a}),redirect:"manual"})}catch(f){throw new Pn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Pn(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s));if((c.status===401||c.status===403)&&this.isV2&&this.tokenUrl){let f=await this.ensureCookie(!0);if(f&&f!==l.cookie){l.cookie=f,s.push(f);try{c=await fetch(`${this.baseUrl}/api/${i}`,{method:"POST",headers:l,body:JSON.stringify({type:"client-request",rpcId:o,method:i,payload:a}),redirect:"manual"})}catch(m){throw new Pn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Pn(e,`redirects are not permitted (HTTP ${c.status})`,this.getSecretsToRedact(s))}}let d;try{d=await c.json()}catch{d=void 0}if(!c.ok)throw new Pn(e,d??c.statusText,this.getSecretsToRedact(s));let u=d&&typeof d=="object"?d.result:void 0;if(!u||typeof u!="object"||typeof u.ok!="boolean")throw new Pn(e,"malformed response: HTTP 200 but body is not a well-formed {result:{ok,\u2026}} envelope",this.getSecretsToRedact(s));if(u.ok===!1)throw new Pn(e,u.error??u,this.getSecretsToRedact(s));return"value"in u?u.value:void 0}get alive(){return this.child!==void 0&&this.child.exitCode===null&&this.child.signalCode===null}shutdown(){this.child!==void 0&&this.alive&&OS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=zU("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(),OS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1838
1838
  ${l}`:"",c?`stderr:
1839
1839
  ${c}`:""].filter(Boolean).join(`
1840
1840
  `);u(new Error(`dsh web sidecar did not report a boot URL within ${CS}ms `+(m?`
1841
- ${we(m,{provider:"dsh"})}`:"(no output captured)")))},CS);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let g=a.split(`
1842
- `);a=g.pop()??"";for(let h of g){let _=ZU.exec(h);if(_){i=!0,t.fromBootUrl(_[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 g=p?`signal ${p}`:`exit code ${m}`;u(new Error(Ds(`dsh web exited before reporting a boot URL (${g})`,c.trim()?we(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as MS}from"node:crypto";import{existsSync as $S,statSync as tF}from"node:fs";import{readFile as nF,mkdir as rF}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 oF(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 PS(t,e){let n;try{n=await nF(t)}catch{return e?.(),[]}e&&Lo(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Aa(n),s=[];for(let o of r.split(`
1843
- `))if(o.trim())try{let i=JSON.parse(o);i!==null&&typeof i=="object"&&!Array.isArray(i)&&s.push(i)}catch{e?.()}return s}function iF(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 Zs(t,e)}var Ym,sF,zm,Zm,tp=x(()=>{"use strict";Pl();Bs();Ye();xS();Na();DS();Fe();an();Ym=new Map,sF=500,zm=8*60*60*1e3;Zm=class extends ce{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 rF(e,{recursive:!0});let r=`session-${MS()}`,s=Qm(n?.env??process.env);De("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??Z;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 Di()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Dn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Qm(n.env??process.env);De("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${MS()}`: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 Di()}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);De("dsh",[],e.permissionMode??"yolo");let r=await yc(n),s=Tc(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=$S(s)&&tF(s).isFile()}catch{o=!1}if(!o)throw await Di(),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 Di())};return{provider:"dsh",sessionId:i,get completedTurns(){return l},async sendTurn(p,g={}){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(g.signal?.aborted)throw new Error("Aborted");if(s=Tc(s),!$S(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 _,E=a.promptAndWait(r,e.cwd,i,p,zm,g.signal,S=>{_=S});E.catch(()=>{});let y=()=>{},T=new Promise((S,b)=>{y=()=>{(async()=>{c=!0,await m()})().finally(()=>b(Object.assign(new Error("Aborted"),{usage:_,sessionId:i})))},g.signal?.addEventListener("abort",y,{once:!0})}),w;try{w=await Promise.race([E,T])}finally{g.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 PS(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 Gs(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),g=Ym.get(p)??new Set;if(g.size){m.invalidateOwnership();for(let E of g)E.invalidateOwnership()}g.add(m),Ym.set(p,g),u.filter(E=>E.type==="turn/start"||E.type==="turn/end").at(-1)?.type==="turn/start"&&m.invalidateOwnership();let _;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 PS(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"&&(_=w?.kind==="aborted"?"cancelled":"error");let S=[...y].reverse().find(L=>L.type==="assistant/message"&&(L.seq??-1)>f&&(L.seq??1/0)<=(T.seq??1/0)),b=S?iF(S):"";if(w?.kind!=="completed"&&!b)throw new Error(oF(w));m.finish();let I=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:I?{...I,...w?.kind==="completed"?{}:{outcome:w?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>E)throw new Error(`dsh turn timed out after ${o}ms waiting for turn/end`);await new Promise(w=>setTimeout(w,sF))}}catch(E){if(m.finish(),E instanceof Error){let y=m.usage();Object.assign(E,{usage:y?{...y,outcome:_}:void 0,sessionId:r})}throw E}finally{g.delete(m),g.size||Ym.delete(p)}}}});import{existsSync as aF}from"node:fs";import{join as HS,resolve as lF}from"node:path";import{createRequire as cF}from"node:module";function dF(){return np===null&&(np=cF(import.meta.url)("node:sqlite").DatabaseSync),np}function rp(t={}){return lF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||HS(Q,".hermes"))}function uF(t={}){return HS(rp(t),"state.db")}function Mi(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function mt(t){return typeof t=="string"&&t.length>0?t:void 0}function fF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function jS(t){return mt(t.cwd)??mt(fF(t.model_config).cwd)??"(unknown)"}function mF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function pF(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 WS(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,US,FS,wc,BS=x(()=>{"use strict";Re();re();np=null;US="acp";FS=`id, source, model, model_config, started_at,
1841
+ ${we(m,{provider:"dsh"})}`:"(no output captured)")))},CS);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let _=a.split(`
1842
+ `);a=_.pop()??"";for(let h of _){let g=ZU.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(Ds(`dsh web exited before reporting a boot URL (${_})`,c.trim()?we(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as MS}from"node:crypto";import{existsSync as $S,statSync as tF}from"node:fs";import{readFile as nF,mkdir as rF}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 oF(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 PS(t,e){let n;try{n=await nF(t)}catch{return e?.(),[]}e&&Lo(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=Aa(n),s=[];for(let o of r.split(`
1843
+ `))if(o.trim())try{let i=JSON.parse(o);i!==null&&typeof i=="object"&&!Array.isArray(i)&&s.push(i)}catch{e?.()}return s}function iF(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 Zs(t,e)}var Ym,sF,zm,Zm,tp=x(()=>{"use strict";Pl();Bs();Ye();xS();Na();DS();Fe();an();Ym=new Map,sF=500,zm=8*60*60*1e3;Zm=class extends ce{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 rF(e,{recursive:!0});let r=`session-${MS()}`,s=Qm(n?.env??process.env);De("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??Z;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 Di()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return Dn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=Qm(n.env??process.env);De("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${MS()}`: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 Di()}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);De("dsh",[],e.permissionMode??"yolo");let r=await yc(n),s=Tc(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=$S(s)&&tF(s).isFile()}catch{o=!1}if(!o)throw await Di(),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 Di())};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),!$S(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,S=>{g=S});E.catch(()=>{});let y=()=>{},T=new Promise((S,b)=>{y=()=>{(async()=>{c=!0,await m()})().finally(()=>b(Object.assign(new Error("Aborted"),{usage:g,sessionId:i})))},_.signal?.addEventListener("abort",y,{once:!0})}),w;try{w=await Promise.race([E,T])}finally{_.signal?.removeEventListener("abort",y)}return l+=1,{...w,sessionId:i,durationMs:Date.now()-h}}finally{u=!1}},close(){return d!==null||(d=(async()=>{c=!0,await m()})()),d}}}async promptAndWait(e,n,r,s,o,i,a){let l=Date.now(),c=Tc(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await PS(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 Gs(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 PS(c),T=y.find(w=>w.type==="turn/end"&&(w.seq??-1)>f);if(y.length&&m.update(y,T?.seq??1/0),a?.(m.usage()),i?.aborted)throw new Error("Aborted");if(T){let w=T.data?.reason;w?.kind!=="completed"&&(g=w?.kind==="aborted"?"cancelled":"error");let S=[...y].reverse().find(L=>L.type==="assistant/message"&&(L.seq??-1)>f&&(L.seq??1/0)<=(T.seq??1/0)),b=S?iF(S):"";if(w?.kind!=="completed"&&!b)throw new Error(oF(w));m.finish();let I=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:I?{...I,...w?.kind==="completed"?{}:{outcome:w?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>E)throw new Error(`dsh turn timed out after ${o}ms waiting for turn/end`);await new Promise(w=>setTimeout(w,sF))}}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 aF}from"node:fs";import{join as HS,resolve as lF}from"node:path";import{createRequire as cF}from"node:module";function dF(){return np===null&&(np=cF(import.meta.url)("node:sqlite").DatabaseSync),np}function rp(t={}){return lF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||HS(Q,".hermes"))}function uF(t={}){return HS(rp(t),"state.db")}function Mi(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function mt(t){return typeof t=="string"&&t.length>0?t:void 0}function fF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function jS(t){return mt(t.cwd)??mt(fF(t.model_config).cwd)??"(unknown)"}function mF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function pF(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 WS(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,US,FS,wc,BS=x(()=>{"use strict";Re();re();np=null;US="acp";FS=`id, source, model, model_config, started_at,
1844
1844
  last_activity_at, message_count, input_tokens, output_tokens,
1845
1845
  cache_read_tokens, cache_write_tokens, reasoning_tokens, cwd, title`;wc=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=uF(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!aF(this.dbPath))return null;let e=null;try{return e=new(dF())(this.dbPath,{open:!0,readOnly:!0}),e.exec(`PRAGMA busy_timeout = ${this.busyTimeoutMs}`),e}catch(n){return e?.close(),U({event:"hermes_store_unavailable",provider:this.name,db_path:this.dbPath,error_message:n instanceof Error?n.message:String(n)}),null}}selectSessionRow(e,n){return e.prepare(`SELECT ${FS} FROM sessions WHERE id = ? AND source = ?`).get(n,US)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${FS} FROM sessions
1846
1846
  WHERE source = ?
1847
1847
  ORDER BY COALESCE(last_activity_at, started_at) DESC
1848
1848
  LIMIT ?`).all(US,this.discoverLimit),r=[];for(let s of n){let o=this.previewTexts(e,s.id);r.push({provider:this.name,sessionId:s.id,slug:mt(s.title),cwd:jS(s),createdAt:Mi(s.started_at),modifiedAt:Mi(s.last_activity_at??s.started_at),model:mt(s.model),startCommand:this.name,firstUserMessage:o.first,lastUserMessage:o.last,messageCount:s.message_count??0,filePath:this.dbPath,...WS(s)})}return r}catch(n){return U({event:"hermes_discover_sessions_failed",provider:this.name,db_path:this.dbPath,error_message:n instanceof Error?n.message:String(n)}),[]}finally{e.close()}}activeMessageRows(e,n){let r=new Set(e.prepare("PRAGMA table_info(messages)").all().map(a=>a.name)),o=`id, session_id, role, content, tool_call_id, tool_calls, tool_name,
1849
1849
  timestamp, finish_reason${["_compressed_summary","display_kind"].filter(a=>r.has(a)).map(a=>`, ${a}`).join("")}`,i="WHERE session_id = ? AND role IN ('user', 'assistant', 'tool')";try{return e.prepare(`SELECT ${o} FROM messages ${i} AND active = 1 ORDER BY id ASC`).all(n)}catch(a){if(!/no such column/i.test(a instanceof Error?a.message:String(a)))throw a;return e.prepare(`SELECT ${o} FROM messages ${i} ORDER BY id ASC`).all(n)}}previewTexts(e,n){try{let[r,s]=["ASC","DESC"].map(o=>{let i=`SELECT content FROM messages WHERE session_id = ?
1850
- 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=Mi(c.timestamp),u=c.content??"";if(c.role==="user"){u&&c._compressed_summary!==1&&c.display_kind!=="hidden"&&i.push(u),u.length>0&&(a||(a=G(u,80)),l=G(u,80)),o.push({role:"user",timestamp:d,content:u||"(empty)"});continue}if(c.role==="tool"){o.push({role:"tool_result",timestamp:d,content:u,toolCallId:mt(c.tool_call_id),toolName:mt(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:mt(r.model),stopReason:mt(c.finish_reason)});for(let f of mF(c.tool_calls)){let m=pF(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:mt(f.function?.name)??"tool_call",toolName:mt(f.function?.name),toolCallId:mt(f.call_id)??mt(f.id),toolInput:typeof f.function?.arguments=="string"?f.function.arguments:JSON.stringify(f.function?.arguments??{}),toolInputData:At(m)})}}return{provider:this.name,sessionId:r.id,slug:mt(r.title),cwd:jS(r),createdAt:Mi(r.started_at),modifiedAt:Mi(r.last_activity_at??r.started_at),model:mt(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...WS(r),messages:o,userPrompts:i}}catch(r){return U({event:"hermes_load_session_failed",provider:this.name,session_id:e,db_path:this.dbPath,error_message:r instanceof Error?r.message:String(r)}),null}finally{n.close()}}async resolveSessionPath(e){let n=this.openDb();if(!n)return null;try{return this.selectSessionRow(n,e)?this.dbPath:null}catch{return null}finally{n.close()}}async deleteSession(e){return!1}}});import{mkdir as hF}from"node:fs/promises";function gF(t){return _F.test(t)}function XS(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 yF}function op(t){return new sp(t)}var _F,yF,sp,ip=x(()=>{"use strict";Ye();BS();$n();Fe();re();_F=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;yF="dont_ask";sp=class extends ce{hermesProvider;hermesHome;constructor(e){let n=new wc(e);super({provider:n,protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Hermes has no provider-side leader-injection mechanism; the seed prompt carries lmctl's leader instructions."},binary:"hermes",seedArgs:[],resumeTemplate:"hermes --yolo --resume {{session_id}}",startTemplate:"hermes",transport:async(r,s)=>Xt(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:XS(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=rp(e)}async openSession(e){return ln({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:XS(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await hF(e,{recursive:!0});let r=[];if(n?.effort){let o="hermes has no ACP-level effort surface";U({event:"hermes_effort_ignored",provider:this.name,effort:n.effort,reason:o}),r.push(`hermes seed ignored effort=${n.effort}: ${o}`)}let s;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}s=await this.sendTurn(n?.prompt??Z,{sessionId:"",cwd:e,env:n?.env,signal:n?.signal,model:n?.model})}catch(o){return{success:!1,error:`hermes ACP seed failed: ${o instanceof Error?o.message:String(o)}`}}return gF(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(U({event:"hermes_seed_contract_violation",provider:this.name,session_id:s.sessionId,reason:"session/new did not return a UUID session id"}),{success:!1,error:`hermes ACP session/new did not return a UUID session id (got ${JSON.stringify(s.sessionId)})`})}}});import{readdir as qS,rm as EF,stat as TF}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 GS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var vc,VS=x(()=>{"use strict";Re();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 qS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=ap(this.baseDir,r);try{if(!(await TF(s)).isDirectory())continue;for(let o of await qS(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 Ae(e),s,o,i,a=0,l=0,c=0,d=0,u=0,f=0,m=0,p;for await(let g of Ee(e)){if(g.type==="model_change"&&g.provider&&g.modelId){s=`${g.provider}/${g.modelId}`;continue}if(g.type!=="message"||!g.message)continue;let h=g.message;if(h.provider&&h.model&&(s=`${h.provider}/${h.model}`),h.role==="user"){let _=lp(h).trim();_&&(o||(o=G(_,80)),i=G(_,80)),a++}else if(h.role==="assistant"){a++;let _=h.usage;_&&(l+=_.input??0,c+=_.cacheRead??0,d+=_.cacheWrite??0,u+=_.output??0,f+=_.reasoning??0,m=_.input??0,p={inputTokens:_.input,cachedInputTokens:_.cacheRead,cacheWriteInputTokens:_.cacheWrite,outputTokens:_.output,reasoningOutputTokens:_.reasoning,totalTokens:_.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:GS(c.arguments),toolName:c.name??"tool",toolInput:GS(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 EF(n,{force:!0}),!0):!1}}});function dp(t){return new cp(t)}var cp,wF,up=x(()=>{"use strict";VS();Ye();Fe();an();Hm();cp=class extends ce{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",Z],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:wF})}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}`}}},wF=_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)=>De("pi",t,e.permissionMode??"yolo")})});import{createHash as vF}from"node:crypto";import{existsSync as SF,mkdirSync as mp,readFileSync as bF,renameSync as IF,rmdirSync as tb,statSync as kF,writeFileSync as AF}from"node:fs";import{dirname as gp,join as JS,resolve as fp}from"node:path";function NF(t){return vF("sha256").update(t).digest("hex").slice(0,8)}function RF(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function LF(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 nb(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Sc(t){return Math.max(1,Math.ceil(t.length/4))}function to(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?JS(gp(fp(n)),".lmctl-claude-mock","sessions.json"):JS(fp(t),".lmctl-claude-mock","sessions.json")}function KS(){return{schemaVersion:1,sessions:{}}}function $i(t){if(!SF(t))return KS();try{let e=JSON.parse(bF(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 KS()}}function rb(t,e){mp(gp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;AF(n,`${JSON.stringify(e,null,2)}
1851
- `,"utf8"),IF(n,t)}function OF(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function DF(t){let e=`${t}.lock`;mp(gp(t),{recursive:!0});let n=Date.now()+YS;for(;;)try{return mp(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-kF(e).mtimeMs>xF){try{tb(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${YS}ms: ${e}`);OF(CF)}}function MF(t){try{tb(t)}catch{}}function sb(t,e){let n=DF(t);try{return e()}finally{MF(n)}}function $F(t){return{...t,timestamp:t.timestamp.toISOString()}}function PF(t){return{...t,timestamp:new Date(t.timestamp)}}function UF(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map($F)}}function ob(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(PF)}}function bc(t,e=process.cwd()){let n=eo.get(t);if(n!==void 0)return n;let s=$i(to(e)).sessions[t];if(s===void 0)return;let o=ob(s);return eo.set(o.sessionId,o),o}function zS(t){eo.set(t.sessionId,t);let e=to(t.cwd);sb(e,()=>{let n=$i(e);n.sessions[t.sessionId]=UF({...t,filePath:e}),rb(e,n)})}function FF(t,e=process.cwd()){let n=to(e);return sb(n,()=>{let r=$i(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],rb(n,r)),s})}function jF(){let t=$i(to()),e=Object.values(t.sessions).map(ob);for(let n of e)eo.set(n.sessionId,n);return e}function pp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function QS(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 ZS(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function WF(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=QS(n[t]??n[nb(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=QS(r[s]);if(o!==void 0)return o}}}function eb(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 eo,xF,CF,YS,hp,_p,Ep=x(()=>{"use strict";eo=new Map;xF=5e3,CF=15,YS=1e4;hp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of jF())e.set(n.sessionId,n);for(let n of eo.values())e.set(n.sessionId,n);return[...e.values()].map(eb)}async loadSession(e){let n=bc(e);return n===void 0?null:{...eb(n),messages:n.messages.slice()}}async resolveSessionPath(e){return bc(e)?.filePath??null}async deleteSession(e){let n=eo.delete(e),r=FF(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=RF(LF(e,n)),s=`mock-${r}-${NF(`${e}:${r}`)}`,o=new Date,i=to(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"),zS(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=$i(to(n.cwd)),a=WF(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await ZS(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${nb(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),zS(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await ZS(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function gr(t){let e=[Ff({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}),Nm({dbPaths:t?.opencodeDbPaths}),Om({kimiHome:t?.kimiHome}),$m({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Fm({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();Rm();Dm();Pm();jm();qm();tp();ip();up();Ep();fm();gm();vm();km();Rm();Dm();Pm();jm();qm();tp();ip();up();Ep()});var ib,ab,lb=x(()=>{"use strict";ib=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],ab=["agy","pi","lmplayer"]});var Sp={};me(Sp,{BUNDLE_CAPABLE_PROVIDERS:()=>ib,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>ab,ProviderRegistry:()=>fi,TransportConnectionError:()=>Te,TransportError:()=>lr,TransportJsonError:()=>Ml,TransportProcessError:()=>ve,TransportRpcError:()=>pi,_resetDefaultRegistryForTests:()=>GF,bundleSupportedProviders:()=>Ui,canUsePersistentSession:()=>Nl,chat:()=>Pi,countTokens:()=>zF,createAdapterRegistry:()=>Xs,createAllAdapters:()=>gr,deleteSession:()=>YF,listSessions:()=>vp,openBundleSession:()=>wp,openConversation:()=>VF,seed:()=>JF});import{accessSync as HF,constants as BF,statSync as XF}from"node:fs";import{join as qF,delimiter as cb}from"node:path";function yr(){return Ic===null&&(Ic=Xs(gr())),Ic}function GF(){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 Pi(t){let e=t.registry??yr(),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 Rl(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 Ui(t){return(t??yr()).getAllAdapters().filter(n=>xn(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function wp(t){let e=t.registry??yr(),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: ${Ui(e).join(", ")})`);return Rl(n,{...t,execution:"persistent"})}async function VF(t){return Rl(kc(t.registry??yr(),t.provider),t)}async function JF(t){let e=t.registry??yr(),n=kc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=cb===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(cb).some(p=>{try{return f.some(g=>{try{let h=qF(p||t.cwd,"agy"+g);return HF(h,BF.X_OK),XF(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 db(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 db(e,t.provider,t.cwd),c=KF(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 db(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 KF(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??yr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function YF(t,e,n=yr()){return n.deleteSession(e,t)}async function zF(t){let n=await(t.registry??yr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,o=n.totalCacheWriteInputTokens??0,i=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:o,output:i,reasoningOutput:a,total:r+s+o+i+a,lastTurn:n.lastTokenUsage}}var Ic,Un=x(()=>{"use strict";Bs();Ps();Tf();Tp();Bs();Tf();Tp();lb();cr();Ic=null});function Ac(t){return xn(t)&&ZF.has(t)}function Fi(){return bp===null&&(bp=Xs(gr())),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?QF[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,...ub[t]??[]]}catch{return null}}async function mb(t,e){try{let n=Fi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function pb(t){try{return Fi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function hb(t,e,n={}){let r=Ip(t,e,n);return r===null?null:r.join(" ")}function je(t,e){return Fi().getSession(t,e)}async function Er(t){return(await Fi().resolveSessions(t)).map(n=>n.provider.name)}var ub,QF,ZF,fb,bp,un=x(()=>{"use strict";Ps();Un();qf();ub={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:[]},QF={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]},ZF=new Set(Object.keys(ub)),fb=/^[\w.:-]+$/;bp=null});function ej(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return _b;let n=Number(e);return!Number.isFinite(n)||n<=0?_b:n}async function tj(t,e,n){try{let r=Xe(e,n,t),s=r.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let o;if(typeof r.provider=="string"&&r.provider.trim()!=="")o=r.provider;else{let c=await Er(s);if(c.length!==1)return null;o=c[0]}let i=await je(s,o);if(i===null)return null;let a=i.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function gb(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??ej(),i=await tj(t,n,r),a=i!==null&&i>=o;return a&&U({event:"session_idle_reclaim",receiver_teamfile:n,receiver_alias:r,idle_ms:i,idle_minutes:i===null?null:Math.round(i/6e4),threshold_ms:o,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var _b,yb=x(()=>{"use strict";re();un();nt();_b=36e5});function nj(t){return t===null?null:et(t)?"live":"dead"}function kp(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:nj(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function rj(t){return(0,Eb.formatDuration)(t)}function Ap(t){let e=[];return t.idle_ms!==null&&e.push(`active ${rj(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 Eb,Tb=x(()=>{"use strict";qr();Eb=Ut(xt(),1)});import{randomUUID as sj}from"node:crypto";import{hostname as wb,networkInterfaces as oj}from"node:os";function vb(t){let e=(t.now??new Date).toISOString();return{lock_id:sj(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??wb(),holder_ips:t.ips??dj(),started_at:e,last_heartbeat:e}}function Sb(t=process.env){return bb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,ij)}function lj(t=process.env){return bb(t.LMCTL_TERMINAL_LOCK_STALE_MS,aj)}function Np(t,e={}){let n=e.now??new Date,r=e.localHost??wb(),s=e.staleMs??lj();if(t.holder_host===r)return(e.isProcessAlive??cj)(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 ji(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function bb(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 cj(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 dj(){let t=new Set;for(let e of Object.values(oj()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var ij,aj,Nc=x(()=>{"use strict";ij=15e3,aj=12e4});function uj(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1850
+ AND role = 'user' AND content != ''`,a;try{a=e.prepare(`${i} AND active = 1 ORDER BY id ${o} LIMIT 1`).get(n)}catch(l){if(!/no such column: active/i.test(String(l)))throw l;a=e.prepare(`${i} ORDER BY id ${o} LIMIT 1`).get(n)}return a?G(a.content,80):void 0});return{first:r,last:s}}catch{return{}}}async loadSession(e){let n=this.openDb();if(!n)return null;try{let r=this.selectSessionRow(n,e);if(!r)return null;let s=this.activeMessageRows(n,e),o=[],i=[],a,l;for(let c of s){let d=Mi(c.timestamp),u=c.content??"";if(c.role==="user"){u&&c._compressed_summary!==1&&c.display_kind!=="hidden"&&i.push(u),u.length>0&&(a||(a=G(u,80)),l=G(u,80)),o.push({role:"user",timestamp:d,content:u||"(empty)"});continue}if(c.role==="tool"){o.push({role:"tool_result",timestamp:d,content:u,toolCallId:mt(c.tool_call_id),toolName:mt(c.tool_name)});continue}u.length>0&&o.push({role:"assistant",timestamp:d,content:u,model:mt(r.model),stopReason:mt(c.finish_reason)});for(let f of mF(c.tool_calls)){let m=pF(f.function?.arguments);o.push({role:"tool_use",timestamp:d,content:mt(f.function?.name)??"tool_call",toolName:mt(f.function?.name),toolCallId:mt(f.call_id)??mt(f.id),toolInput:typeof f.function?.arguments=="string"?f.function.arguments:JSON.stringify(f.function?.arguments??{}),toolInputData:At(m)})}}return{provider:this.name,sessionId:r.id,slug:mt(r.title),cwd:jS(r),createdAt:Mi(r.started_at),modifiedAt:Mi(r.last_activity_at??r.started_at),model:mt(r.model),startCommand:this.name,firstUserMessage:a,lastUserMessage:l,messageCount:r.message_count??o.length,filePath:this.dbPath,...WS(r),messages:o,userPrompts:i}}catch(r){return U({event:"hermes_load_session_failed",provider:this.name,session_id:e,db_path:this.dbPath,error_message:r instanceof Error?r.message:String(r)}),null}finally{n.close()}}async resolveSessionPath(e){let n=this.openDb();if(!n)return null;try{return this.selectSessionRow(n,e)?this.dbPath:null}catch{return null}finally{n.close()}}async deleteSession(e){return!1}}});import{mkdir as hF}from"node:fs/promises";function gF(t){return _F.test(t)}function XS(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 yF}function op(t){return new sp(t)}var _F,yF,sp,ip=x(()=>{"use strict";Ye();BS();$n();Fe();re();_F=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;yF="dont_ask";sp=class extends ce{hermesProvider;hermesHome;constructor(e){let n=new wc(e);super({provider:n,protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn",persistentResume:!0},capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Hermes has no provider-side leader-injection mechanism; the seed prompt carries lmctl's leader instructions."},binary:"hermes",seedArgs:[],resumeTemplate:"hermes --yolo --resume {{session_id}}",startTemplate:"hermes",transport:async(r,s)=>Xt(r,{...s,requireResume:s.requireResume??!!s.sessionId,env:{...s.env??process.env,HERMES_HOME:this.hermesHome},acpTool:"hermes",acpMode:XS(s.permissionMode)})}),this.hermesProvider=n,this.hermesHome=rp(e)}async openSession(e){return ln({...e,env:{...e.env??process.env,HERMES_HOME:this.hermesHome},binary:"hermes",acpTool:"hermes",acpMode:XS(e.permissionMode)})}get stateDbPath(){return this.hermesProvider.stateDbPath}async seed(e,n){await hF(e,{recursive:!0});let r=[];if(n?.effort){let o="hermes has no ACP-level effort surface";U({event:"hermes_effort_ignored",provider:this.name,effort:n.effort,reason:o}),r.push(`hermes seed ignored effort=${n.effort}: ${o}`)}let s;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}s=await this.sendTurn(n?.prompt??Z,{sessionId:"",cwd:e,env:n?.env,signal:n?.signal,model:n?.model})}catch(o){return{success:!1,error:`hermes ACP seed failed: ${o instanceof Error?o.message:String(o)}`}}return gF(s.sessionId)?(r.push(...s.warnings??[]),{success:!0,sessionId:s.sessionId,usage:s.usage,...r.length>0?{warnings:r}:{}}):(U({event:"hermes_seed_contract_violation",provider:this.name,session_id:s.sessionId,reason:"session/new did not return a UUID session id"}),{success:!1,error:`hermes ACP session/new did not return a UUID session id (got ${JSON.stringify(s.sessionId)})`})}}});import{readdir as qS,rm as EF,stat as TF}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 GS(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}var vc,VS=x(()=>{"use strict";Re();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 qS(this.baseDir)}catch{return[]}let n=[];for(let r of e){let s=ap(this.baseDir,r);try{if(!(await TF(s)).isDirectory())continue;for(let o of await qS(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 Ae(e),s,o,i,a=0,l=0,c=0,d=0,u=0,f=0,m=0,p;for await(let _ of Ee(e)){if(_.type==="model_change"&&_.provider&&_.modelId){s=`${_.provider}/${_.modelId}`;continue}if(_.type!=="message"||!_.message)continue;let h=_.message;if(h.provider&&h.model&&(s=`${h.provider}/${h.model}`),h.role==="user"){let g=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:GS(c.arguments),toolName:c.name??"tool",toolInput:GS(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 EF(n,{force:!0}),!0):!1}}});function dp(t){return new cp(t)}var cp,wF,up=x(()=>{"use strict";VS();Ye();Fe();an();Hm();cp=class extends ce{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",Z],resumeTemplate:"pi --session {{session_id}}",startTemplate:"pi",transport:wF})}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}`}}},wF=_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)=>De("pi",t,e.permissionMode??"yolo")})});import{createHash as vF}from"node:crypto";import{existsSync as SF,mkdirSync as mp,readFileSync as bF,renameSync as IF,rmdirSync as tb,statSync as kF,writeFileSync as AF}from"node:fs";import{dirname as gp,join as JS,resolve as fp}from"node:path";function NF(t){return vF("sha256").update(t).digest("hex").slice(0,8)}function RF(t){let e=t.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"session"}function LF(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 nb(t){return t.split(/\r?\n/,1)[0]?.trim()||"(empty prompt)"}function Sc(t){return Math.max(1,Math.ceil(t.length/4))}function to(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?JS(gp(fp(n)),".lmctl-claude-mock","sessions.json"):JS(fp(t),".lmctl-claude-mock","sessions.json")}function KS(){return{schemaVersion:1,sessions:{}}}function $i(t){if(!SF(t))return KS();try{let e=JSON.parse(bF(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 KS()}}function rb(t,e){mp(gp(t),{recursive:!0});let n=`${t}.${process.pid}.${Date.now()}.tmp`;AF(n,`${JSON.stringify(e,null,2)}
1851
+ `,"utf8"),IF(n,t)}function OF(t){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}function DF(t){let e=`${t}.lock`;mp(gp(t),{recursive:!0});let n=Date.now()+YS;for(;;)try{return mp(e),e}catch(r){if(r.code!=="EEXIST")throw r;try{if(Date.now()-kF(e).mtimeMs>xF){try{tb(e)}catch{}continue}}catch{continue}if(Date.now()>=n)throw new Error(`ClaudeMock store lock timeout after ${YS}ms: ${e}`);OF(CF)}}function MF(t){try{tb(t)}catch{}}function sb(t,e){let n=DF(t);try{return e()}finally{MF(n)}}function $F(t){return{...t,timestamp:t.timestamp.toISOString()}}function PF(t){return{...t,timestamp:new Date(t.timestamp)}}function UF(t){return{...t,createdAt:t.createdAt.toISOString(),modifiedAt:t.modifiedAt.toISOString(),messages:t.messages.map($F)}}function ob(t){return{...t,createdAt:new Date(t.createdAt),modifiedAt:new Date(t.modifiedAt),messages:t.messages.map(PF)}}function bc(t,e=process.cwd()){let n=eo.get(t);if(n!==void 0)return n;let s=$i(to(e)).sessions[t];if(s===void 0)return;let o=ob(s);return eo.set(o.sessionId,o),o}function zS(t){eo.set(t.sessionId,t);let e=to(t.cwd);sb(e,()=>{let n=$i(e);n.sessions[t.sessionId]=UF({...t,filePath:e}),rb(e,n)})}function FF(t,e=process.cwd()){let n=to(e);return sb(n,()=>{let r=$i(n),s=r.sessions[t]!==void 0;return s&&(delete r.sessions[t],rb(n,r)),s})}function jF(){let t=$i(to()),e=Object.values(t.sessions).map(ob);for(let n of e)eo.set(n.sessionId,n);return e}function pp(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function QS(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 ZS(t){t!==void 0&&t>0&&await new Promise(e=>setTimeout(e,t))}function WF(t,e){let{script:n,scriptContains:r}=e;if(n!==void 0){let s=QS(n[t]??n[nb(t)]);if(s!==void 0)return s}if(r!==void 0){for(let s of Object.keys(r))if(t.includes(s)){let o=QS(r[s]);if(o!==void 0)return o}}}function eb(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 eo,xF,CF,YS,hp,_p,Ep=x(()=>{"use strict";eo=new Map;xF=5e3,CF=15,YS=1e4;hp=class{name="ClaudeMock";async discoverSessions(){let e=new Map;for(let n of jF())e.set(n.sessionId,n);for(let n of eo.values())e.set(n.sessionId,n);return[...e.values()].map(eb)}async loadSession(e){let n=bc(e);return n===void 0?null:{...eb(n),messages:n.messages.slice()}}async resolveSessionPath(e){return bc(e)?.filePath??null}async deleteSession(e){let n=eo.delete(e),r=FF(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=RF(LF(e,n)),s=`mock-${r}-${NF(`${e}:${r}`)}`,o=new Date,i=to(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"),zS(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=$i(to(n.cwd)),a=WF(e,i),l=a?.delayMs??i.defaultDelayMs;if(a?.kind==="error")throw await ZS(l),new Error(a.error);let c=a?.kind==="success"?a.text:`ClaudeMock ack: ${nb(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),zS(s),n.onProgress?.({kind:"text",summary:"ClaudeMock deterministic reply"}),await ZS(l),{text:c,sessionId:n.sessionId,durationMs:Math.max(1,Date.now()-r),stopReason:"mock_stop",numTurns:1,status:"ok"}}}});function gr(t){let e=[Ff({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}),Nm({dbPaths:t?.opencodeDbPaths}),Om({kimiHome:t?.kimiHome}),$m({lmplayerDbPath:t?.lmplayerDbPath,lmplayerDbPaths:t?.lmplayerDbPaths}),Fm({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();Rm();Dm();Pm();jm();qm();tp();ip();up();Ep();fm();gm();vm();km();Rm();Dm();Pm();jm();qm();tp();ip();up();Ep()});var ib,ab,lb=x(()=>{"use strict";ib=["claude","qwen","codex","dsh","miniplayer","muse","gemini","copilot","opencode","kimi","hermes"],ab=["agy","pi","lmplayer"]});var Sp={};me(Sp,{BUNDLE_CAPABLE_PROVIDERS:()=>ib,BUNDLE_NEVER_CAPABLE_PROVIDERS:()=>ab,ProviderRegistry:()=>fi,TransportConnectionError:()=>Te,TransportError:()=>lr,TransportJsonError:()=>Ml,TransportProcessError:()=>ve,TransportRpcError:()=>pi,_resetDefaultRegistryForTests:()=>GF,bundleSupportedProviders:()=>Ui,canUsePersistentSession:()=>Nl,chat:()=>Pi,countTokens:()=>zF,createAdapterRegistry:()=>Xs,createAllAdapters:()=>gr,deleteSession:()=>YF,listSessions:()=>vp,openBundleSession:()=>wp,openConversation:()=>VF,seed:()=>JF});import{accessSync as HF,constants as BF,statSync as XF}from"node:fs";import{join as qF,delimiter as cb}from"node:path";function yr(){return Ic===null&&(Ic=Xs(gr())),Ic}function GF(){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 Pi(t){let e=t.registry??yr(),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 Rl(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 Ui(t){return(t??yr()).getAllAdapters().filter(n=>xn(n.name)&&n.openSession!==void 0).map(n=>n.name)}async function wp(t){let e=t.registry??yr(),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: ${Ui(e).join(", ")})`);return Rl(n,{...t,execution:"persistent"})}async function VF(t){return Rl(kc(t.registry??yr(),t.provider),t)}async function JF(t){let e=t.registry??yr(),n=kc(e,t.provider);if(n.seedBinary==="agy"){let d=t.env??process.env,u=d.PATH??d.Path??"/usr/bin:/bin",f=cb===";"?["",...(d.PATHEXT??".EXE;.CMD;.BAT").split(";")]:[""];if(!u.split(cb).some(p=>{try{return f.some(_=>{try{let h=qF(p||t.cwd,"agy"+_);return HF(h,BF.X_OK),XF(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 db(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 db(e,t.provider,t.cwd),c=KF(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 db(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 KF(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??yr()).listAll({provider:t.provider,workspace:t.workspace,limit:t.limit,from:t.from,to:t.to})}async function YF(t,e,n=yr()){return n.deleteSession(e,t)}async function zF(t){let n=await(t.registry??yr()).getSession(t.sessionId,t.provider);if(!n)throw new Error(`session "${t.sessionId}" not found`);let r=n.totalInputTokens??0,s=n.totalCachedInputTokens??0,o=n.totalCacheWriteInputTokens??0,i=n.totalOutputTokens??0,a=n.totalReasoningOutputTokens??0;return{provider:n.provider,sessionId:n.sessionId,input:r,cachedInput:s,cacheWriteInput:o,output:i,reasoningOutput:a,total:r+s+o+i+a,lastTurn:n.lastTokenUsage}}var Ic,Un=x(()=>{"use strict";Bs();Ps();Tf();Tp();Bs();Tf();Tp();lb();cr();Ic=null});function Ac(t){return xn(t)&&ZF.has(t)}function Fi(){return bp===null&&(bp=Xs(gr())),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?QF[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,...ub[t]??[]]}catch{return null}}async function mb(t,e){try{let n=Fi().getAdapter(t);return n?.preflightNativeLaunch?await n.preflightNativeLaunch(e):{kind:"ok"}}catch{return{kind:"ok"}}}function pb(t){try{return Fi().getAdapter(t)?.nativeLaunchFailureHint}catch{return}}function hb(t,e,n={}){let r=Ip(t,e,n);return r===null?null:r.join(" ")}function je(t,e){return Fi().getSession(t,e)}async function Er(t){return(await Fi().resolveSessions(t)).map(n=>n.provider.name)}var ub,QF,ZF,fb,bp,un=x(()=>{"use strict";Ps();Un();qf();ub={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:[]},QF={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]},ZF=new Set(Object.keys(ub)),fb=/^[\w.:-]+$/;bp=null});function ej(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return _b;let n=Number(e);return!Number.isFinite(n)||n<=0?_b:n}async function tj(t,e,n){try{let r=Xe(e,n,t),s=r.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let o;if(typeof r.provider=="string"&&r.provider.trim()!=="")o=r.provider;else{let c=await Er(s);if(c.length!==1)return null;o=c[0]}let i=await je(s,o);if(i===null)return null;let a=i.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function gb(t,e,n,r,s){if(!e.busy||e.reason!=="in-flight")return!1;let o=s??ej(),i=await tj(t,n,r),a=i!==null&&i>=o;return a&&U({event:"session_idle_reclaim",receiver_teamfile:n,receiver_alias:r,idle_ms:i,idle_minutes:i===null?null:Math.round(i/6e4),threshold_ms:o,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var _b,yb=x(()=>{"use strict";re();un();nt();_b=36e5});function nj(t){return t===null?null:et(t)?"live":"dead"}function kp(t){let e=t.nowMs??Date.now(),n=Date.parse(t.since);return{holder_pid:t.holderPid,holder_liveness:nj(t.holderPid),since:t.since,idle_ms:Number.isFinite(n)?Math.max(0,e-n):null}}function rj(t){return(0,Eb.formatDuration)(t)}function Ap(t){let e=[];return t.idle_ms!==null&&e.push(`active ${rj(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 Eb,Tb=x(()=>{"use strict";qr();Eb=Ut(xt(),1)});import{randomUUID as sj}from"node:crypto";import{hostname as wb,networkInterfaces as oj}from"node:os";function vb(t){let e=(t.now??new Date).toISOString();return{lock_id:sj(),teamfile:t.teamfile,alias:t.alias,holder_pid:t.pid??process.pid,holder_host:t.host??wb(),holder_ips:t.ips??dj(),started_at:e,last_heartbeat:e}}function Sb(t=process.env){return bb(t.LMCTL_TERMINAL_LOCK_HEARTBEAT_MS,ij)}function lj(t=process.env){return bb(t.LMCTL_TERMINAL_LOCK_STALE_MS,aj)}function Np(t,e={}){let n=e.now??new Date,r=e.localHost??wb(),s=e.staleMs??lj();if(t.holder_host===r)return(e.isProcessAlive??cj)(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 ji(t){return`${t.alias} is held by a terminal on ${t.holder_host} since ${t.started_at}; retry later`}function bb(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 cj(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 dj(){let t=new Set;for(let e of Object.values(oj()))for(let n of e??[])n.internal||t.add(n.address);return[...t].sort()}var ij,aj,Nc=x(()=>{"use strict";ij=15e3,aj=12e4});function uj(t){return`lmctl ${t}: LMCTL_SELF_SESSIONID is not set \u2014 it looks like you are running lmctl
1852
1852
  manually, outside a member session that lmctl started. Running lmctl this way is
1853
1853
  not officially supported.
1854
1854
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function ns(t,e=process.env,n){let r=n?.db?.name??Je(void 0,e),s=e.LMCTL_DB===r?e:{...e,LMCTL_DB:void 0};return`lmctl ${t}: LMCTL_SELF_SESSIONID is set but does not match any member of a registered team.
@@ -1856,8 +1856,8 @@ The session marker may be stale or the team may not be registered in this lmctl
1856
1856
  Consulted ${Qo(r,s)}
1857
1857
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function Ib(t){return`unknown option --from
1858
1858
  ${uj(t)}`}function Rc(t,e){let n=Rp(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function Rp(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=tn(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 Wi=x(()=>{"use strict";Bt();Nn();nn()});function rs(t){let e=On(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var Lc=x(()=>{"use strict";nt()});function Lp(t,e,n){let r=`${e.teamfile}:${e.alias}`,s=null,o=()=>t.dal!==void 0?t.dal:(s===null&&(s=$e({path:Pe(t)})),s),i=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>o().listAgentInflight().some(a=>a.sender_teamfile===e.teamfile&&a.sender_alias===e.alias&&!(a.receiver_teamfile===e.teamfile&&a.receiver_alias===e.alias)&&a.holder_pid!==null&&et(a.holder_pid)),pollMs:fj,settleMs:mj,maxHoldMs:Rs(n),onHold:()=>U({event:"delivery_hold_open_started",receiver:r}),onRelease:a=>{i(),!(!a.held&&a.reason==="cleared")&&U({event:"delivery_hold_open_released",receiver:r,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function kb(t){let e=t.literalPrompt?t.newMessage:pj(t.newMessage,{newMessageFrom:t.newMessageFrom??hj(t.sender)});if(e.length===0)throw new Error(`no message to deliver for ${t.sender.teamfile}:${t.sender.alias} -> ${t.receiver.teamfile}:${t.receiver.alias}`);let n=!1,r=ye(),s=0,o=0,i=0,a={provider:t.receiver.provider,sessionId:t.receiver.sessionId,cwd:t.receiver.cwd,prompt:e,permissionMode:t.permissionMode,env:t.env,onDelta:c=>{n=!0,r&&(s+=1,i=Buffer.byteLength(c,"utf8"),o+=i),t.onDelta?.(c)},onProgress:c=>t.onProgress?.(c)};t.registry&&(a.registry=t.registry),t.signal&&(a.signal=t.signal),t.receiver.model!==void 0&&(a.model=t.receiver.model),t.receiver.effort!==void 0&&(a.effort=t.receiver.effort),a.alias=t.receiver.alias,a.isLead=t.receiver.isLead,t.idleTimeoutMs!==void 0&&(a.timeoutMs=t.idleTimeoutMs),t.requireResume!==void 0&&(a.requireResume=t.requireResume),t.bundleSession!==void 0&&(a.bundleSession=t.bundleSession),a.holdOpen=Lp(t.io,t.receiver,t.env),await t.onPromptBuilt?.(e);let l=await Pi(a);if(t.requireResume&&l.sessionId!==t.receiver.sessionId)throw Object.assign(new Error(`provider session changed: expected ${t.receiver.sessionId}, received ${l.sessionId??"(missing)"}`),{usage:l.usage,sessionId:l.sessionId});return r&&Ke(JSON.stringify({event:"chat_return",alias:t.receiver.alias,provider:t.receiver.provider,streamed:n,blockCount:s,streamedBytes:o,resultTextBytes:Buffer.byteLength(l.text,"utf8"),lastChunkBytes:i,tailPreview:l.text.slice(-200)})),l.status==="stalled"?{status:"stalled",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,stalledAfterMs:l.stalledAfterMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}:l.status==="empty"?{status:"empty",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}:{status:"ok",receipt:l.text,sessionId:l.sessionId,...l.usage?{usage:l.usage}:{},prompt:e,wroteDelta:n,durationMs:l.durationMs,...l.warnings!==void 0?{warnings:l.warnings}:{}}}function pj(t,e={}){return[`--- new prompt (from ${e.newMessageFrom??"operator"}) ---`,t].join(`
1859
- `)}function hj(t){return`${t.teamfile}:${t.alias}`}var HQ,fj,mj,xp=x(()=>{"use strict";Un();re();le();Lt();qr();Ht();HQ=60*60*1e3,fj=2e3,mj=5e3});async function xc(t){let e=t.onEvent??(()=>{}),n=_j(t.io,e),r=null,s=null,o=null,i,a,l=null,c=!1,d=null,u=t.prompt,f,m=()=>{let p=t.signal?.reason;if(o===null||!["SIGINT","SIGTERM","SIGHUP"].includes(p))return;let g;try{g=n.dal??$e({path:Pe(n)}),g.finishTrackedInvocation(o,{status:"cancelled",signal:p,exit_code:p==="SIGINT"?130:p==="SIGTERM"?143:129,error:`prompt holder received ${p}`,team_chat_log_id:l}),s!==null&&g.releaseAgentInflight(s.row,s.leaseId)}catch(h){n.stderr.write(`error: failed to record holder ${p}: ${String(h)}
1860
- `)}finally{n.dal===void 0&&g?.close()}};t.signal?.addEventListener("abort",m,{once:!0});try{let p=t.resolvedNativeTarget,g=p!==void 0;if(g&&(t.heldLease===void 0||t.conversation===void 0))throw new ge("native session turns require a caller-held lease and conversation");let h=g?p:await W(n,C=>Xe(t.teamfile,t.alias,C));if(t.expectedSession!==void 0&&(h.provider!==t.expectedSession.provider||h.sessionid!==t.expectedSession.sessionid))throw new ge(`session changed for ${h.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${h.provider}:${h.sessionid}`);if(g&&(t.conversation.provider!==h.provider||t.conversation.sessionId!==h.sessionid))throw new ge("native session changed for "+h.alias+"; expected "+h.provider+":"+h.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let _=h.teamfile,E=await W(n,C=>Aj(C,t.env??process.env)),y=E.sender,T=g?"native:"+h.provider+":"+h.sessionid:await Nj(n,{explicitRoot:t.rootFlag,sender:y,receiverTeamfile:_,operatorOrigin:E.origin==="operator"}),w=t.env??process.env;if(!g){let C=await W(n,$=>$.getRootTeam(T)?.name??null);C!==null&&(w.LMBEE_TEAM_NAME=C)}if(o=await Tj(n,{receiverTeamfile:_,receiverAlias:h.alias,sender:y,rootTeamfile:T,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:E.origin,parentInvocationId:Os(w.LMCTL_INVOCATION_ID)}),i=bj(n,o),t.signal?.aborted)throw m(),Error("Chat turn cancelled");o!==null&&(w.LMCTL_INVOCATION_ID=String(o));try{g||Ws(n,Ie(_),_)}catch{}r={root_teamfile:T,sender_teamfile:y?.teamfile??null,sender_alias:y?.alias??null,receiver_teamfile:_,receiver_alias:h.alias,receiver_provider:h.provider,receiver_session_id:h.sessionid,origin:E.origin,message_type:t.messageType??null};let S=await Ob(n,_,h.alias);if(S!==null){let C=ji(S);return ss(o,r,t.prompt,C,"unavailable"),d=Cp(C,null),{status:"busy",message:C,teamChatLogId:null}}let b=!1;if(t.heldLease!==void 0){let C=t.heldLease;if(!await W(n,P=>{let q=P.getAgentInflight(_,h.alias);return q===null||q.sender_teamfile!==C.row.sender_teamfile||q.sender_alias!==C.row.sender_alias||q.started_at!==C.row.started_at||q.holder_pid!==process.pid?!1:P.heartbeatAgentInflight(C.row,C.leaseId,new Date().toISOString())})){let P=`bundle lease lost for ${h.alias}: this batch no longer holds the in-flight lease (reclaimed or taken over); aborting before this prompt instead of dispatching unsynchronized`;return ss(o,r,t.prompt,P,"unavailable"),d=Hi(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await gj(n,_,h.alias);if(C.busy){let $=await yj(n,_,h.alias);return $+=await Ej(n,_,h.alias),ss(o,r,t.prompt,$,"unavailable"),d=Cp($,null),{status:"busy",message:$,teamChatLogId:null}}b=C.idleReclaim}if(y!==null&&y.teamfile!==_){let C=await W(n,$=>ew($,{root:T,sender:y,receiverTeamfile:_,receiverAlias:h.alias,now:new Date}));if(C.stop){let $=nw(C.chain);return ss(o,r,t.prompt,$,"cycle"),d=Hi($,null),{status:"error",errorKind:"cycle",message:$,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await Rj(n,{receiver_teamfile:_,receiver_alias:h.alias,sender_teamfile:y?.teamfile??_,sender_alias:y?.alias??"operator",...b?{force:!0,reclaimReason:"session-idle"}:{}});if(!C.acquired){let $=Db(_,h.alias,C.current);return $+=` ${Ap(kp({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,ss(o,r,t.prompt,$,"unavailable"),d=Cp($,null),{status:"busy",message:$,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=Qa($=>W(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,$)),{intervalMs:xb,onError:$=>{ye()&&Ke(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:$ instanceof Error?$.message:String($)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Va({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=f.startedAt);let I=await kb({sender:y??{teamfile:_,alias:"operator"},receiver:{teamfile:_,alias:h.alias,provider:h.provider,sessionId:h.sessionid,cwd:h.sessiondir,...h.model!==void 0?{model:h.model}:{},...h.effort!==void 0?{effort:h.effort}:{},...h.isLead!==void 0?{isLead:h.isLead}:{}},signal:t.signal,newMessage:t.prompt,newMessageFrom:y===null?"operator":`${y.teamfile}:${y.alias}`,...g?{literalPrompt:!0}:{},io:n,permissionMode:t.permissionMode,...t.expectedSession!==void 0?{requireResume:!0}:{},...t.bundleSession!==void 0?{bundleSession:t.bundleSession}:{},...t.conversation!==void 0?{bundleSession:t.conversation}:{},...t.registry!==void 0?{registry:t.registry}:{},env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:C=>e({kind:"delta",chunk:C}),onProgress:C=>e({kind:"progress",alias:h.alias,event:C}),onPromptBuilt:async C=>{u=C,l===null&&(l=await xj(n,{...r,message:C,usage:f}),l!==null&&(t.onAccepted?.(kn(l)),o!==null&&await Sj(n,o,l))),o!==null&&await vj(n,o,C)}});u=I.prompt;let L=I.status==="stalled",O=I.status==="empty",k=null,v=L?`provider stalled${I.stalledAfterMs!==void 0?` after ${I.stalledAfterMs}ms`:""}`:O?"provider returned no content and no observed activity for this turn -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error":I.status==="error"?I.error??I.receipt:null,A=L||O||I.status==="error"?"error":"ok",N=await Xo(f,{status:I.status,sessionId:I.sessionId,usage:I.usage},()=>sf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env});l!==null?(await Rb(n,l,{...r,message:u,response:I.receipt,status:A,error_detail:v,usage:N}),c=!0,k=l):k=await Lb(n,{...r,message:u,response:I.receipt,status:A,error_detail:v,usage:N});let R=I.status!=="error"?I.warnings:void 0;if(L||O){let C=v;ss(o,r,u,C,"error"),d=Hi(C,k,I.receipt,R)}else d=Ij(I.receipt,k,R);return{status:L?"stalled":O?"empty":"ok",replyText:I.receipt,wroteDelta:I.wroteDelta,teamChatLogId:k,messageId:k===null?null:kn(k),durationMs:I.durationMs}}catch(p){let g=p instanceof Error?p.message:String(p),h=p,_=f?await Xo(f,{status:As(g,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>sf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Rb(n,l,{...r,message:u,response:null,status:"error",error_detail:g,usage:_}),c=!0),l===null&&r!==null&&_&&(l=await Lb(n,{...r,message:u,response:null,status:"error",error_detail:g,usage:_})),ss(o,r,u,g,"error"),d={...Hi(g,l),signal:p?.signal??null,exit_code:p?.exitCode??null},{status:"error",errorKind:p instanceof ge?"target":"provider",message:g,teamChatLogId:l,messageId:l===null?null:kn(l)}}finally{t.signal?.removeEventListener("abort",m),i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await Cj(n,r,kn(l)),s!==null&&await Lj(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await wj(n,o,d??Hi("chat turn exited without a terminal outcome",null))}}function _j(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function gj(t,e,n){let r=await W(t,o=>(kl(o,e,n),Qt(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await W(t,o=>gb(o,r,e,n));return{busy:!s,idleReclaim:s}}async function yj(t,e,n){let r=await Ob(t,e,n);if(r!==null)return ji(r);let s=await W(t,o=>o.getAgentInflight(e,n));return s!==null?Db(e,n,s):`${n} is busy; wait and retry`}async function Ej(t,e,n){let r=await W(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Ap(kp({holderPid:r.holder_pid,since:r.started_at}))}`}async function Tj(t,e){try{return(await W(t,r=>r.startTrackedInvocation({kind:"chat",origin:e.origin,scope_teamfile:e.receiverTeamfile,from_identity:e.sender===null?"operator":`${e.sender.teamfile}:${e.sender.alias}`,target_teamfile:e.receiverTeamfile,target_alias:e.receiverAlias,root_teamfile:e.rootTeamfile,cwd:e.cwd??null,command:kj(e.receiverTeamfile,e.receiverAlias,e.prompt),holder_pid:process.pid,request_payload:e.prompt,parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({provider:e.provider,model:e.model??null,sessionid:e.sessionId??null})}))).id}catch(n){return ye()&&Ke(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function wj(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function vj(t,e,n){try{await W(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Sj(t,e,n){try{await W(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function bj(t,e){if(e===null)return;let n=setInterval(()=>{W(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ye()&&Ke(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},xb);return n.unref?.(),n}function Cb(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function Ij(t,e,n){return{status:"done",result_summary:Cc(t),error:null,team_chat_log_id:e,...Cb(n)}}function Cp(t,e){return{status:"busy",result_summary:Cc(t),error:t,team_chat_log_id:e}}function Hi(t,e,n,r){return{status:"error",result_summary:n===void 0?cT(t,500):Cc(n),error:t,team_chat_log_id:e,...Cb(r)}}function Cc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function kj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Aj(t,e){let n=Rc(e,t);if(n.ok)return{sender:rs(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(ns("chat",e,t))}async function Nj(t,e){if(e.explicitRoot!==void 0)return await W(t,r=>Ne(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await W(t,r=>tw(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function Rj(t,e){return await W(t,n=>{let r=ye(),s=tr(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:ar(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Ke(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:s.reclaimReason===null?"acquired":"reclaimed",...s.reclaimReason===null?{}:{reclaim_reason:s.reclaimReason,holder:Nb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Ke(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:"rejected",holder:Nb(s.current)})),{acquired:!1,current:s.current})})}async function Ob(t,e,n){return await W(t,r=>{for(let o=0;o<2;o+=1){let i=r.getTerminalLock(e,n);if(i===null)return null;if(Np(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:Np(s).live?s:null})}function Nb(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 Lj(t,e,n){try{return await W(t,r=>r.releaseAgentInflight(e,n))}catch(r){t.stderr.write(`warning: failed to release chat in-flight slot: ${r instanceof Error?r.message:String(r)}
1859
+ `)}function hj(t){return`${t.teamfile}:${t.alias}`}var BQ,fj,mj,xp=x(()=>{"use strict";Un();re();le();Lt();qr();Ht();BQ=60*60*1e3,fj=2e3,mj=5e3});async function xc(t){let e=t.onEvent??(()=>{}),n=_j(t.io,e),r=null,s=null,o=null,i,a,l=null,c=!1,d=null,u=t.prompt,f,m=()=>{let p=t.signal?.reason;if(o===null||!["SIGINT","SIGTERM","SIGHUP"].includes(p))return;let _;try{_=n.dal??$e({path:Pe(n)}),_.finishTrackedInvocation(o,{status:"cancelled",signal:p,exit_code:p==="SIGINT"?130:p==="SIGTERM"?143:129,error:`prompt holder received ${p}`,team_chat_log_id:l}),s!==null&&_.releaseAgentInflight(s.row,s.leaseId)}catch(h){n.stderr.write(`error: failed to record holder ${p}: ${String(h)}
1860
+ `)}finally{n.dal===void 0&&_?.close()}};t.signal?.addEventListener("abort",m,{once:!0});try{let p=t.resolvedNativeTarget,_=p!==void 0;if(_&&(t.heldLease===void 0||t.conversation===void 0))throw new ge("native session turns require a caller-held lease and conversation");let h=_?p:await W(n,C=>Xe(t.teamfile,t.alias,C));if(t.expectedSession!==void 0&&(h.provider!==t.expectedSession.provider||h.sessionid!==t.expectedSession.sessionid))throw new ge(`session changed for ${h.alias}; expected ${t.expectedSession.provider}:${t.expectedSession.sessionid}, found ${h.provider}:${h.sessionid}`);if(_&&(t.conversation.provider!==h.provider||t.conversation.sessionId!==h.sessionid))throw new ge("native session changed for "+h.alias+"; expected "+h.provider+":"+h.sessionid+", found "+t.conversation.provider+":"+t.conversation.sessionId);let g=h.teamfile,E=await W(n,C=>Aj(C,t.env??process.env)),y=E.sender,T=_?"native:"+h.provider+":"+h.sessionid:await Nj(n,{explicitRoot:t.rootFlag,sender:y,receiverTeamfile:g,operatorOrigin:E.origin==="operator"}),w=t.env??process.env;if(!_){let C=await W(n,$=>$.getRootTeam(T)?.name??null);C!==null&&(w.LMBEE_TEAM_NAME=C)}if(o=await Tj(n,{receiverTeamfile:g,receiverAlias:h.alias,sender:y,rootTeamfile:T,provider:h.provider,model:h.model,sessionId:h.sessionid,cwd:h.sessiondir,prompt:t.prompt,origin:E.origin,parentInvocationId:Os(w.LMCTL_INVOCATION_ID)}),i=bj(n,o),t.signal?.aborted)throw m(),Error("Chat turn cancelled");o!==null&&(w.LMCTL_INVOCATION_ID=String(o));try{_||Ws(n,Ie(g),g)}catch{}r={root_teamfile:T,sender_teamfile:y?.teamfile??null,sender_alias:y?.alias??null,receiver_teamfile:g,receiver_alias:h.alias,receiver_provider:h.provider,receiver_session_id:h.sessionid,origin:E.origin,message_type:t.messageType??null};let S=await Ob(n,g,h.alias);if(S!==null){let C=ji(S);return ss(o,r,t.prompt,C,"unavailable"),d=Cp(C,null),{status:"busy",message:C,teamChatLogId:null}}let b=!1;if(t.heldLease!==void 0){let C=t.heldLease;if(!await W(n,P=>{let q=P.getAgentInflight(g,h.alias);return q===null||q.sender_teamfile!==C.row.sender_teamfile||q.sender_alias!==C.row.sender_alias||q.started_at!==C.row.started_at||q.holder_pid!==process.pid?!1:P.heartbeatAgentInflight(C.row,C.leaseId,new Date().toISOString())})){let P=`bundle lease lost for ${h.alias}: this batch no longer holds the in-flight lease (reclaimed or taken over); aborting before this prompt instead of dispatching unsynchronized`;return ss(o,r,t.prompt,P,"unavailable"),d=Hi(P,null),{status:"error",errorKind:"provider",message:P,teamChatLogId:null,messageId:null}}}else{let C=await gj(n,g,h.alias);if(C.busy){let $=await yj(n,g,h.alias);return $+=await Ej(n,g,h.alias),ss(o,r,t.prompt,$,"unavailable"),d=Cp($,null),{status:"busy",message:$,teamChatLogId:null}}b=C.idleReclaim}if(y!==null&&y.teamfile!==g){let C=await W(n,$=>ew($,{root:T,sender:y,receiverTeamfile:g,receiverAlias:h.alias,now:new Date}));if(C.stop){let $=nw(C.chain);return ss(o,r,t.prompt,$,"cycle"),d=Hi($,null),{status:"error",errorKind:"cycle",message:$,teamChatLogId:null,messageId:null}}}if(t.heldLease===void 0){let C=await Rj(n,{receiver_teamfile:g,receiver_alias:h.alias,sender_teamfile:y?.teamfile??g,sender_alias:y?.alias??"operator",...b?{force:!0,reclaimReason:"session-idle"}:{}});if(!C.acquired){let $=Db(g,h.alias,C.current);return $+=` ${Ap(kp({holderPid:C.current.holder_pid,since:C.current.started_at}))}`,ss(o,r,t.prompt,$,"unavailable"),d=Cp($,null),{status:"busy",message:$,teamChatLogId:null}}s={row:C.lease,leaseId:C.leaseId},t.onInflightAcquired?.(s),a=Qa($=>W(n,P=>P.heartbeatAgentInflight(s.row,s.leaseId,$)),{intervalMs:xb,onError:$=>{ye()&&Ke(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:$ instanceof Error?$.message:String($)}))}})}if(t.signal?.aborted)throw Error("Chat turn cancelled");f=Va({provider:h.provider,modelRequested:h.model??null,cwd:h.sessiondir,sessionId:h.sessionid}),r&&(r.started_at=f.startedAt);let I=await kb({sender:y??{teamfile:g,alias:"operator"},receiver:{teamfile:g,alias:h.alias,provider:h.provider,sessionId:h.sessionid,cwd:h.sessiondir,...h.model!==void 0?{model:h.model}:{},...h.effort!==void 0?{effort:h.effort}:{},...h.isLead!==void 0?{isLead:h.isLead}:{}},signal:t.signal,newMessage:t.prompt,newMessageFrom:y===null?"operator":`${y.teamfile}:${y.alias}`,..._?{literalPrompt:!0}:{},io:n,permissionMode:t.permissionMode,...t.expectedSession!==void 0?{requireResume:!0}:{},...t.bundleSession!==void 0?{bundleSession:t.bundleSession}:{},...t.conversation!==void 0?{bundleSession:t.conversation}:{},...t.registry!==void 0?{registry:t.registry}:{},env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:C=>e({kind:"delta",chunk:C}),onProgress:C=>e({kind:"progress",alias:h.alias,event:C}),onPromptBuilt:async C=>{u=C,l===null&&(l=await xj(n,{...r,message:C,usage:f}),l!==null&&(t.onAccepted?.(kn(l)),o!==null&&await Sj(n,o,l))),o!==null&&await vj(n,o,C)}});u=I.prompt;let L=I.status==="stalled",O=I.status==="empty",k=null,v=L?`provider stalled${I.stalledAfterMs!==void 0?` after ${I.stalledAfterMs}ms`:""}`:O?"provider returned no content and no observed activity for this turn -- often an upstream failure (rate limit, quota, auth) the provider did not report as an error":I.status==="error"?I.error??I.receipt:null,A=L||O||I.status==="error"?"error":"ok",N=await Xo(f,{status:I.status,sessionId:I.sessionId,usage:I.usage},()=>sf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env});l!==null?(await Rb(n,l,{...r,message:u,response:I.receipt,status:A,error_detail:v,usage:N}),c=!0,k=l):k=await Lb(n,{...r,message:u,response:I.receipt,status:A,error_detail:v,usage:N});let R=I.status!=="error"?I.warnings:void 0;if(L||O){let C=v;ss(o,r,u,C,"error"),d=Hi(C,k,I.receipt,R)}else d=Ij(I.receipt,k,R);return{status:L?"stalled":O?"empty":"ok",replyText:I.receipt,wroteDelta:I.wroteDelta,teamChatLogId:k,messageId:k===null?null:kn(k),durationMs:I.durationMs}}catch(p){let _=p instanceof Error?p.message:String(p),h=p,g=f?await Xo(f,{status:As(_,!!t.signal?.aborted),usage:h?.usage,sessionId:h?.sessionId},()=>sf(n),{db:n.dal?.db,dbPath:Pe(n),env:n.env}):void 0;return l!==null&&!c&&r!==null&&(await Rb(n,l,{...r,message:u,response:null,status:"error",error_detail:_,usage:g}),c=!0),l===null&&r!==null&&g&&(l=await Lb(n,{...r,message:u,response:null,status:"error",error_detail:_,usage:g})),ss(o,r,u,_,"error"),d={...Hi(_,l),signal:p?.signal??null,exit_code:p?.exitCode??null},{status:"error",errorKind:p instanceof ge?"target":"provider",message:_,teamChatLogId:l,messageId:l===null?null:kn(l)}}finally{t.signal?.removeEventListener("abort",m),i!==void 0&&clearInterval(i),a!==void 0&&clearInterval(a),l!==null&&await Cj(n,r,kn(l)),s!==null&&await Lj(n,s.row,s.leaseId)&&t.onInflightReleased?.(s.leaseId),o!==null&&await wj(n,o,d??Hi("chat turn exited without a terminal outcome",null))}}function _j(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:n=>{e({kind:"warning",message:n})}}}}async function gj(t,e,n){let r=await W(t,o=>(kl(o,e,n),Qt(o,e,n)));if(!r.busy)return{busy:!1,idleReclaim:!1};let s=await W(t,o=>gb(o,r,e,n));return{busy:!s,idleReclaim:s}}async function yj(t,e,n){let r=await Ob(t,e,n);if(r!==null)return ji(r);let s=await W(t,o=>o.getAgentInflight(e,n));return s!==null?Db(e,n,s):`${n} is busy; wait and retry`}async function Ej(t,e,n){let r=await W(t,s=>s.getAgentInflight(e,n));return r===null?"":` ${Ap(kp({holderPid:r.holder_pid,since:r.started_at}))}`}async function Tj(t,e){try{return(await W(t,r=>r.startTrackedInvocation({kind:"chat",origin:e.origin,scope_teamfile:e.receiverTeamfile,from_identity:e.sender===null?"operator":`${e.sender.teamfile}:${e.sender.alias}`,target_teamfile:e.receiverTeamfile,target_alias:e.receiverAlias,root_teamfile:e.rootTeamfile,cwd:e.cwd??null,command:kj(e.receiverTeamfile,e.receiverAlias,e.prompt),holder_pid:process.pid,request_payload:e.prompt,parent_invocation_id:e.parentInvocationId,meta:JSON.stringify({provider:e.provider,model:e.model??null,sessionid:e.sessionId??null})}))).id}catch(n){return ye()&&Ke(JSON.stringify({event:"tracked_invocation_start_error",error:n instanceof Error?n.message:String(n)})),null}}async function wj(t,e,n){try{await W(t,r=>{r.finishTrackedInvocation(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function vj(t,e,n){try{await W(t,r=>{r.updateTrackedInvocationRequestPayload(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:r instanceof Error?r.message:String(r)}))}}async function Sj(t,e,n){try{await W(t,r=>{r.linkTrackedInvocationMessage(e,n)})}catch(r){ye()&&Ke(JSON.stringify({event:"tracked_invocation_message_link_error",id:e,team_chat_log_id:n,error:r instanceof Error?r.message:String(r)}))}}function bj(t,e){if(e===null)return;let n=setInterval(()=>{W(t,r=>r.heartbeatTrackedInvocation(e)).catch(r=>{ye()&&Ke(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:r instanceof Error?r.message:String(r)}))})},xb);return n.unref?.(),n}function Cb(t){return t!==void 0&&t.length>0?{config_warnings:JSON.stringify(t)}:{}}function Ij(t,e,n){return{status:"done",result_summary:Cc(t),error:null,team_chat_log_id:e,...Cb(n)}}function Cp(t,e){return{status:"busy",result_summary:Cc(t),error:t,team_chat_log_id:e}}function Hi(t,e,n,r){return{status:"error",result_summary:n===void 0?cT(t,500):Cc(n),error:t,team_chat_log_id:e,...Cb(r)}}function Cc(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function kj(t,e,n){return`lmctl prompt ${JSON.stringify(t)} ${e} ${JSON.stringify(n)}`}function Aj(t,e){let n=Rc(e,t);if(n.ok)return{sender:rs(n.identity),origin:"agent"};if(n.reason==="unset")return{sender:null,origin:"operator"};throw new Error(ns("chat",e,t))}async function Nj(t,e){if(e.explicitRoot!==void 0)return await W(t,r=>Ne(e.explicitRoot,r));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let n=e.sender;return await W(t,r=>tw(r,{sender:n,now:new Date})??e.receiverTeamfile)}async function Rj(t,e){return await W(t,n=>{let r=ye(),s=tr(n,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:ar(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(r&&Ke(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:s.reclaimReason===null?"acquired":"reclaimed",...s.reclaimReason===null?{}:{reclaim_reason:s.reclaimReason,holder:Nb(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(r&&Ke(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:"rejected",holder:Nb(s.current)})),{acquired:!1,current:s.current})})}async function Ob(t,e,n){return await W(t,r=>{for(let o=0;o<2;o+=1){let i=r.getTerminalLock(e,n);if(i===null)return null;if(Np(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:Np(s).live?s:null})}function Nb(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 Lj(t,e,n){try{return await W(t,r=>r.releaseAgentInflight(e,n))}catch(r){t.stderr.write(`warning: failed to release chat in-flight slot: ${r instanceof Error?r.message:String(r)}
1861
1861
  `)}return!1}function Db(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 xj(t,e){let n=Bi(e.message);try{return await W(t,r=>r.beginTeamChatLog({usage:e.usage,root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,receiver_provider:e.receiver_provider,receiver_session_id:e.receiver_session_id,provider_prompt:e.message,message:n.text,response:null,origin:e.origin,status:"running",error_detail:null,truncated:n.truncated?1:0,message_type:e.message_type??null,created_at:e.started_at??new Date().toISOString()}))}catch(r){return t.stderr.write(`warning: failed to begin chat log: ${r instanceof Error?r.message:String(r)}
1862
1862
  `),null}}async function Rb(t,e,n){let r=Bi(n.message),s=n.response===null?null:Bi(n.response);try{await W(t,o=>o.finishTeamChatLog(e,{usage:n.usage,root_teamfile:n.root_teamfile,sender_teamfile:n.sender_teamfile,sender_alias:n.sender_alias,receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,receiver_provider:n.receiver_provider,receiver_session_id:n.receiver_session_id,provider_prompt:n.message,message:r.text,response:s?.text??null,origin:n.origin,status:n.status,error_detail:n.error_detail,truncated:r.truncated||s?.truncated?1:0,created_at:new Date().toISOString()}))}catch(o){t.stderr.write(`warning: failed to finish chat log ${e}: ${o instanceof Error?o.message:String(o)}
1863
1863
  `)}}async function Cj(t,e,n){if(e!==null)try{await W(t,r=>{r.clearCurrentlyHandlingMessage(e.receiver_teamfile,e.receiver_alias,n)})}catch(r){t.stderr.write(`warning: failed to clear chat causal pointer: ${r instanceof Error?r.message:String(r)}
@@ -1866,15 +1866,15 @@ ${uj(t)}`}function Rc(t,e){let n=Rp(t,e);return n.ok?{ok:!0,identity:n.identity,
1866
1866
  ${n.map((s,o)=>` ${o+1}) ${s}`).join(`
1867
1867
  `)}
1868
1868
  `);;){let s=await this.ask("Choose a number or exact value: "),o=n.filter(i=>i.toLowerCase()===s.toLowerCase());if(o.length===1)return o[0];if(/^[1-9]\d*$/.test(s)&&Number(s)<=n.length)return n[Number(s)-1];this.io.stderr.write(`Choose one of the listed values.
1869
- `)}}close(){this.rl?.close()}}});function Dc(t){return/\S\s+\S/u.test(t)}function $b(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=On(e)??(e.endsWith(":")&&xe(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||xe(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!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 Pb=x(()=>{"use strict";Be();nt()});import{spawnSync as Fp}from"node:child_process";import{existsSync as Fb,readFileSync as jb}from"node:fs";import{homedir as Wb}from"node:os";import{resolve as Pp}from"node:path";function so(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 Mj(){let t=Fp("agy",["models"],{encoding:"utf-8",timeout:Dj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function $j(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 qi(t){if(!t&&Dp)return Dp;let e=s=>(t||(Dp=s),s),n;try{n=(t??Mj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?so("agy models",s):`agy models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:so("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let r=$j(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r})}function Uj(){let t=Fp("codex",["debug","models"],{encoding:"utf-8",timeout:Pj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Fj(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 Gi(t){if(!t&&Mp)return Mp;let e=s=>(t||(Mp=s),s),n;try{n=(t??Uj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?so("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:so("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=Fj(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 Wj(t){let e=Fp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:jj});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??Wj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?so(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:so(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=Bj(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=Vi(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: ${Xi(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=qi(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: ${Xi(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||ro.includes(r.model))continue;no.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Xi(no)}. 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): ${Xi(ro)}. 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===Ub&&n.push(`[${r.alias}] model="${Ub}" 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=Gi(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: ${Xi(o.models)}`);continue}r.model&&(Hb.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 Bb(t,e={}){let n=t.filter(i=>i.model!==void 0&&Hb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Ft();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=Gy(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")&&Oj.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 Xb(t,e={}){return(await Bb(t,e)).warnings}async function qb(t,e={}){return(await Bb(t,e)).errors}function Vi(t){let e=process.env.KIMI_CODE_HOME||Pp(Wb(),".kimi-code"),n=t??Pp(e,"config.toml");if(!Fb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=jb(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=Hj(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 Hj(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 Bj(t){let e=t??Pp(Wb(),".config","opencode","opencode.json");if(!Fb(e))return{available:!0,models:[]};let n;try{n=JSON.parse(jb(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(!Up(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(!Up(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 Up(t)?t:null}function Up(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Xi(t){return t.length>0?t.join(", "):"(none)"}var Hb,Oj,no,ro,Ub,Dj,Dp,Pj,Mp,jj,$p,Ji=x(()=>{"use strict";Sn();Hr();Hb=new Set(Object.keys(zt).filter(t=>t!=="codex"&&t!=="kimi")),Oj=/\d\.(?=\d)/,no=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],ro=["deepseek-flash","deepseek-pro"],Ub="gpt-5.3-codex-spark",Dj=15e3;Dp=null;Pj=5e3;Mp=null;jj=5e3;$p=new Map});function Pc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Gb(t){if(!/(?:^|[/:])(?:gpt-|o\d(?:-|$)|chatgpt-|claude[ -]|gemini[ -])/i.test(t))return!1;let e=/claude/i.test(t)?"claude":/gemini/i.test(t)?"gemini":"codex";return zt[e].isChatModel({source:"",source_model_id:t,pricing:{input_per_1m_tokens:null,output_per_1m_tokens:null,input_cache_read_per_1m_tokens:null}})}function Hp(t,e){let n=[];for(let r of e.records){let s=r.source_model_id,o;if(t==="copilot")r.provider==="github_copilot"&&s.startsWith("github_copilot/")&&(o=s.slice(15));else if(["hermes","pi","lmplayer","miniplayer"].includes(t))r.source==="openrouter"&&/^(openai|anthropic|google)\//.test(s)&&(o=t==="hermes"?`openrouter:${s}`:t==="pi"?`openrouter/${s}`:s);else{let i={claude:"anthropic",gemini:"gemini",qwen:"dashscope"}[t],a=zt[t];if(i&&r.source==="litellm"&&r.provider===i&&a?.coversRecord(r)){o=s.startsWith(`${i}/`)?s.slice(i.length+1):s;let l=t==="claude"?"claude-":t==="gemini"?"gemini-":"qwen";(o.includes("/")||!o.startsWith(l))&&(o=void 0)}}!o||r.mode!=null&&r.mode!=="chat"||o.includes(":batch")||o.includes(":free")||Pc(t)&&!Gb(o)||n.push(o)}return[...new Set(n)].sort()}async function Ki(t){let e;switch(t){case"dsh":e=[...ro,...no];break;case"codex":e=Gi().models;break;case"agy":e=qi().models;break;case"kimi":e=Vi().models;break;case"opencode":e=jp("").models;break;default:{let{catalog:n}=await Ft();e=n?Hp(t,n):[]}}return[...new Set(e.filter(n=>!Pc(t)||Gb(n)))].sort()}var Bp=x(()=>{"use strict";Sn();Hr();Ji()});import*as Vb from"node:child_process";function qj(t,e){try{let n=e(t,["--version"],{encoding:"utf-8",timeout:5e3});return n.status===0?{found:!0,version:(n.stdout??"").toString().trim().split(/\r?\n/,1)[0]?.trim()||void 0}:n.status===null?{found:!1,failureMode:"not installed"}:{found:!1,failureMode:"runs but failed"}}catch{return{found:!1,failureMode:"not installed"}}}function Jb(t,e={}){let n=e.spawnSync===void 0&&process.env[Gj]==="1",r=e.spawnSync??Vb.spawnSync,s=new Set,o=[];for(let i of t){if(s.has(i))continue;s.add(i);let a=jn[i];if(!a){o.push({provider:i,binary:"<unknown>",found:!1,failureMode:"not installed"});continue}if(n){o.push({provider:i,binary:a,found:!0,version:"(skipped)"});continue}let l=qj(a,r);l.found?o.push({provider:i,binary:a,found:!0,version:l.version}):o.push({provider:i,binary:a,found:!1,failureMode:l.failureMode})}return o}var jn,Gj,oo=x(()=>{"use strict";jn={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"};Gj="LMCTL_SKIP_BINARY_CHECK"});function Xp(t,e=Yi){let n=e[t];return n?[...new Set([...n.tiers,...n.also??[]])]:null}function qp(t,e=Yi){return e[t]?.tiers??null}function Kb(t,e,n=Yi){let r=n[t]?.tiers.indexOf(e)??-1;return r<0?null:`${t}/tier${r+1}`}function Yb(t,e=Yi){return e[t]?.reviewed??null}function zb(t,e,n,r=Yi){let s=r[t],o=Xp(t,r)??[],i=new Set([...o,...s?.declined??[]]),a=new Set(e??[]),l=null;return s&&n&&(s.reviewed.cliVersion===null?l=`reviewed ${s.reviewed.date} against an unrecorded ${t} version; installed: ${n}`:s.reviewed.cliVersion!==n&&(l=`reviewed ${s.reviewed.date} against ${s.reviewed.cliVersion}; installed: ${n} -- may be stale`)),{verifiable:e!==null,notReported:e===null?[]:o.filter(c=>!a.has(c)),unreviewed:e===null?[]:[...a].filter(c=>!i.has(c)).sort(),versionNote:l}}var Uc,Yi,Gp=x(()=>{"use strict";Uc="team peer review 2026-10-10 (draft lmscript.lmctl:LeadB; review math.lmctl peer-review session)",Yi={claude:{reviewed:{date:"2026-10-10",cliVersion:"2.1.296 (Claude Code)",by:Uc},tiers:["claude-opus-5-5","claude-sonnet-5-5","claude-haiku-5-5"]},codex:{reviewed:{date:"2026-10-10",cliVersion:"codex-cli 0.161.0",by:Uc},tiers:["gpt-6-astra","gpt-6.1-sol","gpt-6-luna"],declined:["gpt-6-sol","gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna"]},agy:{reviewed:{date:"2026-10-10",cliVersion:"1.3.3",by:Uc},tiers:["Gemini 3.8 Flash (High)","Gemini 3.8 Flash (Medium)","Gemini 3.8 Flash (Low)"],also:["Gemini 3.1 Pro (High)"],declined:["Gemini 3.1 Pro (Low)","Gemini 3.7 Flash (High)","Gemini 3.7 Flash (Medium)","Gemini 3.7 Flash (Low)","Gemini 3.6 Flash (High)","Gemini 3.6 Flash (Medium)","Gemini 3.6 Flash (Low)","Claude Opus 5.5 (High)","Claude Opus 5.5 (Medium)","Claude Opus 5.5 (Low)","Claude Sonnet 5.5 (High)","Claude Sonnet 5.5 (Medium)","Claude Sonnet 5.5 (Low)","GPT-OSS 120B (Medium)"]},kimi:{reviewed:{date:"2026-10-10",cliVersion:"2.1.1",by:Uc},tiers:["kimi-code/k3","kimi-code/kimi-for-coding-highspeed","kimi-code/kimi-for-coding"],also:["kimi-code/k3-256k"]}}});var nI={};me(nI,{MODEL_PROVIDERS:()=>Wn,knownModelNames:()=>io,runModel:()=>Fc});import{spawnSync as Vj}from"node:child_process";function Jj(t){let e=jn[t];if(!e)return null;try{let n=Vj(e,["--version"],{encoding:"utf-8",timeout:5e3});return n.status!==0?null:(n.stdout??"").trim().split(/\r?\n/,1)[0]?.trim()||null}catch{return null}}function tI(t,e){switch(t){case"codex":return Gi();case"agy":return qi();case"kimi":return Vi();case"claude":{let n=e.catalog?Hp(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 io(t){if(!Wn.includes(t))return Ki(t);let e=t==="claude"?await Ft():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return tI(t,e).models}function eI(t,e,n){let{state:r,offer:s,provenance:o}=jt(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(Qb),0;let r=ae(t,[],["--json","--all"]),s=r.positionals.find(_=>_!=="all"&&!Wn.includes(_)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${Wn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1870
- ${Qb}`),2;let i=n.selections?.map(_=>_.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...Wn]:Wn.filter(_=>r.positionals.includes(_)));e.stderr.write(`querying models: ${i.join(", ")} ...
1871
- `);let a=await(n.loadSnapshot??Ft)(),l=!z(r,"--all")&&n.selections===void 0,c=[];for(let _ of i){let E;try{let O=n.selections?.find(k=>k.provider===_);E=O?.models!==void 0?{available:!0,models:O.models}:n.loadModels?await n.loadModels(_,a):Wn.includes(_)?tI(_,a):{available:!0,models:await Ki(_)}}catch(O){E={available:!1,models:[],reason:O instanceof Error?O.message:String(O)}}let y=n.selections?.some(O=>O.provider===_&&O.models!==void 0)?"requested model selection":Kj[_]??"provider model catalog",T=l?Xp(_,n.curation):null;if(T===null){c.push({provider:_,status:E.available?"ok":"unavailable",source:y,reason:E.reason??null,models:[...new Set(E.models)].sort().map(O=>eI(_,O,a))});continue}let w=Zb.has(_)&&E.available?E.models:null,S=(n.providerVersion??Jj)(_),b=zb(_,w,S,n.curation),I=Yb(_,n.curation),L=new Set(w??[]);c.push({provider:_,status:"ok",source:y,reason:E.reason??null,curation:{checked_against:w===null?null:y,unverified_reason:w!==null?null:Zb.has(_)?`${y} unavailable: ${E.reason??"model list unavailable"}`:`${_} has no native model list; check it by its review date`,verifiable:b.verifiable,reviewed_date:I.date,reviewed_cli_version:I.cliVersion,reviewed_by:I.by,installed_cli_version:S,version_note:b.versionNote,not_reported:b.notReported,unreviewed:b.unreviewed},models:T.map(O=>({...eI(_,O,a),tier:Kb(_,O,n.curation),provider_reports:w===null?null:L.has(O)}))})}if(z(r,"--json"))return te(e,{schema_version:1,...l?{view:"curated"}:{},currency:"USD",unit:"per_million_tokens",price_data_source:a.source,price_data_generated_at:a.generatedAt,providers:c}),0;if(l)return e.stdout.write(`Curated model names (the default lmctl provides; --all for everything reported). A tier ranks names within one provider; a tier is never comparable across providers.
1869
+ `)}}close(){this.rl?.close()}}});function Dc(t){return/\S\s+\S/u.test(t)}function $b(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=On(e)??(e.endsWith(":")&&xe(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||xe(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!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 Pb=x(()=>{"use strict";Be();nt()});import{spawnSync as Fp}from"node:child_process";import{existsSync as Fb,readFileSync as jb}from"node:fs";import{homedir as Wb}from"node:os";import{resolve as Pp}from"node:path";function so(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 Mj(){let t=Fp("agy",["models"],{encoding:"utf-8",timeout:Dj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function $j(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 qi(t){if(!t&&Dp)return Dp;let e=s=>(t||(Dp=s),s),n;try{n=(t??Mj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?so("agy models",s):`agy models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:so("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let r=$j(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r})}function Uj(){let t=Fp("codex",["debug","models"],{encoding:"utf-8",timeout:Pj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Fj(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 Gi(t){if(!t&&Mp)return Mp;let e=s=>(t||(Mp=s),s),n;try{n=(t??Uj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?so("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:so("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=Fj(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 Wj(t){let e=Fp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:jj});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??Wj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?so(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:so(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=Bj(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=Vi(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: ${Xi(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=qi(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: ${Xi(o.models)}`):n.push(`[${r.alias}] model="${r.model}" cannot be verified for agy: ${o.reason}.`);continue}if(s==="dsh"){if(!r.model||ro.includes(r.model))continue;no.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Xi(no)}. 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): ${Xi(ro)}. 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===Ub&&n.push(`[${r.alias}] model="${Ub}" 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=Gi(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: ${Xi(o.models)}`);continue}r.model&&(Hb.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 Bb(t,e={}){let n=t.filter(i=>i.model!==void 0&&Hb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Ft();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=Gy(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")&&Oj.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 Xb(t,e={}){return(await Bb(t,e)).warnings}async function qb(t,e={}){return(await Bb(t,e)).errors}function Vi(t){let e=process.env.KIMI_CODE_HOME||Pp(Wb(),".kimi-code"),n=t??Pp(e,"config.toml");if(!Fb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=jb(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=Hj(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 Hj(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 Bj(t){let e=t??Pp(Wb(),".config","opencode","opencode.json");if(!Fb(e))return{available:!0,models:[]};let n;try{n=JSON.parse(jb(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(!Up(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(!Up(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 Up(t)?t:null}function Up(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Xi(t){return t.length>0?t.join(", "):"(none)"}var Hb,Oj,no,ro,Ub,Dj,Dp,Pj,Mp,jj,$p,Ji=x(()=>{"use strict";Sn();Hr();Hb=new Set(Object.keys(zt).filter(t=>t!=="codex"&&t!=="kimi")),Oj=/\d\.(?=\d)/,no=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],ro=["deepseek-flash","deepseek-pro"],Ub="gpt-5.3-codex-spark",Dj=15e3;Dp=null;Pj=5e3;Mp=null;jj=5e3;$p=new Map});function Pc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Gb(t){if(!/(?:^|[/:])(?:gpt-|o\d(?:-|$)|chatgpt-|claude[ -]|gemini[ -])/i.test(t))return!1;let e=/claude/i.test(t)?"claude":/gemini/i.test(t)?"gemini":"codex";return zt[e].isChatModel({source:"",source_model_id:t,pricing:{input_per_1m_tokens:null,output_per_1m_tokens:null,input_cache_read_per_1m_tokens:null}})}function Hp(t,e){let n=[];for(let r of e.records){let s=r.source_model_id,o;if(t==="copilot")r.provider==="github_copilot"&&s.startsWith("github_copilot/")&&(o=s.slice(15));else if(["hermes","pi","lmplayer","miniplayer"].includes(t))r.source==="openrouter"&&/^(openai|anthropic|google)\//.test(s)&&(o=t==="hermes"?`openrouter:${s}`:t==="pi"?`openrouter/${s}`:s);else{let i={claude:"anthropic",gemini:"gemini",qwen:"dashscope"}[t],a=zt[t];if(i&&r.source==="litellm"&&r.provider===i&&a?.coversRecord(r)){o=s.startsWith(`${i}/`)?s.slice(i.length+1):s;let l=t==="claude"?"claude-":t==="gemini"?"gemini-":"qwen";(o.includes("/")||!o.startsWith(l))&&(o=void 0)}}!o||r.mode!=null&&r.mode!=="chat"||o.includes(":batch")||o.includes(":free")||Pc(t)&&!Gb(o)||n.push(o)}return[...new Set(n)].sort()}async function Ki(t){let e;switch(t){case"dsh":e=[...ro,...no];break;case"codex":e=Gi().models;break;case"agy":e=qi().models;break;case"kimi":e=Vi().models;break;case"opencode":e=jp("").models;break;default:{let{catalog:n}=await Ft();e=n?Hp(t,n):[]}}return[...new Set(e.filter(n=>!Pc(t)||Gb(n)))].sort()}var Bp=x(()=>{"use strict";Sn();Hr();Ji()});import*as Vb from"node:child_process";function qj(t,e){try{let n=e(t,["--version"],{encoding:"utf-8",timeout:5e3});return n.status===0?{found:!0,version:(n.stdout??"").toString().trim().split(/\r?\n/,1)[0]?.trim()||void 0}:n.status===null?{found:!1,failureMode:"not installed"}:{found:!1,failureMode:"runs but failed"}}catch{return{found:!1,failureMode:"not installed"}}}function Jb(t,e={}){let n=e.spawnSync===void 0&&process.env[Gj]==="1",r=e.spawnSync??Vb.spawnSync,s=new Set,o=[];for(let i of t){if(s.has(i))continue;s.add(i);let a=jn[i];if(!a){o.push({provider:i,binary:"<unknown>",found:!1,failureMode:"not installed"});continue}if(n){o.push({provider:i,binary:a,found:!0,version:"(skipped)"});continue}let l=qj(a,r);l.found?o.push({provider:i,binary:a,found:!0,version:l.version}):o.push({provider:i,binary:a,found:!1,failureMode:l.failureMode})}return o}var jn,Gj,oo=x(()=>{"use strict";jn={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"};Gj="LMCTL_SKIP_BINARY_CHECK"});function Xp(t,e=Yi){let n=e[t];return n?[...new Set([...n.tiers,...n.also??[]])]:null}function qp(t,e=Yi){return e[t]?.tiers??null}function Kb(t,e,n=Yi){let r=n[t]?.tiers.indexOf(e)??-1;return r<0?null:`${t}/tier${r+1}`}function Yb(t,e=Yi){return e[t]?.reviewed??null}function zb(t,e,n,r=Yi){let s=r[t],o=Xp(t,r)??[],i=new Set([...o,...s?.declined??[]]),a=new Set(e??[]),l=null;return s&&n&&(s.reviewed.cliVersion===null?l=`reviewed ${s.reviewed.date} against an unrecorded ${t} version; installed: ${n}`:s.reviewed.cliVersion!==n&&(l=`reviewed ${s.reviewed.date} against ${s.reviewed.cliVersion}; installed: ${n} -- may be stale`)),{verifiable:e!==null,notReported:e===null?[]:o.filter(c=>!a.has(c)),unreviewed:e===null?[]:[...a].filter(c=>!i.has(c)).sort(),versionNote:l}}var Uc,Yi,Gp=x(()=>{"use strict";Uc="team peer review 2026-10-10 (draft lmscript.lmctl:LeadB; review math.lmctl peer-review session)",Yi={claude:{reviewed:{date:"2026-10-10",cliVersion:"2.1.296 (Claude Code)",by:Uc},tiers:["claude-opus-5-5","claude-sonnet-5-5","claude-haiku-5-5"]},codex:{reviewed:{date:"2026-10-10",cliVersion:"codex-cli 0.161.0",by:Uc},tiers:["gpt-6-astra","gpt-6.1-sol","gpt-6-luna"],declined:["gpt-6-sol","gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna"]},agy:{reviewed:{date:"2026-10-10",cliVersion:"1.3.3",by:Uc},tiers:["Gemini 3.8 Flash (High)","Gemini 3.8 Flash (Medium)","Gemini 3.8 Flash (Low)"],also:["Gemini 3.1 Pro (High)"],declined:["Gemini 3.1 Pro (Low)","Gemini 3.7 Flash (High)","Gemini 3.7 Flash (Medium)","Gemini 3.7 Flash (Low)","Gemini 3.6 Flash (High)","Gemini 3.6 Flash (Medium)","Gemini 3.6 Flash (Low)","Claude Opus 5.5 (High)","Claude Opus 5.5 (Medium)","Claude Opus 5.5 (Low)","Claude Sonnet 5.5 (High)","Claude Sonnet 5.5 (Medium)","Claude Sonnet 5.5 (Low)","GPT-OSS 120B (Medium)"]},kimi:{reviewed:{date:"2026-10-10",cliVersion:"2.1.1",by:Uc},tiers:["kimi-code/k3","kimi-code/kimi-for-coding-highspeed","kimi-code/kimi-for-coding"],also:["kimi-code/k3-256k"]}}});var nI={};me(nI,{MODEL_PROVIDERS:()=>Wn,knownModelNames:()=>io,runModel:()=>Fc});import{spawnSync as Vj}from"node:child_process";function Jj(t){let e=jn[t];if(!e)return null;try{let n=Vj(e,["--version"],{encoding:"utf-8",timeout:5e3});return n.status!==0?null:(n.stdout??"").trim().split(/\r?\n/,1)[0]?.trim()||null}catch{return null}}function tI(t,e){switch(t){case"codex":return Gi();case"agy":return qi();case"kimi":return Vi();case"claude":{let n=e.catalog?Hp(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 io(t){if(!Wn.includes(t))return Ki(t);let e=t==="claude"?await Ft():{catalog:null,aliases:null,source:"unavailable",generatedAt:null};return tI(t,e).models}function eI(t,e,n){let{state:r,offer:s,provenance:o}=jt(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(Qb),0;let r=ae(t,[],["--json","--all"]),s=r.positionals.find(g=>g!=="all"&&!Wn.includes(g)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${Wn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1870
+ ${Qb}`),2;let i=n.selections?.map(g=>g.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...Wn]:Wn.filter(g=>r.positionals.includes(g)));e.stderr.write(`querying models: ${i.join(", ")} ...
1871
+ `);let a=await(n.loadSnapshot??Ft)(),l=!z(r,"--all")&&n.selections===void 0,c=[];for(let g of i){let E;try{let O=n.selections?.find(k=>k.provider===g);E=O?.models!==void 0?{available:!0,models:O.models}:n.loadModels?await n.loadModels(g,a):Wn.includes(g)?tI(g,a):{available:!0,models:await Ki(g)}}catch(O){E={available:!1,models:[],reason:O instanceof Error?O.message:String(O)}}let y=n.selections?.some(O=>O.provider===g&&O.models!==void 0)?"requested model selection":Kj[g]??"provider model catalog",T=l?Xp(g,n.curation):null;if(T===null){c.push({provider:g,status:E.available?"ok":"unavailable",source:y,reason:E.reason??null,models:[...new Set(E.models)].sort().map(O=>eI(g,O,a))});continue}let w=Zb.has(g)&&E.available?E.models:null,S=(n.providerVersion??Jj)(g),b=zb(g,w,S,n.curation),I=Yb(g,n.curation),L=new Set(w??[]);c.push({provider:g,status:"ok",source:y,reason:E.reason??null,curation:{checked_against:w===null?null:y,unverified_reason:w!==null?null:Zb.has(g)?`${y} unavailable: ${E.reason??"model list unavailable"}`:`${g} has no native model list; check it by its review date`,verifiable:b.verifiable,reviewed_date:I.date,reviewed_cli_version:I.cliVersion,reviewed_by:I.by,installed_cli_version:S,version_note:b.versionNote,not_reported:b.notReported,unreviewed:b.unreviewed},models:T.map(O=>({...eI(g,O,a),tier:Kb(g,O,n.curation),provider_reports:w===null?null:L.has(O)}))})}if(z(r,"--json"))return te(e,{schema_version:1,...l?{view:"curated"}:{},currency:"USD",unit:"per_million_tokens",price_data_source:a.source,price_data_generated_at:a.generatedAt,providers:c}),0;if(l)return e.stdout.write(`Curated model names (the default lmctl provides; --all for everything reported). A tier ranks names within one provider; a tier is never comparable across providers.
1872
1872
  `),Yj(e,c,a),0;e.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.
1873
1873
  `),e.stdout.write(`Price catalog: ${a.source}${a.generatedAt?` (${a.generatedAt})`:""}
1874
- `);let d=["MODEL","INPUT","OUTPUT","CACHE READ"],u=_=>_===null?"n/a":`$${_}`,f=c.map(_=>_.models.map(E=>[(0,vt.escapeCell)(E.model),u(E.pricing.input_per_1m_tokens),u(E.pricing.output_per_1m_tokens),u(E.pricing.input_cache_read_per_1m_tokens)])),m=["left","decimal","decimal","decimal"],p=(0,vt.measureDecimalPlaces)(f),g={align:[...m],decimalPlaces:p},h=(0,vt.measureColumns)([{rows:[],headers:d},...f],g);for(let[_,E]of c.entries()){if(e.stdout.write(`
1874
+ `);let d=["MODEL","INPUT","OUTPUT","CACHE READ"],u=g=>g===null?"n/a":`$${g}`,f=c.map(g=>g.models.map(E=>[(0,vt.escapeCell)(E.model),u(E.pricing.input_per_1m_tokens),u(E.pricing.output_per_1m_tokens),u(E.pricing.input_cache_read_per_1m_tokens)])),m=["left","decimal","decimal","decimal"],p=(0,vt.measureDecimalPlaces)(f),_={align:[...m],decimalPlaces:p},h=(0,vt.measureColumns)([{rows:[],headers:d},...f],_);for(let[g,E]of c.entries()){if(e.stdout.write(`
1875
1875
  ${E.provider} (${E.source})
1876
1876
  `),E.status==="unavailable"){e.stdout.write(` unavailable: ${(0,vt.escapeCell)(E.reason??"model list unavailable")}
1877
- `);continue}e.stdout.write(`${(0,vt.renderGrid)(f[_],{headers:d,widths:h,margin:2,...g})}
1877
+ `);continue}e.stdout.write(`${(0,vt.renderGrid)(f[g],{headers:d,widths:h,margin:2,..._})}
1878
1878
  `)}return 0}function Yj(t,e,n){t.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.
1879
1879
  `),t.stdout.write(`Price catalog: ${n.source}${n.generatedAt?` (${n.generatedAt})`:""}
1880
1880
  `);let r=["MODEL","TIER","INPUT","OUTPUT","CACHE READ","PROVIDER REPORTS"],s=u=>u===null?"n/a":`$${u}`,o=(u,f)=>f===null?"unverified":f?"yes":`NOT reported by ${u.provider} now`,i=e.map(u=>u.models.map(f=>[(0,vt.escapeCell)(f.model),f.tier??"-",s(f.pricing.input_per_1m_tokens),s(f.pricing.output_per_1m_tokens),s(f.pricing.input_cache_read_per_1m_tokens),o(u,f.provider_reports)])),a=["left","left","decimal","decimal","decimal","left"],l=(0,vt.measureDecimalPlaces)(i),c={align:[...a],decimalPlaces:l},d=(0,vt.measureColumns)([{rows:[],headers:r},...i],c);for(let[u,f]of e.entries()){let m=f.curation;if(t.stdout.write(`
@@ -1926,12 +1926,12 @@ zero. All known models are kept, including models without a price.
1926
1926
  `))}return s}var J,os=x(()=>{J=class t extends Error{line;column;codeblock;constructor(e,n){let[r,s]=sW(n.toml,n.ptr),o=oW(n.toml,r,s);super(`Invalid TOML document: ${e}
1927
1927
 
1928
1928
  ${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 Xc(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+=`
1929
- `: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 Kp=x(()=>{os();});var iW,zi,Yp=x(()=>{iW=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,zi=class t extends Date{#t=!1;#n=!1;#e=null;constructor(e,n,r){let s=!0,o=!0,i="Z",a;if(typeof e=="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}n===2?(i=null,e+="Z"):(a=e.charCodeAt(e.length-1))!==90&&a!==122&&(i=e.slice(e.length-6)),r&&(e=e.slice(0,10)+"T"+e.slice(11))}else n===4&&(e=+e.slice(0,2)>23?"":`0000-01-01T${e}Z`);s=n!==4,o=n!==3}else{let l=e.match(iW);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 St(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Qp(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?fI(t):uI(t);return t.d++,s}return r===34||r===39?Xc(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?qc(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?aW(t,r,e):t.s.charCodeAt(t.p+2)===58?lW(t,r,e):qc(t,t.p,r,0,e)}function qc(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||Qp(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return zp(t,e,16,s);if(o===98)return zp(t,e,2,s);if(o===111)return zp(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else St(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!Qp(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)||(St(o)?i>9?i-=11:i&1||i++:J.x("illegal character in numeric literal",t));if(!i){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}i&1||J.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),i>1?parseFloat(l):dI(t,l,10,e)}function zp(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Qp(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):St(s,n)?o&1&&o--:J.x("illegal character in numeric literal",t);o&1&&J.x("unfinished numeric value",t);let i=t.s.slice(e+2,t.p);return o&&(i=i.replaceAll("_","")),dI(t,i,n,e)}function dI(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;J.x("integer value cannot be represented losslessly",t,r)}return s}return BigInt(n===10?e:(n===2?"0b":n===8?"0o":"0x")+e)}function aW(t,e,n){let r=t.p++,s;if(!St(e)||!St(t.s.charCodeAt(t.p++))||!St(t.s.charCodeAt(t.p++))||!St(t.s.charCodeAt(t.p++)))return qc(t,t.p=r,e,0,n);if(t.p+=5,St(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,!St(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return Qi(t,i,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58&&J.x("invalid date-time: time part is malformed",t,r),t.s.charCodeAt(t.p+=3)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;St(t.s.charCodeAt(++t.p)););if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let i=t.s.slice(r,++t.p);return Qi(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return Qi(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Qi(t,o,2,s,r)}function lW(t,e,n){let r=t.p;if(!St(e)||!St(t.s.charCodeAt(++t.p)))return qc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;St(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return Qi(t,s,4,!1,r)}function Qi(t,e,n,r,s,o){if(t.ld){let i=new zi(e,n,r);return i.isValid()||J.x("invalid date",t,s),i}try{switch(o&&(e+=o),n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(i){J.x(i instanceof Error?i.message:""+i,t,s)}}var Zp=x(()=>{Kp();eh();os();Yp();});function cW(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}(e<32&&e!==9||e===127)&&J.x("control characters are not allowed in comments",t)}}function Gt(t,e,n){let r;for(;t.p<t.s.length;){for(;t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10));)t.p++;if(n||r!==35)break;cW(t)}}var th=x(()=>{os();});function Gc(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(Xc(t)),r=2,t.p--):i===32||i===9?r===1&&(s.push(t.s.slice(o,t.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?J.x("illegal character in key",t):r||(r=1,o=t.p)}while(i=t.s.charCodeAt(++t.p));J.x("incomplete key-value: cannot find end of key",t,n)}function uI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Gt(t),(s=t.s.charCodeAt(t.p))===125)return t.p++,n;let o,i=n,a=!1,l=t.p,c=Gc(t);for(let u=0;u<c.length;u++){u&&(i=a?i[o]:i[o]=Object.create(null)),o=c[u],(a=Object.hasOwn(i,o))&&(typeof i[o]!="object"||r.has(i[o]))&&J.x("trying to redefine an already defined value",t,l);let f=o==="__proto__";if(t.uk&&(f||o==="constructor")){i=t.uk!==1&&J.x("document contains an unsafe property",t,l);break}!a&&f&&Object.defineProperty(i,o,{enumerable:!0,configurable:!0,writable:!0})}a&&J.x("trying to redefine an already defined value",t,l),Gt(t,!0,!0);let d=Zi(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Gt(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished table",t,e)}function fI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Gt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(Zi(t,93)),Gt(t),(r=t.s.charCodeAt(t.p++))===93)return n;r!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished array",t,e)}var eh=x(()=>{Kp();Zp();th();os();});function mI(t,e,n,r,s){let o=n,i=r,a,l=!1,c;for(let d=0;d<e.length;d++){if(d){if(o=l?o[a]:o[a]=Object.create(null),i=(c=i[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],i=i[u].c}}if(a=e[d],(l=Object.hasOwn(o,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!l){let u=a==="__proto__";if(t.uk&&(u||a==="constructor"))return!1;u&&(Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=i[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[a]=[]),o[a].push(o=Object.create(null)),c.c[c.i++]=c={t:1,d:!1,i:0,c:Object.create(null)}),c.d))return null;if(c.d=!0,s===1)o=l?o[a]:o[a]=Object.create(null);else if(s===0&&l)return null;return[a,o,c.c]}function pI(t,e,n){(e===null||t.uk===2)&&J.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function ao(t,e={}){let n={s:t,p:0,d:e.maxDepth??1e3,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),s=Object.create(null),o,i=!1,a=r,l=s;for(t.charCodeAt(0)===65279&&n.p++,Gt(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;o=n.p+=+c,i=!1;let d=Gc(n,93);c&&(t.charCodeAt(n.p)!==93&&J.x("expected end of table array declaration",n),n.p++);let u=mI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(pI(n,u,o),i=!0)}else{o=n.p;let c=Gc(n),d=mI(n,c,a,l,0);!d&&!i&&pI(n,d,o),Gt(n,!0,!0);let u=Zi(n,void 0);d&&!i&&(d[1][d[0]]=u)}Gt(n,!0),n.p<t.length&&(o=t.charCodeAt(n.p))!==10&&(o!==13||t.charCodeAt(n.p+1)!==10)&&J.x("each key-value declaration must be followed by an end-of-line",n),Gt(n)}return r}var hI=x(()=>{eh();Zp();th();os();});var gZ,_I=x(()=>{gZ=!!"".isWellFormed});var nh=x(()=>{hI();_I();Yp();os();});import{readFileSync as dW}from"node:fs";import{homedir as uW}from"node:os";import{join as gI,resolve as fW}from"node:path";function Dt(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?fW(e):gI(n||gI(t.HOME||uW(),".lmctl"),"init.toml")}function mW(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function mn(t,e="<init.toml>"){let{document:n}=yI(t,e),r={};for(let o of is){let i=n[o];if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date)throw new qe(e,"schema","["+o+"] must be a table with provider, model1, model2 and model3");let a={};for(let l of ea){let c=i[l];if(typeof c!="string"||!c.trim())throw new qe(e,"schema",o+"."+l+" must be a nonempty string");a[l]=c}r[o]=a}let s={raw:t,document:n,path:e,slots:r};return Object.defineProperty(s,"config",{enumerable:!1,get(){let o=is.find(i=>!r[i]);if(o)throw new qe(e,"schema","["+o+"] is not in "+e+"; this needs the example slots ["+is.join("], [")+"] -- add ["+o+"] with provider, model1, model2 and model3");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function yI(t,e="<init.toml>"){let n;try{n=ao(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new qe(e,"syntax",s.message,s.line??1,(s.column??1)+(t.startsWith("\uFEFF")&&s.line===1?1:0))}return{raw:t,document:n,path:e}}function pW(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(dW(t))}catch(n){let r=n;throw new qe(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function ta(t=Dt()){return mn(pW(t),t)}var is,ea,qe,Vc=x(()=>{"use strict";nh();is=["Provider1","Provider2","Provider3"],ea=["provider","model1","model2","model3"];qe=class extends Error{path;kind;line;column;detail;constructor(e,n,r,s=1,o=1){let i=mW(e,n,r,s,o);super(n==="missing"?i+". Run lmctl init first.":i+". Fix the file or run lmctl init."),this.path=e,this.kind=n,this.line=s,this.column=o,this.detail=i}}});function hW(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1929
+ `: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 Kp=x(()=>{os();});var iW,zi,Yp=x(()=>{iW=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,zi=class t extends Date{#t=!1;#n=!1;#e=null;constructor(e,n,r){let s=!0,o=!0,i="Z",a;if(typeof e=="string")if(n)e:{if(n<3){if(+e.slice(11,13)>23){e="";break e}n===2?(i=null,e+="Z"):(a=e.charCodeAt(e.length-1))!==90&&a!==122&&(i=e.slice(e.length-6)),r&&(e=e.slice(0,10)+"T"+e.slice(11))}else n===4&&(e=+e.slice(0,2)>23?"":`0000-01-01T${e}Z`);s=n!==4,o=n!==3}else{let l=e.match(iW);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 St(t,e=10){return e===16?t>47&&t<58||t>64&&t<71||t>96&&t<103:t>47&&t<48+e}function Qp(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?fI(t):uI(t);return t.d++,s}return r===34||r===39?Xc(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?qc(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?aW(t,r,e):t.s.charCodeAt(t.p+2)===58?lW(t,r,e):qc(t,t.p,r,0,e)}function qc(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||Qp(o=t.s.charCodeAt(t.p),s))return t.bi===!0?0n:0;if(!r){if(o===120)return zp(t,e,16,s);if(o===98)return zp(t,e,2,s);if(o===111)return zp(t,e,8,s)}o===46?i=2:o===101||o===69?i=4:J.x("illegal leading zero",t,e)}else St(o)||J.x("invalid value",t,e);for(;++t.p<t.s.length&&(o=t.s.charCodeAt(t.p),!Qp(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)||(St(o)?i>9?i-=11:i&1||i++:J.x("illegal character in numeric literal",t));if(!i){let c=(n-48)*(r||1);return t.bi===!0?BigInt(c):c}i&1||J.x("unfinished numeric value",t,e);let l=t.s.slice(e,t.p);return a&&(l=l.replaceAll("_","")),i>1?parseFloat(l):dI(t,l,10,e)}function zp(t,e,n,r){let s,o=1;for(;++t.p<t.s.length&&(s=t.s.charCodeAt(t.p),!Qp(s,r));)s===95?(o&1&&J.x("illegal underscore",t),o=3):St(s,n)?o&1&&o--:J.x("illegal character in numeric literal",t);o&1&&J.x("unfinished numeric value",t);let i=t.s.slice(e+2,t.p);return o&&(i=i.replaceAll("_","")),dI(t,i,n,e)}function dI(t,e,n,r){if(t.bi!==!0)e:{let s=parseInt(e,n);if(!Number.isSafeInteger(s)){if(t.bi)break e;J.x("integer value cannot be represented losslessly",t,r)}return s}return BigInt(n===10?e:(n===2?"0b":n===8?"0o":"0x")+e)}function aW(t,e,n){let r=t.p++,s;if(!St(e)||!St(t.s.charCodeAt(t.p++))||!St(t.s.charCodeAt(t.p++))||!St(t.s.charCodeAt(t.p++)))return qc(t,t.p=r,e,0,n);if(t.p+=5,St(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,!St(t.s.charCodeAt(t.p+1))))&&e!==84&&e!==116){let i=t.s.slice(r,t.p);return Qi(t,i,3,!1,r)}if(t.s.charCodeAt(t.p+=3)!==58&&J.x("invalid date-time: time part is malformed",t,r),t.s.charCodeAt(t.p+=3)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;St(t.s.charCodeAt(++t.p)););if(e=t.s.charCodeAt(t.p)){if(e===90||e===122){let i=t.s.slice(r,++t.p);return Qi(t,i,1,s,r,"[+00:00]")}if(e===43||e===45){let i=t.s.slice(r,t.p+=6);return Qi(t,i,1,s,r,!t.ld&&"["+t.s.slice(t.p-6,t.p)+"]")}}let o=t.s.slice(r,t.p);return Qi(t,o,2,s,r)}function lW(t,e,n){let r=t.p;if(!St(e)||!St(t.s.charCodeAt(++t.p)))return qc(t,--t.p,e,0,n);if(t.s.charCodeAt(t.p+=4)===58&&(t.p+=3),t.s.charCodeAt(t.p)===46)for(;St(t.s.charCodeAt(++t.p)););let s=t.s.slice(r,t.p);return Qi(t,s,4,!1,r)}function Qi(t,e,n,r,s,o){if(t.ld){let i=new zi(e,n,r);return i.isValid()||J.x("invalid date",t,s),i}try{switch(o&&(e+=o),n){case 1:return Temporal.ZonedDateTime.from(e);case 2:return Temporal.PlainDateTime.from(e);case 3:return Temporal.PlainDate.from(e);case 4:return Temporal.PlainTime.from(e)}}catch(i){J.x(i instanceof Error?i.message:""+i,t,s)}}var Zp=x(()=>{Kp();eh();os();Yp();});function cW(t){for(;t.p<t.s.length;t.p++){let e=t.s.charCodeAt(t.p);if(e===10)break;if(e===13&&t.s.charCodeAt(t.p+1)===10){t.p++;break}(e<32&&e!==9||e===127)&&J.x("control characters are not allowed in comments",t)}}function Gt(t,e,n){let r;for(;t.p<t.s.length;){for(;t.p<t.s.length&&((r=t.s.charCodeAt(t.p))===32||r===9||!e&&(r===10||r===13&&t.s.charCodeAt(t.p+1)===10));)t.p++;if(n||r!==35)break;cW(t)}}var th=x(()=>{os();});function Gc(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(Xc(t)),r=2,t.p--):i===32||i===9?r===1&&(s.push(t.s.slice(o,t.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?J.x("illegal character in key",t):r||(r=1,o=t.p)}while(i=t.s.charCodeAt(++t.p));J.x("incomplete key-value: cannot find end of key",t,n)}function uI(t){let e=t.p++,n=Object.create(null),r=new Set,s;for(;t.p<t.s.length;){if(Gt(t),(s=t.s.charCodeAt(t.p))===125)return t.p++,n;let o,i=n,a=!1,l=t.p,c=Gc(t);for(let u=0;u<c.length;u++){u&&(i=a?i[o]:i[o]=Object.create(null)),o=c[u],(a=Object.hasOwn(i,o))&&(typeof i[o]!="object"||r.has(i[o]))&&J.x("trying to redefine an already defined value",t,l);let f=o==="__proto__";if(t.uk&&(f||o==="constructor")){i=t.uk!==1&&J.x("document contains an unsafe property",t,l);break}!a&&f&&Object.defineProperty(i,o,{enumerable:!0,configurable:!0,writable:!0})}a&&J.x("trying to redefine an already defined value",t,l),Gt(t,!0,!0);let d=Zi(t,125);if(i&&typeof(i[o]=d)=="object"&&r.add(d),Gt(t),(s=t.s.charCodeAt(t.p++))===125)return n;s!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished table",t,e)}function fI(t){let e=t.p++,n=[],r;for(;t.p<t.s.length;){if(Gt(t),(r=t.s.charCodeAt(t.p))===93)return t.p++,n;if(n.push(Zi(t,93)),Gt(t),(r=t.s.charCodeAt(t.p++))===93)return n;r!==44&&J.x("expected comma or end of structure",t,t.p-1)}J.x("unfinished array",t,e)}var eh=x(()=>{Kp();Zp();th();os();});function mI(t,e,n,r,s){let o=n,i=r,a,l=!1,c;for(let d=0;d<e.length;d++){if(d){if(o=l?o[a]:o[a]=Object.create(null),i=(c=i[a]).c,s===0&&(c.t===1||c.t===2))return null;if(c.t===2){let u=o.length-1;o=o[u],i=i[u].c}}if(a=e[d],(l=Object.hasOwn(o,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!l){let u=a==="__proto__";if(t.uk&&(u||a==="constructor"))return!1;u&&(Object.defineProperty(o,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:d<e.length-1&&s===2?3:s,d:!1,i:0,c:Object.create(null)}}}if(c=i[a],c.t!==s&&!(s===1&&c.t===3)||(s===2&&(c.d||(c.d=!0,o[a]=[]),o[a].push(o=Object.create(null)),c.c[c.i++]=c={t:1,d:!1,i:0,c:Object.create(null)}),c.d))return null;if(c.d=!0,s===1)o=l?o[a]:o[a]=Object.create(null);else if(s===0&&l)return null;return[a,o,c.c]}function pI(t,e,n){(e===null||t.uk===2)&&J.x(e===null?"trying to redefine an already defined table or value":"document contains an unsafe property",t,n)}function ao(t,e={}){let n={s:t,p:0,d:e.maxDepth??1e3,bi:e.integersAsBigInt??!1,ld:e.useLegacyDate??!0,uk:e.unsafeKeyBehaviour==="throw"?2:e.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),s=Object.create(null),o,i=!1,a=r,l=s;for(t.charCodeAt(0)===65279&&n.p++,Gt(n);n.p<t.length;){if(t.charCodeAt(n.p)===91){let c=t.charCodeAt(++n.p)===91;o=n.p+=+c,i=!1;let d=Gc(n,93);c&&(t.charCodeAt(n.p)!==93&&J.x("expected end of table array declaration",n),n.p++);let u=mI(n,d,r,s,c?2:1);u?(l=u[2],a=u[1]):(pI(n,u,o),i=!0)}else{o=n.p;let c=Gc(n),d=mI(n,c,a,l,0);!d&&!i&&pI(n,d,o),Gt(n,!0,!0);let u=Zi(n,void 0);d&&!i&&(d[1][d[0]]=u)}Gt(n,!0),n.p<t.length&&(o=t.charCodeAt(n.p))!==10&&(o!==13||t.charCodeAt(n.p+1)!==10)&&J.x("each key-value declaration must be followed by an end-of-line",n),Gt(n)}return r}var hI=x(()=>{eh();Zp();th();os();});var yZ,_I=x(()=>{yZ=!!"".isWellFormed});var nh=x(()=>{hI();_I();Yp();os();});import{readFileSync as dW}from"node:fs";import{homedir as uW}from"node:os";import{join as gI,resolve as fW}from"node:path";function Dt(t=process.env,e){let n=t.LMCTL_HOME||(t.HOME===void 0?process.env.LMCTL_HOME:void 0);return e!==void 0?fW(e):gI(n||gI(t.HOME||uW(),".lmctl"),"init.toml")}function mW(t,e,n,r,s){return e==="missing"?"Missing "+t:e==="read"?"Cannot read "+t+": "+n:"Invalid "+t+":"+r+":"+s+": "+n}function mn(t,e="<init.toml>"){let{document:n}=yI(t,e),r={};for(let o of is){let i=n[o];if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date)throw new qe(e,"schema","["+o+"] must be a table with provider, model1, model2 and model3");let a={};for(let l of ea){let c=i[l];if(typeof c!="string"||!c.trim())throw new qe(e,"schema",o+"."+l+" must be a nonempty string");a[l]=c}r[o]=a}let s={raw:t,document:n,path:e,slots:r};return Object.defineProperty(s,"config",{enumerable:!1,get(){let o=is.find(i=>!r[i]);if(o)throw new qe(e,"schema","["+o+"] is not in "+e+"; this needs the example slots ["+is.join("], [")+"] -- add ["+o+"] with provider, model1, model2 and model3");return{provider1:r.Provider1,provider2:r.Provider2,provider3:r.Provider3}}}),s}function yI(t,e="<init.toml>"){let n;try{n=ao(t.startsWith("\uFEFF")?t.slice(1):t,{integersAsBigInt:"asNeeded",useLegacyDate:!0})}catch(r){let s=r;throw new qe(e,"syntax",s.message,s.line??1,(s.column??1)+(t.startsWith("\uFEFF")&&s.line===1?1:0))}return{raw:t,document:n,path:e}}function pW(t){let e;try{e=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(dW(t))}catch(n){let r=n;throw new qe(t,r.code==="ENOENT"?"missing":"read",r.message)}return e}function ta(t=Dt()){return mn(pW(t),t)}var is,ea,qe,Vc=x(()=>{"use strict";nh();is=["Provider1","Provider2","Provider3"],ea=["provider","model1","model2","model3"];qe=class extends Error{path;kind;line;column;detail;constructor(e,n,r,s=1,o=1){let i=mW(e,n,r,s,o);super(n==="missing"?i+". Run lmctl init first.":i+". Fix the file or run lmctl init."),this.path=e,this.kind=n,this.line=s,this.column=o,this.detail=i}}});function hW(t){let e=[],n=0;for(;n<t.length;){let r=t[n];if(r==="\r"||r===`
1930
1930
  `){let o=n;n+=r==="\r"&&t[n+1]===`
1931
1931
  `?2:1,e.push({start:o,end:n,text:`
1932
1932
  `,kind:"newline"});continue}if(/\s/.test(r)){n++;continue}if(r==="#"){for(;n<t.length&&t[n]!=="\r"&&t[n]!==`
1933
1933
  `;)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 _W(t){let e=ao(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 gW(t){let e=ao(t+`
1934
- __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 rh(t){return'"'+Array.from(t).map(e=>{let n=e.codePointAt(0);if(n>=55296&&n<=57343)throw new Error("managed string contains an invalid Unicode scalar");return e==='"'?'\\"':e==="\\"?"\\\\":n<32||n===127?"\\u"+n.toString(16).padStart(4,"0"):e}).join("")+'"'}function EI(t,e,n=[]){if(n.length===2&&is.includes(n[0])&&ea.includes(n[1])||Object.is(t,e))return!0;if(t instanceof Date||e instanceof Date)return t instanceof Date&&e instanceof Date&&t.toISOString()===e.toISOString();if(!t||!e||typeof t!="object"||typeof e!="object"||Array.isArray(t)!==Array.isArray(e))return!1;let r=Object.keys(t),s=Object.keys(e);return r.length!==s.length||r.some(o=>!Object.hasOwn(e,o))?!1:r.every(o=>EI(t[o],e[o],[...n,o]))}function TI(t,e){try{let n=mn(t),r=is.filter(m=>n.slots[m]),s=is.filter(m=>!n.slots[m]),o=[];for(let m of r)for(let p of ea){let g=n.slots[m][p],h=e[m.toLowerCase()][p];g!==h&&o.push({section:m,key:p,oldValue:g,newValue:h,line:1})}if(!o.length)return{ok:!0,text:t,changes:o,absent:s};let i=new Map,a=hW(t),l=0,c=[];for(;l<a.length;){if(a[l].kind==="newline"){l++;continue}let m=l;if(a[l].text==="["){for(;l<a.length&&a[l].kind!=="newline";)l++;c=gW(t.slice(a[m].start,a[l-1].end));continue}for(;l<a.length&&a[l].text!=="=";)l++;if(l===a.length)throw new Error("cannot locate assignment");let p=_W(t.slice(a[m].start,a[l-1].end));l++;let g=l,h=0;for(;l<a.length;){let _=a[l];if(_.kind==="newline"&&h===0)break;_.kind==="symbol"&&((_.text==="["||_.text==="{")&&h++,(_.text==="]"||_.text==="}")&&h--),l++}if(c.length===1&&p.length===1&&l-g===1){let _=a[g];_.kind==="string"&&!_.multiline&&i.set(c[0]+"."+p[0],_)}}let d=o.map(m=>{let p=i.get(m.section+"."+m.key);if(!p)throw new Error("cannot edit "+m.section+"."+m.key+" in place (multiline, dotted or inline managed layout); edit by hand");return m.line=t.slice(0,p.start).split(/\r\n|\r|\n/).length,{start:p.start,end:p.end,text:rh(m.newValue)}}).sort((m,p)=>p.start-m.start),u=t;for(let m of d)u=u.slice(0,m.start)+m.text+u.slice(m.end);let f=mn(u);for(let m of r)for(let p of ea)if(f.slots[m]?.[p]!==e[m.toLowerCase()][p])throw new Error("managed-value verification failed");if(!EI(n.document,f.document))throw new Error("unmanaged semantic verification failed");return{ok:!0,text:u,changes:o,absent:s}}catch(n){return{ok:!1,error:n instanceof qe?n.detail:n.message,line:n.line}}}var wI=x(()=>{"use strict";nh();Vc()});import{spawnSync as yW}from"node:child_process";function vI(t){return lo.filter(e=>t.includes(e))}function sh(t,e){let n=qp(t,e)??qp("claude",e);return{provider:t,model1:n[0],model2:n[1],model3:n[2]}}function SI(t,e){let n=t.filter((a,l)=>t.indexOf(a)===l),r=n.length>0?n:["claude"],[s,o=s,i=s]=r;return{provider1:sh(s,e),provider2:sh(o,e),provider3:sh(i,e)}}function bI(t=yW){return Jb(lo,{spawnSync:t}).filter(e=>e.found).map(e=>e.provider)}function Jc(t){return rh(t)}function na(t){let e=(n,r)=>[`[${n}]`,`provider = ${Jc(r.provider)}`,`model1 = ${Jc(r.model1)}`,`model2 = ${Jc(r.model2)}`,`model3 = ${Jc(r.model3)}`].join(`
1934
+ __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 rh(t){return'"'+Array.from(t).map(e=>{let n=e.codePointAt(0);if(n>=55296&&n<=57343)throw new Error("managed string contains an invalid Unicode scalar");return e==='"'?'\\"':e==="\\"?"\\\\":n<32||n===127?"\\u"+n.toString(16).padStart(4,"0"):e}).join("")+'"'}function EI(t,e,n=[]){if(n.length===2&&is.includes(n[0])&&ea.includes(n[1])||Object.is(t,e))return!0;if(t instanceof Date||e instanceof Date)return t instanceof Date&&e instanceof Date&&t.toISOString()===e.toISOString();if(!t||!e||typeof t!="object"||typeof e!="object"||Array.isArray(t)!==Array.isArray(e))return!1;let r=Object.keys(t),s=Object.keys(e);return r.length!==s.length||r.some(o=>!Object.hasOwn(e,o))?!1:r.every(o=>EI(t[o],e[o],[...n,o]))}function TI(t,e){try{let n=mn(t),r=is.filter(m=>n.slots[m]),s=is.filter(m=>!n.slots[m]),o=[];for(let m of r)for(let p of ea){let _=n.slots[m][p],h=e[m.toLowerCase()][p];_!==h&&o.push({section:m,key:p,oldValue:_,newValue:h,line:1})}if(!o.length)return{ok:!0,text:t,changes:o,absent:s};let i=new Map,a=hW(t),l=0,c=[];for(;l<a.length;){if(a[l].kind==="newline"){l++;continue}let m=l;if(a[l].text==="["){for(;l<a.length&&a[l].kind!=="newline";)l++;c=gW(t.slice(a[m].start,a[l-1].end));continue}for(;l<a.length&&a[l].text!=="=";)l++;if(l===a.length)throw new Error("cannot locate assignment");let p=_W(t.slice(a[m].start,a[l-1].end));l++;let _=l,h=0;for(;l<a.length;){let g=a[l];if(g.kind==="newline"&&h===0)break;g.kind==="symbol"&&((g.text==="["||g.text==="{")&&h++,(g.text==="]"||g.text==="}")&&h--),l++}if(c.length===1&&p.length===1&&l-_===1){let g=a[_];g.kind==="string"&&!g.multiline&&i.set(c[0]+"."+p[0],g)}}let d=o.map(m=>{let p=i.get(m.section+"."+m.key);if(!p)throw new Error("cannot edit "+m.section+"."+m.key+" in place (multiline, dotted or inline managed layout); edit by hand");return m.line=t.slice(0,p.start).split(/\r\n|\r|\n/).length,{start:p.start,end:p.end,text:rh(m.newValue)}}).sort((m,p)=>p.start-m.start),u=t;for(let m of d)u=u.slice(0,m.start)+m.text+u.slice(m.end);let f=mn(u);for(let m of r)for(let p of ea)if(f.slots[m]?.[p]!==e[m.toLowerCase()][p])throw new Error("managed-value verification failed");if(!EI(n.document,f.document))throw new Error("unmanaged semantic verification failed");return{ok:!0,text:u,changes:o,absent:s}}catch(n){return{ok:!1,error:n instanceof qe?n.detail:n.message,line:n.line}}}var wI=x(()=>{"use strict";nh();Vc()});import{spawnSync as yW}from"node:child_process";function vI(t){return lo.filter(e=>t.includes(e))}function sh(t,e){let n=qp(t,e)??qp("claude",e);return{provider:t,model1:n[0],model2:n[1],model3:n[2]}}function SI(t,e){let n=t.filter((a,l)=>t.indexOf(a)===l),r=n.length>0?n:["claude"],[s,o=s,i=s]=r;return{provider1:sh(s,e),provider2:sh(o,e),provider3:sh(i,e)}}function bI(t=yW){return Jb(lo,{spawnSync:t}).filter(e=>e.found).map(e=>e.provider)}function Jc(t){return rh(t)}function na(t){let e=(n,r)=>[`[${n}]`,`provider = ${Jc(r.provider)}`,`model1 = ${Jc(r.model1)}`,`model2 = ${Jc(r.model2)}`,`model3 = ${Jc(r.model3)}`].join(`
1935
1935
  `);return`# Generated by \`lmctl init\`. This is a STARTING POINT, not a fixed answer --
1936
1936
  # lmctl properties: hierarchical keys such as Provider1.provider, Provider1.model1,
1937
1937
  # and user-defined top-level Env1. edit any value below to change what \`lmctl plan\`/\`lmctl quickrun\` resolve to.
@@ -1971,7 +1971,7 @@ ${e("Provider3",t.provider3)}
1971
1971
  `);for(let y of await $I(i.members))e.stderr.write(`warning: ${y}
1972
1972
  `);for(let y of Yf(i.members,o))e.stderr.write(`warning: ${y}
1973
1973
  `);let f=await PI(i.members);if(f.length>0){for(let y of f)e.stderr.write(`error: ${y.field}: ${y.message}
1974
- `);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 pn(e,"Session binding changed; refresh cancelled.")}let p=0,g=i.members.filter(y=>y.teamfile!==void 0?!1:m?y.alias.toLowerCase()===m.alias.toLowerCase():y.session===void 0||y.session.length<co);for(let y of g)if(!ii(y.provider))return e.stderr.write(`error: ${y.alias}: invalid provider "${y.provider}"
1974
+ `);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 pn(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<co);for(let y of _)if(!ii(y.provider))return e.stderr.write(`error: ${y.alias}: invalid provider "${y.provider}"
1975
1975
  `),1;for(let y of i.members){if(n.signal?.aborted)return pn(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>=co){e.stderr.write(`warning: ${y.alias}: existing sessionid preserved; skipping
1976
1976
  `);continue}let T=y.sessiondir??o;e.stderr.write(`${y.alias}: launching ${y.provider} seed session; this can take several seconds
1977
1977
  `);let w=Zo(e,L=>`${y.alias}: still launching (${L}s elapsed)
@@ -1983,8 +1983,8 @@ ${e("Provider3",t.provider3)}
1983
1983
  `),1;let v=PW(T),A=ih(l[k],"sessionid",L.sessionId);A=ih(A,"sessiondir",v);let N=y.model;if(y.model===void 0){let R;try{R=(await je(L.sessionId,y.provider))?.model}catch{R=void 0}R!==void 0&&R.length>0&&(A=ih(A,"model",R),N=R)}if((m||n.guardFile)&&ah(r,"utf8")!==c)return pn(e,`Teamfile changed during seeding; new session ${L.sessionId} was not attached. Existing bindings preserved.`);l[k]=A,p+=1,c=l.join(`
1984
1984
  `),xI(r,c,"utf8"),n.onSeeded?.({alias:y.alias,provider:y.provider,sessionid:L.sessionId,sessiondir:v,...N!==void 0?{model:N}:{}}),e.stdout.write(`${y.alias}: seeded ${L.sessionId} provider=${y.provider} sessiondir=${v} model=${N?JSON.stringify(N):"default (not reported)"}
1985
1985
  `)}finally{I()}}let h=l.join(`
1986
- `),_=JW(h,lh(r));_!==h&&xI(r,_,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1987
- `);let E=new Date().toISOString();try{await W(e,y=>{Kc(y,{teamfilePath:s,name:i.name,rawText:_,now:E})})}catch(y){return pn(e,y instanceof Error?y.message:String(y))}return 0}function FI(t){return SW("sha256").update(t).digest("hex")}function jI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:FI(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);ci(t,e.teamfilePath,n);let r=jI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function XW(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=GW(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function qW(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function GW(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function ih(t,e,n){let r=`${e}=${VW(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function VW(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function JW(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1986
+ `),g=JW(h,lh(r));g!==h&&xI(r,g,"utf8"),p===0&&e.stdout.write(`no members needed seeding
1987
+ `);let E=new Date().toISOString();try{await W(e,y=>{Kc(y,{teamfilePath:s,name:i.name,rawText:g,now:E})})}catch(y){return pn(e,y instanceof Error?y.message:String(y))}return 0}function FI(t){return SW("sha256").update(t).digest("hex")}function jI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:FI(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);ci(t,e.teamfilePath,n);let r=jI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(r),r}function XW(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=GW(r,"alias");s!==void 0&&e.set(s.toLowerCase(),n)}return e}function qW(t){return/^[A-Za-z][A-Za-z0-9_-]*$/u.test(t)}function GW(t,e){let r=new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t);return r===null?void 0:r[1]??r[2]??""}function ih(t,e,n){let r=`${e}=${VW(n)}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}function VW(t){return/[\s"]/u.test(t)?`"${t.replace(/"/g,'\\"')}"`:t}function JW(t,e){let n=`#teamfile: ${e}`,r=t.indexOf(`
1988
1988
  `),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}
1989
1989
  ${o}`:`${n}
1990
1990
  `:t.length>0?`${n}
@@ -2067,10 +2067,10 @@ ${r}
2067
2067
  `)){if(!XI.test(n))continue;let r=hh(n,"alias"),s=hh(n,"provider");if(r===void 0||s===void 0)continue;let o=hh(n,"model");e.push({alias:r,provider:s,...o!==void 0&&o!==""?{model:o}:{}})}return e}var _h,Yc,XI,Qc=x(()=>{"use strict";hn();_h={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";XI=/^\s*_MEMBER_\s+\S/});var vh={};me(vh,{PROVIDER_NAMES:()=>ho,adoptSession:()=>wh,chooseMember:()=>aa,chooseTeamfile:()=>Eh,completeTeamfile:()=>GI,createPromptTeam:()=>Th,field:()=>fo,prepareTeam:()=>ia,setField:()=>br});import{existsSync as oa,mkdirSync as gh,readFileSync as Zc,readdirSync as YW,statSync as zW,writeFileSync as yh}from"node:fs";import{basename as mo,dirname as ed,extname as td,resolve as po}from"node:path";function fo(t,e){return new RegExp(`(?:^|\\s)${e}=(?:"([^"]*)"|(\\S*))`).exec(t)?.slice(1).find(n=>n!==void 0)}function br(t,e,n){if(/["\r\n]/.test(n))throw new Error(`${e} cannot contain quotes or newlines in a teamfile.`);let r=`${e}=${/\s/.test(n)?`"${n}"`:n}`,s=new RegExp(`(^|\\s)${e}=(?:"[^"]*"|\\S*)`);return s.test(t)?t.replace(s,(o,i)=>`${i}${r}`):`${t.trimEnd()} ${r}`}async function QW(t,e){let n=wr(),r=[...new Set(n?Object.values(n).map(s=>s.provider):[])];for(e.stderr.write(`Providers from lmctl init: ${r.join(", ")||"(none saved)"}; another supported provider may be typed.
2068
2068
  `);;){let s=await t.ask("Provider: ");if(ho.includes(s))return s;e.stderr.write(`Known providers: ${ho.join(", ")}
2069
2069
  `)}}async function GI(t,e,n,r={},s){let o=oa(t),i=o?Zc(t,"utf8"):"",a=i.split(`
2070
- `),l=a.map((m,p)=>/^\s*_MEMBER_(?:\s|$)/.test(m)?p:-1).filter(m=>m>=0);if(!l.length){let m=s?[s]:(await e.ask("Member aliases [Lead] (comma separated): ")||"Lead").split(",").map(p=>p.trim());for(let p of m)l.push(a.length),a.push(br("_MEMBER_","alias",p))}let c=new Set;for(let m of l){let p=a[m],g=fo(p,"alias");if(g||(g=await e.ask(`Alias for member on line ${m+1}: `)),!/^[A-Za-z][A-Za-z0-9_-]*$/.test(g)||c.has(g.toLowerCase()))throw new Error(`Invalid or duplicate alias: ${g}`);if(c.add(g.toLowerCase()),p=br(p,"alias",g),!fo(p,"teamfile")){let h=fo(p,"provider");h||(h=await QW(e,n));let _=bt({alias:g,provider:h});if(_)throw new Error(_);if(p=br(p,"provider",h),!fo(p,"model")&&!fo(p,"sessionid")){let E=await(r.models??io)(h).catch(()=>[]);E.length&&n.stderr.write(`Models for ${h}:
2070
+ `),l=a.map((m,p)=>/^\s*_MEMBER_(?:\s|$)/.test(m)?p:-1).filter(m=>m>=0);if(!l.length){let m=s?[s]:(await e.ask("Member aliases [Lead] (comma separated): ")||"Lead").split(",").map(p=>p.trim());for(let p of m)l.push(a.length),a.push(br("_MEMBER_","alias",p))}let c=new Set;for(let m of l){let p=a[m],_=fo(p,"alias");if(_||(_=await e.ask(`Alias for member on line ${m+1}: `)),!/^[A-Za-z][A-Za-z0-9_-]*$/.test(_)||c.has(_.toLowerCase()))throw new Error(`Invalid or duplicate alias: ${_}`);if(c.add(_.toLowerCase()),p=br(p,"alias",_),!fo(p,"teamfile")){let h=fo(p,"provider");h||(h=await QW(e,n));let g=bt({alias:_,provider:h});if(g)throw new Error(g);if(p=br(p,"provider",h),!fo(p,"model")&&!fo(p,"sessionid")){let E=await(r.models??io)(h).catch(()=>[]);E.length&&n.stderr.write(`Models for ${h}:
2071
2071
  ${E.map(T=>` ${T}`).join(`
2072
2072
  `)}
2073
- `);let y=await e.ask(`Model for ${g} (blank for provider default): `);y&&(p=br(p,"model",y))}}a[m]=p}let d=a.join(`
2073
+ `);let y=await e.ask(`Model for ${_} (blank for provider default): `);y&&(p=br(p,"model",y))}}a[m]=p}let d=a.join(`
2074
2074
  `),u=Cn(d,mo(t)),f=li(u,ed(t));if(f.length)throw new Error(f.map(m=>m.message).join(`
2075
2075
  `));if(o||(d=Sr({teamName:mo(t,td(t)),members:u.members})),d!==i){if(o&&Zc(t,"utf8")!==i)throw new Error("Teamfile changed while completing it; nothing was written.");gh(ed(t),{recursive:!0}),yh(t,d.endsWith(`
2076
2076
  `)?d:`${d}
@@ -2093,7 +2093,7 @@ ${VI}
2093
2093
  `),2;r.prompt=i}let o=rn(sH,{target:r.target,alias:r.alias,flags:{}});if(o.mode==="error")return e.stderr.write(`error: ${o.message}
2094
2094
  `),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)
2095
2095
  `),2;e.stderr.write(`${o.alias}: turn running; this can take minutes
2096
- `);let i=iT(e,{teamfile:o.teamfile,alias:o.alias}),a=new AbortController,l,c,d=g=>{l===void 0&&(l=g==="SIGINT"?130:g==="SIGTERM"?143:129,a.abort(g),c=setTimeout(()=>process.exit(l),1e3),c.unref())},u=()=>d("SIGINT"),f=()=>d("SIGTERM"),m=()=>d("SIGHUP");process.on("SIGINT",u),process.on("SIGTERM",f),process.on("SIGHUP",m);let p;try{p=await xc({signal:a.signal,teamfile:o.teamfile,alias:o.alias,prompt:r.prompt,permissionMode:r.permissionMode,idleTimeoutMs:0,...r.rootFlag!==void 0?{rootFlag:r.rootFlag}:{},env:n,io:e,onEvent:g=>{i.poke(g),!(r.json===!0&&g.kind==="delta")&&fH(e,g,r.verbose===!0)},...r.json===!0?{onAccepted:g=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:g})}
2096
+ `);let i=iT(e,{teamfile:o.teamfile,alias:o.alias}),a=new AbortController,l,c,d=_=>{l===void 0&&(l=_==="SIGINT"?130:_==="SIGTERM"?143:129,a.abort(_),c=setTimeout(()=>process.exit(l),1e3),c.unref())},u=()=>d("SIGINT"),f=()=>d("SIGTERM"),m=()=>d("SIGHUP");process.on("SIGINT",u),process.on("SIGTERM",f),process.on("SIGHUP",m);let p;try{p=await xc({signal:a.signal,teamfile:o.teamfile,alias:o.alias,prompt:r.prompt,permissionMode:r.permissionMode,idleTimeoutMs:0,...r.rootFlag!==void 0?{rootFlag:r.rootFlag}:{},env:n,io:e,onEvent:_=>{i.poke(_),!(r.json===!0&&_.kind==="delta")&&fH(e,_,r.verbose===!0)},...r.json===!0?{onAccepted:_=>{i.poke(),e.stdout.write(`${JSON.stringify({status:"accepted",message_id:_})}
2097
2097
  `)}}:{}})}finally{i.stop(),c!==void 0&&clearTimeout(c),process.removeListener("SIGINT",u),process.removeListener("SIGTERM",f),process.removeListener("SIGHUP",m)}return l!==void 0?l:r.json===!0?p.status==="busy"?(e.stdout.write(`${JSON.stringify({status:"busy",message:p.message,teamChatLogId:p.teamChatLogId})}
2098
2098
  `),1):p.status==="error"?(e.stdout.write(`${JSON.stringify({status:"error",errorKind:p.errorKind,message:p.message,teamChatLogId:p.teamChatLogId,...p.messageId===null?{}:{message_id:p.messageId}})}
2099
2099
  `),1):(e.stdout.write(`${JSON.stringify({status:p.status,replyText:p.replyText,teamChatLogId:p.teamChatLogId,...p.messageId===null?{}:{message_id:p.messageId},turn_finished:!0,note:JI(o.alias)})}
@@ -2106,7 +2106,7 @@ ${VI}
2106
2106
  `):e.stdout.write(`${p.replyText}${p.replyText.endsWith(`
2107
2107
  `)?"":`
2108
2108
  `}`),e.stderr.write(`note: ${JI(o.alias)}
2109
- `),p.status==="stalled"?1:0)}return 2}function JI(t){return`${t}'s turn has finished and exited; resubmit \`lmctl prompt\` to continue (no persistent session is left running)`}function cH(t){let e=[],n="yolo",r,s,o,i,a,l=!1,c=!1;for(let p=0;p<t.length;p+=1){let g=t[p];if(g==="--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(g==="--from"||g.startsWith("--from="))return Ib("prompt");if(g.startsWith("I_am="))return`unknown argument: ${g}`;if(g==="--root"){let h=t[++p];if(h===void 0||h.startsWith("--"))return"missing value for --root";r=h;continue}if(g==="--prompt-file"){let h=t[++p];if(h===void 0||h!=="-"&&h.startsWith("--"))return"missing value for --prompt-file";s=h;continue}if(g==="--provider"||g==="--model"||g==="--sessiondir"){let h=t[++p];if(h===void 0||h.startsWith("--"))return`missing value for ${g}`;g==="--provider"?o=h:g==="--model"?i=h:a=h;continue}if(g==="--force"||g.startsWith("--force="))return"unknown option --force (a dead holder auto-reclaims; for a live holder use lmctl prompt)";if(g==="--json"){l=!0;continue}if(g==="--verbose"){c=!0;continue}if(g.startsWith("--"))return`unknown flag: ${g}`;e.push(g)}if(o===void 0&&(e=oH(e)),o!==void 0){if(e.length>(s===void 0?1:0))return"--provider fresh mode cannot be combined with a teamfile or alias; provide one prompt or --prompt-file";if(i===void 0)return"--model is required with --provider"}else if(i!==void 0||a!==void 0)return"--model and --sessiondir require --provider";if(o!==void 0){let p={prompt:s===void 0?e[0]??"":"",permissionMode:n};return s!==void 0&&(p.promptFile=s),l&&(p.json=!0),c&&(p.verbose=!0),p.provider=o,p.model=i,a!==void 0&&(p.sessiondir=a),p}let d,u,f="";if(s!==void 0){if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],u=e[1];else return"--prompt-file is mutually exclusive with a positional prompt; pass one or the other";f=""}else if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],xe(d)?u=e[1]:f=e[1];else if(e.length===3)d=e[0],u=e[1],f=e[2];else return`too many positionals (${e.length}); expected at most <teamfile> <alias> <prompt>`;let m={prompt:f,permissionMode:n};return d!==void 0&&(m.target=d),u!==void 0&&(m.alias=u),r!==void 0&&(m.rootFlag=r),s!==void 0&&(m.promptFile=s),l&&(m.json=l),c&&(m.verbose=c),o!==void 0&&(m.provider=o),i!==void 0&&(m.model=i),a!==void 0&&(m.sessiondir=a),m}async function Sh(t,e,n=process.stdin){let r;try{r=t==="-"?await dH(n):ZW(t,"utf8")}catch(o){let i=o instanceof Error?o.message:String(o);return{error:`--prompt-file ${t}: ${i}`}}let s=r.endsWith(`\r
2109
+ `),p.status==="stalled"?1:0)}return 2}function JI(t){return`${t}'s turn has finished and exited; resubmit \`lmctl prompt\` to continue (no persistent session is left running)`}function cH(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 Ib("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=oH(e)),o!==void 0){if(e.length>(s===void 0?1:0))return"--provider fresh mode cannot be combined with a teamfile or alias; provide one prompt or --prompt-file";if(i===void 0)return"--model is required with --provider"}else if(i!==void 0||a!==void 0)return"--model and --sessiondir require --provider";if(o!==void 0){let p={prompt:s===void 0?e[0]??"":"",permissionMode:n};return s!==void 0&&(p.promptFile=s),l&&(p.json=!0),c&&(p.verbose=!0),p.provider=o,p.model=i,a!==void 0&&(p.sessiondir=a),p}let d,u,f="";if(s!==void 0){if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],u=e[1];else return"--prompt-file is mutually exclusive with a positional prompt; pass one or the other";f=""}else if(e.length!==0)if(e.length===1)d=e[0];else if(e.length===2)d=e[0],xe(d)?u=e[1]:f=e[1];else if(e.length===3)d=e[0],u=e[1],f=e[2];else return`too many positionals (${e.length}); expected at most <teamfile> <alias> <prompt>`;let m={prompt:f,permissionMode:n};return d!==void 0&&(m.target=d),u!==void 0&&(m.alias=u),r!==void 0&&(m.rootFlag=r),s!==void 0&&(m.promptFile=s),l&&(m.json=l),c&&(m.verbose=c),o!==void 0&&(m.provider=o),i!==void 0&&(m.model=i),a!==void 0&&(m.sessiondir=a),m}async function Sh(t,e,n=process.stdin){let r;try{r=t==="-"?await dH(n):ZW(t,"utf8")}catch(o){let i=o instanceof Error?o.message:String(o);return{error:`--prompt-file ${t}: ${i}`}}let s=r.endsWith(`\r
2110
2110
  `)?r.slice(0,-2):r.endsWith(`
2111
2111
  `)?r.slice(0,-1):r;return s.length===0?{error:`--prompt-file ${t}: file is empty; a prompt is required`}:s}async function dH(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 uH(t,e,n,r=!1){if(n.kind!=="tool_use"&&n.kind!=="tool_result"&&n.kind!=="api_retry")return;let s=n.kind==="tool_use"?`[${e}] tool_use ${n.tool??"tool"}${n.summary?`: ${n.summary}`:""}`:n.kind==="tool_result"?`[${e}] tool_result${n.status?` ${n.status}`:""}${n.summary?`: ${n.summary}`:""}`:`[${e}] api_retry${n.summary?`: ${n.summary}`:""}`;U({event:"chat_progress",alias:e,progress_kind:n.kind,line:s}),r&&t.stderr.write(`${s}
2112
2112
  `)}function fH(t,e,n=!1){e.kind==="delta"?t.stdout.write(e.chunk):e.kind==="progress"?uH(t,e.alias,e.event,n):t.stderr.write(e.message)}var sH,VI,rd,sd=x(()=>{"use strict";Oc();nt();Be();nt();le();nt();Op();Wi();re();le();sH={name:"prompt",allowsBareTeamfile:!1,supportsRaw:!1},VI=`usage: lmctl prompt <teamfile> <alias> "<prompt>" [--json] [--verbose]
@@ -2116,11 +2116,11 @@ ${VI}
2116
2116
  lmctl prompt --provider <name> --model <model> --prompt-file <file-path> [--sessiondir <dir>] [--json] [--verbose]
2117
2117
 
2118
2118
  --json Emit JSON results.
2119
- --verbose Show provider progress on stderr.`;rd="LMCTL_CHAT_DAEMONIZED"});import{spawn as mH}from"node:child_process";import{accessSync as zI,closeSync as pH,constants as QI,lstatSync as hH,openSync as _H,readFileSync as gH,readSync as yH,realpathSync as EH,statSync as ZI}from"node:fs";import{basename as kh,dirname as ds,delimiter as TH,resolve as od,join as _o}from"node:path";import{fileURLToPath as wH}from"node:url";import{constants as KI}from"node:os";import*as ek from"node:path";function Ah(t){if(zI(t,QI.X_OK),!ZI(t).isFile())throw Error("not a file");return EH(t)}function tk(t){try{let e=_H(t,"r");try{let n=Buffer.alloc(2048);return n.subarray(0,yH(e,n,0,n.length,0)).toString("utf8").match(/lmscript-shim-protocol\s+(\d+)/)?.[1]}finally{pH(e)}}catch{return}}function YI(t){return tk(t)===SH.split(" ").at(-1)}function bH(t,e=od(ds(wH(import.meta.url)),"../../bin"),n=process.cwd(),r=process.argv[1]){if(t.LMSCRIPT_BIN){let g=od(n,t.LMSCRIPT_BIN),h;try{h=Ah(g)}catch{throw Error(`LMSCRIPT_BIN is set to ${g}, which is not an executable file; correct it, or unset it to use the sibling binary`)}let _=tk(h);if(_!==void 0&&_!=="2")throw Error(`LMSCRIPT_BIN ${g} declares protocol ${_}; this shim requires protocol 2`);return h}let s=[],o=ds(e),i=ds(o),a;try{let g=JSON.parse(gH(_o(i,"package.json"),"utf8"));a=Array.isArray(g.workspaces)?g.workspaces:g.workspaces?.packages}catch{}let l=g=>Array.isArray(a)&&a.some(h=>typeof h=="string"&&vH(g,h.replace(/^\.\//,"").replace(/\/$/,""))),c=l(kh(o))&&l("lmscript"),d=g=>{try{return hH(g),!0}catch(h){if(h.code==="ENOENT")return!1;throw h}},u=g=>{let h;try{h=Ah(g)}catch{throw Error(`Standalone lmscript sibling ${g} is not an executable file; repair the sibling instead of falling through to another copy`)}if(!YI(h))throw Error(`Standalone lmscript sibling ${g} is not a compatible lmscript (requires protocol 2)`);return h};if(c){let g=_o(i,"lmscript","bin","lmscript"),h=`npm run build --prefix ${i}`;if(!d(g))throw Error(`Standalone lmscript workspace sibling ${g} is missing; run ${h}`);let _;try{_=u(g)}catch(y){throw Error(`${y instanceof Error?y.message:String(y)}; run ${h}`)}let E=_o(i,"lmscript","dist","runner.js");try{if(zI(E,QI.R_OK),!ZI(E).isFile())throw Error("not a file")}catch{throw Error(`Standalone lmscript sibling found but ${E} is missing or not a readable file; run ${h}`)}return _}let f=ds(o),m=kh(f)==="node_modules"?f:kh(ds(f))==="node_modules"?ds(f):void 0,p=[_o(e,"lmscript"),...m?[_o(m,"lmscript","bin","lmscript")]:[],...r?[_o(ds(od(n,r)),"lmscript")]:[]];for(let g of new Set(p)){if(d(g))return u(g);s.push(g)}for(let g of new Set((t.PATH??"").split(TH).filter(Boolean).map(h=>od(n,h,"lmscript")))){let h;try{h=Ah(g)}catch{s.push(g);continue}if(YI(h))return h;s.push(g+" (not a compatible lmscript)")}throw Error("Standalone lmscript not found; set LMSCRIPT_BIN or install the sibling binary. Tried: "+s.join(", "))}async function us(t,e){let n={...process.env,...e.env},r=e.cwd??process.cwd(),s;try{s=bH(n,void 0,r)}catch(o){return e.stderr.write("error: "+String(o.message)+`
2120
- `),1}return new Promise(o=>{let i=!e.stdin||e.stdin===process.stdin,a=e.stdout===process.stdout,l=e.stderr===process.stderr,c=mH(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=_=>{d||(d=!0,process.removeListener("SIGINT",m),process.removeListener("SIGTERM",p),process.removeListener("SIGHUP",g),process.removeListener("SIGWINCH",h),o(_))},f=_=>{try{c.pid&&process.platform!=="win32"?process.kill(-c.pid,_):c.kill(_)}catch(E){E.code!=="ESRCH"&&e.stderr.write("error: signal forwarding failed: "+String(E)+`
2121
- `)}},m=()=>f("SIGINT"),p=()=>f("SIGTERM"),g=()=>f("SIGHUP");process.on("SIGINT",m),process.on("SIGTERM",p),process.on("SIGHUP",g);let h=()=>f("SIGWINCH");process.on("SIGWINCH",h),c.stdout?.on("data",_=>e.stdout.write(String(_))),c.stderr?.on("data",_=>e.stderr.write(String(_))),i||(e.stdin.pipe(c.stdin),c.stdin.on("error",E=>{E.code!=="EPIPE"&&e.stderr.write("error: child stdin: "+E.message+`
2122
- `)})),c.once("error",_=>{e.stderr.write(`error: could not start ${s}: ${_.message}
2123
- `),u(1)}),c.once("close",(_,E)=>u(_??(E&&KI.signals[E]?128+KI.signals[E]:1)))})}var vH,SH,id=x(()=>{"use strict";vH=ek.matchesGlob,SH="lmscript-shim-protocol 2"});var rk={};me(rk,{runScript:()=>Nh});async function Nh(t,e={stdout:process.stdout,stderr:process.stderr}){if(il(e),!t.length)return D(e,nk);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await us(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2119
+ --verbose Show provider progress on stderr.`;rd="LMCTL_CHAT_DAEMONIZED"});import{spawn as mH}from"node:child_process";import{accessSync as zI,closeSync as pH,constants as QI,lstatSync as hH,openSync as _H,readFileSync as gH,readSync as yH,realpathSync as EH,statSync as ZI}from"node:fs";import{basename as kh,dirname as ds,delimiter as TH,resolve as od,join as _o}from"node:path";import{fileURLToPath as wH}from"node:url";import{constants as KI}from"node:os";import*as ek from"node:path";function Ah(t){if(zI(t,QI.X_OK),!ZI(t).isFile())throw Error("not a file");return EH(t)}function tk(t){try{let e=_H(t,"r");try{let n=Buffer.alloc(2048);return n.subarray(0,yH(e,n,0,n.length,0)).toString("utf8").match(/lmscript-shim-protocol\s+(\d+)/)?.[1]}finally{pH(e)}}catch{return}}function YI(t){return tk(t)===SH.split(" ").at(-1)}function bH(t,e=od(ds(wH(import.meta.url)),"../../bin"),n=process.cwd(),r=process.argv[1]){if(t.LMSCRIPT_BIN){let _=od(n,t.LMSCRIPT_BIN),h;try{h=Ah(_)}catch{throw Error(`LMSCRIPT_BIN is set to ${_}, which is not an executable file; correct it, or unset it to use the sibling binary`)}let g=tk(h);if(g!==void 0&&g!=="2")throw Error(`LMSCRIPT_BIN ${_} declares protocol ${g}; this shim requires protocol 2`);return h}let s=[],o=ds(e),i=ds(o),a;try{let _=JSON.parse(gH(_o(i,"package.json"),"utf8"));a=Array.isArray(_.workspaces)?_.workspaces:_.workspaces?.packages}catch{}let l=_=>Array.isArray(a)&&a.some(h=>typeof h=="string"&&vH(_,h.replace(/^\.\//,"").replace(/\/$/,""))),c=l(kh(o))&&l("lmscript"),d=_=>{try{return hH(_),!0}catch(h){if(h.code==="ENOENT")return!1;throw h}},u=_=>{let h;try{h=Ah(_)}catch{throw Error(`Standalone lmscript sibling ${_} is not an executable file; repair the sibling instead of falling through to another copy`)}if(!YI(h))throw Error(`Standalone lmscript sibling ${_} is not a compatible lmscript (requires protocol 2)`);return h};if(c){let _=_o(i,"lmscript","bin","lmscript"),h=`npm run build --prefix ${i}`;if(!d(_))throw Error(`Standalone lmscript workspace sibling ${_} is missing; run ${h}`);let g;try{g=u(_)}catch(y){throw Error(`${y instanceof Error?y.message:String(y)}; run ${h}`)}let E=_o(i,"lmscript","dist","runner.js");try{if(zI(E,QI.R_OK),!ZI(E).isFile())throw Error("not a file")}catch{throw Error(`Standalone lmscript sibling found but ${E} is missing or not a readable file; run ${h}`)}return g}let f=ds(o),m=kh(f)==="node_modules"?f:kh(ds(f))==="node_modules"?ds(f):void 0,p=[_o(e,"lmscript"),...m?[_o(m,"lmscript","bin","lmscript")]:[],...r?[_o(ds(od(n,r)),"lmscript")]:[]];for(let _ of new Set(p)){if(d(_))return u(_);s.push(_)}for(let _ of new Set((t.PATH??"").split(TH).filter(Boolean).map(h=>od(n,h,"lmscript")))){let h;try{h=Ah(_)}catch{s.push(_);continue}if(YI(h))return h;s.push(_+" (not a compatible lmscript)")}throw Error("Standalone lmscript not found; set LMSCRIPT_BIN or install the sibling binary. Tried: "+s.join(", "))}async function us(t,e){let n={...process.env,...e.env},r=e.cwd??process.cwd(),s;try{s=bH(n,void 0,r)}catch(o){return e.stderr.write("error: "+String(o.message)+`
2120
+ `),1}return new Promise(o=>{let i=!e.stdin||e.stdin===process.stdin,a=e.stdout===process.stdout,l=e.stderr===process.stderr,c=mH(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)+`
2121
+ `)}},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+`
2122
+ `)})),c.once("error",g=>{e.stderr.write(`error: could not start ${s}: ${g.message}
2123
+ `),u(1)}),c.once("close",(g,E)=>u(g??(E&&KI.signals[E]?128+KI.signals[E]:1)))})}var vH,SH,id=x(()=>{"use strict";vH=ek.matchesGlob,SH="lmscript-shim-protocol 2"});var rk={};me(rk,{runScript:()=>Nh});async function Nh(t,e={stdout:process.stdout,stderr:process.stderr}){if(il(e),!t.length)return D(e,nk);if(["help","--help","-h"].includes(t[0])){let n="",r=!0,o=await us(t,{...e,stdout:{write:i=>{if(!r){e.stdout.write(i);return}n+=i;let a=n.indexOf(`
2124
2124
  `);a<0||(e.stdout.write(n.slice(0,a+1).startsWith("Usage: lmscript ")?"Usage: "+nk.slice(7)+`
2125
2125
  `:n.slice(0,a+1)),e.stdout.write(n.slice(a+1)),n="",r=!1)}}});return n&&e.stdout.write(n),o}return us(t,e)}var nk,Rh=x(()=>{"use strict";id();le();nk="usage: lmctl script [--check|--dry-run|--lint] [--no-preflight] [--dry-loop-limit N] [--dryrun-timeout MS] [--plan-format text|json] [--resumepoint PATH] [--pref FILE] [--module SPEC=FILE]... <file>|-| -e <code> [args...]"});import{execFileSync as Lh}from"node:child_process";import{dirname as sk,resolve as IH}from"node:path";function ok(t){return(0,xh.formatCount)(t)}async function Ch(t,e){return W(t,n=>{let r=n.query(`SELECT config_warnings FROM tracked_invocation
2126
2126
  WHERE target_teamfile = ? AND target_alias = ? AND config_warnings IS NOT NULL
@@ -2128,11 +2128,11 @@ ${VI}
2128
2128
  `),e.stdout.write(`Context is the last completed turn; unavailable values are n/a.
2129
2129
  `)}function ck(t){return t.running==="idle"&&t.ageMs!==null&&t.ageMs>=7*864e5&&t.context!==null&&t.context>=1e5}async function dk(t,e,n,r){return W(r,async s=>{if(Qt(s,t,e).busy)throw new Error(`${e} is busy; its session was not replaced.`);let o=tr(s,{receiver_teamfile:t,receiver_alias:e,sender_teamfile:t,sender_alias:e,ttlMs:8*60*60*1e3});if(!o.acquired)throw new Error(`${e} is busy; its session was not replaced.`);try{let i=Ie(t).members.find(a=>a.alias.toLowerCase()===e.toLowerCase());if(!i||i.session!==n)throw new Error("Session binding changed; refresh cancelled.");if((await cd(i.provider,n)).running==="busy")throw new Error(`${e} is running; its session was not replaced.`);return await uo(t,{...r,dal:s},{replaceSession:{alias:e,sessionid:n}})}finally{s.releaseAgentInflight(o.lease,o.leaseId)}})}var Ir,uk=x(()=>{"use strict";Be();un();Ph();le();Ir=Ut(xt(),1);Ht();hn()});var Fh={};me(Fh,{runInferred:()=>DH,runInferredBatch:()=>_k,sendInferredPrompt:()=>yo});import{existsSync as pk,mkdtempSync as NH,readFileSync as RH,rmSync as LH,writeFileSync as xH}from"node:fs";import{tmpdir as CH}from"node:os";import{resolve as ud,join as fk}from"node:path";async function yo(t,e,n,r={}){let s=NH(fk(CH(),"lmctl-intent-prompt-")),o=fk(s,"prompt.txt");try{return xH(o,`${e}\r
2130
2130
  `,{encoding:"utf8",mode:384}),await(r.chat??bh)([...t,"--prompt-file",o],n)}finally{LH(s,{recursive:!0,force:!0})}}async function mk(t,e,n,r,s){let o=await(s.rows??Uh)(t,r,e);dd(o,r);for(let i of o)if(!(!i.file||!i.alias||!i.sessionid||!ck(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.
2131
- `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??dk)(i.file,i.alias,i.sessionid,r);if(a)return a;dd(await(s.rows??Uh)(t,r,e),r)}return 0}async function hk(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 OH(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=Mc(a,ho),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 g=await(s.models??io)(p).catch(()=>[]),h;if(i>0){let _=t.slice(i+1);if(!_)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:_})}else{if(g.length?h=await n.choose("Model:",g):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(Wn.map(async h=>({provider:h,names:await(s.models??io)(h).catch(()=>[])}))),g=p.flatMap(({provider:h,names:_})=>_.filter(E=>E.toLowerCase()===t.toLowerCase()).map(E=>({provider:h,model:E})));if(c.push(...g.length?g:p.flatMap(({provider:h,names:_})=>Mc(t,_).map(E=>({provider:h,model:E})))),!c.length)return null}if(o!==void 0){let p=await hk(o,n);if(p===null)return 0;e=p}if(e===void 0){let p=[...new Set(c.map(g=>g.provider))].map(g=>({provider:g,models:c.filter(h=>h.provider===g).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 Th(u.provider,u.model,r.cwd??process.cwd(),n),m=await ia(f.file,n,r,s,f.alias);return m||yo([f.file,f.alias],e,r,s)}async function _k(t,e,n,r={}){let s=new Fn(n,r.ask);try{let o=ud(n.cwd??process.cwd(),t);if(!pk(o))throw new Error(`Batch file not found: ${o}`);if(!RH(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 Eh(s,n.cwd??process.cwd()),a=await ia(i,s,n,r,e[1]);if(a)return a;let l=await aa(i,e[1],s);return(r.batch??Wh)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2132
- `),2}finally{s.close()}}async function DH(t,e,n={}){let r=new Fn(e,n.ask);try{let s=$b(t);if(!s)return null;if(s.kind==="script")return await Nh([ud(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),_k(s.file,s.rest,e,n);if(s.kind==="models")return await OH(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await hk(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(pk(d)&&(u!==void 0||s.prompt!==void 0)){let m=Ie(d);if(!m.parseErrors.length&&m.members.length){u=await aa(d,u,r);let p=m.members.find(g=>g.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await yo([d,u],s.prompt,e,n)}}let f=await ia(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await aa(d,u,r):void 0,s.prompt!==void 0?await yo([d,u],s.prompt,e,n):await mk(d,u,r,e,n))}let o=await(n.registrations??lk)(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 yo([u.file,u.member.alias],s.prompt,e,n):await mk(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??Er)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",ho),l=await(n.summary??cd)(a,s.id);dd([l],e);let c=await wh(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 yo([c.file,c.alias],s.prompt,e,n)}return 0}catch(s){return e.stderr.write(`error: ${s instanceof Error?s.message:String(s)}
2131
+ `),n.interactive&&await n.confirm(`Replace ${i.file}:${i.alias}'s session ${i.sessionid}?`))){let a=await(s.refresh??dk)(i.file,i.alias,i.sessionid,r);if(a)return a;dd(await(s.rows??Uh)(t,r,e),r)}return 0}async function hk(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 OH(t,e,n,r,s,o){let i=t.indexOf("/"),a=i>0?t.slice(0,i):t,l=Mc(a,ho),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??io)(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(Wn.map(async h=>({provider:h,names:await(s.models??io)(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 hk(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 Th(u.provider,u.model,r.cwd??process.cwd(),n),m=await ia(f.file,n,r,s,f.alias);return m||yo([f.file,f.alias],e,r,s)}async function _k(t,e,n,r={}){let s=new Fn(n,r.ask);try{let o=ud(n.cwd??process.cwd(),t);if(!pk(o))throw new Error(`Batch file not found: ${o}`);if(!RH(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 Eh(s,n.cwd??process.cwd()),a=await ia(i,s,n,r,e[1]);if(a)return a;let l=await aa(i,e[1],s);return(r.batch??Wh)([i,l,o],n)}catch(o){return n.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2132
+ `),2}finally{s.close()}}async function DH(t,e,n={}){let r=new Fn(e,n.ask);try{let s=$b(t);if(!s)return null;if(s.kind==="script")return await Nh([ud(e.cwd??process.cwd(),s.file),...s.rest],e);if(s.kind==="batch")return r.close(),_k(s.file,s.rest,e,n);if(s.kind==="models")return await OH(s.query,s.prompt,r,e,n,s.pendingPrompt);if(s.pendingPrompt!==void 0){let d=await hk(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(pk(d)&&(u!==void 0||s.prompt!==void 0)){let m=Ie(d);if(!m.parseErrors.length&&m.members.length){u=await aa(d,u,r);let p=m.members.find(_=>_.alias===u);if(s.prompt!==void 0&&(p.session||p.teamfile))return await yo([d,u],s.prompt,e,n)}}let f=await ia(d,r,e,n,u);return f||(u=u!==void 0||s.prompt!==void 0?await aa(d,u,r):void 0,s.prompt!==void 0?await yo([d,u],s.prompt,e,n):await mk(d,u,r,e,n))}let o=await(n.registrations??lk)(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 yo([u.file,u.member.alias],s.prompt,e,n):await mk(u.file,u.member.alias,r,e,n)}let i=await(n.findProviders??Er)(s.id),a=i.length?await r.choose("Session provider:",i):await r.choose("Session provider:",ho),l=await(n.summary??cd)(a,s.id);dd([l],e);let c=await wh(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 yo([c.file,c.alias],s.prompt,e,n)}return 0}catch(s){return e.stderr.write(`error: ${s instanceof Error?s.message:String(s)}
2133
2133
  `),2}finally{r.close()}}var jh=x(()=>{"use strict";Be();Oc();Pb();jc();sd();Rh();Hh();un();nd();uk()});var Ek={};me(Ek,{runBatch:()=>Wh});import{readFileSync as MH}from"node:fs";async function Wh(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(gk),0;let n=ae(t,[],["--legacy","--single"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length===1&&/\.lmb$/i.test(n.positionals[0])&&Object.keys(n.flags).length===0){let{runInferredBatch:E}=await Promise.resolve().then(()=>(jh(),Fh));return E(n.positionals[0],[],e)}if(n.positionals.length!==3)return D(e,gk.trimEnd());let[r,s,o]=n.positionals,i=n.flags["--legacy"]===!0,a=n.flags["--single"]===!0,l,c;try{let E=MH(o,"utf8").replace(/^\uFEFF/u,"").replace(/\r\n?/gu,`
2134
- `);if(l=a?[E.trim()].filter(y=>y.length>0):E.split(/\n\s*\n/u).map(y=>y.trim()).filter(Boolean),l.length===0)return D(e,`batch: ${o}: no prompts found`);c=Xe(r,s,e.dal)}catch(E){return D(e,`batch: ${E instanceof Error?E.message:String(E)}`)}let d=!i&&l.length>1&&await UH(c),u={...e.env??process.env},f=await FH(e,{member:c,batchfile:o,promptCount:l.length,parentInvocationId:Os(u.LMCTL_INVOCATION_ID)}),m={status:"error",error:"batch exited without a terminal outcome"},p=E=>{m=E},g=E=>{f!==null&&(WH(e,f,{status:"cancelled",signal:E,error:`batch interrupted by ${E}`}),process.exit(E==="SIGINT"?130:143))},h=()=>g("SIGINT"),_=()=>g("SIGTERM");f!==null&&(u.LMCTL_INVOCATION_ID=String(f),process.once("SIGINT",h),process.once("SIGTERM",_)),e.stderr.write(`batch ${Vr()}: starting ${l.length} prompt${l.length===1?"":"s"} -> ${c.alias} (teamfile=${r} input=${o})
2135
- `);try{return d?await $H(e,{member:c,prompts:l,env:u,setRootFinish:p,teamfile:r,batchfile:o}):await Bh(e,{member:c,prompts:l,env:u,setRootFinish:p,teamfile:r,batchfile:o})}finally{f!==null&&(process.removeListener("SIGINT",h),process.removeListener("SIGTERM",_),await jH(e,f,m))}}async function Bh(t,e){let{member:n,prompts:r,env:s}=e;for(let[o,i]of r.entries()){t.stderr.write(`
2134
+ `);if(l=a?[E.trim()].filter(y=>y.length>0):E.split(/\n\s*\n/u).map(y=>y.trim()).filter(Boolean),l.length===0)return D(e,`batch: ${o}: no prompts found`);c=Xe(r,s,e.dal)}catch(E){return D(e,`batch: ${E instanceof Error?E.message:String(E)}`)}let d=!i&&l.length>1&&await UH(c),u={...e.env??process.env},f=await FH(e,{member:c,batchfile:o,promptCount:l.length,parentInvocationId:Os(u.LMCTL_INVOCATION_ID)}),m={status:"error",error:"batch exited without a terminal outcome"},p=E=>{m=E},_=E=>{f!==null&&(WH(e,f,{status:"cancelled",signal:E,error:`batch interrupted by ${E}`}),process.exit(E==="SIGINT"?130:143))},h=()=>_("SIGINT"),g=()=>_("SIGTERM");f!==null&&(u.LMCTL_INVOCATION_ID=String(f),process.once("SIGINT",h),process.once("SIGTERM",g)),e.stderr.write(`batch ${Vr()}: starting ${l.length} prompt${l.length===1?"":"s"} -> ${c.alias} (teamfile=${r} input=${o})
2135
+ `);try{return d?await $H(e,{member:c,prompts:l,env:u,setRootFinish:p,teamfile:r,batchfile:o}):await Bh(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 jH(e,f,m))}}async function Bh(t,e){let{member:n,prompts:r,env:s}=e;for(let[o,i]of r.entries()){t.stderr.write(`
2136
2136
  batch ${Vr()}: prompt ${o+1}/${r.length} -> ${n.alias}
2137
2137
  ${i}${i.endsWith(`
2138
2138
  `)?"":`
@@ -2176,9 +2176,9 @@ lease) -- the pre-bundle behavior -- as an opt-out while bundle is new.
2176
2176
  --single sends the WHOLE file as ONE prompt: blank lines are content, not
2177
2177
  separators. A single prompt (one paragraph, or --single) never bundles and
2178
2178
  never takes a batch-level lease -- one plain turn.
2179
- `});import{mkdtempSync as HH,readFileSync as BH,rmSync as XH,writeFileSync as qH}from"node:fs";import{tmpdir as GH}from"node:os";import{spawnSync as VH}from"node:child_process";import{basename as fd,extname as Xh,join as qh,resolve as Gh}from"node:path";import*as Tk from"node:readline";function JH(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";VH(n,[e],{stdio:"inherit"})}}async function wk(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=Tk.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=Gh(n,s.output),f=fd(u,Xh(u));else{let _=Gh(n,t.directory??"."),E=await c(`Directory [${_}]: `),y=E===""?_:Gh(n,E),T=`${fd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),S=w===""?T:w,b=Xh(S)?S:`${S}.lmctl`;u=qh(y,b),f=fd(b,Xh(b))}let m;if(s.members!==void 0&&s.members.length>0)m=s.members.map(_=>({..._,model:_.model??s.model}));else{let _=wr(Dt(e.env??process.env,t.initConfigPath)),E=[...new Set(_===null?[]:Object.values(_).map(I=>I.provider))];e.stdout.write(`Providers from lmctl init: ${E.length>0?E.join(", "):"(none saved; run lmctl init to save suggestions)"}
2179
+ `});import{mkdtempSync as HH,readFileSync as BH,rmSync as XH,writeFileSync as qH}from"node:fs";import{tmpdir as GH}from"node:os";import{spawnSync as VH}from"node:child_process";import{basename as fd,extname as Xh,join as qh,resolve as Gh}from"node:path";import*as Tk from"node:readline";function JH(t){return e=>{let n=t.EDITOR??t.VISUAL??"vi";VH(n,[e],{stdio:"inherit"})}}async function wk(t){let{io:e,cwd:n,env:r=process.env}=t,s=t.initial??{},o=Tk.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=Gh(n,s.output),f=fd(u,Xh(u));else{let g=Gh(n,t.directory??"."),E=await c(`Directory [${g}]: `),y=E===""?g:Gh(n,E),T=`${fd(y)}.lmctl`,w=await c(`Teamfile name [${T}]: `),S=w===""?T:w,b=Xh(S)?S:`${S}.lmctl`;u=qh(y,b),f=fd(b,Xh(b))}let m;if(s.members!==void 0&&s.members.length>0)m=s.members.map(g=>({...g,model:g.model??s.model}));else{let g=wr(Dt(e.env??process.env,t.initConfigPath)),E=[...new Set(g===null?[]:Object.values(g).map(I=>I.provider))];e.stdout.write(`Providers from lmctl init: ${E.length>0?E.join(", "):"(none saved; run lmctl init to save suggestions)"}
2180
2180
  `),e.stdout.write(`You can type another provider.
2181
- `);let y=s.provider??(E.length===1?E[0]:void 0),T=y;for(;T===void 0;){let I=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),L=I===""?y:I;if(L===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2181
+ `);let y=s.provider??g?.provider1.provider,T=s.provider??(E.length===1?E[0]:void 0);for(;T===void 0;){let I=await c(`Default provider${y!==void 0?` [${y}]`:""}: `),L=I===""?y:I;if(L===void 0){if(l)return e.stderr.write(`error: stdin closed (EOF) at the provider prompt and no default is available
2182
2182
  `),d(),null;continue}if(bt({alias:"Probe",provider:L})!==void 0){e.stdout.write(`unknown provider "${L}" (known: ${Object.keys(jn).join(", ")})
2183
2183
  `),y=void 0;continue}T=L}let w=s.pattern??"3",S;for(;S===void 0;){e.stdout.write(`Patterns: 1) Lead 2) Lead+Reviewer 3) Lead+Coder+Reviewer c) custom
2184
2184
  `);let I=(await c(`Pattern [${w}]: `)).toLowerCase(),L=I===""?w:I;if(L==="c"||L==="custom"){S=[];let O=new Set;for(e.stdout.write(`Enter members; blank alias finishes. The first member must be Lead.
@@ -2195,26 +2195,26 @@ never takes a batch-level lease -- one plain turn.
2195
2195
  `),O.length===0&&e.stdout.write(` No model suggestions available.
2196
2196
  `);for(let R of O)e.stdout.write(` ${R}
2197
2197
  `);e.stdout.write(`Type a model name, including one not listed, or leave blank to ${s.model!==void 0?"keep the default":"omit"}.
2198
- `);let v=s.model,A=await c(`Model for ${I}${v!==void 0?` [${v}]`:" (blank to omit)"}: `),N=A===""?v:A;m.push({alias:I,provider:L,...N!==void 0?{model:N}:{}})}}let p=Sr({teamName:f,members:m}),g=t.editFile??JH(r),h=s.seed??!0;for(;;){e.stdout.write(`
2198
+ `);let v=s.model,A=await c(`Model for ${I}${v!==void 0?` [${v}]`:" (blank to omit)"}: `),N=A===""?v:A;m.push({alias:I,provider:L,...N!==void 0?{model:N}:{}})}}let p=Sr({teamName:f,members:m}),_=t.editFile??JH(r),h=s.seed??!0;for(;;){e.stdout.write(`
2199
2199
  --- ${u} ---
2200
2200
  ${p}---
2201
- `);let _=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(_==="e"||_==="edit"){let y=HH(qh(GH(),"lmctl-plan-edit-"));try{let T=qh(y,fd(u));qH(T,p,"utf8"),g(T),p=BH(T,"utf8")}finally{XH(y,{recursive:!0,force:!0})}continue}if(_==="q"||_==="quit"||_==="abort")return d(),null;let E=_===""?h:_!=="n"&&_!=="no";return d(),{destPath:u,text:p,seed:E}}}catch(u){throw d(),u}}function vk(t){return zc(t)}var Sk=x(()=>{"use strict";oo();as();Bp();hn();Qc()});var xk={};me(xk,{readPlanSource:()=>kr,runPlan:()=>nB});import{existsSync as kk,mkdirSync as KH,readdirSync as YH,readFileSync as bk,statSync as zH,writeFileSync as QH}from"node:fs";import{basename as Ak,dirname as ZH,extname as eB,join as Nk,resolve as Jh}from"node:path";async function nB(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(tB),0;let r=[],s=[];for(let k=0;k<t.length;k+=1){let v=t[k];if(v==="--member"){let A=t[k+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2201
+ `);let g=(await c(`Write and seed? [${h?"Y/n":"y/N"}/e(dit)]: `)).toLowerCase();if(g==="e"||g==="edit"){let y=HH(qh(GH(),"lmctl-plan-edit-"));try{let T=qh(y,fd(u));qH(T,p,"utf8"),_(T),p=BH(T,"utf8")}finally{XH(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 vk(t){return zc(t)}var Sk=x(()=>{"use strict";oo();as();Bp();hn();Qc()});var xk={};me(xk,{readPlanSource:()=>kr,runPlan:()=>nB});import{existsSync as kk,mkdirSync as KH,readdirSync as YH,readFileSync as bk,statSync as zH,writeFileSync as QH}from"node:fs";import{basename as Ak,dirname as ZH,extname as eB,join as Nk,resolve as Jh}from"node:path";async function nB(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(tB),0;let r=[],s=[];for(let k=0;k<t.length;k+=1){let v=t[k];if(v==="--member"){let A=t[k+1];if(A===void 0||A.startsWith("--"))return e.stderr.write(`error: missing value for --member
2202
2202
  `),2;r.push(A),k+=1;continue}s.push(v)}let o=ae(s,["--pattern","--provider","--model","--from","--output"],["--json","--stdout","--force","--seed","--no-seed","--wizard","--non-interactive","--no-interactive"]);if(o.error!==void 0)return e.stderr.write(`error: ${o.error}
2203
2203
  `),e.stderr.write(`usage: lmctl plan [directory] [options]
2204
2204
  `),2;if(o.positionals.length>1)return e.stderr.write(`usage: lmctl plan [directory] [options]
2205
- `),2;let i=e.cwd??process.cwd(),a=o.positionals[0],l=V(o,"--pattern"),c=V(o,"--provider"),d=V(o,"--model"),u=V(o,"--from"),f=V(o,"--output"),m=z(o,"--json"),p=z(o,"--stdout"),g=z(o,"--force"),h=z(o,"--seed"),_=z(o,"--no-seed"),E=z(o,"--wizard"),y=Rn(e)||m||z(o,"--non-interactive")||z(o,"--no-interactive");if(m&&p)return e.stderr.write(`error: --json and --stdout are mutually exclusive
2205
+ `),2;let i=e.cwd??process.cwd(),a=o.positionals[0],l=V(o,"--pattern"),c=V(o,"--provider"),d=V(o,"--model"),u=V(o,"--from"),f=V(o,"--output"),m=z(o,"--json"),p=z(o,"--stdout"),_=z(o,"--force"),h=z(o,"--seed"),g=z(o,"--no-seed"),E=z(o,"--wizard"),y=Rn(e)||m||z(o,"--non-interactive")||z(o,"--no-interactive");if(m&&p)return e.stderr.write(`error: --json and --stdout are mutually exclusive
2206
2206
  `),2;if(p&&h)return e.stderr.write(`error: --seed requires a written teamfile; it cannot be combined with --stdout
2207
- `),2;if(h&&_)return e.stderr.write(`error: --seed and --no-seed are mutually exclusive
2207
+ `),2;if(h&&g)return e.stderr.write(`error: --seed and --no-seed are mutually exclusive
2208
2208
  `),2;if(E&&p)return e.stderr.write(`error: --wizard cannot be combined with --stdout
2209
2209
  `),2;if(E&&m)return e.stderr.write(`error: --wizard cannot be combined with --json
2210
2210
  `),2;if(E&&y)return e.stderr.write(`error: --wizard requires interactive mode
2211
2211
  `),2;let T=l!==void 0||c!==void 0||d!==void 0||u!==void 0||r.length>0,w=e.stdin??process.stdin,S=n.stdinIsTTY??(e.stdin===void 0?process.stdin.isTTY===!0:w.isTTY===!0),b=!T||u===void 0&&r.length===0&&(l===void 0||c===void 0),I=E||!y&&b&&!p&&!m&&S,L;if(I){if(u!==void 0)return e.stderr.write(`error: --from cannot be combined with --wizard
2212
2212
  `),2;if(l!==void 0&&r.length>0)return e.stderr.write(`error: --pattern and --member are mutually exclusive
2213
2213
  `),2;let k=Lk(r,d,v=>{e.stderr.write(`error: ${v}
2214
- `)});if(k.error!==void 0)return 1;L=await rB(e,w,i,a,{provider:c,model:d,pattern:l,members:k.members,seed:!_,output:f},n)}else{if(!T)return e.stderr.write(`error: ${Rk}
2214
+ `)});if(k.error!==void 0)return 1;L=await rB(e,w,i,a,{provider:c,model:d,pattern:l,members:k.members,seed:!g,output:f},n)}else{if(!T)return e.stderr.write(`error: ${Rk}
2215
2215
  `),2;let k=await sB({pattern:l,provider:c,model:d,from:u,memberRaws:r,output:f,directory:a,cwd:i,seedFlag:h,deps:{...n,initConfigPath:Dt(e.env??process.env,n.initConfigPath)}},v=>{e.stderr.write(`error: ${v}
2216
2216
  `)});if(typeof k=="number")return k;L=k}if(L===null)return e.stderr.write(`aborted
2217
- `),1;if(p)return e.stdout.write(L.text),0;let O=L.destPath;return iB(L,O,{asJson:m,force:g,seed:L.seed},e)}async function rB(t,e,n,r,s,o){let i=await wk({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:vk(i.text),seed:i.seed}}async function sB(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(Rk),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=oB(a,l,c);if(o!==void 0){let h;try{h=await kr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let _=qI(h),E=zc(_);return E.length===0?(e(`--from source "${o}" has no parseable _MEMBER_ lines`),1):{text:_,destPath:m,members:E,seed:d}}let p;if(i.length>0){let h=Lk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=HI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${Yc})`),2;if(r!==void 0){let _=bt({alias:"Lead",provider:r});if(_!==void 0)return e(_),1;p=h.map(E=>({alias:E,provider:r,...s!==void 0?{model:s}:{}}))}else{let _=wr(u.initConfigPath);if(_===null)return e("missing --provider, and no ~/.lmctl/init.toml found. Run `lmctl init` first, or pass --provider explicitly."),2;let E=[_.provider1,_.provider2,_.provider3];p=h.map((y,T)=>{let w=E[T%E.length];return{alias:y,provider:w.provider,model:s??w.model1}})}}let g=Ak(m,eB(m));return{text:Sr({teamName:g,members:p}),destPath:m,members:p,seed:d}}function Lk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=BI(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 oB(t,e,n){if(t!==void 0)return Jh(n,t);let r=Jh(n,e??".");return Nk(r,`${Ak(r)}.lmctl`)}async function iB(t,e,n,r){if(kk(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2217
+ `),1;if(p)return e.stdout.write(L.text),0;let O=L.destPath;return iB(L,O,{asJson:m,force:_,seed:L.seed},e)}async function rB(t,e,n,r,s,o){let i=await wk({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:vk(i.text),seed:i.seed}}async function sB(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(Rk),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=oB(a,l,c);if(o!==void 0){let h;try{h=await kr(o,u.fetchFn??globalThis.fetch,c)}catch(y){return e(y instanceof Error?y.message:String(y)),1}let g=qI(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=Lk(i,s,e);if(h.error!==void 0)return 1;p=h.members}else{let h=HI(n);if(h===void 0)return e(`invalid pattern "${n}" (expected ${Yc})`),2;if(r!==void 0){let g=bt({alias:"Lead",provider:r});if(g!==void 0)return e(g),1;p=h.map(E=>({alias:E,provider:r,...s!==void 0?{model:s}:{}}))}else{let g=wr(u.initConfigPath);if(g===null)return e("missing --provider, and no ~/.lmctl/init.toml found. Run `lmctl init` first, or pass --provider explicitly."),2;let E=[g.provider1,g.provider2,g.provider3];p=h.map((y,T)=>{let w=E[T%E.length];return{alias:y,provider:w.provider,model:s??w.model1}})}}let _=Ak(m,eB(m));return{text:Sr({teamName:_,members:p}),destPath:m,members:p,seed:d}}function Lk(t,e,n){if(t.length===0)return{members:void 0};let r=[],s=new Set;for(let o of t){let i=BI(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 oB(t,e,n){if(t!==void 0)return Jh(n,t);let r=Jh(n,e??".");return Nk(r,`${Ak(r)}.lmctl`)}async function iB(t,e,n,r){if(kk(e)&&!n.force)return r.stderr.write(`error: ${e} already exists (use --force to overwrite)
2218
2218
  `),1;KH(ZH(e),{recursive:!0}),QH(e,t.text,"utf8");let s=n.asJson?{...r,stdout:{write:()=>{}}}:r;if(!(await vr([e],s)===0))return n.seed&&r.stderr.write(`error: refusing to seed \u2014 lint failed
2219
2219
  `),n.asJson&&te(r,Vh(e,!1,!1,t.members)),1;let a=!1;if(n.seed){let l=await sa([e],s);return a=l===0,n.asJson&&te(r,Vh(e,!0,a,t.members)),l}return n.asJson?(te(r,Vh(e,!0,!1,t.members)),0):(r.stdout.write(`Created ${e}
2220
2220
  `),r.stdout.write(`This is a starting point, not a finished teamfile -- edit it freely.
@@ -2271,7 +2271,7 @@ Examples:
2271
2271
  `),1;if(gB(l))return t.stderr.write(`error: --save-script: ${a} did not return a script (looks like an HTML page, not lmscript)
2272
2272
  `),1;let c=mB(r);dB(c,{recursive:!0});let d=hB(c,`.save-script-${process.pid}-${Date.now()}.tmp`);return fB(d,l,"utf8"),uB(d,r),t.stdout.write(`Saved ${a} to ${r}
2273
2273
  `),0}async function yB(t,e,n,r,s={}){let o=Ok(n,e,s);if(o.error!==void 0)return t.stderr.write(`error: ${o.error}
2274
- `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:Dk(t,o.request)}var _B,Ck,pd=x(()=>{"use strict";da();_B="https://lmctl.com/lmscript/commands",Ck=/^[A-Za-z0-9._-]+$/});var ua,Qte,Kh=x(()=>{"use strict";ua=[{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}],Qte=ua.length});import{spawn as EB}from"node:child_process";async function $k(t,e,n){let r=wB.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 vB(r.name,s)}function vB(t,e){return t==="lmctl_chat"?SB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function SB(t){let e=typeof t.prompt=="string"?t.prompt:"";if(e.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: prompt"});let n=typeof t.team=="string"?t.team:"";if(n.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: team"});let r=typeof t.alias=="string"&&t.alias.length>0?t.alias:"Lead",s=["prompt",n,r,e];return ye()&&Ke(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),bB(s,process.cwd())}function bB(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=EB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=IB(process.env);s=setTimeout(()=>{try{i.kill("SIGTERM")}catch{}o({status:"error",code:124,message:`lmctl prompt timed out after ${a}ms`})},a),s.unref?.();let l="",c="";i.stdout?.on("data",d=>{l+=d.toString("utf8")}),i.stderr?.on("data",d=>{c+=d.toString("utf8")}),i.on("error",d=>{o({status:"error",code:1,message:`failed to spawn lmctl prompt: ${d.message}`})}),i.on("exit",d=>{if(d===0){ye()&&Ke(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2274
+ `),2;let i=await r(o.rest);return i!==0||o.request===void 0?i:Dk(t,o.request)}var _B,Ck,pd=x(()=>{"use strict";da();_B="https://lmctl.com/lmscript/commands",Ck=/^[A-Za-z0-9._-]+$/});var ua,Zte,Kh=x(()=>{"use strict";ua=[{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}],Zte=ua.length});import{spawn as EB}from"node:child_process";async function $k(t,e,n){let r=wB.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 vB(r.name,s)}function vB(t,e){return t==="lmctl_chat"?SB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function SB(t){let e=typeof t.prompt=="string"?t.prompt:"";if(e.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: prompt"});let n=typeof t.team=="string"?t.team:"";if(n.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: team"});let r=typeof t.alias=="string"&&t.alias.length>0?t.alias:"Lead",s=["prompt",n,r,e];return ye()&&Ke(JSON.stringify({event:"mcp_chat_spawn",team:n,alias:r})),bB(s,process.cwd())}function bB(t,e){return new Promise(n=>{let r=!1,s,o=d=>{r||(r=!0,s!==void 0&&clearTimeout(s),n(d))},i=EB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=IB(process.env);s=setTimeout(()=>{try{i.kill("SIGTERM")}catch{}o({status:"error",code:124,message:`lmctl prompt timed out after ${a}ms`})},a),s.unref?.();let l="",c="";i.stdout?.on("data",d=>{l+=d.toString("utf8")}),i.stderr?.on("data",d=>{c+=d.toString("utf8")}),i.on("error",d=>{o({status:"error",code:1,message:`failed to spawn lmctl prompt: ${d.message}`})}),i.on("exit",d=>{if(d===0){ye()&&Ke(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
2275
2275
  `).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 IB(t){let e=t.LMCTL_MCP_CHAT_TIMEOUT_MS;if(e===void 0||e.trim().length===0)return Mk;let n=Number(e);return!Number.isFinite(n)||n<=0?Mk:n}function Yh(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:TB),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 TB,Mk,wB,zh=x(()=>{"use strict";Kh();re();TB="http://127.0.0.1:8787",Mk=30*60*1e3,wB=new Map(ua.map(t=>[t.name,t]))});async function RB(t,e){let n=t.id===void 0,r=t.id??null;if(t.method==="exit")return n||e.io.write(Qh({jsonrpc:"2.0",id:r,result:null})),{kind:"exit"};if(t.method==="initialize")return{kind:"response",message:{jsonrpc:"2.0",id:r,result:{protocolVersion:kB,capabilities:{tools:{listChanged:!1}},serverInfo:{name:AB,version:NB}}}};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:ua.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 $k(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 Qh(t){return`${JSON.stringify(t)}
2276
2276
  `}async function Pk(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(Qh({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 RB(l,t);c.kind==="response"?t.io.write(Qh(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(`
2277
2277
  `);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(`
@@ -2284,21 +2284,21 @@ local config, then uses stdin/stdout for JSON-RPC frames.
2284
2284
  `});function Hk(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 Bk=x(()=>{"use strict"});var Zk={};me(Zk,{applyMaxBytes:()=>gd,parseTailSince:()=>zk,renderMessage:()=>Yk,runTail:()=>UB});async function UB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${PB}
2285
2285
  `),0;let n=ae(t,["--lines","--max-bytes","--watch-interval","--provider","--session","--run","--since"],["--watch","--help","--json"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json");if(V(n,"--session")!==void 0&&n.positionals.length>0)return e.stderr.write(`usage: --session cannot be combined with a positional target
2286
2286
  `),2;let s=V(n,"--since"),o=zk(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
2287
- `),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 _=Number.parseInt(a,10);if(!Number.isFinite(_)||_<1||String(_)!==a)return D(e,`invalid --lines "${a}" (expected a positive integer)`);c={kind:"lines",lines:_}}else{let _=l===void 0?MB:Number.parseInt(l,10);if(!Number.isFinite(_)||_<0||l!==void 0&&String(_)!==l)return D(e,`invalid --max-bytes "${l}" (expected a non-negative integer)`);c={kind:"bytes",maxBytes:_}}let d=z(n,"--watch"),u=V(n,"--watch-interval");if(u!==void 0&&!d)return e.stderr.write(`usage: --watch-interval requires --watch
2288
- `),2;let f=u===void 0?$B:Number.parseInt(u.replace(/s$/,""),10);if(!Number.isSafeInteger(f)||f<1||f>2147483||u!==void 0&&!/^[1-9][0-9]*s?$/.test(u))return D(e,`invalid --watch-interval "${u}" (expected <N>s, N\u22651)`);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected [target] [alias]`);let m=V(n,"--run");if(m!==void 0){if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional [target] [alias]");if(V(n,"--session")!==void 0)return D(e,"--run is mutually exclusive with --session");if(V(n,"--provider")!==void 0)return D(e,"--run is mutually exclusive with --provider");let _=Number.parseInt(m,10);if(!Number.isFinite(_)||_<=0||String(_)!==m)return D(e,`invalid --run "${m}" (expected a positive integer run id)`);try{return await W(e,async E=>FB(e,E,_,c,d,f,i,r))}catch(E){return Ct(e,E)}}let p=rn(DB,{target:n.positionals[0],alias:n.positionals[1],flags:{session:V(n,"--session"),provider:V(n,"--provider")}});if(p.mode==="error")return D(e,p.message);if(p.mode==="managed")return D(e,"tail managed mode requires --run <id>");let g;if(p.mode==="ai-team"){if(V(n,"--provider")!==void 0)return e.stderr.write(`usage: --provider applies only to raw sessions; teamfiles declare their provider
2289
- `),2;if(p.alias===void 0){let _;try{_=await W(e,T=>Ne(p.teamfile,T))}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let E;try{E=Ie(_)}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let y=Fs(E);if(y===void 0)return D(e,`tail: ${p.teamfile} has no Lead member; pass <tf>:<alias>`);try{let T=await W(e,w=>Xe(p.teamfile,y.alias,w));g={provider:T.provider,sessionId:T.sessionid,cwd:T.sessiondir}}catch(T){return T instanceof ge?D(e,T.message):Ct(e,T)}}else try{let _=await W(e,E=>Xe(p.teamfile,p.alias,E));g={provider:_.provider,sessionId:_.sessionid,cwd:_.sessiondir}}catch(_){return _ instanceof ge?D(e,_.message):Ct(e,_)}}else{let _=p.sessionid,E=p.provider;if(E===void 0){let y=await Er(_);if(y.length===0)return D(e,`tail: session "${_}" not found in any provider store`);if(y.length>1)return D(e,`tail: session "${_}" matches multiple providers (${y.join(", ")}); pass --provider`);E=y[0]}g={provider:E,sessionId:_}}let h=await Xk(e,g.provider,g.sessionId,c,-1,i,r);return h===_d?1:d?await new Promise(_=>{let E=async()=>{try{let w=await Xk(e,g.provider,g.sessionId,c,h,i,r);w!==_d&&(h=w)}catch(w){e.stderr.write(`tail: ${w instanceof Error?w.message:String(w)}
2290
- `)}},y=setInterval(()=>{E()},f*1e3),T=()=>{clearInterval(y),_(0)};process.once("SIGINT",T),process.once("SIGTERM",T)}):0}async function Xk(t,e,n,r,s,o,i){let a;try{a=await je(n,e)}catch(f){return t.stderr.write(`tail: failed to load session: ${f instanceof Error?f.message:String(f)}
2287
+ `),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?MB: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
2288
+ `),2;let f=u===void 0?$B:Number.parseInt(u.replace(/s$/,""),10);if(!Number.isSafeInteger(f)||f<1||f>2147483||u!==void 0&&!/^[1-9][0-9]*s?$/.test(u))return D(e,`invalid --watch-interval "${u}" (expected <N>s, N\u22651)`);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected [target] [alias]`);let m=V(n,"--run");if(m!==void 0){if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional [target] [alias]");if(V(n,"--session")!==void 0)return D(e,"--run is mutually exclusive with --session");if(V(n,"--provider")!==void 0)return D(e,"--run is mutually exclusive with --provider");let g=Number.parseInt(m,10);if(!Number.isFinite(g)||g<=0||String(g)!==m)return D(e,`invalid --run "${m}" (expected a positive integer run id)`);try{return await W(e,async E=>FB(e,E,g,c,d,f,i,r))}catch(E){return Ct(e,E)}}let p=rn(DB,{target:n.positionals[0],alias:n.positionals[1],flags:{session:V(n,"--session"),provider:V(n,"--provider")}});if(p.mode==="error")return D(e,p.message);if(p.mode==="managed")return D(e,"tail managed mode requires --run <id>");let _;if(p.mode==="ai-team"){if(V(n,"--provider")!==void 0)return e.stderr.write(`usage: --provider applies only to raw sessions; teamfiles declare their provider
2289
+ `),2;if(p.alias===void 0){let g;try{g=await W(e,T=>Ne(p.teamfile,T))}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let E;try{E=Ie(g)}catch(T){return D(e,`tail: ${T instanceof Error?T.message:String(T)}`)}let y=Fs(E);if(y===void 0)return D(e,`tail: ${p.teamfile} has no Lead member; pass <tf>:<alias>`);try{let T=await W(e,w=>Xe(p.teamfile,y.alias,w));_={provider:T.provider,sessionId:T.sessionid,cwd:T.sessiondir}}catch(T){return T instanceof ge?D(e,T.message):Ct(e,T)}}else try{let g=await W(e,E=>Xe(p.teamfile,p.alias,E));_={provider:g.provider,sessionId:g.sessionid,cwd:g.sessiondir}}catch(g){return g instanceof ge?D(e,g.message):Ct(e,g)}}else{let g=p.sessionid,E=p.provider;if(E===void 0){let y=await Er(g);if(y.length===0)return D(e,`tail: session "${g}" not found in any provider store`);if(y.length>1)return D(e,`tail: session "${g}" matches multiple providers (${y.join(", ")}); pass --provider`);E=y[0]}_={provider:E,sessionId:g}}let h=await Xk(e,_.provider,_.sessionId,c,-1,i,r);return h===_d?1:d?await new Promise(g=>{let E=async()=>{try{let w=await Xk(e,_.provider,_.sessionId,c,h,i,r);w!==_d&&(h=w)}catch(w){e.stderr.write(`tail: ${w instanceof Error?w.message:String(w)}
2290
+ `)}},y=setInterval(()=>{E()},f*1e3),T=()=>{clearInterval(y),g(0)};process.once("SIGINT",T),process.once("SIGTERM",T)}):0}async function Xk(t,e,n,r,s,o,i){let a;try{a=await je(n,e)}catch(f){return t.stderr.write(`tail: failed to load session: ${f instanceof Error?f.message:String(f)}
2291
2291
  `),_d}if(a===null)return t.stderr.write(`tail: session not found: ${n} (provider=${e})
2292
- `),_d;let l=a.messages??[],c=s<0&&r.kind==="lines"?Math.max(0,l.length-r.lines):s+1;if(s<0&&o!==void 0){let f=o.getTime(),m=l.length;for(let p=0;p<l.length;p+=1){let g=l[p].timestamp,h=g===void 0?NaN:(g instanceof Date?g:new Date(g)).getTime();if(!Number.isNaN(h)&&h>=f){m=p;break}}c=Math.max(c,m)}let d=s<0&&c>0;if(c>=l.length)return i===!0&&s<0&&te(t,{schema_version:hd,provider:e,sessionId:n,messages:[],truncated:d}),l.length-1;if(i===!0){let f=l.slice(c).map(p=>({role:p.role,content:p.content,model:p.model??null,timestamp:(p.timestamp instanceof Date?p.timestamp:new Date(p.timestamp)).toISOString()}));return te(t,{schema_version:hd,provider:e,sessionId:n,messages:f,truncated:d}),l.length-1}let u="";for(let f=c;f<l.length;f+=1)u+=`${Yk(l[f])}
2292
+ `),_d;let l=a.messages??[],c=s<0&&r.kind==="lines"?Math.max(0,l.length-r.lines):s+1;if(s<0&&o!==void 0){let f=o.getTime(),m=l.length;for(let p=0;p<l.length;p+=1){let _=l[p].timestamp,h=_===void 0?NaN:(_ instanceof Date?_:new Date(_)).getTime();if(!Number.isNaN(h)&&h>=f){m=p;break}}c=Math.max(c,m)}let d=s<0&&c>0;if(c>=l.length)return i===!0&&s<0&&te(t,{schema_version:hd,provider:e,sessionId:n,messages:[],truncated:d}),l.length-1;if(i===!0){let f=l.slice(c).map(p=>({role:p.role,content:p.content,model:p.model??null,timestamp:(p.timestamp instanceof Date?p.timestamp:new Date(p.timestamp)).toISOString()}));return te(t,{schema_version:hd,provider:e,sessionId:n,messages:f,truncated:d}),l.length-1}let u="";for(let f=c;f<l.length;f+=1)u+=`${Yk(l[f])}
2293
2293
  `;return t.stdout.write(r.kind==="bytes"?gd(u,r.maxBytes):u),l.length-1}function Yk(t){let e=Qk(t.timestamp),n=e?`${e} ${t.role}`:t.role,s=(t.content??"").replace(/\r\n/g,`
2294
2294
  `).replace(/\r/g,`
2295
2295
  `).split(`
2296
2296
  `),o=s[0]??"",i=s.slice(1);return i.length===0?`${n}: ${o}`:`${n}: ${o}
2297
2297
  ${i.map(a=>` ${a}`).join(`
2298
2298
  `)}`}function qk(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 FB(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)te(t,{schema_version:hd,run_id:n,truncated:d.length<c.length,events:qk(d)});else{let f=d.map(m=>`${Jk(m)}
2299
- `).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){te(t,{schema_version:hd,run_id:n,truncated:!1,events:qk(h)});return}let _=h.map(E=>`${Jk(E)}
2300
- `).join("");t.stdout.write(r.kind==="bytes"?gd(_,r.maxBytes):_)}catch(h){t.stderr.write(`tail: ${h instanceof Error?h.message:String(h)}
2301
- `)}},o*1e3),g=()=>{clearInterval(p),f(0)};process.once("SIGINT",g),process.once("SIGTERM",g)}):0}function gd(t,e){if(e===0||Buffer.byteLength(t,"utf8")<=e)return t;let r=Buffer.byteLength(Gk,"utf8");if(r>=e)return Vk(t,e);let s=e-r,o=Vk(t,s);return`${Gk}${o}`}function Vk(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 Jk(t){let e=Qk(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 zk(t){return Hk(t,"--since")}function Qk(t){if(t===void 0)return;let e=(0,Kk.formatLocalTimestamp)(t);return e==="unknown"?void 0:e}var Kk,DB,MB,$B,hd,PB,_d,Gk,eA=x(()=>{"use strict";un();Kk=Ut(xt(),1);le();nt();Be();nn();Bk();DB={name:"tail",allowsBareTeamfile:!0,supportsRaw:!0},MB=4096,$B=2,hd=1,PB=`usage: lmctl tail [target] [alias]
2299
+ `).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){te(t,{schema_version:hd,run_id:n,truncated:!1,events:qk(h)});return}let g=h.map(E=>`${Jk(E)}
2300
+ `).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)}
2301
+ `)}},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(Gk,"utf8");if(r>=e)return Vk(t,e);let s=e-r,o=Vk(t,s);return`${Gk}${o}`}function Vk(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 Jk(t){let e=Qk(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 zk(t){return Hk(t,"--since")}function Qk(t){if(t===void 0)return;let e=(0,Kk.formatLocalTimestamp)(t);return e==="unknown"?void 0:e}var Kk,DB,MB,$B,hd,PB,_d,Gk,eA=x(()=>{"use strict";un();Kk=Ut(xt(),1);le();nt();Be();nn();Bk();DB={name:"tail",allowsBareTeamfile:!0,supportsRaw:!0},MB=4096,$B=2,hd=1,PB=`usage: lmctl tail [target] [alias]
2302
2302
  lmctl tail --session <id> [--provider <name>]
2303
2303
  lmctl tail --run <id>
2304
2304
  [--lines N | --max-bytes N] [--since <duration|ISO8601>]
@@ -2327,7 +2327,7 @@ everything new by construction. --json and --max-bytes cannot be combined;
2327
2327
  --lines still applies. --watch --json emits one JSON
2328
2328
  object per poll tick with something new (NDJSON) -- a tick with
2329
2329
  nothing new prints no line at all, same as text mode.`;_d=-2;Gk=`\u2026 [truncated older output \u2014 raise with --max-bytes]
2330
- `});var rA={};me(rA,{isSeedAck:()=>Cf,isSeedPrompt:()=>mi,runExport:()=>WB,trimExportSeedExchange:()=>nA});function jB(t){return gr().some(e=>e.name===t)}function nA(t){let e=t.messages.findIndex(i=>i.role==="user");if(e===-1||!mi(t.messages[e].content))return;let n=-1,r=!1;for(let i=e+1;i<t.messages.length;i++){let a=t.messages[i].role;if(a==="user")break;if(a==="assistant"){n=i;break}a!=="thinking"&&(r=!0)}let s=!1;n!==-1&&!r&&Cf(t.messages[n].content)&&(s=!0),s?t.messages.splice(e,n-e+1):t.messages.splice(e,1),Array.isArray(t.userPrompts)&&t.userPrompts.length>0&&mi(t.userPrompts[0])&&t.userPrompts.shift(),t.messageCount=t.messages.filter(i=>i.role==="user"||i.role==="assistant").length;let o=t.messages.filter(i=>i.role==="user");o.length>0?(t.firstUserMessage=G(o[0].content.trim(),80),t.lastUserMessage=G(o[o.length-1].content.trim(),80)):(t.firstUserMessage=void 0,t.lastUserMessage=void 0)}async function WB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(tA),0;let n=ae(t,["--provider"],["--prompt-only","--json"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json"),s=z(n,"--prompt-only");if(r&&s)return D(e,"export: --prompt-only cannot be combined with --json");let o=V(n,"--provider"),i=n.positionals.length===1&&o!==void 0,a=n.positionals.length===2&&o===void 0;if(!i&&!a)return D(e,tA.trimEnd());let l,c;if(i){if(l=n.positionals[0],c=o,!jB(c))return D(e,`export: provider is not registered: ${c}`)}else l="",c="";let d;if(a){try{d=Xe(n.positionals[0],n.positionals[1],e.dal)}catch(m){return m instanceof ge?D(e,m.message):Ct(e,m)}l=d.sessionid,c=d.provider}let u;try{u=await je(l,c)}catch(m){return D(e,`export: failed to load session: ${m instanceof Error?m.message:String(m)}`)}if(u===null)return D(e,`export: session not found: ${l} (provider=${c})`);if(nA(u),r)return te(e,u),0;let f=[];if(s){let m=u.userPrompts??u.messages.filter(p=>p.role==="user").map(p=>p.content);for(let p of m){if(mi(p)||p.trimStart().replace(/^["']/u,"").startsWith("lmctl seed initial connection only. Create or pin this provider session, then stop."))continue;let g=p.split(/\r\n|[\r\n\u2028\u2029]/u).map(h=>h.trim()).filter(Boolean).join(" ");g!==""&&f.push(g)}}else for(let m of u.messages)m.role!=="user"&&m.role!=="assistant"||m.content.trim()!==""&&f.push(`${m.role}:
2330
+ `});var rA={};me(rA,{isSeedAck:()=>Cf,isSeedPrompt:()=>mi,runExport:()=>WB,trimExportSeedExchange:()=>nA});function jB(t){return gr().some(e=>e.name===t)}function nA(t){let e=t.messages.findIndex(i=>i.role==="user");if(e===-1||!mi(t.messages[e].content))return;let n=-1,r=!1;for(let i=e+1;i<t.messages.length;i++){let a=t.messages[i].role;if(a==="user")break;if(a==="assistant"){n=i;break}a!=="thinking"&&(r=!0)}let s=!1;n!==-1&&!r&&Cf(t.messages[n].content)&&(s=!0),s?t.messages.splice(e,n-e+1):t.messages.splice(e,1),Array.isArray(t.userPrompts)&&t.userPrompts.length>0&&mi(t.userPrompts[0])&&t.userPrompts.shift(),t.messageCount=t.messages.filter(i=>i.role==="user"||i.role==="assistant").length;let o=t.messages.filter(i=>i.role==="user");o.length>0?(t.firstUserMessage=G(o[0].content.trim(),80),t.lastUserMessage=G(o[o.length-1].content.trim(),80)):(t.firstUserMessage=void 0,t.lastUserMessage=void 0)}async function WB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(tA),0;let n=ae(t,["--provider"],["--prompt-only","--json"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json"),s=z(n,"--prompt-only");if(r&&s)return D(e,"export: --prompt-only cannot be combined with --json");let o=V(n,"--provider"),i=n.positionals.length===1&&o!==void 0,a=n.positionals.length===2&&o===void 0;if(!i&&!a)return D(e,tA.trimEnd());let l,c;if(i){if(l=n.positionals[0],c=o,!jB(c))return D(e,`export: provider is not registered: ${c}`)}else l="",c="";let d;if(a){try{d=Xe(n.positionals[0],n.positionals[1],e.dal)}catch(m){return m instanceof ge?D(e,m.message):Ct(e,m)}l=d.sessionid,c=d.provider}let u;try{u=await je(l,c)}catch(m){return D(e,`export: failed to load session: ${m instanceof Error?m.message:String(m)}`)}if(u===null)return D(e,`export: session not found: ${l} (provider=${c})`);if(nA(u),r)return te(e,u),0;let f=[];if(s){let m=u.userPrompts??u.messages.filter(p=>p.role==="user").map(p=>p.content);for(let p of m){if(mi(p)||p.trimStart().replace(/^["']/u,"").startsWith("lmctl seed initial connection only. Create or pin this provider session, then stop."))continue;let _=p.split(/\r\n|[\r\n\u2028\u2029]/u).map(h=>h.trim()).filter(Boolean).join(" ");_!==""&&f.push(_)}}else for(let m of u.messages)m.role!=="user"&&m.role!=="assistant"||m.content.trim()!==""&&f.push(`${m.role}:
2331
2331
  ${m.content}`);return f.length>0&&e.stdout.write(`${f.join(`
2332
2332
 
2333
2333
  `)}
@@ -2348,8 +2348,8 @@ tracked and provider-qualified session targets.
2348
2348
  ${oA}`),2}let i;try{let a={groups:[],total:dA(),reasons:{usage:{},cost:{}}},l=Pe(e);if(HB(l)&&(i=xr(l),i.prepare("SELECT 1 FROM sqlite_master WHERE type='view' AND name='turn_usage'").get()&&(a=cA(i,r,s,o))),n.flags["--json"])e.stdout.write(JSON.stringify({schema_version:1,since:r,until:s,by:o,...a})+`
2349
2349
  `);else{a.groups.length||e.stdout.write(`no usage recorded yet
2350
2350
  `),e.stdout.write("Period (UTC): "+r+" <= started_at < "+s+`
2351
- `);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"?BB(f):f,"total"],p=[u,...[...a.groups,a.total].map((h,_)=>[m[_],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)])],g=u.map((h,_)=>Math.max(...p.map(E=>E[_].length)));for(let h of p)e.stdout.write(h.map((_,E)=>E===0?_.padEnd(g[E]):_.padStart(g[E])).join(" ")+`
2352
- `);for(let[h,_]of Object.entries(a.reasons)){let E=Object.entries(_).map(([y,T])=>y+"="+c.format(T)).join(", ");E&&e.stdout.write("Unknown "+h+" reasons: "+E+`
2351
+ `);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"?BB(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(" ")+`
2352
+ `);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+`
2353
2353
  `)}}return 0}catch(a){return e.stderr.write(`error: cannot read usage: ${a instanceof Error?a.message:String(a)}
2354
2354
  `),1}finally{i?.close()}}var lA,oA,aA,fA=x(()=>{"use strict";ga();le();lA={day:"day",provider:"provider",model:"model",team:"team",alias:"alias",session:"native_session_id",dir:"cwd"},oA=`usage: lmctl usage [--since D] [--until D] [--by day|provider|model|team|alias|session|dir] [--json]
2355
2355
 
@@ -2363,16 +2363,16 @@ Model keys use reported names first; alias-like keys mean the model was not repo
2363
2363
  SUM(cost_usd) AS costUsd,
2364
2364
  100.0*SUM(CASE WHEN usage_source IS NOT NULL THEN COALESCE(tok_cache_read,0) ELSE 0 END)
2365
2365
  /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,
2366
- COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var hA={};me(hA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>mA,buildCostPayload:()=>pA,normalizeModelId:()=>Ed,runCost:()=>KB});function Ed(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function GB(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 pA(t,e,n){let r=[...new Set([...n.messages.map(k=>k.model),...(n.responses??[]).map(k=>k.model??void 0)].filter(k=>k!==void 0&&k!=="<synthetic>"))],s=[...n.messages].reverse().find(k=>k.model!==void 0&&k.model!=="<synthetic>")?.model,o=n.model??s??null,i=qn(n.responses??[],n.captureStatus!=="partial"),a=t==="gemini"&&(n.totalOutputTokens!==void 0||n.totalReasoningOutputTokens!==void 0)?(n.totalOutputTokens??0)+(n.totalReasoningOutputTokens??0):n.totalOutputTokens??null,l={input:n.responses?i.input_uncached:n.totalInputTokens??null,output:n.responses?i.output:a,cachedInput:n.responses?i.input_cached:n.totalCachedInputTokens??null},c=await Ft(),d=GB(t,r,c.catalog,c.aliases),u=n.responses===void 0&&d.length>1,f="unavailable",m=null,p=null,g=null,h=null,_=!1,E=null,y=null;if(o!==null&&c.catalog!==null){let k=jt(t,o,c.catalog,c.aliases);if(f=k.state.kind,k.offer!==null)y=k.offer.pricing,m=k.offer.route,p=k.offer.source,g=k.offer.sourceModelId,h=k.provenance,_=k.offer.estimated;else switch(k.state.kind){case"unresolved":E=`alias "${k.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":E=`"${k.state.id}" is a known model with no published price row`;break;case"unknown":E=`model "${o}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":E=`model "${o}" is not offered by provider "${t}" (found under: ${k.state.otherProviders.join(", ")})`;break;default:E=`no lmprice catalog coverage for provider "${t}"`;break}}else o!==null&&(E="lmprice catalog unavailable");let T=y===null?null:{inputPer1m:y.input_per_1m_tokens,outputPer1m:y.output_per_1m_tokens,cachedInputPer1m:y.input_cache_read_per_1m_tokens},w=l.cachedInput??0,S=n.totalCacheWriteInputTokens??0,b=["claude","codex","gemini","qwen","copilot"].includes(t),I=l.input===null?null:Math.max(0,l.input-(b?w:0)-(t==="claude"||t==="copilot"?S:0)),L=l.input===null||l.output===null?null:Bo({input:I,output:l.output,cachedInput:w,...S>0?{cacheWrite:S,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},y);if(L===null&&w>0&&y!==null&&y.input_cache_read_per_1m_tokens==null&&(E="no applicable cache-read price rate"),n.responses)if(L=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(k=>k.response_id)).size!==n.responses.length)E="session accounting coverage is incomplete";else if(!c.catalog)E="lmprice catalog unavailable";else{let k=0,v=null;for(let A of n.responses){let N=A.tokens;if(!A.model){v="a response lacks a model";break}let R=n.turns?.flatMap(Rr=>Rr.rawUsage??[]).find(Rr=>Rr.responseId===A.response_id)?.values,C=R?.promptTokens??R?.prompt_tokens,$=R?.input_tokens,P=R?.cache_read_tokens??R?.input_cache_read_tokens,q=R?.cache_write_tokens??R?.input_cache_write_tokens;if(typeof $=="number"&&typeof P=="number"&&P>$||typeof C=="number"&&typeof P=="number"&&P>C||typeof C=="number"&&typeof q=="number"&&q>C||typeof C=="number"&&typeof P=="number"&&typeof q=="number"&&P+q>C){v=`${t} reported contradictory token counters`;break}if(N.output===null){v=`${t} does not record output tokens`;break}if(N.input_cached===null){v=`${t} does not record cached input tokens`;break}let M=A.model_provider??t,ue=Ed(A.model??""),H=(M==="deepseek"||A.model_provider==="deepseek")&&(A.model_provider===void 0||A.model_provider==="deepseek")&&mA.has(ue),ne=N.input_cache_write;if(ne===null&&!H){v=`${t} does not record cache-write input tokens`;break}if(t==="agy"&&(ne??0)>0){v="cache-write inclusion in input is not verified";break}let fe=["kimi","opencode","miniplayer"].includes(t),ze=jt(M,A.model,c.catalog,c.aliases),Qe=ze.offer??jt(t,A.model,c.catalog,c.aliases).offer;if(Qe===null){switch(ze.state.kind){case"no-catalog":v=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":v=`alias "${ze.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":v=`"${ze.state.id}" is a known model with no published price row`;break;case"unknown":v=`model "${A.model}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":v=`model "${A.model}" is not offered by provider "${t}" (found under: ${ze.state.otherProviders.join(", ")})`;break;default:v=`no applicable price for response model "${A.model}"`;break}break}if(ne===null){let Rr=(Qe.route??"").toLowerCase(),F=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(Rr),j=Ed(Qe.sourceModelId??""),he=Qe.provider==="deepseek"&&Qe.source!=="openrouter"&&!F&&j===ue;if(H&&he)ne=0;else{v=`${t} does not record cache-write input tokens`;break}}if(N.input_uncached===null){v=`${t} does not record uncached input tokens`;break}let bo=Bo({input:Math.max(0,N.input_uncached-(fe?ne:0)),cachedInput:N.input_cached,cacheWrite:ne,output:N.output},Qe?.pricing??null);if(bo===null){v=`no applicable price for response model "${A.model}"`;break}k+=bo,!m&&Qe&&(m=Qe.route,f="priced")}L=v?null:k,E=v}return L===null&&(!n.responses&&l.input===null&&l.output===null?E=`${t} does not record token usage`:!n.responses&&l.input===null&&!E?E=`${t} does not record input tokens`:!n.responses&&l.output===null&&!E?E=`${t} does not record output tokens`:E||(E=`no lmprice entry for "${o??"unknown"}"`),(f==="priced"||f==="estimated")&&(f="unavailable",m=null,p=null,g=null,h=null,T=null)),{schema_version:VB,provider:t,sessionId:e,model:o,modelsUsed:d,approximate:u,tokens:l,pricePerModel:T,costUsd:L,priceResolution:f,priceRoute:m,priceSource:p,priceSourceModelId:g,priceProvenance:h,priceEstimated:_,costUnavailableReason:E,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}async function KB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${JB}
2367
- `),0;let n=ae(t,["--provider"],["--json"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <target> [alias]`);let r=z(n,"--json"),s=rn(qB,{target:n.positionals[0],alias:n.positionals[1],flags:{provider:V(n,"--provider")}});if(s.mode==="error")return D(e,s.message);if(s.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let o,i;if(s.mode==="ai-team")try{let E=await W(e,y=>Xe(s.teamfile,s.alias,y));o=E.provider,i=E.sessionid}catch(E){if(E instanceof ge)return D(e,E.message);throw E}else if(i=s.sessionid,s.provider!==void 0)o=s.provider;else{let E=await Er(i);if(E.length===0)return D(e,`cost: session "${i}" not found in any provider store`);if(E.length>1)return D(e,`cost: session "${i}" matches multiple providers (${E.join(", ")}); pass --provider`);o=E[0]}let a;try{a=await je(i,o)}catch(E){return D(e,`cost: failed to load session: ${E instanceof Error?E.message:String(E)}`)}if(a===null)return D(e,`cost: session not found: ${i} (provider=${o})`);let l=await pA(o,i,a),{model:c,modelsUsed:d,approximate:u,tokens:f,costUsd:m,priceEstimated:p,priceRoute:g,costUnavailableReason:h}=l,_={source:l.priceDataSource,generatedAt:l.priceDataGeneratedAt};return r?(te(e,l),0):(e.stdout.write(`Session: ${i}
2366
+ COALESCE(SUM(usage_source IS NULL),0) AS unknownUsageCount, COALESCE(SUM(cost_usd IS NULL),0) AS unknownCostCount`});var hA={};me(hA,{FIRST_PARTY_DEEPSEEK_MODELS:()=>mA,buildCostPayload:()=>pA,normalizeModelId:()=>Ed,runCost:()=>KB});function Ed(t){return t.trim().toLowerCase().replace(/(\d)\.(\d)/g,"$1-$2")}function GB(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 pA(t,e,n){let r=[...new Set([...n.messages.map(k=>k.model),...(n.responses??[]).map(k=>k.model??void 0)].filter(k=>k!==void 0&&k!=="<synthetic>"))],s=[...n.messages].reverse().find(k=>k.model!==void 0&&k.model!=="<synthetic>")?.model,o=n.model??s??null,i=qn(n.responses??[],n.captureStatus!=="partial"),a=t==="gemini"&&(n.totalOutputTokens!==void 0||n.totalReasoningOutputTokens!==void 0)?(n.totalOutputTokens??0)+(n.totalReasoningOutputTokens??0):n.totalOutputTokens??null,l={input:n.responses?i.input_uncached:n.totalInputTokens??null,output:n.responses?i.output:a,cachedInput:n.responses?i.input_cached:n.totalCachedInputTokens??null},c=await Ft(),d=GB(t,r,c.catalog,c.aliases),u=n.responses===void 0&&d.length>1,f="unavailable",m=null,p=null,_=null,h=null,g=!1,E=null,y=null;if(o!==null&&c.catalog!==null){let k=jt(t,o,c.catalog,c.aliases);if(f=k.state.kind,k.offer!==null)y=k.offer.pricing,m=k.offer.route,p=k.offer.source,_=k.offer.sourceModelId,h=k.provenance,g=k.offer.estimated;else switch(k.state.kind){case"unresolved":E=`alias "${k.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":E=`"${k.state.id}" is a known model with no published price row`;break;case"unknown":E=`model "${o}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":E=`model "${o}" is not offered by provider "${t}" (found under: ${k.state.otherProviders.join(", ")})`;break;default:E=`no lmprice catalog coverage for provider "${t}"`;break}}else o!==null&&(E="lmprice catalog unavailable");let T=y===null?null:{inputPer1m:y.input_per_1m_tokens,outputPer1m:y.output_per_1m_tokens,cachedInputPer1m:y.input_cache_read_per_1m_tokens},w=l.cachedInput??0,S=n.totalCacheWriteInputTokens??0,b=["claude","codex","gemini","qwen","copilot"].includes(t),I=l.input===null?null:Math.max(0,l.input-(b?w:0)-(t==="claude"||t==="copilot"?S:0)),L=l.input===null||l.output===null?null:Bo({input:I,output:l.output,cachedInput:w,...S>0?{cacheWrite:S,...n.totalCacheWrite5mInputTokens===void 0?{}:{cacheWrite5m:n.totalCacheWrite5mInputTokens},...n.totalCacheWrite1hInputTokens===void 0?{}:{cacheWrite1h:n.totalCacheWrite1hInputTokens}}:{}},y);if(L===null&&w>0&&y!==null&&y.input_cache_read_per_1m_tokens==null&&(E="no applicable cache-read price rate"),n.responses)if(L=null,!n.responses.length||n.captureStatus==="partial"||new Set(n.responses.map(k=>k.response_id)).size!==n.responses.length)E="session accounting coverage is incomplete";else if(!c.catalog)E="lmprice catalog unavailable";else{let k=0,v=null;for(let A of n.responses){let N=A.tokens;if(!A.model){v="a response lacks a model";break}let R=n.turns?.flatMap(Rr=>Rr.rawUsage??[]).find(Rr=>Rr.responseId===A.response_id)?.values,C=R?.promptTokens??R?.prompt_tokens,$=R?.input_tokens,P=R?.cache_read_tokens??R?.input_cache_read_tokens,q=R?.cache_write_tokens??R?.input_cache_write_tokens;if(typeof $=="number"&&typeof P=="number"&&P>$||typeof C=="number"&&typeof P=="number"&&P>C||typeof C=="number"&&typeof q=="number"&&q>C||typeof C=="number"&&typeof P=="number"&&typeof q=="number"&&P+q>C){v=`${t} reported contradictory token counters`;break}if(N.output===null){v=`${t} does not record output tokens`;break}if(N.input_cached===null){v=`${t} does not record cached input tokens`;break}let M=A.model_provider??t,ue=Ed(A.model??""),H=(M==="deepseek"||A.model_provider==="deepseek")&&(A.model_provider===void 0||A.model_provider==="deepseek")&&mA.has(ue),ne=N.input_cache_write;if(ne===null&&!H){v=`${t} does not record cache-write input tokens`;break}if(t==="agy"&&(ne??0)>0){v="cache-write inclusion in input is not verified";break}let fe=["kimi","opencode","miniplayer"].includes(t),ze=jt(M,A.model,c.catalog,c.aliases),Qe=ze.offer??jt(t,A.model,c.catalog,c.aliases).offer;if(Qe===null){switch(ze.state.kind){case"no-catalog":v=`no lmprice catalog coverage for provider "${t}"`;break;case"unresolved":v=`alias "${ze.state.alias}" is deliberately unresolved in the lmprice alias table`;break;case"known-unpriced":v=`"${ze.state.id}" is a known model with no published price row`;break;case"unknown":v=`model "${A.model}" not found in lmprice catalog for provider "${t}"`;break;case"wrong-provider":v=`model "${A.model}" is not offered by provider "${t}" (found under: ${ze.state.otherProviders.join(", ")})`;break;default:v=`no applicable price for response model "${A.model}"`;break}break}if(ne===null){let Rr=(Qe.route??"").toLowerCase(),F=/^(openrouter|ollama|together|fireworks|groq|azure|bedrock|vertex)[:\/]/i.test(Rr),j=Ed(Qe.sourceModelId??""),he=Qe.provider==="deepseek"&&Qe.source!=="openrouter"&&!F&&j===ue;if(H&&he)ne=0;else{v=`${t} does not record cache-write input tokens`;break}}if(N.input_uncached===null){v=`${t} does not record uncached input tokens`;break}let bo=Bo({input:Math.max(0,N.input_uncached-(fe?ne:0)),cachedInput:N.input_cached,cacheWrite:ne,output:N.output},Qe?.pricing??null);if(bo===null){v=`no applicable price for response model "${A.model}"`;break}k+=bo,!m&&Qe&&(m=Qe.route,f="priced")}L=v?null:k,E=v}return L===null&&(!n.responses&&l.input===null&&l.output===null?E=`${t} does not record token usage`:!n.responses&&l.input===null&&!E?E=`${t} does not record input tokens`:!n.responses&&l.output===null&&!E?E=`${t} does not record output tokens`:E||(E=`no lmprice entry for "${o??"unknown"}"`),(f==="priced"||f==="estimated")&&(f="unavailable",m=null,p=null,_=null,h=null,T=null)),{schema_version:VB,provider:t,sessionId:e,model:o,modelsUsed:d,approximate:u,tokens:l,pricePerModel:T,costUsd:L,priceResolution:f,priceRoute:m,priceSource:p,priceSourceModelId:_,priceProvenance:h,priceEstimated:g,costUnavailableReason:E,priceDataSource:c.source,priceDataGeneratedAt:c.generatedAt}}async function KB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${JB}
2367
+ `),0;let n=ae(t,["--provider"],["--json"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>2)return D(e,`too many positionals (${n.positionals.length}); expected <target> [alias]`);let r=z(n,"--json"),s=rn(qB,{target:n.positionals[0],alias:n.positionals[1],flags:{provider:V(n,"--provider")}});if(s.mode==="error")return D(e,s.message);if(s.mode==="managed")return D(e,"cost: managed-run targets are not supported (no per-run token/model rollup exists)");let o,i;if(s.mode==="ai-team")try{let E=await W(e,y=>Xe(s.teamfile,s.alias,y));o=E.provider,i=E.sessionid}catch(E){if(E instanceof ge)return D(e,E.message);throw E}else if(i=s.sessionid,s.provider!==void 0)o=s.provider;else{let E=await Er(i);if(E.length===0)return D(e,`cost: session "${i}" not found in any provider store`);if(E.length>1)return D(e,`cost: session "${i}" matches multiple providers (${E.join(", ")}); pass --provider`);o=E[0]}let a;try{a=await je(i,o)}catch(E){return D(e,`cost: failed to load session: ${E instanceof Error?E.message:String(E)}`)}if(a===null)return D(e,`cost: session not found: ${i} (provider=${o})`);let l=await pA(o,i,a),{model:c,modelsUsed:d,approximate:u,tokens:f,costUsd:m,priceEstimated:p,priceRoute:_,costUnavailableReason:h}=l,g={source:l.priceDataSource,generatedAt:l.priceDataGeneratedAt};return r?(te(e,l),0):(e.stdout.write(`Session: ${i}
2368
2368
  `),e.stdout.write(` Provider: ${o}
2369
2369
  `),e.stdout.write(` Model: ${c??"(unknown)"}
2370
2370
  `),u&&e.stdout.write(` NOTE: this session used multiple models (${d.join(", ")}) -- cost below is approximate, priced at ${c}'s rate for the whole session.
2371
2371
  `),e.stdout.write(` Tokens: ${f.input==null?"n/a":(0,yd.formatCount)(f.input)} in / ${f.output==null?"n/a":(0,yd.formatCount)(f.output)} out`+(f.cachedInput!=null?` (cached: ${(0,yd.formatCount)(f.cachedInput)})`:"")+`
2372
2372
  `),m===null?e.stdout.write(` Cost: n/a (${h??`no lmprice entry for "${c??"unknown"}"`})
2373
2373
  `):e.stdout.write(` Cost: ~$${m.toFixed(4)}${u?" (approximate)":""}${p?" (estimated rate)":""}
2374
- `),g!==null&&e.stdout.write(` Price route: ${g}${p?" (manual/estimated row)":""}
2375
- `),e.stdout.write(` Price data: ${_.source}${_.generatedAt?` (generated ${_.generatedAt})`:""}
2374
+ `),_!==null&&e.stdout.write(` Price route: ${_}${p?" (manual/estimated row)":""}
2375
+ `),e.stdout.write(` Price data: ${g.source}${g.generatedAt?` (generated ${g.generatedAt})`:""}
2376
2376
  `),0)}var yd,qB,mA,VB,JB,_A=x(()=>{"use strict";No();un();yd=Ut(xt(),1);Sn();Hr();le();nt();Ji();qB={name:"cost",allowsBareTeamfile:!1,supportsRaw:!0};mA=new Set([...no,...ro,"deepseek-v4.1-flash","deepseek-chat","deepseek-reasoner","deepseek-coder","deepseek-v3","deepseek-v3.2","deepseek-r1"].map(Ed));VB=1,JB=`usage: lmctl cost <target> [alias] [--json]
2377
2377
  lmctl cost <sessionid> [--provider <name>]
2378
2378
 
@@ -2397,7 +2397,7 @@ unavailable) and
2397
2397
  strict short timeout and NEVER blocks or fails this command: any network
2398
2398
  error degrades silently to the local cache, then the bundled built-in
2399
2399
  copy, in that order.`});function gA(t,e={}){return t.query("SELECT * FROM run ORDER BY id DESC LIMIT ?",e.limit??100)}var yA=x(()=>{"use strict"});var TA={};me(TA,{runLs:()=>ZB});import{resolve as Zh}from"node:path";function QB(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 ZB(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${YB}
2400
- `),0;let n=ae(t,["--provider","--sessiondir","--format","--limit"],["--recursive","--all","--json","--runs","--help"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>0)return D(e,"ls does not accept positional targets (use --provider/--sessiondir/--all to filter)");let r=V(n,"--format"),s=z(n,"--json");if(z(n,"--runs")){for(let h of["--provider","--sessiondir"])if(V(n,h)!==void 0)return D(e,`--runs is mutually exclusive with ${h}`);for(let h of["--recursive","--all"])if(z(n,h))return D(e,`--runs is mutually exclusive with ${h}`);if(r==="teamfile")return D(e,"--runs is mutually exclusive with --format teamfile (runs are not teamfile members)");let m=V(n,"--limit"),p=zB;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>EA)return D(e,`--limit ${h} exceeds maximum (${EA})`);p=h}let g=r==="json"||s===!0?"json":"table";try{return await W(e,async h=>e2(e,h,p,g))}catch(h){return Ct(e,h)}}let i=t2(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?Zh(c):Zh(process.cwd());f=f.filter(p=>{let g=Zh(p.cwd);return d?g===m||g.startsWith(`${m}/`):g===m})}if(f=QB(f),a==="json")return te(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}.
2400
+ `),0;let n=ae(t,["--provider","--sessiondir","--format","--limit"],["--recursive","--all","--json","--runs","--help"]);if(n.error!==void 0)return D(e,n.error);if(n.positionals.length>0)return D(e,"ls does not accept positional targets (use --provider/--sessiondir/--all to filter)");let r=V(n,"--format"),s=z(n,"--json");if(z(n,"--runs")){for(let h of["--provider","--sessiondir"])if(V(n,h)!==void 0)return D(e,`--runs is mutually exclusive with ${h}`);for(let h of["--recursive","--all"])if(z(n,h))return D(e,`--runs is mutually exclusive with ${h}`);if(r==="teamfile")return D(e,"--runs is mutually exclusive with --format teamfile (runs are not teamfile members)");let m=V(n,"--limit"),p=zB;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>EA)return D(e,`--limit ${h} exceeds maximum (${EA})`);p=h}let _=r==="json"||s===!0?"json":"table";try{return await W(e,async h=>e2(e,h,p,_))}catch(h){return Ct(e,h)}}let i=t2(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?Zh(c):Zh(process.cwd());f=f.filter(p=>{let _=Zh(p.cwd);return d?_===m||_.startsWith(`${m}/`):_===m})}if(f=QB(f),a==="json")return te(e,f.map(m=>({provider:m.provider,sessionId:m.sessionId,cwd:m.cwd,messageCount:m.messageCount,modifiedAt:m.modifiedAt.toISOString(),...m.model!==void 0?{model:m.model}:{}}))),0;if(f.length===0){if(a==="table"){let m=u?"(all)":c??process.cwd(),p=d?"under":"in";e.stdout.write(`No native sessions found ${p} ${m}.
2401
2401
  `)}return 0}if(a==="teamfile"){for(let m of f)e.stdout.write(`_MEMBER_ alias=- provider=${m.provider} sessionid=${m.sessionId} sessiondir=${m.cwd}
2402
2402
  `);return 0}return(0,ot.printTable)(f.map(m=>[(0,ot.escapeCell)(m.sessionId),(0,ot.escapeCell)(m.provider),(0,ot.escapeCell)(m.cwd.length>36?`\u2026${m.cwd.slice(-35)}`:m.cwd),(0,ot.formatRelativeTime)(m.modifiedAt)]),{headers:["SESSION","PROVIDER","SESSIONDIR","MODIFIED"],stream:e.stdout}),0}async function e2(t,e,n,r){let s=gA(e,{limit:n});return r==="json"?(te(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.
2403
2403
  `),0):((0,ot.printTable)(s.map(o=>[(0,ot.escapeCell)(o.id),(0,ot.escapeCell)(o.workflow_id),(0,ot.escapeCell)(o.team_id),(0,ot.escapeCell)(o.current_state??""),(0,ot.escapeCell)(o.terminal_state??""),(0,ot.escapeCell)(o.started_at)]),{headers:["RUN_ID","WORKFLOW","TEAM","STATE","TERMINAL","STARTED"],stream:t.stdout}),0)}function t2(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 ot,YB,zB,EA,wA=x(()=>{"use strict";ot=Ut(xt(),1);Un();le();yA();YB=`usage: lmctl ls [--provider <name>] [--sessiondir <path>]
@@ -2469,10 +2469,10 @@ it is expected.
2469
2469
  --force Regenerate the whole example file from detection (previous file
2470
2470
  saved as init.toml.bak). Slots you added are NOT kept by --force.
2471
2471
  -h, --help display help for command
2472
- `});function AA(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 NA=x(()=>{"use strict"});import{execFileSync as _2}from"node:child_process";import{resolve as RA}from"node:path";function g2(t){return t.filter(e=>e.state!=="retired")}function LA(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=_2("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=RA(s),i=e.listProjects().find(a=>RA(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 xA(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 CA(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=g2(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 OA=x(()=>{"use strict";le()});function DA(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 MA=x(()=>{"use strict"});var FA={};me(FA,{SIZE_WARN_EST_TOKENS:()=>fa,estimateTokens:()=>UA,runTeamTerminal:()=>v2,runTerminal:()=>n_});import{constants as y2}from"node:os";import{spawn as E2}from"node:child_process";import{statSync as T2}from"node:fs";async function n_(t,e){if(t.includes("--help")||t.includes("-h"))return A2(e);let n=ae(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(Rn(e)&&!z(n,"--size"))return D(e,"terminal opens an interactive TUI; non-interactive mode is enabled");let r=V(n,"--run");if(r!==void 0){let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<=0||String(s)!==r)return D(e,`invalid --run "${r}" (expected a positive integer run id)`);if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional <teamfile>[:alias]");let o=["--team","--project","--size","--json"];for(let i of o)if(i==="--size"||i==="--json"?z(n,i):V(n,i)!==void 0)return D(e,`--run is mutually exclusive with ${i}`);try{return await W(e,async i=>{let a=V(n,"--alias"),l=DA(i,s,a);return"err"in l?D(e,l.err):r_(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 Ct(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=rn(w2,{target:o,alias:i,flags:{}});return a.mode==="error"?D(e,a.message):a.mode!=="ai-team"?D(e,`internal: terminal positional yielded unexpected mode "${a.mode}"`):a.alias===void 0?D(e,"terminal: alias required for the teamfile target"):await W(e,l=>PA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await W(e,async s=>{let o=b2(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?k2(e,s,o,i,z(n,"--json")):I2(e,s,o,i)})}catch(s){return Ct(e,s)}}async function v2(t,e,n,r,s){let o=await PA(t,e,n,r,!1,s);return{code:s.signalObserved?null:o,signal:s.signalObserved??null}}async function PA(t,e,n,r,s,o){let i;try{i=Xe(e,n,r)}catch(A){return A instanceof ge?D(t,A.message):Ct(t,A)}let a=tr(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:ar(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,N=A===null?null:et(A)?"live":"dead",R=`${i.alias} is busy/held by ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} `+(A===null?"(holder_pid=unavailable)":`(holder_pid=${A}, ${N})`);return s?(te(t,{status:"error",errorKind:"busy",message:R,holder_pid:A,holder_liveness:N}),1):D(t,R)}let l=vb({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,g=null,h=!1,_,E,y,T=A=>{c!==null&&(clearInterval(c),c=null);try{let N=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&N!==null&&A.push("terminal lock release was not acknowledged")}catch(N){A.push(`terminal lock release: ${N instanceof Error?N.message:String(N)}`)}try{let N=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&N!==null&&A.push("inflight release was not acknowledged")}catch(N){A.push(`inflight release: ${N instanceof Error?N.message:String(N)}`)}},w=(A,N)=>{let R=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(N)}finally{try{r.db.pragma(`busy_timeout=${R}`)}catch(C){N.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},S=(A,N)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let C=r.getTrackedInvocation(d);C==null||C.status==="running"?N.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(R){N.push(`tracked terminal finish: ${R instanceof Error?R.message:String(R)}`)}},b=A=>{if(p)return;p=!0;let N=[];try{w(R=>{T(R),S({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},R)},N)}catch(R){N.push(R instanceof Error?R.message:String(R))}N.length>0&&(g=Error(N.join("; ")))},I=!o,L=I?new AbortController:void 0,O=()=>L?.abort("SIGINT"),k=()=>L?.abort("SIGTERM");I&&(process.once("SIGINT",O),process.once("SIGTERM",k));let v=o??{env:m,signal:L?.signal};v.env=m;try{if(v.cancel=b,v.cleanupError=()=>g,o&&o.onResource?.({close(){if(E)return E;let R,C;E=new Promise((P,q)=>{R=P,C=q});let $=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),g)throw g;if(_){let P=5e3-(performance.now()-$),q;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([_.catch(()=>{}),new Promise((M,ue)=>{q=setTimeout(()=>ue(Error("terminal close deadline exceeded")),P)})])}catch(M){throw g=M instanceof Error?M:Error(String(M)),g}finally{clearTimeout(q)}}})().then(R,C),E},finalizeSync(R){if(b(R),o.stop?.(R),g)throw g}}),p||v.signal?.aborted){let R=v.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(R),R==="SIGINT"?130:143}r.setTerminalLock(l),d=S2(r,i,m,o?.pid),d!==null&&(m.LMCTL_INVOCATION_ID=String(d));let A=r.getRootTeam(i.teamfile)?.name??null;A!==null&&(m.LMBEE_TEAM_NAME=A),c=setInterval(()=>{try{let R=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,R);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,R),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},Sb(m)),c.unref?.();try{Ws(t,Ie(i.teamfile),i.teamfile)}catch{}let N=v;return _=r_(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},R=>{f.push(`${R.provider} terminal ignored model=${R.model}: ${R.reason}`)},N),u=await _,u}catch(A){throw y=A,A}finally{if(I&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",k)),!p){p=!0;let A=[];try{w(N=>{T(N),S({status:u===0?"done":"error",exit_code:u,result_summary:u===0?"terminal session ended":null,error:u===0?null:`terminal exited with code ${u??"unknown"}`,...f.length>0?{config_warnings:JSON.stringify(f)}:{}},N)},A)}catch(N){A.push(N instanceof Error?N.message:String(N))}A.length>0&&(g=Error(A.join("; ")))}if(g){if(y===void 0)throw g;try{t.stderr.write("error: terminal cleanup: "+g.message+`
2473
- `)}catch{}}}}function S2(t,e,n=process.env,r=process.pid){try{return t.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:e.teamfile,from_identity:`${e.teamfile}:terminal`,target_teamfile:e.teamfile,target_alias:e.alias,root_teamfile:e.teamfile,cwd:e.sessiondir,command:`lmctl terminal ${e.teamfile} ${e.alias}`,holder_pid:r,launch_source:"terminal",parent_invocation_id:Os(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 r_(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(!fb.test(o))return D(t,"refusing to resume: malformed sessionid");let l=Ip(s,o,{isLead:e.isLead,model:a,onModelIgnored:p=>{let g=`warning: ${p.provider} terminal ignored model=${p.model}: ${p.reason}`;t.stderr.write(`${g}
2472
+ `});function AA(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 NA=x(()=>{"use strict"});import{execFileSync as _2}from"node:child_process";import{resolve as RA}from"node:path";function g2(t){return t.filter(e=>e.state!=="retired")}function LA(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=_2("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=RA(s),i=e.listProjects().find(a=>RA(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 xA(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 CA(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=g2(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 OA=x(()=>{"use strict";le()});function DA(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 MA=x(()=>{"use strict"});var FA={};me(FA,{SIZE_WARN_EST_TOKENS:()=>fa,estimateTokens:()=>UA,runTeamTerminal:()=>v2,runTerminal:()=>n_});import{constants as y2}from"node:os";import{spawn as E2}from"node:child_process";import{statSync as T2}from"node:fs";async function n_(t,e){if(t.includes("--help")||t.includes("-h"))return A2(e);let n=ae(t,["--project","--team","--alias","--run"],["--size","--json","--help"]);if(n.error!==void 0)return D(e,n.error);if(Rn(e)&&!z(n,"--size"))return D(e,"terminal opens an interactive TUI; non-interactive mode is enabled");let r=V(n,"--run");if(r!==void 0){let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<=0||String(s)!==r)return D(e,`invalid --run "${r}" (expected a positive integer run id)`);if(n.positionals.length>0)return D(e,"--run is mutually exclusive with positional <teamfile>[:alias]");let o=["--team","--project","--size","--json"];for(let i of o)if(i==="--size"||i==="--json"?z(n,i):V(n,i)!==void 0)return D(e,`--run is mutually exclusive with ${i}`);try{return await W(e,async i=>{let a=V(n,"--alias"),l=DA(i,s,a);return"err"in l?D(e,l.err):r_(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 Ct(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=rn(w2,{target:o,alias:i,flags:{}});return a.mode==="error"?D(e,a.message):a.mode!=="ai-team"?D(e,`internal: terminal positional yielded unexpected mode "${a.mode}"`):a.alias===void 0?D(e,"terminal: alias required for the teamfile target"):await W(e,l=>PA(e,a.teamfile,a.alias,l,z(n,"--json")))}try{return await W(e,async s=>{let o=b2(e,s,n);if(typeof o=="number")return o;let i=V(n,"--alias");return z(n,"--size")?k2(e,s,o,i,z(n,"--json")):I2(e,s,o,i)})}catch(s){return Ct(e,s)}}async function v2(t,e,n,r,s){let o=await PA(t,e,n,r,!1,s);return{code:s.signalObserved?null:o,signal:s.signalObserved??null}}async function PA(t,e,n,r,s,o){let i;try{i=Xe(e,n,r)}catch(A){return A instanceof ge?D(t,A.message):Ct(t,A)}let a=tr(r,{receiver_teamfile:i.teamfile,receiver_alias:i.alias,sender_teamfile:i.teamfile,sender_alias:"terminal",ttlMs:ar(o?.env??t.env)});if(!a.acquired){let A=a.current.holder_pid,N=A===null?null:et(A)?"live":"dead",R=`${i.alias} is busy/held by ${a.current.sender_alias} (${a.current.sender_teamfile}) since ${a.current.started_at} `+(A===null?"(holder_pid=unavailable)":`(holder_pid=${A}, ${N})`);return s?(te(t,{status:"error",errorKind:"busy",message:R,holder_pid:A,holder_liveness:N}),1):D(t,R)}let l=vb({teamfile:i.teamfile,alias:i.alias,pid:o?.pid}),c=null,d=null,u=null,f=[],m={...o?.env??t.env??process.env},p=!1,_=null,h=!1,g,E,y,T=A=>{c!==null&&(clearInterval(c),c=null);try{let N=r.getTerminalLock(l.teamfile,l.alias);!r.clearTerminalLock(l.teamfile,l.alias,l.lock_id)&&N!==null&&A.push("terminal lock release was not acknowledged")}catch(N){A.push(`terminal lock release: ${N instanceof Error?N.message:String(N)}`)}try{let N=r.getAgentInflight(l.teamfile,l.alias);!r.releaseAgentInflight(a.lease,a.leaseId)&&N!==null&&A.push("inflight release was not acknowledged")}catch(N){A.push(`inflight release: ${N instanceof Error?N.message:String(N)}`)}},w=(A,N)=>{let R=r.db.pragma("busy_timeout",{simple:!0});r.db.pragma("busy_timeout=0");try{A(N)}finally{try{r.db.pragma(`busy_timeout=${R}`)}catch(C){N.push(`busy timeout restore: ${C instanceof Error?C.message:String(C)}`)}}},S=(A,N)=>{if(!(d===null||h))try{if(r.finishTrackedInvocation(d,A)===null){let C=r.getTrackedInvocation(d);C==null||C.status==="running"?N.push("tracked terminal finish was not acknowledged"):h=!0}else h=!0}catch(R){N.push(`tracked terminal finish: ${R instanceof Error?R.message:String(R)}`)}},b=A=>{if(p)return;p=!0;let N=[];try{w(R=>{T(R),S({status:"cancelled",signal:A,exit_code:A==="SIGINT"?130:143,error:`terminal interrupted by ${A}`},R)},N)}catch(R){N.push(R instanceof Error?R.message:String(R))}N.length>0&&(_=Error(N.join("; ")))},I=!o,L=I?new AbortController:void 0,O=()=>L?.abort("SIGINT"),k=()=>L?.abort("SIGTERM");I&&(process.once("SIGINT",O),process.once("SIGTERM",k));let v=o??{env:m,signal:L?.signal};v.env=m;try{if(v.cancel=b,v.cleanupError=()=>_,o&&o.onResource?.({close(){if(E)return E;let R,C;E=new Promise((P,q)=>{R=P,C=q});let $=performance.now();return(async()=>{if(b("SIGTERM"),o.stop?.("SIGTERM"),_)throw _;if(g){let P=5e3-(performance.now()-$),q;try{if(P<=0)throw Error("terminal close deadline exceeded");await Promise.race([g.catch(()=>{}),new Promise((M,ue)=>{q=setTimeout(()=>ue(Error("terminal close deadline exceeded")),P)})])}catch(M){throw _=M instanceof Error?M:Error(String(M)),_}finally{clearTimeout(q)}}})().then(R,C),E},finalizeSync(R){if(b(R),o.stop?.(R),_)throw _}}),p||v.signal?.aborted){let R=v.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM";return b(R),R==="SIGINT"?130:143}r.setTerminalLock(l),d=S2(r,i,m,o?.pid),d!==null&&(m.LMCTL_INVOCATION_ID=String(d));let A=r.getRootTeam(i.teamfile)?.name??null;A!==null&&(m.LMBEE_TEAM_NAME=A),c=setInterval(()=>{try{let R=new Date().toISOString(),C=r.heartbeatTerminalLock(l.teamfile,l.alias,l.lock_id,R);C&&r.heartbeatAgentInflight(a.lease,a.leaseId,R),!C&&c!==null&&(clearInterval(c),c=null)}catch{}},Sb(m)),c.unref?.();try{Ws(t,Ie(i.teamfile),i.teamfile)}catch{}let N=v;return g=r_(t,{provider:i.provider,sessionid:i.sessionid,sessiondir:i.sessiondir,...i.model!==void 0?{model:i.model}:{},isLead:i.isLead},R=>{f.push(`${R.provider} terminal ignored model=${R.model}: ${R.reason}`)},N),u=await g,u}catch(A){throw y=A,A}finally{if(I&&(process.removeListener("SIGINT",O),process.removeListener("SIGTERM",k)),!p){p=!0;let A=[];try{w(N=>{T(N),S({status:u===0?"done":"error",exit_code:u,result_summary:u===0?"terminal session ended":null,error:u===0?null:`terminal exited with code ${u??"unknown"}`,...f.length>0?{config_warnings:JSON.stringify(f)}:{}},N)},A)}catch(N){A.push(N instanceof Error?N.message:String(N))}A.length>0&&(_=Error(A.join("; ")))}if(_){if(y===void 0)throw _;try{t.stderr.write("error: terminal cleanup: "+_.message+`
2473
+ `)}catch{}}}}function S2(t,e,n=process.env,r=process.pid){try{return t.startTrackedInvocation({kind:"exec",origin:"operator",scope_teamfile:e.teamfile,from_identity:`${e.teamfile}:terminal`,target_teamfile:e.teamfile,target_alias:e.alias,root_teamfile:e.teamfile,cwd:e.sessiondir,command:`lmctl terminal ${e.teamfile} ${e.alias}`,holder_pid:r,launch_source:"terminal",parent_invocation_id:Os(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 r_(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(!fb.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(`${_}
2474
2474
  `),He({event:"model_ignored",provider:p.provider,model:p.model,reason:p.reason}),n?.(p)}});if(l===null||l.length===0)return D(t,`no resume incantation for provider "${s}"`);let c=Ce(r?.env??t.env??process.env,i,o,"terminal"),d=await mb(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+`
2475
- `),await new Promise(p=>{if(r?.signal?.aborted){let I=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(I),p(I==="SIGINT"?130:143)}let g=r?.streams,h=g?[g.stdin,g.stdout,g.stderr].map(I=>I.fd):void 0,_=h?.every(I=>typeof I=="number"),E=E2(m,f,{stdio:g?_?h:["pipe","pipe","pipe"]:"inherit",cwd:i,env:c}),y=g?.stdin?.readableFlowing;g&&!_&&(g.stdin.pipe(E.stdin),E.stdout?.pipe(g.stdout,{end:!1}),E.stderr?.pipe(g.stderr,{end:!1}));let T=!1,w=I=>{if(!T){T=!0;try{r?.cancel?.(I)}catch{}{try{E.kill(I)}catch{}de(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},S=()=>w(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=w);let b=()=>{r?.signal?.removeEventListener("abort",S),g&&!_&&(g.stdin.unpipe(E.stdin),y||g.stdin.pause(),E.stdout?.unpipe(g.stdout),E.stderr?.unpipe(g.stderr))};r?.signal?.addEventListener("abort",S,{once:!0}),r?.signal?.aborted&&S(),E.stdin?.on("error",()=>{}),E.on("error",I=>{b(),p(D(t,`failed to launch ${m}: ${I.message}`))}),E.on("exit",(I,L)=>{b(),r&&(r.signalObserved=L);let O=I??(L?128+(y2.signals[L]??1):1),k=pb(s);k&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+k+`
2475
+ `),await new Promise(p=>{if(r?.signal?.aborted){let I=r.signal.reason==="SIGINT"?"SIGINT":"SIGTERM";return r.cancel?.(I),p(I==="SIGINT"?130:143)}let _=r?.streams,h=_?[_.stdin,_.stdout,_.stderr].map(I=>I.fd):void 0,g=h?.every(I=>typeof I=="number"),E=E2(m,f,{stdio:_?g?h:["pipe","pipe","pipe"]:"inherit",cwd:i,env:c}),y=_?.stdin?.readableFlowing;_&&!g&&(_.stdin.pipe(E.stdin),E.stdout?.pipe(_.stdout,{end:!1}),E.stderr?.pipe(_.stderr,{end:!1}));let T=!1,w=I=>{if(!T){T=!0;try{r?.cancel?.(I)}catch{}{try{E.kill(I)}catch{}de(E,{stdinEnd:!1,softDelayMs:0,killDelayMs:100}).catch(()=>{})}}},S=()=>w(r?.signal?.reason==="SIGINT"?"SIGINT":"SIGTERM");r&&(r.stop=w);let b=()=>{r?.signal?.removeEventListener("abort",S),_&&!g&&(_.stdin.unpipe(E.stdin),y||_.stdin.pause(),E.stdout?.unpipe(_.stdout),E.stderr?.unpipe(_.stderr))};r?.signal?.addEventListener("abort",S,{once:!0}),r?.signal?.aborted&&S(),E.stdin?.on("error",()=>{}),E.on("error",I=>{b(),p(D(t,`failed to launch ${m}: ${I.message}`))}),E.on("exit",(I,L)=>{b(),r&&(r.signalObserved=L);let O=I??(L?128+(y2.signals[L]??1):1),k=pb(s);k&&O!==0&&O!==130&&O!==143&&!T&&!r?.signal?.aborted&&t.stderr.write(s+" exited with status "+O+". "+k+`
2476
2476
  `),p(O)})})}function b2(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=LA(t,e,V(n,"--project"));return typeof s=="number"?s:xA(t,e,s,void 0)}async function I2(t,e,n,r){let s=CA(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 r_(t,{provider:Hu(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 UA(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=T2(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 k2(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=Hu(a),d=a.model??null,u=null;Ac(c)&&(u=await je(l,c));let f=UA(u),m=f.est>fa;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?hb(c,l,d!==null?{model:d}:{}):null})}if(s)return te(t,{estimate:!0,legend:$A,guide_tokens:fa,members:i}),0;t.stdout.write(`session size \u2014 ESTIMATE only (nothing is changed automatically)
2477
2477
  `),t.stdout.write(`${$A}
2478
2478
  `);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)
@@ -2518,14 +2518,14 @@ it is expected.
2518
2518
  `),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>
2519
2519
  `),2;let i=o[0],a=n.cwd??process.cwd(),l=n.fetchFn??fetch,c;try{c=ta(Dt(e.env??process.env,n.initConfigPath))}catch(h){return e.stderr.write(h instanceof qe&&h.kind==="missing"?"error: no ~/.lmctl/init.toml found. Run `lmctl init` first, then try quickrun again.\n":"error: "+(h instanceof Error?h.message:String(h))+`
2520
2520
  `),1}let d;try{d=await kr(i,l,a)}catch(h){return e.stderr.write(`error: could not fetch ${i}: ${h instanceof Error?h.message:String(h)}
2521
- `),1}let u;try{let h=AA(c.document).properties;for(let _ of["Directory","NonInteractive"])if(Object.hasOwn(h,_))throw Error("Property '"+_+"' conflicts with an invocation fact in "+c.path+"; fix the file or run lmctl init");Object.assign(h,{Directory:a,NonInteractive:Rn(e)}),u=kI(d,c.config,{properties:h,path:c.path,argv:[]})}catch(h){return e.stderr.write("error: "+(h instanceof Error?h.message:String(h))+`
2521
+ `),1}let u;try{let h=AA(c.document).properties;for(let g of["Directory","NonInteractive"])if(Object.hasOwn(h,g))throw Error("Property '"+g+"' conflicts with an invocation fact in "+c.path+"; fix the file or run lmctl init");Object.assign(h,{Directory:a,NonInteractive:Rn(e)}),u=kI(d,c.config,{properties:h,path:c.path,argv:[]})}catch(h){return e.stderr.write("error: "+(h instanceof Error?h.message:String(h))+`
2522
2522
  `),1}let f=M2(a);if(x2(HA(f),{recursive:!0}),WA(f,u,"utf8"),e.stdout.write(`Wrote ${f}
2523
2523
  `),await vr([f],e)!==0)return e.stderr.write(`error: ${f} failed lint after substitution -- check the values in ~/.lmctl/init.toml.
2524
2524
  `),1;if(r)return e.stdout.write(`Edit ${f} if needed, then run: lmctl seed ${f}
2525
2525
  `),0;let p=await sa([f],e);return p!==0?p:s?0:(n.openTerminal??n_)([f,"Lead"],e)}async function P2(t,e={stdout:process.stdout,stderr:process.stderr},n={}){if(t[0]==="--help"||t[0]==="-h")return e.stdout.write(BA),0;let r=n.fetchFn??fetch,s=n.cwd??e.cwd??process.cwd();try{if(t.length===0){let m=await jA(`${o_}/index.txt`,r);return e.stdout.write(m.endsWith(`
2526
2526
  `)?m:`${m}
2527
2527
  `),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&&i_(wd(s,i))&&O2(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=`${o_}/${l}.lms`;else if(/^https?:\/\//i.test(l))d=l;else if(i_(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=`${o_}/${l.replace(/\.lms$/,"")}.lms`;else throw new Error("Expected a sample name, script URL, or local .lms file.");let f=d?await jA(d,r):C2(u,"utf8");e.stderr.write(`Running ${d??u}
2528
- `);{let m=n.launch??us,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:HA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let g=N2(vd(L2(),"lmctl-quickrun-"));try{let h=vd(g,"download.lms");return WA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{R2(g,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2528
+ `);{let m=n.launch??us,p={...e,cwd:s,...n.initConfigPath?{env:{...e.env,LMCTL_HOME:HA(n.initConfigPath)}}:{}};if(u)return m([u,...c],p);let _=N2(vd(L2(),"lmctl-quickrun-"));try{let h=vd(_,"download.lms");return WA(h,f,"utf8"),await m(["--base-dir",s,"--source-name",d,h,...c],p)}finally{R2(_,{recursive:!0,force:!0})}}}catch(o){return e.stderr.write(`error: ${o instanceof Error?o.message:String(o)}
2529
2529
  `),1}}var o_,BA,qA=x(()=>{"use strict";NA();id();le();as();da();hn();s_();o_="https://lmctl.com/quickrun",BA=`usage: lmctl quickrun
2530
2530
  lmctl quickrun <sample|url|file.lms> [script arguments...]
2531
2531
 
@@ -2550,14 +2550,14 @@ Legacy .lmctl templates still accept --no-seed and --no-terminal.
2550
2550
  `),1}let f=KA(l,`${r}_hello.lmctl`);for(let T=2;U2(f);T++)f=KA(l,`${r}_hello${T}.lmctl`);if(F2(f,u,{encoding:"utf8",flag:"wx"}),e.stdout.write(`Wrote ${f}
2551
2551
  `),o!==void 0){let T={write:()=>!0},w=await mh(f,{...e,stdout:T,stderr:T,env:{...process.env,...e.env}});if(w.status==="error")return JA(f,{force:!0}),e.stderr.write(`error: hello model override failed lint: ${w.errors.map(b=>b.message).join("; ")}
2552
2552
  `),1;let S=w.warnings.find(({message:b})=>(r==="codex"||r==="agy")&&b.includes(`model="${o}" is not in ${r}'s live model catalog`));if(S)return JA(f,{force:!0}),e.stderr.write(`error: hello model override refused: ${S.message}
2553
- `),1}let m=`s=lm_seed(args[0]);if(s.status!="ok"){lm_exit(${YA});}r=lm_prompt(args[0],"Lead",args[1]);if(r.status!="ok"){lm_error(r.error);lm_exit(1);}println(r.reply);`,p="",g=new Set,h=(T=!1)=>{let w;for(;(w=p.indexOf(`
2554
- `))>=0;){let S=p.slice(0,w);if(p=p.slice(w+1),S.startsWith("error: ")){if(g.has(S))continue;g.add(S)}e.stderr.write(S+`
2555
- `)}T&&p&&(e.stderr.write(p),p="")},_={...e,cwd:l,stderr:{write:T=>{p+=T,h()}}},E=await(n.launch??us)(["-e",m,f,s],_);if(h(!0),E===YA)return 1;let y=GA(f);return e.stdout.write(`
2553
+ `),1}let m=`s=lm_seed(args[0]);if(s.status!="ok"){lm_exit(${YA});}r=lm_prompt(args[0],"Lead",args[1]);if(r.status!="ok"){lm_error(r.error);lm_exit(1);}println(r.reply);`,p="",_=new Set,h=(T=!1)=>{let w;for(;(w=p.indexOf(`
2554
+ `))>=0;){let S=p.slice(0,w);if(p=p.slice(w+1),S.startsWith("error: ")){if(_.has(S))continue;_.add(S)}e.stderr.write(S+`
2555
+ `)}T&&p&&(e.stderr.write(p),p="")},g={...e,cwd:l,stderr:{write:T=>{p+=T,h()}}},E=await(n.launch??us)(["-e",m,f,s],g);if(h(!0),E===YA)return 1;let y=GA(f);return e.stdout.write(`
2556
2556
  Continue with this team:
2557
2557
  Open TUI: lmctl terminal ${y} Lead
2558
2558
  Send a prompt: lmctl prompt ${y} Lead "your next prompt"
2559
2559
  `),E}function B2(t,e,n){let r=!1,s=/\s/u.test(n)?`"${n}"`:n,o=t.split(`
2560
- `).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(H2)],p=h=>{let _=m.filter(E=>E[1]===h).at(-1);return _===void 0?void 0:_[2]??_[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 g=f;for(let h of m.filter(_=>_[1]==="model").reverse()){let _=h.index;g=g.slice(0,_).replace(/\s+$/u,"")+g.slice(_+h[0].length)}return`${g.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(`
2560
+ `).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(H2)],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(`
2561
2561
  `),a,l;try{a=Cn(t,"hello").members,l=Cn(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 zA,YA,j2,H2,ZA=x(()=>{"use strict";da();id();Oc();as();oo();Be();hn();VA();zA="https://lmctl.com/helloexample",YA=3,j2=`usage: lmctl hello <provider> -p "<prompt>"
2562
2562
 
2563
2563
  Downloads ${zA}/<provider>.lmctl, saves it as
@@ -2594,13 +2594,13 @@ Example:
2594
2594
  `),assistantTimestamp:TX(s[s.length-1]?.timestamp)}}function TX(t){if(t===void 0)return null;let e=t.getTime();return Number.isFinite(e)?t.toISOString():null}function wX(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 f_(t){let e=wX(t.config_warnings),n={id:t.id,kind:t.kind,origin:t.origin,status:t.status,holder_liveness:nr(t),from_identity:t.from_identity,target:t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,started_at:t.started_at,ended_at:t.ended_at,result:oN(t.result_summary),error:oN(t.error),...e!==void 0?{config_warnings:e}:{}};return t.error!==null&&fN.set(n,t.error),n}function vX(t,e){return t.scope==="self"?bX(t,e):IX(t,e)}function SX(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 bX(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"?SX(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:"),uN(n,t.transcript_harvest,"self"),n.push(""),n.push("activity from me:"),m_(n,p_(t.activity.from_me,e.sinceIso),"from-me"),n.push(""),n.push("activity to me:"),m_(n,p_(t.activity.to_me,e.sinceIso),"to-me"),n.push(""),n.push(dN(t)),n.join(`
2595
2595
  `)}function IX(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:"),uN(n,t.transcript_harvest,"db"),n.push(""),n.push("recent activity:"),m_(n,p_(t.activity,e.sinceIso),"db"),n.push(""),n.push(dN(t)),n.join(`
2596
2596
  `)}function dN(t){return Qo(t.db_path)}function m_(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Sd))kX(t,r,n);mN(t,e.length,Sd,"older")}function uN(t,e,n){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,Sd)){let s=n==="db"?` from ${_n(r.from_identity)} -> ${_n(r.target)}`:` -> ${_n(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}`)}mN(t,e.length,Sd,"more transcript harvest rows")}function p_(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 kX(t,e,n){let r=NX(e,n),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,o=e.error??e.result,i=ll(fN.get(e)??"",l_),a=o===null?"":` "${i??pN(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 NX(t,e){if(e==="from-me")return t.target===null?"":` -> ${_n(t.target)}`;if(e==="to-me")return` from ${_n(t.from_identity)}`;let n=t.target===null?"":` -> ${_n(t.target)}`;return` from ${_n(t.from_identity)}${n}`}function mN(t,e,n,r){let s=e-n;s>0&&t.push(` (+${s} ${r} -- use --json)`)}function oN(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function pN(t){let e=dT(t).replace(/\s+/g," ").trim();return e.length<=l_?e:`${e.slice(0,l_-3)}...`}function RX(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=rN?e:`${e.slice(0,rN-3)}...`}function Id(t){return(0,it.formatDuration)(t)}function ma(t){return(0,it.formatRelativeTime)(t)}function _n(t){if(t==="operator")return t;try{let e=rs(t);return`${nX(e.teamfile)}:${e.alias}`}catch{return t}}function LX(t){if(t===void 0)return{iso:new Date(Date.now()-aX).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 xX(t,e,n,r){let s=await W(t,d=>{let u=Ne(e,d),f=tn(u,d);if(f.parseErrors.length>0)throw new Error(f.parseErrors.join("; "));return{teamfile:u,teamName:f.name,targets:la(u,d,new Set,[])}}),o=Dh(s.teamfile),i=o.kind==="repo"?o:null,a=await ca(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(go(d.teamfile,d.alias))??ad(),probed:!1,detailLoaded:!1},f=await Ch(t,{teamfile:d.teamfile,alias:d.alias});if(f!==void 0&&(u.configWarnings=f),r&&d.sessionid!==null){u.probed=!0;let m=null;try{m=await je(d.sessionid,d.provider)}catch(p){t.stderr.write(`warning: failed to load session "${d.sessionid}" for ${d.reportPath} (${d.provider}): ${p instanceof Error?p.message:String(p)}
2597
- `)}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:a_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:Mh(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:$h(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(te(t,{schema_version:h_,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(DX(s.teamName,s.teamfile,o,l,r,c)),0)}function CX(t){return t.sessionid??"(not seeded)"}function OX(t){return t.sessionid===null?"not seeded":ld(t.liveness)}function DX(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 g of n.commits)i.push(` ${g.ref}: ${g.timestamp.toISOString()}`);i.push(` Uncommitted: ${Mt(n.working.uncommittedTracked)} changed (tracked), ${Mt(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 g of r){let h=g.declaredModel===null?"":` model=${g.declaredModel}`;if(g.sessionid===null?i.push(` ${g.reportPath}: not seeded provider=${g.provider}${h} (run: lmctl seed "${g.teamfile}")`):i.push(` ${g.reportPath}: ${ld(g.liveness)} provider=${g.provider}${h} session=${g.sessionid}`),g.configWarnings!==void 0)for(let _ of g.configWarnings)i.push(` config not applied: ${_}`)}return i.push(""),i.push("session detail (observed model, messages, tokens, limits) not probed -- use --details"),`${i.join(`
2597
+ `)}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:a_(m.messages),i!==null&&(u.activitySinceLastCommit={messageCount:m===null?null:Mh(m,i.since),tokens:null},u.cumulativeTokens=m===null?null:$h(m)??"n/a"),m?.messageCount===void 0?c=void 0:c!==void 0&&(c+=m.messageCount)}l.push(u)}return n?(te(t,{schema_version:h_,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(DX(s.teamName,s.teamfile,o,l,r,c)),0)}function CX(t){return t.sessionid??"(not seeded)"}function OX(t){return t.sessionid===null?"not seeded":ld(t.liveness)}function DX(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: ${Mt(n.working.uncommittedTracked)} changed (tracked), ${Mt(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(`
2598
2598
  `)}
2599
- `}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((g,h)=>h>=5?"right":"left"),d=!1,u=r.filter(g=>g.sessionLimit!=null),f=[];for(let g of r){let h=ak(g.lastContext??void 0,g.detailLoaded,ok);(h==="n/a"||g.cumulativeTokens==="n/a")&&(d=!0);let _=[(0,it.escapeCell)(CX(g)),(0,it.escapeCell)(g.reportPath),(0,it.escapeCell)(g.provider),(0,it.escapeCell)(g.observedModel??"(unknown)"),OX(g),Mt(g.messageCount),h];a!==null&&_.push(Mt(g.activitySinceLastCommit?.messageCount),Mt(g.activitySinceLastCommit?.tokens),ik(g.cumulativeTokens)),f.push(_)}let m=["TOTAL","","","","",Mt(o)];a!==null&&m.push("",Mt(MX(r)),Mt(null),Mt($X(r))),f.push(m);let p=(0,it.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2600
- `);if(i.push(p[0]),r.forEach((g,h)=>{if(i.push(p[h+1]),g.configWarnings!==void 0)for(let _ of g.configWarnings)i.push(` config not applied: ${_}`)}),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.
2599
+ `}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=ak(_.lastContext??void 0,_.detailLoaded,ok);(h==="n/a"||_.cumulativeTokens==="n/a")&&(d=!0);let g=[(0,it.escapeCell)(CX(_)),(0,it.escapeCell)(_.reportPath),(0,it.escapeCell)(_.provider),(0,it.escapeCell)(_.observedModel??"(unknown)"),OX(_),Mt(_.messageCount),h];a!==null&&g.push(Mt(_.activitySinceLastCommit?.messageCount),Mt(_.activitySinceLastCommit?.tokens),ik(_.cumulativeTokens)),f.push(g)}let m=["TOTAL","","","","",Mt(o)];a!==null&&m.push("",Mt(MX(r)),Mt(null),Mt($X(r))),f.push(m);let p=(0,it.formatTable)(f,{headers:l,align:c,margin:2}).split(`
2600
+ `);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.
2601
2601
  Right after a compaction the last completed turn IS the summarisation request, which carried the
2602
2602
  full pre-compaction prompt \u2014 so this reads the OLD large number while the live context is already
2603
- 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 g of u)i.push(` ${g.reportPath}: LIMITED resets_at=${Oh(g.sessionLimit)}`)}return`${i.join(`
2603
+ 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=${Oh(_.sessionLimit)}`)}return`${i.join(`
2604
2604
  `)}
2605
2605
  `}function MX(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 PX(t,e,n,r){let s=await W(t,p=>Xe(e,n,p)),o;try{o=await je(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=a_(o.messages),l=(await ca(t,[{teamfile:s.teamfile,alias:s.alias}])).get(go(s.teamfile,s.alias))??ad(),c=await Ch(t,{teamfile:s.teamfile,alias:s.alias}),d=Dh(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:Mh(o,u.since),tokens:null},cumulativeTokens:$h(o)}:{},createdAt:o.createdAt.toISOString(),modifiedAt:o.modifiedAt.toISOString()};if(r)return te(t,{schema_version:h_,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: ${Mt(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,it.formatCount)(o.totalInputTokens)} in / ${(0,it.formatCount)(o.totalOutputTokens)} out`;f.totalCachedInputTokens!==void 0&&(p+=` (cached: ${(0,it.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
2606
2606
  compaction it still reports the pre-compaction size (the summarisation request itself).`),i!==null&&m.push(` SessionLimit: LIMITED resets_at=${Oh(i)}`),m.push(` Created: ${f.createdAt}`),m.push(` Modified: ${f.modifiedAt}`),t.stdout.write(`${m.join(`
@@ -2624,15 +2624,15 @@ With a teamfile and an alias: single-member deep view (session detail, token
2624
2624
  breakdown, liveness with terminal-lock/in-flight holder info).
2625
2625
 
2626
2626
  --json emits { schema_version: 2, scope: 'self'|'db'|'team'|'member', ... }.
2627
- `,h_=2,Sd=5,aX=24*60*60*1e3,l_=72,rN=80;cX={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};fN=new WeakMap});import{isAbsolute as UX,resolve as _N,join as gN}from"node:path";function EN(t){let e=yN.get(t);if(!e)throw Error("Unknown context");return e.dal()}function wN(t){return t!==null&&typeof t=="object"&&TN.has(t)}function vN(t){try{if(!t||typeof t!="object"||Array.isArray(t))return pt("invalid_argument","Context needs an explicit options map");let e={...t},n=["pid","env","cwd","dbPath","dal","onProgress","onWarning","clock","interactive"];if(Object.keys(e).some(g=>!n.includes(g)))return pt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!UX(e.cwd))return pt("invalid_argument","Context needs an explicit env and absolute cwd");let r=Object.freeze({...e.env});if(Object.values(r).some(g=>g!==void 0&&typeof g!="string"))return pt("invalid_argument","Environment values must be strings or undefined");for(let g of["onProgress","onWarning","clock"])if(e[g]!==void 0&&typeof e[g]!="function")return pt("invalid_argument",g+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return pt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return pt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return pt("invalid_argument","pid must be a positive integer");let s=_N(e.cwd),o=r.LMCTL_HOME||(r.HOME?gN(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?gN(o,"state.db"):void 0)))return pt("invalid_argument","Context needs dbPath, LMCTL_DB, LMCTL_HOME or HOME");let a=!1,l,c,d,u=new AbortController,f=new Set,m=g=>{if(l){try{l.close()}catch(h){g.push(Tr(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:_N(s,Je(e.dbPath,r)),dal:e.dal,interactive:e.interactive??r.LMCTL_NON_INTERACTIVE!=="1",onProgress:e.onProgress??(()=>{}),onWarning:e.onWarning??(()=>{}),clock:e.clock??Date.now,get closed(){return a},close(){if(c)return c;let g;return c=new Promise(h=>{g=h}),a=!0,u.abort(),(async()=>{let h=[],_=0;for(let E of[...f])try{await E.close(),_++,f.delete(E)}catch(y){h.push(Tr(y))}h.length||m(h),g({released:_,errors:h})})(),c},finalizeSync(g){if(d)return d;a=!0;let h=[],_={released:0,errors:h};d=_,c??=Promise.resolve(_);let E=[];for(let y of[...f])try{let T=y.finalizeSync(g);T instanceof Promise?E.push(T.then(()=>{_.released++,f.delete(y)}).catch(w=>{h.push(Tr(w))})):(_.released++,f.delete(y))}catch(T){h.push(Tr(T))}return u.abort(g),E.length?c=Promise.all(E).then(()=>(h.length||m(h),_)):h.length||m(h),_}});return yN.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=$e({path:p.dbPath})}}),TN.add(p),FX.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return pt("invalid_argument","Invalid context: "+Tr(e))}}var yN,FX,TN,kd=x(()=>{"use strict";Lt();Nn();Wc();yN=new WeakMap;FX=new WeakMap,TN=new WeakSet});var Nr,NN,lse,cse,dse,use,fse,se,g_,gn,Ad,Ar,Nd,Ld,Eo,SN,bN,IN,To,Rd,jX,kN,AN,RN,y_=x(()=>{"use strict";Nr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Nr(e);Object.freeze(t)}return t},NN=Nr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),lse=Nr({status:"string",error:"string|null",code:"ErrorCode?"}),cse=Nr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),dse=Nr(["Provider1.Provider","Provider1.Model1","Provider1.Model2","Provider1.Model3","Provider2.Provider","Provider2.Model1","Provider2.Model2","Provider2.Model3","Provider3.Provider","Provider3.Model1","Provider3.Model2","Provider3.Model3"]),use=Nr(["Provider1","Provider2","Provider3"]),fse=Nr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),se={name:"ctx",type:"context"},g_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},gn={name:"teamfile",type:"string"},Ad={name:"alias",type:"string"},Ar={name:"prompt",type:"string"},Nd={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"}],Eo={name:"options",type:"map",optional:!0,keys:Ld},SN={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},bN={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},IN={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},To={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},Rd={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"}]},jX=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],kN={name:"options",type:"map",optional:!0,keys:jX},AN={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},RN=Nr([{name:"resolveProfilePath",implemented:!0,params:[se,g_],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[se,g_],statuses:["ok","error"],results:{error:"string|null",profile:"{path,raw,config}",values:"{Provider1..3,Model1..3,Directory,NonInteractive}",path:"string?",line:"number?",column:"number?"},effects:["file-read"],summary:"Read and validate the complete init profile without discovery or writes."},{name:"profileValues",implemented:!0,params:[{name:"config",type:"map"}],statuses:["ok","error"],results:{error:"string|null",Provider1:"string",Provider2:"string",Provider3:"string",Model1:"string",Model2:"string",Model3:"string"},effects:[],summary:"Validate and map slots to first-model environment values."},{name:"readPrompts",implemented:!0,params:[se,{name:"path",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"single",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",prompts:"string[]"},effects:["file-read"],summary:"Read prompt records without exiting the caller.",scriptBinding:{name:"lm_read_prompts",params:[{name:"batchfile",type:"string"},{name:"single",type:"boolean",optional:!0}]}},{name:"listMembers",implemented:!0,params:[se,gn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[gn]}},{name:"resolveMember",implemented:!0,params:[se,gn,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:[gn,Ad]}},{name:"lintTeam",implemented:!0,params:[se,gn],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:[gn]}},{name:"seedTeam",implemented:!0,params:[se,gn,SN],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:[gn,SN]}},{name:"promptAgent",implemented:!0,params:[se,Nd,Ar,Eo],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...AN,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Nd,Ar,Eo]}},{name:"promptMember",implemented:!0,params:[se,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"prompt",type:"string",required:!0},{name:"messageType",type:"string"},...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:[gn,Ad,Ar,{name:"options",type:"map",optional:!0,keys:[...Ld,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[se,{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"workspace",type:"string"},{name:"all",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",sessions:"Session[]"},effects:["file-read"],summary:"List native sessions in an explicit workspace.",scriptBinding:{name:"lm_session_list",params:[{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"sessiondir",type:"string"},{name:"all",type:"boolean"}]}]}},{name:"deleteSession",implemented:!0,params:[se,To,IN],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:[Nd,{...IN,optional:!0}]}},{name:"getSession",implemented:!0,params:[se,To],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:[To]}},{name:"reserveSession",implemented:!0,params:[se,To],statuses:["ok","busy","error"],results:{error:"string|null",reservation:"SessionReservation"},effects:[],summary:"Reserve context-local handoff admission and return a capability."},{name:"releaseSession",implemented:!0,params:[se,To,{name:"reservation",type:"SessionReservation",optional:!0}],statuses:["ok","error"],results:{error:"string|null"},effects:[],summary:"Release context-local handoff admission; an optional capability makes owned cleanup idempotent and replacement-safe."},{name:"openTeamBatch",returnsResource:!0,implemented:!0,params:[se,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"label",type:"string",required:!0},{name:"promptCount",type:"number",required:!0},{name:"legacy",type:"boolean"},...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:[se,{name:"batch",type:"BatchRef"},Ar,{name:"index",type:"number"},{name:"total",type:"number"}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn an owned live batch reference."},{name:"closeBatch",implemented:!0,params:[se,{name:"batch",type:"BatchRef"},{name:"options",type:"map",keys:[{name:"status",type:"string",required:!0,values:["done","error","cancelled"]},{name:"error",type:"string"}]}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close an owned batch."},{name:"readRatelimits",implemented:!0,params:[se,bN],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:[bN]}},{name:"openTerminal",implemented:!0,params:[se,{name:"target",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0}]},{name:"streams",type:"map",keys:[{name:"stdin",type:"stream",required:!0},{name:"stdout",type:"stream",required:!0},{name:"stderr",type:"stream",required:!0}]}],statuses:["ok","error"],results:{error:"string|null",code:"number|null",signal:"string|null"},effects:["provider","db","tty"],summary:"Open a native terminal with caller-supplied streams.",scriptBinding:{name:"lm_terminal",params:[gn,Ad]}},{name:"sessionAdmission",implemented:!0,params:[se,To],statuses:["ok","busy","error"],results:{error:"string|null",busyReason:"turn|handoff?"},effects:[],summary:"Query context-local session admission without exposing mutable sets."},{name:"promptReservedAgent",implemented:!0,params:[se,{name:"reservation",type:"SessionReservation"},Nd,Ar,Eo],statuses:["ok","busy","stalled","empty","error"],results:{...AN,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[se,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Synchronously release one batch on a close deadline without cancelling unrelated batches."},{name:"inspectBatch",implemented:!0,params:[se,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null",id:"string",closed:"boolean",member:"Member",rootId:"number|null"},effects:[],summary:"Read batch metadata without exposing native transports or lease capabilities."},{name:"openNativeSession",returnsResource:!0,implemented:!0,params:[se,{name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0},{name:"sessiondir",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"}]},Eo],statuses:["ok","busy","error"],results:{error:"string|null",session:"opaque context-bound NativeSessionRef"},effects:["provider","db","file-read"],summary:"Open a script-owned native conversation with existing receiver admission."},{name:"nativeSessionTurn",implemented:!0,params:[se,{name:"session",type:"NativeSessionRef"},Ar],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Record one unframed conversational turn through the existing recorder."},{name:"closeNativeSession",implemented:!0,params:[se,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close a script-owned native conversation and release its lease."},{name:"finalizeNativeSessionSync",implemented:!0,params:[se,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Critical synchronous native conversation lease release."},{name:"nativeSessionRequest",implemented:!0,params:[se,Rd,Ar,Eo],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Send a stateless native-id turn to a qualified conversation in the configured running lmbee service.",scriptBinding:{name:"lm_session_turn",params:[Rd,Ar,Eo]}},{name:"nativeSessionClose",implemented:!0,params:[se,Rd],statuses:["ok","busy","error"],results:{error:"string|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Close an idle service-hosted native conversation; an absent entry is already closed.",scriptBinding:{name:"lm_session_close",params:[Rd]}},{name:"loadProperties",implemented:!0,params:[se,g_],statuses:["ok","error"],results:{error:"string|null",path:"string",properties:"map",flat:"map",line:"number?",column:"number?"},effects:["file-read"],summary:"Read the complete hierarchical init.toml properties document through the canonical reader."},{name:"listRunning",implemented:!0,params:[se,kN],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:[kN]}}])});function LN(t){if(!wN(t))return pt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return pt("cancelled","Context is closed")}function xN(t){return RN.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var CN=x(()=>{"use strict";y_();kd();Wc()});import{isAbsolute as WX,resolve as HX}from"node:path";function Cd(t){return Number.isFinite(t)&&Math.abs(t)<=BX}function XX(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(NN.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 w_(t,e=Date.now()){if(t===void 0)return{windowMs:ON};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 T_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return E_;let s=e.get(n);if(s===void 0){try{s=Ie(n)}catch{s=null}e.set(n,s)}return s===null?E_:gl(s,r)?.model??E_}async function DN(t,e={}){let n=LN(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=xN("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=ON;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=w_(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=EN(t),i=e?.teamfile!==void 0?WX(e.teamfile)?e.teamfile:HX(t.cwd,e.teamfile):void 0,a=i!==void 0?Ne(i,o):void 0,l=e?.member!==void 0?e.member.toLowerCase():void 0,c=y=>!(a!==void 0&&y.target_teamfile!==a||l!==void 0&&(y.target_alias??"").toLowerCase()!==l),d=o.listAllRunningTrackedInvocations().filter(c),u=new Map,f=[],m=[];for(let y of d){let T=nr(y),w=r-new Date(y.started_at).getTime(),S={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:xd(y),model:T_(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({...S,stale_for_ms:w})}else f.push({...S,running_for_ms:w,holder_liveness:T??"unknown"})}let p=new Set(d.map(xd).filter(y=>y!==null)),g=new Date(r-s).toISOString(),h=o.listRecentlyFinishedTrackedInvocations(g).filter(c),_=new Set,E=[];for(let y of h){let T=xd(y);T===null||p.has(T)||_.has(T)||(_.add(T),E.push({id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:T,model:T_(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,g).filter(S=>!y.has(S.id)&&c(S));if(w.length===0)break;T=[];for(let S of w){y.add(S.id),T.push(S.id);let b=xd(S);E.push({id:S.id,kind:S.kind,origin:S.origin,from_identity:S.from_identity,target:b,model:T_(S,u),status:S.status,started_at:S.started_at,ended_at:S.ended_at,idle_ms:r-new Date(S.ended_at).getTime(),ran_ms:new Date(S.ended_at).getTime()-new Date(S.started_at).getTime(),error:S.error,parent_invocation_id:S.parent_invocation_id})}}}return{status:"ok",error:null,running:f,dead:m,idle:E}}catch(o){return{status:"error",error:o instanceof Error?o.message:String(o),code:XX(o),running:[],dead:[],idle:[]}}}var ON,BX,E_,MN=x(()=>{"use strict";kd();CN();y_();Ht();Al();Be();nn();ON=24*60*60*1e3,BX=864e13;E_="default"});var WN={};me(WN,{_setRunningWatchMaxTicksForTests:()=>VX,runRunning:()=>nq});import{resolve as qX}from"node:path";function VX(t){S_=t??void 0}function KX(t){let e=t.split(`
2627
+ `,h_=2,Sd=5,aX=24*60*60*1e3,l_=72,rN=80;cX={name:"status",allowsBareTeamfile:!0,supportsRaw:!1};fN=new WeakMap});import{isAbsolute as UX,resolve as _N,join as gN}from"node:path";function EN(t){let e=yN.get(t);if(!e)throw Error("Unknown context");return e.dal()}function wN(t){return t!==null&&typeof t=="object"&&TN.has(t)}function vN(t){try{if(!t||typeof t!="object"||Array.isArray(t))return pt("invalid_argument","Context needs an explicit options map");let e={...t},n=["pid","env","cwd","dbPath","dal","onProgress","onWarning","clock","interactive"];if(Object.keys(e).some(_=>!n.includes(_)))return pt("invalid_argument","Unknown context option");if(!e.env||typeof e.env!="object"||Array.isArray(e.env)||typeof e.cwd!="string"||!UX(e.cwd))return pt("invalid_argument","Context needs an explicit env and absolute cwd");let r=Object.freeze({...e.env});if(Object.values(r).some(_=>_!==void 0&&typeof _!="string"))return pt("invalid_argument","Environment values must be strings or undefined");for(let _ of["onProgress","onWarning","clock"])if(e[_]!==void 0&&typeof e[_]!="function")return pt("invalid_argument",_+" must be a function");if(e.interactive!==void 0&&typeof e.interactive!="boolean")return pt("invalid_argument","interactive must be a boolean");if(e.dbPath!==void 0&&(typeof e.dbPath!="string"||!e.dbPath))return pt("invalid_argument","dbPath must be a nonempty string");if(e.pid!==void 0&&(!Number.isInteger(e.pid)||e.pid<=0))return pt("invalid_argument","pid must be a positive integer");let s=_N(e.cwd),o=r.LMCTL_HOME||(r.HOME?gN(r.HOME,".lmctl"):void 0);if(!(e.dbPath||r.LMCTL_DB||(o?gN(o,"state.db"):void 0)))return pt("invalid_argument","Context needs dbPath, LMCTL_DB, LMCTL_HOME or HOME");let a=!1,l,c,d,u=new AbortController,f=new Set,m=_=>{if(l){try{l.close()}catch(h){_.push(Tr(h))}l=void 0}},p=Object.freeze({status:"ok",error:null,pid:e.pid,signal:u.signal,env:r,cwd:s,dbPath:_N(s,Je(e.dbPath,r)),dal:e.dal,interactive:e.interactive??r.LMCTL_NON_INTERACTIVE!=="1",onProgress:e.onProgress??(()=>{}),onWarning:e.onWarning??(()=>{}),clock:e.clock??Date.now,get closed(){return a},close(){if(c)return c;let _;return c=new Promise(h=>{_=h}),a=!0,u.abort(),(async()=>{let h=[],g=0;for(let E of[...f])try{await E.close(),g++,f.delete(E)}catch(y){h.push(Tr(y))}h.length||m(h),_({released:g,errors:h})})(),c},finalizeSync(_){if(d)return d;a=!0;let h=[],g={released:0,errors:h};d=g,c??=Promise.resolve(g);let E=[];for(let y of[...f])try{let T=y.finalizeSync(_);T instanceof Promise?E.push(T.then(()=>{g.released++,f.delete(y)}).catch(w=>{h.push(Tr(w))})):(g.released++,f.delete(y))}catch(T){h.push(Tr(T))}return u.abort(_),E.length?c=Promise.all(E).then(()=>(h.length||m(h),g)):h.length||m(h),g}});return yN.set(p,{resources:f,dal(){if(e.dal)return e.dal;if(l)return l;if(a)throw Error("Context is closed");return l??=$e({path:p.dbPath})}}),TN.add(p),FX.set(p,{activeAgents:new WeakSet,activeSessions:new Set,handoffSessions:new Set,reservations:new Map}),p}catch(e){return pt("invalid_argument","Invalid context: "+Tr(e))}}var yN,FX,TN,kd=x(()=>{"use strict";Lt();Nn();Wc();yN=new WeakMap;FX=new WeakMap,TN=new WeakSet});var Nr,NN,cse,dse,use,fse,mse,se,g_,gn,Ad,Ar,Nd,Ld,Eo,SN,bN,IN,To,Rd,jX,kN,AN,RN,y_=x(()=>{"use strict";Nr=t=>{if(t&&typeof t=="object"){for(let e of Object.values(t))Nr(e);Object.freeze(t)}return t},NN=Nr(["invalid_argument","not_found","missing","read","syntax","schema","busy","provider","noninteractive","cancelled","internal","closed","service_unavailable","outcome_unknown"]),cse=Nr({status:"string",error:"string|null",code:"ErrorCode?"}),dse=Nr(["Provider1","Provider2","Provider3","Model1","Model2","Model3"]),use=Nr(["Provider1.Provider","Provider1.Model1","Provider1.Model2","Provider1.Model3","Provider2.Provider","Provider2.Model1","Provider2.Model2","Provider2.Model3","Provider3.Provider","Provider3.Model1","Provider3.Model2","Provider3.Model3"]),fse=Nr(["Provider1","Provider2","Provider3"]),mse=Nr({Provider1:"PROPS.Provider1.Provider",Provider2:"PROPS.Provider2.Provider",Provider3:"PROPS.Provider3.Provider",Model1:"PROPS.Provider1.Model1",Model2:"PROPS.Provider2.Model1",Model3:"PROPS.Provider3.Model1"}),se={name:"ctx",type:"context"},g_={name:"options",type:"map",optional:!0,keys:[{name:"path",type:"string"}]},gn={name:"teamfile",type:"string"},Ad={name:"alias",type:"string"},Ar={name:"prompt",type:"string"},Nd={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"}],Eo={name:"options",type:"map",optional:!0,keys:Ld},SN={name:"options",type:"map",optional:!0,keys:[{name:"preamble",type:"string|map"}]},bN={name:"options",type:"map",optional:!0,keys:[{name:"providers",type:"list"},{name:"provider",type:"string"},{name:"timeoutSeconds",type:"number"}]},IN={name:"options",type:"map",keys:[{name:"force",type:"boolean",required:!0,values:[!0]}]},To={name:"target",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0}]},Rd={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"}]},jX=[{name:"teamfile",type:"string"},{name:"member",type:"string"},{name:"since",type:"string"},{name:"tree",type:"boolean"}],kN={name:"options",type:"map",optional:!0,keys:jX},AN={error:"string|null",reply:"string",sessionid:"string|null",messageId:"string|null",teamChatLogId:"number|null"},RN=Nr([{name:"resolveProfilePath",implemented:!0,params:[se,g_],statuses:["ok","error"],results:{error:"string|null",path:"string"},effects:[],summary:"Resolve a profile path solely from explicit context."},{name:"loadProfile",implemented:!0,params:[se,g_],statuses:["ok","error"],results:{error:"string|null",profile:"{path,raw,config}",values:"{Provider1..3,Model1..3,Directory,NonInteractive}",path:"string?",line:"number?",column:"number?"},effects:["file-read"],summary:"Read and validate the complete init profile without discovery or writes."},{name:"profileValues",implemented:!0,params:[{name:"config",type:"map"}],statuses:["ok","error"],results:{error:"string|null",Provider1:"string",Provider2:"string",Provider3:"string",Model1:"string",Model2:"string",Model3:"string"},effects:[],summary:"Validate and map slots to first-model environment values."},{name:"readPrompts",implemented:!0,params:[se,{name:"path",type:"string"},{name:"options",type:"map",optional:!0,keys:[{name:"single",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",prompts:"string[]"},effects:["file-read"],summary:"Read prompt records without exiting the caller.",scriptBinding:{name:"lm_read_prompts",params:[{name:"batchfile",type:"string"},{name:"single",type:"boolean",optional:!0}]}},{name:"listMembers",implemented:!0,params:[se,gn],statuses:["ok","error"],results:{error:"string|null",members:"Member[]"},effects:["file-read"],summary:"List team members.",scriptBinding:{name:"lm_members",params:[gn]}},{name:"resolveMember",implemented:!0,params:[se,gn,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:[gn,Ad]}},{name:"lintTeam",implemented:!0,params:[se,gn],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:[gn]}},{name:"seedTeam",implemented:!0,params:[se,gn,SN],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:[gn,SN]}},{name:"promptAgent",implemented:!0,params:[se,Nd,Ar,Eo],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{...AN,messageId:"null",teamChatLogId:"null"},effects:["provider","db"],summary:"Turn a provider session without mutating the input member.",scriptBinding:{name:"lm_agent",params:[Nd,Ar,Eo]}},{name:"promptMember",implemented:!0,params:[se,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"prompt",type:"string",required:!0},{name:"messageType",type:"string"},...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:[gn,Ad,Ar,{name:"options",type:"map",optional:!0,keys:[...Ld,{name:"messageType",type:"string"}]}]}},{name:"listSessions",implemented:!0,params:[se,{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"workspace",type:"string"},{name:"all",type:"boolean"}]}],statuses:["ok","error"],results:{error:"string|null",sessions:"Session[]"},effects:["file-read"],summary:"List native sessions in an explicit workspace.",scriptBinding:{name:"lm_session_list",params:[{name:"options",type:"map",optional:!0,keys:[{name:"provider",type:"string"},{name:"sessiondir",type:"string"},{name:"all",type:"boolean"}]}]}},{name:"deleteSession",implemented:!0,params:[se,To,IN],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:[Nd,{...IN,optional:!0}]}},{name:"getSession",implemented:!0,params:[se,To],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:[To]}},{name:"reserveSession",implemented:!0,params:[se,To],statuses:["ok","busy","error"],results:{error:"string|null",reservation:"SessionReservation"},effects:[],summary:"Reserve context-local handoff admission and return a capability."},{name:"releaseSession",implemented:!0,params:[se,To,{name:"reservation",type:"SessionReservation",optional:!0}],statuses:["ok","error"],results:{error:"string|null"},effects:[],summary:"Release context-local handoff admission; an optional capability makes owned cleanup idempotent and replacement-safe."},{name:"openTeamBatch",returnsResource:!0,implemented:!0,params:[se,{name:"request",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0},{name:"label",type:"string",required:!0},{name:"promptCount",type:"number",required:!0},{name:"legacy",type:"boolean"},...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:[se,{name:"batch",type:"BatchRef"},Ar,{name:"index",type:"number"},{name:"total",type:"number"}],statuses:["ok","busy","stalled","empty","cancelled","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Turn an owned live batch reference."},{name:"closeBatch",implemented:!0,params:[se,{name:"batch",type:"BatchRef"},{name:"options",type:"map",keys:[{name:"status",type:"string",required:!0,values:["done","error","cancelled"]},{name:"error",type:"string"}]}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close an owned batch."},{name:"readRatelimits",implemented:!0,params:[se,bN],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:[bN]}},{name:"openTerminal",implemented:!0,params:[se,{name:"target",type:"map",keys:[{name:"teamfile",type:"string",required:!0},{name:"alias",type:"string",required:!0}]},{name:"streams",type:"map",keys:[{name:"stdin",type:"stream",required:!0},{name:"stdout",type:"stream",required:!0},{name:"stderr",type:"stream",required:!0}]}],statuses:["ok","error"],results:{error:"string|null",code:"number|null",signal:"string|null"},effects:["provider","db","tty"],summary:"Open a native terminal with caller-supplied streams.",scriptBinding:{name:"lm_terminal",params:[gn,Ad]}},{name:"sessionAdmission",implemented:!0,params:[se,To],statuses:["ok","busy","error"],results:{error:"string|null",busyReason:"turn|handoff?"},effects:[],summary:"Query context-local session admission without exposing mutable sets."},{name:"promptReservedAgent",implemented:!0,params:[se,{name:"reservation",type:"SessionReservation"},Nd,Ar,Eo],statuses:["ok","busy","stalled","empty","error"],results:{...AN,messageId:"null",teamChatLogId:"null"},effects:["provider"],summary:"Turn only the session authorized by a live context-bound reservation."},{name:"finalizeBatchSync",implemented:!0,params:[se,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Synchronously release one batch on a close deadline without cancelling unrelated batches."},{name:"inspectBatch",implemented:!0,params:[se,{name:"batch",type:"BatchRef"}],statuses:["ok","error"],results:{error:"string|null",id:"string",closed:"boolean",member:"Member",rootId:"number|null"},effects:[],summary:"Read batch metadata without exposing native transports or lease capabilities."},{name:"openNativeSession",returnsResource:!0,implemented:!0,params:[se,{name:"member",type:"map",keys:[{name:"provider",type:"string",required:!0},{name:"sessionid",type:"string",required:!0},{name:"sessiondir",type:"string"},{name:"model",type:"string"},{name:"effort",type:"string"}]},Eo],statuses:["ok","busy","error"],results:{error:"string|null",session:"opaque context-bound NativeSessionRef"},effects:["provider","db","file-read"],summary:"Open a script-owned native conversation with existing receiver admission."},{name:"nativeSessionTurn",implemented:!0,params:[se,{name:"session",type:"NativeSessionRef"},Ar],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null"},effects:["provider","db"],summary:"Record one unframed conversational turn through the existing recorder."},{name:"closeNativeSession",implemented:!0,params:[se,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["provider","db"],summary:"Idempotently close a script-owned native conversation and release its lease."},{name:"finalizeNativeSessionSync",implemented:!0,params:[se,{name:"session",type:"NativeSessionRef"}],statuses:["ok","error"],results:{error:"string|null"},effects:["db"],summary:"Critical synchronous native conversation lease release."},{name:"nativeSessionRequest",implemented:!0,params:[se,Rd,Ar,Eo],statuses:["ok","busy","stalled","empty","error"],results:{error:"string|null",reply:"string",messageId:"string|null",teamChatLogId:"number|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Send a stateless native-id turn to a qualified conversation in the configured running lmbee service.",scriptBinding:{name:"lm_session_turn",params:[Rd,Ar,Eo]}},{name:"nativeSessionClose",implemented:!0,params:[se,Rd],statuses:["ok","busy","error"],results:{error:"string|null",code:"ErrorCode?",outcome:"not_sent|completed|unknown?",service_epoch:"string|null?",connection_epoch:"number|null?",connection_state:"new|reused|reinitialized|null?"},effects:["provider","db","network"],summary:"Close an idle service-hosted native conversation; an absent entry is already closed.",scriptBinding:{name:"lm_session_close",params:[Rd]}},{name:"loadProperties",implemented:!0,params:[se,g_],statuses:["ok","error"],results:{error:"string|null",path:"string",properties:"map",flat:"map",line:"number?",column:"number?"},effects:["file-read"],summary:"Read the complete hierarchical init.toml properties document through the canonical reader."},{name:"listRunning",implemented:!0,params:[se,kN],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:[kN]}}])});function LN(t){if(!wN(t))return pt("invalid_argument","Expected a context created by createLmctlContext");if(t.closed)return pt("cancelled","Context is closed")}function xN(t){return RN.find(e=>e.name===t)?.params.find(e=>e.name==="options")?.keys?.map(e=>e.name)??[]}var CN=x(()=>{"use strict";y_();kd();Wc()});import{isAbsolute as WX,resolve as HX}from"node:path";function Cd(t){return Number.isFinite(t)&&Math.abs(t)<=BX}function XX(t){if(t&&typeof t=="object"){let e=t.code;if(typeof e=="string"){if(NN.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 w_(t,e=Date.now()){if(t===void 0)return{windowMs:ON};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 T_(t,e){let n=t.target_teamfile,r=t.target_alias;if(n===null||r===null)return E_;let s=e.get(n);if(s===void 0){try{s=Ie(n)}catch{s=null}e.set(n,s)}return s===null?E_:gl(s,r)?.model??E_}async function DN(t,e={}){let n=LN(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=xN("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=ON;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=w_(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=EN(t),i=e?.teamfile!==void 0?WX(e.teamfile)?e.teamfile:HX(t.cwd,e.teamfile):void 0,a=i!==void 0?Ne(i,o):void 0,l=e?.member!==void 0?e.member.toLowerCase():void 0,c=y=>!(a!==void 0&&y.target_teamfile!==a||l!==void 0&&(y.target_alias??"").toLowerCase()!==l),d=o.listAllRunningTrackedInvocations().filter(c),u=new Map,f=[],m=[];for(let y of d){let T=nr(y),w=r-new Date(y.started_at).getTime(),S={id:y.id,kind:y.kind,origin:y.origin,from_identity:y.from_identity,target:xd(y),model:T_(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({...S,stale_for_ms:w})}else f.push({...S,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:T_(y,u),status:y.status,started_at:y.started_at,ended_at:y.ended_at,idle_ms:r-new Date(y.ended_at).getTime(),ran_ms:new Date(y.ended_at).getTime()-new Date(y.started_at).getTime(),error:y.error,parent_invocation_id:y.parent_invocation_id}))}if(e?.tree===!0){let y=new Set([...f.map(w=>w.id),...m.map(w=>w.id),...E.map(w=>w.id)]),T=[...y];for(;T.length>0;){let w=o.listFinishedTrackedInvocationChildren(T,_).filter(S=>!y.has(S.id)&&c(S));if(w.length===0)break;T=[];for(let S of w){y.add(S.id),T.push(S.id);let b=xd(S);E.push({id:S.id,kind:S.kind,origin:S.origin,from_identity:S.from_identity,target:b,model:T_(S,u),status:S.status,started_at:S.started_at,ended_at:S.ended_at,idle_ms:r-new Date(S.ended_at).getTime(),ran_ms:new Date(S.ended_at).getTime()-new Date(S.started_at).getTime(),error:S.error,parent_invocation_id:S.parent_invocation_id})}}}return{status:"ok",error:null,running:f,dead:m,idle:E}}catch(o){return{status:"error",error:o instanceof Error?o.message:String(o),code:XX(o),running:[],dead:[],idle:[]}}}var ON,BX,E_,MN=x(()=>{"use strict";kd();CN();y_();Ht();Al();Be();nn();ON=24*60*60*1e3,BX=864e13;E_="default"});var WN={};me(WN,{_setRunningWatchMaxTicksForTests:()=>VX,runRunning:()=>nq});import{resolve as qX}from"node:path";function VX(t){S_=t??void 0}function KX(t){let e=t.split(`
2628
2628
  `,1)[0];return e.length<=b_?e:`${e.slice(0,b_)}\u2026`}function I_(t){return t.target!==null?_n(t.target):t.from_identity}function PN(t){return[(0,$t.escapeCell)(I_(t)),t.kind,"running",t.holder_liveness,(0,$t.escapeCell)(t.model),ma(t.started_at)]}function UN(t){return[(0,$t.escapeCell)(I_(t)),t.kind,"DEAD","",(0,$t.escapeCell)(t.model),`stale ${ma(t.started_at)}, holder process confirmed dead`]}function FN(t){let e=`ran ${Id(t.ran_ms)}, idle ${ma(t.ended_at)}`;return t.status==="error"&&t.error!==null&&t.error!==""&&(e+=` \u2014 ${(0,$t.escapeCell)(ll(t.error,b_)??KX(t.error))}`),[(0,$t.escapeCell)(I_(t)),t.kind,t.status,"",(0,$t.escapeCell)(t.model),e]}function v_(t){return t.filter(e=>e!=="").join(" ")}function jN(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 zX(t){let{roots:e,childrenByParent:n}=jN(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 QX(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}=jN(r),i=a=>({...a,children:(o.get(a.id)??[]).map(i)});return s.map(i)}function ZX(t,e){return e?{schema_version:$N,tree:QX(t.running,t.dead,t.idle)}:{schema_version:$N,running:t.running,dead:t.dead,idle:t.idle}}function eq(t){let e=[...t.running.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:v_(PN(r))})),...t.dead.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:v_(UN(r))})),...t.idle.map(r=>({id:r.id,parent_invocation_id:r.parent_invocation_id,started_at:r.started_at,line:v_(FN(r))}))],n=zX(e);return`${n.length>0?n.join(`
2629
2629
  `):" none"}
2630
2630
  `}function tq(t,e){let n=[{title:`Running (${t.running.length}):`,rows:t.running.map(PN)},{title:`Dead (reclaimable) (${t.dead.length}):`,rows:t.dead.map(UN)},{title:`Idle, finished in the last ${Id(e)} (${t.idle.length}):`,rows:t.idle.map(FN)}],r=["MEMBER","KIND","STATE","LIVENESS","MODEL","TIMING"],s=(0,$t.measureColumns)([{rows:[],headers:r},...n.map(a=>a.rows)],{max:YX}),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,$t.renderGrid)(a.rows,{widths:s,margin:2,...c?{headers:r}:{}}))}),`${i.join(`
2631
2631
  `)}
2632
2632
  `}async function nq(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${JX}
2633
- `),0;let n=ae(t,["--team","--member","--since","--watch-interval"],["--json","--tree","--watch"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json"),s=z(n,"--tree"),o=z(n,"--watch"),i=V(n,"--team"),a=V(n,"--member"),l=w_(V(n,"--since"));if("error"in l)return D(e,l.error);let c=V(n,"--watch-interval"),d=c===void 0?GX:Number.parseInt(c.replace(/s$/,""),10);if(!Number.isFinite(d)||d<1)return D(e,`invalid --watch-interval "${c}" (expected <N>s, N\u22651)`);let u=()=>W(e,async f=>{let m=vN({cwd:qX(e.cwd??process.cwd()),env:e.env??process.env,dal:f,dbPath:Pe(e)});if(m.status!=="ok")return D(e,m.error);let p=await DN(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 g=ZX(p,s);return o?e.stdout.write(`${JSON.stringify(g)}
2634
- `):te(e,g),0}return e.stdout.write(s?eq(p):tq(p,l.windowMs)),0});return o?await new Promise(f=>{let m=0,p=!1,g=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)}
2635
- `)}finally{p=!1}m+=1,S_!==void 0&&m>=S_&&g(E)}},_=setInterval(()=>{h(_)},d*1e3);h(_),process.once("SIGINT",()=>g(_)),process.once("SIGTERM",()=>g(_))}):u()}var $t,$N,GX,S_,JX,b_,YX,HN=x(()=>{"use strict";$t=Ut(xt(),1);kd();MN();le();__();Tt();$N=3,GX=2;JX=["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(`
2633
+ `),0;let n=ae(t,["--team","--member","--since","--watch-interval"],["--json","--tree","--watch"]);if(n.error!==void 0)return D(e,n.error);let r=z(n,"--json"),s=z(n,"--tree"),o=z(n,"--watch"),i=V(n,"--team"),a=V(n,"--member"),l=w_(V(n,"--since"));if("error"in l)return D(e,l.error);let c=V(n,"--watch-interval"),d=c===void 0?GX:Number.parseInt(c.replace(/s$/,""),10);if(!Number.isFinite(d)||d<1)return D(e,`invalid --watch-interval "${c}" (expected <N>s, N\u22651)`);let u=()=>W(e,async f=>{let m=vN({cwd:qX(e.cwd??process.cwd()),env:e.env??process.env,dal:f,dbPath:Pe(e)});if(m.status!=="ok")return D(e,m.error);let p=await DN(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 _=ZX(p,s);return o?e.stdout.write(`${JSON.stringify(_)}
2634
+ `):te(e,_),0}return e.stdout.write(s?eq(p):tq(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)}
2635
+ `)}finally{p=!1}m+=1,S_!==void 0&&m>=S_&&_(E)}},g=setInterval(()=>{h(g)},d*1e3);h(g),process.once("SIGINT",()=>_(g)),process.once("SIGTERM",()=>_(g))}):u()}var $t,$N,GX,S_,JX,b_,YX,HN=x(()=>{"use strict";$t=Ut(xt(),1);kd();MN();le();__();Tt();$N=3,GX=2;JX=["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(`
2636
2636
  `),b_=120;YX=[26,void 0,void 0,void 0,24,void 0]});var qN={};me(qN,{runPrices:()=>iq});import{existsSync as rq}from"node:fs";import{resolve as BN}from"node:path";function Od(t,e,n="price snapshot unavailable"){return e?te(t,{schema_version:1,status:"unavailable",reason:n}):t.stdout.write(`unavailable: ${n}
2637
2637
  `),0}function sq(t){let e=t?.code;return typeof e=="string"&&/SQLITE_(BUSY|LOCKED|READONLY|CANTOPEN)/.test(e)}function XN(t){return t.dal!==void 0?{db:t.dal,owned:!1}:{db:$e({path:Pe(t),recover:!1}),owned:!0}}function oq(t){if(t.owned)try{t.db.close()}catch{}}async function iq(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
2638
2638
  ${Dd}`),2):n==="update"?aq(t.slice(1),e):lq(t.slice(1),e)}async function aq(t,e){let n=ae(t,["--aliases"],["--json"]);if(n.error||n.positionals.length>1)return e.stderr.write(`error: ${n.error??"update accepts at most one FILE"}
@@ -2648,7 +2648,7 @@ hash: ${String(l.hash)}
2648
2648
  records: ${String(l.record_count)}
2649
2649
  age: ${String(l.age_seconds)}s${l.stale?" (stale)":""}
2650
2650
  `),0;let c=V(n,"--provider"),d=c!==void 0?[{provider:c,result:jt(c,s,a.catalog,a.aliases)}]:Object.keys(zt).map(T=>({provider:T,result:jt(T,s,a.catalog,a.aliases)})).filter(T=>T.result.offer!==null||T.result.state.kind==="known-unpriced"||T.result.state.kind==="unresolved"),u=d.filter(T=>T.result.offer!==null),f=new Set(u.map(T=>T.result.offer.route));if(c===void 0&&(f.size>1||u.length>0&&d.some(T=>T.result.offer===null)))return r?te(e,{...l,status:"ambiguous",model:s,providers:d.map(T=>T.provider)}):e.stderr.write(`ambiguous model ${s}; specify --provider
2651
- `),1;let m=d[0],p=u[0]??m,g=p?.result.offer??null,h=g===null?null:a.catalog?.records.find(T=>(T.record_id??`${T.source}:${T.source_model_id}`)===g.route)??null,_=g===null?{inputPer1m:null,outputPer1m:null,cacheReadPer1m:null,cacheWritePer1m:null}:Ho({input:0,cachedInput:0,cacheWrite:0,output:0},g.pricing),E={input_per_1m_tokens:_.inputPer1m,output_per_1m_tokens:_.outputPer1m,input_cache_read_per_1m_tokens:_.cacheReadPer1m,input_cache_write_per_1m_tokens:_.cacheWritePer1m},y={...l,model:s,provider:p?.provider??c??null,resolution:p?.result.state??{kind:"unknown",declared:s},provenance:p?.result.provenance??null,record_id:g?.route??null,record:h?{...h,pricing:g?.pricing??h.pricing}:null,rates:E,raw_rates:g?.pricing??null,cache_write_1h_requires_per_turn_split:g?.pricing.source_cost_fields?.cache_creation_input_token_cost_above_1hr!==void 0};return r?te(e,y):e.stdout.write(`${s}: ${y.resolution.kind}
2651
+ `),1;let m=d[0],p=u[0]??m,_=p?.result.offer??null,h=_===null?null:a.catalog?.records.find(T=>(T.record_id??`${T.source}:${T.source_model_id}`)===_.route)??null,g=_===null?{inputPer1m:null,outputPer1m:null,cacheReadPer1m:null,cacheWritePer1m:null}:Ho({input:0,cachedInput:0,cacheWrite:0,output:0},_.pricing),E={input_per_1m_tokens:g.inputPer1m,output_per_1m_tokens:g.outputPer1m,input_cache_read_per_1m_tokens:g.cacheReadPer1m,input_cache_write_per_1m_tokens:g.cacheWritePer1m},y={...l,model:s,provider:p?.provider??c??null,resolution:p?.result.state??{kind:"unknown",declared:s},provenance:p?.result.provenance??null,record_id:_?.route??null,record:h?{...h,pricing:_?.pricing??h.pricing}:null,rates:E,raw_rates:_?.pricing??null,cache_write_1h_requires_per_turn_split:_?.pricing.source_cost_fields?.cache_creation_input_token_cost_above_1hr!==void 0};return r?te(e,y):e.stdout.write(`${s}: ${y.resolution.kind}
2652
2652
  source: ${String(l.source)}
2653
2653
  hash: ${String(l.hash)}
2654
2654
  age: ${String(l.age_seconds)}s${l.stale?" (stale)":""}
@@ -2667,18 +2667,19 @@ cache write: ${String(y.rates.input_cache_write_per_1m_tokens??"n/a")}
2667
2667
  Read the stored snapshot without files/network, or show its source and age.
2668
2668
  Rates are base-tier USD per million; 1-hour write blends need turn counters.
2669
2669
  `});function at(t){if(t==null||typeof t=="boolean")return null;let e=Number(t);return Number.isFinite(e)?Math.round(Math.min(1,Math.max(0,e))*1e6)/1e6:null}function yn(t,e){if(t==null||typeof t=="boolean")return null;let n=Number(t);return at(e==="percent"?n/100:n)}function VN(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 JN(t){if(typeof t!="string"||t.trim()==="")return null;let e=Date.parse(t);return Number.isFinite(e)?Math.floor(e/1e3):null}function KN(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 YN(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 wo(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 dq)n=n.replace(r,"***REDACTED***");return n}function It(t){let e=at(t.used_fraction),n=at(t.remaining_fraction),r=t.resets_at==null?JN(t.resets_at_iso):Number(t.resets_at),s=t.resets_at_iso==null?VN(r):VN(JN(t.resets_at_iso)),o={bucket_id:t.bucket_id,...t.group_name!=null?{group_name:t.group_name}:{},window_type:t.window_type??"unknown",used_fraction:e??(n===null?null:at(1-n)),remaining_fraction:n??(e===null?null:at(1-e)),resets_at:r==null||!Number.isFinite(r)?null:Math.trunc(r),resets_at_iso:s,is_exhausted:t.is_exhausted??(n!==null?n<=0:e!==null?e>=1:null)};for(let i of["raw_value","raw_scale","limit_name","metered_feature","allowed","limit_reached"])t[i]!=null&&(o[i]=t[i]);return o}function Ge(t,e,n={}){let r={$schema:cq,provider:t,status:e,source:n.source??null,read_at:n.read_at??Math.floor(Date.now()/1e3),account_id:n.account_id??null,plan_type:n.plan_type??null,ordinary_usage_allowed:n.ordinary_usage_allowed??null,buckets:n.buckets??[]};for(let s of["credits","spend_control","characteristics","reason","detail","retry_after_seconds"])n[s]!=null&&(r[s]=n[s]);return r}function ht(t,e,n,r,s,o=[],i){return Ge(t,e,{source:s??null,reason:n,...r==null?{}:{detail:wo(r,o)},...i==null?{}:{retry_after_seconds:i}})}function zN(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 kt(t,e,n,r=[],s){if(!t.debug&&!t.onRawResponse)return;let o=wo(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:
2670
- ${o}`)}function vo(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=wo(r,n);return{...t,detail:s,provider_message:s}}var cq,dq,Bn=x(()=>{"use strict";cq="https://lmctl.com/schemas/lmratelimit-v1.json";dq=[/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 uq}from"node:child_process";import{readdirSync as fq,readFileSync as mq}from"node:fs";import{join as pq}from"node:path";function Sq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function bq(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 Iq(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 kq(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=Iq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=at(i/100);n.push(It({bucket_id:`${bq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:at(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:i,raw_scale:"remaining_percent"}))}return n.sort((r,s)=>String(r.group_name??"").localeCompare(String(s.group_name??""))||String(r.bucket_id??"").localeCompare(String(s.bucket_id??"")))}function pa(t,e,n){return ht("agy","provider_unavailable",t,e,"agy_cli_print")}function Aq(t,e,n={}){try{let r=Tq(Math.max(t,60)*1e3,Sq(e));if(kt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return pa("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return pa("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return pa("cli_failed",r.error.message,t);let s=kq(r.stdout??"");return s.length===0?pa("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ge("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return pa("cli_failed",r instanceof Error?r.message:String(r),t)}}function eR(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 Nq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=eR(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[QN],t[ZN],-1);try{for(let s of fq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of mq(pq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[QN],o[ZN],Number(s))}catch{}}catch{}return e}function Rq(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=yn(l.remainingFraction,"fraction");r.push(It({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:YN(l.window),used_fraction:c===null?null:at(1-c),remaining_fraction:c,resets_at_iso:l.resetTime??null,raw_value:l.remainingFraction??null,raw_scale:"remaining_fraction"}))}}return r.length===0?null:(r.sort((s,o)=>String(s.group_name??"").localeCompare(String(o.group_name??""))||String(s.bucket_id??"").localeCompare(String(o.bucket_id??""))),Ge("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function Lq(t,e,n={}){try{let s=vq(e).map(([a,l,c])=>[eR(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ht("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let o=[],i=Date.now()+t*1e3;for(let[a,l,c]of s){let d=i-Date.now();if(d<=0){o.push("overall connect deadline exceeded");break}try{let u=await wq(`http://${a}${hq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(kt(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=Rq(f);if(m)return m;o.push(`pid=${c}: response had no quota groups`)}else u.status===401||u.status===403?o.push(`pid=${c}: HTTP ${u.status} unauthorized`):o.push(`pid=${c}: HTTP ${u.status}`)}catch(u){o.push(`pid=${c}: ${u instanceof Error?u.message:String(u)}`)}}return ht("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${o.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return ht("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function tR(t){let e=await Lq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Aq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ht("agy","provider_unavailable","cli_and_language_server_unavailable",`cli: ${String(n.reason??n.status)} (${String(n.detail??"no detail")}); connect: ${String(e.reason??e.status)} (${String(e.detail??"no detail")})`,"agy_cli_print")}var QN,ZN,hq,_q,gq,yq,Eq,Tq,wq,vq,nR=x(()=>{"use strict";Bn();Bn();QN="ANTIGRAVITY_LS_ADDRESS",ZN="ANTIGRAVITY_CSRF_TOKEN",hq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",_q=["-p","/usage"],gq=(t,e)=>{let n=uq("agy",_q,{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}},yq=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()}},Eq=t=>Nq(t),Tq=gq,wq=yq,vq=Eq});import{randomUUID as oR}from"node:crypto";import{mkdirSync as xq,readFileSync as A_,realpathSync as Cq,renameSync as Oq,rmSync as N_,statSync as rR,writeFileSync as iR}from"node:fs";import{homedir as Dq}from"node:os";import{join as R_}from"node:path";import{setTimeout as Mq}from"node:timers/promises";function C_(t){return R_(t.CLAUDE_CONFIG_DIR??R_(t.HOME??Dq(),".claude"),".credentials.json")}function L_(t){let e=JSON.parse(A_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function x_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function aR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=C_(t);try{let n=x_(L_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Cq(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()+Uq>=t.expiresAt}function sR(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Fq(t,e){let n=`${t}.lmctl-refresh.lock`,r=R_(n,"owner.json"),s=oR();for(;;){e.throwIfAborted();try{xq(n,{mode:448});try{iR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw N_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(A_(r,"utf8")).token===s&&N_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(A_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-rR(n).mtimeMs>6e4}catch{try{i=Date.now()-rR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Mq(50,void 0,{signal:e})}}}async function lR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Fq(t.path,e);try{let r=x_(L_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!sR(r,t.oauth)&&!Md(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Pq,{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=L_(t.path),l=x_(a);if(!l||!sR(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}.${oR()}.tmp`;try{iR(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Oq(d,t.path)}finally{N_(d,{force:!0})}return c}finally{n()}}var $q,Pq,Uq,cR=x(()=>{"use strict";$q="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Pq="https://console.anthropic.com/v1/oauth/token",Uq=3e5});import{spawnSync as fR}from"node:child_process";function Hq(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 mR(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Bq(t){try{let e=fR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:mR(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Vt(t,e,n,r="claude_oauth_api",s){return ht("claude",t,e,n,r,void 0,s)}function Xq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function qq(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 Vq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=Gq.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(It({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:yn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:qq(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 Jq(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 Kq(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=_=>{let E=typeof _=="number"?_:typeof _=="string"&&_.trim()!==""?Number(_):NaN;return Number.isSafeInteger(E)&&E>=0&&E<=9?E:void 0},l=_=>{let E=typeof _=="number"?_:typeof _=="string"&&_.trim()!==""?Number(_):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=(_,E,y)=>E===void 0||y!==void 0&&y!=="USD"||l(_)===void 0?void 0:(l(_)/10**E).toFixed(2),p=yn(s?n?.percent:r?.utilization,"percent"),g=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 g=="boolean"?{reached:g}:{}};return Object.values(h).every(_=>_==null)?void 0:h}async function uR(t,e,n,r={}){try{let s=fR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:mR(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";kt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Vq(o);if(!i.length)return;let a=Jq(o);return Ge("claude",Ve.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:i,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function pR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=aR(e);if(s.error==="not_claude_ai_subscriber")return Vt(Ve.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Vt(Ve.unavailable,"credentials_missing",`credentials file not found: ${C_(e)}`);if(s.error)return Vt(Ve.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(dR))return Vt(Ve.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${dR} scope required by the usage endpoint`);let a=new AbortController,l=setTimeout(()=>a.abort(),t*1e3),c,d;try{let _=!1,E=async()=>{try{o=await lR({...s,oauth:o},a.signal),_=!0}catch(T){let w=T instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(T.message)?T.message:"refresh_failed";if(w==="refresh_http_429")return Vt(Ve.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Vt(Ve.expired,"oauth_refresh_locked","a previous Claude credential refresh exited without releasing its lock; remove the stale .credentials.json.lmctl-refresh.lock directory before retrying");let S=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Vt(S?Ve.expired:Ve.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${S?"; renew Claude login":"; try again later"}`)}};if(Md(o)){let T=await E();if(T)return T}let y=()=>fetch(`${jq}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":Wq,"Content-Type":"application/json","User-Agent":Bq(e)},signal:a.signal});if(c=await y(),d=await c.text(),kt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status),c.status===401&&!_&&s.path&&o.refreshToken){let T=await E();if(T)return T;c=await y(),d=await c.text(),kt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(_){let E=await uR(o,e,t,{debug:n,onRawResponse:r});return E||Vt(Ve.unavailable,"request_failed",`${_ instanceof Error?_.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(..._)=>vo(Vt(..._),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ve.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ve.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let _=Xq(c.headers),E=await uR(o,e,t,{debug:n,onRawResponse:r});return E||u(Ve.throttled,"rate_limited",`usage endpoint rate limited${_==null?"":`; retry after ${_}s`}`,"claude_oauth_api",_)}if(c.status!==200)return u(Ve.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Vt(Ve.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Vt(Ve.unavailable,"malformed_response","response was not an object");let m=f,p=Array.isArray(m.limits)?m.limits:[],g=p.length?p.flatMap(_=>{if(!_||typeof _!="object")return[];let E=_.kind,y=Hq(E==="session"?"session":E),T=_.scope?.model?.display_name,w=E==="session"?"session":E==="weekly_all"?"week-all-models":`week-scoped-${T||E}`;return[It({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:yn(_.percent,"percent"),resets_at_iso:_.resets_at,raw_value:_.percent,raw_scale:"used_percent"})]}):["five_hour","seven_day"].flatMap(_=>{let E=m[_];return!E||typeof E!="object"?[]:[It({bucket_id:_==="five_hour"?"session":"week-all-models",group_name:_==="five_hour"?"session":"weekly",window_type:_==="five_hour"?"five_hour":"weekly",used_fraction:yn(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=Kq(m.spend,m.extra_usage);return Ge("claude",Ve.ok,{source:"claude_oauth_api",account_id:null,plan_type:o.subscriptionType??o.rateLimitTier??null,ordinary_usage_allowed:null,buckets:g.sort((_,E)=>String(_.window_type).localeCompare(String(E.window_type))||String(_.bucket_id).localeCompare(String(E.bucket_id))),...h?{spend_control:h}:{}})}var jq,Wq,dR,Ve,Gq,hR=x(()=>{"use strict";Bn();cR();Bn();jq="https://api.anthropic.com",Wq="oauth-2025-04-20",dR="user:profile";Ve={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};Gq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as yR}from"node:crypto";import{mkdirSync as Yq,readFileSync as O_,realpathSync as zq,renameSync as Qq,rmSync as D_,statSync as _R,writeFileSync as ER}from"node:fs";import{homedir as Zq}from"node:os";import{join as M_}from"node:path";import{setTimeout as eG}from"node:timers/promises";function ha(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function P_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||M_(t.HOME||Zq(),".codex");return M_(e,"auth.json")}function $_(t){let e=ha(JSON.parse(O_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function TR(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=P_(t);try{let n=ha($_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:zq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function gR(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 rG(t,e){let n=`${t}.lmctl-refresh.lock`,r=M_(n,"owner.json"),s=yR();for(;;){e.throwIfAborted();try{Yq(n,{mode:448});try{ER(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw D_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(O_(r,"utf8")).token===s&&D_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(O_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-_R(n).mtimeMs>6e4}catch{try{i=Date.now()-_R(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await eG(50,void 0,{signal:e})}}}async function wR(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await rG(t.path,e);try{let r=$_(t.path),s=ha(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!gR(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(tG,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:nG})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=ha(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=$_(t.path),l=ha(a.tokens);if(!l||!gR(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}.${yR()}.tmp`;try{ER(u,JSON.stringify(d),{flag:"wx",mode:384}),Qq(u,t.path)}finally{D_(u,{force:!0})}return c}finally{n()}}var tG,nG,vR=x(()=>{"use strict";tG="https://auth.openai.com/oauth/token",nG="app_EMoamEEZ73f0CkXaXp7hrann"});function En(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function SR(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 bR(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function iG(t){if(En(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function aG(t){let e=[],n=En(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=En(n[i])?n[i]:void 0;if(!a)continue;let l=SR(a.limit_window_seconds);e.push(It({bucket_id:`codex-${bR(l)}`,group_name:"codex",window_type:l,used_fraction:yn(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(!En(i))continue;let a=En(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=En(a[m])?a[m]:void 0;if(!p)continue;let g=SR(p.limit_window_seconds);e.push(It({bucket_id:`${d}-${bR(g)}`,group_name:l||d,window_type:g,used_fraction:yn(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 lG(t){let e=En(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=En(t.spend_control)?t.spend_control:void 0,s=En(t.credits)?t.credits:void 0;return Ge("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:aG(t),...s?{credits:iG(s)}:{},...r?{spend_control:r}:{}})}async function IR(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=TR(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Ge("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${P_(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="",g=()=>[...d],h=(S,b)=>vo(Ge("codex",S,b),p,g()),_=!1,E=async()=>{if(!(_||!o.path||typeof i.refresh_token!="string"))try{let S=await wR({...o,tokens:{...i,refresh_token:f}},a.signal);typeof S.access_token=="string"&&(d.add(S.access_token),c=S.access_token),u=typeof S.account_id=="string"?S.account_id:u,typeof S.refresh_token=="string"&&(d.add(S.refresh_token),f=S.refresh_token),typeof S.id_token=="string"&&(d.add(S.id_token),m=S.id_token),_=!0;return}catch(S){let b=S instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(S.message)?S.message:"refresh_failed",I=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return Ge("codex",I?"auth_expired":"provider_unavailable",{source:"codex_http",reason:I?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${b})${I?"; renew Codex login":"; try again later"}`})}},y=()=>{let S={Authorization:`Bearer ${c}`,"User-Agent":oG,"Content-Type":"application/json",Accept:"application/json"};u&&(S["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||sG).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:S,signal:a.signal})},T=await y();if(p=await T.text(),kt({debug:r,onRawResponse:s},"codex_http",p,g(),T.status),T.status===401&&o.path&&f){let S=await E();if(S)return S;T=await y(),p=await T.text(),kt({debug:r,onRawResponse:s},"codex_http",p,g(),T.status)}if(T.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(T.status===429){let S=T.headers.get("retry-after"),b=S===null?void 0:Number.parseInt(S,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...b!==void 0&&Number.isFinite(b)&&b>=0?{retry_after_seconds:b}:{}})}if(!T.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${T.status}`,detail:"codex usage endpoint returned an unexpected status"});let w;try{w=JSON.parse(p)}catch(S){return Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:wo(String(S),d)})}return En(w)?lG(w):Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(u){let f=u instanceof Error?`${u.name}: ${u.message}`:String(u);return Ge("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:wo(f,d)})}finally{clearTimeout(l)}}var sG,oG,kR=x(()=>{"use strict";Bn();vR();Bn();sG="https://chatgpt.com/backend-api",oG="codex-cli"});import{createHash as cG,randomUUID as dG}from"node:crypto";import{readFileSync as xR,openSync as uG,fsyncSync as fG,closeSync as mG,mkdirSync as AR,writeFileSync as CR,renameSync as pG,rmSync as hG,rmdirSync as _G,statSync as U_,utimesSync as gG}from"node:fs";import{homedir as yG}from"node:os";import{basename as EG,dirname as TG,join as $d}from"node:path";import{setTimeout as OR}from"node:timers/promises";function vG(t){let e;try{e=xR(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(xR(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 DR(t){let e=t.KIMI_CODE_HOME??$d(t.HOME??yG(),".kimi-code"),n=vG(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=RR(t.KIMI_CODE_BASE_URL??n.base_url??NR),o=RR(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?F_:n["oauth.oauth_host"]??F_)),i=s===NR&&o===F_?"kimi-code":`kimi-code-env-${cG("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=EG(a,".json");return{home:e,path:c,lockTarget:$d(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function Ud(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 LR(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 SG(t,e){AR(TG(t),{recursive:!0}),CR(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{AR(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-U_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await OR(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=U_(n),s=()=>{let i;try{i=U_(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;gG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),_G(n)}catch{}}}}async function MR(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await SG(t.lockTarget,e);try{let r=Pd(t.path);if(!LR(r,t.token)&&!Ud(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:wG,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 OR(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(!LR(l,r)){if(!Ud(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}.${dG()}.tmp`;try{let u=uG(d,"wx",384);try{CR(u,JSON.stringify(c,null,2)+`
2671
- `),fG(u)}finally{mG(u)}n.assertOwned(),pG(d,t.path)}finally{hG(d,{force:!0})}return c}finally{n.release()}}var NR,F_,wG,RR,$R=x(()=>{"use strict";NR="https://api.kimi.com/coding/v1",F_="https://auth.kimi.com",wG="17e5f671-d194-4dfb-9706-5516cb48c098",RR=t=>t.trim().replace(/\/+$/,"")});function PR(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 UR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=DR(e)}catch(g){let h=g instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(g.message)?g.message:"credentials_unreadable";return ht("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let o=s.token,i=new AbortController,a=setTimeout(()=>i.abort(),t*1e3),l,c;try{let g=!1,h=async()=>{o=await MR({...s,token:o},i.signal),g=!0};Ud(o)&&await h();let _=()=>fetch(`${s.baseUrl}/usages`,{headers:{Authorization:`Bearer ${o.access_token}`,Accept:"application/json"},signal:i.signal});l=await _(),c=await l.text(),kt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status),l.status===401&&!g&&o.refresh_token&&(await h(),l=await _(),c=await l.text(),kt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status))}catch(g){let h=g instanceof Error&&/^(no_refresh_token|credentials_changed|credentials_revoked|invalid_refresh_response|refresh_locked|refresh_lock_stale|refresh_lock_failed|refresh_lock_lost|refresh_request_failed|refresh_http_\d+)$/.test(g.message)?g.message:"request_failed",_=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":_?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return ht("kimi",_?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(g,h,_)=>vo(ht("kimi",g,h,h,"kimi_http",[],_),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 g=zN(l.headers);return d("reader_throttled","HTTP 429 from Kimi usage endpoint",g)}if(l.status!==200)return d("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let u;try{u=JSON.parse(c)}catch{return ht("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ht("kimi","provider_unavailable","malformed_response","response was not an object");let f=[],m=new Set;function p(g){let h=String(g.bucket_id),_=h,E=2;for(;m.has(h);)h=`${_}-${E}`,E++;m.add(h),g.bucket_id=h,f.push(It(g))}if(Array.isArray(u.limits))for(let g of u.limits){if(!g||typeof g!="object")continue;let h=g.window,_=g.detail;if(!h||typeof h!="object"||!_||typeof _!="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=KN(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=PR(_);if(!w)continue;let{used:S,limit:b,remaining:I}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:at(S/b),remaining_fraction:at(I/b),resets_at_iso:_.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let g=PR(u.usage);g&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:at(g.used/g.limit),remaining_fraction:at(g.remaining/g.limit),resets_at_iso:u.usage.resetTime,raw_value:g.used,raw_scale:"count"})}if(u.usages&&typeof u.usages=="object"){let g=[{key:"limit_5h",id:"kimi-5h",type:"five_hour"},{key:"limit_7d",id:"kimi-weekly",type:"weekly"},{key:"limit_month_total",id:"kimi-monthly",type:"monthly"},{key:"limit_month_code",id:"kimi-monthly-code",type:"monthly"}];for(let{key:h,id:_,type:E}of g){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(_)||(m.add(_),f.push(It({bucket_id:_,window_type:E,used_fraction:at(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Ge("kimi","ok",{source:"kimi_http",buckets:f})}var FR=x(()=>{"use strict";Bn();$R();Bn()});async function jR(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(!Fd.includes(a))return{status:"error",error:`unknown provider: ${a} (valid targets: ${Fd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??bG;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:IR,agy:tR,claude:pR,kimi:UR}).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 Fd,bG,WR=x(()=>{"use strict";nR();hR();kR();FR();Fd=["all","codex","agy","claude","kimi"],bG=15});var qR={};me(qR,{runRatelimit:()=>LG});function j_(t){return typeof t=="object"&&t!==null}function IG(t){return(0,We.formatPercent)(typeof t=="number"?t:null)}function kG(t,e){let n=typeof e.bucket_id=="string"&&e.bucket_id!==""?e.bucket_id:"unknown-bucket";return n==="session"?n="5h":n==="week-all-models"?n="weekly":n.startsWith("week-scoped-")&&(n=`weekly-${n.slice(12)}`),t!==""&&!n.startsWith(`${t}-`)&&(n=`${t}-${n}`),(0,We.escapeCell)(n)}function NG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,We.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,We.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=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,We.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,We.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,We.formatDuration)(f,{maxUnit:"d",style:"compact"})}`}}let a=[];e.is_exhausted===!0&&a.push("[EXHAUSTED]"),e.allowed===!1&&a.push("allowed=false"),e.limit_reached===!0&&a.push("limit_reached");let l=[kG(t,e),`${(0,We.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${IG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function RG(t){let e=typeof t.provider=="string"&&t.provider!==""?t.provider:"unknown",n=typeof t.status=="string"?t.status:"unknown",r=typeof t.source=="string"&&t.source!==""?t.source:"unknown source",s=typeof t.reason=="string"?t.reason:"",o=`${e}: ${n} (${r})`;n!=="ok"&&typeof t.provider_message=="string"&&t.provider_message.trim()?o=`${e}: ${(0,We.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&XR.has(s)?(o=`${e}: not installed/configured (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n!=="ok"&&(o+=` -- ${s!==""?s:"no reason given"}`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`),n==="provider_unavailable"&&s!=="oauth_refresh_failed"&&!/^(credentials_|config_|credential_storage_|refresh_)/.test(s)&&(o+=` (${e} server-side, not lmctl \u2014 try again later)`));let i=typeof t.plan_type=="string"?t.plan_type.trim():"";i&&!["?","unknown","null","n/a"].includes(i.toLowerCase())&&(o+=` (${(0,We.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(j_).map(d=>NG(a,d)):[],c=[];if(j_(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(j_(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 W_(t,e){return t.stderr.write(`error: ${e}
2670
+ ${o}`)}function vo(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=wo(r,n);return{...t,detail:s,provider_message:s}}var cq,dq,Bn=x(()=>{"use strict";cq="https://lmctl.com/schemas/lmratelimit-v1.json";dq=[/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 uq}from"node:child_process";import{readdirSync as fq,readFileSync as mq}from"node:fs";import{join as pq}from"node:path";function Sq(t){return Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("ANTIGRAVITY")))}function bq(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 Iq(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 kq(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=Iq(s[1]);if(!o)continue;let i=Number(s[2].replace(/%$/,"").trim());if(!Number.isFinite(i))continue;let a=at(i/100);n.push(It({bucket_id:`${bq(s[0])}-${e[o]}`,group_name:s[0],window_type:o,used_fraction:a===null?null:at(1-a),remaining_fraction:a,resets_at_iso:s[3]||null,raw_value:i,raw_scale:"remaining_percent"}))}return n.sort((r,s)=>String(r.group_name??"").localeCompare(String(s.group_name??""))||String(r.bucket_id??"").localeCompare(String(s.bucket_id??"")))}function pa(t,e,n){return ht("agy","provider_unavailable",t,e,"agy_cli_print")}function Aq(t,e,n={}){try{let r=Tq(Math.max(t,60)*1e3,Sq(e));if(kt(n,"agy_cli_print",r.stdout??"",[e.ANTIGRAVITY_CSRF_TOKEN]),r.error?.code==="ENOENT")return pa("agy_not_found","the agy CLI is not on PATH",t);if(r.error?.code==="ETIMEDOUT")return pa("cli_timeout","agy -p /usage did not finish in time",t);if(r.error)return pa("cli_failed",r.error.message,t);let s=kq(r.stdout??"");return s.length===0?pa("cli_unparseable",`exit ${r.status??1}; no buckets parsed from CLI output`,t):Ge("agy","ok",{source:"agy_cli_print",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:s})}catch(r){return pa("cli_failed",r instanceof Error?r.message:String(r),t)}}function eR(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 Nq(t){let e=[],n=new Set,r=(s,o,i)=>{if(!s||!o)return;let a=eR(s);!a||n.has(`${a}\0${o}`)||(n.add(`${a}\0${o}`),e.push([a,o,i]))};r(t[QN],t[ZN],-1);try{for(let s of fq("/proc"))if(/^\d+$/.test(s))try{let o={};for(let i of mq(pq("/proc",s,"environ")).toString("utf8").split("\0")){let a=i.indexOf("=");a>0&&(o[i.slice(0,a)]=i.slice(a+1))}r(o[QN],o[ZN],Number(s))}catch{}}catch{}return e}function Rq(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=yn(l.remainingFraction,"fraction");r.push(It({bucket_id:l.bucketId??l.displayName??"unknown",group_name:i,window_type:YN(l.window),used_fraction:c===null?null:at(1-c),remaining_fraction:c,resets_at_iso:l.resetTime??null,raw_value:l.remainingFraction??null,raw_scale:"remaining_fraction"}))}}return r.length===0?null:(r.sort((s,o)=>String(s.group_name??"").localeCompare(String(o.group_name??""))||String(s.bucket_id??"").localeCompare(String(o.bucket_id??""))),Ge("agy","ok",{source:"agy_connect_rpc",account_id:null,plan_type:null,ordinary_usage_allowed:null,buckets:r}))}async function Lq(t,e,n={}){try{let s=vq(e).map(([a,l,c])=>[eR(a),l,c]).filter(a=>a[0]!==null);if(s.length===0)return ht("agy","provider_unavailable","no_active_session","no live agy process exposed ANTIGRAVITY_LS_ADDRESS/ANTIGRAVITY_CSRF_TOKEN","agy_connect_rpc");let o=[],i=Date.now()+t*1e3;for(let[a,l,c]of s){let d=i-Date.now();if(d<=0){o.push("overall connect deadline exceeded");break}try{let u=await wq(`http://${a}${hq}`,{"Content-Type":"application/json","Connect-Protocol-Version":"1","x-codeium-csrf-token":l},d);if(kt(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=Rq(f);if(m)return m;o.push(`pid=${c}: response had no quota groups`)}else u.status===401||u.status===403?o.push(`pid=${c}: HTTP ${u.status} unauthorized`):o.push(`pid=${c}: HTTP ${u.status}`)}catch(u){o.push(`pid=${c}: ${u instanceof Error?u.message:String(u)}`)}}return ht("agy","provider_unavailable","no_active_session",`all candidate language servers failed: ${o.slice(0,5).join("; ")}`,"agy_connect_rpc",s.map(([,a])=>a))}catch(r){return ht("agy","provider_unavailable","connect_failed",r instanceof Error?r.message:String(r),"agy_connect_rpc")}}async function tR(t){let e=await Lq(t.timeoutSeconds,t.env,t);if(e.status==="ok")return e;let n=Aq(t.timeoutSeconds,t.env,t);return n.status==="ok"?n:ht("agy","provider_unavailable","cli_and_language_server_unavailable",`cli: ${String(n.reason??n.status)} (${String(n.detail??"no detail")}); connect: ${String(e.reason??e.status)} (${String(e.detail??"no detail")})`,"agy_cli_print")}var QN,ZN,hq,_q,gq,yq,Eq,Tq,wq,vq,nR=x(()=>{"use strict";Bn();Bn();QN="ANTIGRAVITY_LS_ADDRESS",ZN="ANTIGRAVITY_CSRF_TOKEN",hq="/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary",_q=["-p","/usage"],gq=(t,e)=>{let n=uq("agy",_q,{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}},yq=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()}},Eq=t=>Nq(t),Tq=gq,wq=yq,vq=Eq});import{randomUUID as oR}from"node:crypto";import{mkdirSync as xq,readFileSync as A_,realpathSync as Cq,renameSync as Oq,rmSync as N_,statSync as rR,writeFileSync as iR}from"node:fs";import{homedir as Dq}from"node:os";import{join as R_}from"node:path";import{setTimeout as Mq}from"node:timers/promises";function C_(t){return R_(t.CLAUDE_CONFIG_DIR??R_(t.HOME??Dq(),".claude"),".credentials.json")}function L_(t){let e=JSON.parse(A_(t,"utf8"));if(!e||typeof e!="object"||Array.isArray(e))throw new Error("invalid credential document");return e}function x_(t){let e=t.claudeAiOauth;return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function aR(t){if(t.CLAUDE_CODE_OAUTH_TOKEN)return{oauth:{accessToken:t.CLAUDE_CODE_OAUTH_TOKEN}};let e=C_(t);try{let n=x_(L_(e));return typeof n?.accessToken=="string"&&n.accessToken?{oauth:n,path:Cq(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()+Uq>=t.expiresAt}function sR(t,e){return t.accessToken===e.accessToken&&t.refreshToken===e.refreshToken}async function Fq(t,e){let n=`${t}.lmctl-refresh.lock`,r=R_(n,"owner.json"),s=oR();for(;;){e.throwIfAborted();try{xq(n,{mode:448});try{iR(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw N_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(A_(r,"utf8")).token===s&&N_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(A_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-rR(n).mtimeMs>6e4}catch{try{i=Date.now()-rR(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await Mq(50,void 0,{signal:e})}}}async function lR(t,e){if(!t.path||typeof t.oauth?.refreshToken!="string"||!t.oauth.refreshToken)throw new Error("no_refresh_token");let n=await Fq(t.path,e);try{let r=x_(L_(t.path));if(!r||typeof r.accessToken!="string")throw new Error("credentials_changed");if(!sR(r,t.oauth)&&!Md(r))return r;if(typeof r.refreshToken!="string"||!r.refreshToken)throw new Error("no_refresh_token");let s=await fetch(Pq,{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=L_(t.path),l=x_(a);if(!l||!sR(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}.${oR()}.tmp`;try{iR(d,JSON.stringify({...a,claudeAiOauth:c}),{flag:"wx",mode:384}),Oq(d,t.path)}finally{N_(d,{force:!0})}return c}finally{n()}}var $q,Pq,Uq,cR=x(()=>{"use strict";$q="9d1c250a-e61b-44d9-88ed-5944d1962f5e",Pq="https://console.anthropic.com/v1/oauth/token",Uq=3e5});import{spawnSync as fR}from"node:child_process";function Hq(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 mR(t){return Object.fromEntries(Object.entries(t).filter(([e])=>e!=="CLAUDECODE"))}function Bq(t){try{let e=fR("claude",["--version"],{encoding:"utf8",timeout:2e4,stdio:["ignore","pipe","ignore"],env:mR(t)}),n=typeof e.stdout=="string"?e.stdout.trim().split(/\s+/)[0]:"";if(n)return`claude-code/${n}`}catch{}return"claude-code/unknown"}function Vt(t,e,n,r="claude_oauth_api",s){return ht("claude",t,e,n,r,void 0,s)}function Xq(t){let e=t.get("retry-after");if(!e)return;let n=Number.parseInt(e,10);return Number.isFinite(n)?n:void 0}function qq(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 Vq(t){let e=[];for(let n of t.split(/\r?\n/)){let r=Gq.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(It({bucket_id:l,group_name:i?"session":"weekly",window_type:c,used_fraction:yn(Number(r[2]),"percent"),raw_value:Number(r[2]),raw_scale:"used_percent",resets_at:qq(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 Jq(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 Kq(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=yn(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 uR(t,e,n,r={}){try{let s=fR("claude",["-p","/usage"],{encoding:"utf8",timeout:Math.max(n,60)*1e3,input:"",env:mR(e),maxBuffer:16777216}),o=typeof s.stdout=="string"?s.stdout:"";kt(r,"claude_cli_print",o,[t.accessToken,t.refreshToken]);let i=Vq(o);if(!i.length)return;let a=Jq(o);return Ge("claude",Ve.ok,{source:"claude_cli_print",account_id:null,plan_type:t.subscriptionType??t.rateLimitTier??null,ordinary_usage_allowed:null,buckets:i,...Object.keys(a).length?{characteristics:a}:{}})}catch{return}}async function pR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s=aR(e);if(s.error==="not_claude_ai_subscriber")return Vt(Ve.notApplicable,s.error,"no OAuth subscription credentials; API-key accounts have no subscription quota endpoint");if(s.error==="no_credentials_found")return Vt(Ve.unavailable,"credentials_missing",`credentials file not found: ${C_(e)}`);if(s.error)return Vt(Ve.expired,"oauth_token_expired_or_invalid",s.error);let o=s.oauth,i=Array.isArray(o.scopes)?o.scopes:[];if(i.length&&!i.includes(dR))return Vt(Ve.notApplicable,"not_claude_ai_subscriber",`credential lacks the ${dR} 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 lR({...s,oauth:o},a.signal),g=!0}catch(T){let w=T instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(T.message)?T.message:"refresh_failed";if(w==="refresh_http_429")return Vt(Ve.throttled,"rate_limited","Claude OAuth refresh was rate limited; try again later");if(w==="refresh_lock_stale")return Vt(Ve.expired,"oauth_refresh_locked","a previous Claude credential refresh exited without releasing its lock; remove the stale .credentials.json.lmctl-refresh.lock directory before retrying");let S=w==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(w);return Vt(S?Ve.expired:Ve.unavailable,S?"oauth_token_expired_or_invalid":"oauth_refresh_failed",`Claude OAuth refresh failed (${w})${S?"; renew Claude login":"; try again later"}`)}};if(Md(o)){let T=await E();if(T)return T}let y=()=>fetch(`${jq}/api/oauth/usage`,{headers:{Authorization:`Bearer ${o.accessToken}`,"anthropic-beta":Wq,"Content-Type":"application/json","User-Agent":Bq(e)},signal:a.signal});if(c=await y(),d=await c.text(),kt({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(),kt({debug:n,onRawResponse:r},"claude_oauth_api",d,[o.accessToken,o.refreshToken],c.status)}}catch(g){let E=await uR(o,e,t,{debug:n,onRawResponse:r});return E||Vt(Ve.unavailable,"request_failed",`${g instanceof Error?g.name:"request failed"} (CLI fallback also unavailable)`)}finally{clearTimeout(l)}let u=(...g)=>vo(Vt(...g),d,[String(o.accessToken??""),String(o.refreshToken??"")]);if(c.status===401)return u(Ve.expired,"oauth_token_expired_or_invalid","HTTP 401 from usage endpoint");if(c.status===403)return u(Ve.notApplicable,"not_claude_ai_subscriber","HTTP 403 from usage endpoint (account is not usage-eligible)");if(c.status===429){let g=Xq(c.headers),E=await uR(o,e,t,{debug:n,onRawResponse:r});return E||u(Ve.throttled,"rate_limited",`usage endpoint rate limited${g==null?"":`; retry after ${g}s`}`,"claude_oauth_api",g)}if(c.status!==200)return u(Ve.unavailable,`http_${c.status}`,"usage endpoint returned an unexpected status");let f;try{f=JSON.parse(d)}catch{return Vt(Ve.unavailable,"malformed_response","SyntaxError: malformed JSON")}if(!f||typeof f!="object"||Array.isArray(f))return Vt(Ve.unavailable,"malformed_response","response was not an object");let m=f,p=Array.isArray(m.limits)?m.limits:[],_=p.length?p.flatMap(g=>{if(!g||typeof g!="object")return[];let E=g.kind,y=Hq(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[It({bucket_id:w,group_name:E==="session"?"session":"weekly",window_type:y,used_fraction:yn(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"?[]:[It({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:yn(E.utilization,"percent"),resets_at_iso:E.resets_at,raw_value:E.utilization,raw_scale:"used_percent"})]}),h=Kq(m.spend,m.extra_usage);return Ge("claude",Ve.ok,{source:"claude_oauth_api",account_id:null,plan_type:o.subscriptionType??o.rateLimitTier??null,ordinary_usage_allowed:null,buckets:_.sort((g,E)=>String(g.window_type).localeCompare(String(E.window_type))||String(g.bucket_id).localeCompare(String(E.bucket_id))),...h?{spend_control:h}:{}})}var jq,Wq,dR,Ve,Gq,hR=x(()=>{"use strict";Bn();cR();Bn();jq="https://api.anthropic.com",Wq="oauth-2025-04-20",dR="user:profile";Ve={ok:"ok",unavailable:"provider_unavailable",expired:"auth_expired",notApplicable:"not_applicable",throttled:"reader_throttled"};Gq=/^Current\s+(.+?):\s*(\d+(?:\.\d+)?)\s*%\s*used(?:\s*[·-]\s*resets\s*(.+?))?$/});import{randomUUID as yR}from"node:crypto";import{mkdirSync as Yq,readFileSync as O_,realpathSync as zq,renameSync as Qq,rmSync as D_,statSync as _R,writeFileSync as ER}from"node:fs";import{homedir as Zq}from"node:os";import{join as M_}from"node:path";import{setTimeout as eG}from"node:timers/promises";function ha(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function P_(t){if(t.CODEX_AUTH_PATH)return t.CODEX_AUTH_PATH;let e=t.CODEX_HOME||M_(t.HOME||Zq(),".codex");return M_(e,"auth.json")}function $_(t){let e=ha(JSON.parse(O_(t,"utf8")));if(!e)throw new Error("invalid credential document");return e}function TR(t){if(t.CODEX_ACCESS_TOKEN)return{tokens:{access_token:t.CODEX_ACCESS_TOKEN,account_id:t.CODEX_ACCOUNT_ID}};let e=P_(t);try{let n=ha($_(e).tokens);return typeof n?.access_token=="string"&&n.access_token?{tokens:n,path:zq(e)}:{error:"credentials_missing"}}catch(n){return{error:n.code==="ENOENT"?"credentials_missing":"credentials_unreadable"}}}function gR(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 rG(t,e){let n=`${t}.lmctl-refresh.lock`,r=M_(n,"owner.json"),s=yR();for(;;){e.throwIfAborted();try{Yq(n,{mode:448});try{ER(r,JSON.stringify({pid:process.pid,token:s}),{mode:384})}catch(o){throw D_(n,{recursive:!0,force:!0}),o}return()=>{try{JSON.parse(O_(r,"utf8")).token===s&&D_(n,{recursive:!0,force:!0})}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let i=!1;try{let a=JSON.parse(O_(r,"utf8")).pid;if(Number.isInteger(a)&&a>0)try{process.kill(a,0)}catch(l){i=l.code==="ESRCH"}else i=Date.now()-_R(n).mtimeMs>6e4}catch{try{i=Date.now()-_R(n).mtimeMs>6e4}catch{continue}}if(i)throw new Error("refresh_lock_stale");await eG(50,void 0,{signal:e})}}}async function wR(t,e){if(!t.path||typeof t.tokens?.refresh_token!="string"||!t.tokens.refresh_token)throw new Error("no_refresh_token");let n=await rG(t.path,e);try{let r=$_(t.path),s=ha(r.tokens);if(!s||typeof s.access_token!="string")throw new Error("credentials_changed");if(!gR(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(tG,{method:"POST",headers:{"Content-Type":"application/json"},signal:e,body:JSON.stringify({grant_type:"refresh_token",refresh_token:s.refresh_token,client_id:nG})});if(!o.ok)throw new Error(`refresh_http_${o.status}`);let i=ha(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=$_(t.path),l=ha(a.tokens);if(!l||!gR(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}.${yR()}.tmp`;try{ER(u,JSON.stringify(d),{flag:"wx",mode:384}),Qq(u,t.path)}finally{D_(u,{force:!0})}return c}finally{n()}}var tG,nG,vR=x(()=>{"use strict";tG="https://auth.openai.com/oauth/token",nG="app_EMoamEEZ73f0CkXaXp7hrann"});function En(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function SR(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 bR(t){return t==="five_hour"?"5h":t==="weekly"?"weekly":t==="monthly"?"monthly":"window"}function iG(t){if(En(t))return{has_credits:t.has_credits,unlimited:t.unlimited,balance:t.balance}}function aG(t){let e=[],n=En(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=En(n[i])?n[i]:void 0;if(!a)continue;let l=SR(a.limit_window_seconds);e.push(It({bucket_id:`codex-${bR(l)}`,group_name:"codex",window_type:l,used_fraction:yn(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(!En(i))continue;let a=En(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=En(a[m])?a[m]:void 0;if(!p)continue;let _=SR(p.limit_window_seconds);e.push(It({bucket_id:`${d}-${bR(_)}`,group_name:l||d,window_type:_,used_fraction:yn(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 lG(t){let e=En(t.rate_limit)?t.rate_limit:{},n=typeof e.allowed=="boolean"?e.allowed:void 0,r=En(t.spend_control)?t.spend_control:void 0,s=En(t.credits)?t.credits:void 0;return Ge("codex","ok",{source:"codex_http",account_id:t.account_id,plan_type:t.plan_type,...n===void 0?{}:{ordinary_usage_allowed:n},buckets:aG(t),...s?{credits:iG(s)}:{},...r?{spend_control:r}:{}})}async function IR(t){let{timeoutSeconds:e,env:n,debug:r,onRawResponse:s}=t,o=TR(n),i=o.tokens;if(!i||typeof i.access_token!="string")return Ge("codex","provider_unavailable",{source:"codex_http",reason:"credentials_missing",detail:`no access_token in ${P_(n)} (or $CODEX_ACCESS_TOKEN)`});let a=new AbortController,l=setTimeout(()=>a.abort(),Math.ceil(e*1e3)),c=i.access_token,d=new Set([i.access_token,i.refresh_token,i.id_token].filter(u=>typeof u=="string"&&!!u));try{let u=typeof i.account_id=="string"?i.account_id:void 0,f=typeof i.refresh_token=="string"?i.refresh_token:void 0,m=typeof i.id_token=="string"?i.id_token:void 0,p="",_=()=>[...d],h=(S,b)=>vo(Ge("codex",S,b),p,_()),g=!1,E=async()=>{if(!(g||!o.path||typeof i.refresh_token!="string"))try{let S=await wR({...o,tokens:{...i,refresh_token:f}},a.signal);typeof S.access_token=="string"&&(d.add(S.access_token),c=S.access_token),u=typeof S.account_id=="string"?S.account_id:u,typeof S.refresh_token=="string"&&(d.add(S.refresh_token),f=S.refresh_token),typeof S.id_token=="string"&&(d.add(S.id_token),m=S.id_token),g=!0;return}catch(S){let b=S instanceof Error&&/^(no_refresh_token|credentials_changed|invalid_refresh_response|refresh_lock_stale|refresh_http_\d+)$/.test(S.message)?S.message:"refresh_failed",I=b==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(b);return Ge("codex",I?"auth_expired":"provider_unavailable",{source:"codex_http",reason:I?"oauth_token_expired_or_invalid":"oauth_refresh_failed",detail:`Codex OAuth refresh failed (${b})${I?"; renew Codex login":"; try again later"}`})}},y=()=>{let S={Authorization:`Bearer ${c}`,"User-Agent":oG,"Content-Type":"application/json",Accept:"application/json"};u&&(S["ChatGPT-Account-Id"]=u);let b=(n.CODEX_BASE_URL||sG).replace(/\/$/,"");return fetch(`${b}/wham/usage`,{headers:S,signal:a.signal})},T=await y();if(p=await T.text(),kt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status),T.status===401&&o.path&&f){let S=await E();if(S)return S;T=await y(),p=await T.text(),kt({debug:r,onRawResponse:s},"codex_http",p,_(),T.status)}if(T.status===401)return h("auth_expired",{source:"codex_http",reason:"oauth_token_expired_or_invalid",detail:"HTTP 401 from the codex usage endpoint"});if(T.status===429){let S=T.headers.get("retry-after"),b=S===null?void 0:Number.parseInt(S,10);return h("reader_throttled",{source:"codex_http",reason:"throttled",detail:"HTTP 429 from codex usage endpoint",...b!==void 0&&Number.isFinite(b)&&b>=0?{retry_after_seconds:b}:{}})}if(!T.ok)return h("provider_unavailable",{source:"codex_http",reason:`http_${T.status}`,detail:"codex usage endpoint returned an unexpected status"});let w;try{w=JSON.parse(p)}catch(S){return Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:wo(String(S),d)})}return En(w)?lG(w):Ge("codex","provider_unavailable",{source:"codex_http",reason:"malformed_response",detail:"response was not an object"})}catch(u){let f=u instanceof Error?`${u.name}: ${u.message}`:String(u);return Ge("codex","provider_unavailable",{source:"codex_http",reason:"http_request_failed",detail:wo(f,d)})}finally{clearTimeout(l)}}var sG,oG,kR=x(()=>{"use strict";Bn();vR();Bn();sG="https://chatgpt.com/backend-api",oG="codex-cli"});import{createHash as cG,randomUUID as dG}from"node:crypto";import{readFileSync as xR,openSync as uG,fsyncSync as fG,closeSync as mG,mkdirSync as AR,writeFileSync as CR,renameSync as pG,rmSync as hG,rmdirSync as _G,statSync as U_,utimesSync as gG}from"node:fs";import{homedir as yG}from"node:os";import{basename as EG,dirname as TG,join as $d}from"node:path";import{setTimeout as OR}from"node:timers/promises";function vG(t){let e;try{e=xR(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(xR(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 DR(t){let e=t.KIMI_CODE_HOME??$d(t.HOME??yG(),".kimi-code"),n=vG(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=RR(t.KIMI_CODE_BASE_URL??n.base_url??NR),o=RR(t.KIMI_CODE_OAUTH_HOST??t.KIMI_OAUTH_HOST??(r?F_:n["oauth.oauth_host"]??F_)),i=s===NR&&o===F_?"kimi-code":`kimi-code-env-${cG("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=EG(a,".json");return{home:e,path:c,lockTarget:$d(e,"oauth",d),baseUrl:s,oauthHost:o,token:l}}function Ud(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 LR(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 SG(t,e){AR(TG(t),{recursive:!0}),CR(t,"",{flag:"a",mode:384});let n=`${t}.lock`;for(;;){if(e.aborted)throw new Error("refresh_locked");try{AR(n);break}catch(i){if(i.code!=="EEXIST")throw new Error("refresh_lock_failed");try{if(Date.now()-U_(n).mtimeMs>5e3)throw new Error("refresh_lock_stale")}catch(a){if(a.message==="refresh_lock_stale")throw a}try{await OR(50,void 0,{signal:e})}catch{throw new Error("refresh_locked")}}}let r=U_(n),s=()=>{let i;try{i=U_(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;gG(n,i,i)}catch{}},1e3);return o.unref(),{assertOwned:s,release(){clearInterval(o);try{s(),_G(n)}catch{}}}}async function MR(t,e){if(typeof t.token.refresh_token!="string"||!t.token.refresh_token)throw new Error("no_refresh_token");let n=await SG(t.lockTarget,e);try{let r=Pd(t.path);if(!LR(r,t.token)&&!Ud(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:wG,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 OR(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(!LR(l,r)){if(!Ud(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}.${dG()}.tmp`;try{let u=uG(d,"wx",384);try{CR(u,JSON.stringify(c,null,2)+`
2671
+ `),fG(u)}finally{mG(u)}n.assertOwned(),pG(d,t.path)}finally{hG(d,{force:!0})}return c}finally{n.release()}}var NR,F_,wG,RR,$R=x(()=>{"use strict";NR="https://api.kimi.com/coding/v1",F_="https://auth.kimi.com",wG="17e5f671-d194-4dfb-9706-5516cb48c098",RR=t=>t.trim().replace(/\/+$/,"")});function PR(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 UR({timeoutSeconds:t,env:e,debug:n,onRawResponse:r}){let s;try{s=DR(e)}catch(_){let h=_ instanceof Error&&/^(credentials_missing|credentials_malformed|credentials_revoked|config_unreadable|config_malformed|config_format_unsupported|credential_storage_unsupported)$/.test(_.message)?_.message:"credentials_unreadable";return ht("kimi",h==="credentials_revoked"?"auth_expired":"provider_unavailable",h,h==="credentials_revoked"?"Kimi login was revoked; run kimi login":h.replaceAll("_"," "),"kimi_http")}let o=s.token,i=new AbortController,a=setTimeout(()=>i.abort(),t*1e3),l,c;try{let _=!1,h=async()=>{o=await MR({...s,token:o},i.signal),_=!0};Ud(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(),kt({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(),kt({debug:n,onRawResponse:r},"kimi_http",c,[o.access_token,o.refresh_token],l.status))}catch(_){let h=_ instanceof Error&&/^(no_refresh_token|credentials_changed|credentials_revoked|invalid_refresh_response|refresh_locked|refresh_lock_stale|refresh_lock_failed|refresh_lock_lost|refresh_request_failed|refresh_http_\d+)$/.test(_.message)?_.message:"request_failed",g=h==="credentials_revoked"||h==="no_refresh_token"||/^refresh_http_(400|401|403)$/.test(h),E=h==="refresh_lock_stale"?"Kimi refresh lock is stale; run the native Kimi CLI to recover its lock, or verify no refresh is active before removing the .lock directory":g?`Kimi credential renewal failed (${h}); run kimi login`:`Kimi quota request failed (${h})`;return ht("kimi",g?"auth_expired":"provider_unavailable",h,E,"kimi_http")}finally{clearTimeout(a)}let d=(_,h,g)=>vo(ht("kimi",_,h,h,"kimi_http",[],g),c,[o.access_token]);if(l.status===401)return d("auth_expired","HTTP 401 from Kimi usage endpoint");if(l.status===403)return d("not_applicable","HTTP 403 from Kimi usage endpoint");if(l.status===429){let _=zN(l.headers);return d("reader_throttled","HTTP 429 from Kimi usage endpoint",_)}if(l.status!==200)return d("provider_unavailable",`HTTP ${l.status} from Kimi usage endpoint`);let u;try{u=JSON.parse(c)}catch{return ht("kimi","provider_unavailable","malformed_response","SyntaxError: malformed JSON")}if(!u||typeof u!="object")return ht("kimi","provider_unavailable","malformed_response","response was not an object");let f=[],m=new Set;function p(_){let h=String(_.bucket_id),g=h,E=2;for(;m.has(h);)h=`${g}-${E}`,E++;m.add(h),_.bucket_id=h,f.push(It(_))}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=KN(E),T="window";y==="five_hour"&&(T="5h"),y==="weekly"&&(T="weekly"),y==="monthly"&&(T="monthly");let w=PR(g);if(!w)continue;let{used:S,limit:b,remaining:I}=w;p({bucket_id:`kimi-${T}`,window_type:y,used_fraction:at(S/b),remaining_fraction:at(I/b),resets_at_iso:g.resetTime,raw_value:S,raw_scale:"count"})}if(u.usage&&typeof u.usage=="object"){let _=PR(u.usage);_&&p({bucket_id:"kimi-weekly",window_type:"weekly",used_fraction:at(_.used/_.limit),remaining_fraction:at(_.remaining/_.limit),resets_at_iso:u.usage.resetTime,raw_value:_.used,raw_scale:"count"})}if(u.usages&&typeof u.usages=="object"){let _=[{key:"limit_5h",id:"kimi-5h",type:"five_hour"},{key:"limit_7d",id:"kimi-weekly",type:"weekly"},{key:"limit_month_total",id:"kimi-monthly",type:"monthly"},{key:"limit_month_code",id:"kimi-monthly-code",type:"monthly"}];for(let{key:h,id:g,type:E}of _){let y=u.usages[h];if(!y||typeof y!="object"||y.used_ratio==null||y.used_ratio===""||typeof y.used_ratio=="boolean")continue;let T=Number(y.used_ratio);!Number.isFinite(T)||T<0||m.has(g)||(m.add(g),f.push(It({bucket_id:g,window_type:E,used_fraction:at(T),resets_at_iso:typeof y.reset_time=="string"&&y.reset_time?y.reset_time:null,raw_value:T,raw_scale:"ratio"})))}}return Ge("kimi","ok",{source:"kimi_http",buckets:f})}var FR=x(()=>{"use strict";Bn();$R();Bn()});async function jR(t={}){let e=t.targets??t.providers??["all"];if(!Array.isArray(e)||e.length===0||e.some(d=>typeof d!="string"))return{status:"error",error:"providers must be a non-empty list of provider names",readings:[]};for(let d of e)if(!Fd.includes(d))return{status:"error",error:`unknown provider: ${d} (valid targets: ${Fd.join(", ")})`,readings:[]};let n=t.timeoutSeconds??bG;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:IR,agy:tR,claude:pR,kimi:UR}).filter(([d])=>s.has(d)).map(async([,d])=>{let u=[],f=await d({timeoutSeconds:n,env:r,...t.debug?{debug:t.debug}:{},...t.includeRaw?{onRawResponse:p=>u.push(p)}:{}}),m=t.includeRaw?{...f,raw_responses:u}:f;return m&&t.onReading?.(m),m}),a=await Promise.allSettled(i),l=a.find(d=>d.status==="rejected");return l?{status:"error",error:String(l.reason),readings:[]}:{status:"ok",readings:a.filter(d=>d.status==="fulfilled").map(d=>d.value).filter(Boolean)}}var Fd,bG,WR=x(()=>{"use strict";nR();hR();kR();FR();Fd=["all","codex","agy","claude","kimi"],bG=15});var qR={};me(qR,{runRatelimit:()=>xG});function j_(t){return typeof t=="object"&&t!==null}function IG(t){return(0,We.formatPercent)(typeof t=="number"?t:null)}function kG(t,e){let n=typeof e.bucket_id=="string"&&e.bucket_id!==""?e.bucket_id:"unknown-bucket";return n==="session"?n="5h":n==="week-all-models"?n="weekly":n.startsWith("week-scoped-")&&(n=`weekly-${n.slice(12)}`),t!==""&&!n.startsWith(`${t}-`)&&(n=`${t}-${n}`),(0,We.escapeCell)(n)}function NG(t,e){let n="unknown",r=null,s,o=null;if(typeof e.resets_at_iso=="string"&&e.resets_at_iso!==""){let c=Date.parse(e.resets_at_iso);o=Number.isFinite(c)?c-Date.now():null,o!==null&&(Math.abs(o)<1e3?n="now":o>0?n=`in ${(0,We.formatDuration)(o,{maxUnit:"d",style:"compact"})}`:n=`${(0,We.formatDuration)(-o,{maxUnit:"d",style:"compact"})} ago`,s=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,We.formatBar)(r)} ${n}`);let i="";if(r!==null&&r>0&&s!==void 0&&o!==null&&typeof e.used_fraction=="number"&&Number.isFinite(e.used_fraction)){let c=e.used_fraction;if(c<=r){let d=Math.max(0,1-c/r);i=`unused +${(0,We.formatPercent)(d)}`}else{let d=r*s,u=d>0?(1-c)/c*d:0,f=Math.max(0,o-u);i=`needing -${(0,We.formatDuration)(f,{maxUnit:"d",style:"compact"})}`}}let a=[];e.is_exhausted===!0&&a.push("[EXHAUSTED]"),e.allowed===!1&&a.push("allowed=false"),e.limit_reached===!0&&a.push("limit_reached");let l=[kG(t,e),`${(0,We.formatBar)(typeof e.used_fraction=="number"?e.used_fraction:null)} ${IG(e.used_fraction)}`,n];return i!==""&&l.push(i),a.length>0&&l.push(a.join(" ")),l}function RG(t){let e=typeof t.provider=="string"&&t.provider!==""?t.provider:"unknown",n=typeof t.status=="string"?t.status:"unknown",r=typeof t.source=="string"&&t.source!==""?t.source:"unknown source",s=typeof t.reason=="string"?t.reason:"",o=`${e}: ${n} (${r})`;n!=="ok"&&typeof t.provider_message=="string"&&t.provider_message.trim()?o=`${e}: ${(0,We.escapeCell)(t.provider_message)} (${r})`:n==="auth_expired"?(o=`${e}: unavailable (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n==="provider_unavailable"&&XR.has(s)?(o=`${e}: not installed/configured (${r})`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`)):n!=="ok"&&(o+=` -- ${s!==""?s:"no reason given"}`,typeof t.detail=="string"&&t.detail!==""&&(o+=` -- ${t.detail}`),n==="provider_unavailable"&&s!=="oauth_refresh_failed"&&!/^(credentials_|config_|credential_storage_|refresh_)/.test(s)&&(o+=` (${e} server-side, not lmctl \u2014 try again later)`));let i=typeof t.plan_type=="string"?t.plan_type.trim():"";i&&!["?","unknown","null","n/a"].includes(i.toLowerCase())&&(o+=` (${(0,We.escapeCell)(i)})`);let a=typeof t.provider=="string"?t.provider:"",l=Array.isArray(t.buckets)?t.buckets.filter(j_).map(d=>NG(a,d)):[],c=[];if(j_(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(j_(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 LG(t){let e=RG(t),n=[e.head];if(e.bucketRows.length>0){let r=["LIMIT","USED","RESET TIME","OVERSTOCK"],s=(0,We.measureColumns)([{rows:[],headers:r},e.bucketRows]);n.push((0,We.renderGrid)(e.bucketRows,{widths:s,margin:2,align:["left","left","left"],headers:r}))}return n.push(...e.footers),n.join(`
2672
+ `)}function W_(t,e){return t.stderr.write(`error: ${e}
2672
2673
  ${BR}
2673
- `),2}async function LG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${BR}
2674
- `),0;let n=ae(t,["--timeout"],["--json"]);if(n.error!==void 0)return W_(e,n.error);let r=z(n,"--json");for(let _ of n.positionals)if(!HR.includes(_))return W_(e,`unknown provider: ${_} (valid targets: ${HR.join(", ")})`);let s=n.positionals.length>0?n.positionals:["all"],o=15,i=V(n,"--timeout");if(i!==void 0){let _=Number(i);if(!Number.isFinite(_)||_<=0)return W_(e,`invalid --timeout "${i}" (expected a positive number of seconds)`);o=_}let a=await jR({targets:s,timeoutSeconds:o,includeRaw:r,env:e.env??process.env,progress:_=>e.stderr.write(`${_}
2675
- `),...si()||e.env?.LMCTL_DEBUG==="1"?{debug:_=>e.stderr.write(`${_}
2676
- `)}:{}});if(a.status==="error")return e.stderr.write(`error: ${a.error}
2677
- `),1;let l=a.readings;if(r)return te(e,{readings:l}),0;let c=new Set(n.positionals),d=l.filter(_=>{let E=typeof _.status=="string"?_.status:"",y=typeof _.reason=="string"?_.reason:"";return E!=="provider_unavailable"||!XR.has(y)?!0:c.has(typeof _.provider=="string"?_.provider:"")});if(d.length===0)return e.stdout.write(`rate-limit: no readings returned.
2678
- `),0;let u=["LIMIT","USED","RESET TIME","OVERSTOCK"],f=["left","left","left"],m=d.map(RG),p=(0,We.measureColumns)([{rows:[],headers:u},...m.map(_=>_.bucketRows)]),g=!1,h=[];for(let _ of m){if(h.length>0&&h.push(""),h.push(_.head),_.bucketRows.length>0){let E=!g;g=!0,h.push((0,We.renderGrid)(_.bucketRows,{widths:p,margin:2,align:f,...E?{headers:u}:{}}))}h.push(..._.footers)}return e.stdout.write(`${h.join(`
2679
- `)}
2680
- `),0}var We,BR,XR,HR,AG,GR=x(()=>{"use strict";re();We=Ut(xt(),1);le();WR();BR=["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(`
2681
- `),XR=new Set(["agy_not_found","credentials_missing"]),HR=Fd;AG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});le();Nn();import{pathToFileURL as xG}from"node:url";import{execFileSync as DD}from"node:child_process";import{readFileSync as MD}from"node:fs";import{join as $D}from"node:path";import{fileURLToPath as PD}from"node:url";function aT(){return PD(new URL("../..",import.meta.url))}function Vu(t=aT()){try{let e=JSON.parse(MD($D(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function ei(t,e){try{return DD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function ti(t=aT()){let e=Vu(t);if(ei(t,["rev-parse","--is-inside-work-tree"])!=="true"||ei(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=ei(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=ei(t,["describe","--tags","--exact-match","HEAD"]),s=ei(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}re();import{mkdirSync as yM,readFileSync as EM,renameSync as TM,writeFileSync as wM}from"node:fs";import{homedir as vM}from"node:os";import{dirname as SM,join as bM}from"node:path";function yT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function _M(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function gM(t,e){return!_M(t)||yT(t)?null:`${e} must use https://: ${t}`}async function ET(t,e){let n=gM(t,e.description);if(n!==null||!yT(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 gT(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 gT(t,e.description,r,a)}}finally{clearTimeout(o)}}function gT(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 IM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",kM=60*60*1e3,AM=1500;function NM(){let t=process.env.HOME??vM();return bM(t,".lmctl",".update-check.json")}function RM(t){return t.isTTY===!0}function LM(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"||!RM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function xM(t,e){try{let n=JSON.parse(EM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<kM)return n.latest}catch{}return null}function CM(t,e){yM(SM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;wM(n,`${JSON.stringify(e)}
2674
+ `),2}async function xG(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${BR}
2675
+ `),0;let n=ae(t,["--timeout"],["--json"]);if(n.error!==void 0)return W_(e,n.error);let r=z(n,"--json");for(let f of n.positionals)if(!HR.includes(f))return W_(e,`unknown provider: ${f} (valid targets: ${HR.join(", ")})`);let s=n.positionals.length>0?n.positionals:["all"],o=15,i=V(n,"--timeout");if(i!==void 0){let f=Number(i);if(!Number.isFinite(f)||f<=0)return W_(e,`invalid --timeout "${i}" (expected a positive number of seconds)`);o=f}let a=new Set(n.positionals),l=0,c=f=>{let m=typeof f.status=="string"?f.status:"",p=typeof f.reason=="string"?f.reason:"";m==="provider_unavailable"&&XR.has(p)&&!a.has(typeof f.provider=="string"?f.provider:"")||(l>0&&e.stdout.write(`
2676
+ `),e.stdout.write(`${LG(f)}
2677
+ `),l+=1)},d=await jR({targets:s,timeoutSeconds:o,includeRaw:r,env:e.env??process.env,progress:f=>e.stderr.write(`${f}
2678
+ `),...r?{}:{onReading:c},...si()||e.env?.LMCTL_DEBUG==="1"?{debug:f=>e.stderr.write(`${f}
2679
+ `)}:{}});if(d.status==="error")return e.stderr.write(`error: ${d.error}
2680
+ `),1;let u=d.readings;return r?(te(e,{readings:u}),0):(l===0&&e.stdout.write(`rate-limit: no readings returned.
2681
+ `),0)}var We,BR,XR,HR,AG,GR=x(()=>{"use strict";re();We=Ut(xt(),1);le();WR();BR=["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(`
2682
+ `),XR=new Set(["agy_not_found","credentials_missing"]),HR=Fd;AG={five_hour:5*36e5,daily:864e5,weekly:7*864e5,monthly:30*864e5}});le();Nn();import{pathToFileURL as CG}from"node:url";import{execFileSync as DD}from"node:child_process";import{readFileSync as MD}from"node:fs";import{join as $D}from"node:path";import{fileURLToPath as PD}from"node:url";function aT(){return PD(new URL("../..",import.meta.url))}function Vu(t=aT()){try{let e=JSON.parse(MD($D(t,"package.json"),"utf8"));if(typeof e.version=="string")return e.version}catch{}return"0.0.0"}function ei(t,e){try{return DD("git",e,{cwd:t,stdio:["ignore","pipe","ignore"],timeout:2e3}).toString().trim()}catch{return}}function ti(t=aT()){let e=Vu(t);if(ei(t,["rev-parse","--is-inside-work-tree"])!=="true"||ei(t,["ls-files","--error-unmatch","--","package.json"])===void 0)return e;let n=ei(t,["rev-parse","--short","HEAD"]);if(n===void 0)return e;let r=ei(t,["describe","--tags","--exact-match","HEAD"]),s=ei(t,["status","--porcelain"]),o=s!==void 0&&s.length>0;return r===`v${e}`&&!o?e:`${e}+${n}${o?".dirty":""}`}re();import{mkdirSync as yM,readFileSync as EM,renameSync as TM,writeFileSync as wM}from"node:fs";import{homedir as vM}from"node:os";import{dirname as SM,join as bM}from"node:path";function yT(t){try{return new URL(t).protocol==="https:"}catch{return!1}}function _M(t){return/^[A-Za-z]:[\\/]/.test(t)?!1:/^[A-Za-z][A-Za-z0-9+.-]*:/.test(t)}function gM(t,e){return!_M(t)||yT(t)?null:`${e} must use https://: ${t}`}async function ET(t,e){let n=gM(t,e.description);if(n!==null||!yT(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 gT(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 gT(t,e.description,r,a)}}finally{clearTimeout(o)}}function gT(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 IM="https://registry.npmjs.org/@lmctl-ai/lmctl/latest",kM=60*60*1e3,AM=1500;function NM(){let t=process.env.HOME??vM();return bM(t,".lmctl",".update-check.json")}function RM(t){return t.isTTY===!0}function LM(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"||!RM(e.stderr)||t.includes("--json")||t.includes("--help")||t.includes("-h")||t[0]==="help"||t[0]==="mcp")}function xM(t,e){try{let n=JSON.parse(EM(t,"utf8"));if(typeof n.checkedAt=="number"&&Number.isFinite(n.checkedAt)&&typeof n.latest=="string"&&e-n.checkedAt<kM)return n.latest}catch{}return null}function CM(t,e){yM(SM(t),{recursive:!0});let n=`${t}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;wM(n,`${JSON.stringify(e)}
2682
2683
  `,"utf8"),TM(n,t)}async function OM(){let t=await ET(IM,{description:"lmctl npm metadata",timeoutMs:AM}),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 TT(t,e=[],n={}){try{if(Qu(e,t)||(n.displayVersion?.()??ti()).includes("+"))return;let r=n.now?.()??Date.now(),s=n.cachePath??NM();if(xM(s,r)!==null)return;let i=await(n.fetchLatest??OM)();try{CM(s,{checkedAt:r,latest:i})}catch{return}let a=n.currentVersion?.()??Vu();LM(i,a)>0&&t.stderr.write(`update available: ${a} \u2192 ${i} run: npm i -g @lmctl-ai/lmctl@latest
2683
2684
  `)}catch{}}za();var So=`usage: lmctl [--db PATH] [--debug] [--non-interactive] <command|target> [args]
2684
2685
  `,H_=`${So}
@@ -2738,7 +2739,7 @@ Global flags:
2738
2739
  ratelimit also prints raw quota responses to stderr.
2739
2740
 
2740
2741
  Run 'lmctl help <command>' for command-specific help.
2741
- `,VR=new Set(["init","quickrun","hello","prompt","chat","batch","script","mcp","terminal","tail","export","cost","usage","ls","lint","seed","plan","status","running","ratelimit","model","prices","db"]),CG=new Set(["send","recv","loop","notify_me","exec","check","push","wait","workflow","run","project","intake","monitor","code","workspace","recover","refresh","hire","clone","team","health","session","session-index","restore","restore-teamfile","diagnose","diagnose-prompt","serve","api","device","mail"]);function OG(t,e){return t.stderr.write(`error: ${e}
2742
+ `,VR=new Set(["init","quickrun","hello","prompt","chat","batch","script","mcp","terminal","tail","export","cost","usage","ls","lint","seed","plan","status","running","ratelimit","model","prices","db"]),OG=new Set(["send","recv","loop","notify_me","exec","check","push","wait","workflow","run","project","intake","monitor","code","workspace","recover","refresh","hire","clone","team","health","session","session-index","restore","restore-teamfile","diagnose","diagnose-prompt","serve","api","device","mail"]);function DG(t,e){return t.stderr.write(`error: ${e}
2742
2743
  ${So}Run 'lmctl help' for usage.
2743
2744
  `),2}function KR(t,e){return e==="send"?(t.stderr.write(`error: unknown command: send (use lmctl prompt)
2744
2745
  ${So}Run 'lmctl help' for usage.
@@ -2748,21 +2749,21 @@ ${So}Run 'lmctl help' for usage.
2748
2749
  ${So}Run 'lmctl help' for usage.
2749
2750
  `),1):(t.stderr.write(`error: unknown command: ${e}
2750
2751
  ${So}Run 'lmctl help' for usage.
2751
- `),1)}async function DG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=hT();try{return await MG(t,e)}finally{_T(n)}}async function MG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=[],r,s=!1,o=0;for(;o<t.length;o+=1){let m=t[o];if(m==="--db"){let p=t[++o];if(p===void 0||p.startsWith("--"))return OG(e,"missing value for --db");r=p;continue}if(m==="--non-interactive"){s=!0;continue}if(m==="--debug"){zu();continue}if(m==="--allow-schema-skew"){process.env.LMCTL_ALLOW_SCHEMA_SKEW="1";continue}break}n.push(...t.slice(o));let i=n[0]??"",a=i==="script"||i==="quickrun";if(!/\.lms$/i.test(i))for(let m=1;m<n.length;m+=1){let p=n[m];if(p==="--")break;if(p==="--debug")zu(),n.splice(m--,1);else{if(a&&(!p.startsWith("-")||p==="-"||p==="-e"))break;(p==="-p"||p==="--prompt-file")&&(m+=1)}}let l=new Set(["status","running","model","prices","ratelimit","prompt","chat","batch","terminal","tail","export","cost","usage","ls","plan","lint","db"]);r!==void 0&&(process.env.LMCTL_DB=r),si()&&(e={...e,env:{...e.env??process.env,LMCTL_DEBUG:"1",...r===void 0?{}:{LMCTL_DB:r}}}),(s||l.has(n[0]??"")&&n.slice(1).includes("--json"))&&(e=ol(r===void 0?e:{...e,env:{...e.env??process.env,LMCTL_DB:r}}));let c=n[0];if(c==="--version"||c==="-v"||c==="-V")return e.stdout.write(`lmctl ${ti()}
2752
- `),0;if(c==="--help"||c==="-h"||c===void 0)return e.stdout.write(H_),0;if(c==="help"){let[m,...p]=n.slice(1);return m===void 0||m==="--help"||m==="-h"?(e.stdout.write(H_),0):VR.has(m)?JR(m,[...p,"--help"],e):KR(e,m)}Gu(Je(),e.stderr);let[d,...u]=n;if(d===void 0)return e.stdout.write(H_),0;let f=Date.now();B_(d,u,{phase:"start",started_at:new Date(f).toISOString()});try{let m=await JR(d,u,e);return B_(d,u,{phase:"finish",outcome:m===0?"ok":"error",exit_code:m,duration_ms:Date.now()-f}),VR.has(d)&&!Qu(n,e)&&await TT(e,n),m}catch(m){let p=m instanceof Error?m:new Error(String(m));return B_(d,u,{phase:"fatal",outcome:"fatal",exit_code:1,duration_ms:Date.now()-f,error_class:p.name,error_message:p.message,error_stack:p.stack??null,causes:PG(p)}),$G(m,d,u,e)}}function B_(t,e,n){He({event:t,record_kind:"cli_action",command:t,argv:e,cwd:process.cwd(),db_path:Je(),lmctl_version:ti(),node_version:process.version,...n})}function $G(t,e,n,r){let s=t instanceof Error?t:new Error(String(t));return s instanceof Wt&&n.includes("--json")?(r.stdout.write(`${JSON.stringify({error:s.message,schema_skew:{db_version:s.dbVersion,build_version:s.buildVersion,mode:"refused"}},null,2)}
2752
+ `),1)}async function MG(t,e={stdout:process.stdout,stderr:process.stderr}){let n=hT();try{return await $G(t,e)}finally{_T(n)}}async function $G(t,e={stdout:process.stdout,stderr:process.stderr}){let n=[],r,s=!1,o=0;for(;o<t.length;o+=1){let m=t[o];if(m==="--db"){let p=t[++o];if(p===void 0||p.startsWith("--"))return DG(e,"missing value for --db");r=p;continue}if(m==="--non-interactive"){s=!0;continue}if(m==="--debug"){zu();continue}if(m==="--allow-schema-skew"){process.env.LMCTL_ALLOW_SCHEMA_SKEW="1";continue}break}n.push(...t.slice(o));let i=n[0]??"",a=i==="script"||i==="quickrun";if(!/\.lms$/i.test(i))for(let m=1;m<n.length;m+=1){let p=n[m];if(p==="--")break;if(p==="--debug")zu(),n.splice(m--,1);else{if(a&&(!p.startsWith("-")||p==="-"||p==="-e"))break;(p==="-p"||p==="--prompt-file")&&(m+=1)}}let l=new Set(["status","running","model","prices","ratelimit","prompt","chat","batch","terminal","tail","export","cost","usage","ls","plan","lint","db"]);r!==void 0&&(process.env.LMCTL_DB=r),si()&&(e={...e,env:{...e.env??process.env,LMCTL_DEBUG:"1",...r===void 0?{}:{LMCTL_DB:r}}}),(s||l.has(n[0]??"")&&n.slice(1).includes("--json"))&&(e=ol(r===void 0?e:{...e,env:{...e.env??process.env,LMCTL_DB:r}}));let c=n[0];if(c==="--version"||c==="-v"||c==="-V")return e.stdout.write(`lmctl ${ti()}
2753
+ `),0;if(c==="--help"||c==="-h"||c===void 0)return e.stdout.write(H_),0;if(c==="help"){let[m,...p]=n.slice(1);return m===void 0||m==="--help"||m==="-h"?(e.stdout.write(H_),0):VR.has(m)?JR(m,[...p,"--help"],e):KR(e,m)}Gu(Je(),e.stderr);let[d,...u]=n;if(d===void 0)return e.stdout.write(H_),0;let f=Date.now();B_(d,u,{phase:"start",started_at:new Date(f).toISOString()});try{let m=await JR(d,u,e);return B_(d,u,{phase:"finish",outcome:m===0?"ok":"error",exit_code:m,duration_ms:Date.now()-f}),VR.has(d)&&!Qu(n,e)&&await TT(e,n),m}catch(m){let p=m instanceof Error?m:new Error(String(m));return B_(d,u,{phase:"fatal",outcome:"fatal",exit_code:1,duration_ms:Date.now()-f,error_class:p.name,error_message:p.message,error_stack:p.stack??null,causes:UG(p)}),PG(m,d,u,e)}}function B_(t,e,n){He({event:t,record_kind:"cli_action",command:t,argv:e,cwd:process.cwd(),db_path:Je(),lmctl_version:ti(),node_version:process.version,...n})}function PG(t,e,n,r){let s=t instanceof Error?t:new Error(String(t));return s instanceof Wt&&n.includes("--json")?(r.stdout.write(`${JSON.stringify({error:s.message,schema_skew:{db_version:s.dbVersion,build_version:s.buildVersion,mode:"refused"}},null,2)}
2753
2754
  `),1):(r.stderr.write(`error: ${s.message}
2754
2755
  `),s instanceof Wt?1:si()?(r.stderr.write(`(debug details written to ~/.lmctl/debug-*.log)
2755
2756
  `),1):(r.stderr.write(`(re-run with --debug for the full stack trace and context in ~/.lmctl/debug-*.log)
2756
- `),1))}function PG(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 JR(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Hh(),Ek));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(Rh(),rk));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(sd(),Ih)),{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)
2757
- `);let{runChat:r}=await Promise.resolve().then(()=>(sd(),Ih));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Wk(),jk));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(eA(),Zk));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(sA(),rA));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(fA(),uA));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(_A(),hA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(wA(),TA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(hn(),ph));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(hn(),ph)),{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(()=>(da(),xk)),{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(()=>(kA(),IA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(qA(),XA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(ZA(),QA));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(s_(),FA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(__(),hN));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(HN(),WN));return r(e,n)}case"model":{let{runModel:r}=await Promise.resolve().then(()=>(jc(),nI));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(GN(),qN));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(GR(),qR));return r(e,n)}case"db":return UG(e,n);default:if(!CG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(jh(),Fh)),s=await r([t,...e],n);if(s!==null)return s}return KR(n,t)}}async function UG(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2757
+ `),1))}function UG(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 JR(t,e,n){switch(t){case"batch":{let{runBatch:r}=await Promise.resolve().then(()=>(Hh(),Ek));return r(e,n)}case"script":{let{runScript:r}=await Promise.resolve().then(()=>(Rh(),rk));return r(e,n)}case"prompt":{let{runChat:r}=await Promise.resolve().then(()=>(sd(),Ih)),{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)
2758
+ `);let{runChat:r}=await Promise.resolve().then(()=>(sd(),Ih));return r(e,n)}case"mcp":{let{runMcp:r}=await Promise.resolve().then(()=>(Wk(),jk));return r(e,n)}case"tail":{let{runTail:r}=await Promise.resolve().then(()=>(eA(),Zk));return r(e,n)}case"export":{let{runExport:r}=await Promise.resolve().then(()=>(sA(),rA));return r(e,n)}case"usage":{let{runUsage:r}=await Promise.resolve().then(()=>(fA(),uA));return r(e,n)}case"cost":{let{runCost:r}=await Promise.resolve().then(()=>(_A(),hA));return r(e,n)}case"ls":{let{runLs:r}=await Promise.resolve().then(()=>(wA(),TA));return r(e,n)}case"lint":{let{runLint:r}=await Promise.resolve().then(()=>(hn(),ph));return r(e,n)}case"seed":{let{runSeed:r}=await Promise.resolve().then(()=>(hn(),ph)),{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(()=>(da(),xk)),{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(()=>(kA(),IA));return r(e,n)}case"quickrun":{let{runQuickrun:r}=await Promise.resolve().then(()=>(qA(),XA));return r(e,n)}case"hello":{let{runHello:r}=await Promise.resolve().then(()=>(ZA(),QA));return r(e,n)}case"terminal":{let{runTerminal:r}=await Promise.resolve().then(()=>(s_(),FA));return r(e,n)}case"status":{let{runStatus:r}=await Promise.resolve().then(()=>(__(),hN));return r(e,n)}case"running":{let{runRunning:r}=await Promise.resolve().then(()=>(HN(),WN));return r(e,n)}case"model":{let{runModel:r}=await Promise.resolve().then(()=>(jc(),nI));return r(e,n)}case"prices":{let{runPrices:r}=await Promise.resolve().then(()=>(GN(),qN));return r(e,n)}case"ratelimit":{let{runRatelimit:r}=await Promise.resolve().then(()=>(GR(),qR));return r(e,n)}case"db":return FG(e,n);default:if(!OG.has(t)){let{runInferred:r}=await Promise.resolve().then(()=>(jh(),Fh)),s=await r([t,...e],n);if(s!==null)return s}return KR(n,t)}}async function FG(t,e){let[n,...r]=t;return n==="--help"||n==="-h"||n==="help"?(e.stdout.write(`usage: lmctl db <subcommand>
2758
2759
 
2759
2760
  backfill-events Replay the legacy tables into the event-log
2760
2761
  (with --db <copy>) substrate and rebuild projections. Idempotent;
2761
2762
  run against a COPY of the DB, never the live file.
2762
- `),0):n==="backfill-events"?FG(r,e):(e.stderr.write(`usage: lmctl db <subcommand> (backfill-events)
2763
- `),1)}async function FG(t,e){let{resolveDbPath:n}=await Promise.resolve().then(()=>(Nn(),nT)),r=n();if(!((process.env.LMCTL_DB??"").length>0)&&!t.includes("--allow-live"))return e.stderr.write(`refusing to backfill the default live DB.
2763
+ `),0):n==="backfill-events"?jG(r,e):(e.stderr.write(`usage: lmctl db <subcommand> (backfill-events)
2764
+ `),1)}async function jG(t,e){let{resolveDbPath:n}=await Promise.resolve().then(()=>(Nn(),nT)),r=n();if(!((process.env.LMCTL_DB??"").length>0)&&!t.includes("--allow-live"))return e.stderr.write(`refusing to backfill the default live DB.
2764
2765
  resolved target: ${r}
2765
2766
  run against a COPY: cp <state.db> copy.db && lmctl --db copy.db db backfill-events
2766
2767
  (or pass --allow-live to target the resolved DB deliberately).
2767
2768
  `),1;let{migrate:o}=await Promise.resolve().then(()=>(za(),oE)),{backfillEventLog:i}=await Promise.resolve().then(()=>(xu(),Yy)),a=o({dbPath:r});try{let l=i(a);return e.stdout.write(`${JSON.stringify(l,null,2)}
2768
- `),0}finally{a.close()}}if(process.argv[1]!==void 0&&import.meta.url===xG(process.argv[1]).href){let t=await DG(process.argv.slice(2));process.exitCode=t}export{VR as COMMANDS,DG as runCli};
2769
+ `),0}finally{a.close()}}if(process.argv[1]!==void 0&&import.meta.url===CG(process.argv[1]).href){let t=await MG(process.argv.slice(2));process.exitCode=t}export{VR as COMMANDS,MG as runCli};