@lmctl-ai/lmctl 0.1.311 → 0.1.312
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 +2 -2
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1567,7 +1567,7 @@ ${n}`:n}function kL(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
|
|
|
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
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?G(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,S=h.usage?.inputCacheCreation??0,I=h.usage?.output??0;a+=g,l+=w,c+=S,u+=I,h.usageScope==="turn"&&(m=g+w+S,p={inputTokens:g,cachedInputTokens:w,cacheWriteInputTokens:S,outputTokens:I,totalTokens:m+I});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let g=Ag(h.input);g&&(i??=G(g,80),o=G(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 S=ko(w,!1);c===void 0&&S!==void 0&&(c=S),u=ko(w,!0)??u,d===void 0&&(d=OC(w));let I=$g(w);I&&(f.push(I),n.onText?.(I))};i.stdout?.on("data",y=>{let g=y.toString("utf8");o+=g,l+=g;let w=l.indexOf(`
|
|
1569
1569
|
`);for(;w>=0;){let S=l.slice(0,w);l=l.slice(w+1),_(S),w=l.indexOf(`
|
|
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:!
|
|
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(`
|
|
1572
1572
|
`):"":""}function Fg(t){return t.model||t.message?.model}function jC(t){let e=t.message?.content;return typeof e=="string"?e.length>0?1:0:Wg(t).filter(n=>!n.thought&&n.type!=="thinking"&&typeof n.text=="string"&&n.text.length>0).length}function Us(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 PC(t){if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let e=t;return Us(e.output??e.error??t)}return Us(t)}function Wg(t){return Array.isArray(t.message?.content)?t.message.content:t.message?.parts??[]}function Ug(t,e,n){let r=t.name||"tool";return{role:"tool_use",timestamp:e,content:r,toolName:r,toolInput:Us(t.args,!0),toolInputData:Wt(t.args),toolCallId:t.id,model:n}}var No,qg=E(()=>{"use strict";qt();No=class{name="qwen";baseDir;constructor(e){this.baseDir=e?.qwenDir||Nn(we,".qwen")}async discoverSessions(){let e=Nn(this.baseDir,"projects"),n;try{n=await Io(e)}catch{return[]}let r=[];for(let s of n){let i=Nn(e,s,"chats"),o;try{o=await Io(i)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=a.replace(/\.jsonl$/,""),c=Nn(i,a);try{let u=await this.extractSummary(c,l);u&&r.push(u)}catch{}}}return r}async extractSummary(e,n){let r=await Ke(e,30);if(r.length===0)return null;let s=await Le(e),i="(unknown)",o,a,l,c,u=0;for(let d of r){if(d.cwd&&(i=d.cwd,d.version&&(a=d.version)),d.type==="system"&&d.cwd&&(i=d.cwd,d.version&&(a=d.version),d.model&&(o=d.model)),Dg(d)){let f=Pg(d).trim();f&&(l||(l=G(f,80)),c=G(f,80),u++)}if(jg(d)){let f=Fg(d);f&&(o=f),u+=jC(d)}}return{provider:"qwen",sessionId:n,cwd:i,createdAt:s.createdAt,modifiedAt:s.modifiedAt,model:o,cliVersion:a,startCommand:"qwen",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:e}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=Mg(n,".jsonl");return this.loadFromFile(n,r)}async loadFromFile(e,n){let r=await Le(e),s="(unknown)",i,o,a,l,c,u,d=[],f=$C();for await(let m of He(e)){if(MC(f,m.usageMetadata),m.cwd&&(s=m.cwd,m.version&&(o=m.version),m.gitBranch&&(a=m.gitBranch)),m.type==="system"&&m.cwd&&(s=m.cwd,m.version&&(o=m.version),m.model&&(i=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 _=Wg(m).filter(y=>y.functionResponse!==void 0);_.length===0&&m.toolCallResult?.callId&&d.push({role:"tool_result",timestamp:h,content:Us(m.toolCallResult.resultDisplay??m.toolCallResult.error??m.toolCallResult.status)??"tool result",toolCallId:m.toolCallResult.callId});for(let y of _){let g=y.functionResponse,w=PC(g.response),S=Us(m.toolCallResult?.resultDisplay);d.push({role:"tool_result",timestamp:h,content:S??w??m.toolCallResult?.status??"tool result",toolName:g.name,toolCallId:m.toolCallResult?.callId??g.id,...w!==void 0?{toolDetailedContent:w}:{}})}}else if(Dg(m)){let _=Pg(m);_.trim()&&(c||(c=G(_.trim(),80)),u=G(_.trim(),80)),d.push({role:"user",timestamp:h,content:_})}else if(jg(m)){let _=Fg(m);if(_&&(i=_),Array.isArray(p.content))for(let y of p.content)y.type==="text"&&y.text?d.push({role:"assistant",timestamp:h,content:y.text,model:_}):y.type==="thinking"&&y.thinking?d.push({role:"thinking",timestamp:h,content:y.thinking}):y.functionCall&&d.push(Ug(y.functionCall,h,_));else if(typeof p.content=="string")d.push({role:"assistant",timestamp:h,content:p.content,model:_});else if(Array.isArray(p.parts))for(let y of p.parts)if(y.thought||y.type==="thinking"){let g=y.thinking||y.text;g&&d.push({role:"thinking",timestamp:h,content:g})}else y.functionCall?d.push(Ug(y.functionCall,h,_)):y.text&&d.push({role:"assistant",timestamp:h,content:y.text,model:_})}}return{provider:"qwen",sessionId:n,slug:l,cwd:s,createdAt:r.createdAt,modifiedAt:r.modifiedAt,model:i,cliVersion:o,gitBranch:a,startCommand:"qwen",firstUserMessage:c,lastUserMessage:u,messageCount:d.filter(m=>m.role==="user"||m.role==="assistant").length,filePath:e,...DC(f),messages:d}}async resolveSessionPath(e){let n=Nn(this.baseDir,"projects");try{let r=await Io(n),s=[];for(let i of r){let o=Nn(n,i,"chats",`${e}.jsonl`);try{return await LC(o,{flag:"r"}),o}catch{continue}}for(let i of r){let o=Nn(n,i,"chats"),a;try{a=await Io(o)}catch{continue}for(let l of a){if(!l.endsWith(".jsonl"))continue;Mg(l,".jsonl").startsWith(e)&&s.push(Nn(o,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 CC(n),!0}catch{return!1}}}});function Rd(){return new xd}var xd,Od=E(()=>{"use strict";qg();bt();kn();ut();xd=class extends be{constructor(){super({provider:new No,capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"qwen",seedArgs:["-p",_e,"--approval-mode","yolo"],resumeTemplate:"qwen --resume {{session_id}}",startTemplate:"qwen",transport:go})}seedArgsFor(e){let n=super.seedArgsFor(e);return e?.model?[...n,"--model",e.model]:n}}});import{readdir as Bg,readFile as Hg,rm as Xg,stat as Jg}from"node:fs/promises";import{basename as Ld,join as Bt}from"node:path";import{fileURLToPath as FC}from"node:url";async function UC(t){let e=await Promise.all(t.map(n=>Le(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 WC(t,e){if(!t)return e;let n=new Date(t);return Number.isNaN(n.getTime())?e:n}function Gg(t){return t.type==="USER_INPUT"}function Kg(t){return t.source==="MODEL"&&t.type==="PLANNER_RESPONSE"}function qC(t){return t.source==="MODEL"&&t.type!=="PLANNER_RESPONSE"}function Vg(t){if(!t)return"";let e=/<USER_REQUEST>\n?([\s\S]*?)\n?<\/USER_REQUEST>/.exec(t);return e?e[1]:t}function Yg(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 BC(t){if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}}async function HC(t){for await(let e of He(t)){let n=e.tool_calls?.map(s=>s.args)??[];for(let s of n){let i=XC(s);if(i)return i}let r=JC(e.content);if(r)return r}return null}function XC(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 JC(t){return t?/"Cwd":"([^"]+)"/.exec(t)?.[1]??null:null}function GC(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 KC(t,e){let n=new Set;for(let r of e){let s=VC(t,n,r);if(!s)continue;n.add(s);let i=r.event.step_index===void 0?void 0:`agy-step-${r.event.step_index}`;s.message.toolCallId=i,s.message.backgroundTaskId=r.message.backgroundTaskId,r.message.toolName=s.name,r.message.toolCallId=i}}function VC(t,e,n){let r=n.message.backgroundTaskId===void 0?void 0:QC(n.event.content);if(r!==void 0)return zg(t.filter(i=>!e.has(i)&&e$(i)===r),n.event.step_index);let s=ZC(n.event);if(s!==void 0)return zg(t.filter(i=>!e.has(i)&&YC(i.name,n.event.type)&&Qg(zC(i))===s),n.event.step_index)}function zg(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 YC(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 zC(t){let e=t.name==="view_file"?t.input?.AbsolutePath:t.input?.TargetFile;return typeof e=="string"?e:void 0}function ZC(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]),Qg(e)}function Qg(t){if(!t)return;let e=t.trim().replace(/^`|`$/g,"");if(!e.startsWith("file://"))return e;try{return FC(e)}catch{return}}function QC(t){if(t)return/Task Description:\s*([^\n]+)/.exec(t)?.[1]?.trim()}function e$(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 Zg(t){if(t.endsWith(".db"))return Ld(t,".db");let e="/brain/",n=t.indexOf(e);return n===-1?null:t.slice(n+e.length).split("/")[0]||null}var Ao,ey=E(()=>{"use strict";qt();Ao=class{name="agy";baseDir;constructor(e={}){this.baseDir=e.agyDir||Bt(we,".gemini","antigravity-cli")}getWatchPaths(){return[{directory:Bt(this.baseDir,"conversations"),filePattern:/\.db$/}]}async discoverSessions(){let e=Bt(this.baseDir,"conversations"),n;try{n=await Bg(e)}catch{return[]}let r=[];for(let s of n){if(!s.endsWith(".db"))continue;let i=Ld(s,".db");try{let o=await this.extractSummary(i);o&&r.push(o)}catch{}}return r}conversationPath(e){return Bt(this.baseDir,"conversations",`${e}.db`)}transcriptPath(e,n){return Bt(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 Jg(n),n}catch{}return null}async extractSummary(e){let n=this.conversationPath(e),r=await this.existingTranscriptPath(e),s=r??n,i=await UC([n,r].filter(Boolean)),o=await this.resolveCwd(e,r),a,l,c,u=0;if(r){let d=await Ke(r,80);for(let f of d){let m=Yg(f.content);if(m&&(a=m),Gg(f)){let p=Vg(f.content).trim();p&&(l||(l=G(p,80)),c=G(p,80)),u++}else Kg(f)&&f.content&&u++}}return{provider:"agy",sessionId:e,cwd:o,createdAt:i.createdAt,modifiedAt:i.modifiedAt,model:a,startCommand:"agy",firstUserMessage:l,lastUserMessage:c,messageCount:u,filePath:s,filePaths:r?[n,r]:[n]}}async loadSession(e){let n=await this.resolveSessionPath(e);if(!n)return null;let r=Zg(n);if(!r)return null;let s=await this.extractSummary(r);if(!s)return null;let i=await this.existingTranscriptPath(r),o=[],a=s.model,l=s.firstUserMessage,c=s.lastUserMessage,u=[],d=[];if(i)for await(let f of He(i)){let m=WC(f.created_at,s.modifiedAt),p=Yg(f.content);if(p&&(a=p),Gg(f)){let h=Vg(f.content),_=h.trim();_&&(l||(l=G(_,80)),c=G(_,80)),o.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",y=BC(h.args),g=Wt(h.args),w={role:"tool_use",timestamp:m,content:y,toolName:_,toolInput:y,toolInputData:g};o.push(w),u.push({name:_,stepIndex:f.step_index,input:g,message:w})}if(Kg(f)&&f.content)o.push({role:"assistant",timestamp:m,content:f.content,model:a});else if(qC(f)&&f.content){let h=GC(f,r),_=h===void 0?null:await this.readTaskLog(r,h),y={role:"tool_result",timestamp:_?.modifiedAt??m,content:f.content,toolName:f.type?.toLowerCase(),backgroundTaskId:h,..._===null?{}:{toolDetailedContent:_.content}};o.push(y),d.push({event:f,message:y})}f.thinking&&o.push({role:"thinking",timestamp:m,content:f.thinking})}return KC(u,d),{...s,model:a,firstUserMessage:l,lastUserMessage:c,messageCount:o.filter(f=>f.role==="user"||f.role==="assistant").length,messages:o}}async resolveSessionPath(e){let n=this.conversationPath(e);try{return await Jg(n),n}catch{}let r=Bt(this.baseDir,"conversations");try{let s=[];for(let i of await Bg(r)){if(!i.endsWith(".db"))continue;Ld(i,".db").startsWith(e)&&s.push(Bt(r,i))}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=Zg(n);return r?(await Xg(this.conversationPath(r),{force:!0}),await Xg(Bt(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 HC(n);if(s)return s}return"(unknown)"}async cwdFromLastConversationCache(e){let n=Bt(this.baseDir,"cache","last_conversations.json");try{let r=JSON.parse(await Hg(n,"utf8"));for(let[s,i]of Object.entries(r))if(i===e)return s}catch{}return null}async readTaskLog(e,n){if(!/^task-\d+$/.test(n))return null;let r=Bt(this.baseDir,"brain",e,".system_generated","tasks",`${n}.log`);try{let[s,i]=await Promise.all([Hg(r,"utf8"),Le(r)]);return{content:s,modifiedAt:i.modifiedAt}}catch{return null}}}});import{spawn as t$}from"node:child_process";function $d(t){return new Cd(t)}async function n$(t,e){let n=Date.now(),r=["--conversation",e.sessionId,"-p",t,"--dangerously-skip-permissions","--print-timeout",s$(e.timeoutMs)];e.model&&r.push("--model",e.model),tt("agy",r,e.permissionMode??"yolo"),e.onProgress?.({kind:"system",summary:"agy -p one-shot started (no streaming events)"});let{stdout:s}=await r$(e.binary,r,{cwd:e.cwd,env:Ve(e.env,e.cwd,e.sessionId),signal:e.signal});return e.onProgress?.({kind:"system",summary:"agy -p one-shot completed"}),{text:s.trimEnd(),sessionId:e.sessionId,durationMs:Date.now()-n}}function r$(t,e,n){return new Promise((r,s)=>{let i;try{i=t$(t,e,{cwd:n.cwd,env:n.env,stdio:["ignore","pipe","pipe"]})}catch(c){s(c);return}let o="",a="";i.stdout?.on("data",c=>{o+=c.toString()}),i.stderr?.on("data",c=>{a+=c.toString()});let l=()=>{i.kill("SIGTERM"),s(new Error("agy turn aborted"))};if(n.signal){if(n.signal.aborted){l();return}n.signal.addEventListener("abort",l,{once:!0})}i.on("error",c=>{n.signal?.removeEventListener("abort",l),s(c)}),i.on("exit",(c,u)=>{if(n.signal?.removeEventListener("abort",l),c===0){r({stdout:o,stderr:a});return}let d=u?`signal ${u}`:`exit code ${c}`,f=a.trim()||o.trim();s(new Error(`agy failed (${d})${f?`: ${f}`:""}`))})})}function s$(t){return!t||t<=0?"8h":`${Math.max(1,Math.ceil(t/1e3))}s`}var Cd,Md=E(()=>{"use strict";ey();bt();ut();St();zn();Cd=class extends be{constructor(e){super({provider:new Ao(e),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",_e,"--dangerously-skip-permissions","--print-timeout","2m"],resumeTemplate:"agy --conversation {{session_id}} --dangerously-skip-permissions",startTemplate:"agy --dangerously-skip-permissions",transport:n$})}seedArgsFor(e){let n=[...super.seedArgsFor(e)];return e?.model&&n.push("--model",e.model),n}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}`}}}});import i$ from"node:zlib";function p$(t,e){return t[e]===a$&&t[e+1]===l$&&t[e+2]===c$&&t[e+3]===d$}function ty(t,e){return(t[e]&240)===80&&t[e+1]===u$&&t[e+2]===f$&&t[e+3]===m$}function _$(t,e){if(ty(t,e))return e+8>t.length?void 0:8+t.readUInt32LE(e+4);if(!p$(t,e))return;let n=e+4;if(n+1>t.length)return;let r=t[n];n+=1;let s=r>>6,i=(r&32)!==0,o=(r&4)!==0,a=r&3;i||(n+=1),n+=[0,1,2,4][a];let l=s===0?i?1:0:[2,4,8][s-1];if(n+=l,!(n>t.length)){for(;;){if(n+3>t.length)return;let c=t[n]|t[n+1]<<8|t[n+2]<<16,u=(c&1)!==0,d=c>>1&3,f=c>>3;if(n+=3,d===3||(n+=d===1?1:f,n>t.length))return;if(u)break}if(o&&(n+=4),!(n>t.length))return n-e}}function h$(t){let e=[],n=0;for(;n+4<=t.length;){let r=_$(t,n);if(r===void 0||r<=0)break;e.push(t.subarray(n,n+r)),n+=r}return e}function xo(t){let e=[];for(let n of h$(t))ty(n,0)||e.push(o$(n).toString("utf8"));return e.join("")}var o$,a$,l$,c$,d$,u$,f$,m$,Dd=E(()=>{"use strict";o$=i$.zstdDecompressSync,a$=40,l$=181,c$=47,d$=253,u$=42,f$=77,m$=24});import{readdir as jd,rm as g$,stat as y$}from"node:fs/promises";import{join as An}from"node:path";function w$(t){return"--"+t.replace(/^\/+|\/+$/g,"").replace(/\//g,"-")+"--"}function Pd(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 E$(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 ny(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 i=r;if(i.source?.kind!==void 0&&i.source.kind!=="user")continue;e.push({role:"user",timestamp:s,content:Pd(i.content)})}else if(n.type==="assistant/message"){let i=r.message;for(let o of E$(i?.content))e.push({role:"thinking",timestamp:s,content:o});e.push({role:"assistant",timestamp:s,content:Pd(i?.content),model:i?.source?.model})}else if(n.type==="tool/call"){let i=r,o;if(typeof i.arguments=="string")try{o=JSON.parse(i.arguments)}catch{}else i.arguments&&typeof i.arguments=="object"&&(o=i.arguments);e.push({role:"tool_use",timestamp:s,content:typeof i.arguments=="string"?i.arguments:JSON.stringify(i.arguments??{}),toolName:i.name,toolCallId:i.callId,toolInputData:o})}else if(n.type==="tool/result"){let i=r,a=(Array.isArray(i.message?.content)?i.message.content:[])[0];e.push({role:"tool_result",timestamp:s,content:Pd(a?.content??i.message?.content),toolCallId:a?.toolCallId??i.message?.source?.callId})}}return e}function T$(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 ry(t,e,n){let r=t.find(m=>m.type==="session");if(!r)return null;let s=r,i=r.data,o=s.id??i?.id;if(!o)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??i?.createdAt,u=c?new Date(c):new Date(0),d=l.length>0?new Date(Math.max(...l)):u,f=n.filter(m=>m.role==="user");return{provider:"dsh",sessionId:o,cwd:s.cwd??i?.cwd??"",createdAt:u,modifiedAt:d,model:a,firstUserMessage:f[0]?.content,lastUserMessage:f.at(-1)?.content,messageCount:n.filter(m=>m.role==="user"||m.role==="assistant").length,filePath:e,...v$(t)}}function v$(t){let e=!1,n=0,r=0,s=0,i=0,o,a;for(let l of t){if(l.type!=="assistant/message")continue;let c=l.data?.usage;if(!c)continue;e=!0;let u=Ro(c.inputTokens),d=Ro(c.cacheReadTokens),f=Ro(c.outputTokens),m=Ro(c.reasoningTokens);n+=u,r+=d,s+=f,i+=m,o=u+d,a={inputTokens:u,cachedInputTokens:d,outputTokens:f,reasoningOutputTokens:m,totalTokens:u+d+f}}return{totalInputTokens:e?n:void 0,totalCachedInputTokens:e?r:void 0,totalOutputTokens:e?s:void 0,totalReasoningOutputTokens:e?i:void 0,lastInputTokens:o,lastTokenUsage:a}}function Ro(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}var Oo,sy=E(()=>{"use strict";qt();Dd();Oo=class{name="dsh";sessionsDir;constructor(e={}){let n=e.dshHome||An(we,".dsh");this.sessionsDir=An(n,"sessions")}async discoverSessions(){let e=[],n;try{n=await jd(this.sessionsDir)}catch{return[]}for(let r of n){let s;try{s=await jd(An(this.sessionsDir,r))}catch{continue}for(let i of s)if(i.startsWith("session-"))try{let o=await this.readSummary(r,i);o&&e.push(o)}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=ny(r),i=ry(r,n.filePath,s);return i?{...i,turnStatus:T$(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 g$(An(this.sessionsDir,n.cwdDir,n.sessionDir),{recursive:!0,force:!0}),!0):!1}sessionFilePath(e,n){return An(this.sessionsDir,w$(e),n,"session.jsonl.zstd")}async findSessionDir(e){let n;try{n=await jd(this.sessionsDir)}catch{return null}for(let r of n){let s=e,i=An(this.sessionsDir,r,s,"session.jsonl.zstd");try{return await y$(i),{cwdDir:r,sessionDir:s,filePath:i}}catch{}}return null}async readRecords(e,n){let{readFile:r}=await import("node:fs/promises"),s=An(this.sessionsDir,e,n,"session.jsonl.zstd"),i=await r(s),o=xo(i),a=[];for(let l of o.split(`
|
|
1573
1573
|
`))if(l.trim())try{let c=JSON.parse(l);if(c.type?.endsWith("-chunks")||c.type==="assistant/chunk")continue;a.push(c)}catch{}return a}async readSummary(e,n){let r=await this.readRecords(e,n);if(r.length===0)return null;let s=An(this.sessionsDir,e,n,"session.jsonl.zstd");return ry(r,s,ny(r))}}});import{spawn as S$}from"node:child_process";async function Ud(t,e=n=>Fd.spawn(n)){if(xn){let n=await xn.catch(()=>{});if(n?.alive)return n;xn=void 0}return xn=e(t),xn}async function Wd(){if(!xn)return;(await xn.catch(()=>{}))?.shutdown(),xn=void 0}var b$,iy,$r,Fd,xn,oy=E(()=>{"use strict";b$=/dsh web:\s*(https?:\/\/\S+)/,iy=2e4,$r=class t extends Error{method;detail;constructor(e,n){super(`dsh RPC ${e} failed: ${JSON.stringify(n)}`),this.name="DshRpcCallError",this.method=e,this.detail=n,Object.setPrototypeOf(this,t.prototype)}},Fd=class t{baseUrl;child;constructor(e,n){this.baseUrl=e,this.child=n}static forTesting(e){return new t(e,void 0)}async rpc(e,n){let r=`${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,s;try{s=await fetch(`${this.baseUrl}/api/${e}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({type:"client-request",rpcId:r,method:e,payload:n})})}catch(a){throw new $r(e,`transport error: ${a instanceof Error?a.message:String(a)}`)}let i;try{i=await s.json()}catch{i=void 0}if(!s.ok)throw new $r(e,i??s.statusText);let o=i&&typeof i=="object"?i.result:void 0;if(!o||typeof o!="object"||typeof o.ok!="boolean")throw new $r(e,"malformed response: HTTP 200 but body is not a well-formed {result:{ok,\u2026}} envelope");if(o.ok===!1)throw new $r(e,o.error??o);return"value"in o?o.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&&this.child.kill("SIGTERM")}static spawn(e){return new Promise((n,r)=>{let s=S$("dsh",["web","--no-open","--port","0"],{env:e,stdio:["ignore","pipe","pipe"]}),i=!1,o="",a="",l=setTimeout(()=>{i||(i=!0,s.kill("SIGTERM"),r(new Error(`dsh web sidecar did not report a boot URL within ${iy}ms (stdout: ${o.slice(0,500)}; stderr: ${a.slice(0,500)})`)))},iy);s.stdout?.on("data",c=>{if(o+=c.toString(),i)return;let u=b$.exec(o);u&&(i=!0,clearTimeout(l),n(new t(u[1],s)))}),s.stderr?.on("data",c=>{a+=c.toString()}),s.on("error",c=>{i||(i=!0,clearTimeout(l),r(c))}),s.on("exit",(c,u)=>{if(i)return;i=!0,clearTimeout(l);let d=u?`signal ${u}`:`exit code ${c}`;r(new Error(`dsh web exited before reporting a boot URL (${d}): ${a.slice(0,500)}`))})})}}});import{randomUUID as k$}from"node:crypto";import{readFile as I$,mkdir as N$}from"node:fs/promises";function Bd(t){return new qd(t)}function ly(t){return{...t,DSH_PERMISSION_MODE:t.DSH_PERMISSION_MODE??"danger-full-access"}}function Lo(t){return t instanceof Error?t.message:String(t)}async function x$(t){let e=await cy(t),n=-1;for(let r of e)r.type==="turn/end"&&typeof r.seq=="number"&&r.seq>n&&(n=r.seq);return n}async function cy(t){let e;try{e=await I$(t)}catch{return[]}let n=xo(e),r=[];for(let s of n.split(`
|
|
@@ -2298,7 +2298,7 @@ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}
|
|
|
2298
2298
|
The session marker may be stale or the team may not be registered in this lmctl database.
|
|
2299
2299
|
Consulted ${gs(Q())}
|
|
2300
2300
|
To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function IS(t){return`unknown option --from
|
|
2301
|
-
${Jf(t)}`}function NS(t,e){let n=mr(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function mr(t,e){let n=t[Os];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let i of e.listRootTeams()){let o;try{o=rt(i.teamfile_path,e)}catch{continue}for(let a of o.members)a.teamfile===void 0&&a.session===n&&r.push(`${i.teamfile_path}:${a.alias}`)}let s=[...new Set(r)];if(s.length===0)return{ok:!1,reason:"not-found"};if(s.length>1)throw new Error("LMCTL_SELF_SESSIONID matches multiple team members; the team registry is ambiguous");return{ok:!0,identity:s[0]}}var fi=E(()=>{"use strict";St();We();Yt()});function ul(t){return jB.has(t)}function Kf(){return Gf===null&&(Gf=Ut(Ht())),Gf}function Vf(t,e,n={}){if(!ul(t))return null;try{let r=Kf().getAdapter?.(t);if(r===void 0)return null;let s=r.resumeCommand(e).trim();if(s.length===0)return null;let i=s.split(/\s+/),o=t==="codex"&&n.isLead===!0?mo({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?DB[t]?.(n.model):void 0;return n.model!==void 0&&n.model.trim().length>0&&a===void 0&&n.onModelIgnored?.({provider:t,model:n.model,reason:`${t} terminal resume does not implement per-session model selection`}),[...i,...a??[],...o,...AS[t]??[]]}catch{return null}}function fl(t,e,n={}){let r=Vf(t,e,n);return r===null?null:r.join(" ")}function Ne(t,e){return Kf().getSession(t,e)}async function zt(t){return(await Kf().resolveSessions(t)).map(n=>n.provider.name)}var AS,DB,jB,xS,Gf,wt=E(()=>{"use strict";mt();Wc();AS={claude:["--dangerously-skip-permissions"],codex:["--dangerously-bypass-approvals-and-sandbox"],gemini:["-y"],copilot:["--yolo"],opencode:[],qwen:["--approval-mode","yolo"],agy:[],lmplayer:[],kimi:[]},DB={claude:t=>["--model",t],codex:t=>["--model",t],gemini:t=>["--model",t],opencode:t=>["--model",t],qwen:t=>["--model",t],agy:t=>["--model",t],lmplayer:t=>["--model",t],kimi:t=>["--model",t]},jB=new Set(Object.keys(AS)),xS=/^[\w.:-]+$/;Gf=null});var BS={};oe(BS,{appendIntent:()=>DS,formatAge:()=>mi,formatDuration:()=>_l,resolveIntentLogPath:()=>MS,runStatus:()=>KB,shortIdentity:()=>Et});import{appendFileSync as PB,existsSync as FB,mkdirSync as UB}from"node:fs";import{homedir as WB}from"node:os";import{basename as qB,dirname as $S,isAbsolute as BB,join as HB,resolve as XB}from"node:path";function MS(){return process.env.LMCTL_INTENT_LOG??HB(WB(),".lmctl","recent-intents.log")}function DS(t){try{let e=MS();UB($S(e),{recursive:!0});let n=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});PB(e,`${n}
|
|
2301
|
+
${Jf(t)}`}function NS(t,e){let n=mr(t,e);return n.ok?{ok:!0,identity:n.identity,source:"session"}:n}function mr(t,e){let n=t[Os];if(n===void 0||n.length===0)return{ok:!1,reason:"unset"};let r=[];for(let i of e.listRootTeams()){let o;try{o=rt(i.teamfile_path,e)}catch{continue}for(let a of o.members)a.teamfile===void 0&&a.session===n&&r.push(`${i.teamfile_path}:${a.alias}`)}let s=[...new Set(r)];if(s.length===0)return{ok:!1,reason:"not-found"};if(s.length>1)throw new Error("LMCTL_SELF_SESSIONID matches multiple team members; the team registry is ambiguous");return{ok:!0,identity:s[0]}}var fi=E(()=>{"use strict";St();We();Yt()});function ul(t){return jB.has(t)}function Kf(){return Gf===null&&(Gf=Ut(Ht())),Gf}function Vf(t,e,n={}){if(!ul(t))return null;try{let r=Kf().getAdapter?.(t);if(r===void 0)return null;let s=r.resumeCommand(e).trim();if(s.length===0)return null;let i=s.split(/\s+/),o=t==="codex"&&n.isLead===!0?mo({warn:()=>{}}):[],a=n.model!==void 0&&n.model.trim().length>0?DB[t]?.(n.model):void 0;return n.model!==void 0&&n.model.trim().length>0&&a===void 0&&n.onModelIgnored?.({provider:t,model:n.model,reason:`${t} terminal resume does not implement per-session model selection`}),[...i,...a??[],...o,...AS[t]??[]]}catch{return null}}function fl(t,e,n={}){let r=Vf(t,e,n);return r===null?null:r.join(" ")}function Ne(t,e){return Kf().getSession(t,e)}async function zt(t){return(await Kf().resolveSessions(t)).map(n=>n.provider.name)}var AS,DB,jB,xS,Gf,wt=E(()=>{"use strict";mt();Wc();AS={claude:["--dangerously-skip-permissions"],codex:["--dangerously-bypass-approvals-and-sandbox"],gemini:["-y"],copilot:["--yolo"],opencode:[],qwen:["--approval-mode","yolo"],agy:[],lmplayer:["--auto"],kimi:[]},DB={claude:t=>["--model",t],codex:t=>["--model",t],gemini:t=>["--model",t],opencode:t=>["--model",t],qwen:t=>["--model",t],agy:t=>["--model",t],lmplayer:t=>["--model",t],kimi:t=>["--model",t]},jB=new Set(Object.keys(AS)),xS=/^[\w.:-]+$/;Gf=null});var BS={};oe(BS,{appendIntent:()=>DS,formatAge:()=>mi,formatDuration:()=>_l,resolveIntentLogPath:()=>MS,runStatus:()=>KB,shortIdentity:()=>Et});import{appendFileSync as PB,existsSync as FB,mkdirSync as UB}from"node:fs";import{homedir as WB}from"node:os";import{basename as qB,dirname as $S,isAbsolute as BB,join as HB,resolve as XB}from"node:path";function MS(){return process.env.LMCTL_INTENT_LOG??HB(WB(),".lmctl","recent-intents.log")}function DS(t){try{let e=MS();UB($S(e),{recursive:!0});let n=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});PB(e,`${n}
|
|
2302
2302
|
`)}catch{}}async function KB(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(JB),0;let n=t.find(o=>o==="--project"||o.startsWith("--project=")||o==="--web");if(n!==void 0)return k(e,`unknown option ${n}; lmctl status is team/SELF scoped now`);let r=V(t,["--since"],["--json"]);if(r.error!==void 0)return k(e,r.error);if(r.positionals.length>0)return k(e,`unknown argument: ${r.positionals[0]}`);let s=B(r,"--json"),i=pH(L(r,"--since"));if("error"in i)return k(e,i.error);try{let o=e.env??process.env;if(s){let a=await O(e,l=>LS(l,o));H(e,a)}else{let a=await O(e,async l=>oH(await LS(l,o),{sinceIso:i.iso}));e.stdout.write(a)}return DS({verb:"status",args:t}),0}catch(o){return k(e,o instanceof Error?o.message:String(o))}}async function LS(t,e){let n=mr(e,t);if(!n.ok){if(n.reason==="not-found")throw new Error(fn("status"));return await YB(t)}return await VB(t,n.identity)}async function VB(t,e){let n=Xe(e),r=t.getRootTeam(n.teamfile);if(r===null)throw new Error(fn("status"));let s=rt(r.teamfile_path,t),i=zf(pl(t,{from:n.value})),o=zf(pl(t,{target_teamfile:n.teamfile,target_alias:n.alias})),a=eH([...Yf(t,{from:n.value}),...Yf(t,{target_teamfile:n.teamfile,target_alias:n.alias})]);return{scope:"self",identity:n.value,...jS(),team:{name:s.name,teamfile:r.teamfile_path},members:s.members.map(l=>ZB(t,r.teamfile_path,l)),activity:{from_me:i.map(l=>Zf(l)),to_me:o.map(l=>Zf(l))},transcript_harvest:await PS(a)}}function jS(){let t=null;try{t=kh(bh())}catch{}return{db_path:Q(),site_name:t}}async function YB(t){let e=t.listRootTeams();return{scope:"db",identity:null,...jS(),teams:e.map(n=>zB(t,n)),activity:zf(pl(t)).map(n=>Zf(n)),transcript_harvest:await PS(Yf(t))}}function zB(t,e){if(!FB(e.teamfile_path))return{name:e.name,teamfile:e.teamfile_path,member_count:0,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at,missing_on_disk:!0};let n=0;try{n=rt(e.teamfile_path,t).members.length}catch{n=0}return{name:e.name,teamfile:e.teamfile_path,member_count:n,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at}}function ZB(t,e,n){let r=n.teamfile===void 0?null:ve(BB(n.teamfile)?n.teamfile:XB($S(e),n.teamfile),t),s=Sr(t,e,n.alias),i=s.busy&&s.reason==="in-flight"?QB(t,e,n.alias,s.inFlight):null;return{alias:n.alias,provider:n.provider,model:n.model??null,teamfile:e,referenced_teamfile:r,sessionid:n.session??null,sessiondir:n.sessiondir??null,state:s.busy?"busy":"idle",reason:s.busy?s.reason:null,handling:i,reclaimable:!s.busy&&s.reclaimable!==void 0?s.reclaimable:null}}function QB(t,e,n,r){let s=r.sender_alias==="operator"?"operator":`${r.sender_teamfile}:${r.sender_alias}`,o=t.db.prepare(`
|
|
2303
2303
|
SELECT * FROM tracked_invocation
|
|
2304
2304
|
WHERE kind = 'chat'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmctl-ai/lmctl",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.312",
|
|
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",
|