@lmctl-ai/lmctl 0.2.204 → 0.2.206

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
@@ -1808,39 +1808,39 @@ ${N}`):S,{usage:A.usage.usage(),sessionId:a}))}for(let N of _.splice(0))N()});tr
1808
1808
  `,warning:`${t.provider} ignored ${t.configId}=${r}: ${s}`,message:s}},successLog:e=>`acp: set_config_option(${t.configId}=${t.value(e)}) ok`}}var om=L(()=>{"use strict"});import{spawn as GP}from"node:child_process";import{resolve as fv}from"node:path";function Si(t){let e;try{e=GP(t.binaryPath??Kr.binary,[...Kr.baseArgs],{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:Le(t.env,t.cwd,void 0,"unknown")})}catch(s){return Promise.resolve({status:"unavailable",reason:"spawn",error:s instanceof Error?s.message:String(s)})}let n=lr(e,{provider:"opencode"}),r=t.timeoutMs??5e3;return new Promise(s=>{let o=!1,i=(d,u=!0)=>{if(!o){if(o=!0,clearTimeout(c),e.removeListener("error",a),e.removeListener("exit",l),n.close(),!u){s(d);return}fe(e,{softDelayMs:100,killDelayMs:100}).finally(()=>s(d))}},a=d=>{i({status:"unavailable",reason:"spawn",error:d.message},!1)},l=(d,u)=>{i({status:"unavailable",reason:"handshake",error:`opencode ACP exited before verification (code=${String(d)}, signal=${String(u)})`},!1)};e.once("error",a),e.once("exit",l);let c=setTimeout(()=>{i({status:"unavailable",reason:"timeout"})},r);(async()=>{try{await n.sendRpc("initialize",{protocolVersion:1,clientInfo:{name:"lmctl",version:"0.1.0"},clientCapabilities:{}}),n.sendNotification("notifications/initialized");let d=await n.sendRpc("session/new",{cwd:t.cwd,mcpServers:[]}),u=Cn(d);try{await n.sendRpc("session/set_config_option",{sessionId:u,configId:"model",value:t.model})}catch(f){i({status:"rejected",option:"model",value:t.model,error:f instanceof Error?f.message:String(f)});return}if(t.effort!==void 0)try{await n.sendRpc("session/set_config_option",{sessionId:u,configId:"effort",value:t.effort})}catch(f){i({status:"rejected",option:"effort",value:t.effort,error:f instanceof Error?f.message:String(f)});return}i({status:"verified"})}catch(d){i({status:"unavailable",reason:"handshake",error:d instanceof Error?d.message:String(d)})}})()})}var Kr,im=L(()=>{"use strict";oe();em();rc();yi();jt();Jr();zf();om();Kr={name:"opencode",binary:"opencode",baseArgs:["acp"],argv:()=>[...Kr.baseArgs],preSpawn(t){try{iv(t.cwd)}catch(e){U({event:"opencode_config_install_failed",cwd:t.cwd,error_message:e instanceof Error?e.message:String(e)})}},sessionSetup:[vi({id:"model",provider:"opencode",configId:"model",value:t=>t.model}),vi({id:"effort",provider:"opencode",configId:"effort",value:t=>t.effort})],probe:Si,sessionIdentity:{verifyLoadedSession:t=>{let e=sm(t.requestedSessionId,{...t.env.OPENCODE_DB!==void 0?{dbPath:t.env.OPENCODE_DB}:{}});if(e===null)throw new Error(`opencode bundle: no session "${t.requestedSessionId}" in the opencode session store \u2014 the session must exist on disk before a bundle can resume it`);if(fv(e.directory)!==fv(t.cwd))throw new Error(`opencode bundle: session "${t.requestedSessionId}" belongs to ${e.directory}, not ${t.cwd} \u2014 refusing to resume another workspace's session`)},recheckSession:t=>{if(sm(t.requestedSessionId,{...t.env.OPENCODE_DB!==void 0?{dbPath:t.env.OPENCODE_DB}:{}})===null)throw new Error(`opencode bundle: session "${t.requestedSessionId}" disappeared from the session store mid-bundle`)}}}});import{existsSync as VP}from"node:fs";import{readdir as JP}from"node:fs/promises";import{join as am,resolve as KP}from"node:path";function pv(t){let e=YP.exec(t);return e?e[0]:null}function zP(t){if(!t.includes("notifications/initialized"))return t;let e=t.split(/\r?\n/),n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s.includes("Error handling notification")&&s.includes("notifications/initialized")){let o=[s],i=r;for(;i+1<e.length&&o.length<8&&(i++,o.push(e[i]),e[i].trim()!=="}"););let a=o.join(`
1809
1809
  `);if(/\bcode:\s*-32601\b/.test(a)&&/Method not found[^]*notifications\/initialized/.test(a)){r=i;continue}}n.push(s)}return n.join(`
1810
1810
  `)}async function mv(t,e){let n=KP(e.KIMI_CODE_HOME??process.env.KIMI_CODE_HOME??am(Q,".kimi-code")),r=am(n,"sessions"),s;try{s=await JP(r,{withFileTypes:!0})}catch{throw new Error(`kimi bundle: cannot read the kimi session store at ${r} \u2014 cannot verify session "${t}"`)}for(let o of s)if(o.isDirectory()&&VP(am(r,o.name,t,"agents","main","wire.jsonl")))return;throw new Error(`kimi bundle: no session "${t}" in the kimi session store (${r}) \u2014 the session must exist on disk before a bundle can resume it`)}var YP,lm,bi,cm=L(()=>{"use strict";oe();Ae();om();YP=/runtime\s+\S+\s+does not exist in workspace\s+\S+/;lm=t=>t.permissionMode==="plan"?"plan":"auto";bi={name:"kimi",binary:"kimi",baseArgs:["acp"],argv:()=>[...bi.baseArgs],sessionSetup:[{id:"permission-mode",onFailure:"fail-closed",applies:()=>!0,run:async t=>{await t.sendRpc("session/set_config_option",{sessionId:t.sessionId,configId:"mode",value:lm(t)})},describeFailure:(t,e)=>{let n=lm(t),r=e instanceof Error?e.message:String(e);return{event:"acp_permission_mode_failed",fields:{config_id:"mode",value:n,error_message:r},message:`Cannot set Kimi ACP permission mode to ${n}: ${r}`}},successLog:t=>`acp: set_config_option(mode=${lm(t)}) ok`},vi({id:"model",provider:"kimi",configId:"model",value:t=>t.model})],onExitFinalization(t){let e=pv(t.result);e!==null&&U({event:"kimi_runtime_dead",provider:"kimi",session_id:t.sessionId,matched_text:e})},filterExpectedStderr:zP,sessionIdentity:{verifyLoadedSession:async t=>{await mv(t.requestedSessionId,t.env)},recheckSession:async t=>{await mv(t.requestedSessionId,t.env)}}}});var Ii,hv=L(()=>{"use strict";Ii={name:"hermes",binary:"hermes",baseArgs:["acp"],argv(t){if(t.permissionMode==="plan")throw new Error('provider "hermes" does not support --permission-mode plan');return[...Ii.baseArgs]},preSpawn(t){t.permissionMode==="yolo"&&(t.env.HERMES_YOLO_MODE="1")},modeVocabulary:{known:["default","accept_edits","dont_ask"],selectable:["accept_edits","dont_ask"]},sessionSetup:[{id:"session-mode",onFailure:"fail-closed",applies:t=>t.acpMode!==void 0,run:async t=>{await t.sendRpc("session/set_mode",{sessionId:t.sessionId,modeId:t.acpMode})},describeFailure:(t,e)=>{let n=e instanceof Error?e.message:String(e);return{event:"acp_session_mode_failed",fields:{mode_id:t.acpMode,error_message:n},message:`Cannot set hermes ACP session mode to ${String(t.acpMode)}: ${n}`}},successLog:t=>`acp: set_mode(modeId=${String(t.acpMode)}) ok`},{id:"model",onFailure:"fail-closed",applies:t=>{if(t.model===void 0)return!1;let e=t.response.result?.models?.currentModelId;return t.model!==e},run:async t=>{await t.sendRpc("session/set_model",{sessionId:t.sessionId,modelId:t.model})},describeFailure:(t,e)=>{let n=e instanceof Error?e.message:String(e);return{event:"acp_config_option_failed",fields:{config_id:"model",value:t.model,error_message:n},stderrLine:`[acp] set_model(modelId=${String(t.model)}) failed: ${n}
1811
- `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function ki(t){return QP[t]}var QP,ZP,_v=L(()=>{"use strict";Kw();Qw();ev();im();cm();hv();QP={miniplayer:tc,gemini:Ei,copilot:Ti,opencode:Kr,kimi:bi,hermes:Ii};ZP={miniplayer:{binary:tc.binary,args:tc.baseArgs},gemini:{binary:Ei.binary,args:Ei.baseArgs},copilot:{binary:Ti.binary,args:Ti.baseArgs},opencode:{binary:Kr.binary,args:Kr.baseArgs},kimi:{binary:bi.binary,args:bi.baseArgs},hermes:{binary:Ii.binary,args:Ii.baseArgs}}});import{spawn as gv}from"node:child_process";import{existsSync as eU}from"node:fs";function yv(t,e){let n=ki(t)?.modeVocabulary;if(!n)throw new ye(`ACP mode "${e}" requested for provider "${t}", which declares no ACP mode vocabulary. Add the provider's mode ids to its AcpProviderProfile modeVocabulary before setting a mode.`);if(!n.known.includes(e))throw new ye(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new ye(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function tU(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} ACP process exited with code ${t.exitCode} before completing the prompt.
1811
+ `,message:`Cannot set Hermes ACP model to ${String(t.model)}: ${n}`}},successLog:t=>`acp: set_model(modelId=${String(t.model)}) ok`}],sessionIdentity:{verifyLoadedSession:()=>{}}}});function ki(t){return QP[t]}var QP,ZP,_v=L(()=>{"use strict";Kw();Qw();ev();im();cm();hv();QP={miniplayer:tc,gemini:Ei,copilot:Ti,opencode:Kr,kimi:bi,hermes:Ii};ZP={miniplayer:{binary:tc.binary,args:tc.baseArgs},gemini:{binary:Ei.binary,args:Ei.baseArgs},copilot:{binary:Ti.binary,args:Ti.baseArgs},opencode:{binary:Kr.binary,args:Kr.baseArgs},kimi:{binary:bi.binary,args:bi.baseArgs},hermes:{binary:Ii.binary,args:Ii.baseArgs}}});import{spawn as gv}from"node:child_process";import{existsSync as e1}from"node:fs";function yv(t,e){let n=ki(t)?.modeVocabulary;if(!n)throw new ye(`ACP mode "${e}" requested for provider "${t}", which declares no ACP mode vocabulary. Add the provider's mode ids to its AcpProviderProfile modeVocabulary before setting a mode.`);if(!n.known.includes(e))throw new ye(`provider "${t}" has no ACP mode "${e}" (known: ${n.known.join(", ")}).`);if(!n.selectable.includes(e))throw new ye(`provider "${t}" ACP mode "${e}" is not selectable by lmctl (selectable: ${n.selectable.join(", ")}).`)}function t1(t){let e=t.stderr.trim(),n=`lmctl: ${t.tool} ACP process exited with code ${t.exitCode} before completing the prompt.
1812
1812
  One possible cause: the provider process failed before a complete ACP response was delivered.`;return e?`Original provider error:
1813
1813
  ${Te(e,{provider:t.tool,...t.fullOutput===void 0?{}:{fullOutput:t.fullOutput}})}
1814
1814
 
1815
- ${n}`:n}function nU(t,e){return ki(t)?.filterExpectedStderr?.(e)??e}function Ev(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 Tv(t,e,n,r){for(let s of t.sessionSetup??[]){let o={...e,sessionId:n.sessionId,response:n.response,sendRpc:r};if(s.applies(o))try{await s.run(o),s.successLog&&Me(s.successLog(o))}catch(i){let a=s.describeFailure(o,i);if(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 wv(t,e,n){let r=Le(e.env,e.cwd,e.sessionId);t.preSpawn?.({...n,cwd:e.cwd,env:r});let s=e.binaryPath||t.binary,o=t.argv(n),i=t.yoloAssertion==="always-yolo"?"yolo":n.permissionMode;if(Oe(e.tool,o,i),e.cwd&&!eU(e.cwd))throw U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new ye(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function vv(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=Cn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Cn(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=Cn(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=Cn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Cn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function Sv(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{yv(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let o=e.permissionMode??"yolo",i=[],a={permissionMode:o,...e.model!==void 0?{model:e.model}:{},...e.effort!==void 0?{effort:e.effort}:{},...e.acpMode!==void 0?{acpMode:e.acpMode}:{},purpose:"chat",warnings:{push:k=>{i.push(k)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=wv(n,e,a))}catch(k){return s(k instanceof Error?k:new Error(String(k)))}let u=gv(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:d}),f=Date.now(),m=!1,p=!1,h=0,_=!1,g=!1;if(e.signal){if(e.signal.aborted)return m=!0,U({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),fe(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,U({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),fe(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=ec({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=lr(u,{provider:e.tool,onEvent:k=>{h=Date.now(),Ev(k)&&(g=!0),e.onEvent?.(k)},onNotification:k=>{h=Date.now(),y.processMessage(k)}}),{sendRpc:w,sendNotification:v}=T,b="";u.stderr?.on("data",k=>{b+=k.toString()}),u.on("error",k=>{T.close(k),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:k.message,elapsed_ms:Date.now()-f}),s(new ye(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${k.message}`,{cause:k}))}),u.on("exit",k=>{if(p=!0,T.close(new ye(`ACP process exited with code ${String(k)}`)),m)return;let x=y.finalize();if(x!==null)n.onExitFinalization?.({...a,sessionId:x.sessionId,result:x.result,stopReason:x.stopReason,exitCode:k}),r({result:x.result,sessionId:x.sessionId,durationMs:Date.now()-f,stopReason:x.stopReason,exitCode:k,sawActivity:x.sawActivity,...i.length>0?{warnings:i}:{}});else{let O=nU(e.tool,b),C=tU({tool:e.tool,exitCode:k,stderr:O,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:k,stderr_summary:C,elapsed_ms:Date.now()-f}),s(new Error(C))}}),(async()=>{try{let k=await vv({sendRpc:w,sendNotification:v,opts:e,outputProcessor:y});E=k.sessionId,e.onSessionId?.(E);let x=k.sessionResponse;await Tv(n,a,{sessionId:E,response:x},w),y.beginTurn(),_=!0,Me(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},C=>{C.error?y.cancelTurn():O=y.completeTurn(C)}),!O)throw new Error("ACP prompt completed without a result boundary");_=!1,Me(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),nn(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>_,lastEventAtMs:()=>h,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(k){fe(u).catch(()=>{}),s(k instanceof Error?k:new Error(String(k)))}})()})}async function bv(t){let e=ki(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&yv(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,o={permissionMode:n,...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.acpMode!==void 0?{acpMode:t.acpMode}:{},purpose:"chat",warnings:{push:x=>{r.push(x)}}},{binary:i,spawnArgs:a,spawnEnv:l}=wv(e,t,o),c=gv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,h="";c.stderr?.on("data",x=>{h+=x.toString()});let _,g,E=ec({tool:t.tool,onDelta:x=>_?.(x),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=lr(c,{provider:t.tool,onEvent:x=>{u.lastEventAtMs=Date.now(),Ev(x)&&(u.backgroundJobLaunched=!0),g?.(x)},onNotification:x=>{u.lastEventAtMs=Date.now(),E.processMessage(x)}}),T=()=>new Error(`ACP bundle process (${t.tool}) exited${u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`),w=[],v=()=>u.exited?Promise.resolve():new Promise(x=>{w.push(x)}),b=null;c.on("error",x=>{p=new ye(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${x.message}`,{cause:x}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:x.message,elapsed_ms:Date.now()-d}),y.close(x)}),c.on("exit",x=>{if(u.exited=!0,u.exitCode=x,y.close(new ye(`ACP process exited with code ${String(x)}`)),!u.telemetryFired){u.telemetryFired=!0;let O=E.finalize();O!==null&&e.onExitFinalization?.({...o,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:x})}if(b!==null){let O=b;b=null,O(T())}for(let O of w.splice(0))O()});try{let x=await vv({sendRpc:y.sendRpc,sendNotification:y.sendNotification,opts:t,outputProcessor:E,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...o,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});m=x.sessionId,t.onSessionId?.(m),await Tv(e,o,{sessionId:x.sessionId,response:x.sessionResponse},y.sendRpc)}catch(x){let O=p??(x instanceof Error?x:new Error(String(x)));throw fe(c).catch(()=>{}),O}let k=x=>new Promise(O=>{setTimeout(O,x).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(x,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,_=O.onDelta,g=O.onEvent;let C=Date.now();try{E.beginTurn(),Me(`acp: bundle prompt sent (${x.length} chars)`);let S,A=!1;if(await new Promise((I,R)=>{b=R;let P,$=()=>{A=!0,f=Promise.resolve().then(()=>P).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),R(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",$,{once:!0}),P=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:x}]},M=>{A||(M.error?E.cancelTurn():S=E.completeTurn(M),_=void 0,g=void 0)}),P.then(M=>{q?.removeEventListener("abort",$),I(M)},M=>{q?.removeEventListener("abort",$),R(M instanceof Error?M:new Error(String(M)))})}),b=null,!S)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Me(`acp: bundle result received (${S.result.length} chars, stopReason=${S.stopReason})`);let N=s&&r.length>0?[...r]:void 0;return s=!1,{result:S.result,sessionId:S.sessionId,stopReason:S.stopReason,durationMs:Date.now()-C,sawActivity:S.sawActivity,...N!==void 0?{warnings:N}:{}}}catch(S){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():S}finally{_=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=>{nn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let x=t.closeTimeoutMs??2e3;await Promise.race([v(),k(x)]),u.exited||await fe(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,x),killDelayMs:Math.min(1e3,x)}).catch(()=>{})})()),u.closing}}}var dm=L(()=>{"use strict";oe();Vr();Jr();_i();rn();oe();jt();gt();yi();zf();_v();cm();im();yi()});function we(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Iv(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=rU){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 kv(){let t=new Map;return(e,n)=>{sU(e,Iv(t,n))}}function sU(t,e){let n=t.type;if(n==="system"){let r=t.subtype;if(r==="api_retry"){let s=typeof t.attempt=="number"?t.attempt:void 0,o=typeof t.max_retries=="number"?t.max_retries:void 0,i=typeof t.error_status=="number"?t.error_status:void 0,a=typeof t.error=="string"?t.error:void 0,l=typeof t.retry_delay_ms=="number"?t.retry_delay_ms:void 0,c=[];s!==void 0&&c.push(o!==void 0?`attempt ${s}/${o}`:`attempt ${s}`),i!==void 0&&c.push(`HTTP ${i}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(we(a,60));let d=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:d});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,o=typeof t.error=="string"?t.error:void 0,i=["api_error"];s!==void 0&&i.push(`HTTP ${s}`),o&&i.push(we(o,80)),e({kind:"other",summary:i.join(": "),raw:t});return}e({kind:"system",summary:r||"system",raw:t});return}if(n==="assistant"||n==="user"){let s=t.message?.content;if(!Array.isArray(s))return;for(let o of s){let i=o.type;if(i==="text"){let a=o.text||"";a&&e({kind:"text",summary:we(a),raw:o})}else if(i==="tool_use"){let a=o.name||"tool",l=typeof o.id=="string"?o.id:void 0,c=o.input,d="";c&&(typeof c.command=="string"?d=c.command:typeof c.file_path=="string"?d=c.file_path:typeof c.path=="string"?d=c.path:typeof c.pattern=="string"?d=c.pattern:typeof c.url=="string"?d=c.url:d=we(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:we(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:we(a),raw:o})}else if(i==="tool_result"){let l=o.is_error===!0?"error":"ok",c=typeof o.tool_use_id=="string"?o.tool_use_id:void 0,d,u=o.content;if(typeof u=="string")d=`${u.split(`
1815
+ ${n}`:n}function n1(t,e){return ki(t)?.filterExpectedStderr?.(e)??e}function Ev(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 Tv(t,e,n,r){for(let s of t.sessionSetup??[]){let o={...e,sessionId:n.sessionId,response:n.response,sendRpc:r};if(s.applies(o))try{await s.run(o),s.successLog&&Me(s.successLog(o))}catch(i){let a=s.describeFailure(o,i);if(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 wv(t,e,n){let r=Le(e.env,e.cwd,e.sessionId);t.preSpawn?.({...n,cwd:e.cwd,env:r});let s=e.binaryPath||t.binary,o=t.argv(n),i=t.yoloAssertion==="always-yolo"?"yolo":n.permissionMode;if(Oe(e.tool,o,i),e.cwd&&!e1(e.cwd))throw U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:`sessiondir missing: ${e.cwd}`,elapsed_ms:0}),new ye(`sessiondir missing: ${e.cwd}`,{cause:Object.assign(new Error("cwd missing"),{code:"ENOENT_CWD"})});return{binary:s,spawnArgs:o,spawnEnv:r}}async function vv(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=Cn(f),s.setSessionId(a),{sessionId:a,sessionResponse:f}}let d=Cn(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=Cn(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=Cn(c,r.sessionId);l=c,s.setSessionId(a)}else{let c=await e("session/new",{cwd:r.cwd,mcpServers:[]});a=Cn(c),l=c,s.setSessionId(a)}return{sessionId:a,sessionResponse:l}}function Sv(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{yv(e.tool,e.acpMode)}catch(r){return Promise.reject(r)}return new Promise((r,s)=>{let o=e.permissionMode??"yolo",i=[],a={permissionMode:o,...e.model!==void 0?{model:e.model}:{},...e.effort!==void 0?{effort:e.effort}:{},...e.acpMode!==void 0?{acpMode:e.acpMode}:{},purpose:"chat",warnings:{push:k=>{i.push(k)}}},l,c,d;try{({binary:l,spawnArgs:c,spawnEnv:d}=wv(n,e,a))}catch(k){return s(k instanceof Error?k:new Error(String(k)))}let u=gv(l,c,{cwd:e.cwd,stdio:["pipe","pipe","pipe"],env:d}),f=Date.now(),m=!1,p=!1,h=0,_=!1,g=!1;if(e.signal){if(e.signal.aborted)return m=!0,U({event:"transport_abort",provider:e.tool,phase:"pre_spawn"}),fe(u).catch(()=>{}),s(new Error("Aborted"));e.signal.addEventListener("abort",()=>{m=!0,U({event:"transport_abort",provider:e.tool,elapsed_ms:Date.now()-f}),fe(u).catch(()=>{}),s(new Error("Aborted"))},{once:!0})}let E=e.sessionId||"",y=ec({tool:e.tool,onDelta:e.onDelta,...n.isolateResult?{isolateResult:n.isolateResult}:{}});y.setSessionId(E);let T=lr(u,{provider:e.tool,onEvent:k=>{h=Date.now(),Ev(k)&&(g=!0),e.onEvent?.(k)},onNotification:k=>{h=Date.now(),y.processMessage(k)}}),{sendRpc:w,sendNotification:v}=T,b="";u.stderr?.on("data",k=>{b+=k.toString()}),u.on("error",k=>{T.close(k),U({event:"transport_error",provider:e.tool,error_class:"TransportConnectionError",error_message:k.message,elapsed_ms:Date.now()-f}),s(new ye(`Failed to spawn ${n.binary} ${n.baseArgs.join(" ")}: ${k.message}`,{cause:k}))}),u.on("exit",k=>{if(p=!0,T.close(new ye(`ACP process exited with code ${String(k)}`)),m)return;let x=y.finalize();if(x!==null)n.onExitFinalization?.({...a,sessionId:x.sessionId,result:x.result,stopReason:x.stopReason,exitCode:k}),r({result:x.result,sessionId:x.sessionId,durationMs:Date.now()-f,stopReason:x.stopReason,exitCode:k,sawActivity:x.sawActivity,...i.length>0?{warnings:i}:{}});else{let O=n1(e.tool,b),C=t1({tool:e.tool,exitCode:k,stderr:O,fullOutput:b});U({event:"transport_error",provider:e.tool,error_class:"Error",reason:"provider_no_result",exit_code:k,stderr_summary:C,elapsed_ms:Date.now()-f}),s(new Error(C))}}),(async()=>{try{let k=await vv({sendRpc:w,sendNotification:v,opts:e,outputProcessor:y});E=k.sessionId,e.onSessionId?.(E);let x=k.sessionResponse;await Tv(n,a,{sessionId:E,response:x},w),y.beginTurn(),_=!0,Me(`acp: prompt sent (${t.length} chars)`);let O;if(await w("session/prompt",{sessionId:E,prompt:[{type:"text",text:t}]},C=>{C.error?y.cancelTurn():O=y.completeTurn(C)}),!O)throw new Error("ACP prompt completed without a result boundary");_=!1,Me(`acp: result received (${O.result.length} chars, stopReason=${O.stopReason})`),nn(e.holdOpen,{isAborted:()=>m,hasChildExited:()=>p,isTurnInFlight:()=>_,lastEventAtMs:()=>h,closeStdin:()=>{u.stdin?.end()},signal:e.signal,label:e.tool,wasBackgroundJobLaunched:()=>g})}catch(k){fe(u).catch(()=>{}),s(k instanceof Error?k:new Error(String(k)))}})()})}async function bv(t){let e=ki(t.tool);if(!e)throw new Error(`No ACP config for tool "${t.tool}"`);t.acpMode!==void 0&&yv(t.tool,t.acpMode);let n=t.permissionMode??"yolo",r=[],s=!0,o={permissionMode:n,...t.model!==void 0?{model:t.model}:{},...t.effort!==void 0?{effort:t.effort}:{},...t.acpMode!==void 0?{acpMode:t.acpMode}:{},purpose:"chat",warnings:{push:x=>{r.push(x)}}},{binary:i,spawnArgs:a,spawnEnv:l}=wv(e,t,o),c=gv(i,a,{cwd:t.cwd,stdio:["pipe","pipe","pipe"],env:l}),d=Date.now(),u={exited:!1,exitCode:null,lastEventAtMs:0,turnInFlight:!1,backgroundJobLaunched:!1,completedTurns:0,closed:!1,closing:null,telemetryFired:!1},f,m=t.sessionId||"",p=null,h="";c.stderr?.on("data",x=>{h+=x.toString()});let _,g,E=ec({tool:t.tool,onDelta:x=>_?.(x),...e.isolateResult?{isolateResult:e.isolateResult}:{}});E.setSessionId(m);let y=lr(c,{provider:t.tool,onEvent:x=>{u.lastEventAtMs=Date.now(),Ev(x)&&(u.backgroundJobLaunched=!0),g?.(x)},onNotification:x=>{u.lastEventAtMs=Date.now(),E.processMessage(x)}}),T=()=>new Error(`ACP bundle process (${t.tool}) exited${u.exitCode!==null?` with code ${u.exitCode}`:""} after ${u.completedTurns} completed prompt(s); the bundle cannot continue`),w=[],v=()=>u.exited?Promise.resolve():new Promise(x=>{w.push(x)}),b=null;c.on("error",x=>{p=new ye(`Failed to spawn ${e.binary} ${e.baseArgs.join(" ")}: ${x.message}`,{cause:x}),U({event:"transport_error",provider:t.tool,error_class:"TransportConnectionError",error_message:x.message,elapsed_ms:Date.now()-d}),y.close(x)}),c.on("exit",x=>{if(u.exited=!0,u.exitCode=x,y.close(new ye(`ACP process exited with code ${String(x)}`)),!u.telemetryFired){u.telemetryFired=!0;let O=E.finalize();O!==null&&e.onExitFinalization?.({...o,sessionId:O.sessionId,result:O.result,stopReason:O.stopReason,exitCode:x})}if(b!==null){let O=b;b=null,O(T())}for(let O of w.splice(0))O()});try{let x=await vv({sendRpc:y.sendRpc,sendNotification:y.sendNotification,opts:t,outputProcessor:E,strictSessionIdentity:!0,verifyLoadResponse:e.sessionIdentity===void 0?void 0:async O=>e.sessionIdentity.verifyLoadedSession({...o,requestedSessionId:t.sessionId,loadResponse:O,cwd:t.cwd,env:l})});m=x.sessionId,t.onSessionId?.(m),await Tv(e,o,{sessionId:x.sessionId,response:x.sessionResponse},y.sendRpc)}catch(x){let O=p??(x instanceof Error?x:new Error(String(x)));throw fe(c).catch(()=>{}),O}let k=x=>new Promise(O=>{setTimeout(O,x).unref?.()});return{tool:t.tool,get sessionId(){return m},get completedTurns(){return u.completedTurns},async sendTurn(x,O={}){if(f&&await f,u.closed||u.closing!==null)throw new Error(`ACP bundle session (${t.tool}) is closed`);if(u.exited)throw T();if(u.turnInFlight)throw new Error(`ACP bundle session (${t.tool}) has a turn still in flight \u2014 a stalled turn poisons the bundle; close it instead of sending`);if(O.signal?.aborted)throw new Error("Aborted");if(e.sessionIdentity?.recheckSession!==void 0){if(await e.sessionIdentity.recheckSession({requestedSessionId:m,cwd:t.cwd,env:l}),u.exited)throw T();if(O.signal?.aborted)throw new Error("Aborted")}u.turnInFlight=!0,_=O.onDelta,g=O.onEvent;let C=Date.now();try{E.beginTurn(),Me(`acp: bundle prompt sent (${x.length} chars)`);let S,A=!1;if(await new Promise((I,R)=>{b=R;let P,$=()=>{A=!0,f=Promise.resolve().then(()=>P).catch(()=>{}),E.cancelTurn(),y.sendNotification("session/cancel",{sessionId:m}),R(new Error("Aborted"))},q=O.signal;q?.addEventListener("abort",$,{once:!0}),P=y.sendRpc("session/prompt",{sessionId:m,prompt:[{type:"text",text:x}]},M=>{A||(M.error?E.cancelTurn():S=E.completeTurn(M),_=void 0,g=void 0)}),P.then(M=>{q?.removeEventListener("abort",$),I(M)},M=>{q?.removeEventListener("abort",$),R(M instanceof Error?M:new Error(String(M)))})}),b=null,!S)throw new Error("ACP prompt completed without a result boundary");u.turnInFlight=!1,u.completedTurns+=1,Me(`acp: bundle result received (${S.result.length} chars, stopReason=${S.stopReason})`);let N=s&&r.length>0?[...r]:void 0;return s=!1,{result:S.result,sessionId:S.sessionId,stopReason:S.stopReason,durationMs:Date.now()-C,sawActivity:S.sawActivity,...N!==void 0?{warnings:N}:{}}}catch(S){throw b=null,E.cancelTurn(),u.turnInFlight=!1,u.exited?T():S}finally{_=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=>{nn(t.holdOpen,{isAborted:()=>!1,hasChildExited:()=>u.exited,isTurnInFlight:()=>u.turnInFlight,lastEventAtMs:()=>u.lastEventAtMs,closeStdin:()=>{c.stdin?.end(),O()},label:t.tool,wasBackgroundJobLaunched:()=>u.backgroundJobLaunched})}):c.stdin?.end(),u.exited))return;let x=t.closeTimeoutMs??2e3;await Promise.race([v(),k(x)]),u.exited||await fe(c,{stdinEnd:!1,softDelayMs:Math.min(1e3,x),killDelayMs:Math.min(1e3,x)}).catch(()=>{})})()),u.closing}}}var dm=L(()=>{"use strict";oe();Vr();Jr();_i();rn();oe();jt();gt();yi();zf();_v();cm();im();yi()});function we(t,e=120){let n=t.replace(/\s+/g," ").trim();return n.length>e?n.slice(0,e-1)+"\u2026":n}function Iv(t,e){return n=>{if(n.kind==="tool_use"&&typeof n.id=="string"){if(t.size>=r1){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 kv(){let t=new Map;return(e,n)=>{s1(e,Iv(t,n))}}function s1(t,e){let n=t.type;if(n==="system"){let r=t.subtype;if(r==="api_retry"){let s=typeof t.attempt=="number"?t.attempt:void 0,o=typeof t.max_retries=="number"?t.max_retries:void 0,i=typeof t.error_status=="number"?t.error_status:void 0,a=typeof t.error=="string"?t.error:void 0,l=typeof t.retry_delay_ms=="number"?t.retry_delay_ms:void 0,c=[];s!==void 0&&c.push(o!==void 0?`attempt ${s}/${o}`:`attempt ${s}`),i!==void 0&&c.push(`HTTP ${i}`),l!==void 0&&c.push(`retry in ${Math.round(l/1e3)}s`),a&&c.push(we(a,60));let d=c.length>0?c.join(", "):r;e({kind:"api_retry",summary:d});return}if(r==="api_error"){let s=typeof t.error_status=="number"?t.error_status:void 0,o=typeof t.error=="string"?t.error:void 0,i=["api_error"];s!==void 0&&i.push(`HTTP ${s}`),o&&i.push(we(o,80)),e({kind:"other",summary:i.join(": "),raw:t});return}e({kind:"system",summary:r||"system",raw:t});return}if(n==="assistant"||n==="user"){let s=t.message?.content;if(!Array.isArray(s))return;for(let o of s){let i=o.type;if(i==="text"){let a=o.text||"";a&&e({kind:"text",summary:we(a),raw:o})}else if(i==="tool_use"){let a=o.name||"tool",l=typeof o.id=="string"?o.id:void 0,c=o.input,d="";c&&(typeof c.command=="string"?d=c.command:typeof c.file_path=="string"?d=c.file_path:typeof c.path=="string"?d=c.path:typeof c.pattern=="string"?d=c.pattern:typeof c.url=="string"?d=c.url:d=we(JSON.stringify(c))),e({kind:"tool_use",tool:a,summary:we(d),id:l,raw:o})}else if(i==="thinking"||i==="redacted_thinking"){let a=o.thinking||o.data||"";e({kind:"thinking",summary:we(a),raw:o})}else if(i==="tool_result"){let l=o.is_error===!0?"error":"ok",c=typeof o.tool_use_id=="string"?o.tool_use_id:void 0,d,u=o.content;if(typeof u=="string")d=`${u.split(`
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
- `).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 sc(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?kv():void 0;if(e.bundleSession!==void 0)return xn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await Dw(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 oc(t){let e=t.binary==="qwen"?"qwen":"claude",n=await Mw({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=kv(),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 Av(){let t=new Map;return(e,n)=>{oU(e,Iv(t,n))}}function oU(t,e){if(t.method!=="session/update")return;let s=t.params?.update;if(!s)return;let o=s.sessionUpdate;if(o){if(o==="agent_message_chunk"){let a=s.content?.text||"";a&&e({kind:"text",summary:we(a)});return}if(o==="agent_thought_chunk"||o==="thought"||o==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:we(a)});return}if(o==="tool_call"){let i=s.title||s.kind||"tool",a=typeof s.toolCallId=="string"?s.toolCallId:void 0,l="",c=s.rawInput;c&&(typeof c.command=="string"?l=c.command:typeof c.file_path=="string"?l=c.file_path:typeof c.path=="string"?l=c.path:l=we(JSON.stringify(c))),e({kind:"tool_use",tool:i,summary:we(l),id:a});return}if(o==="tool_call_update"){let i=s.status||"",a=typeof s.toolCallId=="string"?s.toolCallId:void 0;if(i==="completed"||i==="failed")e({kind:"tool_result",summary:i,status:i==="failed"?"error":"ok",id:a});else if(i==="in_progress"){let l=s.content,c=typeof l=="string"?l:typeof l?.text=="string"?l.text:"",d=c?`running\u2026 ${we(c,80)}`:"running\u2026";e({kind:"other",summary:d,id:a})}return}e({kind:"other",summary:o})}}function Nv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function sn(t,e){let n=e.acpTool||e.binary,r=e.onProgress?Av():void 0;if(e.bundleSession!==void 0)return xn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=[];if(e.model&&n==="copilot"){let a="copilot --acp does not implement per-session model selection";Fe({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await Sv(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,...Nv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function on(t){let e=t.acpTool||t.binary,n=await bv({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,effort:t.effort,alias:t.alias,permissionMode:t.permissionMode,acpMode:t.acpMode,requireResume:!0,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=Av(),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,...Nv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Rv(t,e){let n=t.method;if(!n)return;let r=t.params;if(n==="turn/started"){e({kind:"system",summary:"turn started"});return}if(n==="turn/completed"){e({kind:"system",summary:"turn completed"});return}if(n==="error"){let s=r?.error,o=typeof s?.message=="string"?s.message:void 0,i=o&&o.length>0?o:"(no message)",a=r?.willRetry===!0;e(a?{kind:"api_retry",summary:`codex retry: ${we(i,120)}`}:{kind:"other",summary:`codex error: ${we(i,120)}`});return}if(n==="item/started"||n==="item/completed"){let s=r?.item;if(!s)return;let o=s.type,i=n==="item/started";switch(o){case"commandExecution":{let a=typeof s.id=="string"?s.id:void 0,l=s.command,c=Array.isArray(l)?l.join(" "):typeof l=="string"?l:"";if(i)e({kind:"tool_use",tool:"Bash",summary:we(c||"(command)"),id:a});else{let d=s.exitCode,u=s.status||"",f=typeof s.durationMs=="number"?s.durationMs:void 0,m=typeof d=="number"?`exit ${d}`:u||"done",p=[];typeof d=="number"?p.push(`exit ${d}`):u&&p.push(u),typeof f=="number"&&p.push(`${Math.round(f/1e3)}s`),e({kind:"tool_result",summary:p.join(", ")||"done",status:m,elapsedMs:f,id:a})}return}case"fileChange":{let a=typeof s.id=="string"?s.id:void 0;if(i){let l=s.changes,c=Array.isArray(l)?l.map(d=>d.path||"").filter(Boolean).join(", "):"";e({kind:"tool_use",tool:"FileChange",summary:we(c||"(edit)"),id:a})}else{let l=s.status||"done";e({kind:"tool_result",summary:l,status:l,id:a})}return}case"mcpToolCall":{let a=typeof s.id=="string"?s.id:void 0,l=s.server||"mcp",c=s.tool||"tool";if(i)e({kind:"tool_use",tool:`${l}/${c}`,summary:"",id:a});else{let d=s.status||"done";e({kind:"tool_result",summary:d,status:d,id:a})}return}case"webSearch":{let a=typeof s.id=="string"?s.id:void 0;e(i?{kind:"tool_use",tool:"WebSearch",summary:we(s.query||""),id:a}:{kind:"tool_result",summary:"done",status:"done",id:a});return}case"reasoning":{i&&e({kind:"thinking",summary:""});return}case"agentMessage":case"userMessage":return;default:{o&&e({kind:i?"tool_use":"tool_result",tool:o,summary:""});return}}}if(n==="item/agentMessage/delta"){let s=r?.delta||"";if(s){let o=typeof r?._lmctlItemPhase=="string"?r._lmctlItemPhase:void 0;e(o==="commentary"?{kind:"thinking",summary:we(s)}:{kind:"text",summary:we(s)})}return}if(n.startsWith("item/reasoning/")||n==="item/reasoning/summaryTextDelta"||n==="item/reasoning/textDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";e({kind:"thinking",summary:we(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let o=s.split(`
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 sc(t,e){let n=e.binary==="qwen"?"qwen":"claude",r=e.onProgress?kv():void 0;if(e.bundleSession!==void 0)return xn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=await Dw(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 oc(t){let e=t.binary==="qwen"?"qwen":"claude",n=await Mw({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs,sessionFileRoots:t.sessionFileRoots});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=kv(),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 Av(){let t=new Map;return(e,n)=>{o1(e,Iv(t,n))}}function o1(t,e){if(t.method!=="session/update")return;let s=t.params?.update;if(!s)return;let o=s.sessionUpdate;if(o){if(o==="agent_message_chunk"){let a=s.content?.text||"";a&&e({kind:"text",summary:we(a)});return}if(o==="agent_thought_chunk"||o==="thought"||o==="reasoning"){let a=s.content?.text||"";e({kind:"thinking",summary:we(a)});return}if(o==="tool_call"){let i=s.title||s.kind||"tool",a=typeof s.toolCallId=="string"?s.toolCallId:void 0,l="",c=s.rawInput;c&&(typeof c.command=="string"?l=c.command:typeof c.file_path=="string"?l=c.file_path:typeof c.path=="string"?l=c.path:l=we(JSON.stringify(c))),e({kind:"tool_use",tool:i,summary:we(l),id:a});return}if(o==="tool_call_update"){let i=s.status||"",a=typeof s.toolCallId=="string"?s.toolCallId:void 0;if(i==="completed"||i==="failed")e({kind:"tool_result",summary:i,status:i==="failed"?"error":"ok",id:a});else if(i==="in_progress"){let l=s.content,c=typeof l=="string"?l:typeof l?.text=="string"?l.text:"",d=c?`running\u2026 ${we(c,80)}`:"running\u2026";e({kind:"other",summary:d,id:a})}return}e({kind:"other",summary:o})}}function Nv(t,e){if(e!==void 0)return t===""&&!e?"empty":void 0}async function sn(t,e){let n=e.acpTool||e.binary,r=e.onProgress?Av():void 0;if(e.bundleSession!==void 0)return xn(e.bundleSession,n,e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let s=[];if(e.model&&n==="copilot"){let a="copilot --acp does not implement per-session model selection";Fe({event:"model_ignored",provider:n,model:e.model,reason:a}),s.push(`copilot ignored model=${e.model}: ${a}`)}let o=await Sv(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,...Nv(o.result,o.sawActivity)!==void 0?{status:"empty"}:{},...i.length>0?{warnings:i}:{}}}async function on(t){let e=t.acpTool||t.binary,n=await bv({tool:e,sessionId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,effort:t.effort,alias:t.alias,permissionMode:t.permissionMode,acpMode:t.acpMode,requireResume:!0,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs});return{provider:e,get sessionId(){return n.sessionId},get completedTurns(){return n.completedTurns},async sendTurn(r,s={}){let o=Av(),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,...Nv(i.result,i.sawActivity)?{status:"empty"}:{},...i.warnings!==void 0?{warnings:i.warnings}:{}}},close:()=>n.close()}}function Rv(t,e){let n=t.method;if(!n)return;let r=t.params;if(n==="turn/started"){e({kind:"system",summary:"turn started"});return}if(n==="turn/completed"){e({kind:"system",summary:"turn completed"});return}if(n==="error"){let s=r?.error,o=typeof s?.message=="string"?s.message:void 0,i=o&&o.length>0?o:"(no message)",a=r?.willRetry===!0;e(a?{kind:"api_retry",summary:`codex retry: ${we(i,120)}`}:{kind:"other",summary:`codex error: ${we(i,120)}`});return}if(n==="item/started"||n==="item/completed"){let s=r?.item;if(!s)return;let o=s.type,i=n==="item/started";switch(o){case"commandExecution":{let a=typeof s.id=="string"?s.id:void 0,l=s.command,c=Array.isArray(l)?l.join(" "):typeof l=="string"?l:"";if(i)e({kind:"tool_use",tool:"Bash",summary:we(c||"(command)"),id:a});else{let d=s.exitCode,u=s.status||"",f=typeof s.durationMs=="number"?s.durationMs:void 0,m=typeof d=="number"?`exit ${d}`:u||"done",p=[];typeof d=="number"?p.push(`exit ${d}`):u&&p.push(u),typeof f=="number"&&p.push(`${Math.round(f/1e3)}s`),e({kind:"tool_result",summary:p.join(", ")||"done",status:m,elapsedMs:f,id:a})}return}case"fileChange":{let a=typeof s.id=="string"?s.id:void 0;if(i){let l=s.changes,c=Array.isArray(l)?l.map(d=>d.path||"").filter(Boolean).join(", "):"";e({kind:"tool_use",tool:"FileChange",summary:we(c||"(edit)"),id:a})}else{let l=s.status||"done";e({kind:"tool_result",summary:l,status:l,id:a})}return}case"mcpToolCall":{let a=typeof s.id=="string"?s.id:void 0,l=s.server||"mcp",c=s.tool||"tool";if(i)e({kind:"tool_use",tool:`${l}/${c}`,summary:"",id:a});else{let d=s.status||"done";e({kind:"tool_result",summary:d,status:d,id:a})}return}case"webSearch":{let a=typeof s.id=="string"?s.id:void 0;e(i?{kind:"tool_use",tool:"WebSearch",summary:we(s.query||""),id:a}:{kind:"tool_result",summary:"done",status:"done",id:a});return}case"reasoning":{i&&e({kind:"thinking",summary:""});return}case"agentMessage":case"userMessage":return;default:{o&&e({kind:i?"tool_use":"tool_result",tool:o,summary:""});return}}}if(n==="item/agentMessage/delta"){let s=r?.delta||"";if(s){let o=typeof r?._lmctlItemPhase=="string"?r._lmctlItemPhase:void 0;e(o==="commentary"?{kind:"thinking",summary:we(s)}:{kind:"text",summary:we(s)})}return}if(n.startsWith("item/reasoning/")||n==="item/reasoning/summaryTextDelta"||n==="item/reasoning/textDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";e({kind:"thinking",summary:we(s)});return}if(n==="item/commandExecution/outputDelta"){let s=(typeof r?.delta=="string"?r.delta:"")||"";if(s){let o=s.split(`
1819
1819
  `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${we(i,60)}`:we(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n==="item/commandExecution/terminalInteraction"||n==="item/commandExecution/outputChunk"||n==="item/commandExecution/output"){let s=(typeof r?.stdin=="string"?r.stdin:"")||(typeof r?.delta=="string"?r.delta:"")||(typeof r?.output=="string"?r.output:"")||(typeof r?.text=="string"?r.text:"")||(typeof r?.content=="string"?r.content:"")||(typeof r?.chunk=="string"?r.chunk:"")||"";if(s){let o=s.split(`
1820
- `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${we(i,60)}`:we(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n.startsWith("item/")){e({kind:"other",summary:n.slice(5)});return}}async function Lv(t,e){if(e.bundleSession!==void 0)return xn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Bw(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=>Rv(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 xv(t){let e=await Xw({threadId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs});return{provider:"codex",get sessionId(){return e.sessionId},get completedTurns(){return e.completedTurns},async sendTurn(n,r={}){let s=await e.sendTurn(n,{...r,onEvent:o=>{r.onEvent?.(o),r.onProgress&&Rv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var rU,On=L(()=>{"use strict";Vf();Vf();qw();dm();Hs();oe();rU=256});function um(t={}){let e=ka(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ue{constructor(){super({provider:new Ia({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!1,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. Live ACP sessions cannot be resumed after exit."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>{if(s.sessionId||s.requireResume)throw new Error('miniplayer does not support resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"');return sn(r,{...s,env:n(s.env),acpTool:"miniplayer",requireResume:!1})}})}openSession(r){if(r.sessionId)throw new Error("miniplayer cannot reopen a closed ACP session; start a fresh conversation");return on({...r,env:n(r.env),binary:"miniplayer",acpTool:"miniplayer"})}manualSeedHint(){return{launchCommand:"miniplayer --help",postLaunchNote:'Use lmctl prompt --provider miniplayer --model <model> "<prompt>". Each invocation creates a fresh run.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal or session resume")}async seed(){return{success:!1,error:'miniplayer does not support team session resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"'}}}}var fm=L(()=>{"use strict";Je();Na();On()});import{readdir as ic,stat as Cv,unlink as iU}from"node:fs/promises";import{join as Js,basename as Ov}from"node:path";function aU(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function lU(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return he(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}function cU(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 dU(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 uU(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 Dv(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 h=p.message.content;if(typeof h=="string"){if(h.includes("<command-name>")||h.includes("<local-command-"))continue;e++,l=G(h.trim(),80)}}else if(p.type==="assistant"&&p.message){let h=p.message.content;if(Array.isArray(h))for(let g of h)g.type==="text"&&e++;let _=p.message.usage;if(_){let g=dU(_),E=p.message.id?.trim();if(E){let T=c.get(E);T?cU(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 h=uU(p);n+=p.input+p.cacheRead+h.total,r+=p.cacheRead,s+=h.total,u+=h.fiveMinute,f+=h.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 fU(t){let e=mU(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 mU(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 ac,Mv=L(()=>{"use strict";Ae();ac=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Js(Q,".claude"),this.projectsDir=Js(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await ic(this.projectsDir)}catch{return e}for(let r of n){let s=Js(this.projectsDir,r);if(!(await Cv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await ic(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Ov(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Js(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await _t(e,50),s=await Ie(e),o="",i,a,l,c,d,u;for(let m of r)if(!aU(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 Dv(e);return{provider:"claude",sessionId:n,slug:i,cwd:o,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:f.lastUserMessage??d,messageCount:f.messageCount,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:f.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:f.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:f.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ie(n),s=[],o="",i,a,l,c,d,u,f,m=e,p,h=[];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:lU(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.")&&h.push(T)}if(typeof y=="string"){let T=y.trim();if(T.includes("<command-name>")||T.includes("<local-command-")||/^<task-notification>\s*</u.test(T)||T.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T))continue;d||(d=G(y.trim(),80)),u=G(y.trim(),80),p=void 0,s.push({role:"user",timestamp:E,content:he(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?he(T.content):JSON.stringify(T.content);s.push({role:"tool_result",timestamp:E,content:w,toolCallId:T.tool_use_id})}}}if(g.type==="assistant"&&g.message){g.message.stop_reason===null||g.message.stop_reason==="tool_use"?p="in_progress":typeof g.message.stop_reason=="string"&&(p="complete"),g.message.model&&(l=g.message.model);let E=new Date(g.timestamp||0),y=g.message.content;if(Array.isArray(y))for(let T of y)T.type==="text"&&T.text?s.push({role:"assistant",timestamp:E,content:he(T.text),model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="tool_use"?s.push({role:"tool_use",timestamp:E,content:T.name||"unknown tool",toolName:T.name,toolInput:JSON.stringify(T.input,null,2),toolInputData:T.input,toolCallId:T.id,model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="thinking"&&T.thinking&&s.push({role:"thinking",timestamp:E,content:T.thinking})}}if(!o)return null;fU(s);let _=await Dv(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:_.messageCount,filePath:n,totalInputTokens:_.totalInputTokens||void 0,totalCachedInputTokens:_.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:_.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:_.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:_.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:_.totalOutputTokens||void 0,lastInputTokens:_.lastInputTokens||void 0,lastTokenUsage:_.lastTokenUsage,messages:s,userPrompts:h}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await iU(n),!0):!1}async resolveSessionFile(e){let n;try{n=await ic(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=Js(this.projectsDir,i);if(!(await Cv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await ic(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Ov(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Js(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 _t(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as $v}from"node:path";function pm(t){return new mm(t)}var mm,hm=L(()=>{"use strict";Mv();Je();Ae();On();He();mm=class extends ue{claudeDir;constructor(e){super({provider:new ac(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",ne,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:sc}),this.claudeDir=e?.claudeDir??$v(Q,".claude")}openSession(e){return oc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[$v(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as pU,stat as Pv,unlink as hU}from"node:fs/promises";import{join as Ai,basename as _U}from"node:path";function _m(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&gU.has(n)}function yU(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Ni(t,e,n){let r=yU(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function Uv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function EU(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 Ks(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 Ks(n)}).filter(n=>n.length>0).join(`
1822
- `);try{return JSON.stringify(t)}catch{return String(t)}}function TU(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 wU(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 Fv(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 h=f.content[p];_m(m,p)||h.type==="input_text"&&typeof h.text=="string"&&h.text&&(e++,d=G(h.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 h=JSON.stringify([u.timestamp??null,u.ordinal??null,f,m]);if(!l.has(h)){l.add(h);let _=[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],_.forEach((g,E)=>{a[E]+=g})}}let p=EU(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 gU,lc,jv=L(()=>{"use strict";Ae();gU=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"]);lc=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 Pv(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 pU(e)}catch{return n}for(let s of r){let o=Ai(e,s),i=await Pv(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=_U(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 _t(e,30),r=await Ie(e),s=this.extractSessionIdFromFilename(e),o="",i,a,l,c,d,u,f;for(let p of n){if(p.type==="session_meta"&&p.payload&&(p.payload.id&&(s=p.payload.id),p.payload.cwd&&(o=p.payload.cwd),p.payload.cli_version&&(i=p.payload.cli_version),p.payload.timestamp&&(l=new Date(p.payload.timestamp)),p.payload.originator&&(u=p.payload.originator),p.payload.source&&(f=p.payload.source)),p.type==="turn_context"&&p.payload&&(p.payload.model&&(a=p.payload.model),!o&&p.payload.cwd&&(o=p.payload.cwd)),p.type==="event_msg"&&p.payload?.type==="user_message"){let h=p.payload.message||p.payload.text;h&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80))}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload.role==="user"&&p.payload.content){let h=p.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let _=0;_<p.payload.content.length;_++){let g=p.payload.content[_];_m(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 Fv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:Uv(u,f),firstUserMessage:c,lastUserMessage:m.lastUserMessage??d,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:m.lastTokenUsage,modelContextWindow:m.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ie(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,h=[],_=new Set,g=[],E=(w,v)=>{let b=g.find(k=>!k.mirrored&&k.source!==v&&k.text===w);b?b.mirrored=!0:g.push({text:w,source:v,mirrored:!1})},y=()=>{h.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let v=w.timestamp?new Date(w.timestamp):new Date;if(w.type==="session_meta"&&w.payload){w.payload.id&&(u=w.payload.id),w.payload.cwd&&(o=w.payload.cwd),w.payload.cli_version&&(i=w.payload.cli_version),w.payload.timestamp&&(l=new Date(w.payload.timestamp)),f=Uv(w.payload.originator,w.payload.source);continue}if(w.type==="turn_context"&&w.payload){w.payload.model&&(a=w.payload.model),!o&&w.payload.cwd&&(o=w.payload.cwd);continue}if(w.type==="response_item"&&w.payload){let b=w.payload;if(b.type==="message"){if(b.role==="user"&&b.content){let k=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(k)){let x=b.content.filter((O,C)=>k[C]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1823
- `);k.includes("user.text")&&x&&(!b.id||!_.has(b.id))&&(E(x,"metadata"),b.id&&_.add(b.id))}for(let x=0;x<b.content.length;x++){let O=b.content[x];if(!_m(k,x)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let C=O.text.trim();c||(c=G(C,80)),d=G(C,80),Ni(s,p,{role:"user",timestamp:v,content:he(C)})}}continue}if(b.role==="assistant"&&b.content){for(let k of b.content)k.type==="output_text"&&typeof k.text=="string"&&k.text&&Ni(s,p,{role:"assistant",timestamp:v,content:he(k.text),model:a});continue}if(b.role!=="user"&&b.role!=="assistant"&&b.content){for(let k of b.content)(k.type==="input_text"||k.type==="output_text")&&typeof k.text=="string"&&k.text&&Ni(s,p,{role:"system",timestamp:v,content:he(k.text.trim())});continue}}if(b.type==="function_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.arguments!==void 0?he(Ks(b.arguments)):void 0,toolInputData:TU(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Ks(b.output)),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.input!==void 0?he(Ks(b.input)):void 0,toolInputData:wU(b.name,b.input),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Ks(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let k=b.summary.map(x=>Ks(x.text)).join(`
1824
- `);k.trim()&&Ni(s,p,{role:"thinking",timestamp:v,content:he(k)});continue}}if(w.type==="event_msg"&&w.payload&&(w.payload.type==="task_started"?(y(),m="in_progress"):w.payload.type==="task_complete"?m="complete":w.payload.type==="turn_aborted"&&(m="aborted"),w.payload.type==="user_message"&&typeof w.payload.message=="string"&&E(w.payload.message,"event"),w.payload.type==="agent_reasoning")){let b=w.payload.message||w.payload.text;b&&Ni(s,p,{role:"thinking",timestamp:v,content:he(b)})}}if(!o)return null;y();let T=await Fv(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:h}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await hU(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 _t(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 vU}from"node:child_process";import{realpathSync as Wv,readdirSync as SU}from"node:fs";import{homedir as bU}from"node:os";import{join as cc,resolve as Hv,sep as IU}from"node:path";function Em(t){return new ym(t)}var gm,ym,Tm=L(()=>{"use strict";jv();Je();On();He();gm="gpt-5.6-sol",ym=class extends ue{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 lc(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append"},binary:"codex",seedArgs:["exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","-"],seedStdin:`${ne}
1825
- `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:Lv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(x,O)=>new Promise(C=>{let S=Math.ceil(n-performance.now());if(S<=0){C(void 0);return}let A,N=()=>{try{A?.kill("SIGKILL")}catch{}},I=()=>{N()},R=()=>{N()},P=()=>{N()};process.once("exit",I),process.once("SIGINT",R),process.once("SIGTERM",P);let $=()=>{process.removeListener("exit",I),process.removeListener("SIGINT",R),process.removeListener("SIGTERM",P)};A=vU(x,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:S,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{$(),C(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let x=s.match(/\{[\s\S]*\}/);if(x)try{o=JSON.parse(x[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=x=>typeof x=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(x)&&x.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,h=m+"; using the daemon's binary. "+p,_={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},g=Hv(e.cwd,e.env.CODEX_HOME||cc(e.env.HOME||bU(),".codex")),E=[],y=[],T=process.platform==="win32"?"codex.exe":"codex",w=o.managedCodexPath??o.managed_codex_path;typeof w=="string"&&w.trim().length>0&&E.push(w.trim());let v=x=>x.replace(/\+.*$/,""),b=v(d),k=process.arch==="arm64"?"aarch64":"x86_64";for(let x of["app-server-daemon","standalone"]){let O=cc(g,"packages",x,"releases");try{y.push(Wv(O)+IU);let C=SU(O).filter(S=>process.arch==="x64"&&(S.includes("aarch64")||S.includes("arm64"))||process.arch==="arm64"&&(S.includes("x86_64")||S.includes("x64")||S.includes("i686"))?!1:S===d||S===b||S.startsWith(d+"-")||S.startsWith(b+"-"));C.sort((S,A)=>{let N=S.includes(k)?0:1,I=A.includes(k)?0:1;return N!==I?N-I:S.localeCompare(A)});for(let S of C)E.push(cc(O,S,"bin",T)),E.push(cc(O,S,T))}catch{}}for(let x of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Wv(Hv(e.cwd,x)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let S=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(S&&(S===d||v(S)===b))return{kind:"use-binary",binary:O,message:h}}return _}openSession(e){return xv({...e,model:e.model??gm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??gm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:gm}}}});import{createHash as kU}from"node:crypto";import{readdir as Ri,readFile as Bv,stat as dc,unlink as AU}from"node:fs/promises";import{join as yt,basename as NU,dirname as RU}from"node:path";import{cwd as LU}from"node:process";function wm(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Xv(t){return t==="user"}function vm(t){return t==="gemini"||t==="assistant"}function Yr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function xU(t){return`${t.sessionId}\0${t.cwd}`}function CU(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 uc(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function qv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!vm(a.type)||!a.tokens)continue;let l=uc(a.tokens.input),c=uc(a.tokens.cached),d=Math.max(l-c,0),u=uc(a.tokens.output),f=uc(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 OU(t){return kU("sha256").update(t).digest("hex")}function Li(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=RU(n);if(r===n)break;n=r}}var fc,Gv=L(()=>{"use strict";Ae();Ua();oe();fc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||yt(Q,".gemini");this.geminiProjectsFile=yt(n,"projects.json"),this.geminiTmpDir=yt(n,"tmp");let r=e.claudeDir||yt(Q,".claude");this.claudeProjectsDir=yt(r,"projects");let s=[yt(Q,".codex"),yt(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=>yt(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=xU(s),i=n.get(o);n.set(o,i?CU(i,s):s)}catch{}return[...n.values()]}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r;try{r=await this.readSessionFile(n)}catch{return null}if(!r)return null;let s=await Ie(n),o=[],i=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",d=await this.resolveWorkspace(c),u,f,m;for(let g of a){let E=Yr(g.timestamp),y=g.type,T=he(wm(g.content));if(Xv(y)){let v=wm(g.content);v&&i.push(v);let b=T.trim();b&&(u||(u=G(b,80)),f=G(b,80)),o.push({role:"user",timestamp:E,content:b||T});continue}if(vm(y)){g.model&&(m=g.model);for(let v of g.thoughts||[]){let b=[v.subject,v.description].filter(Boolean).join(`
1826
- `).trim();b&&o.push({role:"thinking",timestamp:Yr(v.timestamp,E),content:he(b)})}o.push({role:"assistant",timestamp:E,content:T,model:g.model});continue}let w=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${w}${T}`.trim()})}let p=Yr(r.startTime,s.createdAt),h=Yr(r.lastUpdated,s.modifiedAt),_=qv(a);return{provider:"gemini",sessionId:l,cwd:d,createdAt:p,modifiedAt:h,model:m,startCommand:"gemini",firstUserMessage:u,lastUserMessage:f,messageCount:o.filter(g=>g.role==="user"||g.role==="assistant").length,filePath:n,totalInputTokens:_.totalInputTokens||void 0,totalCachedInputTokens:_.totalCachedInputTokens||void 0,totalOutputTokens:_.totalOutputTokens||void 0,totalReasoningOutputTokens:_.totalReasoningOutputTokens||void 0,lastInputTokens:_.lastInputTokens||void 0,lastTokenUsage:_.lastTokenUsage,messages:o,userPrompts:i}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await Ie(e),s=n.messages||[],o=n.sessionId||this.extractSessionIdFromFilename(e),i=n.projectHash||"",a=await this.resolveWorkspace(i),l,c,d,u=0;for(let m of s)if(Xv(m.type)){u++;let p=wm(m.content).trim();p&&(l||(l=G(he(p),80)),c=G(he(p),80))}else vm(m.type)&&(u++,m.model&&(d=m.model));let f=qv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Yr(n.startTime,r.createdAt),modifiedAt:Yr(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 Bv(e,"utf-8");if(Uo(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 xr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=NU(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=yt(this.geminiTmpDir,r,"chats");if(!(await dc(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(yt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await AU(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let o=await this.readSessionFile(s).catch(()=>null),i=this.extractSessionIdFromFilename(s),a=o?.sessionId||i,l=a===e||a.startsWith(e),c=i===e||i.startsWith(e)||i.length>=8&&e.startsWith(i);if(!l&&!c)continue;let d=await Ie(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Yr(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,LU());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(OU(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Bv(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 _t(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=yt(this.claudeProjectsDir,r);if(!(await dc(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=yt(s,a),d=(await _t(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await dc(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Ri(e)}catch{return n}for(let o of s){let i=yt(e,o),a=await dc(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 DU,writeFileSync as MU,mkdirSync as $U}from"node:fs";import{join as PU,dirname as UU}from"node:path";import{randomUUID as FU}from"node:crypto";function bm(t){return new Sm(t)}var Sm,Im=L(()=>{"use strict";$s();Gv();Je();He();Ua();Sm=class extends ue{constructor(e){super({provider:new fc(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",ne,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(nr))})}seed(e,n){return Promise.resolve({success:!1,error:nr})}sendTurn(e,n){return Promise.reject(new Error(nr))}openSession(e){return Promise.reject(new Error(nr))}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
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:$l,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=DU(r,"utf-8"),o=Uo(s),i=xr(s),a=FU();i.sessionId=a,i.kind="main";let l=UU(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=PU(l,u);return $U(l,{recursive:!0}),MU(f,uy(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 Vv,readFile as jU,rm as WU,stat as Ys}from"node:fs/promises";import{basename as HU,join as Wt}from"node:path";function BU(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 km(){return{shutdownTotals:null,assistantOutputSum:0}}function Kv(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=BU(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function Jv(t){let e=t.shutdownTotals,n=t.lastAssistantOutputTokens!==void 0?{outputTokens:t.lastAssistantOutputTokens}:void 0;return{totalInputTokens:e?.inputTokens,totalCachedInputTokens:e?.cacheReadTokens,totalCacheWriteInputTokens:e?.cacheWriteTokens,totalOutputTokens:e?.outputTokens??(t.lastAssistantOutputTokens===void 0?void 0:t.assistantOutputSum),totalReasoningOutputTokens:e?.reasoningTokens,lastTokenUsage:n}}function XU(t){let e={};for(let n of t.split(`
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 zr(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function qU(t){let e=0,n=km(),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++;Kv(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function GU(t){let e=VU(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 VU(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 mc,Yv=L(()=>{"use strict";Ae();mc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||Wt(Q,".copilot");this.sessionStateDir=Wt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Vv(this.sessionStateDir)}catch{return e}for(let r of n){let s=Wt(this.sessionStateDir,r);if((await Ys(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=Wt(n,"events.jsonl"),o=await Ys(s).catch(()=>null),i=o?s:Wt(n,"workspace.yaml"),a=await Ie(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,h,_,g=r?.id||HU(n)||e,E=km();if(o)for await(let y of Ee(s)){let T=zr(y.timestamp)||a.modifiedAt;if(Kv(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&&(_=zr(y.data.startTime)),y.data.selectedModel&&(u=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){u=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let w=y.data.content||"";w&&c.push(w);let v=w.trim();v&&(p||(p=G(v,80)),h=G(v,80)),l.push({role:"user",timestamp:T,content:he(v||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:he(w),model:u}),y.data.toolRequests)for(let v of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:v.name||"unknown tool",toolName:v.name,toolInput:v.arguments?JSON.stringify(v.arguments,null,2):void 0,toolInputData:It(v.arguments),toolCallId:v.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",v=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:he(w),toolDetailedContent:v?he(v):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:he(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let w=y.data?.message||"";w.trim()&&l.push({role:"system",timestamp:T,content:he(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return GU(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:_??zr(r?.created_at)??a.createdAt,modifiedAt:zr(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",gitBranch:m,firstUserMessage:p,lastUserMessage:h,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:i,...Jv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=Wt(e,"events.jsonl"),o=await Ys(s).catch(()=>null),i=o?s:Wt(e,"workspace.yaml"),a=await Ie(o?s:e),l=o?await _t(s,20):[],c=r?.id||n,d=r?.cwd||"(unknown workspace)",u,f,m,p,h;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=zr(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)),h=G(E,80))}if(!p){let g=(r?.summary||"").trim();g&&(p=G(g,80))}let _=o?await qU(s):{messageCount:0,tokens:km()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??zr(r?.created_at)??a.createdAt,modifiedAt:zr(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:_.lastUserMessage??h,messageCount:_.messageCount,filePath:i,...Jv(_.tokens)}}async readWorkspaceYaml(e){let n=Wt(e,"workspace.yaml");try{let r=await jU(n,"utf-8");return XU(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await WU(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Vv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=Wt(this.sessionStateDir,e);if((await Ys(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=Wt(this.sessionStateDir,s);(await Ys(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=Wt(this.sessionStateDir,s);if(!(await Ys(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 Nm(t){return new Am(t)}var Am,Rm=L(()=>{"use strict";Yv();Je();On();oe();He();Am=class extends ue{copilotDir;constructor(e){super({provider:new mc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",ne,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>sn(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return on({...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 Fe({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function xm(t){return new Lm(t)}var Lm,Cm=L(()=>{"use strict";rc();Je();On();He();Lm=class extends ue{constructor(e){super({provider:new Vs(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"custom-tool",leaderSetupHint:"OpenCode supports custom tools via .opencode/tools/ directory"},binary:"opencode",seedArgs:["run",ne],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>sn(n,{...r,acpTool:"opencode"})})}openSession(e){return on({...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??ne),n}}});import{appendFile as JU,mkdir as KU,readFile as zv,readdir as Qv,rm as YU,stat as Zv}from"node:fs/promises";import{basename as zU,dirname as QU,isAbsolute as eS,join as Qr,relative as ZU,resolve as Om}from"node:path";function Dm(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function r1(t){return typeof t=="number"?new Date(t):Dm(t)??new Date(0)}function tS(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
- `).trim():""}function nS(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function s1(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:nS(t)??""}function o1(t){let e=i1(t),n=new Set;for(let r of t){if(r.role!=="tool_use"||r.toolName!=="Bash"||r.toolInputData?.run_in_background!==!0||r.toolCallId===void 0)continue;let s=e.get(r.toolCallId);if(s===void 0)continue;let o=s.content.match(/(?:^|\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 i1(t){let e=new Map;for(let n of t)n.role==="tool_result"&&n.toolCallId!==void 0&&e.set(n.toolCallId,n);return e}var e1,t1,n1,pc,rS=L(()=>{"use strict";Ae();e1="1.4",t1="1.5",n1=new Set([e1,t1]),pc=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Om(e?.kimiHome??process.env.KIMI_CODE_HOME??Qr(Q,".kimi-code")),this.sessionsDir=Qr(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 YU(n.sessionDir,{recursive:!0,force:!0}),await KU(QU(this.indexPath()),{recursive:!0,mode:448}),await JU(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1831
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Qr(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 Qv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=Qr(this.sessionsDir,s.name),i;try{i=await Qv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=Qr(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await zv(this.indexPath(),"utf-8")}catch{return new Map}let n=new Map;for(let r of e.split(/\r?\n/))if(r.trim())try{let s=JSON.parse(r);if(typeof s.sessionId!="string")continue;s.deleted===!0?n.delete(s.sessionId):typeof s.sessionDir=="string"&&typeof s.workDir=="string"&&n.set(s.sessionId,{sessionId:s.sessionId,sessionDir:Om(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Qr(n,"state.json"),wirePath:Qr(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!eS(e)||zU(e)!==n)return!1;let r=ZU(this.sessionsDir,Om(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!eS(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(o=>o.sessionId===e);if(r)return r;let s=n.filter(o=>o.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await zv(e,"utf-8"));return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async summary(e){let n=await this.readState(e.statePath);if(!n)return null;let r;try{r=await Zv(e.wirePath)}catch{return null}let s=await Zv(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Dm(n.createdAt)??s.birthtime,a=Dm(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=r1(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!n1.has(g.protocol_version))){let T=`Kimi transcript wire protocol version ${JSON.stringify(g.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:E,content:T}],userPrompts:[],messageCount:1,firstUserMessage:T,lastUserMessage:T}}if((g.type==="config.update"||g.type==="profile.bind")&&g.modelAlias&&(i=g.modelAlias),g.type==="usage.record"){g.model&&(i=g.model),m||=g.usage!==void 0;let T=g.usage?.inputOther??0,w=g.usage?.inputCacheRead??0,v=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=T,d+=w,u+=v,f+=b,g.usageScope==="turn"&&(h=T+w+v,_={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:b,totalTokens:h+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=tS(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=tS(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:nS(y.args),toolInputData:It(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:s1(y.result),toolCallId:y.toolCallId,model:i})}return o1(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:h,lastTokenUsage:_}}}});function $m(t){return new Mm(t)}var Mm,Pm=L(()=>{"use strict";rS();Je();On();He();Mm=class extends ue{kimiHome;constructor(e){super({provider:new pc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Kimi supports skills through ~/.kimi-code/skills and --skills-dir."},binary:"kimi",seedArgs:["-p",ne,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>sn(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return on({...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??ne,"--output-format","stream-json"),n}}});import{spawn as a1}from"node:child_process";import{mkdirSync as l1}from"node:fs";function Fm(t){return new Um(t)}async function c1(t,e){let n=Date.now(),r=sS({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});Oe("lmplayer",r,e.permissionMode??"yolo");let s=await iS(e.binary,r,{cwd:e.cwd,env:Le(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(oS(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function sS(t){let e=["run"];return t.model&&e.push("--model",t.model),t.sessionId&&e.push("--session",t.sessionId),t.formatJson&&e.push("--format","json"),t.effort&&e.push("--effort",t.effort),e.push(...cr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function oS(t){let n=[Xr(t.stderr).trim(),t.error].filter(Boolean).join(`
1832
- `);return n?Te(n,{provider:"lmplayer"}):`exit code ${t.code}`}function iS(t,e,n){return new Promise((r,s)=>{let o;try{o=a1(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(h){s(h);return}let i="",a="",l="",c,d,u,f=[],m=!1,p=h=>{let _=h.trim();if(!_)return;let g;try{g=JSON.parse(_)}catch{f.push(h),n.onText?.(h);return}if(!zs(g))return;let E=hc(g,!1);c===void 0&&E!==void 0&&(c=E),d=hc(g,!0)??d;let y=d1(g);y!==void 0&&(u=y);let T=aS(g);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",h=>{let _=h.toString("utf8");i+=_,l+=_;let g=l.indexOf(`
1820
+ `).filter(l=>l.length>0),i=o[o.length-1]||"",a=o.length>1?`${o.length} lines: ${we(i,60)}`:we(s,80);e({kind:"other",summary:`running\u2026 ${a}`})}else e({kind:"other",summary:"running\u2026"});return}if(n.startsWith("item/")){e({kind:"other",summary:n.slice(5)});return}}async function Lv(t,e){if(e.bundleSession!==void 0)return xn(e.bundleSession,"codex",e.sessionId,t,{onDelta:e.onDelta,onProgress:e.onProgress,signal:e.signal});let n=await Bw(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=>Rv(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 xv(t){let e=await Xw({threadId:t.sessionId,cwd:t.cwd,env:t.env,binaryPath:t.progPath,model:t.model,alias:t.alias,isLead:t.isLead,permissionMode:t.permissionMode,holdOpen:t.holdOpen,closeTimeoutMs:t.closeTimeoutMs});return{provider:"codex",get sessionId(){return e.sessionId},get completedTurns(){return e.completedTurns},async sendTurn(n,r={}){let s=await e.sendTurn(n,{...r,onEvent:o=>{r.onEvent?.(o),r.onProgress&&Rv(o,r.onProgress)}});return{text:s.text,...s.usage?{usage:s.usage}:{},sessionId:s.sessionId,durationMs:s.durationMs}},close:()=>e.close()}}var r1,On=L(()=>{"use strict";Vf();Vf();qw();dm();Hs();oe();r1=256});function um(t={}){let e=ka(t.miniplayerHome),n=r=>({...r??process.env,MINIPLAYER_HOME:e});return new class extends ue{constructor(){super({provider:new Ia({miniplayerHome:e}),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeSession:!1,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none",leaderSetupHint:"Miniplayer provides native file, shell and web tools. Live ACP sessions cannot be resumed after exit."},binary:"miniplayer",seedArgs:[],resumeTemplate:"",startTemplate:"miniplayer run",transport:(r,s)=>{if(s.sessionId||s.requireResume)throw new Error('miniplayer does not support resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"');return sn(r,{...s,env:n(s.env),acpTool:"miniplayer",requireResume:!1})}})}openSession(r){if(r.sessionId)throw new Error("miniplayer cannot reopen a closed ACP session; start a fresh conversation");return on({...r,env:n(r.env),binary:"miniplayer",acpTool:"miniplayer"})}manualSeedHint(){return{launchCommand:"miniplayer --help",postLaunchNote:'Use lmctl prompt --provider miniplayer --model <model> "<prompt>". Each invocation creates a fresh run.',lsCommand:"lmctl ls --provider miniplayer"}}resumeCommand(){throw new Error("miniplayer has no interactive terminal or session resume")}async seed(){return{success:!1,error:'miniplayer does not support team session resume; use lmctl prompt --provider miniplayer --model <model> "<prompt>"'}}}}var fm=L(()=>{"use strict";Je();Na();On()});import{readdir as ic,stat as Cv,unlink as i1}from"node:fs/promises";import{join as Js,basename as Ov}from"node:path";function a1(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function l1(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return he(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}function c1(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 d1(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 u1(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 Dv(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 h=p.message.content;if(typeof h=="string"){if(h.includes("<command-name>")||h.includes("<local-command-"))continue;e++,l=G(h.trim(),80)}}else if(p.type==="assistant"&&p.message){let h=p.message.content;if(Array.isArray(h))for(let g of h)g.type==="text"&&e++;let _=p.message.usage;if(_){let g=d1(_),E=p.message.id?.trim();if(E){let T=c.get(E);T?c1(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 h=u1(p);n+=p.input+p.cacheRead+h.total,r+=p.cacheRead,s+=h.total,u+=h.fiveMinute,f+=h.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 f1(t){let e=m1(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 m1(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 ac,Mv=L(()=>{"use strict";Ae();ac=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Js(Q,".claude"),this.projectsDir=Js(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await ic(this.projectsDir)}catch{return e}for(let r of n){let s=Js(this.projectsDir,r);if(!(await Cv(s).catch(()=>null))?.isDirectory())continue;let i;try{i=await ic(s)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=Ov(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let c=Js(s,a);try{let d=await this.extractSummary(c,l);d&&e.push(d)}catch{}}}return e}async extractSummary(e,n){let r=await _t(e,50),s=await Ie(e),o="",i,a,l,c,d,u;for(let m of r)if(!a1(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 Dv(e);return{provider:"claude",sessionId:n,slug:i,cwd:o,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:c,lastUserMessage:f.lastUserMessage??d,messageCount:f.messageCount,filePath:e,totalInputTokens:f.totalInputTokens||void 0,totalCachedInputTokens:f.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:f.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:f.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:f.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:f.totalOutputTokens||void 0,lastInputTokens:f.lastInputTokens||void 0,lastTokenUsage:f.lastTokenUsage}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ie(n),s=[],o="",i,a,l,c,d,u,f,m=e,p,h=[];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:l1(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.")&&h.push(T)}if(typeof y=="string"){let T=y.trim();if(T.includes("<command-name>")||T.includes("<local-command-")||/^<task-notification>\s*</u.test(T)||T.startsWith("lmctl seed initial connection only.")||/^<system-reminder>[\s\S]*<\/system-reminder>$/u.test(T))continue;d||(d=G(y.trim(),80)),u=G(y.trim(),80),p=void 0,s.push({role:"user",timestamp:E,content:he(y.trim())})}else if(Array.isArray(y)){for(let T of y)if(T.type==="tool_result"){let w=typeof T.content=="string"?he(T.content):JSON.stringify(T.content);s.push({role:"tool_result",timestamp:E,content:w,toolCallId:T.tool_use_id})}}}if(g.type==="assistant"&&g.message){g.message.stop_reason===null||g.message.stop_reason==="tool_use"?p="in_progress":typeof g.message.stop_reason=="string"&&(p="complete"),g.message.model&&(l=g.message.model);let E=new Date(g.timestamp||0),y=g.message.content;if(Array.isArray(y))for(let T of y)T.type==="text"&&T.text?s.push({role:"assistant",timestamp:E,content:he(T.text),model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="tool_use"?s.push({role:"tool_use",timestamp:E,content:T.name||"unknown tool",toolName:T.name,toolInput:JSON.stringify(T.input,null,2),toolInputData:T.input,toolCallId:T.id,model:g.message.model,...typeof g.message.stop_reason=="string"?{stopReason:g.message.stop_reason}:{}}):T.type==="thinking"&&T.thinking&&s.push({role:"thinking",timestamp:E,content:T.thinking})}}if(!o)return null;f1(s);let _=await Dv(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:_.messageCount,filePath:n,totalInputTokens:_.totalInputTokens||void 0,totalCachedInputTokens:_.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:_.totalCacheWriteInputTokens||void 0,totalCacheWrite5mInputTokens:_.totalCacheWrite5mInputTokens||void 0,totalCacheWrite1hInputTokens:_.totalCacheWrite1hInputTokens||void 0,totalOutputTokens:_.totalOutputTokens||void 0,lastInputTokens:_.lastInputTokens||void 0,lastTokenUsage:_.lastTokenUsage,messages:s,userPrompts:h}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await i1(n),!0):!1}async resolveSessionFile(e){let n;try{n=await ic(this.projectsDir)}catch{return null}let r=[];for(let i of n){let a=Js(this.projectsDir,i);if(!(await Cv(a).catch(()=>null))?.isDirectory())continue;let c;try{c=await ic(a)}catch{continue}for(let d of c){if(!d.endsWith(".jsonl"))continue;let u=Ov(d,".jsonl");/^[0-9a-f]{8}-/.test(u)&&r.push({filePath:Js(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 _t(i.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return i.filePath}return null}}});import{join as $v}from"node:path";function pm(t){return new mm(t)}var mm,hm=L(()=>{"use strict";Mv();Je();Ae();On();He();mm=class extends ue{claudeDir;constructor(e){super({provider:new ac(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"claude",seedArgs:["-p",ne,"--dangerously-skip-permissions"],resumeTemplate:"claude --resume {{session_id}}",startTemplate:"claude",transport:sc}),this.claudeDir=e?.claudeDir??$v(Q,".claude")}openSession(e){return oc({...e,binary:"claude",sessionFileRoots:e.sessionFileRoots??[$v(this.claudeDir,"projects")]})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as p1,stat as Pv,unlink as h1}from"node:fs/promises";import{join as Ai,basename as _1}from"node:path";function _m(t,e){if(!Array.isArray(t)||e>=t.length)return!1;let n=t[e];return typeof n=="string"&&g1.has(n)}function y1(t,e,n){return`${t}|${e.toISOString()}|${n}`}function Ni(t,e,n){let r=y1(n.role,n.timestamp,n.content);e.has(r)||(e.add(r),t.push(n))}function Uv(t,e){return e==="exec"||t==="codex_exec"?"codex exec":"codex"}function E1(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 Ks(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 Ks(n)}).filter(n=>n.length>0).join(`
1822
+ `);try{return JSON.stringify(t)}catch{return String(t)}}function T1(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 w1(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 Fv(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 h=f.content[p];_m(m,p)||h.type==="input_text"&&typeof h.text=="string"&&h.text&&(e++,d=G(h.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 h=JSON.stringify([u.timestamp??null,u.ordinal??null,f,m]);if(!l.has(h)){l.add(h);let _=[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],_.forEach((g,E)=>{a[E]+=g})}}let p=E1(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 g1,lc,jv=L(()=>{"use strict";Ae();g1=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"]);lc=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 Pv(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 p1(e)}catch{return n}for(let s of r){let o=Ai(e,s),i=await Pv(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=_1(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 _t(e,30),r=await Ie(e),s=this.extractSessionIdFromFilename(e),o="",i,a,l,c,d,u,f;for(let p of n){if(p.type==="session_meta"&&p.payload&&(p.payload.id&&(s=p.payload.id),p.payload.cwd&&(o=p.payload.cwd),p.payload.cli_version&&(i=p.payload.cli_version),p.payload.timestamp&&(l=new Date(p.payload.timestamp)),p.payload.originator&&(u=p.payload.originator),p.payload.source&&(f=p.payload.source)),p.type==="turn_context"&&p.payload&&(p.payload.model&&(a=p.payload.model),!o&&p.payload.cwd&&(o=p.payload.cwd)),p.type==="event_msg"&&p.payload?.type==="user_message"){let h=p.payload.message||p.payload.text;h&&(c||(c=G(h.trim(),80)),d=G(h.trim(),80))}if(p.type==="response_item"&&p.payload?.type==="message"&&p.payload.role==="user"&&p.payload.content){let h=p.payload.internal_chat_message_metadata_passthrough?.content_item_kinds;for(let _=0;_<p.payload.content.length;_++){let g=p.payload.content[_];_m(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 Fv(e);return{provider:"codex",sessionId:s,cwd:o,createdAt:l||r.createdAt,modifiedAt:r.modifiedAt,model:a,cliVersion:i,startCommand:Uv(u,f),firstUserMessage:c,lastUserMessage:m.lastUserMessage??d,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastTokenUsage?.inputTokens||void 0,lastTokenUsage:m.lastTokenUsage,modelContextWindow:m.modelContextWindow}}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r=await Ie(n),s=[],o="",i,a,l,c,d,u=e,f,m,p=new Set,h=[],_=new Set,g=[],E=(w,v)=>{let b=g.find(k=>!k.mirrored&&k.source!==v&&k.text===w);b?b.mirrored=!0:g.push({text:w,source:v,mirrored:!1})},y=()=>{h.push(...g.map(w=>w.text)),g=[]};for await(let w of Ee(n)){let v=w.timestamp?new Date(w.timestamp):new Date;if(w.type==="session_meta"&&w.payload){w.payload.id&&(u=w.payload.id),w.payload.cwd&&(o=w.payload.cwd),w.payload.cli_version&&(i=w.payload.cli_version),w.payload.timestamp&&(l=new Date(w.payload.timestamp)),f=Uv(w.payload.originator,w.payload.source);continue}if(w.type==="turn_context"&&w.payload){w.payload.model&&(a=w.payload.model),!o&&w.payload.cwd&&(o=w.payload.cwd);continue}if(w.type==="response_item"&&w.payload){let b=w.payload;if(b.type==="message"){if(b.role==="user"&&b.content){let k=b.internal_chat_message_metadata_passthrough?.content_item_kinds;if(Array.isArray(k)){let x=b.content.filter((O,C)=>k[C]==="user.text"&&typeof O.text=="string").map(O=>O.text).join(`
1823
+ `);k.includes("user.text")&&x&&(!b.id||!_.has(b.id))&&(E(x,"metadata"),b.id&&_.add(b.id))}for(let x=0;x<b.content.length;x++){let O=b.content[x];if(!_m(k,x)&&O.type==="input_text"&&typeof O.text=="string"&&O.text){let C=O.text.trim();c||(c=G(C,80)),d=G(C,80),Ni(s,p,{role:"user",timestamp:v,content:he(C)})}}continue}if(b.role==="assistant"&&b.content){for(let k of b.content)k.type==="output_text"&&typeof k.text=="string"&&k.text&&Ni(s,p,{role:"assistant",timestamp:v,content:he(k.text),model:a});continue}if(b.role!=="user"&&b.role!=="assistant"&&b.content){for(let k of b.content)(k.type==="input_text"||k.type==="output_text")&&typeof k.text=="string"&&k.text&&Ni(s,p,{role:"system",timestamp:v,content:he(k.text.trim())});continue}}if(b.type==="function_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.arguments!==void 0?he(Ks(b.arguments)):void 0,toolInputData:T1(b.arguments),toolCallId:b.call_id});continue}if(b.type==="function_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Ks(b.output)),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call"){s.push({role:"tool_use",timestamp:v,content:b.name||"unknown tool",toolName:b.name,toolInput:b.input!==void 0?he(Ks(b.input)):void 0,toolInputData:w1(b.name,b.input),toolCallId:b.call_id});continue}if(b.type==="custom_tool_call_output"){s.push({role:"tool_result",timestamp:v,content:he(Ks(b.output)),toolCallId:b.call_id});continue}if(b.type==="reasoning"&&b.summary){let k=b.summary.map(x=>Ks(x.text)).join(`
1824
+ `);k.trim()&&Ni(s,p,{role:"thinking",timestamp:v,content:he(k)});continue}}if(w.type==="event_msg"&&w.payload&&(w.payload.type==="task_started"?(y(),m="in_progress"):w.payload.type==="task_complete"?m="complete":w.payload.type==="turn_aborted"&&(m="aborted"),w.payload.type==="user_message"&&typeof w.payload.message=="string"&&E(w.payload.message,"event"),w.payload.type==="agent_reasoning")){let b=w.payload.message||w.payload.text;b&&Ni(s,p,{role:"thinking",timestamp:v,content:he(b)})}}if(!o)return null;y();let T=await Fv(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:h}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await h1(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 _t(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 v1}from"node:child_process";import{realpathSync as Wv,readdirSync as S1}from"node:fs";import{homedir as b1}from"node:os";import{join as cc,resolve as Hv,sep as I1}from"node:path";function Em(t){return new ym(t)}var gm,ym,Tm=L(()=>{"use strict";jv();Je();On();He();gm="gpt-5.6-sol",ym=class extends ue{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 lc(e),protocol:{transport:"codex-app-server",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!1},injection:{leaderMode:"prompt-append"},binary:"codex",seedArgs:["exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","-"],seedStdin:`${ne}
1825
+ `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:Lv})}async preflightNativeLaunch(e){let n=performance.now()+1800,r=(x,O)=>new Promise(C=>{let S=Math.ceil(n-performance.now());if(S<=0){C(void 0);return}let A,N=()=>{try{A?.kill("SIGKILL")}catch{}},I=()=>{N()},R=()=>{N()},P=()=>{N()};process.once("exit",I),process.once("SIGINT",R),process.once("SIGTERM",P);let $=()=>{process.removeListener("exit",I),process.removeListener("SIGINT",R),process.removeListener("SIGTERM",P)};A=v1(x,O,{cwd:e.cwd,env:e.env,signal:e.signal,timeout:S,killSignal:"SIGKILL",maxBuffer:65536},(q,M)=>{$(),C(q?void 0:M)})}),s=await r(e.binary,["app-server","daemon","version"]);if(s===void 0)return{kind:"ok"};let o;try{o=JSON.parse(s)}catch{let x=s.match(/\{[\s\S]*\}/);if(x)try{o=JSON.parse(x[0])}catch{return{kind:"ok"}}else return{kind:"ok"}}let i=x=>typeof x=="string"&&/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/.test(x)&&x.length<=100,a=typeof o?.cliVersion=="string"?o.cliVersion:typeof o?.cli_version=="string"?o.cli_version:"",l=typeof o?.appServerVersion=="string"?o.appServerVersion:typeof o?.app_server_version=="string"?o.app_server_version:"",c=a.trim(),d=l.trim(),u=typeof o?.status=="string"?o.status.toLowerCase():"";if(!(u==="running"||u==="alreadyrunning")||!i(c)||!i(d))return{kind:"ok"};if(c===d)return{kind:"ok"};let m="codex CLI "+c+" differs from the running codex daemon "+d,p="To align your CLI: npm i -g @openai/codex@"+d,h=m+"; using the daemon's binary. "+p,_={kind:"ok",message:m+"; no matching daemon binary is available, launching the PATH CLI. "+p},g=Hv(e.cwd,e.env.CODEX_HOME||cc(e.env.HOME||b1(),".codex")),E=[],y=[],T=process.platform==="win32"?"codex.exe":"codex",w=o.managedCodexPath??o.managed_codex_path;typeof w=="string"&&w.trim().length>0&&E.push(w.trim());let v=x=>x.replace(/\+.*$/,""),b=v(d),k=process.arch==="arm64"?"aarch64":"x86_64";for(let x of["app-server-daemon","standalone"]){let O=cc(g,"packages",x,"releases");try{y.push(Wv(O)+I1);let C=S1(O).filter(S=>process.arch==="x64"&&(S.includes("aarch64")||S.includes("arm64"))||process.arch==="arm64"&&(S.includes("x86_64")||S.includes("x64")||S.includes("i686"))?!1:S===d||S===b||S.startsWith(d+"-")||S.startsWith(b+"-"));C.sort((S,A)=>{let N=S.includes(k)?0:1,I=A.includes(k)?0:1;return N!==I?N-I:S.localeCompare(A)});for(let S of C)E.push(cc(O,S,"bin",T)),E.push(cc(O,S,T))}catch{}}for(let x of new Set(E)){if(performance.now()>=n||e.signal?.aborted)break;let O;try{if(O=Wv(Hv(e.cwd,x)),!y.some(A=>O.startsWith(A)))continue}catch{continue}let S=(await r(O,["--version"]))?.trim().match(/^codex(?:-cli)?\s+([0-9A-Za-z.+-]+)/)?.[1];if(S&&(S===d||v(S)===b))return{kind:"use-binary",binary:O,message:h}}return _}openSession(e){return xv({...e,model:e.model??gm})}seedArgsFor(e){let n=super.seedArgsFor(e),r=e?.model??gm;return[...n.slice(0,-1),"--model",r,n[n.length-1]]}turnOptsFor(e){return e.model?e:{...e,model:gm}}}});import{createHash as k1}from"node:crypto";import{readdir as Ri,readFile as Bv,stat as dc,unlink as A1}from"node:fs/promises";import{join as yt,basename as N1,dirname as R1}from"node:path";import{cwd as L1}from"node:process";function wm(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function Xv(t){return t==="user"}function vm(t){return t==="gemini"||t==="assistant"}function Yr(t,e=new Date(0)){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function x1(t){return`${t.sessionId}\0${t.cwd}`}function C1(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 uc(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function qv(t){let e=0,n=0,r=0,s=0,o=0,i;for(let a of t){if(!vm(a.type)||!a.tokens)continue;let l=uc(a.tokens.input),c=uc(a.tokens.cached),d=Math.max(l-c,0),u=uc(a.tokens.output),f=uc(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 O1(t){return k1("sha256").update(t).digest("hex")}function Li(t,e){let n=e;for(;n&&!t.has(n);){t.add(n);let r=R1(n);if(r===n)break;n=r}}var fc,Gv=L(()=>{"use strict";Ae();Ua();oe();fc=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let n=e.geminiDir||yt(Q,".gemini");this.geminiProjectsFile=yt(n,"projects.json"),this.geminiTmpDir=yt(n,"tmp");let r=e.claudeDir||yt(Q,".claude");this.claudeProjectsDir=yt(r,"projects");let s=[yt(Q,".codex"),yt(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=>yt(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=x1(s),i=n.get(o);n.set(o,i?C1(i,s):s)}catch{}return[...n.values()]}async loadSession(e){let n=await this.resolveSessionFile(e);if(!n)return null;let r;try{r=await this.readSessionFile(n)}catch{return null}if(!r)return null;let s=await Ie(n),o=[],i=[],a=r.messages||[],l=r.sessionId||this.extractSessionIdFromFilename(n),c=r.projectHash||"",d=await this.resolveWorkspace(c),u,f,m;for(let g of a){let E=Yr(g.timestamp),y=g.type,T=he(wm(g.content));if(Xv(y)){let v=wm(g.content);v&&i.push(v);let b=T.trim();b&&(u||(u=G(b,80)),f=G(b,80)),o.push({role:"user",timestamp:E,content:b||T});continue}if(vm(y)){g.model&&(m=g.model);for(let v of g.thoughts||[]){let b=[v.subject,v.description].filter(Boolean).join(`
1826
+ `).trim();b&&o.push({role:"thinking",timestamp:Yr(v.timestamp,E),content:he(b)})}o.push({role:"assistant",timestamp:E,content:T,model:g.model});continue}let w=y?`[${y}] `:"";o.push({role:"system",timestamp:E,content:`${w}${T}`.trim()})}let p=Yr(r.startTime,s.createdAt),h=Yr(r.lastUpdated,s.modifiedAt),_=qv(a);return{provider:"gemini",sessionId:l,cwd:d,createdAt:p,modifiedAt:h,model:m,startCommand:"gemini",firstUserMessage:u,lastUserMessage:f,messageCount:o.filter(g=>g.role==="user"||g.role==="assistant").length,filePath:n,totalInputTokens:_.totalInputTokens||void 0,totalCachedInputTokens:_.totalCachedInputTokens||void 0,totalOutputTokens:_.totalOutputTokens||void 0,totalReasoningOutputTokens:_.totalReasoningOutputTokens||void 0,lastInputTokens:_.lastInputTokens||void 0,lastTokenUsage:_.lastTokenUsage,messages:o,userPrompts:i}}async extractSummary(e){let n=await this.readSessionFile(e);if(!n)return null;let r=await Ie(e),s=n.messages||[],o=n.sessionId||this.extractSessionIdFromFilename(e),i=n.projectHash||"",a=await this.resolveWorkspace(i),l,c,d,u=0;for(let m of s)if(Xv(m.type)){u++;let p=wm(m.content).trim();p&&(l||(l=G(he(p),80)),c=G(he(p),80))}else vm(m.type)&&(u++,m.model&&(d=m.model));let f=qv(s);return{provider:"gemini",sessionId:o,cwd:a,createdAt:Yr(n.startTime,r.createdAt),modifiedAt:Yr(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 Bv(e,"utf-8");if(Uo(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 xr(n)}catch{return null}}extractSessionIdFromFilename(e){let n=N1(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=yt(this.geminiTmpDir,r,"chats");if(!(await dc(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(yt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let n=await this.resolveSessionFile(e);return n?(await A1(n),!0):!1}async resolveSessionFile(e){let n=await this.findSessionFiles(),r=[];for(let s of n){let o=await this.readSessionFile(s).catch(()=>null),i=this.extractSessionIdFromFilename(s),a=o?.sessionId||i,l=a===e||a.startsWith(e),c=i===e||i.startsWith(e)||i.length>=8&&e.startsWith(i);if(!l&&!c)continue;let d=await Ie(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));r.push({filePath:s,modifiedAt:Yr(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,L1());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(O1(r),r);return this.workspaceHashMap=n,n}async collectGeminiProjectPaths(){let e;try{e=await Bv(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 _t(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=yt(this.claudeProjectsDir,r);if(!(await dc(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=yt(s,a),d=(await _t(l,1).catch(()=>[]))[0]?.cwd;d&&e.add(d)}}return[...e]}async findJsonlFiles(e){let n=[];if(!(await dc(e).catch(()=>null))?.isDirectory())return n;let s;try{s=await Ri(e)}catch{return n}for(let o of s){let i=yt(e,o),a=await dc(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 D1,writeFileSync as M1,mkdirSync as $1}from"node:fs";import{join as P1,dirname as U1}from"node:path";import{randomUUID as F1}from"node:crypto";function bm(t){return new Sm(t)}var Sm,Im=L(()=>{"use strict";$s();Gv();Je();He();Ua();Sm=class extends ue{constructor(e){super({provider:new fc(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",ne,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:()=>Promise.reject(new Error(nr))})}seed(e,n){return Promise.resolve({success:!1,error:nr})}sendTurn(e,n){return Promise.reject(new Error(nr))}openSession(e){return Promise.reject(new Error(nr))}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
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:$l,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=D1(r,"utf-8"),o=Uo(s),i=xr(s),a=F1();i.sessionId=a,i.kind="main";let l=U1(r),c=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),d=o==="jsonl"?".jsonl":".json",u=`session-${c}-${a.slice(0,8)}${d}`,f=P1(l,u);return $1(l,{recursive:!0}),M1(f,uy(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 Vv,readFile as j1,rm as W1,stat as Ys}from"node:fs/promises";import{basename as H1,join as Wt}from"node:path";function B1(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 km(){return{shutdownTotals:null,assistantOutputSum:0}}function Kv(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=B1(e.data?.modelMetrics);n&&(t.shutdownTotals=n)}}function Jv(t){let e=t.shutdownTotals,n=t.lastAssistantOutputTokens!==void 0?{outputTokens:t.lastAssistantOutputTokens}:void 0;return{totalInputTokens:e?.inputTokens,totalCachedInputTokens:e?.cacheReadTokens,totalCacheWriteInputTokens:e?.cacheWriteTokens,totalOutputTokens:e?.outputTokens??(t.lastAssistantOutputTokens===void 0?void 0:t.assistantOutputSum),totalReasoningOutputTokens:e?.reasoningTokens,lastTokenUsage:n}}function X1(t){let e={};for(let n of t.split(`
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 zr(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function q1(t){let e=0,n=km(),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++;Kv(n,s)}return{messageCount:e,tokens:n,lastUserMessage:r}}function G1(t){let e=V1(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 V1(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 mc,Yv=L(()=>{"use strict";Ae();mc=class{name="copilot";sessionStateDir;constructor(e={}){let n=e.copilotDir||Wt(Q,".copilot");this.sessionStateDir=Wt(n,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],n;try{n=await Vv(this.sessionStateDir)}catch{return e}for(let r of n){let s=Wt(this.sessionStateDir,r);if((await Ys(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=Wt(n,"events.jsonl"),o=await Ys(s).catch(()=>null),i=o?s:Wt(n,"workspace.yaml"),a=await Ie(o?s:n),l=[],c=[],d=r?.cwd||"(unknown workspace)",u,f,m,p,h,_,g=r?.id||H1(n)||e,E=km();if(o)for await(let y of Ee(s)){let T=zr(y.timestamp)||a.modifiedAt;if(Kv(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&&(_=zr(y.data.startTime)),y.data.selectedModel&&(u=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){u=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let w=y.data.content||"";w&&c.push(w);let v=w.trim();v&&(p||(p=G(v,80)),h=G(v,80)),l.push({role:"user",timestamp:T,content:he(v||w)});continue}if(y.type==="assistant.message"&&y.data){let w=(y.data.content||"").trim();if(w&&l.push({role:"assistant",timestamp:T,content:he(w),model:u}),y.data.toolRequests)for(let v of y.data.toolRequests)l.push({role:"tool_use",timestamp:T,content:v.name||"unknown tool",toolName:v.name,toolInput:v.arguments?JSON.stringify(v.arguments,null,2):void 0,toolInputData:It(v.arguments),toolCallId:v.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let w=y.data.result?.content||"",v=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:T,content:he(w),toolDetailedContent:v?he(v):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:T,content:he(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let w=y.data?.message||"";w.trim()&&l.push({role:"system",timestamp:T,content:he(w)});continue}}if(!p){let y=(r?.summary||"").trim();y&&(p=G(y,80))}return G1(l),{provider:"copilot",sessionId:g,cwd:d,createdAt:_??zr(r?.created_at)??a.createdAt,modifiedAt:zr(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",gitBranch:m,firstUserMessage:p,lastUserMessage:h,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:i,...Jv(E),messages:l,userPrompts:c}}async extractSummary(e,n){let r=await this.readWorkspaceYaml(e),s=Wt(e,"events.jsonl"),o=await Ys(s).catch(()=>null),i=o?s:Wt(e,"workspace.yaml"),a=await Ie(o?s:e),l=o?await _t(s,20):[],c=r?.id||n,d=r?.cwd||"(unknown workspace)",u,f,m,p,h;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=zr(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)),h=G(E,80))}if(!p){let g=(r?.summary||"").trim();g&&(p=G(g,80))}let _=o?await q1(s):{messageCount:0,tokens:km()};return{provider:"copilot",sessionId:c,cwd:d,createdAt:m??zr(r?.created_at)??a.createdAt,modifiedAt:zr(r?.updated_at)??a.modifiedAt,model:u,cliVersion:f,startCommand:"copilot",firstUserMessage:p,lastUserMessage:_.lastUserMessage??h,messageCount:_.messageCount,filePath:i,...Jv(_.tokens)}}async readWorkspaceYaml(e){let n=Wt(e,"workspace.yaml");try{let r=await j1(n,"utf-8");return X1(r)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let n=await this.resolveSessionDir(e);return n?(await W1(n,{recursive:!0}),!0):!1}async resolveSessionDir(e){let n;try{n=await Vv(this.sessionStateDir)}catch{return null}if(n.includes(e)){let s=Wt(this.sessionStateDir,e);if((await Ys(s).catch(()=>null))?.isDirectory())return s}let r=[];for(let s of n)if(s.startsWith(e)){let o=Wt(this.sessionStateDir,s);(await Ys(o).catch(()=>null))?.isDirectory()&&r.push(o)}if(r.length===1)return r[0];for(let s of n){let o=Wt(this.sessionStateDir,s);if(!(await Ys(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 Nm(t){return new Am(t)}var Am,Rm=L(()=>{"use strict";Yv();Je();On();oe();He();Am=class extends ue{copilotDir;constructor(e){super({provider:new mc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",ne,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(n,r)=>sn(n,{...r,acpTool:"copilot"})}),this.copilotDir=e?.copilotDir}openSession(e){return on({...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 Fe({event:"model_ignored",provider:"copilot",model:n.model,reason:s}),{...r,warnings:[...r.warnings??[],`copilot seed ignored model=${n.model}: ${s}`]}}}});function xm(t){return new Lm(t)}var Lm,Cm=L(()=>{"use strict";rc();Je();On();He();Lm=class extends ue{constructor(e){super({provider:new Vs(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"custom-tool",leaderSetupHint:"OpenCode supports custom tools via .opencode/tools/ directory"},binary:"opencode",seedArgs:["run",ne],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(n,r)=>sn(n,{...r,acpTool:"opencode"})})}openSession(e){return on({...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??ne),n}}});import{appendFile as J1,mkdir as K1,readFile as zv,readdir as Qv,rm as Y1,stat as Zv}from"node:fs/promises";import{basename as z1,dirname as Q1,isAbsolute as eS,join as Qr,relative as Z1,resolve as Om}from"node:path";function Dm(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function rU(t){return typeof t=="number"?new Date(t):Dm(t)??new Date(0)}function tS(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
+ `).trim():""}function nS(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function sU(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:nS(t)??""}function oU(t){let e=iU(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 iU(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 eU,tU,nU,pc,rS=L(()=>{"use strict";Ae();eU="1.4",tU="1.5",nU=new Set([eU,tU]),pc=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Om(e?.kimiHome??process.env.KIMI_CODE_HOME??Qr(Q,".kimi-code")),this.sessionsDir=Qr(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 Y1(n.sessionDir,{recursive:!0,force:!0}),await K1(Q1(this.indexPath()),{recursive:!0,mode:448}),await J1(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1831
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Qr(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 Qv(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let o=Qr(this.sessionsDir,s.name),i;try{i=await Qv(o,{withFileTypes:!0})}catch{continue}for(let a of i){if(!a.isDirectory()||n.has(a.name))continue;let l=Qr(o,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await zv(this.indexPath(),"utf-8")}catch{return new Map}let n=new Map;for(let r of e.split(/\r?\n/))if(r.trim())try{let s=JSON.parse(r);if(typeof s.sessionId!="string")continue;s.deleted===!0?n.delete(s.sessionId):typeof s.sessionDir=="string"&&typeof s.workDir=="string"&&n.set(s.sessionId,{sessionId:s.sessionId,sessionDir:Om(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Qr(n,"state.json"),wirePath:Qr(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!eS(e)||z1(e)!==n)return!1;let r=Z1(this.sessionsDir,Om(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!eS(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(o=>o.sessionId===e);if(r)return r;let s=n.filter(o=>o.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await zv(e,"utf-8"));return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async summary(e){let n=await this.readState(e.statePath);if(!n)return null;let r;try{r=await Zv(e.wirePath)}catch{return null}let s=await Zv(e.statePath).catch(()=>r),o=await this.parseWire(e.wirePath),i=Dm(n.createdAt)??s.birthtime,a=Dm(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=rU(g.time??g.created_at);if(o&&(o=!1,g.type==="metadata"&&!nU.has(g.protocol_version))){let T=`Kimi transcript wire protocol version ${JSON.stringify(g.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:E,content:T}],userPrompts:[],messageCount:1,firstUserMessage:T,lastUserMessage:T}}if((g.type==="config.update"||g.type==="profile.bind")&&g.modelAlias&&(i=g.modelAlias),g.type==="usage.record"){g.model&&(i=g.model),m||=g.usage!==void 0;let T=g.usage?.inputOther??0,w=g.usage?.inputCacheRead??0,v=g.usage?.inputCacheCreation??0,b=g.usage?.output??0;c+=T,d+=w,u+=v,f+=b,g.usageScope==="turn"&&(h=T+w+v,_={inputTokens:T,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:b,totalTokens:h+b});continue}if(g.type==="turn.prompt"&&g.origin?.kind==="user"){let T=tS(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=tS(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:nS(y.args),toolInputData:It(y.args),toolCallId:y.toolCallId,model:i}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:E,content:sU(y.result),toolCallId:y.toolCallId,model:i})}return oU(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:h,lastTokenUsage:_}}}});function $m(t){return new Mm(t)}var Mm,Pm=L(()=>{"use strict";rS();Je();On();He();Mm=class extends ue{kimiHome;constructor(e){super({provider:new pc(e),protocol:{transport:"acp",perTurnCancellation:"process",persistentCancellation:"turn"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append",leaderSetupHint:"Kimi supports skills through ~/.kimi-code/skills and --skills-dir."},binary:"kimi",seedArgs:["-p",ne,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>sn(n,{...r,acpTool:"kimi"})}),this.kimiHome=e?.kimiHome}openSession(e){return on({...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??ne,"--output-format","stream-json"),n}}});import{spawn as aU}from"node:child_process";import{mkdirSync as lU}from"node:fs";function Fm(t){return new Um(t)}async function cU(t,e){let n=Date.now(),r=sS({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});Oe("lmplayer",r,e.permissionMode??"yolo");let s=await iS(e.binary,r,{cwd:e.cwd,env:Le(e.env,e.cwd,e.sessionId),signal:e.signal,onText:o=>{e.onProgress?.({kind:"text",summary:o.slice(0,120)}),e.onDelta?.(o)}});if(s.code!==0&&s.code!==null)throw new Error(oS(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function sS(t){let e=["run"];return t.model&&e.push("--model",t.model),t.sessionId&&e.push("--session",t.sessionId),t.formatJson&&e.push("--format","json"),t.effort&&e.push("--effort",t.effort),e.push(...cr("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function oS(t){let n=[Xr(t.stderr).trim(),t.error].filter(Boolean).join(`
1832
+ `);return n?Te(n,{provider:"lmplayer"}):`exit code ${t.code}`}function iS(t,e,n){return new Promise((r,s)=>{let o;try{o=aU(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(h){s(h);return}let i="",a="",l="",c,d,u,f=[],m=!1,p=h=>{let _=h.trim();if(!_)return;let g;try{g=JSON.parse(_)}catch{f.push(h),n.onText?.(h);return}if(!zs(g))return;let E=hc(g,!1);c===void 0&&E!==void 0&&(c=E),d=hc(g,!0)??d;let y=dU(g);y!==void 0&&(u=y);let T=aS(g);T&&(f.push(T),n.onText?.(T))};o.stdout?.on("data",h=>{let _=h.toString("utf8");i+=_,l+=_;let g=l.indexOf(`
1833
1833
  `);for(;g>=0;){let E=l.slice(0,g);l=l.slice(g+1),p(E),g=l.indexOf(`
1834
- `)}}),o.stderr?.on("data",h=>{a+=h.toString("utf8")}),n.signal&&(n.signal.aborted?o.kill():n.signal.addEventListener("abort",()=>o.kill(),{once:!0})),o.on("exit",h=>{m||(m=!0,l.length>0&&p(l),r({code:h,stdout:i,stderr:a,sessionId:c??d,text:f.join(""),error:u}))}),o.on("error",h=>{m||(m=!0,s(h))})})}function d1(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(zs(e)){let n=e.data;if(zs(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 aS(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(zs(n)){let r=aS(n);if(r)return r}}}function hc(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(zs(n)){let r=hc(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(zs(s)){let o=hc(s,e);if(o!==void 0)return o}}}function zs(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Um,jm=L(()=>{"use strict";rc();Je();He();rn();jt();dl();gt();Um=class extends ue{constructor(e){super({provider:new Vs({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",ne],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:c1})}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 sS({prompt:e?.prompt??ne,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){l1(e,{recursive:!0});let r=this.seedArgsFor(n);Oe("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await iS(this.binary,r,{cwd:e,env:Xs(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:oS(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 "${ne}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as _c,readFile as u1,rm as f1}from"node:fs/promises";import{basename as lS,join as fr}from"node:path";function m1(){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 p1(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 h1(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 cS(t){return t.type==="user"||t.message?.role==="user"}function dS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function uS(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(`
1834
+ `)}}),o.stderr?.on("data",h=>{a+=h.toString("utf8")}),n.signal&&(n.signal.aborted?o.kill():n.signal.addEventListener("abort",()=>o.kill(),{once:!0})),o.on("exit",h=>{m||(m=!0,l.length>0&&p(l),r({code:h,stdout:i,stderr:a,sessionId:c??d,text:f.join(""),error:u}))}),o.on("error",h=>{m||(m=!0,s(h))})})}function dU(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(zs(e)){let n=e.data;if(zs(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 aS(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(zs(n)){let r=aS(n);if(r)return r}}}function hc(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(zs(n)){let r=hc(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(zs(s)){let o=hc(s,e);if(o!==void 0)return o}}}function zs(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Um,jm=L(()=>{"use strict";rc();Je();He();rn();jt();dl();gt();Um=class extends ue{constructor(e){super({provider:new Vs({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",ne],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:cU})}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 sS({prompt:e?.prompt??ne,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){lU(e,{recursive:!0});let r=this.seedArgsFor(n);Oe("lmplayer",r);try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let s=await iS(this.binary,r,{cwd:e,env:Xs(n?.env,e),signal:n?.signal});return s.code!==0&&s.code!==null?{success:!1,error:oS(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 "${ne}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as _c,readFile as uU,rm as fU}from"node:fs/promises";import{basename as lS,join as fr}from"node:path";function mU(){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 pU(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 hU(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 cS(t){return t.type==="user"||t.message?.role==="user"}function dS(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function uS(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 fS(t){return t.model||t.message?.model}function _1(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:pS(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 g1(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Ci(e.output??e.error??t)}return Ci(t)}function pS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function mS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Ci(t.args,!0),toolInputData:It(t.args),toolCallId:t.id,model:n}}var gc,hS=L(()=>{"use strict";Ae();gc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||fr(Q,".qwen")}async discoverSessions(){let e=fr(this.baseDir,"projects"),n;try{n=await _c(e)}catch{return[]}let r=[];for(let s of n){let o=fr(e,s,"chats"),i;try{i=await _c(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=fr(o,a);try{let d=await this.extractSummary(c,l);d&&r.push(d)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await Ie(e),o="(unknown)",i,a,l,c,d=0;for await(let u of Ee(e)){if(r=!0,u.cwd&&(o=u.cwd,u.version&&(a=u.version)),u.type==="system"&&u.cwd&&(o=u.cwd,u.version&&(a=u.version),u.model&&(i=u.model)),cS(u)){let f=uS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(dS(u)){let f=fS(u);f&&(i=f),d+=_1(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=lS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ie(e),s="(unknown)",o,i,a,l,c,d,u=[],f=m1();for await(let m of Ee(e)){if(p1(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,h=m.timestamp?new Date(m.timestamp):r.modifiedAt;if(m.type==="tool_result"){let _=pS(m).filter(g=>g.functionResponse!==void 0);_.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:h,content:Ci(m.toolCallResult.resultDisplay??m.toolCallResult.error??m.toolCallResult.status)??"tool result",toolCallId:m.toolCallResult.callId});for(let g of _){let E=g.functionResponse,y=g1(E.response),T=Ci(m.toolCallResult?.resultDisplay);u.push({role:"tool_result",timestamp:h,content:T??y??m.toolCallResult?.status??"tool result",toolName:E.name,toolCallId:m.toolCallResult?.callId??E.id,...y!==void 0?{toolDetailedContent:y}:{}})}}else if(cS(m)){let _=uS(m);_.trim()&&(c||(c=G(_.trim(),80)),d=G(_.trim(),80)),u.push({role:"user",timestamp:h,content:_})}else if(dS(m)){let _=fS(m);if(_&&(o=_),Array.isArray(p.content))for(let g of p.content)g.type==="text"&&g.text?u.push({role:"assistant",timestamp:h,content:g.text,model:_}):g.type==="thinking"&&g.thinking?u.push({role:"thinking",timestamp:h,content:g.thinking}):g.functionCall&&u.push(mS(g.functionCall,h,_));else if(typeof p.content=="string")u.push({role:"assistant",timestamp:h,content:p.content,model:_});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:h,content:E})}else g.functionCall?u.push(mS(g.functionCall,h,_)):g.text&&u.push({role:"assistant",timestamp:h,content:g.text,model:_})}}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,...h1(f),messages:u}}async resolveSessionPath(e){let n=fr(this.baseDir,"projects");try{let r=await _c(n),s=[];for(let o of r){let i=fr(n,o,"chats",`${e}.jsonl`);try{return await u1(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=fr(n,o,"chats"),a;try{a=await _c(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;lS(l,".jsonl").startsWith(e)&&s.push(fr(i,l))}}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{return await f1(n),!0}catch{return!1}}}});function Hm(t){return new Wm(t)}var Wm,Bm=L(()=>{"use strict";hS();Je();On();He();Wm=class extends ue{constructor(e){super({provider:new gc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",ne,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:sc})}openSession(e){return oc({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as _S,readFile as gS,rm as yS,stat as ES}from"node:fs/promises";import{basename as Xm,join as an}from"node:path";import{fileURLToPath as y1}from"node:url";async function E1(t){let e=await Promise.all(t.map(n=>Ie(n)));return{createdAt:new Date(Math.min(...e.map(n=>n.createdAt.getTime()))),modifiedAt:new Date(Math.max(...e.map(n=>n.modifiedAt.getTime())))}}function T1(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function TS(t){return t.type==="USER_INPUT"}function wS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function w1(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function vS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function SS(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 v1(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function S1(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=b1(s);if(o)return o}let r=I1(e.content);if(r)return r}return null}function b1(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 I1(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function k1(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 A1(t,e){let n=new Set;for(let r of e){let s=N1(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 N1(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:C1(n.event.content);if(r!==void 0)return bS(t.filter(o=>!e.has(o)&&O1(o)===r),n.event.step_index);let s=x1(n.event);if(s!==void 0)return bS(t.filter(o=>!e.has(o)&&R1(o.name,n.event.type)&&kS(L1(o))===s),n.event.step_index)}function bS(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 R1(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 L1(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function x1(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]),kS(e)}function kS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return y1(e)}catch{return}}function C1(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function O1(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 IS(t){if(t.endsWith(".db"))return Xm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var yc,AS=L(()=>{"use strict";Ae();yc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||an(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:an(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=an(this.baseDir,"conversations"),n;try{n=await _S(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Xm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return an(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return an(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 ES(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await E1([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=SS(u.content);if(f&&(a=f),TS(u)){let m=vS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else wS(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=IS(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=T1(f.created_at,s.modifiedAt),p=SS(f.content);if(p&&(a=p),TS(f)){let h=vS(f.content),_=h.trim();_&&(l||(l=G(_,80)),c=G(_,80)),i.push({role:"user",timestamp:m,content:h});continue}if(Array.isArray(f.tool_calls))for(let h of f.tool_calls){let _=h.name||"tool",g=v1(h.args),E=It(h.args),y={role:"tool_use",timestamp:m,content:g,toolName:_,toolInput:g,toolInputData:E};i.push(y),d.push({name:_,stepIndex:f.step_index,input:E,message:y})}if(wS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(w1(f)&&f.content){let h=k1(f,r),_=h===void 0?null:await this.readTaskLog(r,h),g={role:"tool_result",timestamp:_?.modifiedAt??m,content:f.content,toolName:f.type?.toLowerCase(),backgroundTaskId:h,..._===null?{}:{toolDetailedContent:_.content}};i.push(g),u.push({event:f,message:g})}f.thinking&&i.push({role:"thinking",timestamp:m,content:f.thinking})}return A1(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 ES(n),n}catch{}let r=an(this.baseDir,"conversations");try{let s=[];for(let o of await _S(r)){if(!o.endsWith(".db"))continue;Xm(o,".db").startsWith(e)&&s.push(an(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=IS(n);return r?(await yS(this.conversationPath(r),{force:!0}),await yS(an(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 S1(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=an(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await gS(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=an(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([gS(r,"utf8"),Ie(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as D1}from"node:child_process";import{StringDecoder as NS}from"node:string_decoder";function Ec(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 M1(t.label,n.binary,s,{cwd:n.cwd,env:Le(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:o.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function M1(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=D1(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new NS("utf8"),d=new NS("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}`,h=l.trim()||a.trim();o(new Error(Os(`${t} failed (${p})`,h?Te(h,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var qm=L(()=>{"use strict";jt();gt()});import{basename as $1}from"node:path";import{randomUUID as P1}from"node:crypto";function Vm(t){return new Gm(t)}function F1(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Gm,U1,Jm=L(()=>{"use strict";AS();Je();He();rn();qm();Gm=class extends ue{constructor(e){super({provider:new yc(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",ne,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:U1})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||$1(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=P1(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Pl({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}`}}},U1=Ec({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",F1(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>Oe("agy",t,e.permissionMode??"yolo")})});import{existsSync as Oi,readdirSync as j1,statSync as RS}from"node:fs";import{readdir as Km,rm as W1}from"node:fs/promises";import LS,{join as ln}from"node:path";function H1(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 B1(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Qs(t,e){let n=e??(process.platform==="win32"?LS.win32:LS.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=j1(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);RS(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)&&RS(t).isFile())return t}catch{}return n.join(r,s)}function Ym(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 X1(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 xS(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:Ym(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of X1(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:Ym(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:Ym(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function q1(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 CS(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,...G1(t)}}function G1(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 qs("",-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 Tc,OS=L(()=>{"use strict";Fl();Ae();xa();Tc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||ln(Q,".dsh");this.sessionsDir=ln(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Km(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Km(ln(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=xS(r),o=CS(r,n.filePath,s);return o?{...o,turnStatus:q1(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 W1(ln(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=H1(e),s=B1(e),o=r,i=ln(this.sessionsDir,r,n),a=ln(this.sessionsDir,s,n);!Oi(i)&&Oi(a)&&(o=s);let l=ln(this.sessionsDir,o,n);return Qs(l)}async findSessionDir(e){let n;try{n=await Km(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=ln(this.sessionsDir,r,s);try{let i=Qs(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=ln(this.sessionsDir,e,n),o=Qs(s),i=await r(o),a=La(i),l=[];for(let c of a.split(`
1837
- `))if(c.trim())try{let d=JSON.parse(c);if(d.type?.endsWith("-chunks")||d.type==="assistant/chunk"&&d.data?.chunk?.type!=="usage")continue;l.push(d)}catch{}return l}async readSummary(e,n){let r=ln(this.sessionsDir,e,n),s=Qs(r),o=await this.readRecords(e,n);return o.length===0?null:CS(o,s,xS(o))}}});import{spawn as V1}from"node:child_process";import{randomUUID as J1}from"node:crypto";function zm(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=>zm(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]=zm(s,e);return n}return t}function Y1(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 MS(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 wc(t,e=n=>Qm.spawn(n)){if(mr){let n=await mr.catch(()=>{});if(n?.alive)return n;mr=void 0}return mr=e(t),mr}async function Di(){if(!mr)return;(await mr.catch(()=>{}))?.shutdown(),mr=void 0}var K1,DS,Dn,Qm,mr,$S=L(()=>{"use strict";gt();K1=/dsh web:\s*(https?:\/\/\S+)/,DS=2e4;Dn=class t extends Error{method;detail;constructor(e,n,r=[]){let s=zm(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)}};Qm=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=Y1(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:J1()})}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 Dn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Dn(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 Dn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Dn(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 Dn(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 Dn(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 Dn(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&&MS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=V1("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(),MS(s,2e3),r(m))},f=setTimeout(()=>{let m=[l?`stdout:
1836
+ `):"":""}function fS(t){return t.model||t.message?.model}function _U(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:pS(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 gU(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Ci(e.output??e.error??t)}return Ci(t)}function pS(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function mS(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Ci(t.args,!0),toolInputData:It(t.args),toolCallId:t.id,model:n}}var gc,hS=L(()=>{"use strict";Ae();gc=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||fr(Q,".qwen")}async discoverSessions(){let e=fr(this.baseDir,"projects"),n;try{n=await _c(e)}catch{return[]}let r=[];for(let s of n){let o=fr(e,s,"chats"),i;try{i=await _c(o)}catch{continue}for(let a of i){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=fr(o,a);try{let d=await this.extractSummary(c,l);d&&r.push(d)}catch{}}}return r}async extractSummary(e,n){let r=!1,s=await Ie(e),o="(unknown)",i,a,l,c,d=0;for await(let u of Ee(e)){if(r=!0,u.cwd&&(o=u.cwd,u.version&&(a=u.version)),u.type==="system"&&u.cwd&&(o=u.cwd,u.version&&(a=u.version),u.model&&(i=u.model)),cS(u)){let f=uS(u).trim();f&&(l||(l=G(f,80)),c=G(f,80),d++)}if(dS(u)){let f=fS(u);f&&(i=f),d+=_U(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=lS(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Ie(e),s="(unknown)",o,i,a,l,c,d,u=[],f=mU();for await(let m of Ee(e)){if(pU(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,h=m.timestamp?new Date(m.timestamp):r.modifiedAt;if(m.type==="tool_result"){let _=pS(m).filter(g=>g.functionResponse!==void 0);_.length===0&&m.toolCallResult?.callId&&u.push({role:"tool_result",timestamp:h,content:Ci(m.toolCallResult.resultDisplay??m.toolCallResult.error??m.toolCallResult.status)??"tool result",toolCallId:m.toolCallResult.callId});for(let g of _){let E=g.functionResponse,y=gU(E.response),T=Ci(m.toolCallResult?.resultDisplay);u.push({role:"tool_result",timestamp:h,content:T??y??m.toolCallResult?.status??"tool result",toolName:E.name,toolCallId:m.toolCallResult?.callId??E.id,...y!==void 0?{toolDetailedContent:y}:{}})}}else if(cS(m)){let _=uS(m);_.trim()&&(c||(c=G(_.trim(),80)),d=G(_.trim(),80)),u.push({role:"user",timestamp:h,content:_})}else if(dS(m)){let _=fS(m);if(_&&(o=_),Array.isArray(p.content))for(let g of p.content)g.type==="text"&&g.text?u.push({role:"assistant",timestamp:h,content:g.text,model:_}):g.type==="thinking"&&g.thinking?u.push({role:"thinking",timestamp:h,content:g.thinking}):g.functionCall&&u.push(mS(g.functionCall,h,_));else if(typeof p.content=="string")u.push({role:"assistant",timestamp:h,content:p.content,model:_});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:h,content:E})}else g.functionCall?u.push(mS(g.functionCall,h,_)):g.text&&u.push({role:"assistant",timestamp:h,content:g.text,model:_})}}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,...hU(f),messages:u}}async resolveSessionPath(e){let n=fr(this.baseDir,"projects");try{let r=await _c(n),s=[];for(let o of r){let i=fr(n,o,"chats",`${e}.jsonl`);try{return await uU(i,{flag:"r"}),i}catch{continue}}for(let o of r){let i=fr(n,o,"chats"),a;try{a=await _c(i)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;lS(l,".jsonl").startsWith(e)&&s.push(fr(i,l))}}if(s.length===1)return s[0]}catch{}return null}async deleteSession(e){let n=await this.resolveSessionPath(e);if(!n)return!1;try{return await fU(n),!0}catch{return!1}}}});function Hm(t){return new Wm(t)}var Wm,Bm=L(()=>{"use strict";hS();Je();On();He();Wm=class extends ue{constructor(e){super({provider:new gc(e),protocol:{transport:"stream-json",perTurnCancellation:"process",persistentCancellation:"session"},capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",ne,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:sc})}openSession(e){return oc({...e,binary:"qwen"})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as _S,readFile as gS,rm as yS,stat as ES}from"node:fs/promises";import{basename as Xm,join as an}from"node:path";import{fileURLToPath as yU}from"node:url";async function EU(t){let e=await Promise.all(t.map(n=>Ie(n)));return{createdAt:new Date(Math.min(...e.map(n=>n.createdAt.getTime()))),modifiedAt:new Date(Math.max(...e.map(n=>n.modifiedAt.getTime())))}}function TU(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function TS(t){return t.type==="USER_INPUT"}function wS(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function wU(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function vS(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function SS(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 vU(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function SU(t){for await(let e of Ee(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let o=bU(s);if(o)return o}let r=IU(e.content);if(r)return r}return null}function bU(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 IU(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function kU(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 AU(t,e){let n=new Set;for(let r of e){let s=NU(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 NU(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:CU(n.event.content);if(r!==void 0)return bS(t.filter(o=>!e.has(o)&&OU(o)===r),n.event.step_index);let s=xU(n.event);if(s!==void 0)return bS(t.filter(o=>!e.has(o)&&RU(o.name,n.event.type)&&kS(LU(o))===s),n.event.step_index)}function bS(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 RU(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 LU(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function xU(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]),kS(e)}function kS(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return yU(e)}catch{return}}function CU(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function OU(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 IS(t){if(t.endsWith(".db"))return Xm(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var yc,AS=L(()=>{"use strict";Ae();yc=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||an(Q,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:an(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=an(this.baseDir,"conversations"),n;try{n=await _S(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let o=Xm(s,".db");try{let i=await this.extractSummary(o);i&&r.push(i)}catch{}}return r}conversationPath(e){return an(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return an(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 ES(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,o=await EU([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=SS(u.content);if(f&&(a=f),TS(u)){let m=vS(u.content).trim();m&&(l||(l=G(m,80)),c=G(m,80)),d++}else wS(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=IS(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=TU(f.created_at,s.modifiedAt),p=SS(f.content);if(p&&(a=p),TS(f)){let h=vS(f.content),_=h.trim();_&&(l||(l=G(_,80)),c=G(_,80)),i.push({role:"user",timestamp:m,content:h});continue}if(Array.isArray(f.tool_calls))for(let h of f.tool_calls){let _=h.name||"tool",g=vU(h.args),E=It(h.args),y={role:"tool_use",timestamp:m,content:g,toolName:_,toolInput:g,toolInputData:E};i.push(y),d.push({name:_,stepIndex:f.step_index,input:E,message:y})}if(wS(f)&&f.content)i.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(wU(f)&&f.content){let h=kU(f,r),_=h===void 0?null:await this.readTaskLog(r,h),g={role:"tool_result",timestamp:_?.modifiedAt??m,content:f.content,toolName:f.type?.toLowerCase(),backgroundTaskId:h,..._===null?{}:{toolDetailedContent:_.content}};i.push(g),u.push({event:f,message:g})}f.thinking&&i.push({role:"thinking",timestamp:m,content:f.thinking})}return AU(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 ES(n),n}catch{}let r=an(this.baseDir,"conversations");try{let s=[];for(let o of await _S(r)){if(!o.endsWith(".db"))continue;Xm(o,".db").startsWith(e)&&s.push(an(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=IS(n);return r?(await yS(this.conversationPath(r),{force:!0}),await yS(an(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 SU(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=an(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await gS(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=an(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,o]=await Promise.all([gS(r,"utf8"),Ie(r)]);return{content:s,modifiedAt:o.modifiedAt}}catch{return null}}}});import{spawn as DU}from"node:child_process";import{StringDecoder as NS}from"node:string_decoder";function Ec(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 MU(t.label,n.binary,s,{cwd:n.cwd,env:Le(n.env,n.cwd,n.sessionId),signal:n.signal});return n.onProgress?.({kind:"system",summary:`${t.label} -p one-shot completed`}),{text:o.trimEnd(),sessionId:n.sessionId,durationMs:Date.now()-r}}}function MU(t,e,n,r){return new Promise((s,o)=>{if(r.signal?.aborted){o(new Error(`${t} turn aborted`));return}let i;try{i=DU(e,n,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(f){o(f);return}let a="",l="",c=new NS("utf8"),d=new NS("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}`,h=l.trim()||a.trim();o(new Error(Os(`${t} failed (${p})`,h?Te(h,{provider:t}):"")))}),r.signal?.aborted?u():r.signal?.addEventListener("abort",u,{once:!0})})}var qm=L(()=>{"use strict";jt();gt()});import{basename as $U}from"node:path";import{randomUUID as PU}from"node:crypto";function Vm(t){return new Gm(t)}function FU(t){return t!==void 0&&t<=0?"0":t===void 0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Gm,UU,Jm=L(()=>{"use strict";AS();Je();He();rn();qm();Gm=class extends ue{constructor(e){super({provider:new yc(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",ne,"--dangerously-skip-permissions","--print-timeout","2m"],seedTimeoutMs:13e4,resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:UU})}async sendTurn(e,n){if(n.requireResume){let s=await this.resolvePath(n.sessionId);if(s===null||$U(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=PU(),s=`[lmctl-seed:${r}]`,o=await super.seed(e,{...n,prompt:Pl({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}`}}},UU=Ec({label:"agy",buildArgs:(t,e)=>{let n=[...e.sessionId?["--conversation",e.sessionId]:[],"-p",t,"--dangerously-skip-permissions","--print-timeout",FU(e.timeoutMs)];return e.model&&n.push("--model",e.model),n},assertArgs:(t,e)=>Oe("agy",t,e.permissionMode??"yolo")})});import{existsSync as Oi,readdirSync as jU,statSync as RS}from"node:fs";import{readdir as Km,rm as WU}from"node:fs/promises";import LS,{join as ln}from"node:path";function HU(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 BU(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Qs(t,e){let n=e??(process.platform==="win32"?LS.win32:LS.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=jU(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);RS(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)&&RS(t).isFile())return t}catch{}return n.join(r,s)}function Ym(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 XU(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 xS(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:Ym(o.content)})}else if(n.type==="assistant/message"){let o=r.message;for(let i of XU(o?.content))e.push({role:"thinking",timestamp:s,content:i});e.push({role:"assistant",timestamp:s,content:Ym(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:Ym(a?.content??o.message?.content),toolCallId:a?.toolCallId??o.message?.source?.callId})}}return e}function qU(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 CS(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,...GU(t)}}function GU(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 qs("",-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 Tc,OS=L(()=>{"use strict";Fl();Ae();xa();Tc=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||process.env.DSH_HOME||ln(Q,".dsh");this.sessionsDir=ln(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await Km(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await Km(ln(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=xS(r),o=CS(r,n.filePath,s);return o?{...o,turnStatus:qU(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 WU(ln(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){let r=HU(e),s=BU(e),o=r,i=ln(this.sessionsDir,r,n),a=ln(this.sessionsDir,s,n);!Oi(i)&&Oi(a)&&(o=s);let l=ln(this.sessionsDir,o,n);return Qs(l)}async findSessionDir(e){let n;try{n=await Km(this.sessionsDir)}catch{return null}for(let r of n){let s=e,o=ln(this.sessionsDir,r,s);try{let i=Qs(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=ln(this.sessionsDir,e,n),o=Qs(s),i=await r(o),a=La(i),l=[];for(let c of a.split(`
1837
+ `))if(c.trim())try{let d=JSON.parse(c);if(d.type?.endsWith("-chunks")||d.type==="assistant/chunk"&&d.data?.chunk?.type!=="usage")continue;l.push(d)}catch{}return l}async readSummary(e,n){let r=ln(this.sessionsDir,e,n),s=Qs(r),o=await this.readRecords(e,n);return o.length===0?null:CS(o,s,xS(o))}}});import{spawn as VU}from"node:child_process";import{randomUUID as JU}from"node:crypto";function zm(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=>zm(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]=zm(s,e);return n}return t}function YU(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 MS(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 wc(t,e=n=>Qm.spawn(n)){if(mr){let n=await mr.catch(()=>{});if(n?.alive)return n;mr=void 0}return mr=e(t),mr}async function Di(){if(!mr)return;(await mr.catch(()=>{}))?.shutdown(),mr=void 0}var KU,DS,Dn,Qm,mr,$S=L(()=>{"use strict";gt();KU=/dsh web:\s*(https?:\/\/\S+)/,DS=2e4;Dn=class t extends Error{method;detail;constructor(e,n,r=[]){let s=zm(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)}};Qm=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=YU(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:JU()})}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 Dn(e,`transport error: ${f instanceof Error?f.message:String(f)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Dn(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 Dn(e,`transport error: ${m instanceof Error?m.message:String(m)}`,this.getSecretsToRedact(s))}if(c.status>=300&&c.status<400)throw new Dn(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 Dn(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 Dn(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 Dn(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&&MS(this.child,2e3)}static spawn(e){return new Promise((n,r)=>{let s=VU("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(),MS(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 ${DS}ms `+(m?`
1841
1841
  ${Te(m,{provider:"dsh"})}`:"(no output captured)")))},DS);s.stdout?.on("data",m=>{let p=m.toString();if(l+=p,a+=p,o||i)return;let h=a.split(`
1842
- `);a=h.pop()??"";for(let _ of h){let g=K1.exec(_);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 h=p?`signal ${p}`:`exit code ${m}`;u(new Error(Os(`dsh web exited before reporting a boot URL (${h})`,c.trim()?Te(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as PS}from"node:crypto";import{existsSync as US,statSync as z1}from"node:fs";import{readFile as Q1,mkdir as Z1}from"node:fs/promises";function rp(t){return new np(t)}function tp(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function tF(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 vc(t){return t instanceof Error?t.message:String(t)}async function FS(t,e){let n;try{n=await Q1(t)}catch{return e?.(),[]}e&&Ro(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=La(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 nF(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 Sc(t,e){return Qs(t,e)}var Zm,eF,ep,np,sp=L(()=>{"use strict";Fl();Hs();Je();OS();xa();$S();He();rn();Zm=new Map,eF=500,ep=8*60*60*1e3;np=class extends ue{dshProvider;usageSeen=new Set;constructor(e){let n=new Tc(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 Z1(e,{recursive:!0});let r=`session-${PS()}`,s=tp(n?.env??process.env);Oe("dsh",[],"yolo");try{let o;try{o=await wc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${vc(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${vc(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: ${vc(a)}`}}let i=n?.prompt??ne;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,ep,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${vc(a)}`}}}finally{await Di()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return xn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=tp(n.env??process.env);Oe("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${PS()}`:n.sessionId,a;try{let l=await wc(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??ep,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=tp(e.env??process.env);Oe("dsh",[],e.permissionMode??"yolo");let r=await wc(n),s=Sc(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=US(s)&&z1(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,h={}){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(h.signal?.aborted)throw new Error("Aborted");if(s=Sc(s),!US(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 _=Date.now();try{let g,E=a.promptAndWait(r,e.cwd,i,p,ep,h.signal,v=>{g=v});E.catch(()=>{});let y=()=>{},T=new Promise((v,b)=>{y=()=>{(async()=>{c=!0,await m()})().finally(()=>b(Object.assign(new Error("Aborted"),{usage:g,sessionId:i})))},h.signal?.addEventListener("abort",y,{once:!0})}),w;try{w=await Promise.race([E,T])}finally{h.signal?.removeEventListener("abort",y)}return l+=1,{...w,sessionId:i,durationMs:Date.now()-_}}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=Sc(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await FS(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 qs(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),h=Zm.get(p)??new Set;if(h.size){m.invalidateOwnership();for(let E of h)E.invalidateOwnership()}h.add(m),Zm.set(p,h),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=Sc(c);let y=await FS(c),T=y.find(w=>w.type==="turn/end"&&(w.seq??-1)>f);if(y.length&&m.update(y,T?.seq??1/0),a?.(m.usage()),i?.aborted)throw new Error("Aborted");if(T){let w=T.data?.reason;w?.kind!=="completed"&&(g=w?.kind==="aborted"?"cancelled":"error");let v=[...y].reverse().find(x=>x.type==="assistant/message"&&(x.seq??-1)>f&&(x.seq??1/0)<=(T.seq??1/0)),b=v?nF(v):"";if(w?.kind!=="completed"&&!b)throw new Error(tF(w));m.finish();let k=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:k?{...k,...w?.kind==="completed"?{}:{outcome:w?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>E)throw new Error(`dsh turn timed out after ${o}ms waiting for turn/end`);await new Promise(w=>setTimeout(w,eF))}}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{h.delete(m),h.size||Zm.delete(p)}}}});import{existsSync as rF}from"node:fs";import{join as XS,resolve as sF}from"node:path";import{createRequire as oF}from"node:module";function iF(){return op===null&&(op=oF(import.meta.url)("node:sqlite").DatabaseSync),op}function ip(t={}){return sF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||XS(Q,".hermes"))}function aF(t={}){return XS(ip(t),"state.db")}function Mi(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function dt(t){return typeof t=="string"&&t.length>0?t:void 0}function lF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function HS(t){return dt(t.cwd)??dt(lF(t.model_config).cwd)??"(unknown)"}function cF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function dF(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 BS(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 op,jS,WS,bc,qS=L(()=>{"use strict";Ae();oe();op=null;jS="acp";WS=`id, source, model, model_config, started_at,
1842
+ `);a=h.pop()??"";for(let _ of h){let g=KU.exec(_);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 h=p?`signal ${p}`:`exit code ${m}`;u(new Error(Os(`dsh web exited before reporting a boot URL (${h})`,c.trim()?Te(c,{provider:"dsh"}):"")))})})}}});import{randomUUID as PS}from"node:crypto";import{existsSync as US,statSync as zU}from"node:fs";import{readFile as QU,mkdir as ZU}from"node:fs/promises";function rp(t){return new np(t)}function tp(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function tF(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 vc(t){return t instanceof Error?t.message:String(t)}async function FS(t,e){let n;try{n=await QU(t)}catch{return e?.(),[]}e&&Ro(n).reduce((o,i)=>o+i.length,0)!==n.length&&e?.();let r=La(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 nF(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 Sc(t,e){return Qs(t,e)}var Zm,eF,ep,np,sp=L(()=>{"use strict";Fl();Hs();Je();OS();xa();$S();He();rn();Zm=new Map,eF=500,ep=8*60*60*1e3;np=class extends ue{dshProvider;usageSeen=new Set;constructor(e){let n=new Tc(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 ZU(e,{recursive:!0});let r=`session-${PS()}`,s=tp(n?.env??process.env);Oe("dsh",[],"yolo");try{let o;try{o=await wc(s)}catch(a){return{success:!1,error:`dsh sidecar failed to start: ${vc(a)}`}}try{await o.rpc("session.create",{sessionId:r,cwd:e})}catch(a){return{success:!1,error:`session.create failed: ${vc(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: ${vc(a)}`}}let i=n?.prompt??ne;try{n?.signal?.throwIfAborted();try{n?.onDispatch?.()}catch{}let a=await this.promptAndWait(o,e,r,i,ep,n?.signal);return{success:!0,sessionId:r,usage:a.usage}}catch(a){return{success:!1,sessionId:r,usage:a?.usage,error:`seed turn failed: ${vc(a)}`}}}finally{await Di()}}async dshPromptTurn(e,n){let r=Date.now();if(n.bundleSession!==void 0)return xn(n.bundleSession,"dsh",n.sessionId,e,{onDelta:n.onDelta,onProgress:n.onProgress,signal:n.signal});let s=tp(n.env??process.env);Oe("dsh",[],n.permissionMode??"yolo");let o=!n.sessionId,i=o?`session-${PS()}`:n.sessionId,a;try{let l=await wc(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??ep,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=tp(e.env??process.env);Oe("dsh",[],e.permissionMode??"yolo");let r=await wc(n),s=Sc(this.dshProvider.sessionFilePath(e.cwd,e.sessionId)),o=!1;try{o=US(s)&&zU(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,h={}){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(h.signal?.aborted)throw new Error("Aborted");if(s=Sc(s),!US(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 _=Date.now();try{let g,E=a.promptAndWait(r,e.cwd,i,p,ep,h.signal,v=>{g=v});E.catch(()=>{});let y=()=>{},T=new Promise((v,b)=>{y=()=>{(async()=>{c=!0,await m()})().finally(()=>b(Object.assign(new Error("Aborted"),{usage:g,sessionId:i})))},h.signal?.addEventListener("abort",y,{once:!0})}),w;try{w=await Promise.race([E,T])}finally{h.signal?.removeEventListener("abort",y)}return l+=1,{...w,sessionId:i,durationMs:Date.now()-_}}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=Sc(this.dshProvider.sessionFilePath(n,r)),d=!1,u=await FS(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 qs(r,f,this.usageSeen);d&&m.invalidateOwnership();let p=JSON.stringify([c,r]),h=Zm.get(p)??new Set;if(h.size){m.invalidateOwnership();for(let E of h)E.invalidateOwnership()}h.add(m),Zm.set(p,h),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=Sc(c);let y=await FS(c),T=y.find(w=>w.type==="turn/end"&&(w.seq??-1)>f);if(y.length&&m.update(y,T?.seq??1/0),a?.(m.usage()),i?.aborted)throw new Error("Aborted");if(T){let w=T.data?.reason;w?.kind!=="completed"&&(g=w?.kind==="aborted"?"cancelled":"error");let v=[...y].reverse().find(x=>x.type==="assistant/message"&&(x.seq??-1)>f&&(x.seq??1/0)<=(T.seq??1/0)),b=v?nF(v):"";if(w?.kind!=="completed"&&!b)throw new Error(tF(w));m.finish();let k=m.usage();return{text:b,sessionId:r,durationMs:Date.now()-l,usage:k?{...k,...w?.kind==="completed"?{}:{outcome:w?.kind==="aborted"?"cancelled":"error"}}:void 0}}if(Date.now()>E)throw new Error(`dsh turn timed out after ${o}ms waiting for turn/end`);await new Promise(w=>setTimeout(w,eF))}}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{h.delete(m),h.size||Zm.delete(p)}}}});import{existsSync as rF}from"node:fs";import{join as XS,resolve as sF}from"node:path";import{createRequire as oF}from"node:module";function iF(){return op===null&&(op=oF(import.meta.url)("node:sqlite").DatabaseSync),op}function ip(t={}){return sF(t.hermesHome?.trim()||process.env.HERMES_HOME?.trim()||XS(Q,".hermes"))}function aF(t={}){return XS(ip(t),"state.db")}function Mi(t){let e=typeof t=="number"&&Number.isFinite(t)?t:0;return new Date(e*1e3)}function dt(t){return typeof t=="string"&&t.length>0?t:void 0}function lF(t){if(!t)return{};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}function HS(t){return dt(t.cwd)??dt(lF(t.model_config).cwd)??"(unknown)"}function cF(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}function dF(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 BS(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 op,jS,WS,bc,qS=L(()=>{"use strict";Ae();oe();op=null;jS="acp";WS=`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`;bc=class{name="hermes";dbPath;busyTimeoutMs;discoverLimit;constructor(e){this.dbPath=aF(e),this.busyTimeoutMs=e?.busyTimeoutMs??5e3,this.discoverLimit=e?.discoverLimit??200}get stateDbPath(){return this.dbPath}openDb(){if(!rF(this.dbPath))return null;let e=null;try{return e=new(iF())(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 ${WS} FROM sessions WHERE id = ? AND source = ?`).get(n,jS)??null}async discoverSessions(){let e=this.openDb();if(!e)return[];try{let n=e.prepare(`SELECT ${WS} FROM sessions
1846
1846
  WHERE source = ?
@@ -1865,7 +1865,7 @@ ${aj(t)}`}function Cc(t,e){let n=Cp(t,e);return n.ok?{ok:!0,identity:n.identity,
1865
1865
  ${n.map((s,o)=>` ${o+1}) ${s}`).join(`
1866
1866
  `)}
1867
1867
  `);;){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.
1868
- `)}}close(){this.rl?.close()}}});function Pc(t){return/\S\s+\S/u.test(t)}function Ub(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("-")&&!Pc(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=Ln(e)??(e.endsWith(":")&&Re(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||Re(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Pc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Pc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Pc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return gf(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function Uc(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 Fb=L(()=>{"use strict";je();Qe()});import{spawnSync as Hp}from"node:child_process";import{existsSync as Wb,readFileSync as Hb}from"node:fs";import{homedir as Bb}from"node:os";import{resolve as jp}from"node:path";function ro(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 xj(){let t=Hp("agy",["models"],{encoding:"utf-8",timeout:Lj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Cj(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&&Pp)return Pp;let e=s=>(t||(Pp=s),s),n;try{n=(t??xj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?ro("agy models",s):`agy models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:ro("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let r=Cj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r})}function Dj(){let t=Hp("codex",["debug","models"],{encoding:"utf-8",timeout:Oj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Mj(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&&Up)return Up;let e=s=>(t||(Up=s),s),n;try{n=(t??Dj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?ro("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:ro("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=Mj(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 Pj(t){let e=Hp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:$j});return{status:e.status,stdout:e.stdout??"",error:e.error}}function Bp(t,e){if(!e&&Fp.has(t))return Fp.get(t);let n=i=>(e||Fp.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??Pj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?ro(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:ro(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 Xp(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=Fj(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=Bp(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||no.includes(r.model))continue;to.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Xi(to)}. 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(no)}. 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===jb&&n.push(`[${r.alias}] model="${jb}" 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&&(Xb.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 qb(t,e={}){let n=t.filter(i=>i.model!==void 0&&Xb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Mt();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=Ka(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=Jy(r.catalog,a)??0;s.push(`[${i.alias}] model "${l}" is unknown to the lmprice catalog for provider "${a}" (${d} known) -- not necessarily wrong: may be a model too new for lmprice to have published yet, or a typo. A matching lmprice catalog/alias entry would resolve this; lint cannot otherwise confirm whether ${a} accepts it.`)}else c.kind==="wrong-provider"?o.push({field:i.alias,message:`model "${l}" is not offered by provider "${a}" -- it is a recognized model, but only under: ${c.otherProviders.join(", ")}. Declare provider="${c.otherProviders[0]}" (or another listed provider), or use a model "${a}" actually offers.`}):c.kind==="known-unpriced"&&s.push(`[${i.alias}] model "${l}" is recognized in the lmprice catalog but has no price information \u2014 cost will be unavailable`);if(a==="claude"&&(c.kind==="priced"||c.kind==="known-unpriced"||c.kind==="estimated")&&Rj.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 Gb(t,e={}){return(await qb(t,e)).warnings}async function Vb(t,e={}){return(await qb(t,e)).errors}function Vi(t){let e=process.env.KIMI_CODE_HOME||jp(Bb(),".kimi-code"),n=t??jp(e,"config.toml");if(!Wb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=Hb(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=Uj(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 Uj(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 Fj(t){let e=t??jp(Bb(),".config","opencode","opencode.json");if(!Wb(e))return{available:!0,models:[]};let n;try{n=JSON.parse(Hb(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:jj(n)}}function jj(t){if(!Wp(t))return[];let e=Fc(t.provider)??Fc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!Wp(s))continue;let o=Fc(s.models)??Fc(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function Fc(t){return Wp(t)?t:null}function Wp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Xi(t){return t.length>0?t.join(", "):"(none)"}var Xb,Rj,to,no,jb,Lj,Pp,Oj,Up,$j,Fp,Ji=L(()=>{"use strict";Tn();Ur();Xb=new Set(Object.keys(Jt).filter(t=>t!=="codex"&&t!=="kimi")),Rj=/\d\.(?=\d)/,to=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],no=["deepseek-flash","deepseek-pro"],jb="gpt-5.3-codex-spark",Lj=15e3;Pp=null;Oj=5e3;Up=null;$j=5e3;Fp=new Map});function jc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Jb(t){if(!/(?:^|[/:])(?:gpt-|o\d(?:-|$)|chatgpt-|claude[ -]|gemini[ -])/i.test(t))return!1;let e=/claude/i.test(t)?"claude":/gemini/i.test(t)?"gemini":"codex";return Jt[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 qp(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=Jt[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")||jc(t)&&!Jb(o)||n.push(o)}return[...new Set(n)].sort()}async function Ki(t){let e;switch(t){case"dsh":e=[...no,...to];break;case"codex":e=Gi().models;break;case"agy":e=qi().models;break;case"kimi":e=Vi().models;break;case"opencode":e=Bp("").models;break;default:{let{catalog:n}=await Mt();e=n?qp(t,n):[]}}return[...new Set(e.filter(n=>!jc(t)||Jb(n)))].sort()}var Gp=L(()=>{"use strict";Tn();Ur();Ji()});var gr,Yi=L(()=>{"use strict";gr={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"}});function Vp(t,e=zi){let n=e[t];return n?[...new Set([...n.tiers,...n.also??[]])]:null}function Jp(t,e=zi){return e[t]?.tiers??null}function Kb(t,e,n=zi){let r=n[t]?.tiers.indexOf(e)??-1;return r<0?null:`${t}/tier${r+1}`}function Yb(t,e=zi){return e[t]?.reviewed??null}function zb(t,e,n,r=zi){let s=r[t],o=Vp(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 Wc,zi,Kp=L(()=>{"use strict";Wc={date:"2026-09-29",cliVersion:null,by:"ported unchanged from init-config.ts PROVIDER_MODEL_DEFAULTS; awaiting operator review (issue 066)"},zi={claude:{reviewed:Wc,tiers:["claude-opus-5","claude-sonnet-5","claude-sonnet-5"]},codex:{reviewed:Wc,tiers:["gpt-5.6-sol","gpt-5.5","gpt-6-astra"]},agy:{reviewed:Wc,tiers:["Gemini 3.8 Flash (High)","Gemini 3.8 Flash (Medium)","Gemini 3.1 Pro (High)"]},kimi:{reviewed:Wc,tiers:["kimi-code/k3","kimi-code/k3","kimi-code/k3"]}}});var nI={};me(nI,{MODEL_PROVIDERS:()=>Pn,knownModelNames:()=>so,runModel:()=>Hc});import{spawnSync as Wj}from"node:child_process";function Hj(t){let e=gr[t];if(!e)return null;try{let n=Wj(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?qp(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 so(t){if(!Pn.includes(t))return Ki(t);let e=t==="claude"?await Mt():{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}=$t(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 Hc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Qb),0;let r=ce(t,[],["--json","--all"]),s=r.positionals.find(g=>g!=="all"&&!Pn.includes(g)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${Pn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1868
+ `)}}close(){this.rl?.close()}}});function Pc(t){return/\S\s+\S/u.test(t)}function Ub(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("-")&&!Pc(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=Ln(e)??(e.endsWith(":")&&Re(e.slice(0,-1))?{teamfile:e.slice(0,-1),alias:""}:null);if(r||Re(e)){let o=r?.teamfile??e,i=r?.alias,a=[...n];return!i&&a.length&&!Pc(a[0])&&(i=a.shift()),{kind:"team",file:o,...i!==void 0?{alias:i}:{},...a.length?a.some(Pc)?{prompt:a.join(" ")}:{pendingPrompt:a.join(" ")}:{}}}let s=n.length?n.some(Pc)?{prompt:n.join(" ")}:{pendingPrompt:n.join(" ")}:{};return gf(e)?{kind:"session",id:e,...s}:{kind:"models",query:e,...s}}function Uc(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 Fb=L(()=>{"use strict";je();Qe()});import{spawnSync as Hp}from"node:child_process";import{existsSync as Wb,readFileSync as Hb}from"node:fs";import{homedir as Bb}from"node:os";import{resolve as jp}from"node:path";function ro(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 xj(){let t=Hp("agy",["models"],{encoding:"utf-8",timeout:Lj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Cj(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&&Pp)return Pp;let e=s=>(t||(Pp=s),s),n;try{n=(t??xj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?ro("agy models",s):`agy models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:ro("agy models",n.error)});if(n.status!==0)return e({available:!1,models:[],reason:`agy models exited with status ${n.status??"unknown"}`});let r=Cj(n.stdout);return r.length===0?e({available:!1,models:[],reason:"agy models returned no models"}):e({available:!0,models:r})}function Dj(){let t=Hp("codex",["debug","models"],{encoding:"utf-8",timeout:Oj});return{status:t.status,stdout:t.stdout??"",error:t.error}}function Mj(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&&Up)return Up;let e=s=>(t||(Up=s),s),n;try{n=(t??Dj)()}catch(s){return e({available:!1,models:[],reason:s instanceof Error?ro("codex debug models",s):`codex debug models could not be run: ${String(s)}`})}if(n.error)return e({available:!1,models:[],reason:ro("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=Mj(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 Pj(t){let e=Hp("opencode",t?["models",t]:["models"],{encoding:"utf-8",timeout:$j});return{status:e.status,stdout:e.stdout??"",error:e.error}}function Bp(t,e){if(!e&&Fp.has(t))return Fp.get(t);let n=i=>(e||Fp.set(t,i),i),r=t?`opencode models ${t}`:"opencode models",s;try{s=(e??Pj)(t)}catch(i){return n({available:!1,models:[],reason:i instanceof Error?ro(r,i):`${r} could not be run: ${String(i)}`})}if(s.error)return n({available:!1,models:[],reason:ro(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 Xp(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=Fj(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=Bp(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||no.includes(r.model))continue;to.includes(r.model)||n.push(`[${r.alias}] model="${r.model}" is not in dsh's built-in catalog. Valid pinned models: ${Xi(to)}. 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(no)}. 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===jb&&n.push(`[${r.alias}] model="${jb}" 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&&(Xb.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 qb(t,e={}){let n=t.filter(i=>i.model!==void 0&&Xb.has(i.provider.trim().toLowerCase()));if(n.length===0)return{warnings:[],errors:[]};let r=e.snapshot??await Mt();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=Ka(a,l,r.catalog,r.aliases);if(c.kind==="unknown"){let d=Jy(r.catalog,a)??0;s.push(`[${i.alias}] model "${l}" is unknown to the lmprice catalog for provider "${a}" (${d} known) -- not necessarily wrong: may be a model too new for lmprice to have published yet, or a typo. A matching lmprice catalog/alias entry would resolve this; lint cannot otherwise confirm whether ${a} accepts it.`)}else c.kind==="wrong-provider"?o.push({field:i.alias,message:`model "${l}" is not offered by provider "${a}" -- it is a recognized model, but only under: ${c.otherProviders.join(", ")}. Declare provider="${c.otherProviders[0]}" (or another listed provider), or use a model "${a}" actually offers.`}):c.kind==="known-unpriced"&&s.push(`[${i.alias}] model "${l}" is recognized in the lmprice catalog but has no price information \u2014 cost will be unavailable`);if(a==="claude"&&(c.kind==="priced"||c.kind==="known-unpriced"||c.kind==="estimated")&&Rj.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 Gb(t,e={}){return(await qb(t,e)).warnings}async function Vb(t,e={}){return(await qb(t,e)).errors}function Vi(t){let e=process.env.KIMI_CODE_HOME||jp(Bb(),".kimi-code"),n=t??jp(e,"config.toml");if(!Wb(n))return{available:!1,models:[],reason:`${n} not found`};let r;try{r=Hb(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=Uj(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 Uj(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 Fj(t){let e=t??jp(Bb(),".config","opencode","opencode.json");if(!Wb(e))return{available:!0,models:[]};let n;try{n=JSON.parse(Hb(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:jj(n)}}function jj(t){if(!Wp(t))return[];let e=Fc(t.provider)??Fc(t.providers);if(!e)return[];let n=new Set;for(let[r,s]of Object.entries(e)){if(!Wp(s))continue;let o=Fc(s.models)??Fc(s.model);if(o)for(let i of Object.keys(o))n.add(i.startsWith(`${r}/`)?i:`${r}/${i}`)}return[...n].sort()}function Fc(t){return Wp(t)?t:null}function Wp(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Xi(t){return t.length>0?t.join(", "):"(none)"}var Xb,Rj,to,no,jb,Lj,Pp,Oj,Up,$j,Fp,Ji=L(()=>{"use strict";Tn();Ur();Xb=new Set(Object.keys(Jt).filter(t=>t!=="codex"&&t!=="kimi")),Rj=/\d\.(?=\d)/,to=["deepseek-v4-flash","deepseek-v4-pro","deepseek-v4-flash-vision-exp"],no=["deepseek-flash","deepseek-pro"],jb="gpt-5.3-codex-spark",Lj=15e3;Pp=null;Oj=5e3;Up=null;$j=5e3;Fp=new Map});function jc(t){return["agy","opencode","copilot","hermes","pi","lmplayer","miniplayer"].includes(t)}function Jb(t){if(!/(?:^|[/:])(?:gpt-|o\d(?:-|$)|chatgpt-|claude[ -]|gemini[ -])/i.test(t))return!1;let e=/claude/i.test(t)?"claude":/gemini/i.test(t)?"gemini":"codex";return Jt[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 qp(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=Jt[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")||jc(t)&&!Jb(o)||n.push(o)}return[...new Set(n)].sort()}async function Ki(t){let e;switch(t){case"dsh":e=[...no,...to];break;case"codex":e=Gi().models;break;case"agy":e=qi().models;break;case"kimi":e=Vi().models;break;case"opencode":e=Bp("").models;break;default:{let{catalog:n}=await Mt();e=n?qp(t,n):[]}}return[...new Set(e.filter(n=>!jc(t)||Jb(n)))].sort()}var Gp=L(()=>{"use strict";Tn();Ur();Ji()});var gr,Yi=L(()=>{"use strict";gr={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"}});function Vp(t,e=zi){let n=e[t];return n?[...new Set([...n.tiers,...n.also??[]])]:null}function Jp(t,e=zi){return e[t]?.tiers??null}function Kb(t,e,n=zi){let r=n[t]?.tiers.indexOf(e)??-1;return r<0?null:`${t}/tier${r+1}`}function Yb(t,e=zi){return e[t]?.reviewed??null}function zb(t,e,n,r=zi){let s=r[t],o=Vp(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 Wc,zi,Kp=L(()=>{"use strict";Wc="team peer review 2026-10-10 (draft lmscript.lmctl:LeadB; review math.lmctl peer-review session)",zi={claude:{reviewed:{date:"2026-10-10",cliVersion:"2.1.296 (Claude Code)",by:Wc},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:Wc},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:Wc},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:Wc},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:()=>Pn,knownModelNames:()=>so,runModel:()=>Hc});import{spawnSync as Wj}from"node:child_process";function Hj(t){let e=gr[t];if(!e)return null;try{let n=Wj(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?qp(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 so(t){if(!Pn.includes(t))return Ki(t);let e=t==="claude"?await Mt():{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}=$t(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 Hc(t,e,n={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(Qb),0;let r=ce(t,[],["--json","--all"]),s=r.positionals.find(g=>g!=="all"&&!Pn.includes(g)),o=r.error??(s===void 0?void 0:`unknown provider: ${s} (valid targets: all, ${Pn.join(", ")})`);if(o!==void 0)return e.stderr.write(`error: ${o}
1869
1869
  ${Qb}`),2;let i=n.selections?.map(g=>g.provider)??(r.positionals.length===0||r.positionals.includes("all")?[...Pn]:Pn.filter(g=>r.positionals.includes(g)));e.stderr.write(`querying models: ${i.join(", ")} ...
1870
1870
  `);let a=await(n.loadSnapshot??Mt)(),l=!z(r,"--all")&&n.selections===void 0,c=[];for(let g of i){let E;try{let O=n.selections?.find(C=>C.provider===g);E=O?.models!==void 0?{available:!0,models:O.models}:n.loadModels?await n.loadModels(g,a):Pn.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":Bj[g]??"provider model catalog",T=l?Vp(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,v=(n.providerVersion??Hj)(g),b=zb(g,w,v,n.curation),k=Yb(g,n.curation),x=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:k.date,reviewed_cli_version:k.cliVersion,reviewed_by:k.by,installed_cli_version:v,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:x.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.
1871
1871
  `),Xj(e,c,a),0;e.stdout.write(`USD per million tokens (API reference rates, not subscription charges). n/a = unknown.