@lmctl-ai/lmctl 0.1.248 → 0.1.249
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
|
@@ -1687,7 +1687,7 @@ ${n}`:n}function YR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
|
|
|
1687
1687
|
ORDER BY s.time_updated DESC
|
|
1688
1688
|
LIMIT 2`).all(`${n}%`);return s.length!==1?null:s[0]}}});function ec(){return new Qd}var Qd,tc=w(()=>{"use strict";Zd();Mt();xn();gt();Qd=class extends xe{constructor(){super({provider:new Cr,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",ge],resumeTemplate:"opencode --session {{session_id}}",startTemplate:"opencode",transport:(e,n)=>An(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??ge),n}}});import{appendFile as U0,mkdir as W0,readFile as $h,readdir as Mh,rm as q0,stat as Dh}from"node:fs/promises";import{basename as B0,dirname as H0,isAbsolute as jh,join as Qn,relative as X0,resolve as nc}from"node:path";function rc(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function K0(t){return typeof t=="number"?new Date(t):rc(t)??new Date(0)}function V0(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(`
|
|
1689
1689
|
`).trim():""}function Ph(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function Y0(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:Ph(t)??""}function z0(t){let e=Z0(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 Z0(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 J0,G0,ho,Fh=w(()=>{"use strict";rn();J0="1.4",G0="1.5",ho=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=nc(e?.kimiHome??process.env.KIMI_CODE_HOME??Qn(ve,".kimi-code")),this.sessionsDir=Qn(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 q0(n.sessionDir,{recursive:!0,force:!0}),await W0(H0(this.indexPath()),{recursive:!0,mode:448}),await U0(this.indexPath(),`${JSON.stringify({sessionId:n.sessionId,deleted:!0})}
|
|
1690
|
-
`,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Qn(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 Mh(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=Qn(this.sessionsDir,s.name),o;try{o=await Mh(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=Qn(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await $h(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:nc(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Qn(n,"state.json"),wirePath:Qn(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!jh(e)||B0(e)!==n)return!1;let r=X0(this.sessionsDir,nc(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!jh(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 $h(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 Dh(e.wirePath)}catch{return null}let s=await Dh(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=rc(n.createdAt)??s.birthtime,a=rc(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?J(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,d=0,c=0,u=!1,f=0,m,p;for await(let h of He(e)){let _=K0(h.time??h.created_at);if(r&&(r=!1,h.type==="metadata"&&h.protocol_version!==J0)){let E=h.protocol_version===G0?"Kimi experimental v2 transcript format not supported by this lmctl version.":`Kimi transcript wire protocol version ${JSON.stringify(h.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:_,content:E}],messageCount:1,firstUserMessage:E,lastUserMessage:E}}if(h.type==="config.update"&&h.modelAlias&&(s=h.modelAlias),h.type==="usage.record"){h.model&&(s=h.model),u||=h.usage!==void 0;let E=h.usage?.inputOther??0,y=h.usage?.inputCacheRead??0,S=h.usage?.inputCacheCreation??0,b=h.usage?.output??0;a+=E,l+=y,d+=S,c+=b,h.usageScope==="turn"&&(m=E+y+S,p={inputTokens:E,cachedInputTokens:y,cacheWriteInputTokens:S,outputTokens:b,totalTokens:m+b});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let E=V0(h.input);E&&(i??=J(E,80),o=J(E,80),n.push({role:"user",timestamp:_,content:E}),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:Ph(g.args),toolInputData:$t(g.args),toolCallId:g.toolCallId,model:s}):g.type==="tool.result"&&n.push({role:"tool_result",timestamp:_,content:Y0(g.result),toolCallId:g.toolCallId,model:s})}return z0(n),{messages:n,messageCount:f,model:s,firstUserMessage:i,lastUserMessage:o,totalInputTokens:u?a:void 0,totalCachedInputTokens:u?l:void 0,totalCacheWriteInputTokens:u?d:void 0,totalOutputTokens:u?c:void 0,lastInputTokens:m,lastTokenUsage:p}}}});function ic(t){return new sc(t)}var sc,oc=w(()=>{"use strict";Fh();Mt();xn();gt();sc=class extends xe{constructor(e){super({provider:new ho(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",ge,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>An(n,{...r,acpTool:"kimi"})})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??ge,"--output-format","stream-json"),n}}});import{spawn as Q0}from"node:child_process";import{mkdirSync as eL}from"node:fs";function lc(t){return new ac(t)}async function tL(t,e){let n=Date.now(),r=Uh({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 Wh(e.binary,r,{cwd:e.cwd,env:Ge(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(s.stderr.trim().slice(0,200)||`lmplayer exited with code ${s.code}`);return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Uh(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(...In("lmplayer",t.permissionMode)??[]),e.push(t.prompt),e}function Wh(t,e,n){return new Promise((r,s)=>{let i;try{i=Q0(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(_){s(_);return}let o="",a="",l="",d,c,u=[],f=!1,m=n.timeoutMs===void 0?void 0:setTimeout(()=>{f||(f=!0,i.kill(),p(),s(new Error(`lmplayer seed timed out after ${n.timeoutMs}ms`)))},n.timeoutMs),p=()=>{m!==void 0&&clearTimeout(m)},h=_=>{let g=_.trim();if(!g)return;let E;try{E=JSON.parse(g)}catch{u.push(_),n.onText?.(_);return}if(!yo(E))return;let y=go(E,!1);d===void 0&&y!==void 0&&(d=y),c=go(E,!0)??c;let S=qh(E);S&&(u.push(S),n.onText?.(S))};i.stdout?.on("data",_=>{let g=_.toString("utf8");o+=g,l+=g;let E=l.indexOf(`
|
|
1690
|
+
`,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Qn(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 Mh(this.sessionsDir,{withFileTypes:!0})}catch{return[...n.values()]}for(let s of r){if(!s.isDirectory())continue;let i=Qn(this.sessionsDir,s.name),o;try{o=await Mh(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||n.has(a.name))continue;let l=Qn(i,a.name);n.set(a.name,this.filesFor(a.name,l))}}return[...n.values()]}async readIndex(){let e;try{e=await $h(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:nc(s.sessionDir),workDir:s.workDir})}catch{}return n}filesFor(e,n,r){return{sessionId:e,sessionDir:n,statePath:Qn(n,"state.json"),wirePath:Qn(n,"agents","main","wire.jsonl"),indexedWorkDir:r}}validSessionDir(e,n){if(!jh(e)||B0(e)!==n)return!1;let r=X0(this.sessionsDir,nc(e));return r!==""&&r!==".."&&!r.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!jh(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 $h(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 Dh(e.wirePath)}catch{return null}let s=await Dh(e.statePath).catch(()=>r),i=await this.parseWire(e.wirePath),o=rc(n.createdAt)??s.birthtime,a=rc(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?J(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,d=0,c=0,u=!1,f=0,m,p;for await(let h of He(e)){let _=K0(h.time??h.created_at);if(r&&(r=!1,h.type==="metadata"&&h.protocol_version!==J0)){let E=h.protocol_version===G0?"Kimi experimental v2 transcript format not supported by this lmctl version.":`Kimi transcript wire protocol version ${JSON.stringify(h.protocol_version)} is not supported by this lmctl version.`;return{messages:[{role:"system",timestamp:_,content:E}],messageCount:1,firstUserMessage:E,lastUserMessage:E}}if(h.type==="config.update"&&h.modelAlias&&(s=h.modelAlias),h.type==="usage.record"){h.model&&(s=h.model),u||=h.usage!==void 0;let E=h.usage?.inputOther??0,y=h.usage?.inputCacheRead??0,S=h.usage?.inputCacheCreation??0,b=h.usage?.output??0;a+=E,l+=y,d+=S,c+=b,h.usageScope==="turn"&&(m=E+y+S,p={inputTokens:E,cachedInputTokens:y,cacheWriteInputTokens:S,outputTokens:b,totalTokens:m+b});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let E=V0(h.input);E&&(i??=J(E,80),o=J(E,80),n.push({role:"user",timestamp:_,content:E}),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:Ph(g.args),toolInputData:$t(g.args),toolCallId:g.toolCallId,model:s}):g.type==="tool.result"&&n.push({role:"tool_result",timestamp:_,content:Y0(g.result),toolCallId:g.toolCallId,model:s})}return z0(n),{messages:n,messageCount:f,model:s,firstUserMessage:i,lastUserMessage:o,totalInputTokens:u?a:void 0,totalCachedInputTokens:u?l:void 0,totalCacheWriteInputTokens:u?d:void 0,totalOutputTokens:u?c:void 0,lastInputTokens:m,lastTokenUsage:p}}}});function ic(t){return new sc(t)}var sc,oc=w(()=>{"use strict";Fh();Mt();xn();gt();sc=class extends xe{constructor(e){super({provider:new ho(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",ge,"--output-format","stream-json"],resumeTemplate:"kimi --session {{session_id}} --auto",startTemplate:"kimi --auto",transport:(n,r)=>An(n,{...r,acpTool:"kimi"})})}seedArgsFor(e){let n=[];return e?.model&&n.push("--model",e.model),n.push("-p",e?.prompt??ge,"--output-format","stream-json"),n}}});import{spawn as Q0}from"node:child_process";import{mkdirSync as eL}from"node:fs";function lc(t){return new ac(t)}async function tL(t,e){let n=Date.now(),r=Uh({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 Wh(e.binary,r,{cwd:e.cwd,env:Ge(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(s.stderr.trim().slice(0,200)||`lmplayer exited with code ${s.code}`);return{text:s.text.trim(),sessionId:s.sessionId??e.sessionId,durationMs:Date.now()-n}}function Uh(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(...In("lmplayer",t.permissionMode)??[]),e.push("--",t.prompt),e}function Wh(t,e,n){return new Promise((r,s)=>{let i;try{i=Q0(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(_){s(_);return}let o="",a="",l="",d,c,u=[],f=!1,m=n.timeoutMs===void 0?void 0:setTimeout(()=>{f||(f=!0,i.kill(),p(),s(new Error(`lmplayer seed timed out after ${n.timeoutMs}ms`)))},n.timeoutMs),p=()=>{m!==void 0&&clearTimeout(m)},h=_=>{let g=_.trim();if(!g)return;let E;try{E=JSON.parse(g)}catch{u.push(_),n.onText?.(_);return}if(!yo(E))return;let y=go(E,!1);d===void 0&&y!==void 0&&(d=y),c=go(E,!0)??c;let S=qh(E);S&&(u.push(S),n.onText?.(S))};i.stdout?.on("data",_=>{let g=_.toString("utf8");o+=g,l+=g;let E=l.indexOf(`
|
|
1691
1691
|
`);for(;E>=0;){let y=l.slice(0,E);l=l.slice(E+1),h(y),E=l.indexOf(`
|
|
1692
1692
|
`)}}),i.stderr?.on("data",_=>{a+=_.toString("utf8")}),n.signal&&(n.signal.aborted?i.kill():n.signal.addEventListener("abort",()=>i.kill(),{once:!0})),i.on("exit",_=>{f||(f=!0,p(),l.length>0&&h(l),r({code:_,stdout:o,stderr:a,sessionId:d??c,text:u.join("")}))}),i.on("error",_=>{f||(f=!0,p(),s(_))})})}function qh(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(yo(n)){let r=qh(n);if(r)return r}}}function go(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(yo(n)){let r=go(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(yo(s)){let i=go(s,e);if(i!==void 0)return i}}}function yo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var ac,dc=w(()=>{"use strict";Zd();Mt();gt();xr();yt();ac=class extends xe{constructor(e){super({provider:new Cr({providerName:"lmplayer",startCommand:"lmplayer",dbPath:e?.lmplayerDbPath}),capabilities:{canCreate:!0,canResumeInteractive:!1,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!1,canCancel:!0},injection:{leaderMode:"none"},binary:"lmplayer",seedArgs:["run","--format","json","--dangerously-skip-permissions",ge],resumeTemplate:"lmplayer run --session {{session_id}} --dangerously-skip-permissions",startTemplate:"lmplayer run --dangerously-skip-permissions",transport:tL})}seedArgsFor(e){return Uh({prompt:e?.prompt??ge,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,n){eL(e,{recursive:!0});let r=this.seedArgsFor(n);Et("lmplayer",r);try{let s=await Wh(this.binary,r,{cwd:e,env:kn(void 0,e),timeoutMs:6e4});return s.code!==0&&s.code!==null?{success:!1,error:s.stderr.trim().slice(0,200)||`exit code ${s.code}`}: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 "${ge}"`,postLaunchNote:"Copy the sessionID reported by lmplayer into this member's sessionid= field.",lsCommand:`lmctl ls --provider lmplayer --sessiondir ${e}`}}}});import{readdir as Eo,readFile as nL,rm as rL}from"node:fs/promises";import{basename as Bh,join as Ln}from"node:path";function sL(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function Ps(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function iL(t,e){if(!e)return;t.observed=!0;let n=Ps(e.promptTokenCount),r=Ps(e.cachedContentTokenCount),s=Ps(e.candidatesTokenCount),i=Ps(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:Ps(e.totalTokenCount)||n+s}}function oL(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 Hh(t){return t.type==="user"||t.message?.role==="user"}function Xh(t){return t.type==="assistant"||t.message?.role==="assistant"||t.message?.role==="model"}function Jh(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(`
|
|
1693
1693
|
`):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.249",
|
|
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",
|