@lmctl-ai/lmctl 0.2.263 → 0.2.265
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/build-info.json +1 -1
- package/dist/lmbee.js +1 -1
- package/package.json +1 -1
package/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"sha": "
|
|
1
|
+
{"sha": "a7154f76219f77b00592ce1aec2297347acb7aed", "dirty": false, "builtAt": "2026-10-14T20:33:44.000Z"}
|
package/dist/lmbee.js
CHANGED
|
@@ -2347,7 +2347,7 @@ ${Zt}`;ue=o(e.db,F,M,Z,_n,$,xe?void 0:!jt)}else ue=o(e.db,F,M,Z,void 0,$)}catch(
|
|
|
2347
2347
|
state TEXT NOT NULL, attempts INTEGER NOT NULL DEFAULT 0,
|
|
2348
2348
|
PRIMARY KEY (local_scope, conversationid, escalationid),
|
|
2349
2349
|
FOREIGN KEY (local_scope, conversationid) REFERENCES workflow_jobs(local_scope, conversationid)
|
|
2350
|
-
)`)}function ts(e=null,t=!1,n=[]){return{status:"ok",code:null,error:null,id:e?.id??null,escalation:e,escalations:n,origin:e?.origin??null,applied:t}}function it(e,t,n=null){return{...ts(n),status:"error",code:e,error:t}}function aw(e){return e.code===null?200:e.code==="invalid_argument"?400:e.code==="not_found"?404:e.code==="conflict"?409:e.code==="database_unavailable"||e.code==="service_unavailable"?503:500}var zs=class extends Error{code;row;constructor(t,n,r=null){super(n),this.code=t,this.row=r}},Sa=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),ZD="local_scope = ? AND conversationid = ? AND escalationid = ?",Xm=["local_scope","conversationid","script_file","script_prefix","tag","run_id"],gte=["source_kind","script_file","source_name","run_id","parent_run_id","local_scope","conversationid","member_alias","parent_invocation_id","tag"],_t=e=>{throw new zs("invalid_argument",e)},Ar=(e,t,n=!1)=>typeof e!="string"||!n&&e.length===0?_t(t+" must be a "+(n?"":"nonempty ")+"string"):/[\uD800-\uDFFF]/u.test(e)?_t(t+" must contain well-formed UTF-16"):e,t$=e=>zD.isAbsolute(e)&&zD.normalize(e)===e||QD.isAbsolute(e)&&QD.normalize(e)===e;function Vm(e,t=new Set){let n=r=>{if(r===null||typeof r=="string"||typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r))return r;if(typeof r!="object"||r===null||t.has(r))return _t("payload must contain JSON values");if(!Array.isArray(r)&&Object.getPrototypeOf(r)!==Object.prototype&&Object.getPrototypeOf(r)!==null)return _t("payload must contain JSON objects");t.add(r);let s=Array.isArray(r)?Array.from(r,o=>n(o)):Object.fromEntries(Object.keys(r).sort().map(o=>[o,n(r[o])]));return t.delete(r),s};return JSON.stringify(n(e))}var n$=e=>"e1."+Buffer.from(JSON.stringify(e),"utf8").toString("base64url");function Ete(e){let t=Ar(e,"id");try{if(!/^e1\.[A-Za-z0-9_-]+$/.test(t))return _t("Invalid escalation handle");let n=JSON.parse(Buffer.from(t.slice(3),"base64url").toString("utf8"));if(!Array.isArray(n)||n.length!==3)return _t("Invalid escalation handle");let r=n.map(s=>Ar(s,"id component"));return n$(r)!==t?_t("Invalid escalation handle"):r}catch{return _t("Invalid escalation handle")}}function e$(e){let t=JSON.parse(e.payload),n=Sa(t)&&Sa(t.origin)?t.origin:null;return{id:n$([e.local_scope,e.conversationid,e.escalationid]),local_scope:e.local_scope,conversationid:e.conversationid,escalationid:e.escalationid,payload:t,origin:n,state:e.state,answer_text:e.answer_text,answer_present:e.answer_text!==null}}function yte(e){for(let t of Xm)Object.hasOwn(e,t)&&Ar(e[t],t,t==="tag");e.script_file!==void 0&&e.script_prefix!==void 0&&_t("Choose script_file or script_prefix");for(let t of["script_file","script_prefix"])typeof e[t]=="string"&&!t$(e[t])&&_t(t+" must be an absolute normalized path")}function wte(e,t){if(typeof e!="string")return!1;let n=t.startsWith("/")?"/":"\\",r=t.replace(t.startsWith("/")?/\/+$/:/\\+$/,"")||n;return e===r||e.startsWith(r.endsWith(n)?r:r+n)}function cw(e,t){let n=[];return t.local_scope!==void 0&&n.push(e.local_scope===t.local_scope),t.conversationid!==void 0&&n.push(e.conversationid===t.conversationid),t.script_file!==void 0&&n.push(e.origin!==null&&e.origin.script_file===t.script_file),t.script_prefix!==void 0&&n.push(e.origin!==null&&wte(e.origin.script_file,t.script_prefix)),t.tag!==void 0&&n.push(e.origin!==null&&e.origin.tag===t.tag),t.run_id!==void 0&&n.push(e.origin!==null&&e.origin.run_id===t.run_id),n.every(Boolean)}function Tte(e){let t=Ar(e.local_scope,"local_scope"),n=Ar(e.conversationid,"conversationid"),r=Ar(e.request_key,"request_key");(!Sa(e.payload)||typeof e.payload.question!="string"||!e.payload.question.trim())&&_t("payload requires a nonempty question string");let s=e.payload;Object.hasOwn(s,"origin")&&_t("payload.origin is reserved; supply origin separately"),Vm(s);let o=e.tag===void 0||e.tag===null?null:Ar(e.tag,"tag",!0);e.origin!==void 0&&!Sa(e.origin)&&_t("origin must be an object");let i=e.origin??{};Object.keys(i).some(l=>!gte.includes(l))&&_t("Unknown origin field");let a=i.source_kind===void 0?"unknown":i.source_kind;["file","stdin","inline","unknown"].includes(a)||_t("Invalid origin source_kind");let c={source_kind:a,script_file:null,source_name:null,run_id:null,parent_run_id:null,local_scope:t,conversationid:n,member_alias:null,parent_invocation_id:null,tag:o};for(let l of["script_file","source_name","run_id","parent_run_id","member_alias","parent_invocation_id"])i[l]!==void 0&&i[l]!==null&&(c[l]=Ar(i[l],"origin."+l));a==="file"?(typeof c.script_file!="string"||!t$(c.script_file))&&_t("File origin requires an absolute normalized script_file"):c.script_file!==null&&_t("Non-file origin must have a null script_file");for(let l of["local_scope","conversationid","tag"])Object.hasOwn(i,l)&&i[l]!==c[l]&&_t("Origin "+l+" contradicts creation selection");return{tuple:[t,n,r],payload:s,origin:c,tag:o}}function vte(e){if(!Sa(e))return e;let{origin:t,...n}=e;return n}function Dl(e,t,n){let r,s=t==="create"||t==="answer";try{if(!Sa(n))return _t("Expected an escalation options object");let o=t==="create"?["local_scope","conversationid","request_key","payload","origin","tag"]:t==="list_open"?Xm:t==="answer"?["id","answer_text",...Xm]:["id",...Xm];(!["create","status","list_open","answer"].includes(t)||Object.keys(n).some(d=>!o.includes(d)))&&_t("Unknown escalation option or operation");let i=t==="create"?Tte(n):void 0;i||yte(n);let a=t==="status"||t==="answer"?Ete(n.id):i?.tuple;if(t==="list_open"&&Ar(n.local_scope,"local_scope"),t==="answer"&&Ar(n.answer_text,"answer_text",!0),!e.open||e.inTransaction)return it("database_unavailable","Escalation database unavailable");r=e.pragma("busy_timeout",{simple:!0}),e.pragma("busy_timeout = 0");let c=()=>{let d=e.prepare(`SELECT local_scope,conversationid,escalationid,payload,state,answer_text FROM workflow_escalations WHERE ${ZD}`).get(...a);return d?e$(d):null};if(!s){if(!e.prepare("SELECT name FROM sqlite_master WHERE name='workflow_escalations'").get())return t==="list_open"?ts():it("not_found","Escalation not found");if(t==="status"){let m=c();return m&&cw(m,n)?ts(m):it("not_found","Escalation not found")}let d=e.prepare("SELECT local_scope,conversationid,escalationid,payload,state,answer_text FROM workflow_escalations WHERE local_scope = ? AND answer_text IS NULL ORDER BY conversationid,escalationid").all(n.local_scope).map(e$),{local_scope:u,...f}=n;return ts(null,!1,d.filter(m=>cw(m,f)))}let l=()=>{if(KD(e),i){e.prepare("INSERT OR IGNORE INTO workflow_jobs(local_scope,conversationid,status) VALUES(?,?,'open')").run(...i.tuple.slice(0,2));let f=c();if(f){if(Vm(vte(f.payload))!==Vm(i.payload)||(f.origin?.tag??null)!==i.tag)throw new zs("conflict","Request key already identifies a different question or tag",f);return ts(f)}let m=Vm({...i.payload,origin:i.origin});return e.prepare("INSERT INTO workflow_escalations(local_scope,conversationid,escalationid,payload,state,answer_text) VALUES(?,?,?,?,'waiting',NULL)").run(...i.tuple,m),ts(c(),!0)}let d=c();if(!d||!cw(d,n))throw new zs("not_found","Escalation not found");if(d.answer_text!==null){if(d.answer_text!==n.answer_text)throw new zs("conflict","Escalation already has a different answer",d);return ts(d)}if(e.prepare(`UPDATE workflow_escalations SET answer_text = ?, state = 'answered' WHERE ${ZD} AND answer_text IS NULL`).run(n.answer_text,...a).changes!==1)throw new zs("conflict","Escalation answer was not applied",c());return ts(c(),!0)};return e.transaction(l).immediate()}catch(o){if(o instanceof zs)return it(o.code,o.message,o.row);let i=o?.code??"";return/^SQLITE_(BUSY|LOCKED|CANTOPEN|CORRUPT|NOTADB|IOERR|MISUSE)/.test(i)?it("database_unavailable","Escalation database unavailable"):it(s?"write_rejected":"database_unavailable",s?"Escalation write rejected":"Escalation database unavailable")}finally{r!==void 0&&e.pragma("busy_timeout = "+r)}}import{readFileSync as jre}from"node:fs";var Ste=10*6e4,bte=60*6e4;function r$(e,t,n={},r=Date.now()){let s=n.ackDeadlineMs??Ste,o=n.replyThresholdMs??bte,i=[];for(let a of t){let c=Id(e,{site:a.peerSite,team:a.name,alias:a.alias});if(!c)continue;let l=Date.parse(c.sent_ts);if(c.state==="sent"){r-l>=s&&i.push(a.name);continue}c.state!=="replied"&&r-l>=o&&i.push(a.name)}return i}var Ate=[/^\S+'s turn has finished and exited; resubmit/i,/^resubmit .*lmctl chat/i];function Ite(e){let t=e.split(/\r?\n/).filter(r=>r.trim().length>0).filter(r=>!Ate.some(s=>s.test(r.trim()))),n=(t[t.length-1]??"").trim();return n==="BLOCKED"?"BLOCKED":n==="DONE"?"DONE":null}function s$(e){if(e.trim()==="")return{status:"NO-OUTPUT",wake:"env"};let t=Ite(e);return t==="BLOCKED"?{status:"BLOCKED",wake:"blocked"}:t==="DONE"?{status:"DONE",wake:null}:{status:"IDLE",wake:null}}function ba(e){switch(e.kind){case"ok":return s$(e.replyText);case"stalled":{let t=s$(e.replyText);return t.status==="BLOCKED"||t.status==="DONE"?t:{status:"NO-OUTPUT",wake:"env"}}case"busy":return{status:"RUNNING(busy)",wake:null};case"timeout":case"no-signal":return{status:"NO-OUTPUT",wake:"env"};case"error":return{status:"ENV-ERROR",wake:"env"}}}var Aa=Cn(Jn(),1);function je(e,t){return{error:{code:e,message:t}}}var f$=1e4;function dw(e,t,n){let r=20;if(n!==void 0){let o=typeof n=="number"?n:n.trim()===""?NaN:Number(n);if(!Number.isSafeInteger(o)||o<0||o>f$)return je("invalid_limit",`invalid limit "${n}" -- must be an integer from 0 to ${f$}`);r=o}return{events:t?e.db.db.prepare("SELECT * FROM events WHERE team = ? ORDER BY id DESC LIMIT ?").all(t,r):e.db.db.prepare("SELECT * FROM events ORDER BY id DESC LIMIT ?").all(r)}}function m$(e,t,n,r={}){let s=dw(e,t,n);return r.json?JSON.stringify(s):"error"in s?s.error.message:(0,Aa.formatTable)([["ID","TS","TEAM","STATUS","NOTE"],...s.events.map(o=>[String(o.id),ke(o.ts),(0,Aa.escapeCell)(o.team),(0,Aa.escapeCell)(o.status),(0,Aa.escapeCell)(o.note??"")])])}var p$=Cn(Jn(),1);function uw(e){let t=e.db.db,n=fS(t),r=ch(t),s=r.filter(c=>c.failure_reason?.startsWith(yo)).length,o=r.length-s,i=Ad(t,new Date().toISOString()).length,a=_S(t);return{counts:n,retryEligibleCount:o,permanentCount:s,dueNowCount:i,deliveryErrorCount:a}}function h$(e,t={}){let n=uw(e);if(t.json)return JSON.stringify(n);let r=[["persisted (awaiting dispatch)",String(n.counts.persisted)],["dispatched",String(n.counts.dispatched)],["replied",String(n.counts.replied)],["failed -- retry-eligible (backoff pending)",String(n.retryEligibleCount)],["failed -- permanent (never retried)",String(n.permanentCount)]],s=(0,p$.formatTable)([["STATE","COUNT"],...r]),o=n.deliveryErrorCount>0?`
|
|
2350
|
+
)`)}function ts(e=null,t=!1,n=[]){return{status:"ok",code:null,error:null,id:e?.id??null,escalation:e,escalations:n,origin:e?.origin??null,applied:t}}function it(e,t,n=null){return{...ts(n),status:"error",code:e,error:t}}function aw(e){return e.code===null?200:e.code==="invalid_argument"?400:e.code==="not_found"?404:e.code==="conflict"?409:e.code==="database_unavailable"||e.code==="service_unavailable"?503:500}var zs=class extends Error{code;row;constructor(t,n,r=null){super(n),this.code=t,this.row=r}},Sa=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),ZD="local_scope = ? AND conversationid = ? AND escalationid = ?",Xm=["local_scope","conversationid","script_file","script_prefix","tag","run_id"],gte=["source_kind","script_file","source_name","run_id","parent_run_id","local_scope","conversationid","member_alias","parent_invocation_id","tag"],_t=e=>{throw new zs("invalid_argument",e)},Ar=(e,t,n=!1)=>typeof e!="string"||!n&&e.length===0?_t(t+" must be a "+(n?"":"nonempty ")+"string"):/[\uD800-\uDFFF]/u.test(e)?_t(t+" must contain well-formed UTF-16"):e,t$=e=>zD.isAbsolute(e)&&zD.normalize(e)===e||QD.isAbsolute(e)&&QD.normalize(e)===e;function Vm(e,t=new Set){let n=r=>{if(r===null||typeof r=="string"||typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r))return r;if(typeof r!="object"||r===null||t.has(r))return _t("payload must contain JSON values");if(!Array.isArray(r)&&Object.getPrototypeOf(r)!==Object.prototype&&Object.getPrototypeOf(r)!==null)return _t("payload must contain JSON objects");t.add(r);let s=Array.isArray(r)?Array.from(r,o=>n(o)):Object.fromEntries(Object.keys(r).sort().map(o=>[o,n(r[o])]));return t.delete(r),s};return JSON.stringify(n(e))}var n$=e=>"e1."+Buffer.from(JSON.stringify(e),"utf8").toString("base64url");function Ete(e){let t=Ar(e,"id");try{if(!/^e1\.[A-Za-z0-9_-]+$/.test(t))return _t("Invalid escalation handle");let n=JSON.parse(Buffer.from(t.slice(3),"base64url").toString("utf8"));if(!Array.isArray(n)||n.length!==3)return _t("Invalid escalation handle");let r=n.map(s=>Ar(s,"id component"));return n$(r)!==t?_t("Invalid escalation handle"):r}catch{return _t("Invalid escalation handle")}}function e$(e){let t=JSON.parse(e.payload),n=Sa(t)&&Sa(t.origin)?t.origin:null;return{id:n$([e.local_scope,e.conversationid,e.escalationid]),local_scope:e.local_scope,conversationid:e.conversationid,escalationid:e.escalationid,payload:t,origin:n,state:e.state,answer_text:e.answer_text,answer_present:e.answer_text!==null}}function yte(e){for(let t of Xm)Object.hasOwn(e,t)&&Ar(e[t],t,t==="tag");e.script_file!==void 0&&e.script_prefix!==void 0&&_t("Choose script_file or script_prefix");for(let t of["script_file","script_prefix"])typeof e[t]=="string"&&!t$(e[t])&&_t(t+" must be an absolute normalized path")}function wte(e,t){if(typeof e!="string")return!1;let n=t.startsWith("/")?"/":"\\",r=t.replace(t.startsWith("/")?/\/+$/:/\\+$/,"")||n;return e===r||e.startsWith(r.endsWith(n)?r:r+n)}function cw(e,t){let n=[];return t.local_scope!==void 0&&n.push(e.local_scope===t.local_scope),t.conversationid!==void 0&&n.push(e.conversationid===t.conversationid),t.script_file!==void 0&&n.push(e.origin!==null&&e.origin.script_file===t.script_file),t.script_prefix!==void 0&&n.push(e.origin!==null&&wte(e.origin.script_file,t.script_prefix)),t.tag!==void 0&&n.push(e.origin!==null&&e.origin.tag===t.tag),t.run_id!==void 0&&n.push(e.origin!==null&&e.origin.run_id===t.run_id),n.every(Boolean)}function Tte(e){let t=Ar(e.local_scope,"local_scope"),n=Ar(e.conversationid,"conversationid"),r=Ar(e.request_key,"request_key");(!Sa(e.payload)||typeof e.payload.question!="string"||!e.payload.question.trim())&&_t("payload requires a nonempty question string");let s=e.payload;Object.hasOwn(s,"origin")&&_t("payload.origin is reserved; supply origin separately"),Vm(s);let o=e.tag===void 0||e.tag===null?null:Ar(e.tag,"tag",!0);e.origin!==void 0&&!Sa(e.origin)&&_t("origin must be an object");let i=e.origin??{};Object.keys(i).some(l=>!gte.includes(l))&&_t("Unknown origin field");let a=i.source_kind===void 0?"unknown":i.source_kind;["file","stdin","inline","unknown"].includes(a)||_t("Invalid origin source_kind");let c={source_kind:a,script_file:null,source_name:null,run_id:null,parent_run_id:null,local_scope:t,conversationid:n,member_alias:null,parent_invocation_id:null,tag:o};for(let l of["script_file","source_name","run_id","parent_run_id","member_alias","parent_invocation_id"])i[l]!==void 0&&i[l]!==null&&(c[l]=Ar(i[l],"origin."+l,l==="source_name"));a==="file"?(typeof c.script_file!="string"||!t$(c.script_file))&&_t("File origin requires an absolute normalized script_file"):c.script_file!==null&&_t("Non-file origin must have a null script_file");for(let l of["local_scope","conversationid","tag"])Object.hasOwn(i,l)&&i[l]!==c[l]&&_t("Origin "+l+" contradicts creation selection");return{tuple:[t,n,r],payload:s,origin:c,tag:o}}function vte(e){if(!Sa(e))return e;let{origin:t,...n}=e;return n}function Dl(e,t,n){let r,s=t==="create"||t==="answer";try{if(!Sa(n))return _t("Expected an escalation options object");let o=t==="create"?["local_scope","conversationid","request_key","payload","origin","tag"]:t==="list_open"?Xm:t==="answer"?["id","answer_text",...Xm]:["id",...Xm];(!["create","status","list_open","answer"].includes(t)||Object.keys(n).some(d=>!o.includes(d)))&&_t("Unknown escalation option or operation");let i=t==="create"?Tte(n):void 0;i||yte(n);let a=t==="status"||t==="answer"?Ete(n.id):i?.tuple;if(t==="list_open"&&Ar(n.local_scope,"local_scope"),t==="answer"&&Ar(n.answer_text,"answer_text",!0),!e.open||e.inTransaction)return it("database_unavailable","Escalation database unavailable");r=e.pragma("busy_timeout",{simple:!0}),e.pragma("busy_timeout = 0");let c=()=>{let d=e.prepare(`SELECT local_scope,conversationid,escalationid,payload,state,answer_text FROM workflow_escalations WHERE ${ZD}`).get(...a);return d?e$(d):null};if(!s){if(!e.prepare("SELECT name FROM sqlite_master WHERE name='workflow_escalations'").get())return t==="list_open"?ts():it("not_found","Escalation not found");if(t==="status"){let m=c();return m&&cw(m,n)?ts(m):it("not_found","Escalation not found")}let d=e.prepare("SELECT local_scope,conversationid,escalationid,payload,state,answer_text FROM workflow_escalations WHERE local_scope = ? AND answer_text IS NULL ORDER BY conversationid,escalationid").all(n.local_scope).map(e$),{local_scope:u,...f}=n;return ts(null,!1,d.filter(m=>cw(m,f)))}let l=()=>{if(KD(e),i){e.prepare("INSERT OR IGNORE INTO workflow_jobs(local_scope,conversationid,status) VALUES(?,?,'open')").run(...i.tuple.slice(0,2));let f=c();if(f){if(Vm(vte(f.payload))!==Vm(i.payload)||(f.origin?.tag??null)!==i.tag)throw new zs("conflict","Request key already identifies a different question or tag",f);return ts(f)}let m=Vm({...i.payload,origin:i.origin});return e.prepare("INSERT INTO workflow_escalations(local_scope,conversationid,escalationid,payload,state,answer_text) VALUES(?,?,?,?,'waiting',NULL)").run(...i.tuple,m),ts(c(),!0)}let d=c();if(!d||!cw(d,n))throw new zs("not_found","Escalation not found");if(d.answer_text!==null){if(d.answer_text!==n.answer_text)throw new zs("conflict","Escalation already has a different answer",d);return ts(d)}if(e.prepare(`UPDATE workflow_escalations SET answer_text = ?, state = 'answered' WHERE ${ZD} AND answer_text IS NULL`).run(n.answer_text,...a).changes!==1)throw new zs("conflict","Escalation answer was not applied",c());return ts(c(),!0)};return e.transaction(l).immediate()}catch(o){if(o instanceof zs)return it(o.code,o.message,o.row);let i=o?.code??"";return/^SQLITE_(BUSY|LOCKED|CANTOPEN|CORRUPT|NOTADB|IOERR|MISUSE)/.test(i)?it("database_unavailable","Escalation database unavailable"):it(s?"write_rejected":"database_unavailable",s?"Escalation write rejected":"Escalation database unavailable")}finally{r!==void 0&&e.pragma("busy_timeout = "+r)}}import{readFileSync as jre}from"node:fs";var Ste=10*6e4,bte=60*6e4;function r$(e,t,n={},r=Date.now()){let s=n.ackDeadlineMs??Ste,o=n.replyThresholdMs??bte,i=[];for(let a of t){let c=Id(e,{site:a.peerSite,team:a.name,alias:a.alias});if(!c)continue;let l=Date.parse(c.sent_ts);if(c.state==="sent"){r-l>=s&&i.push(a.name);continue}c.state!=="replied"&&r-l>=o&&i.push(a.name)}return i}var Ate=[/^\S+'s turn has finished and exited; resubmit/i,/^resubmit .*lmctl chat/i];function Ite(e){let t=e.split(/\r?\n/).filter(r=>r.trim().length>0).filter(r=>!Ate.some(s=>s.test(r.trim()))),n=(t[t.length-1]??"").trim();return n==="BLOCKED"?"BLOCKED":n==="DONE"?"DONE":null}function s$(e){if(e.trim()==="")return{status:"NO-OUTPUT",wake:"env"};let t=Ite(e);return t==="BLOCKED"?{status:"BLOCKED",wake:"blocked"}:t==="DONE"?{status:"DONE",wake:null}:{status:"IDLE",wake:null}}function ba(e){switch(e.kind){case"ok":return s$(e.replyText);case"stalled":{let t=s$(e.replyText);return t.status==="BLOCKED"||t.status==="DONE"?t:{status:"NO-OUTPUT",wake:"env"}}case"busy":return{status:"RUNNING(busy)",wake:null};case"timeout":case"no-signal":return{status:"NO-OUTPUT",wake:"env"};case"error":return{status:"ENV-ERROR",wake:"env"}}}var Aa=Cn(Jn(),1);function je(e,t){return{error:{code:e,message:t}}}var f$=1e4;function dw(e,t,n){let r=20;if(n!==void 0){let o=typeof n=="number"?n:n.trim()===""?NaN:Number(n);if(!Number.isSafeInteger(o)||o<0||o>f$)return je("invalid_limit",`invalid limit "${n}" -- must be an integer from 0 to ${f$}`);r=o}return{events:t?e.db.db.prepare("SELECT * FROM events WHERE team = ? ORDER BY id DESC LIMIT ?").all(t,r):e.db.db.prepare("SELECT * FROM events ORDER BY id DESC LIMIT ?").all(r)}}function m$(e,t,n,r={}){let s=dw(e,t,n);return r.json?JSON.stringify(s):"error"in s?s.error.message:(0,Aa.formatTable)([["ID","TS","TEAM","STATUS","NOTE"],...s.events.map(o=>[String(o.id),ke(o.ts),(0,Aa.escapeCell)(o.team),(0,Aa.escapeCell)(o.status),(0,Aa.escapeCell)(o.note??"")])])}var p$=Cn(Jn(),1);function uw(e){let t=e.db.db,n=fS(t),r=ch(t),s=r.filter(c=>c.failure_reason?.startsWith(yo)).length,o=r.length-s,i=Ad(t,new Date().toISOString()).length,a=_S(t);return{counts:n,retryEligibleCount:o,permanentCount:s,dueNowCount:i,deliveryErrorCount:a}}function h$(e,t={}){let n=uw(e);if(t.json)return JSON.stringify(n);let r=[["persisted (awaiting dispatch)",String(n.counts.persisted)],["dispatched",String(n.counts.dispatched)],["replied",String(n.counts.replied)],["failed -- retry-eligible (backoff pending)",String(n.retryEligibleCount)],["failed -- permanent (never retried)",String(n.permanentCount)]],s=(0,p$.formatTable)([["STATE","COUNT"],...r]),o=n.deliveryErrorCount>0?`
|
|
2351
2351
|
${n.deliveryErrorCount} row(s) with a recorded delivery error (invocation failed to spawn -- see delivery_error)`:"";return`${s}
|
|
2352
2352
|
${n.dueNowCount} failed row(s) due for retry now${o}`}import{closeSync as nne,existsSync as rne,openSync as sne,readFileSync as Tw,readSync as one,realpathSync as ine,statSync as ane}from"node:fs";var Hte="member_health:";function fw(e,t){return`${Hte}${e}:${t}`}function _$(e,t,n,r){let s={kind:r.kind,observedAt:r.nowIso??new Date().toISOString(),remedy:r.remedy};e.prepare("INSERT INTO kv(k, v) VALUES (?, ?) ON CONFLICT(k) DO UPDATE SET v = excluded.v").run(fw(t,n),JSON.stringify(s))}function $l(e,t,n){let r=e.prepare("SELECT v FROM kv WHERE k = ?").get(fw(t,n));if(r===void 0)return null;try{let s=JSON.parse(r.v);return s.kind!=="evicted"||typeof s.observedAt!="string"||typeof s.remedy!="string"?null:{kind:"evicted",observedAt:s.observedAt,remedy:s.remedy}}catch{return null}}function g$(e,t,n){e.prepare("DELETE FROM kv WHERE k = ?").run(fw(t,n))}function E$(e,t){let n=t.title.trim();if(n.length===0)throw new Error("prompt: task title must not be blank");let r=new Date().toISOString(),s=e.prepare("INSERT INTO prompt_tasks(title, description, created_at) VALUES (?, ?, ?)").run(n,t.description??"",r);return e.prepare("SELECT * FROM prompt_tasks WHERE id = ?").get(s.lastInsertRowid)}function Ml(e,t){return e.prepare("SELECT * FROM prompt_tasks WHERE id = ?").get(t)??null}function y$(e,t){let n=t.prompt.trim();if(n.length===0)throw new Error("prompt: prompt must not be blank");let r=new Date().toISOString(),s=e.prepare("INSERT INTO task_prompts(task_id, from_id, to_id, prompt, created_at) VALUES (?, ?, ?, ?, ?)").run(t.taskId,t.fromId,t.toId,n,r);return e.prepare("SELECT * FROM task_prompts WHERE id = ?").get(s.lastInsertRowid)}function w$(e,t){return e.prepare("SELECT * FROM task_prompts WHERE task_id = ? ORDER BY id ASC").all(t)}function T$(e,t){return e.prepare("SELECT * FROM task_prompts WHERE to_id = ? AND retrieved_ts IS NULL ORDER BY id ASC").all(t)}function v$(e,t){return e.transaction(r=>{let s=e.prepare("SELECT * FROM task_prompts WHERE to_id = ? AND retrieved_ts IS NULL ORDER BY id").all(r);if(s.length===0)return s;let o=new Date().toISOString(),i=e.prepare("UPDATE task_prompts SET retrieved_ts = ? WHERE id = ? AND retrieved_ts IS NULL");for(let a of s)i.run(o,a.id),a.retrieved_ts=o;return s})(t)}function S$(e,t){return e.prepare("SELECT task_id FROM task_prompts WHERE from_id = ? OR to_id = ? ORDER BY id DESC LIMIT 1").get(t,t)?.task_id??null}function b$(e,t){let n=e.prepare("SELECT * FROM task_prompts WHERE id = ?").get(t.promptId);if(n===void 0)throw new Error(`prompt: prompt #${t.promptId} does not exist`);if(Ml(e,t.toTaskId)===null)throw new Error(`prompt: --task ${t.toTaskId} does not refer to an existing prompt task`);return e.transaction(()=>{e.prepare("INSERT INTO prompt_task_reassignments(prompt_id, from_task_id, to_task_id, reassigned_by, reassigned_at) VALUES (?, ?, ?, ?, ?)").run(t.promptId,n.task_id,t.toTaskId,t.reassignedBy,new Date().toISOString()),e.prepare("UPDATE task_prompts SET task_id = ? WHERE id = ?").run(t.toTaskId,t.promptId)}).immediate(),e.prepare("SELECT * FROM task_prompts WHERE id = ?").get(t.promptId)}function A$(e,t){return e.prepare("SELECT * FROM prompt_task_reassignments WHERE prompt_id = ? ORDER BY id ASC").all(t)}function I$(e,t){return e.prepare(`SELECT task_id, MAX(created_at) AS last_message_at, COUNT(*) AS message_count
|
|
2353
2353
|
FROM task_prompts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmctl-ai/lmctl",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.265",
|
|
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",
|