@lmctl-ai/lmctl 0.1.320 → 0.1.321
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 +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1565,7 +1565,7 @@ ${n}`:n}function kL(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
|
|
|
1565
1565
|
ORDER BY s.time_updated DESC
|
|
1566
1566
|
LIMIT 2`).all(`${n}%`);return s.length!==1?null:s[0]}}});function wd(){return new yd}var yd,Ed=E(()=>{"use strict";gd();bt();kn();ut();yd=class extends be{constructor(){super({provider:new Lr,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",_e],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(e,n)=>bn(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??_e),n}}});import{appendFile as _C,mkdir as hC,readFile as bg,readdir as kg,rm as gC,stat as Ig}from"node:fs/promises";import{basename as yC,dirname as wC,isAbsolute as Ng,join as er,relative as EC,resolve as Td}from"node:path";function vd(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function bC(t){return typeof t=="number"?new Date(t):vd(t)??new Date(0)}function Ag(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(`
|
|
1567
1567
|
`).trim():""}function xg(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function kC(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:xg(t)??""}function IC(t){let e=NC(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 NC(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 TC,vC,SC,bo,Rg=E(()=>{"use strict";qt();TC="1.4",vC="1.5",SC=new Set([TC,vC]),bo=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Td(e?.kimiHome??process.env.KIMI_CODE_HOME??er(we,".kimi-code")),this.sessionsDir=er(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 gC(n.sessionDir,{recursive:!0,force:!0}),await hC(wC(this.indexPath()),{recursive:!0,mode:448}),await _C(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
|
|
1568
|
-
`,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return er(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 kg(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=er(this.sessionsDir,s.name),o;try{o=await kg(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=er(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await bg(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:Td(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:er(n,"state.json"),wirePath:er(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Ng(e)||yC(e)!==n)return!1;let r=EC(this.sessionsDir,Td(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Ng(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 bg(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 Ig(e.wirePath)}catch{return null}let s=await Ig(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=vd(n.createdAt)??s.birthtime,a=vd(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?K(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 He(e)){let _=bC(h.time??h.created_at);if(r&&(r=!1,h.type==="metadata"&&!SC.has(h.protocol_version))){let g=`Kimi transcript wire protocol version ${JSON.stringify(h.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:_,content:g}],messageCount:1,firstUserMessage:g,lastUserMessage:g}}if(h.type==="config.update"&&h.modelAlias&&(s=h.modelAlias),h.type==="usage.record"){h.model&&(s=h.model),d||=h.usage!==void 0;let g=h.usage?.inputOther??0,w=h.usage?.inputCacheRead??0,v=h.usage?.inputCacheCreation??0,N=h.usage?.output??0;a+=g,l+=w,c+=v,u+=N,h.usageScope==="turn"&&(m=g+w+v,p={inputTokens:g,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:N,totalTokens:m+N});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let g=Ag(h.input);g&&(i??=K(g,80),o=K(g,80),n.push({role:"user",timestamp:_,content:g}),f++);continue}if(h.type==="turn.steer"){let g=Ag(h.input);g&&(n.push({role:"system",timestamp:_,content:g}),f++);continue}if(h.type!=="context.append_loop_event"||!h.event)continue;let y=h.event;y.type==="content.part"&&y.part?.type==="text"&&y.part.text?(n.push({role:"assistant",timestamp:_,content:y.part.text,model:s}),f++):y.type==="content.part"&&y.part?.type==="think"&&y.part.think?n.push({role:"thinking",timestamp:_,content:y.part.think,model:s}):y.type==="tool.call"?n.push({role:"tool_use",timestamp:_,content:y.name??"tool",toolName:y.name,toolInput:xg(y.args),toolInputData:Wt(y.args),toolCallId:y.toolCallId,model:s}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:_,content:kC(y.result),toolCallId:y.toolCallId,model:s})}return IC(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 bd(t){return new Sd(t)}var Sd,kd=E(()=>{"use strict";Rg();bt();kn();ut();Sd=class extends be{constructor(e){super({provider:new bo(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",_e,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>bn(n,{...r,acpTool:"kimi"})})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??_e,"--output-format","stream-json"),n}}});import{spawn as AC}from"node:child_process";import{mkdirSync as xC}from"node:fs";function Nd(t){return new Id(t)}async function RC(t,e){let n=Date.now(),r=Og({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});tt("lmplayer",r,e.permissionMode??"yolo");let s=await Cg(e.binary,r,{cwd:e.cwd,env:Ve(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(Lg(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Og(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(...vn("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Lg(t){if(t.error)return t.error;let e=lo(t.stderr).trim();return e?e.slice(0,500):`exit code ${t.code}`}function Cg(t,e,n){return new Promise((r,s)=>{let i;try{i=AC(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(y){s(y);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)},_=y=>{let g=y.trim();if(!g)return;let w;try{w=JSON.parse(g)}catch{f.push(y),n.onText?.(y);return}if(!Cr(w))return;let v=ko(w,!1);c===void 0&&v!==void 0&&(c=v),u=ko(w,!0)??u,d===void 0&&(d=OC(w));let N=$g(w);N&&(f.push(N),n.onText?.(N))};i.stdout?.on("data",y=>{let g=y.toString("utf8");o+=g,l+=g;let w=l.indexOf(`
|
|
1568
|
+
`,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return er(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 kg(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=er(this.sessionsDir,s.name),o;try{o=await kg(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=er(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await bg(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:Td(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:er(n,"state.json"),wirePath:er(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!Ng(e)||yC(e)!==n)return!1;let r=EC(this.sessionsDir,Td(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Ng(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 bg(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 Ig(e.wirePath)}catch{return null}let s=await Ig(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=vd(n.createdAt)??s.birthtime,a=vd(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?K(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 He(e)){let _=bC(h.time??h.created_at);if(r&&(r=!1,h.type==="metadata"&&!SC.has(h.protocol_version))){let g=`Kimi transcript wire protocol version ${JSON.stringify(h.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:_,content:g}],messageCount:1,firstUserMessage:g,lastUserMessage:g}}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 g=h.usage?.inputOther??0,w=h.usage?.inputCacheRead??0,v=h.usage?.inputCacheCreation??0,N=h.usage?.output??0;a+=g,l+=w,c+=v,u+=N,h.usageScope==="turn"&&(m=g+w+v,p={inputTokens:g,cachedInputTokens:w,cacheWriteInputTokens:v,outputTokens:N,totalTokens:m+N});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let g=Ag(h.input);g&&(i??=K(g,80),o=K(g,80),n.push({role:"user",timestamp:_,content:g}),f++);continue}if(h.type==="turn.steer"){let g=Ag(h.input);g&&(n.push({role:"system",timestamp:_,content:g}),f++);continue}if(h.type!=="context.append_loop_event"||!h.event)continue;let y=h.event;y.type==="content.part"&&y.part?.type==="text"&&y.part.text?(n.push({role:"assistant",timestamp:_,content:y.part.text,model:s}),f++):y.type==="content.part"&&y.part?.type==="think"&&y.part.think?n.push({role:"thinking",timestamp:_,content:y.part.think,model:s}):y.type==="tool.call"?n.push({role:"tool_use",timestamp:_,content:y.name??"tool",toolName:y.name,toolInput:xg(y.args),toolInputData:Wt(y.args),toolCallId:y.toolCallId,model:s}):y.type==="tool.result"&&n.push({role:"tool_result",timestamp:_,content:kC(y.result),toolCallId:y.toolCallId,model:s})}return IC(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 bd(t){return new Sd(t)}var Sd,kd=E(()=>{"use strict";Rg();bt();kn();ut();Sd=class extends be{constructor(e){super({provider:new bo(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",_e,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>bn(n,{...r,acpTool:"kimi"})})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??_e,"--output-format","stream-json"),n}}});import{spawn as AC}from"node:child_process";import{mkdirSync as xC}from"node:fs";function Nd(t){return new Id(t)}async function RC(t,e){let n=Date.now(),r=Og({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});tt("lmplayer",r,e.permissionMode??"yolo");let s=await Cg(e.binary,r,{cwd:e.cwd,env:Ve(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(Lg(s));return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Og(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(...vn("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Lg(t){if(t.error)return t.error;let e=lo(t.stderr).trim();return e?e.slice(0,500):`exit code ${t.code}`}function Cg(t,e,n){return new Promise((r,s)=>{let i;try{i=AC(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(y){s(y);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)},_=y=>{let g=y.trim();if(!g)return;let w;try{w=JSON.parse(g)}catch{f.push(y),n.onText?.(y);return}if(!Cr(w))return;let v=ko(w,!1);c===void 0&&v!==void 0&&(c=v),u=ko(w,!0)??u,d===void 0&&(d=OC(w));let N=$g(w);N&&(f.push(N),n.onText?.(N))};i.stdout?.on("data",y=>{let g=y.toString("utf8");o+=g,l+=g;let w=l.indexOf(`
|
|
1569
1569
|
`);for(;w>=0;){let v=l.slice(0,w);l=l.slice(w+1),_(v),w=l.indexOf(`
|
|
1570
1570
|
`)}}),i.stderr?.on("data",y=>{a+=y.toString("utf8")}),n.signal&&(n.signal.aborted?i.kill():n.signal.addEventListener("abort",()=>i.kill(),{once:!0})),i.on("exit",y=>{m||(m=!0,h(),l.length>0&&_(l),r({code:y,stdout:o,stderr:a,sessionId:c??u,text:f.join(""),error:d}))}),i.on("error",y=>{m||(m=!0,h(),s(y))})})}function OC(t){let e=t.error;if(typeof e=="string"&&e.length>0)return e;if(Cr(e)){let n=e.data;if(Cr(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 $g(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(Cr(n)){let r=$g(n);if(r)return r}}}function ko(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(Cr(n)){let r=ko(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(Cr(s)){let i=ko(s,e);if(i!==void 0)return i}}}function Cr(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Id,Ad=E(()=>{"use strict";gd();bt();ut();zn();St();Cc();Id=class extends be{constructor(e){super({provider:new Lr({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",_e],resumeTemplate:"lmplayer tui --session {{session_id}}",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:RC})}seedArgsFor(e){return Og({prompt:e?.prompt??_e,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){xC(e,{recursive:!0});let r=this.seedArgsFor(n);tt("lmplayer",r);try{let s=await Cg(this.binary,r,{cwd:e,env:Tn(void 0,e),timeoutMs:6e4});return s.code!==0&&s.code!==null?{success:!1,error:Lg(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 "${_e}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as Io,readFile as LC,rm as CC}from"node:fs/promises";import{basename as Mg,join as Nn}from"node:path";function $C(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function Fs(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function MC(t,e){if(!e)return;t.observed=!0;let n=Fs(e.promptTokenCount),r=Fs(e.cachedContentTokenCount),s=Fs(e.candidatesTokenCount),i=Fs(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:Fs(e.totalTokenCount)||n+s}}function DC(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 Dg(t){return t.type==="user"||t.message?.role==="user"}function jg(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function Pg(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(`
|
|
1571
1571
|
`):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.
|
|
3
|
+
"version": "0.1.321",
|
|
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",
|