@lmctl-ai/lmctl 0.1.335 → 0.1.336

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
@@ -1575,7 +1575,7 @@ ${n}`:n}function eC(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1575
1575
  ORDER BY s.time_updated DESC
1576
1576
  LIMIT 2`).all(`${n}%`);return s.length!==1?null:s[0]}}});function Nd(){return new Id}var Id,Ad=E(()=>{"use strict";kd();ht();cn();it();Id=class extends Te{constructor(){super({provider:new $r,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",ce],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(e,n)=>Gt(e,{...n,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??ce),n}}});import{appendFile as BC,mkdir as XC,readFile as qg,readdir as Hg,rm as JC,stat as Bg}from"node:fs/promises";import{basename as GC,dirname as KC,isAbsolute as Xg,join as rr,relative as VC,resolve as xd}from"node:path";function Rd(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function QC(t){return typeof t=="number"?new Date(t):Rd(t)??new Date(0)}function Jg(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(`
1577
1577
  `).trim():""}function Gg(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function e$(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:Gg(t)??""}function t$(t){let e=n$(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 i=s.content.match(/(?:^|\n)task_id:\s*([^\s]+)/)?.[1];i!==void 0&&(n.add(i),r.backgroundTaskId=i,s.backgroundTaskId=i)}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 i=e.get(r.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function n$(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 YC,zC,ZC,Ro,Kg=E(()=>{"use strict";At();YC="1.4",zC="1.5",ZC=new Set([YC,zC]),Ro=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=xd(e?.kimiHome??process.env.KIMI_CODE_HOME??rr(ge,".kimi-code")),this.sessionsDir=rr(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}}async resolveSessionPath(e){return(await this.findSession(e))?.wirePath??null}async deleteSession(e){let n=await this.findSession(e);return n?(await JC(n.sessionDir,{recursive:!0,force:!0}),await XC(KC(this.indexPath()),{recursive:!0,mode:448}),await BC(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
1578
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return rr(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 Hg(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=rr(this.sessionsDir,s.name),o;try{o=await Hg(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=rr(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await qg(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:xd(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:rr(n,"state.json"),wirePath:rr(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Xg(e)||GC(e)!==n)return!1;let r=VC(this.sessionsDir,xd(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Xg(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(i=>i.sessionId===e);if(r)return r;let s=n.filter(i=>i.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await qg(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 Bg(e.wirePath)}catch{return null}let s=await Bg(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=Rd(n.createdAt)??s.birthtime,a=Rd(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:o,modifiedAt:a,model:i.model,startCommand:"kimi",firstUserMessage:i.firstUserMessage,lastUserMessage:i.lastUserMessage??(n.lastPrompt?B(n.lastPrompt.trim(),80):void 0),messageCount:i.messageCount,filePath:e.wirePath,filePaths:[e.statePath,e.wirePath],totalInputTokens:i.totalInputTokens,totalCachedInputTokens:i.totalCachedInputTokens,totalCacheWriteInputTokens:i.totalCacheWriteInputTokens,totalOutputTokens:i.totalOutputTokens,lastInputTokens:i.lastInputTokens,lastTokenUsage:i.lastTokenUsage}}async parseWire(e){let n=[],r=!0,s,i,o,a=0,l=0,c=0,u=0,d=!1,f=0,m,p;for await(let h of De(e)){let _=QC(h.time??h.created_at);if(r&&(r=!1,h.type==="metadata"&&!ZC.has(h.protocol_version))){let y=`Kimi transcript wire protocol version ${JSON.stringify(h.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:_,content:y}],messageCount:1,firstUserMessage:y,lastUserMessage:y}}if((h.type==="config.update"||h.type==="profile.bind")&&h.modelAlias&&(s=h.modelAlias),h.type==="usage.record"){h.model&&(s=h.model),d||=h.usage!==void 0;let y=h.usage?.inputOther??0,w=h.usage?.inputCacheRead??0,v=h.usage?.inputCacheCreation??0,N=h.usage?.output??0;a+=y,l+=w,c+=v,u+=N,h.usageScope==="turn"&&(m=y+w+v,p={inputTokens:y,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:N,totalTokens:m+N});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let y=Jg(h.input);y&&(i??=B(y,80),o=B(y,80),n.push({role:"user",timestamp:_,content:y}),f++);continue}if(h.type==="turn.steer"){let y=Jg(h.input);y&&(n.push({role:"system",timestamp:_,content:y}),f++);continue}if(h.type!=="context.append_loop_event"||!h.event)continue;let g=h.event;g.type==="content.part"&&g.part?.type==="text"&&g.part.text?(n.push({role:"assistant",timestamp:_,content:g.part.text,model:s}),f++):g.type==="content.part"&&g.part?.type==="think"&&g.part.think?n.push({role:"thinking",timestamp:_,content:g.part.think,model:s}):g.type==="tool.call"?n.push({role:"tool_use",timestamp:_,content:g.name??"tool",toolName:g.name,toolInput:Gg(g.args),toolInputData:_t(g.args),toolCallId:g.toolCallId,model:s}):g.type==="tool.result"&&n.push({role:"tool_result",timestamp:_,content:e$(g.result),toolCallId:g.toolCallId,model:s})}return t$(n),{messages:n,messageCount:f,model:s,firstUserMessage:i,lastUserMessage:o,totalInputTokens:d?a:void 0,totalCachedInputTokens:d?l:void 0,totalCacheWriteInputTokens:d?c:void 0,totalOutputTokens:d?u:void 0,lastInputTokens:m,lastTokenUsage:p}}}});function Ld(t){return new Od(t)}var Od,Cd=E(()=>{"use strict";Kg();ht();cn();it();Od=class extends Te{constructor(e){super({provider:new Ro(e),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",ce,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Gt(n,{...r,acpTool:"kimi"})})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??ce,"--output-format","stream-json"),n}}});import{spawn as r$}from"node:child_process";import{mkdirSync as s$}from"node:fs";function Md(t){return new $d(t)}async function i$(t,e){let n=Date.now(),r=Vg({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});et("lmplayer",r,e.permissionMode??"yolo");let s=await zg(e.binary,r,{cwd:e.cwd,env:Ke(e.env,e.cwd,e.sessionId),signal:e.signal,onText:i=>{e.onProgress?.({kind:"text",summary:i.slice(0,120)}),e.onDelta?.(i)}});if(s.code!==0&&s.code!==null)throw new Error(Yg(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Vg(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(...An("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Yg(t){if(t.error)return t.error;let e=_o(t.stderr).trim();return e?e.slice(0,500):`exit code ${t.code}`}function zg(t,e,n){return new Promise((r,s)=>{let i;try{i=r$(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(g){s(g);return}let o="",a="",l="",c,u,d,f=[],m=!1,p=n.timeoutMs===void 0?void 0:setTimeout(()=>{m||(m=!0,i.kill(),h(),s(new Error(`lmplayer seed timed out after ${n.timeoutMs}ms`)))},n.timeoutMs),h=()=>{p!==void 0&&clearTimeout(p)},_=g=>{let y=g.trim();if(!y)return;let w;try{w=JSON.parse(y)}catch{f.push(g),n.onText?.(g);return}if(!Mr(w))return;let v=Oo(w,!1);c===void 0&&v!==void 0&&(c=v),u=Oo(w,!0)??u,d===void 0&&(d=o$(w));let N=Zg(w);N&&(f.push(N),n.onText?.(N))};i.stdout?.on("data",g=>{let y=g.toString("utf8");o+=y,l+=y;let w=l.indexOf(`
1578
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return rr(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 Hg(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=rr(this.sessionsDir,s.name),o;try{o=await Hg(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=rr(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await qg(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:xd(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:rr(n,"state.json"),wirePath:rr(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Xg(e)||GC(e)!==n)return!1;let r=VC(this.sessionsDir,xd(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Xg(r)}async findSession(e){let n=await this.sessionFiles(),r=n.find(i=>i.sessionId===e);if(r)return r;let s=n.filter(i=>i.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let n=JSON.parse(await qg(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 Bg(e.wirePath)}catch{return null}let s=await Bg(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=Rd(n.createdAt)??s.birthtime,a=Rd(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:o,modifiedAt:a,model:i.model,startCommand:"kimi",firstUserMessage:i.firstUserMessage,lastUserMessage:i.lastUserMessage??(n.lastPrompt?B(n.lastPrompt.trim(),80):void 0),messageCount:i.messageCount,filePath:e.wirePath,filePaths:[e.statePath,e.wirePath],totalInputTokens:i.totalInputTokens,totalCachedInputTokens:i.totalCachedInputTokens,totalCacheWriteInputTokens:i.totalCacheWriteInputTokens,totalOutputTokens:i.totalOutputTokens,lastInputTokens:i.lastInputTokens,lastTokenUsage:i.lastTokenUsage}}async parseWire(e){let n=[],r=!0,s,i,o,a=0,l=0,c=0,u=0,d=!1,f=0,m,p;for await(let h of De(e)){let _=QC(h.time??h.created_at);if(r&&(r=!1,h.type==="metadata"&&!ZC.has(h.protocol_version))){let y=`Kimi transcript wire protocol version ${JSON.stringify(h.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:_,content:y}],messageCount:1,firstUserMessage:y,lastUserMessage:y}}if((h.type==="config.update"||h.type==="profile.bind")&&h.modelAlias&&(s=h.modelAlias),h.type==="usage.record"){h.model&&(s=h.model),d||=h.usage!==void 0;let y=h.usage?.inputOther??0,w=h.usage?.inputCacheRead??0,v=h.usage?.inputCacheCreation??0,N=h.usage?.output??0;a+=y,l+=w,c+=v,u+=N,h.usageScope==="turn"&&(m=y+w+v,p={inputTokens:y,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:N,totalTokens:m+N});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let y=Jg(h.input);y&&(i??=B(y,80),o=B(y,80),n.push({role:"user",timestamp:_,content:y}),f++);continue}if(h.type==="turn.steer"){let y=Jg(h.input);y&&(n.push({role:"system",timestamp:_,content:y}),f++);continue}if(h.type!=="context.append_loop_event"||!h.event)continue;let g=h.event;g.type==="content.part"&&g.part?.type==="text"&&g.part.text?(n.push({role:"assistant",timestamp:_,content:g.part.text,model:s}),f++):g.type==="content.part"&&g.part?.type==="think"&&g.part.think?n.push({role:"thinking",timestamp:_,content:g.part.think,model:s}):g.type==="tool.call"?n.push({role:"tool_use",timestamp:_,content:g.name??"tool",toolName:g.name,toolInput:Gg(g.args),toolInputData:_t(g.args),toolCallId:g.toolCallId,model:s}):g.type==="tool.result"&&n.push({role:"tool_result",timestamp:_,content:e$(g.result),toolCallId:g.toolCallId,model:s})}return t$(n),{messages:n,messageCount:f,model:s,firstUserMessage:i,lastUserMessage:o,totalInputTokens:d?a:void 0,totalCachedInputTokens:d?l:void 0,totalCacheWriteInputTokens:d?c:void 0,totalOutputTokens:d?u:void 0,lastInputTokens:m,lastTokenUsage:p}}}});function Ld(t){return new Od(t)}var Od,Cd=E(()=>{"use strict";Kg();ht();cn();it();Od=class extends Te{constructor(e){super({provider:new Ro(e),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",ce,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>Gt(n,{...r,acpTool:"kimi"})})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??ce,"--output-format","stream-json"),n}}});import{spawn as r$}from"node:child_process";import{mkdirSync as s$}from"node:fs";function Md(t){return new $d(t)}async function i$(t,e){let n=Date.now(),r=Vg({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});et("lmplayer",r,e.permissionMode??"yolo");let s=await zg(e.binary,r,{cwd:e.cwd,env:Ke(e.env,e.cwd,e.sessionId),signal:e.signal,onText:i=>{e.onProgress?.({kind:"text",summary:i.slice(0,120)}),e.onDelta?.(i)}});if(s.code!==0&&s.code!==null)throw new Error(Yg(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Vg(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(...An("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Yg(t){if(t.error)return t.error;let e=_o(t.stderr).trim();return e?e.slice(0,500):`exit code ${t.code}`}function zg(t,e,n){return new Promise((r,s)=>{let i;try{i=r$(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(g){s(g);return}let o="",a="",l="",c,u,d,f=[],m=!1,p=n.timeoutMs===void 0?void 0:setTimeout(()=>{m||(m=!0,i.kill(),h(),s(new Error(`lmplayer seed timed out after ${n.timeoutMs}ms`)))},n.timeoutMs),h=()=>{p!==void 0&&clearTimeout(p)},_=g=>{let y=g.trim();if(!y)return;let w;try{w=JSON.parse(y)}catch{f.push(g),n.onText?.(g);return}if(!Mr(w))return;let v=Oo(w,!1);c===void 0&&v!==void 0&&(c=v),u=Oo(w,!0)??u;let N=o$(w);N!==void 0&&(d=N);let b=Zg(w);b&&(f.push(b),n.onText?.(b))};i.stdout?.on("data",g=>{let y=g.toString("utf8");o+=y,l+=y;let w=l.indexOf(`
1579
1579
  `);for(;w>=0;){let v=l.slice(0,w);l=l.slice(w+1),_(v),w=l.indexOf(`
1580
1580
  `)}}),i.stderr?.on("data",g=>{a+=g.toString("utf8")}),n.signal&&(n.signal.aborted?i.kill():n.signal.addEventListener("abort",()=>i.kill(),{once:!0})),i.on("exit",g=>{m||(m=!0,h(),l.length>0&&_(l),r({code:g,stdout:o,stderr:a,sessionId:c??u,text:f.join(""),error:d}))}),i.on("error",g=>{m||(m=!0,h(),s(g))})})}function o$(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Mr(e)){let n=e.data;if(Mr(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 Zg(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(Mr(n)){let r=Zg(n);if(r)return r}}}function Oo(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(Mr(n)){let r=Oo(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(Mr(s)){let i=Oo(s,e);if(i!==void 0)return i}}}function Mr(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var $d,Dd=E(()=>{"use strict";kd();ht();it();er();xt();Wc();$d=class extends Te{constructor(e){super({provider:new $r({providerName:"lmplayer",startCommand:"lmplayer",dbPath:e?.lmplayerDbPath}),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",ce],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:i$})}seedArgsFor(e){return Vg({prompt:e?.prompt??ce,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){s$(e,{recursive:!0});let r=this.seedArgsFor(n);et("lmplayer",r);try{let s=await zg(this.binary,r,{cwd:e,env:Nn(void 0,e),timeoutMs:6e4});return s.code!==0&&s.code!==null?{success:!1,error:Yg(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 "${ce}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as Lo,readFile as a$,rm as l$}from"node:fs/promises";import{basename as Qg,join as On}from"node:path";function c$(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function Xs(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function d$(t,e){if(!e)return;t.observed=!0;let n=Xs(e.promptTokenCount),r=Xs(e.cachedContentTokenCount),s=Xs(e.candidatesTokenCount),i=Xs(e.thoughtsTokenCount);t.totalInputTokens+=n,t.totalCachedInputTokens+=r,t.totalOutputTokens+=s,t.totalReasoningOutputTokens+=i,t.lastInputTokens=n,t.lastTokenUsage={inputTokens:Math.max(n-r,0),cachedInputTokens:r,outputTokens:s,reasoningOutputTokens:i,totalTokens:Xs(e.totalTokenCount)||n+s}}function u$(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 ey(t){return t.type==="user"||t.message?.role==="user"}function ty(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function ny(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(`
1581
1581
  `):Array.isArray(e.parts)?e.parts.filter(n=>!n.thought&&n.type!=="thinking").map(n=>n.text||"").join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lmctl-ai/lmctl",
3
- "version": "0.1.335",
3
+ "version": "0.1.336",
4
4
  "description": "A provider-agnostic control plane for teams of AI coding agents — across providers, with independent review and durable memory.",
5
5
  "type": "module",
6
6
  "homepage": "https://lmctl.com",