@lmctl-ai/lmctl 0.1.222 → 0.1.223

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.
Files changed (2) hide show
  1. package/dist/cli/index.js +86 -83
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -11,9 +11,9 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
11
11
  FROM attention WHERE acknowledged_at IS NULL ORDER BY created_at DESC LIMIT 100`);return{unacked:yr(r)}}async function aA(t){let e=Rt(),r=process.version,n=Ul("uname",["-a"],{encoding:"utf8"}),s=ys((n.stdout??"").trim()),i=[],o=t.dbPath??process.env.LMCTL_DB;if(o!==void 0)try{await dp(o);let c=Ul("du",["-sh",o],{encoding:"utf8"});c.status===0&&i.push(c.stdout.trim())}catch{}let a=t.sessiondir??process.env.LMCTL_SESSIONDIR;if(a!==void 0)try{await dp(a);let c=Ul("du",["-sh",a],{encoding:"utf8"});c.status===0&&i.push(c.stdout.trim())}catch{}let l=i.length===0?"(no paths configured)":ys(i.join(`
12
12
  `)),d=[];for(let c of tA){let u=process.env[c];if(u===void 0){d.push({key:c,value:"(unset)"});continue}d.push(ap(c,u))}return{lmctl_next_version:e,node_version:r,os_info:s,disk_usage:l,env_keys_present:d}}function lA(){return process.env.LMCTL_INTENT_LOG??QN(ZN(),".lmctl","recent-intents.log")}async function dA(t){let e=t.intentLog??lA(),r=t.intentLogTailLines??500;try{let s=(await ql(e,"utf8")).split(`
13
13
  `).filter(o=>o.length>0),i=s.slice(Math.max(0,s.length-r));return{source_path:e,tail_lines:i.length,tail:ys(i.join(`
14
- `)),note:null}}catch(n){return n.code==="ENOENT"?{source_path:e,tail_lines:0,tail:"",note:"no intent log present (status never run on this host)"}:{source_path:e,tail_lines:0,tail:"",note:`intent log unreadable: ${n instanceof Error?n.message:String(n)}`}}}var $i,tA,Wl,Es=w(()=>{"use strict";Ci();$i=["serve","db","runs","jobs","attentions","env","intents"];tA=["LMCTL_DB","LMCTL_API_URL","LMCTL_API_TOKEN","LMCTL_PID_FILE","LMCTL_SERVE_LOG","LMCTL_SESSIONDIR","LMCTL_DAEMON_INTERVAL_MS","LMCTL_SESSION_SIZE_DISABLED","NODE_ENV","PATH"];Wl=["id","job_id","workflow_id","team_id","current_state","terminal_state","started_at","ended_at","paused_at","parent_run_id","blocker"].join(", ")});import{readFileSync as fp,appendFileSync as cA,mkdirSync as uA,existsSync as CG,readdirSync as $G,unlinkSync as MG}from"node:fs";import{join as Di,dirname as mA}from"node:path";import{homedir as fA}from"node:os";function Bl(){return Di(fA(),".lmctl")}function pp(){pn=!0,process.env.LMCTL_DEBUG="1"}function _p(){return{cliDebug:pn,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function hp(t){pn=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ue(){if(pn||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-mp>=pA&&(up=gA(),mp=t),up}function gp(){return pn||process.env.LMCTL_DEBUG==="1"}function _A(){let t=new Date,e=t.getTimezoneOffset(),r=e<=0?"+":"-",n=String(Math.floor(Math.abs(e)/60)).padStart(2,"0"),s=String(Math.abs(e)%60).padStart(2,"0");return new Date(t.getTime()-e*6e4).toISOString().replace("Z",`${r}${n}:${s}`)}function je(t,e){if(e?.verbose){if(!pn)return}else if(!e?.always&&!ue())return;try{hA();let r={ts:new Date().toISOString(),pid:process.pid,vti:process.env.LMCTL_VTI??null,autocode_run_id:process.env.LMCTL_AUTOCODE_RUN_ID??void 0,...t};cA(Mi,JSON.stringify(r)+`
14
+ `)),note:null}}catch(n){return n.code==="ENOENT"?{source_path:e,tail_lines:0,tail:"",note:"no intent log present (status never run on this host)"}:{source_path:e,tail_lines:0,tail:"",note:`intent log unreadable: ${n instanceof Error?n.message:String(n)}`}}}var $i,tA,Wl,Es=w(()=>{"use strict";Ci();$i=["serve","db","runs","jobs","attentions","env","intents"];tA=["LMCTL_DB","LMCTL_API_URL","LMCTL_API_TOKEN","LMCTL_PID_FILE","LMCTL_SERVE_LOG","LMCTL_SESSIONDIR","LMCTL_DAEMON_INTERVAL_MS","LMCTL_SESSION_SIZE_DISABLED","NODE_ENV","PATH"];Wl=["id","job_id","workflow_id","team_id","current_state","terminal_state","started_at","ended_at","paused_at","parent_run_id","blocker"].join(", ")});import{readFileSync as fp,appendFileSync as cA,mkdirSync as uA,existsSync as CG,readdirSync as $G,unlinkSync as MG}from"node:fs";import{join as Di,dirname as mA}from"node:path";import{homedir as fA}from"node:os";function Bl(){return Di(fA(),".lmctl")}function pp(){_n=!0,process.env.LMCTL_DEBUG="1"}function _p(){return{cliDebug:_n,lmctlDebugEnv:process.env.LMCTL_DEBUG}}function hp(t){_n=t.cliDebug,t.lmctlDebugEnv===void 0?delete process.env.LMCTL_DEBUG:process.env.LMCTL_DEBUG=t.lmctlDebugEnv}function ue(){if(_n||process.env.LMCTL_DEBUG==="1")return!0;let t=Date.now();return t-mp>=pA&&(up=gA(),mp=t),up}function gp(){return _n||process.env.LMCTL_DEBUG==="1"}function _A(){let t=new Date,e=t.getTimezoneOffset(),r=e<=0?"+":"-",n=String(Math.floor(Math.abs(e)/60)).padStart(2,"0"),s=String(Math.abs(e)%60).padStart(2,"0");return new Date(t.getTime()-e*6e4).toISOString().replace("Z",`${r}${n}:${s}`)}function je(t,e){if(e?.verbose){if(!_n)return}else if(!e?.always&&!ue())return;try{hA();let r={ts:new Date().toISOString(),pid:process.pid,vti:process.env.LMCTL_VTI??null,autocode_run_id:process.env.LMCTL_AUTOCODE_RUN_ID??void 0,...t};cA(Mi,JSON.stringify(r)+`
15
15
  `)}catch{}}function hA(){if(!Mi){let e=_A().slice(0,13).replace("T","-");Mi=Di(Bl(),`debug-${e}.log`)}uA(mA(Mi),{recursive:!0})}function Pe(...t){je({event:"legacy",msg:t.join(" ")})}function Ze(...t){je({event:"legacy",msg:t.join(" ")},{verbose:!0})}function M(t){je(t,{always:!0})}function gA(){return yA()||EA()}function yA(){try{let t=fp(Di(Bl(),"config.toml"),"utf-8");for(let e of t.split(`
16
- `)){let r=e.trim();if(!r||r.startsWith("#"))continue;if(r.startsWith("["))break;let n=/^debug\s*=\s*(.+)$/.exec(r);if(n){let s=n[1].trim().toLowerCase().replace(/^["']|["']$/g,"");return s==="true"||s==="1"}}}catch{}return!1}function EA(){try{let t=fp(Di(Bl(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var pn,up,mp,pA,Mi,pe=w(()=>{"use strict";pn=!1,up=!1,mp=0,pA=5e3;Mi=null});import{existsSync as PA}from"node:fs";import{createRequire as FA}from"node:module";function UA(){return Xl===null&&(Xl=FA(import.meta.url)("node:sqlite").DatabaseSync),Xl}function Jl(t){return t.length===1&&WA(t[0])?[t[0]]:t}function WA(t){if(!Vl(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Vl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Xl,Gl,vp,Kl,bp=w(()=>{"use strict";Xl=null;Gl=class{name;handle;transactionDepth=0;savepointId=0;constructor(e,r={}){if(r.fileMustExist===!0&&e!==":memory:"&&!PA(e))throw new Error("unable to open database file");this.name=e,this.handle=new(UA())(e,{readOnly:r.readonly===!0}),this.exec("PRAGMA busy_timeout = 5000")}prepare(e){return new Kl(this.handle.prepare(e))}exec(e){this.handle.exec(e),this.updateTransactionDepth(e)}pragma(e,r){let n=`PRAGMA ${e}`;if(e.includes("=")){this.exec(n);return}let s=this.prepare(n).get();return r?.simple===!0?s===void 0?void 0:Object.values(s)[0]:s}transaction(e){return(...r)=>{if(this.transactionDepth===0){this.exec("BEGIN");try{let s=e(...r);return this.exec("COMMIT"),s}catch(s){throw this.inTransaction&&this.exec("ROLLBACK"),s}}let n=`lmctl_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${n}`);try{let s=e(...r);return this.exec(`RELEASE ${n}`),s}catch(s){throw this.inTransaction&&(this.exec(`ROLLBACK TO ${n}`),this.exec(`RELEASE ${n}`)),s}}}get inTransaction(){return this.transactionDepth>0}close(){this.handle.close()}updateTransactionDepth(e){let r=e.trim().match(/^([A-Za-z]+)/)?.[1]?.toUpperCase();if(r!==void 0){if(r==="BEGIN"||r==="SAVEPOINT"){this.transactionDepth+=1;return}if(r==="COMMIT"){this.transactionDepth=Math.max(0,this.transactionDepth-1);return}if(r==="RELEASE"){this.transactionDepth=Math.max(0,this.transactionDepth-1);return}r==="ROLLBACK"&&!/^ROLLBACK\s+TO\b/i.test(e.trim())&&(this.transactionDepth=0)}}},vp=Gl,Kl=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){let r=this.handle.get(...Jl(e));return this.normalizeRow(r)}all(...e){return this.handle.all(...Jl(e)).map(r=>this.normalizeRow(r))}run(...e){let r=this.handle.run(...Jl(e));return{changes:Number(r.changes),lastInsertRowid:Number(r.lastInsertRowid)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Vl(e)?Object.values(e):Vl(e)?{...e}:e}}});var Op={};he(Op,{CURRENT_USER_VERSION:()=>Rp,migrate:()=>ji});import{existsSync as qA,mkdirSync as BA,readFileSync as kp}from"node:fs";import{homedir as HA}from"node:os";import{dirname as Ip,join as XA,resolve as Np}from"node:path";import{fileURLToPath as JA,pathToFileURL as GA}from"node:url";function ji(t){t.dbPath!==":memory:"&&BA(Ip(t.dbPath),{recursive:!0});let e=new vp(t.dbPath);e.pragma("journal_mode = WAL"),e.pragma("synchronous = NORMAL"),e.pragma("foreign_keys = ON");let r=Lp(e);return r===0&&(e.exec(kp(xp,"utf8")),e.pragma(`user_version = ${Rp}`)),VA(e,r),e}function VA(t,e){let r=e;if(r<2&&r!==0&&(t.exec(`
16
+ `)){let r=e.trim();if(!r||r.startsWith("#"))continue;if(r.startsWith("["))break;let n=/^debug\s*=\s*(.+)$/.exec(r);if(n){let s=n[1].trim().toLowerCase().replace(/^["']|["']$/g,"");return s==="true"||s==="1"}}}catch{}return!1}function EA(){try{let t=fp(Di(Bl(),"config.json"),"utf-8"),e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.debug===!0}catch{}return!1}var _n,up,mp,pA,Mi,pe=w(()=>{"use strict";_n=!1,up=!1,mp=0,pA=5e3;Mi=null});import{existsSync as PA}from"node:fs";import{createRequire as FA}from"node:module";function UA(){return Xl===null&&(Xl=FA(import.meta.url)("node:sqlite").DatabaseSync),Xl}function Jl(t){return t.length===1&&WA(t[0])?[t[0]]:t}function WA(t){if(!Vl(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function Vl(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var Xl,Gl,vp,Kl,bp=w(()=>{"use strict";Xl=null;Gl=class{name;handle;transactionDepth=0;savepointId=0;constructor(e,r={}){if(r.fileMustExist===!0&&e!==":memory:"&&!PA(e))throw new Error("unable to open database file");this.name=e,this.handle=new(UA())(e,{readOnly:r.readonly===!0}),this.exec("PRAGMA busy_timeout = 5000")}prepare(e){return new Kl(this.handle.prepare(e))}exec(e){this.handle.exec(e),this.updateTransactionDepth(e)}pragma(e,r){let n=`PRAGMA ${e}`;if(e.includes("=")){this.exec(n);return}let s=this.prepare(n).get();return r?.simple===!0?s===void 0?void 0:Object.values(s)[0]:s}transaction(e){return(...r)=>{if(this.transactionDepth===0){this.exec("BEGIN");try{let s=e(...r);return this.exec("COMMIT"),s}catch(s){throw this.inTransaction&&this.exec("ROLLBACK"),s}}let n=`lmctl_sp_${this.savepointId+=1}`;this.exec(`SAVEPOINT ${n}`);try{let s=e(...r);return this.exec(`RELEASE ${n}`),s}catch(s){throw this.inTransaction&&(this.exec(`ROLLBACK TO ${n}`),this.exec(`RELEASE ${n}`)),s}}}get inTransaction(){return this.transactionDepth>0}close(){this.handle.close()}updateTransactionDepth(e){let r=e.trim().match(/^([A-Za-z]+)/)?.[1]?.toUpperCase();if(r!==void 0){if(r==="BEGIN"||r==="SAVEPOINT"){this.transactionDepth+=1;return}if(r==="COMMIT"){this.transactionDepth=Math.max(0,this.transactionDepth-1);return}if(r==="RELEASE"){this.transactionDepth=Math.max(0,this.transactionDepth-1);return}r==="ROLLBACK"&&!/^ROLLBACK\s+TO\b/i.test(e.trim())&&(this.transactionDepth=0)}}},vp=Gl,Kl=class{handle;rawMode=!1;constructor(e){this.handle=e,this.handle.setAllowBareNamedParameters(!0)}get(...e){let r=this.handle.get(...Jl(e));return this.normalizeRow(r)}all(...e){return this.handle.all(...Jl(e)).map(r=>this.normalizeRow(r))}run(...e){let r=this.handle.run(...Jl(e));return{changes:Number(r.changes),lastInsertRowid:Number(r.lastInsertRowid)}}raw(){return this.rawMode=!0,this}normalizeRow(e){return e==null?e:this.rawMode&&Vl(e)?Object.values(e):Vl(e)?{...e}:e}}});var Op={};he(Op,{CURRENT_USER_VERSION:()=>Rp,migrate:()=>ji});import{existsSync as qA,mkdirSync as BA,readFileSync as kp}from"node:fs";import{homedir as HA}from"node:os";import{dirname as Ip,join as XA,resolve as Np}from"node:path";import{fileURLToPath as JA,pathToFileURL as GA}from"node:url";function ji(t){t.dbPath!==":memory:"&&BA(Ip(t.dbPath),{recursive:!0});let e=new vp(t.dbPath);e.pragma("journal_mode = WAL"),e.pragma("synchronous = NORMAL"),e.pragma("foreign_keys = ON");let r=Lp(e);return r===0&&(e.exec(kp(xp,"utf8")),e.pragma(`user_version = ${Rp}`)),VA(e,r),e}function VA(t,e){let r=e;if(r<2&&r!==0&&(t.exec(`
17
17
  CREATE TABLE IF NOT EXISTS session_size (
18
18
  id INTEGER PRIMARY KEY AUTOINCREMENT,
19
19
  team_name TEXT NOT NULL,
@@ -427,7 +427,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
427
427
  updated_at TEXT NOT NULL,
428
428
  PRIMARY KEY(user_id, device_id, period)
429
429
  );
430
- `),t.pragma("user_version = 36"),r=36),r<37&&r!==0&&(_n(t,"team_connection")&&t.exec(`
430
+ `),t.pragma("user_version = 36"),r=36),r<37&&r!==0&&(hn(t,"team_connection")&&t.exec(`
431
431
  CREATE TABLE IF NOT EXISTS team_connection_v37 (
432
432
  id INTEGER PRIMARY KEY AUTOINCREMENT,
433
433
  source_teamfile TEXT NOT NULL,
@@ -552,7 +552,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
552
552
  ON agent_mailbox(sender_teamfile, sender_alias, created_at);
553
553
  CREATE INDEX IF NOT EXISTS idx_agent_mailbox_created
554
554
  ON agent_mailbox(created_at);
555
- `),t.pragma("user_version = 45"),r=45),r<46&&r!==0&&(_n(t,"team_chat_log")?Sp(t):t.exec(`
555
+ `),t.pragma("user_version = 45"),r=45),r<46&&r!==0&&(hn(t,"team_chat_log")?Sp(t):t.exec(`
556
556
  CREATE TABLE IF NOT EXISTS team_chat_log (
557
557
  id INTEGER PRIMARY KEY AUTOINCREMENT,
558
558
  root_teamfile TEXT NOT NULL,
@@ -571,7 +571,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
571
571
  `),t.exec(`
572
572
  CREATE INDEX IF NOT EXISTS idx_team_chat_log_root_time
573
573
  ON team_chat_log(root_teamfile, created_at);
574
- `),t.pragma("user_version = 46"),r=46),r>=46&&_n(t,"team_chat_log")&&!se(t,"team_chat_log").has("origin")&&Sp(t),r<47&&r!==0){zt(t,"agent_mailbox"),zt(t,"tracked_invocation");let n=se(t,"agent_mailbox");n.has("delivered_at")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivered_at TEXT;"),n.has("receipt")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN receipt TEXT;");let s=se(t,"tracked_invocation");s.has("notified_by")||t.exec("ALTER TABLE tracked_invocation ADD COLUMN notified_by TEXT;"),s.has("notified_at")||t.exec("ALTER TABLE tracked_invocation ADD COLUMN notified_at TEXT;"),t.pragma("user_version = 47"),r=47}if(r<48&&r!==0){zt(t,"agent_mailbox");let n=se(t,"agent_mailbox");n.has("delivering_at")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivering_at TEXT;"),n.has("delivery_holder_pid")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivery_holder_pid INTEGER;"),n.has("delivery_holder_host")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivery_holder_host TEXT;"),n.has("waited_at")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN waited_at TEXT;"),n.has("waited_by")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN waited_by TEXT;"),t.exec(`
574
+ `),t.pragma("user_version = 46"),r=46),r>=46&&hn(t,"team_chat_log")&&!se(t,"team_chat_log").has("origin")&&Sp(t),r<47&&r!==0){zt(t,"agent_mailbox"),zt(t,"tracked_invocation");let n=se(t,"agent_mailbox");n.has("delivered_at")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivered_at TEXT;"),n.has("receipt")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN receipt TEXT;");let s=se(t,"tracked_invocation");s.has("notified_by")||t.exec("ALTER TABLE tracked_invocation ADD COLUMN notified_by TEXT;"),s.has("notified_at")||t.exec("ALTER TABLE tracked_invocation ADD COLUMN notified_at TEXT;"),t.pragma("user_version = 47"),r=47}if(r<48&&r!==0){zt(t,"agent_mailbox");let n=se(t,"agent_mailbox");n.has("delivering_at")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivering_at TEXT;"),n.has("delivery_holder_pid")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivery_holder_pid INTEGER;"),n.has("delivery_holder_host")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN delivery_holder_host TEXT;"),n.has("waited_at")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN waited_at TEXT;"),n.has("waited_by")||t.exec("ALTER TABLE agent_mailbox ADD COLUMN waited_by TEXT;"),t.exec(`
575
575
  CREATE INDEX IF NOT EXISTS idx_agent_mailbox_sender_delivery_wait
576
576
  ON agent_mailbox(sender_teamfile, sender_alias, delivered_at, waited_at, id);
577
577
  CREATE INDEX IF NOT EXISTS idx_agent_mailbox_lane_delivery
@@ -680,7 +680,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
680
680
  ON invocation_state(target_teamfile, target_alias, status, launch_source);
681
681
  CREATE INDEX IF NOT EXISTS idx_invocation_state_from_time
682
682
  ON invocation_state(from_identity, started_at DESC);
683
- `),t.pragma("user_version = 53"),r=53),r<54&&r!==0&&(zt(t,"agent_state"),se(t,"agent_state").has("currently_handling_message_id")||t.exec("ALTER TABLE agent_state ADD COLUMN currently_handling_message_id TEXT;"),t.pragma("user_version = 54"),r=54),r<55&&r!==0&&(zt(t,"agent_state"),se(t,"agent_state").has("currently_handling_since")||t.exec("ALTER TABLE agent_state ADD COLUMN currently_handling_since TEXT;"),t.pragma("user_version = 55"),r=55),r<56&&r!==0&&(_n(t,"tracked_invocation")&&t.exec(`
683
+ `),t.pragma("user_version = 53"),r=53),r<54&&r!==0&&(zt(t,"agent_state"),se(t,"agent_state").has("currently_handling_message_id")||t.exec("ALTER TABLE agent_state ADD COLUMN currently_handling_message_id TEXT;"),t.pragma("user_version = 54"),r=54),r<55&&r!==0&&(zt(t,"agent_state"),se(t,"agent_state").has("currently_handling_since")||t.exec("ALTER TABLE agent_state ADD COLUMN currently_handling_since TEXT;"),t.pragma("user_version = 55"),r=55),r<56&&r!==0&&(hn(t,"tracked_invocation")&&t.exec(`
684
684
  CREATE TABLE tracked_invocation_v56 (
685
685
  id INTEGER PRIMARY KEY AUTOINCREMENT,
686
686
  kind TEXT NOT NULL CHECK(kind IN ('chat', 'exec')),
@@ -734,7 +734,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
734
734
  ON tracked_invocation(scope_teamfile, status, started_at);
735
735
  CREATE INDEX IF NOT EXISTS idx_tracked_invocation_status_ended
736
736
  ON tracked_invocation(status, ended_at);
737
- `),t.pragma("user_version = 56"),r=56),qA(KA)}function se(t,e){let r=t.prepare(`PRAGMA table_info(${e})`).all();return new Set(r.map(n=>n.name))}function _n(t,e){return t.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function zt(t,e){if(!_n(t,e)&&(t.exec(kp(xp,"utf8")),!_n(t,e)))throw new Error(`schema.sql did not create expected table: ${e}`)}function Sp(t){let e=se(t,"team_chat_log");t.pragma("foreign_keys = OFF");try{t.exec(`
737
+ `),t.pragma("user_version = 56"),r=56),qA(KA)}function se(t,e){let r=t.prepare(`PRAGMA table_info(${e})`).all();return new Set(r.map(n=>n.name))}function hn(t,e){return t.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(e)!==void 0}function zt(t,e){if(!hn(t,e)&&(t.exec(kp(xp,"utf8")),!hn(t,e)))throw new Error(`schema.sql did not create expected table: ${e}`)}function Sp(t){let e=se(t,"team_chat_log");t.pragma("foreign_keys = OFF");try{t.exec(`
738
738
  DROP TABLE IF EXISTS team_chat_log_v46;
739
739
  CREATE TABLE team_chat_log_v46 (
740
740
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -1091,21 +1091,21 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
1091
1091
  `),deleteMailboxMessage:t.prepare("DELETE FROM agent_mailbox WHERE id = ?")}}function ws(t){if(Buffer.byteLength(t,"utf8")<=65536)return t;let r=Buffer.byteLength(Pp,"utf8"),n=Math.max(0,65536-r),s=Buffer.from(t,"utf8"),i=n;for(;i>0&&(s[i]&192)===128;)i-=1;return`${s.subarray(0,i).toString("utf8")}${Pp}`}var Pp,Pi=w(()=>{"use strict";Pp=`
1092
1092
  ...[truncated]`});function bs(t,e){return JSON.stringify([t,e])}function Up(t){try{let e=JSON.parse(t);return typeof e.lock_id!="string"||typeof e.teamfile!="string"||typeof e.alias!="string"||typeof e.holder_pid!="number"||typeof e.holder_host!="string"||!Array.isArray(e.holder_ips)||!e.holder_ips.every(r=>typeof r=="string")||typeof e.started_at!="string"||typeof e.last_heartbeat!="string"?null:{lock_id:e.lock_id,teamfile:e.teamfile,alias:e.alias,holder_pid:e.holder_pid,holder_host:e.holder_host,holder_ips:e.holder_ips,started_at:e.started_at,last_heartbeat:e.last_heartbeat}}catch{return null}}var Ts,vs,Wp=w(()=>{"use strict";Ts="terminal_lock",vs="member"});import{readFileSync as qp}from"node:fs";function He(t){if(!Number.isInteger(t)||(t??0)<=0)return!1;try{return process.kill(t,0),!0}catch(e){return(e!==null&&typeof e=="object"&&"code"in e?e.code:void 0)!=="ESRCH"}}function zl(t){if(!Number.isInteger(t)||(t??0)<=0)return null;let e=zA();if(e===null)return null;try{let r=qp(`/proc/${t}/stat`,"utf-8"),n=r.lastIndexOf(")");if(n<0)return null;let i=r.slice(n+2).trim().split(/\s+/)[19];return i===void 0||!/^\d+$/.test(i)?null:`${e}:${i}`}catch{return null}}function zA(){try{let t=qp("/proc/sys/kernel/random/boot_id","utf-8").trim();return/^[0-9a-f-]{36}$/i.test(t)?t:null}catch{return null}}function ZA(t){return typeof t=="string"&&/^[0-9a-f-]{36}:\d+$/i.test(t)}function Bp(t,e){if(!He(t))return"gone";if(!ZA(e))return"unverified";let r=zl(t);return r===null?"unverified":r===e?"same":"different"}var Jr=w(()=>{"use strict"});import{createHash as QA}from"node:crypto";function ex(t,e,r){return QA("sha256").update(`${t}\0${e}\0${r}`).digest("hex")}function Ie(t,e,r){let n=ex(e.stream_id,e.intentKey??e.event_type,e.observedLastSeq),s=t.prepare(`INSERT INTO message_event (event_id, ts, stream_id, event_type, payload)
1093
1093
  VALUES (?, ?, ?, ?, ?)
1094
- ON CONFLICT(event_id) DO NOTHING`),i=t.prepare("SELECT seq FROM message_event WHERE event_id = ?");return t.transaction(()=>{let a=s.run(n,e.ts??new Date().toISOString(),e.stream_id,e.event_type,JSON.stringify(e.payload));if(a.changes===0)return{appended:!1,seq:i.get(n).seq,event_id:n};let l=Number(a.lastInsertRowid);return r(l),{appended:!0,seq:l,event_id:n}})()}var Fi=w(()=>{"use strict"});import{hostname as hn}from"node:os";function gn(t=process.env){let e=t.LMCTL_INFLIGHT_HEARTBEAT_MS;if(e===void 0||e.trim()==="")return Zl;let r=Number(e);return!Number.isFinite(r)||r<=0?Zl:Math.max(1,Math.trunc(r))}function Er(t,e={}){let r=setInterval(()=>{Promise.resolve().then(()=>t(new Date().toISOString())).then(n=>{n||clearInterval(r)}).catch(n=>e.onError?.(n))},e.intervalMs??Zl);return r.unref?.(),r}function Lt(t,e){let r=new Date().toISOString(),n=new Date(Date.now()-e.ttlMs).toISOString(),s={receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,started_at:r},i=t.getAgentInflight(e.receiver_teamfile,e.receiver_alias),o=i===null||i.holder_pid===null,a=t.tryAcquireAgentInflight(s,{...o?{stale_before:n}:{},force:e.force,reclaim_reason:e.reclaimReason});if(a.acquired){let d=i===null?null:e.force===!0?e.reclaimReason??"force":i.holder_pid===null&&i.started_at<n?"stale":null;return{acquired:!0,lease:a.current??s,leaseId:a.lease_id,previous:i,reclaimReason:d}}if(!Ui(a.current,n))return{acquired:!1,current:a.current};let l=t.tryAcquireAgentInflight(s,a.current.holder_pid===null?{stale_before:n}:{reclaim_observed:{sender_teamfile:a.current.sender_teamfile,sender_alias:a.current.sender_alias,started_at:a.current.started_at,holder_pid:a.current.holder_pid},reclaim_reason:"dead-pid"});return l.acquired?{acquired:!0,lease:l.current??s,leaseId:l.lease_id,previous:a.current,reclaimReason:a.current.holder_pid===null?"stale":"dead-pid"}:{acquired:!1,current:l.current}}function yn(t){return t.status!=="running"?null:t.holder_host===hn()&&t.holder_pid!==null&&t.holder_pid>0?He(t.holder_pid)?"live":"dead":"unknown"}function _t(t,e,r){let n,s=t.getTerminalLock(e,r);if(s!==null){if(tx(s))return{busy:!0,reason:"terminal-held",source:"terminal-lock",terminalLock:s};n??={source:"terminal-lock",holder_pid:s.holder_pid,holder_host:s.holder_host,reason:s.holder_host===hn()?"dead-pid":"stale"}}let i=rx(t,e,r);if(i!==null){if(nx(i))return{busy:!0,reason:"terminal-held",source:"terminal-invocation",terminalInvocation:i};n??={source:"terminal-invocation",holder_pid:i.holder_pid,holder_host:i.holder_host,reason:i.holder_pid!==null&&(i.holder_host===null||i.holder_host===hn())?"dead-pid":"stale"}}let o=t.getAgentInflight(e,r);if(o!==null){let a=new Date(Date.now()-En()).toISOString();if(!Ui(o,a))return{busy:!0,reason:"in-flight",inFlight:o};n??={source:"in-flight",holder_pid:o.holder_pid,holder_host:o.holder_pid===null?null:hn(),reason:o.holder_pid===null?"stale":"dead-pid"}}return n===void 0?{busy:!1}:{busy:!1,reclaimable:n}}function tx(t){if(t.holder_host===hn())return He(t.holder_pid);let e=Date.parse(t.last_heartbeat);return Number.isFinite(e)?Date.now()-e<=ix():!1}function rx(t,e,r){return t.query(`SELECT id, started_at, last_heartbeat_at, holder_pid, holder_host
1094
+ ON CONFLICT(event_id) DO NOTHING`),i=t.prepare("SELECT seq FROM message_event WHERE event_id = ?");return t.transaction(()=>{let a=s.run(n,e.ts??new Date().toISOString(),e.stream_id,e.event_type,JSON.stringify(e.payload));if(a.changes===0)return{appended:!1,seq:i.get(n).seq,event_id:n};let l=Number(a.lastInsertRowid);return r(l),{appended:!0,seq:l,event_id:n}})()}var Fi=w(()=>{"use strict"});import{hostname as gn}from"node:os";function yn(t=process.env){let e=t.LMCTL_INFLIGHT_HEARTBEAT_MS;if(e===void 0||e.trim()==="")return Zl;let r=Number(e);return!Number.isFinite(r)||r<=0?Zl:Math.max(1,Math.trunc(r))}function Er(t,e={}){let r=setInterval(()=>{Promise.resolve().then(()=>t(new Date().toISOString())).then(n=>{n||clearInterval(r)}).catch(n=>e.onError?.(n))},e.intervalMs??Zl);return r.unref?.(),r}function Lt(t,e){let r=new Date().toISOString(),n=new Date(Date.now()-e.ttlMs).toISOString(),s={receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,started_at:r},i=t.getAgentInflight(e.receiver_teamfile,e.receiver_alias),o=i===null||i.holder_pid===null,a=t.tryAcquireAgentInflight(s,{...o?{stale_before:n}:{},force:e.force,reclaim_reason:e.reclaimReason});if(a.acquired){let d=i===null?null:e.force===!0?e.reclaimReason??"force":i.holder_pid===null&&i.started_at<n?"stale":null;return{acquired:!0,lease:a.current??s,leaseId:a.lease_id,previous:i,reclaimReason:d}}if(!Ui(a.current,n))return{acquired:!1,current:a.current};let l=t.tryAcquireAgentInflight(s,a.current.holder_pid===null?{stale_before:n}:{reclaim_observed:{sender_teamfile:a.current.sender_teamfile,sender_alias:a.current.sender_alias,started_at:a.current.started_at,holder_pid:a.current.holder_pid},reclaim_reason:"dead-pid"});return l.acquired?{acquired:!0,lease:l.current??s,leaseId:l.lease_id,previous:a.current,reclaimReason:a.current.holder_pid===null?"stale":"dead-pid"}:{acquired:!1,current:l.current}}function En(t){return t.status!=="running"?null:t.holder_host===gn()&&t.holder_pid!==null&&t.holder_pid>0?He(t.holder_pid)?"live":"dead":"unknown"}function _t(t,e,r){let n,s=t.getTerminalLock(e,r);if(s!==null){if(tx(s))return{busy:!0,reason:"terminal-held",source:"terminal-lock",terminalLock:s};n??={source:"terminal-lock",holder_pid:s.holder_pid,holder_host:s.holder_host,reason:s.holder_host===gn()?"dead-pid":"stale"}}let i=rx(t,e,r);if(i!==null){if(nx(i))return{busy:!0,reason:"terminal-held",source:"terminal-invocation",terminalInvocation:i};n??={source:"terminal-invocation",holder_pid:i.holder_pid,holder_host:i.holder_host,reason:i.holder_pid!==null&&(i.holder_host===null||i.holder_host===gn())?"dead-pid":"stale"}}let o=t.getAgentInflight(e,r);if(o!==null){let a=new Date(Date.now()-wn()).toISOString();if(!Ui(o,a))return{busy:!0,reason:"in-flight",inFlight:o};n??={source:"in-flight",holder_pid:o.holder_pid,holder_host:o.holder_pid===null?null:gn(),reason:o.holder_pid===null?"stale":"dead-pid"}}return n===void 0?{busy:!1}:{busy:!1,reclaimable:n}}function tx(t){if(t.holder_host===gn())return He(t.holder_pid);let e=Date.parse(t.last_heartbeat);return Number.isFinite(e)?Date.now()-e<=ix():!1}function rx(t,e,r){return t.query(`SELECT id, started_at, last_heartbeat_at, holder_pid, holder_host
1095
1095
  FROM tracked_invocation
1096
1096
  WHERE target_teamfile = ?
1097
1097
  AND target_alias = ?
1098
1098
  AND status = 'running'
1099
1099
  AND launch_source = 'terminal'
1100
1100
  ORDER BY started_at DESC, id DESC
1101
- LIMIT 1`,e,r)[0]??null}function nx(t){return t.holder_pid!==null&&(t.holder_host===null||t.holder_host===hn())?He(t.holder_pid):sx(t)}function sx(t){let e=Date.parse(t.last_heartbeat_at??t.started_at);return Number.isFinite(e)?Date.now()-e<=En():!1}function Ui(t,e){return t.holder_pid===null?t.started_at<e:!He(t.holder_pid)}function En(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return Hp;let r=Number(e);return!Number.isFinite(r)||r<=0?Hp:r}function ix(t=process.env){let e=t.LMCTL_TERMINAL_LOCK_STALE_MS;if(e===void 0||e.trim()==="")return Xp;let r=Number(e);return!Number.isFinite(r)||r<=0?Xp:r}var Hp,Xp,Zl,ht=w(()=>{"use strict";Jr();Hp=8*60*60*1e3,Xp=12e4,Zl=3e4});import{randomUUID as Gp}from"node:crypto";import{hostname as ox}from"node:os";function Qt(t,e){return{teamfile:t,alias:e}}function Wi(t,e,r={}){return{teamfile:t,alias:e,...r.provider===void 0||r.provider===null?{}:{provider:r.provider},...r.sessionId===void 0||r.sessionId===null?{}:{session_id:r.sessionId}}}function qi(t,e){return t===null?null:Qt(t,e??"")}function $e(t){return`msg_mbx_${t}`}function bn(t){return`msg_tcl_${t}`}function Sn(t){return`inv_${t}`}function Tn(t,e,r){return t.prepare(`SELECT receiver_teamfile, receiver_alias, lease_id, sender_teamfile, sender_alias,
1101
+ LIMIT 1`,e,r)[0]??null}function nx(t){return t.holder_pid!==null&&(t.holder_host===null||t.holder_host===gn())?He(t.holder_pid):sx(t)}function sx(t){let e=Date.parse(t.last_heartbeat_at??t.started_at);return Number.isFinite(e)?Date.now()-e<=wn():!1}function Ui(t,e){return t.holder_pid===null?t.started_at<e:!He(t.holder_pid)}function wn(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return Hp;let r=Number(e);return!Number.isFinite(r)||r<=0?Hp:r}function ix(t=process.env){let e=t.LMCTL_TERMINAL_LOCK_STALE_MS;if(e===void 0||e.trim()==="")return Xp;let r=Number(e);return!Number.isFinite(r)||r<=0?Xp:r}var Hp,Xp,Zl,ht=w(()=>{"use strict";Jr();Hp=8*60*60*1e3,Xp=12e4,Zl=3e4});import{randomUUID as Gp}from"node:crypto";import{hostname as ox}from"node:os";function Qt(t,e){return{teamfile:t,alias:e}}function Wi(t,e,r={}){return{teamfile:t,alias:e,...r.provider===void 0||r.provider===null?{}:{provider:r.provider},...r.sessionId===void 0||r.sessionId===null?{}:{session_id:r.sessionId}}}function qi(t,e){return t===null?null:Qt(t,e??"")}function $e(t){return`msg_mbx_${t}`}function Gr(t){return`msg_tcl_${t}`}function Sn(t){return`inv_${t}`}function vn(t,e,r){return t.prepare(`SELECT receiver_teamfile, receiver_alias, lease_id, sender_teamfile, sender_alias,
1102
1102
  holder_pid, holder_host, started_at, terminal_lock_id,
1103
1103
  terminal_invocation_id, currently_handling_message_id,
1104
1104
  currently_handling_since, last_seq
1105
1105
  FROM agent_state
1106
1106
  WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e,r)??null}function lx(t,e,r){if(e===null||r===null)return null;let n=t.prepare(`SELECT currently_handling_message_id, currently_handling_since
1107
1107
  FROM agent_state
1108
- WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e,r);if(n?.currently_handling_message_id===null||n?.currently_handling_message_id===void 0||n.currently_handling_since===null)return null;let s=Date.parse(n.currently_handling_since);return!Number.isFinite(s)||Date.now()-s>ax?null:n.currently_handling_message_id}function Kp(t,e,r){let n=lx(t,e,r);return n===null?{}:{causation:{request_message_id:n}}}function vn(t,e,r,n,s=new Date().toISOString()){t.prepare(`INSERT INTO agent_state
1108
+ WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e,r);if(n?.currently_handling_message_id===null||n?.currently_handling_message_id===void 0||n.currently_handling_since===null)return null;let s=Date.parse(n.currently_handling_since);return!Number.isFinite(s)||Date.now()-s>ax?null:n.currently_handling_message_id}function Kp(t,e,r){let n=lx(t,e,r);return n===null?{}:{causation:{request_message_id:n}}}function bn(t,e,r,n,s=new Date().toISOString()){t.prepare(`INSERT INTO agent_state
1109
1109
  (receiver_teamfile, receiver_alias, currently_handling_message_id,
1110
1110
  currently_handling_since, last_seq)
1111
1111
  VALUES (?, ?, ?, ?, 0)
@@ -1115,7 +1115,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
1115
1115
  SET currently_handling_message_id = NULL,
1116
1116
  currently_handling_since = NULL
1117
1117
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1118
- AND currently_handling_message_id = ?`).run(e,r,n).changes===1}function dx(t,e){let r=e??new Date(Date.now()-En()).toISOString();return Ui({holder_pid:t.holder_pid,started_at:t.started_at??""},r)}function cx(t,e,r){return e==="force"||e==="session-idle"?e:r?"force":t.holder_pid!==null&&!He(t.holder_pid)?"dead-pid":"stale"}function ux(t){return{sender:qi(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:t.holder_host,started_at:t.started_at}}function wn(t,e){return t.prepare(`SELECT message_id, lifecycle_state, delivery_lease_id, last_seq
1118
+ AND currently_handling_message_id = ?`).run(e,r,n).changes===1}function dx(t,e){let r=e??new Date(Date.now()-wn()).toISOString();return Ui({holder_pid:t.holder_pid,started_at:t.started_at??""},r)}function cx(t,e,r){return e==="force"||e==="session-idle"?e:r?"force":t.holder_pid!==null&&!He(t.holder_pid)?"dead-pid":"stale"}function ux(t){return{sender:qi(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:t.holder_host,started_at:t.started_at}}function Tn(t,e){return t.prepare(`SELECT message_id, lifecycle_state, delivery_lease_id, last_seq
1119
1119
  FROM message_pending WHERE message_id = ?`).get(e)??null}function er(t,e){if(t!==1)throw new Error(`event projection CAS failed during ${e}`)}function Ql(t,e={},r={}){return{message_id:$e(t.id),message_type:t.message_type,sender:t.sender_teamfile===null?null:Wi(t.sender_teamfile,t.sender_alias??"",r),receiver:Wi(t.receiver_teamfile,t.receiver_alias,e),root_teamfile:t.root_teamfile,legacy:{table:"agent_mailbox",id:t.id}}}function ed(t,e,r={},n={},s=[]){let i=$e(e.id),o=e.message_type==="response",a=o&&e.request_mailbox_id!==null?mx(t,e.request_mailbox_id):{},l={provider:a.provider??r.provider,sessionId:a.sessionId??r.sessionId},d=e.request_mailbox_id===null?null:$e(e.request_mailbox_id),c=Ql(e,l,n);Ie(t,{stream_id:i,event_type:o?"RESPONSE_CREATE":"CREATE",observedLastSeq:0,ts:e.created_at,payload:{...c,content:e.payload,...o?{}:Kp(t,e.sender_teamfile,e.sender_alias),...o?{in_reply_to_message_id:d,...s.length>0?{batched_request_message_ids:s}:{}}:{}}},()=>{}),Ie(t,{stream_id:i,event_type:o?"RESPONSE_ENQUEUE":"ENQUEUE",observedLastSeq:0,ts:e.created_at,payload:{...c,...o?{in_reply_to_message_id:d}:{}}},u=>{t.prepare(`INSERT INTO message_pending
1120
1120
  (message_id, message_type, in_reply_to, sender_teamfile, sender_alias,
1121
1121
  receiver_teamfile, receiver_alias, lifecycle_state, created_seq, last_seq)
@@ -1127,23 +1127,23 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
1127
1127
  WHERE stream_id = ? AND event_type = 'CREATE'
1128
1128
  ORDER BY seq ASC
1129
1129
  LIMIT 1
1130
- `).get($e(e));return{provider:typeof r?.provider=="string"?r.provider:null,sessionId:typeof r?.session_id=="string"?r.session_id:null}}function td(t,e,r){let n=bn(e),s=qi(r.sender_teamfile,r.sender_alias),i=Wi(r.receiver_teamfile,r.receiver_alias,{provider:r.receiver_provider,sessionId:r.receiver_session_id}),o={message_id:n,message_type:"request",sender:s,receiver:i,root_teamfile:r.root_teamfile,legacy:{table:"team_chat_log",id:e}};return Ie(t,{stream_id:n,event_type:"CREATE",observedLastSeq:0,ts:r.created_at,payload:{...o,content:r.message,provider_prompt:r.provider_prompt??r.message,origin:r.origin,...Kp(t,r.sender_teamfile,r.sender_alias)}},()=>{vn(t,r.receiver_teamfile,r.receiver_alias,n,r.created_at)}),n}function rd(t,e,r){let n=bn(e),s={message_id:n,message_type:"request",sender:qi(r.sender_teamfile,r.sender_alias),receiver:Wi(r.receiver_teamfile,r.receiver_alias,{provider:r.receiver_provider,sessionId:r.receiver_session_id}),root_teamfile:r.root_teamfile,legacy:{table:"team_chat_log",id:e}};return Ie(t,{stream_id:n,event_type:"HANDLED",observedLastSeq:1,ts:r.created_at,payload:{...s,outcome:r.status,receipt:r.response,error:r.error_detail,truncated:r.truncated===1}},()=>{Bi(t,r.receiver_teamfile,r.receiver_alias,n)}),n}function Vp(t,e,r,n,s){let i=$e(e.id),o=wn(t,i);if(o===null||o.lifecycle_state!=="queued")return;let a=`delivery_${Gp()}`;Ie(t,{stream_id:i,event_type:"DELIVER_CLAIM",observedLastSeq:o.last_seq,ts:r,payload:{...Ql(e),lease_id:a,pid:n,host:s}},l=>{let d=t.prepare(`UPDATE message_pending
1130
+ `).get($e(e));return{provider:typeof r?.provider=="string"?r.provider:null,sessionId:typeof r?.session_id=="string"?r.session_id:null}}function td(t,e,r){let n=Gr(e),s=qi(r.sender_teamfile,r.sender_alias),i=Wi(r.receiver_teamfile,r.receiver_alias,{provider:r.receiver_provider,sessionId:r.receiver_session_id}),o={message_id:n,message_type:"request",sender:s,receiver:i,root_teamfile:r.root_teamfile,legacy:{table:"team_chat_log",id:e}};return Ie(t,{stream_id:n,event_type:"CREATE",observedLastSeq:0,ts:r.created_at,payload:{...o,content:r.message,provider_prompt:r.provider_prompt??r.message,origin:r.origin,...Kp(t,r.sender_teamfile,r.sender_alias)}},()=>{bn(t,r.receiver_teamfile,r.receiver_alias,n,r.created_at)}),n}function rd(t,e,r){let n=Gr(e),s={message_id:n,message_type:"request",sender:qi(r.sender_teamfile,r.sender_alias),receiver:Wi(r.receiver_teamfile,r.receiver_alias,{provider:r.receiver_provider,sessionId:r.receiver_session_id}),root_teamfile:r.root_teamfile,legacy:{table:"team_chat_log",id:e}};return Ie(t,{stream_id:n,event_type:"HANDLED",observedLastSeq:1,ts:r.created_at,payload:{...s,outcome:r.status,receipt:r.response,error:r.error_detail,truncated:r.truncated===1}},()=>{Bi(t,r.receiver_teamfile,r.receiver_alias,n)}),n}function Vp(t,e,r,n,s){let i=$e(e.id),o=Tn(t,i);if(o===null||o.lifecycle_state!=="queued")return;let a=`delivery_${Gp()}`;Ie(t,{stream_id:i,event_type:"DELIVER_CLAIM",observedLastSeq:o.last_seq,ts:r,payload:{...Ql(e),lease_id:a,pid:n,host:s}},l=>{let d=t.prepare(`UPDATE message_pending
1131
1131
  SET lifecycle_state = 'claimed',
1132
1132
  delivery_lease_id = ?,
1133
1133
  delivery_holder_pid = ?,
1134
1134
  last_seq = ?
1135
- WHERE message_id = ? AND lifecycle_state = 'queued' AND last_seq = ?`).run(a,n,l,i,o.last_seq);er(d.changes,"DELIVER_CLAIM")})}function nd(t,e,r,n=new Date().toISOString()){let s=$e(e.id),i=wn(t,s);if(i===null||i.lifecycle_state!=="claimed")return;let o={message_id:s,message_type:e.message_type,sender:qi(e.sender_teamfile,e.sender_alias),receiver:Qt(e.receiver_teamfile,e.receiver_alias),root_teamfile:e.root_teamfile,legacy:{table:"agent_mailbox",id:e.id}};Ie(t,{stream_id:s,event_type:"DELIVER_CLAIM_RELEASE",observedLastSeq:i.last_seq,ts:n,payload:{...o,reason:r,delivery_lease_id:i.delivery_lease_id,previous_holder:{pid:e.delivery_holder_pid,host:e.delivery_holder_host}}},a=>{let l=t.prepare(`UPDATE message_pending
1135
+ WHERE message_id = ? AND lifecycle_state = 'queued' AND last_seq = ?`).run(a,n,l,i,o.last_seq);er(d.changes,"DELIVER_CLAIM")})}function nd(t,e,r,n=new Date().toISOString()){let s=$e(e.id),i=Tn(t,s);if(i===null||i.lifecycle_state!=="claimed")return;let o={message_id:s,message_type:e.message_type,sender:qi(e.sender_teamfile,e.sender_alias),receiver:Qt(e.receiver_teamfile,e.receiver_alias),root_teamfile:e.root_teamfile,legacy:{table:"agent_mailbox",id:e.id}};Ie(t,{stream_id:s,event_type:"DELIVER_CLAIM_RELEASE",observedLastSeq:i.last_seq,ts:n,payload:{...o,reason:r,delivery_lease_id:i.delivery_lease_id,previous_holder:{pid:e.delivery_holder_pid,host:e.delivery_holder_host}}},a=>{let l=t.prepare(`UPDATE message_pending
1136
1136
  SET lifecycle_state = 'queued',
1137
1137
  delivery_lease_id = NULL,
1138
1138
  delivery_holder_pid = NULL,
1139
1139
  last_seq = ?
1140
1140
  WHERE message_id = ? AND lifecycle_state = 'claimed'
1141
- AND delivery_lease_id IS ? AND last_seq = ?`).run(a,s,i.delivery_lease_id,i.last_seq);er(l.changes,"DELIVER_CLAIM_RELEASE")})}function Ss(t,e,r,n,s=null,i=null){let o=$e(e.id),a=wn(t,o);a!==null&&Ie(t,{stream_id:o,event_type:e.message_type==="response"?"RESPONSE_DELIVERED":"DELIVERED",observedLastSeq:a.last_seq,ts:n,payload:{...Ql(e),receipt:r,...s===null?{}:{batch_response_message_id:s}}},()=>{let l=t.prepare("DELETE FROM message_pending WHERE message_id = ? AND last_seq = ?").run(o,a.last_seq);er(l.changes,"DELIVERED"),i?.action==="set"?vn(t,e.receiver_teamfile,e.receiver_alias,i.messageId,n):i?.action==="clear"&&Bi(t,e.receiver_teamfile,e.receiver_alias,i.messageId)})}function fx(t){return{sender:Qt(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at}}function Yp(t,e,r,n){let s=t.prepare(`UPDATE agent_state
1141
+ AND delivery_lease_id IS ? AND last_seq = ?`).run(a,s,i.delivery_lease_id,i.last_seq);er(l.changes,"DELIVER_CLAIM_RELEASE")})}function Ss(t,e,r,n,s=null,i=null){let o=$e(e.id),a=Tn(t,o);a!==null&&Ie(t,{stream_id:o,event_type:e.message_type==="response"?"RESPONSE_DELIVERED":"DELIVERED",observedLastSeq:a.last_seq,ts:n,payload:{...Ql(e),receipt:r,...s===null?{}:{batch_response_message_id:s}}},()=>{let l=t.prepare("DELETE FROM message_pending WHERE message_id = ? AND last_seq = ?").run(o,a.last_seq);er(l.changes,"DELIVERED"),i?.action==="set"?bn(t,e.receiver_teamfile,e.receiver_alias,i.messageId,n):i?.action==="clear"&&Bi(t,e.receiver_teamfile,e.receiver_alias,i.messageId)})}function fx(t){return{sender:Qt(t.sender_teamfile,t.sender_alias),holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at}}function Yp(t,e,r,n){let s=t.prepare(`UPDATE agent_state
1142
1142
  SET lease_id = NULL, sender_teamfile = NULL, sender_alias = NULL,
1143
1143
  holder_pid = NULL, holder_host = NULL, started_at = NULL,
1144
1144
  last_heartbeat_at = NULL, last_seq = ?
1145
1145
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1146
- AND lease_id IS ? AND last_seq = ?`).run(r,e.receiver_teamfile,e.receiver_alias,e.lease_id,e.last_seq);er(s.changes,n)}function zp(t,e,r,n,s=null,i=!1){let o=ox();if(r!==null&&n===null)throw new Error("agent inflight takeover is missing a reclaim reason");let a=Tn(t,e.receiver_teamfile,e.receiver_alias);if(a!==null&&a.lease_id!==null){if(!(i||dx(a,s)))throw new Error("event projection rejected INFLIGHT_TAKE: receiver already holds a live lease");let u=cx(a,n,i),m=ux(a),f=a.lease_id;Ie(t,{stream_id:f,event_type:"INFLIGHT_RECLAIM",observedLastSeq:a.last_seq,ts:e.started_at,payload:{receiver:Qt(e.receiver_teamfile,e.receiver_alias),reason:u,previous_holder:m}},p=>Yp(t,a,p,"INFLIGHT_RECLAIM")),a=Tn(t,e.receiver_teamfile,e.receiver_alias)}let l=a?.last_seq??0,d=`lease_${Gp()}`;return Ie(t,{stream_id:d,event_type:"INFLIGHT_TAKE",observedLastSeq:l,ts:e.started_at,payload:{lease_id:d,receiver:Qt(e.receiver_teamfile,e.receiver_alias),sender:Qt(e.sender_teamfile,e.sender_alias),holder_pid:e.holder_pid,holder_host:o,started_at:e.started_at}},c=>{if(a===null){t.prepare(`INSERT INTO agent_state
1146
+ AND lease_id IS ? AND last_seq = ?`).run(r,e.receiver_teamfile,e.receiver_alias,e.lease_id,e.last_seq);er(s.changes,n)}function zp(t,e,r,n,s=null,i=!1){let o=ox();if(r!==null&&n===null)throw new Error("agent inflight takeover is missing a reclaim reason");let a=vn(t,e.receiver_teamfile,e.receiver_alias);if(a!==null&&a.lease_id!==null){if(!(i||dx(a,s)))throw new Error("event projection rejected INFLIGHT_TAKE: receiver already holds a live lease");let u=cx(a,n,i),m=ux(a),f=a.lease_id;Ie(t,{stream_id:f,event_type:"INFLIGHT_RECLAIM",observedLastSeq:a.last_seq,ts:e.started_at,payload:{receiver:Qt(e.receiver_teamfile,e.receiver_alias),reason:u,previous_holder:m}},p=>Yp(t,a,p,"INFLIGHT_RECLAIM")),a=vn(t,e.receiver_teamfile,e.receiver_alias)}let l=a?.last_seq??0,d=`lease_${Gp()}`;return Ie(t,{stream_id:d,event_type:"INFLIGHT_TAKE",observedLastSeq:l,ts:e.started_at,payload:{lease_id:d,receiver:Qt(e.receiver_teamfile,e.receiver_alias),sender:Qt(e.sender_teamfile,e.sender_alias),holder_pid:e.holder_pid,holder_host:o,started_at:e.started_at}},c=>{if(a===null){t.prepare(`INSERT INTO agent_state
1147
1147
  (receiver_teamfile, receiver_alias, lease_id, sender_teamfile,
1148
1148
  sender_alias, holder_pid, holder_host, started_at,
1149
1149
  last_heartbeat_at, last_seq)
@@ -1157,13 +1157,13 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
1157
1157
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1158
1158
  AND lease_id = ?
1159
1159
  AND sender_teamfile = ? AND sender_alias = ?
1160
- AND started_at = ? AND holder_pid IS ?`).run(n,e.receiver_teamfile,e.receiver_alias,r,e.sender_teamfile,e.sender_alias,e.started_at,e.holder_pid).changes===1}function ks(t,e,r,n){let s=Tn(t,e.receiver_teamfile,e.receiver_alias);s===null||s.lease_id===null||Ie(t,{stream_id:s.lease_id,event_type:r,observedLastSeq:s.last_seq,payload:{receiver:Qt(e.receiver_teamfile,e.receiver_alias),...r==="INFLIGHT_RECLAIM"?{reason:n??"stale",previous_holder:fx(e)}:{lease_id:s.lease_id}}},i=>Yp(t,s,i,r))}function Qp(t,e){let r=Tn(t,e.teamfile,e.alias),n=r?.last_seq??0;Ie(t,{stream_id:e.lock_id,event_type:"TERMINAL_LOCK_TAKE",observedLastSeq:n,ts:e.started_at,payload:{receiver:Qt(e.teamfile,e.alias),lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at}},s=>{if(r===null){t.prepare(`INSERT INTO agent_state
1160
+ AND started_at = ? AND holder_pid IS ?`).run(n,e.receiver_teamfile,e.receiver_alias,r,e.sender_teamfile,e.sender_alias,e.started_at,e.holder_pid).changes===1}function ks(t,e,r,n){let s=vn(t,e.receiver_teamfile,e.receiver_alias);s===null||s.lease_id===null||Ie(t,{stream_id:s.lease_id,event_type:r,observedLastSeq:s.last_seq,payload:{receiver:Qt(e.receiver_teamfile,e.receiver_alias),...r==="INFLIGHT_RECLAIM"?{reason:n??"stale",previous_holder:fx(e)}:{lease_id:s.lease_id}}},i=>Yp(t,s,i,r))}function Qp(t,e){let r=vn(t,e.teamfile,e.alias),n=r?.last_seq??0;Ie(t,{stream_id:e.lock_id,event_type:"TERMINAL_LOCK_TAKE",observedLastSeq:n,ts:e.started_at,payload:{receiver:Qt(e.teamfile,e.alias),lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at}},s=>{if(r===null){t.prepare(`INSERT INTO agent_state
1161
1161
  (receiver_teamfile, receiver_alias, terminal_lock_id, last_seq)
1162
1162
  VALUES (?, ?, ?, ?)`).run(e.teamfile,e.alias,e.lock_id,s);return}let i=t.prepare(`UPDATE agent_state SET terminal_lock_id = ?, last_seq = ?
1163
1163
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1164
- AND terminal_lock_id IS NULL AND last_seq = ?`).run(e.lock_id,s,e.teamfile,e.alias,r.last_seq);er(i.changes,"TERMINAL_LOCK_TAKE")})}function sd(t,e,r=!1){let n=Tn(t,e.teamfile,e.alias);n===null||n.terminal_lock_id!==e.lock_id||Ie(t,{stream_id:e.lock_id,event_type:r?"TERMINAL_LOCK_EXPIRE":"TERMINAL_LOCK_RELEASE",observedLastSeq:n.last_seq,payload:{receiver:Qt(e.teamfile,e.alias),lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host}},s=>{let i=t.prepare(`UPDATE agent_state SET terminal_lock_id = NULL, last_seq = ?
1164
+ AND terminal_lock_id IS NULL AND last_seq = ?`).run(e.lock_id,s,e.teamfile,e.alias,r.last_seq);er(i.changes,"TERMINAL_LOCK_TAKE")})}function sd(t,e,r=!1){let n=vn(t,e.teamfile,e.alias);n===null||n.terminal_lock_id!==e.lock_id||Ie(t,{stream_id:e.lock_id,event_type:r?"TERMINAL_LOCK_EXPIRE":"TERMINAL_LOCK_RELEASE",observedLastSeq:n.last_seq,payload:{receiver:Qt(e.teamfile,e.alias),lock_id:e.lock_id,holder_pid:e.holder_pid,holder_host:e.holder_host}},s=>{let i=t.prepare(`UPDATE agent_state SET terminal_lock_id = NULL, last_seq = ?
1165
1165
  WHERE receiver_teamfile = ? AND receiver_alias = ?
1166
- AND terminal_lock_id = ? AND last_seq = ?`).run(s,e.teamfile,e.alias,e.lock_id,n.last_seq);er(i.changes,r?"TERMINAL_LOCK_EXPIRE":"TERMINAL_LOCK_RELEASE")})}function e_(t,e,r){let n=Tn(t,r.targetTeamfile,r.targetAlias);if(n===null){t.prepare(`INSERT INTO agent_state
1166
+ AND terminal_lock_id = ? AND last_seq = ?`).run(s,e.teamfile,e.alias,e.lock_id,n.last_seq);er(i.changes,r?"TERMINAL_LOCK_EXPIRE":"TERMINAL_LOCK_RELEASE")})}function e_(t,e,r){let n=vn(t,r.targetTeamfile,r.targetAlias);if(n===null){t.prepare(`INSERT INTO agent_state
1167
1167
  (receiver_teamfile, receiver_alias, terminal_invocation_id,
1168
1168
  terminal_invocation_pid, terminal_invocation_host,
1169
1169
  terminal_invocation_heartbeat_at, last_seq)
@@ -1184,10 +1184,10 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
1184
1184
  AND terminal_invocation_id = ? AND last_seq = ?`).run(e,n.receiver_teamfile,n.receiver_alias,r,n.last_seq);er(s.changes,"terminal INVOCATION_FINISH")}function n_(t,e){let r=e.ts??new Date().toISOString();return t.transaction(()=>{let n=t.prepare(`SELECT seq FROM message_event
1185
1185
  WHERE stream_id = ? AND event_type = 'MESSAGE_HANDLING_STARTED'
1186
1186
  AND json_extract(payload, '$.handling_by') = ?
1187
- ORDER BY seq LIMIT 1`).get(e.messageId,e.handlingBy);if(n!==void 0)return vn(t,e.handlingTeamfile,e.handlingAlias,e.messageId,r),{appended:!1,seq:n.seq,handling_at:r};let s=t.prepare("SELECT COALESCE(MAX(seq), 0) AS s FROM message_event WHERE stream_id = ?").get(e.messageId).s,i=Ie(t,{stream_id:e.messageId,event_type:"MESSAGE_HANDLING_STARTED",intentKey:`MESSAGE_HANDLING_STARTED:${e.handlingBy}`,observedLastSeq:s,ts:r,payload:{handling_by:e.handlingBy,handling_at:r}},()=>{vn(t,e.handlingTeamfile,e.handlingAlias,e.messageId,r)});return{appended:i.appended,seq:i.seq,handling_at:r}})()}function s_(t,e){let r=t.prepare(`SELECT seq FROM message_event
1187
+ ORDER BY seq LIMIT 1`).get(e.messageId,e.handlingBy);if(n!==void 0)return bn(t,e.handlingTeamfile,e.handlingAlias,e.messageId,r),{appended:!1,seq:n.seq,handling_at:r};let s=t.prepare("SELECT COALESCE(MAX(seq), 0) AS s FROM message_event WHERE stream_id = ?").get(e.messageId).s,i=Ie(t,{stream_id:e.messageId,event_type:"MESSAGE_HANDLING_STARTED",intentKey:`MESSAGE_HANDLING_STARTED:${e.handlingBy}`,observedLastSeq:s,ts:r,payload:{handling_by:e.handlingBy,handling_at:r}},()=>{bn(t,e.handlingTeamfile,e.handlingAlias,e.messageId,r)});return{appended:i.appended,seq:i.seq,handling_at:r}})()}function s_(t,e){let r=t.prepare(`SELECT seq FROM message_event
1188
1188
  WHERE stream_id = ? AND event_type = 'MESSAGE_ACKNOWLEDGED'
1189
1189
  AND json_extract(payload, '$.acked_by') = ?
1190
- ORDER BY seq LIMIT 1`).get(e.messageId,e.ackedBy),n=e.terminalizePending===!0,s=()=>t.prepare("DELETE FROM message_pending WHERE message_id = ? AND lifecycle_state = 'queued'").run(e.messageId).changes===1?(Jp(t,e.messageId,e.ackedBy,e.ts),"removed"):wn(t,e.messageId)===null?"not-pending":"claimed";if(r!==void 0)return{appended:!1,seq:r.seq,pending_outcome:n?s():"record-only"};let i=t.prepare("SELECT COALESCE(MAX(seq), 0) AS s FROM message_event WHERE stream_id = ?").get(e.messageId).s,o=wn(t,e.messageId),a=n?"not-pending":"record-only",l=Ie(t,{stream_id:e.messageId,event_type:"MESSAGE_ACKNOWLEDGED",intentKey:`MESSAGE_ACKNOWLEDGED:${e.ackedBy}`,observedLastSeq:i,...e.ts!==void 0?{ts:e.ts}:{},payload:{acked_by:e.ackedBy,acked_at:e.ts??new Date().toISOString(),...e.note!==void 0?{note:e.note}:{},pid:e.holderPid??null,host:e.holderHost??null}},()=>{if(!n)return;t.prepare("DELETE FROM message_pending WHERE message_id = ? AND lifecycle_state = 'queued'").run(e.messageId).changes===1?(a="removed",Jp(t,e.messageId,e.ackedBy,e.ts)):o!==null&&(a="claimed")});if(!l.appended){let d=wn(t,e.messageId);a=n?d===null?"removed":"claimed":"record-only"}return{appended:l.appended,seq:l.seq,pending_outcome:a}}function Jp(t,e,r,n){let s=/^msg_mbx_(\d+)$/.exec(e);s!==null&&t.prepare(`UPDATE agent_mailbox
1190
+ ORDER BY seq LIMIT 1`).get(e.messageId,e.ackedBy),n=e.terminalizePending===!0,s=()=>t.prepare("DELETE FROM message_pending WHERE message_id = ? AND lifecycle_state = 'queued'").run(e.messageId).changes===1?(Jp(t,e.messageId,e.ackedBy,e.ts),"removed"):Tn(t,e.messageId)===null?"not-pending":"claimed";if(r!==void 0)return{appended:!1,seq:r.seq,pending_outcome:n?s():"record-only"};let i=t.prepare("SELECT COALESCE(MAX(seq), 0) AS s FROM message_event WHERE stream_id = ?").get(e.messageId).s,o=Tn(t,e.messageId),a=n?"not-pending":"record-only",l=Ie(t,{stream_id:e.messageId,event_type:"MESSAGE_ACKNOWLEDGED",intentKey:`MESSAGE_ACKNOWLEDGED:${e.ackedBy}`,observedLastSeq:i,...e.ts!==void 0?{ts:e.ts}:{},payload:{acked_by:e.ackedBy,acked_at:e.ts??new Date().toISOString(),...e.note!==void 0?{note:e.note}:{},pid:e.holderPid??null,host:e.holderHost??null}},()=>{if(!n)return;t.prepare("DELETE FROM message_pending WHERE message_id = ? AND lifecycle_state = 'queued'").run(e.messageId).changes===1?(a="removed",Jp(t,e.messageId,e.ackedBy,e.ts)):o!==null&&(a="claimed")});if(!l.appended){let d=Tn(t,e.messageId);a=n?d===null?"removed":"claimed":"record-only"}return{appended:l.appended,seq:l.seq,pending_outcome:a}}function Jp(t,e,r,n){let s=/^msg_mbx_(\d+)$/.exec(e);s!==null&&t.prepare(`UPDATE agent_mailbox
1191
1191
  SET delivered_at = ?, receipt = ?
1192
1192
  WHERE id = ? AND delivered_at IS NULL`).run(n??new Date().toISOString(),`[acknowledged by ${r}]`,Number(s[1]))}var ax,kn=w(()=>{"use strict";Fi();ht();Jr();ax=60*60*1e3});function i_(t,e){return t.prepare("SELECT last_seq FROM invocation_state WHERE invocation_id = ?").get(e)??null}function id(t){return t.launch_source==="terminal"&&t.target_teamfile!==null}function o_(t,e){let r=Sn(e.id),n=e.target_teamfile===null?null:{teamfile:e.target_teamfile,alias:e.target_alias??""},s=e.last_heartbeat_at??e.started_at;Ie(t,{stream_id:r,event_type:px,observedLastSeq:0,ts:e.started_at,payload:{invocation_id:r,kind:e.kind,origin:e.origin,launch_source:e.launch_source,from_identity:e.from_identity,target:n,root_teamfile:e.root_teamfile,scope_teamfile:e.scope_teamfile,cwd:e.cwd,command:e.command,request_payload:e.request_payload,request_message_id:e.team_chat_log_id===null?null:`msg_tcl_${e.team_chat_log_id}`,holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,legacy:{table:"tracked_invocation",id:e.id}}},i=>{t.prepare(`INSERT INTO invocation_state
1193
1193
  (invocation_id, kind, origin, launch_source, from_identity, target_teamfile, target_alias,
@@ -1596,7 +1596,7 @@ var PN=Object.defineProperty;var w=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{f
1596
1596
  error_detail = ?,
1597
1597
  truncated = ?
1598
1598
  WHERE id = ?
1599
- `),...Dp(t),...Cp(t)}}function kx(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var ld,dt=w(()=>{"use strict";Yl();$p();jp();Pi();Wp();Jr();pe();kn();c_();Ns();ld=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;recvMailboxMessagesTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=Sx(e),this.claimTxn=e.transaction((r,n,s)=>{let i=this.stmts.selectClaimableJob.get(s,s,s);return i===void 0||this.stmts.claimJob.run(r,n,s,i.id,s,s,s).changes!==1?null:this.getJob(i.id)}),this.claimWithConcurrencyTxn=e.transaction((r,n,s,i)=>{let o=this.stmts.selectClaimableJobs.all(s,s,s);for(let a of o){let l=this.getJob(a.id);if(l===null)continue;let d=i(l);if(d.concurrency_key!==null&&(l.concurrency_key_resolved!==d.concurrency_key&&this.stmts.setJobConcurrencyKey.run(d.concurrency_key,l.id),(this.stmts.countRunningByConcurrencyKey.get(d.concurrency_key,s,l.id)?.count??0)>=Math.max(1,d.concurrent_limit)))continue;if(this.stmts.claimJob.run(r,n,s,l.id,s,s,s).changes===1)return this.getJob(l.id)}return null}),this.claimByIdWithConcurrencyTxn=e.transaction((r,n,s,i,o)=>{let a=this.getJob(r);if(a===null)return{claimed:!1,reason:"not_found",job_id:r};if(a.locked_until!==null&&a.locked_until>=i)return{claimed:!1,reason:"locked",job_id:r,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let d=a.status==="queued"&&a.available_at<=i,c=a.status==="running"&&a.locked_until!==null&&a.locked_until<i;if(!d&&!c)return{claimed:!1,reason:"not_claimable",job_id:r,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let u=o(a);if(u.concurrency_key!==null&&(a.concurrency_key_resolved!==u.concurrency_key&&this.stmts.setJobConcurrencyKey.run(u.concurrency_key,a.id),(this.stmts.countRunningByConcurrencyKey.get(u.concurrency_key,i,a.id)?.count??0)>=Math.max(1,u.concurrent_limit)))return{claimed:!1,reason:"concurrency_limit",job_id:r,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};if(this.stmts.claimJob.run(n,s,i,a.id,i,i,i).changes!==1){let p=this.getJob(a.id);return{claimed:!1,reason:p?.locked_until!==null&&p?.locked_until!==void 0&&p.locked_until>=i?"locked":"not_claimable",job_id:r,status:p?.status??a.status,locked_by:p?.locked_by??a.locked_by,locked_until:p?.locked_until??a.locked_until}}let f=this.getJob(a.id);return f===null?{claimed:!1,reason:"not_found",job_id:r}:{claimed:!0,job:f}}),this.resumeRunTxn=e.transaction((r,n,s)=>kx("state_not_found")),this.resumeInteractiveTxn=e.transaction((r,n,s,i)=>{let o=this.getInteractiveSessionByStepId(r);if(o===null)return{resumed:!1,reason:"not_found"};if(o.status!=="waiting_operator")return{resumed:!1,reason:"not_waiting_operator"};let a=this.getRun(o.run_id);if(a===null)return{resumed:!1,reason:"run_not_found"};let l=s?"done":"waiting_agent";return this.stmts.updateInteractiveSession.run(l,n,Date.now(),o.id),this.stmts.resumeRunState.run(o.state_name,a.id),this.stmts.requeuePausedJob.run(i,a.job_id),{resumed:!0,session:this.getInteractiveSessionByStepId(r),run:this.getRun(a.id),job:this.getJob(a.job_id)}}),this.resumeEscalationTxn=e.transaction((r,n,s)=>{let i=this.stmts.getAttention.get(r);if(i===void 0)return{resumed:!1,reason:"not_found"};if(i.kind!==Xi)return{resumed:!1,reason:"wrong_kind"};if(i.acknowledged_at!==null)return{resumed:!1,reason:"already_acked"};if(i.run_id===null)return{resumed:!1,reason:"run_not_found"};let o=null,a=[];if(i.payload!==null)try{let c=JSON.parse(i.payload);c.step!==void 0&&typeof c.step.id=="string"&&c.step.id.length>0&&(o=c.step.id),Array.isArray(c.declared_outcomes)&&(a=c.declared_outcomes.filter(u=>typeof u=="string"))}catch{}if(o===null)return{resumed:!1,reason:"no_step"};let l=this.getRun(i.run_id);if(l===null)return{resumed:!1,reason:"run_not_found"};if(n!==Is&&!a.includes(n))return{resumed:!1,reason:m_};let d={};if(l.pending_escalation_decision!==null)try{let c=JSON.parse(l.pending_escalation_decision);c!==null&&typeof c=="object"&&!Array.isArray(c)&&(d=c)}catch{d={}}return d[o]=n,this.stmts.setRunPendingEscalationDecision.run(JSON.stringify(d),l.id),this.stmts.resumeRunState.run(o,l.id),this.stmts.requeuePausedJob.run(s,l.job_id),this.stmts.ackAttention.run(s,r),{resumed:!0,run:this.getRun(l.id),job:this.getJob(l.job_id)}}),this.tryAcquireAgentInflightTxn=(r,n={})=>{this.db.exec("BEGIN IMMEDIATE");try{let s=this.getAgentInflight(r.receiver_teamfile,r.receiver_alias),i=n.reclaim_observed,o=this.stmts.acquireAgentInflight.get({...r,holder_pid:process.pid,stale_before:n.stale_before??null,force:n.force===!0?1:0,reclaim_observed_sender_teamfile:i?.sender_teamfile??null,reclaim_observed_sender_alias:i?.sender_alias??null,reclaim_observed_started_at:i?.started_at??null,reclaim_observed_holder_pid:typeof i?.holder_pid=="number"?i.holder_pid:null}),a;if(o!==void 0){let l=s===null?null:n.reclaim_reason??(n.force===!0?"force":n.reclaim_observed!==void 0?"dead-pid":"stale"),d=zp(this.db,o,s,l,n.stale_before??null,n.force===!0);a={acquired:!0,current:o,lease_id:d}}else a={acquired:!1,current:this.getAgentInflight(r.receiver_teamfile,r.receiver_alias)??(()=>{throw new Error("agent_inflight conflict row disappeared during acquire")})()};return this.db.exec("COMMIT"),a}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}},this.recvMailboxMessagesTxn=e.transaction((r,n)=>{let s=this.stmts.listAllMailboxMessagesForReceiver.all(r,n),i=Xr(s.filter(a=>a.message_type==="request")),o=i===null?null:{action:"set",messageId:$e(i.id)};for(let a of s)Ss(this.db,a,"",D(),null,a.message_type==="request"?o:null),this.stmts.deleteMailboxMessage.run(a.id);return s})}close(){this.db.close()}query(e,...r){let n=e.trim().toLowerCase();if(!n.startsWith("select")&&!n.startsWith("with")&&!n.startsWith("pragma"))throw new Error("Dal.query only allows read-only SELECT/WITH/PRAGMA statements");return this.db.prepare(e).all(...r)}insertWorkflow(e){__(e.name,e.definition,o=>this.getWorkflowByName(o));let r=this.stmts.insertWorkflow.run(e.name,e.version??1,e.definition_schema_version??1,e.definition,D()),n=this.getWorkflow(Number(r.lastInsertRowid)),s=this.stmts.insertWorkflowVersion.run(n.id,n.version,e.definition,e.author??null,D());this.stmts.updateWorkflowActiveVersion.run(s.lastInsertRowid,n.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,n.id);let i=this.getWorkflow(n.id);return this.syncWorkflowTriggers(n.id,e.definition),i}upsertWorkflow(e){__(e.name,e.definition,o=>this.getWorkflowByName(o));let r=this.getWorkflowByName(e.name);if(r===null)return this.insertWorkflow({name:e.name,definition_schema_version:e.definition_schema_version,definition:e.definition,author:e.author,source_uri:e.source_uri,source_sha256:e.source_sha256});let s=(this.stmts.getLatestWorkflowVersion.get(r.id)?.version??r.version)+1,i=this.stmts.insertWorkflowVersion.run(r.id,s,e.definition,e.author??null,D());return this.stmts.updateWorkflowActiveVersionDefinitionAndVersion.run(Number(i.lastInsertRowid),e.definition,e.definition_schema_version??r.definition_schema_version,s,r.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,r.id),this.syncWorkflowTriggers(r.id,e.definition),this.getWorkflow(r.id)}insertCompositionUnit(e){this.stmts.insertCompositionUnit.run(e.name,e.version,e.lang,e.source,e.source_sha,e.compiled_workflow_version_id,D())}getWorkflow(e){return this.stmts.getWorkflow.get(e)??null}getWorkflowByName(e,r){return(r===void 0?this.stmts.findWorkflowLatest.get(e):this.stmts.findWorkflowVersion.get(e,r))??null}findWorkflowByName(e,r){return this.getWorkflowByName(e,r)}insertWorkflowVersion(e,r,n){let i=(this.stmts.getLatestWorkflowVersion.get(e)?.version??0)+1,o=this.stmts.insertWorkflowVersion.run(e,i,r,n??null,D());return this.stmts.getWorkflowVersion.get(o.lastInsertRowid)}activateWorkflowVersion(e,r){let n=this.getWorkflowVersionById(r);if(n===null||n.workflow_id!==e)return null;let s=1;try{let i=JSON.parse(n.definition);typeof i.definition_schema_version=="number"&&(s=i.definition_schema_version)}catch{}return this.stmts.updateWorkflowActiveVersionAndDefinition.run(r,n.definition,s,e),this.syncWorkflowTriggers(e,n.definition),this.getWorkflow(e)}getWorkflowVersionById(e){return this.stmts.getWorkflowVersion.get(e)??null}listWorkflowVersions(e){return this.stmts.listWorkflowVersions.all(e)}upsertTriggerInstance(e){return this.stmts.upsertTriggerInstance.run(e.workflow_id,e.trigger_id,e.trigger_type,e.parameters,e.enabled===!1?0:1,D()),this.stmts.getTriggerInstanceByWorkflowAndId.get(e.workflow_id,e.trigger_id)}listTriggerInstancesForWorkflow(e){return this.stmts.listTriggerInstancesForWorkflow.all(e)}listEnabledTriggerInstances(){return this.stmts.listEnabledTriggerInstances.all()}setTriggerCursor(e,r){return this.stmts.setTriggerCursor.run(r,D(),e),this.stmts.getTriggerInstance.get(e)??null}setTriggerFailure(e,r){return this.stmts.setTriggerFailure.run(D(),r,e),this.stmts.getTriggerInstance.get(e)??null}syncWorkflowTriggers(e,r){let n;try{n=JSON.parse(r)}catch{return}if(n===null||typeof n!="object"||Array.isArray(n))return;let s=n.triggers;if(Array.isArray(s))for(let i of s){if(i===null||typeof i!="object"||Array.isArray(i))continue;let o=i;typeof o.id!="string"||o.id.length===0||typeof o.type!="string"||o.type.length===0||this.upsertTriggerInstance({workflow_id:e,trigger_id:o.id,trigger_type:o.type,parameters:JSON.stringify(o.parameters??{})})}}insertTeam(e){let r=this.stmts.insertTeam.run(e.name,D());return this.stmts.getTeam.get(r.lastInsertRowid)}getTeam(e){return this.stmts.getTeam.get(e)??null}findTeamByName(e){return this.stmts.findTeamByName.get(e)??null}listTeams(){return this.stmts.listTeams.all()}insertTeamMember(e){let r=this.stmts.insertTeamMember.run(e.team_id,e.alias,e.role??"agent",e.provider,e.model??null,e.sessionid??null,e.sessiondir,D());return this.stmts.getTeamMember.get(r.lastInsertRowid)}listTeamMembers(e){return this.stmts.listTeamMembers.all(e)}findTeamMemberByAlias(e,r){return this.stmts.findTeamMemberByAlias.get(e,r)??null}updateTeamMemberSession(e,r){return this.stmts.updateTeamMemberSession.run(r,e),this.stmts.getTeamMember.get(e)??null}setMemberState(e,r,n){return this.stmts.setMemberState.run(r,n??null,D(),e),this.stmts.getTeamMember.get(e)??null}listMembersInState(e){return this.stmts.listMembersInState.all(e)}setMemberPromptSnapshot(e,r){return this.stmts.setMemberPromptSnapshot.run(r,e),this.stmts.getTeamMember.get(e)??null}setMemberProviderResolved(e,r){return this.stmts.setMemberProviderResolved.run(r,e),this.stmts.getTeamMember.get(e)??null}setMemberRolePrompt(e,r){return this.stmts.setMemberRolePrompt.run(r,e),this.stmts.getTeamMember.get(e)??null}updateTeamMemberMeta(e,r){let n=this.stmts.getTeamMember.get(e);if(n===void 0)return null;let s=Object.prototype.hasOwnProperty.call(r,"role_prompt"),i=Object.prototype.hasOwnProperty.call(r,"model"),o=Object.prototype.hasOwnProperty.call(r,"provider");return this.stmts.updateTeamMemberMeta.run(s?r.role_prompt??null:n.role_prompt,i?r.model??null:n.model,o?r.provider??n.provider:n.provider,e),this.stmts.getTeamMember.get(e)??null}insertTeamMemberCompanion(e){let r=this.stmts.insertTeamMemberCompanion.run(e.interpreter_id,e.companion_id,D());return this.stmts.getTeamMemberCompanion.get(r.lastInsertRowid)}insertProject(e){let r=this.stmts.insertProject.run(e.name,e.description??null,e.local_path,e.workflow_name,e.team_id,e.default_branch??null,e.intake_config??null,e.test_argv??null,e.test_command??null,e.durable_memory_mode??"folder",D());return this.stmts.getProject.get(r.lastInsertRowid)}listProjects(){return this.stmts.listProjects.all()}getProject(e){return this.stmts.getProject.get(e)??null}findProjectByName(e){return this.stmts.findProjectByName.get(e)??null}setProjectIntakeConfig(e,r){return this.stmts.setProjectIntakeConfig.run(r,e),this.stmts.getProject.get(e)??null}updateProjectSettings(e,r){let n=this.stmts.getProject.get(e);if(n===void 0)return null;let s=Object.prototype.hasOwnProperty.call(r,"local_path"),i=Object.prototype.hasOwnProperty.call(r,"durable_memory_mode"),o=Object.prototype.hasOwnProperty.call(r,"default_branch"),a=Object.prototype.hasOwnProperty.call(r,"intake_config");return this.stmts.updateProjectSettings.run(s?r.local_path:n.local_path,i?r.durable_memory_mode:n.durable_memory_mode,o?r.default_branch??null:n.default_branch,a?r.intake_config??null:n.intake_config,e),this.stmts.getProject.get(e)??null}listProjectsWithIntakeEnabled(){return this.stmts.listProjectsWithIntakeConfig.all().filter(e=>{if(e.intake_config===null)return!1;try{let r=JSON.parse(e.intake_config);return typeof r=="object"&&r!==null&&!Array.isArray(r)&&r.scan_github_issues===!0}catch{return!1}})}getProjectByJob(e){return this.stmts.getProjectByJob.get(e)??null}insertProjectWorkflow(e){let r=e.condition??null,n=this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,r);if(n!==void 0)return n;let s=this.stmts.insertProjectWorkflow.run(e.project_id,e.workflow_id,r,e.parameters_override??null,e.enabled===!1?0:1,e.priority??100,D());return s.changes===1?this.stmts.getProjectWorkflow.get(s.lastInsertRowid):this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,r)}getProjectWorkflow(e){return this.stmts.getProjectWorkflow.get(e)??null}listProjectWorkflows(e,r={}){return r.enabled_only===!0?this.stmts.listEnabledProjectWorkflows.all(e):this.stmts.listProjectWorkflows.all(e)}removeProjectWorkflow(e){return this.stmts.removeProjectWorkflow.run(e).changes>0}setProjectWorkflowEnabled(e,r){return this.stmts.setProjectWorkflowEnabled.run(r?1:0,e),this.getProjectWorkflow(e)}createIssue(e){let r=D(),n=this.stmts.createIssue.run(e.project_id,e.title,e.body,e.severity??"medium",e.labels??null,e.ai_test_path??null,e.source_run_id??null,r,r);return this.stmts.getIssue.get(n.lastInsertRowid)}getIssue(e){return this.stmts.getIssue.get(e)??null}listIssues(e,r={}){return this.stmts.listIssuesForProject.all(e).filter(n=>!(r.status!==void 0&&!r.status.includes(n.status)||r.severity!==void 0&&!r.severity.includes(n.severity)||r.ai_test_path!==void 0&&n.ai_test_path!==r.ai_test_path))}claimNextIssue(e,r){return this.stmts.claimNextIssue.get(r,D(),e)??null}claimIssue(e,r){return this.stmts.claimIssue.get(r,D(),e)??null}closeIssue(e,r,n){let s=D(),i=this.stmts.closeIssue.get(r,n??null,s,s,e);if(i===void 0)throw new Error(`issue not found: ${e}`);return i}reopenIssue(e,r){let n=this.stmts.reopenIssue.get(r,D(),e);if(n===void 0)throw this.getIssue(e)===null?new Error(`issue not found: ${e}`):new Error(`issue ${e} is not closed`);return n}updateIssue(e,r){let n=this.getIssue(e);if(n===null)throw new Error(`issue not found: ${e}`);let s=Object.prototype.hasOwnProperty.call(r,"labels"),i=Object.prototype.hasOwnProperty.call(r,"ai_test_path"),o=this.stmts.updateIssue.get(r.title??n.title,r.body??n.body,r.severity??n.severity,s?r.labels??null:n.labels,i?r.ai_test_path??null:n.ai_test_path,D(),e);if(o===void 0)throw new Error(`issue not found: ${e}`);return o}listWorkflows(){return this.stmts.listWorkflows.all()}getOrCreateWebuiSession(e,r){let n=this.stmts.getWebuiSession.get(e);if(n!==void 0)return n;let s=D();return this.stmts.insertWebuiSession.run(e,r,"N1",null,null,null,null,"authenticated",s,s),this.stmts.getWebuiSession.get(e)}getWebuiSession(e){return this.stmts.getWebuiSession.get(e)??null}updateWebuiSessionTransition(e,r,n,s,i){if(this.stmts.updateWebuiSessionTransition.run(r,n,s,i,D(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}setWebuiSessionChatbot(e,r){if(this.stmts.setWebuiSessionChatbot.run(r,D(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}createChatbotSession(e,r){let n=p_(),s=D();return this.stmts.insertChatbotSession.run(n,e,r??null,s,s,"active"),this.stmts.getChatbotSession.get(n)}getChatbotSession(e){return this.stmts.getChatbotSession.get(e)??null}listChatbotSessions(e){return this.stmts.listChatbotSessionsForUser.all(e)}appendChatbotMessage(e,r,n,s){let i=D(),o=this.stmts.insertChatbotMessage.run(e,r,n,s??null,i);return this.stmts.touchChatbotSession.run(i,e),this.stmts.getChatbotMessage.get(o.lastInsertRowid)}listChatbotMessages(e){return this.stmts.listChatbotMessages.all(e)}getConfig(e){return this.stmts.getConfig.get(e)?.value??null}setConfig(e,r){this.stmts.upsertConfig.run(e,r,D())}getConfigAll(){let e=this.stmts.listConfig.all(),r={};for(let n of e)r[n.key]=n.value;return r}enqueueJob(e){let r=this.stmts.insertJob.run(e.project_id,e.workflow_id_override??null,e.source,e.source_ref??null,e.payload??null,e.priority??0,e.available_at??D(),e.dedupe_key??null,e.concurrency_key??null,D());if(r.changes===1)return this.stmts.getJob.get(r.lastInsertRowid);if(e.dedupe_key===void 0||e.dedupe_key===null)throw new Error("job insert ignored without dedupe key");return this.stmts.findJobByDedupe.get(e.source,e.dedupe_key)}claimNextJob(e){let r=D(),n=new Date(Date.now()+e.lease_ms).toISOString();return this.claimTxn(e.worker_id,n,r)}claimNextJobWithConcurrency(e){let r=D(),n=new Date(Date.now()+e.lease_ms).toISOString();return this.claimWithConcurrencyTxn(e.worker_id,n,r,e.evaluator)}claimJobByIdWithConcurrency(e){let r=D(),n=new Date(Date.now()+e.lease_ms).toISOString();return this.claimByIdWithConcurrencyTxn(e.job_id,e.worker_id,n,r,e.evaluator)}releaseJob(e,r,n){let s=r==="queued"||r==="running"?null:D();return this.stmts.releaseJob.run(r,n??null,s,e),this.getJob(e)}getJob(e){return this.stmts.getJob.get(e)??null}findJobBySourceAndDedupe(e,r){return this.stmts.findJobByDedupe.get(e,r)??null}insertRun(e){let r=this.getWorkflow(e.workflow_id);if(r===null)throw new Error(`workflow not found: ${e.workflow_id}`);let n=this.stmts.insertRun.run(e.job_id,e.workflow_id,e.team_id,e.current_state??null,r.active_version_id,e.parent_run_id??null,D()),s=this.stmts.getRun.get(n.lastInsertRowid);return(e.parent_run_id===void 0||e.parent_run_id===null)&&this.stmts.setJobRun.run(s.id,e.job_id),s}setJobRun(e,r){return this.stmts.setJobRun.run(r,e),this.getJob(e)}insertPromptDispatch(e){return this.stmts.insertPromptDispatch.run(e.prompt_id,e.project_id,e.job_id,e.text,e.context_json??null,D()),this.stmts.getPromptDispatch.get(e.prompt_id)}getPromptDispatch(e){return this.stmts.getPromptDispatch.get(e)??null}setPromptDispatchCompleted(e,r){return this.stmts.setPromptDispatchCompleted.run(r??D(),e),this.getPromptDispatch(e)}getWorkspace(e){return this.stmts.getWorkspace.get(e)??null}ensureWorkspace(e={}){let r=e.id??"default";this.stmts.ensureWorkspace.run(r,e.name??"Default workspace",e.idleThresholdMs??6e5,D());let n=this.getWorkspace(r);if(n===null)throw new Error(`workspace ${r} missing after upsert`);return n}listWebProjectsActive(e){return this.stmts.listWebProjectsActive.all(e)}getWebProject(e){return this.stmts.getWebProject.get(e)??null}insertWebProject(e){let r=D(),n=this.stmts.insertWebProject.run(e.workspace_id,e.name,e.repo_path,e.config_json??null,e.linked_v4_project_id??null,r,r),s=Number(n.lastInsertRowid),i=this.getWebProject(s);if(i===null)throw new Error(`web_project ${s} missing after insert`);return i}updateWebProject(e){let r=this.getWebProject(e.id);return r===null||r.deleted_at!==null?null:(this.stmts.updateWebProject.run(e.name??r.name,e.config_json===void 0?r.config_json:e.config_json,D(),e.id),this.getWebProject(e.id))}softDeleteWebProject(e){return this.stmts.softDeleteWebProject.run(D(),e).changes===1}loadMailboxCursor(e,r){return this.stmts.loadMailboxCursor.get(e,r)??null}saveMailboxCursor(e){this.stmts.saveMailboxCursor.run(e.user_id,e.mailbox_key,e.last_processed_version_id,e.last_processed_seq??null,e.last_processed_at)}addUsage(e){this.stmts.addUsage.run(e.user_id,e.device_id,e.period,e.put,e.get,e.list,e.updated_at)}loadUsage(e,r,n){return this.stmts.loadUsage.get(e,r,n)??null}sumUsageForPeriod(e,r){let n=this.stmts.sumUsageForPeriod.get(e,r);return{put:n?.put??0,get:n?.get??0,list:n?.list??0}}upsertRootTeam(e){this.stmts.upsertRootTeam.run(e.teamfile_path,e.name,e.raw_text,e.raw_sha256,e.registered_at,e.last_seeded_at)}getRootTeam(e){return this.stmts.getRootTeam.get(e)??null}listRootTeams(){return this.stmts.listRootTeams.all()}insertTeamChatLog(e){return this.db.transaction(()=>{let r=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.created_at),n=Number(r.lastInsertRowid);return td(this.db,n,e),rd(this.db,n,e),n})()}beginTeamChatLog(e){return this.db.transaction(()=>{let r=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.created_at),n=Number(r.lastInsertRowid);return td(this.db,n,e),n})()}finishTeamChatLog(e,r){this.db.transaction(()=>{if(this.stmts.updateTeamChatLogResponse.run(r.response,r.status,r.error_detail,r.truncated,e).changes!==1)throw new Error(`team_chat_log row disappeared during finish: ${e}`);rd(this.db,e,r)})()}setCurrentlyHandlingMessage(e,r,n){this.db.transaction(()=>{vn(this.db,e,r,n)})()}clearCurrentlyHandlingMessage(e,r,n){return this.db.transaction(()=>Bi(this.db,e,r,n))()}listTeamChatLog(e){return this.stmts.listTeamChatLog.all(e)}listTeamChatLogSinceId(e,r=500){return this.stmts.listTeamChatLogSinceId.all(e,Math.max(1,Math.trunc(r)))}getMaxTeamChatLogId(){return this.stmts.getMaxTeamChatLogId.get()?.max_id??0}loadTeamChatLogCursor(e){return this.stmts.loadTeamChatLogCursor.get(e)??null}saveTeamChatLogCursor(e){this.stmts.saveTeamChatLogCursor.run(e.cursor_key,e.last_pushed_id,e.updated_at)}startTrackedInvocation(e){return this.db.transaction(()=>this.startTrackedInvocationInner(e))()}startTrackedInvocationInner(e){let r=e.started_at??D(),n=e.holder_host??As(),s=e.last_heartbeat_at??r,i=this.stmts.insertTrackedInvocation.run(e.kind,e.origin,e.scope_teamfile??null,e.from_identity,e.target_teamfile??null,e.target_alias??null,e.root_teamfile??null,e.cwd??null,Zt(e.command),r,e.holder_pid??null,n,s,Zt(e.meta),e.launch_source??e.kind,e.request_payload??null),o=this.getTrackedInvocation(Number(i.lastInsertRowid));return o_(this.db,o),o}getTrackedInvocation(e){return this.stmts.getTrackedInvocation.get(e)??null}listAllRunningTrackedInvocations(){return this.stmts.listAllRunningTrackedInvocations.all()}finishTrackedInvocation(e,r){return this.db.transaction(()=>{let n=r.ended_at??D();if(this.stmts.finishTrackedInvocation.run(r.status,n,r.exit_code??null,r.signal??null,Zt(r.result_summary),Zt(r.error),r.team_chat_log_id??null,Zt(r.meta),n,e).changes!==1)return null;let i=this.getTrackedInvocation(e);return od(this.db,i),i})()}reclaimTrackedInvocationIfUnchanged(e,r,n){return this.db.transaction(()=>{let s=n.ended_at??D();if(this.stmts.reclaimTrackedInvocationIfUnchanged.run(n.status,s,n.exit_code??null,n.signal??null,Zt(n.result_summary),Zt(n.error),n.team_chat_log_id??null,Zt(n.meta),s,e,r.holder_pid,r.holder_host,r.started_at,r.last_heartbeat_at).changes!==1)return null;let o=this.getTrackedInvocation(e);return od(this.db,o),o})()}heartbeatTrackedInvocation(e,r=D()){return this.db.transaction(()=>{if(this.stmts.heartbeatTrackedInvocation.run(r,e).changes!==1)return null;let s=this.getTrackedInvocation(e);return l_(this.db,s,r),s})()}updateTrackedInvocationRequestPayload(e,r){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(r,e).changes!==1?null:(d_(this.db,e,r),this.getTrackedInvocation(e)))()}listClaimableTerminalTrackedInvocations(e){let r=["status IN ('done', 'error', 'busy', 'cancelled')","ended_at IS NOT NULL","notified_by IS NULL"],n=[];e.from!==void 0&&(r.push("from_identity = ?"),n.push(e.from)),e.scope_teamfile!==void 0&&(r.push("scope_teamfile = ?"),n.push(e.scope_teamfile));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));return n.push(s),this.db.prepare(`SELECT * FROM tracked_invocation WHERE ${r.join(" AND ")} ORDER BY ended_at ASC, id ASC LIMIT ?`).all(...n)}claimTrackedInvocationNotification(e,r,n=D()){return this.db.transaction(()=>{if(this.stmts.claimTrackedInvocationNotification.run(r,n,e).changes!==1)return null;let i=this.getTrackedInvocation(e);return a_(this.db,i,r,n),i})()}listTrackedInvocations(e={}){let r=[],n=[];e.from!==void 0&&(r.push("from_identity = ?"),n.push(e.from)),e.scope_teamfile!==void 0&&(r.push("scope_teamfile = ?"),n.push(e.scope_teamfile)),e.status!==void 0&&(r.push("status = ?"),n.push(e.status)),e.kind!==void 0&&(r.push("kind = ?"),n.push(e.kind)),e.origin!==void 0&&(r.push("origin = ?"),n.push(e.origin));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));n.push(s);let i=r.length===0?"":` WHERE ${r.join(" AND ")}`;return this.db.prepare(`SELECT * FROM tracked_invocation${i} ORDER BY started_at DESC, id DESC LIMIT ?`).all(...n)}maxTrackedInvocationId(e={}){let r=[],n=[];e.from!==void 0&&(r.push("from_identity = ?"),n.push(e.from)),e.scope_teamfile!==void 0&&(r.push("scope_teamfile = ?"),n.push(e.scope_teamfile));let s=r.length===0?"":` WHERE ${r.join(" AND ")}`,i=this.db.prepare(`SELECT COALESCE(MAX(id), 0) AS max_id FROM tracked_invocation${s}`).get(...n);return Number(i?.max_id??0)}listRunningTrackedInvocations(e={}){return this.listTrackedInvocations({...e,status:"running"})}enqueueMail(e){return this.sendMailboxMessage(e)}sendMailboxMessage(e){return this.db.transaction(()=>{let n=this.stmts.insertMailboxMessage.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile??null,e.sender_alias??null,e.root_teamfile??null,ws(e.payload),e.created_at??D(),e.remote_transport??null,e.remote_message_id??null,e.remote_thread_id??null,e.meta??null,e.message_type??"request",e.reply_mode??"pull",e.request_mailbox_id??null),s=this.getMailboxMessage(Number(n.lastInsertRowid));return ed(this.db,s,{provider:e.receiver_provider,sessionId:e.receiver_session_id},{provider:e.sender_provider,sessionId:e.sender_session_id}),s})()}listEnqueuedRequestMailFromSender(e,r,n,s){return this.stmts.listEnqueuedRequestMailFromSender.all(e,r,n,s)}listEnqueuedResponseMailFromSender(e,r,n,s){return this.stmts.listEnqueuedResponseMailFromSender.all(e,r,n,s)}listRelayMailboxLanes(e){return this.stmts.listRelayMailboxLanes.all(Math.max(1,Math.trunc(e)))}markMailDelivered(e,r,n){let s=[...new Set(e.map(a=>Math.trunc(a)).filter(a=>Number.isInteger(a)&&a>0))];if(s.length===0)return 0;let i=ws(r),o=[];this.db.exec("BEGIN IMMEDIATE");try{let a=0;for(let d of s){let c=this.getMailboxMessage(d),u=this.stmts.markMailboxMessageDelivered.run(n,i,d);a+=u.changes,u.changes===1&&c!==null&&o.push(c)}let l=new Map;for(let d of o){if(d.message_type!=="request")continue;let c=`${d.receiver_teamfile}\0${d.receiver_alias}`,u=l.get(c);(u===void 0||Xr([u,d])?.id===d.id)&&l.set(c,d)}for(let d of o){let c=l.get(`${d.receiver_teamfile}\0${d.receiver_alias}`)??null;Ss(this.db,d,i,n,null,d.message_type==="request"&&c!==null?{action:"clear",messageId:$e(c.id)}:null)}this.db.exec("COMMIT");for(let d of o)wr("mailbox_delivery_delivered",d,{transition:d.delivering_at===null?"pending->delivered":"delivering->delivered",delivered_at:n});return a}catch(a){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),a}}markRelayRequestDelivered(e,r,n){let s=ws(r),i=[],o=[];this.db.exec("BEGIN IMMEDIATE");try{let a=0;for(let c of e){if(this.stmts.markMailboxMessageDeliveredIfUnchanged.run(n,s,c.id,c.delivering_at,c.delivery_holder_pid,c.delivery_holder_host).changes!==1){o.push(c);continue}a+=1,i.push(c)}let l=Xr(i),d=l===null?null:{action:"clear",messageId:$e(l.id)};for(let c of i)Ss(this.db,c,s,n,null,d);this.db.exec("COMMIT");for(let c of i)wr("mailbox_delivery_delivered",c,{transition:"delivering->delivered",delivered_at:n,finalizer:"lease-cas"});for(let c of o)wr("mailbox_delivery_finalize_skipped",c,{delivered_at:n,finalizer:"lease-cas",reason:"observed delivery lease changed before finalization"});return a}catch(a){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),a}}markRelayRequestDeliveredAndEnqueueResponses(e,r,n){let s=ws(r),i=[],o=[];this.db.exec("BEGIN IMMEDIATE");try{let a=0,l=0;for(let p of e){if(this.stmts.markMailboxMessageDeliveredIfUnchanged.run(n,s,p.id,p.delivering_at,p.delivery_holder_pid,p.delivery_holder_host).changes!==1){o.push(p);continue}a+=1,i.push(p)}let d=[...i].sort((p,h)=>p.created_at.localeCompare(h.created_at)||p.id-h.id),c=Xr(i),u=null;if(c!==null&&c.sender_teamfile!==null&&c.sender_alias!==null){let p=this.stmts.insertMailboxResponseIfAbsent.run(c.sender_teamfile,c.sender_alias,c.receiver_teamfile,c.receiver_alias,c.root_teamfile,s,n,null,null,null,null,c.reply_mode,c.id);if(l=p.changes,p.changes===1&&(u=this.getMailboxMessage(Number(p.lastInsertRowid)),u===null))throw new Error("mailbox response disappeared during event append")}let m=u===null?null:$e(u.id),f=c===null?null:{action:"clear",messageId:$e(c.id)};for(let p of i)Ss(this.db,p,s,n,c!==null&&p.id!==c.id?m:null,f);u!==null&&ed(this.db,u,{},{},d.map(p=>$e(p.id))),this.db.exec("COMMIT");for(let p of i)wr("mailbox_delivery_delivered",p,{transition:"delivering->delivered",delivered_at:n,finalizer:"lease-cas-with-response"});for(let p of o)wr("mailbox_delivery_finalize_skipped",p,{delivered_at:n,finalizer:"lease-cas-with-response",reason:"observed delivery lease changed before finalization"});return{marked:a,responses:l}}catch(a){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),a}}claimMailForDelivery(e,r,n=process.pid,s=As()){let i=[...new Set(e.map(o=>Math.trunc(o)).filter(o=>Number.isInteger(o)&&o>0))];if(i.length===0)return[];this.db.exec("BEGIN IMMEDIATE");try{let o=[];for(let l of i)if(this.stmts.claimMailboxMessageDelivery.run(r,n,s,l).changes===1){let c=this.getMailboxMessage(l);c!==null&&(Vp(this.db,c,r,n,s),o.push(c))}this.db.exec("COMMIT");let a=o.map(l=>l.id);for(let l of o)wr("mailbox_delivery_claimed",l,{transition:"pending->delivering",batch_ids:a,delivering_at:r,delivery_holder_pid:n,delivery_holder_host:s});return o}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}clearMailDelivery(e){let r=[...new Set(e.map(s=>Math.trunc(s)).filter(s=>Number.isInteger(s)&&s>0))];if(r.length===0)return 0;let n=[];this.db.exec("BEGIN IMMEDIATE");try{let s=0;for(let i of r){let o=this.getMailboxMessage(i),a=this.stmts.clearMailboxMessageDelivery.run(i);s+=a.changes,a.changes===1&&o!==null&&o.delivering_at!==null&&(nd(this.db,o,"explicit-clear"),n.push(o))}this.db.exec("COMMIT");for(let i of n)wr("mailbox_delivery_cleared",i,{transition:"delivering->pending",reason:"explicit non-CAS clear"});return s}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}reclaimMailboxDeliveryIfUnchanged(e,r="delivery-failure"){return this.db.transaction(()=>{let s=this.getMailboxMessage(e.id);if(this.stmts.clearMailboxMessageDeliveryIfUnchanged.run(e.id,e.delivering_at,e.delivery_holder_pid,e.delivery_holder_host).changes!==1)return null;if(s===null)throw new Error("mailbox row disappeared during claim release");return s.delivering_at!==null&&nd(this.db,s,r),this.getMailboxMessage(e.id)})()}reclaimStaleMailboxDeliveries(e){let r=this.stmts.listInFlightMailboxDeliveries.all(),n=[],s=[];this.db.exec("BEGIN IMMEDIATE");try{for(let i of r){let o=vx(i,e);if(!o.reclaim){s.push({row:i,decision:o,reclaimed:!1});continue}let a=this.reclaimMailboxDeliveryIfUnchanged(i,o.reason),l=a!==null;s.push({row:i,decision:o,reclaimed:l}),l&&n.push(a)}this.db.exec("COMMIT");for(let i of s)wr(i.decision.reclaim?i.reclaimed?"mailbox_delivery_reclaimed":"mailbox_delivery_reclaim_raced":"mailbox_delivery_reclaim_deferred",i.row,{transition:i.reclaimed?"delivering->pending":"delivering->delivering",stale_before:e,reclaim_reason:i.decision.reason,holder_pid_alive:i.decision.holderPidAlive});return n}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}listDeliveredReceiptsForSender(e,r){return this.stmts.listDeliveredReceiptsForSender.all(e,r)}listOutboundPendingForSender(e,r){return this.stmts.listOutboundPendingForSender.all(e,r)}getMailboxMessage(e){return this.stmts.getMailboxMessage.get(e)??null}peekMailboxMessages(e,r=1e3){return this.stmts.listMailboxMessagesForReceiver.all(e.receiver_teamfile,e.receiver_alias,Math.max(1,Math.min(1e3,Math.trunc(r))))}recvMailboxMessages(e){return this.recvMailboxMessagesTxn(e.receiver_teamfile,e.receiver_alias)}updateTeamChatLogResponse(e,r){this.stmts.updateTeamChatLogResponse.run(r.response,r.status,r.error_detail,r.truncated,e)}getAgentInflight(e,r){return this.stmts.getAgentInflight.get(e,r)??null}listAgentInflight(){return this.stmts.listAgentInflight.all()}tryAcquireAgentInflight(e,r){return this.tryAcquireAgentInflightTxn(e,r)}heartbeatAgentInflight(e,r,n=D()){return this.db.transaction(()=>{let s=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);return s===null||s.sender_teamfile!==e.sender_teamfile||s.sender_alias!==e.sender_alias||s.started_at!==e.started_at?!1:Zp(this.db,s,r,n)})()}clearAgentInflight(e,r){this.db.transaction(()=>{let s=this.getAgentInflight(e,r);if(s===null)return;this.stmts.clearAgentInflight.run(e,r).changes===1&&ks(this.db,s,"INFLIGHT_RECLAIM","stale")})()}clearObservedTerminalAgentInflight(e,r,n){return this.db.transaction(()=>{let i=this.getAgentInflight(e,r),o=this.stmts.clearObservedTerminalAgentInflight.run({receiver_teamfile:e,receiver_alias:r,observed_sender_teamfile:n.sender_teamfile,observed_sender_alias:n.sender_alias,observed_started_at:n.started_at,observed_holder_pid:n.holder_pid});return o.changes===1&&i!==null&&ks(this.db,i,"INFLIGHT_RELEASE"),o.changes===1})()}releaseAgentInflight(e,r){this.db.exec("BEGIN IMMEDIATE");try{let n=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);if(n===null||n.sender_teamfile!==e.sender_teamfile||n.sender_alias!==e.sender_alias)return this.db.exec("COMMIT"),!1;if(r!==void 0&&this.db.prepare(`SELECT lease_id FROM agent_state
1599
+ `),...Dp(t),...Cp(t)}}function kx(t,e){return e===void 0?{resumed:!1,reason:t}:{resumed:!1,reason:t,valid:e}}var ld,dt=w(()=>{"use strict";Yl();$p();jp();Pi();Wp();Jr();pe();kn();c_();Ns();ld=class{db;stmts;claimTxn;claimWithConcurrencyTxn;claimByIdWithConcurrencyTxn;resumeRunTxn;resumeInteractiveTxn;resumeEscalationTxn;tryAcquireAgentInflightTxn;recvMailboxMessagesTxn;constructor(e){e.pragma("foreign_keys = ON"),this.db=e,this.stmts=Sx(e),this.claimTxn=e.transaction((r,n,s)=>{let i=this.stmts.selectClaimableJob.get(s,s,s);return i===void 0||this.stmts.claimJob.run(r,n,s,i.id,s,s,s).changes!==1?null:this.getJob(i.id)}),this.claimWithConcurrencyTxn=e.transaction((r,n,s,i)=>{let o=this.stmts.selectClaimableJobs.all(s,s,s);for(let a of o){let l=this.getJob(a.id);if(l===null)continue;let d=i(l);if(d.concurrency_key!==null&&(l.concurrency_key_resolved!==d.concurrency_key&&this.stmts.setJobConcurrencyKey.run(d.concurrency_key,l.id),(this.stmts.countRunningByConcurrencyKey.get(d.concurrency_key,s,l.id)?.count??0)>=Math.max(1,d.concurrent_limit)))continue;if(this.stmts.claimJob.run(r,n,s,l.id,s,s,s).changes===1)return this.getJob(l.id)}return null}),this.claimByIdWithConcurrencyTxn=e.transaction((r,n,s,i,o)=>{let a=this.getJob(r);if(a===null)return{claimed:!1,reason:"not_found",job_id:r};if(a.locked_until!==null&&a.locked_until>=i)return{claimed:!1,reason:"locked",job_id:r,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let d=a.status==="queued"&&a.available_at<=i,c=a.status==="running"&&a.locked_until!==null&&a.locked_until<i;if(!d&&!c)return{claimed:!1,reason:"not_claimable",job_id:r,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};let u=o(a);if(u.concurrency_key!==null&&(a.concurrency_key_resolved!==u.concurrency_key&&this.stmts.setJobConcurrencyKey.run(u.concurrency_key,a.id),(this.stmts.countRunningByConcurrencyKey.get(u.concurrency_key,i,a.id)?.count??0)>=Math.max(1,u.concurrent_limit)))return{claimed:!1,reason:"concurrency_limit",job_id:r,status:a.status,locked_by:a.locked_by,locked_until:a.locked_until};if(this.stmts.claimJob.run(n,s,i,a.id,i,i,i).changes!==1){let p=this.getJob(a.id);return{claimed:!1,reason:p?.locked_until!==null&&p?.locked_until!==void 0&&p.locked_until>=i?"locked":"not_claimable",job_id:r,status:p?.status??a.status,locked_by:p?.locked_by??a.locked_by,locked_until:p?.locked_until??a.locked_until}}let f=this.getJob(a.id);return f===null?{claimed:!1,reason:"not_found",job_id:r}:{claimed:!0,job:f}}),this.resumeRunTxn=e.transaction((r,n,s)=>kx("state_not_found")),this.resumeInteractiveTxn=e.transaction((r,n,s,i)=>{let o=this.getInteractiveSessionByStepId(r);if(o===null)return{resumed:!1,reason:"not_found"};if(o.status!=="waiting_operator")return{resumed:!1,reason:"not_waiting_operator"};let a=this.getRun(o.run_id);if(a===null)return{resumed:!1,reason:"run_not_found"};let l=s?"done":"waiting_agent";return this.stmts.updateInteractiveSession.run(l,n,Date.now(),o.id),this.stmts.resumeRunState.run(o.state_name,a.id),this.stmts.requeuePausedJob.run(i,a.job_id),{resumed:!0,session:this.getInteractiveSessionByStepId(r),run:this.getRun(a.id),job:this.getJob(a.job_id)}}),this.resumeEscalationTxn=e.transaction((r,n,s)=>{let i=this.stmts.getAttention.get(r);if(i===void 0)return{resumed:!1,reason:"not_found"};if(i.kind!==Xi)return{resumed:!1,reason:"wrong_kind"};if(i.acknowledged_at!==null)return{resumed:!1,reason:"already_acked"};if(i.run_id===null)return{resumed:!1,reason:"run_not_found"};let o=null,a=[];if(i.payload!==null)try{let c=JSON.parse(i.payload);c.step!==void 0&&typeof c.step.id=="string"&&c.step.id.length>0&&(o=c.step.id),Array.isArray(c.declared_outcomes)&&(a=c.declared_outcomes.filter(u=>typeof u=="string"))}catch{}if(o===null)return{resumed:!1,reason:"no_step"};let l=this.getRun(i.run_id);if(l===null)return{resumed:!1,reason:"run_not_found"};if(n!==Is&&!a.includes(n))return{resumed:!1,reason:m_};let d={};if(l.pending_escalation_decision!==null)try{let c=JSON.parse(l.pending_escalation_decision);c!==null&&typeof c=="object"&&!Array.isArray(c)&&(d=c)}catch{d={}}return d[o]=n,this.stmts.setRunPendingEscalationDecision.run(JSON.stringify(d),l.id),this.stmts.resumeRunState.run(o,l.id),this.stmts.requeuePausedJob.run(s,l.job_id),this.stmts.ackAttention.run(s,r),{resumed:!0,run:this.getRun(l.id),job:this.getJob(l.job_id)}}),this.tryAcquireAgentInflightTxn=(r,n={})=>{this.db.exec("BEGIN IMMEDIATE");try{let s=this.getAgentInflight(r.receiver_teamfile,r.receiver_alias),i=n.reclaim_observed,o=this.stmts.acquireAgentInflight.get({...r,holder_pid:process.pid,stale_before:n.stale_before??null,force:n.force===!0?1:0,reclaim_observed_sender_teamfile:i?.sender_teamfile??null,reclaim_observed_sender_alias:i?.sender_alias??null,reclaim_observed_started_at:i?.started_at??null,reclaim_observed_holder_pid:typeof i?.holder_pid=="number"?i.holder_pid:null}),a;if(o!==void 0){let l=s===null?null:n.reclaim_reason??(n.force===!0?"force":n.reclaim_observed!==void 0?"dead-pid":"stale"),d=zp(this.db,o,s,l,n.stale_before??null,n.force===!0);a={acquired:!0,current:o,lease_id:d}}else a={acquired:!1,current:this.getAgentInflight(r.receiver_teamfile,r.receiver_alias)??(()=>{throw new Error("agent_inflight conflict row disappeared during acquire")})()};return this.db.exec("COMMIT"),a}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}},this.recvMailboxMessagesTxn=e.transaction((r,n)=>{let s=this.stmts.listAllMailboxMessagesForReceiver.all(r,n),i=Xr(s.filter(a=>a.message_type==="request")),o=i===null?null:{action:"set",messageId:$e(i.id)};for(let a of s)Ss(this.db,a,"",D(),null,a.message_type==="request"?o:null),this.stmts.deleteMailboxMessage.run(a.id);return s})}close(){this.db.close()}query(e,...r){let n=e.trim().toLowerCase();if(!n.startsWith("select")&&!n.startsWith("with")&&!n.startsWith("pragma"))throw new Error("Dal.query only allows read-only SELECT/WITH/PRAGMA statements");return this.db.prepare(e).all(...r)}insertWorkflow(e){__(e.name,e.definition,o=>this.getWorkflowByName(o));let r=this.stmts.insertWorkflow.run(e.name,e.version??1,e.definition_schema_version??1,e.definition,D()),n=this.getWorkflow(Number(r.lastInsertRowid)),s=this.stmts.insertWorkflowVersion.run(n.id,n.version,e.definition,e.author??null,D());this.stmts.updateWorkflowActiveVersion.run(s.lastInsertRowid,n.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,n.id);let i=this.getWorkflow(n.id);return this.syncWorkflowTriggers(n.id,e.definition),i}upsertWorkflow(e){__(e.name,e.definition,o=>this.getWorkflowByName(o));let r=this.getWorkflowByName(e.name);if(r===null)return this.insertWorkflow({name:e.name,definition_schema_version:e.definition_schema_version,definition:e.definition,author:e.author,source_uri:e.source_uri,source_sha256:e.source_sha256});let s=(this.stmts.getLatestWorkflowVersion.get(r.id)?.version??r.version)+1,i=this.stmts.insertWorkflowVersion.run(r.id,s,e.definition,e.author??null,D());return this.stmts.updateWorkflowActiveVersionDefinitionAndVersion.run(Number(i.lastInsertRowid),e.definition,e.definition_schema_version??r.definition_schema_version,s,r.id),(e.source_uri!=null||e.source_sha256!=null)&&this.stmts.setWorkflowSource.run(e.source_uri??null,e.source_sha256??null,r.id),this.syncWorkflowTriggers(r.id,e.definition),this.getWorkflow(r.id)}insertCompositionUnit(e){this.stmts.insertCompositionUnit.run(e.name,e.version,e.lang,e.source,e.source_sha,e.compiled_workflow_version_id,D())}getWorkflow(e){return this.stmts.getWorkflow.get(e)??null}getWorkflowByName(e,r){return(r===void 0?this.stmts.findWorkflowLatest.get(e):this.stmts.findWorkflowVersion.get(e,r))??null}findWorkflowByName(e,r){return this.getWorkflowByName(e,r)}insertWorkflowVersion(e,r,n){let i=(this.stmts.getLatestWorkflowVersion.get(e)?.version??0)+1,o=this.stmts.insertWorkflowVersion.run(e,i,r,n??null,D());return this.stmts.getWorkflowVersion.get(o.lastInsertRowid)}activateWorkflowVersion(e,r){let n=this.getWorkflowVersionById(r);if(n===null||n.workflow_id!==e)return null;let s=1;try{let i=JSON.parse(n.definition);typeof i.definition_schema_version=="number"&&(s=i.definition_schema_version)}catch{}return this.stmts.updateWorkflowActiveVersionAndDefinition.run(r,n.definition,s,e),this.syncWorkflowTriggers(e,n.definition),this.getWorkflow(e)}getWorkflowVersionById(e){return this.stmts.getWorkflowVersion.get(e)??null}listWorkflowVersions(e){return this.stmts.listWorkflowVersions.all(e)}upsertTriggerInstance(e){return this.stmts.upsertTriggerInstance.run(e.workflow_id,e.trigger_id,e.trigger_type,e.parameters,e.enabled===!1?0:1,D()),this.stmts.getTriggerInstanceByWorkflowAndId.get(e.workflow_id,e.trigger_id)}listTriggerInstancesForWorkflow(e){return this.stmts.listTriggerInstancesForWorkflow.all(e)}listEnabledTriggerInstances(){return this.stmts.listEnabledTriggerInstances.all()}setTriggerCursor(e,r){return this.stmts.setTriggerCursor.run(r,D(),e),this.stmts.getTriggerInstance.get(e)??null}setTriggerFailure(e,r){return this.stmts.setTriggerFailure.run(D(),r,e),this.stmts.getTriggerInstance.get(e)??null}syncWorkflowTriggers(e,r){let n;try{n=JSON.parse(r)}catch{return}if(n===null||typeof n!="object"||Array.isArray(n))return;let s=n.triggers;if(Array.isArray(s))for(let i of s){if(i===null||typeof i!="object"||Array.isArray(i))continue;let o=i;typeof o.id!="string"||o.id.length===0||typeof o.type!="string"||o.type.length===0||this.upsertTriggerInstance({workflow_id:e,trigger_id:o.id,trigger_type:o.type,parameters:JSON.stringify(o.parameters??{})})}}insertTeam(e){let r=this.stmts.insertTeam.run(e.name,D());return this.stmts.getTeam.get(r.lastInsertRowid)}getTeam(e){return this.stmts.getTeam.get(e)??null}findTeamByName(e){return this.stmts.findTeamByName.get(e)??null}listTeams(){return this.stmts.listTeams.all()}insertTeamMember(e){let r=this.stmts.insertTeamMember.run(e.team_id,e.alias,e.role??"agent",e.provider,e.model??null,e.sessionid??null,e.sessiondir,D());return this.stmts.getTeamMember.get(r.lastInsertRowid)}listTeamMembers(e){return this.stmts.listTeamMembers.all(e)}findTeamMemberByAlias(e,r){return this.stmts.findTeamMemberByAlias.get(e,r)??null}updateTeamMemberSession(e,r){return this.stmts.updateTeamMemberSession.run(r,e),this.stmts.getTeamMember.get(e)??null}setMemberState(e,r,n){return this.stmts.setMemberState.run(r,n??null,D(),e),this.stmts.getTeamMember.get(e)??null}listMembersInState(e){return this.stmts.listMembersInState.all(e)}setMemberPromptSnapshot(e,r){return this.stmts.setMemberPromptSnapshot.run(r,e),this.stmts.getTeamMember.get(e)??null}setMemberProviderResolved(e,r){return this.stmts.setMemberProviderResolved.run(r,e),this.stmts.getTeamMember.get(e)??null}setMemberRolePrompt(e,r){return this.stmts.setMemberRolePrompt.run(r,e),this.stmts.getTeamMember.get(e)??null}updateTeamMemberMeta(e,r){let n=this.stmts.getTeamMember.get(e);if(n===void 0)return null;let s=Object.prototype.hasOwnProperty.call(r,"role_prompt"),i=Object.prototype.hasOwnProperty.call(r,"model"),o=Object.prototype.hasOwnProperty.call(r,"provider");return this.stmts.updateTeamMemberMeta.run(s?r.role_prompt??null:n.role_prompt,i?r.model??null:n.model,o?r.provider??n.provider:n.provider,e),this.stmts.getTeamMember.get(e)??null}insertTeamMemberCompanion(e){let r=this.stmts.insertTeamMemberCompanion.run(e.interpreter_id,e.companion_id,D());return this.stmts.getTeamMemberCompanion.get(r.lastInsertRowid)}insertProject(e){let r=this.stmts.insertProject.run(e.name,e.description??null,e.local_path,e.workflow_name,e.team_id,e.default_branch??null,e.intake_config??null,e.test_argv??null,e.test_command??null,e.durable_memory_mode??"folder",D());return this.stmts.getProject.get(r.lastInsertRowid)}listProjects(){return this.stmts.listProjects.all()}getProject(e){return this.stmts.getProject.get(e)??null}findProjectByName(e){return this.stmts.findProjectByName.get(e)??null}setProjectIntakeConfig(e,r){return this.stmts.setProjectIntakeConfig.run(r,e),this.stmts.getProject.get(e)??null}updateProjectSettings(e,r){let n=this.stmts.getProject.get(e);if(n===void 0)return null;let s=Object.prototype.hasOwnProperty.call(r,"local_path"),i=Object.prototype.hasOwnProperty.call(r,"durable_memory_mode"),o=Object.prototype.hasOwnProperty.call(r,"default_branch"),a=Object.prototype.hasOwnProperty.call(r,"intake_config");return this.stmts.updateProjectSettings.run(s?r.local_path:n.local_path,i?r.durable_memory_mode:n.durable_memory_mode,o?r.default_branch??null:n.default_branch,a?r.intake_config??null:n.intake_config,e),this.stmts.getProject.get(e)??null}listProjectsWithIntakeEnabled(){return this.stmts.listProjectsWithIntakeConfig.all().filter(e=>{if(e.intake_config===null)return!1;try{let r=JSON.parse(e.intake_config);return typeof r=="object"&&r!==null&&!Array.isArray(r)&&r.scan_github_issues===!0}catch{return!1}})}getProjectByJob(e){return this.stmts.getProjectByJob.get(e)??null}insertProjectWorkflow(e){let r=e.condition??null,n=this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,r);if(n!==void 0)return n;let s=this.stmts.insertProjectWorkflow.run(e.project_id,e.workflow_id,r,e.parameters_override??null,e.enabled===!1?0:1,e.priority??100,D());return s.changes===1?this.stmts.getProjectWorkflow.get(s.lastInsertRowid):this.stmts.findProjectWorkflowUnique.get(e.project_id,e.workflow_id,r)}getProjectWorkflow(e){return this.stmts.getProjectWorkflow.get(e)??null}listProjectWorkflows(e,r={}){return r.enabled_only===!0?this.stmts.listEnabledProjectWorkflows.all(e):this.stmts.listProjectWorkflows.all(e)}removeProjectWorkflow(e){return this.stmts.removeProjectWorkflow.run(e).changes>0}setProjectWorkflowEnabled(e,r){return this.stmts.setProjectWorkflowEnabled.run(r?1:0,e),this.getProjectWorkflow(e)}createIssue(e){let r=D(),n=this.stmts.createIssue.run(e.project_id,e.title,e.body,e.severity??"medium",e.labels??null,e.ai_test_path??null,e.source_run_id??null,r,r);return this.stmts.getIssue.get(n.lastInsertRowid)}getIssue(e){return this.stmts.getIssue.get(e)??null}listIssues(e,r={}){return this.stmts.listIssuesForProject.all(e).filter(n=>!(r.status!==void 0&&!r.status.includes(n.status)||r.severity!==void 0&&!r.severity.includes(n.severity)||r.ai_test_path!==void 0&&n.ai_test_path!==r.ai_test_path))}claimNextIssue(e,r){return this.stmts.claimNextIssue.get(r,D(),e)??null}claimIssue(e,r){return this.stmts.claimIssue.get(r,D(),e)??null}closeIssue(e,r,n){let s=D(),i=this.stmts.closeIssue.get(r,n??null,s,s,e);if(i===void 0)throw new Error(`issue not found: ${e}`);return i}reopenIssue(e,r){let n=this.stmts.reopenIssue.get(r,D(),e);if(n===void 0)throw this.getIssue(e)===null?new Error(`issue not found: ${e}`):new Error(`issue ${e} is not closed`);return n}updateIssue(e,r){let n=this.getIssue(e);if(n===null)throw new Error(`issue not found: ${e}`);let s=Object.prototype.hasOwnProperty.call(r,"labels"),i=Object.prototype.hasOwnProperty.call(r,"ai_test_path"),o=this.stmts.updateIssue.get(r.title??n.title,r.body??n.body,r.severity??n.severity,s?r.labels??null:n.labels,i?r.ai_test_path??null:n.ai_test_path,D(),e);if(o===void 0)throw new Error(`issue not found: ${e}`);return o}listWorkflows(){return this.stmts.listWorkflows.all()}getOrCreateWebuiSession(e,r){let n=this.stmts.getWebuiSession.get(e);if(n!==void 0)return n;let s=D();return this.stmts.insertWebuiSession.run(e,r,"N1",null,null,null,null,"authenticated",s,s),this.stmts.getWebuiSession.get(e)}getWebuiSession(e){return this.stmts.getWebuiSession.get(e)??null}updateWebuiSessionTransition(e,r,n,s,i){if(this.stmts.updateWebuiSessionTransition.run(r,n,s,i,D(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}setWebuiSessionChatbot(e,r){if(this.stmts.setWebuiSessionChatbot.run(r,D(),e).changes===0)throw new Error(`webui_session not found: ${e}`);return this.stmts.getWebuiSession.get(e)}createChatbotSession(e,r){let n=p_(),s=D();return this.stmts.insertChatbotSession.run(n,e,r??null,s,s,"active"),this.stmts.getChatbotSession.get(n)}getChatbotSession(e){return this.stmts.getChatbotSession.get(e)??null}listChatbotSessions(e){return this.stmts.listChatbotSessionsForUser.all(e)}appendChatbotMessage(e,r,n,s){let i=D(),o=this.stmts.insertChatbotMessage.run(e,r,n,s??null,i);return this.stmts.touchChatbotSession.run(i,e),this.stmts.getChatbotMessage.get(o.lastInsertRowid)}listChatbotMessages(e){return this.stmts.listChatbotMessages.all(e)}getConfig(e){return this.stmts.getConfig.get(e)?.value??null}setConfig(e,r){this.stmts.upsertConfig.run(e,r,D())}getConfigAll(){let e=this.stmts.listConfig.all(),r={};for(let n of e)r[n.key]=n.value;return r}enqueueJob(e){let r=this.stmts.insertJob.run(e.project_id,e.workflow_id_override??null,e.source,e.source_ref??null,e.payload??null,e.priority??0,e.available_at??D(),e.dedupe_key??null,e.concurrency_key??null,D());if(r.changes===1)return this.stmts.getJob.get(r.lastInsertRowid);if(e.dedupe_key===void 0||e.dedupe_key===null)throw new Error("job insert ignored without dedupe key");return this.stmts.findJobByDedupe.get(e.source,e.dedupe_key)}claimNextJob(e){let r=D(),n=new Date(Date.now()+e.lease_ms).toISOString();return this.claimTxn(e.worker_id,n,r)}claimNextJobWithConcurrency(e){let r=D(),n=new Date(Date.now()+e.lease_ms).toISOString();return this.claimWithConcurrencyTxn(e.worker_id,n,r,e.evaluator)}claimJobByIdWithConcurrency(e){let r=D(),n=new Date(Date.now()+e.lease_ms).toISOString();return this.claimByIdWithConcurrencyTxn(e.job_id,e.worker_id,n,r,e.evaluator)}releaseJob(e,r,n){let s=r==="queued"||r==="running"?null:D();return this.stmts.releaseJob.run(r,n??null,s,e),this.getJob(e)}getJob(e){return this.stmts.getJob.get(e)??null}findJobBySourceAndDedupe(e,r){return this.stmts.findJobByDedupe.get(e,r)??null}insertRun(e){let r=this.getWorkflow(e.workflow_id);if(r===null)throw new Error(`workflow not found: ${e.workflow_id}`);let n=this.stmts.insertRun.run(e.job_id,e.workflow_id,e.team_id,e.current_state??null,r.active_version_id,e.parent_run_id??null,D()),s=this.stmts.getRun.get(n.lastInsertRowid);return(e.parent_run_id===void 0||e.parent_run_id===null)&&this.stmts.setJobRun.run(s.id,e.job_id),s}setJobRun(e,r){return this.stmts.setJobRun.run(r,e),this.getJob(e)}insertPromptDispatch(e){return this.stmts.insertPromptDispatch.run(e.prompt_id,e.project_id,e.job_id,e.text,e.context_json??null,D()),this.stmts.getPromptDispatch.get(e.prompt_id)}getPromptDispatch(e){return this.stmts.getPromptDispatch.get(e)??null}setPromptDispatchCompleted(e,r){return this.stmts.setPromptDispatchCompleted.run(r??D(),e),this.getPromptDispatch(e)}getWorkspace(e){return this.stmts.getWorkspace.get(e)??null}ensureWorkspace(e={}){let r=e.id??"default";this.stmts.ensureWorkspace.run(r,e.name??"Default workspace",e.idleThresholdMs??6e5,D());let n=this.getWorkspace(r);if(n===null)throw new Error(`workspace ${r} missing after upsert`);return n}listWebProjectsActive(e){return this.stmts.listWebProjectsActive.all(e)}getWebProject(e){return this.stmts.getWebProject.get(e)??null}insertWebProject(e){let r=D(),n=this.stmts.insertWebProject.run(e.workspace_id,e.name,e.repo_path,e.config_json??null,e.linked_v4_project_id??null,r,r),s=Number(n.lastInsertRowid),i=this.getWebProject(s);if(i===null)throw new Error(`web_project ${s} missing after insert`);return i}updateWebProject(e){let r=this.getWebProject(e.id);return r===null||r.deleted_at!==null?null:(this.stmts.updateWebProject.run(e.name??r.name,e.config_json===void 0?r.config_json:e.config_json,D(),e.id),this.getWebProject(e.id))}softDeleteWebProject(e){return this.stmts.softDeleteWebProject.run(D(),e).changes===1}loadMailboxCursor(e,r){return this.stmts.loadMailboxCursor.get(e,r)??null}saveMailboxCursor(e){this.stmts.saveMailboxCursor.run(e.user_id,e.mailbox_key,e.last_processed_version_id,e.last_processed_seq??null,e.last_processed_at)}addUsage(e){this.stmts.addUsage.run(e.user_id,e.device_id,e.period,e.put,e.get,e.list,e.updated_at)}loadUsage(e,r,n){return this.stmts.loadUsage.get(e,r,n)??null}sumUsageForPeriod(e,r){let n=this.stmts.sumUsageForPeriod.get(e,r);return{put:n?.put??0,get:n?.get??0,list:n?.list??0}}upsertRootTeam(e){this.stmts.upsertRootTeam.run(e.teamfile_path,e.name,e.raw_text,e.raw_sha256,e.registered_at,e.last_seeded_at)}getRootTeam(e){return this.stmts.getRootTeam.get(e)??null}listRootTeams(){return this.stmts.listRootTeams.all()}insertTeamChatLog(e){return this.db.transaction(()=>{let r=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.created_at),n=Number(r.lastInsertRowid);return td(this.db,n,e),rd(this.db,n,e),n})()}beginTeamChatLog(e){return this.db.transaction(()=>{let r=this.stmts.insertTeamChatLog.run(e.root_teamfile,e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias,e.message,e.response,e.origin,e.status,e.error_detail,e.truncated,e.created_at),n=Number(r.lastInsertRowid);return td(this.db,n,e),n})()}finishTeamChatLog(e,r){this.db.transaction(()=>{if(this.stmts.updateTeamChatLogResponse.run(r.response,r.status,r.error_detail,r.truncated,e).changes!==1)throw new Error(`team_chat_log row disappeared during finish: ${e}`);rd(this.db,e,r)})()}setCurrentlyHandlingMessage(e,r,n){this.db.transaction(()=>{bn(this.db,e,r,n)})()}clearCurrentlyHandlingMessage(e,r,n){return this.db.transaction(()=>Bi(this.db,e,r,n))()}listTeamChatLog(e){return this.stmts.listTeamChatLog.all(e)}listTeamChatLogSinceId(e,r=500){return this.stmts.listTeamChatLogSinceId.all(e,Math.max(1,Math.trunc(r)))}getMaxTeamChatLogId(){return this.stmts.getMaxTeamChatLogId.get()?.max_id??0}loadTeamChatLogCursor(e){return this.stmts.loadTeamChatLogCursor.get(e)??null}saveTeamChatLogCursor(e){this.stmts.saveTeamChatLogCursor.run(e.cursor_key,e.last_pushed_id,e.updated_at)}startTrackedInvocation(e){return this.db.transaction(()=>this.startTrackedInvocationInner(e))()}startTrackedInvocationInner(e){let r=e.started_at??D(),n=e.holder_host??As(),s=e.last_heartbeat_at??r,i=this.stmts.insertTrackedInvocation.run(e.kind,e.origin,e.scope_teamfile??null,e.from_identity,e.target_teamfile??null,e.target_alias??null,e.root_teamfile??null,e.cwd??null,Zt(e.command),r,e.holder_pid??null,n,s,Zt(e.meta),e.launch_source??e.kind,e.request_payload??null),o=this.getTrackedInvocation(Number(i.lastInsertRowid));return o_(this.db,o),o}getTrackedInvocation(e){return this.stmts.getTrackedInvocation.get(e)??null}listAllRunningTrackedInvocations(){return this.stmts.listAllRunningTrackedInvocations.all()}finishTrackedInvocation(e,r){return this.db.transaction(()=>{let n=r.ended_at??D();if(this.stmts.finishTrackedInvocation.run(r.status,n,r.exit_code??null,r.signal??null,Zt(r.result_summary),Zt(r.error),r.team_chat_log_id??null,Zt(r.meta),n,e).changes!==1)return null;let i=this.getTrackedInvocation(e);return od(this.db,i),i})()}reclaimTrackedInvocationIfUnchanged(e,r,n){return this.db.transaction(()=>{let s=n.ended_at??D();if(this.stmts.reclaimTrackedInvocationIfUnchanged.run(n.status,s,n.exit_code??null,n.signal??null,Zt(n.result_summary),Zt(n.error),n.team_chat_log_id??null,Zt(n.meta),s,e,r.holder_pid,r.holder_host,r.started_at,r.last_heartbeat_at).changes!==1)return null;let o=this.getTrackedInvocation(e);return od(this.db,o),o})()}heartbeatTrackedInvocation(e,r=D()){return this.db.transaction(()=>{if(this.stmts.heartbeatTrackedInvocation.run(r,e).changes!==1)return null;let s=this.getTrackedInvocation(e);return l_(this.db,s,r),s})()}updateTrackedInvocationRequestPayload(e,r){return this.db.transaction(()=>this.stmts.updateTrackedInvocationRequestPayload.run(r,e).changes!==1?null:(d_(this.db,e,r),this.getTrackedInvocation(e)))()}listClaimableTerminalTrackedInvocations(e){let r=["status IN ('done', 'error', 'busy', 'cancelled')","ended_at IS NOT NULL","notified_by IS NULL"],n=[];e.from!==void 0&&(r.push("from_identity = ?"),n.push(e.from)),e.scope_teamfile!==void 0&&(r.push("scope_teamfile = ?"),n.push(e.scope_teamfile));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));return n.push(s),this.db.prepare(`SELECT * FROM tracked_invocation WHERE ${r.join(" AND ")} ORDER BY ended_at ASC, id ASC LIMIT ?`).all(...n)}claimTrackedInvocationNotification(e,r,n=D()){return this.db.transaction(()=>{if(this.stmts.claimTrackedInvocationNotification.run(r,n,e).changes!==1)return null;let i=this.getTrackedInvocation(e);return a_(this.db,i,r,n),i})()}listTrackedInvocations(e={}){let r=[],n=[];e.from!==void 0&&(r.push("from_identity = ?"),n.push(e.from)),e.scope_teamfile!==void 0&&(r.push("scope_teamfile = ?"),n.push(e.scope_teamfile)),e.status!==void 0&&(r.push("status = ?"),n.push(e.status)),e.kind!==void 0&&(r.push("kind = ?"),n.push(e.kind)),e.origin!==void 0&&(r.push("origin = ?"),n.push(e.origin));let s=Math.max(1,Math.min(1e3,Math.trunc(e.limit??100)));n.push(s);let i=r.length===0?"":` WHERE ${r.join(" AND ")}`;return this.db.prepare(`SELECT * FROM tracked_invocation${i} ORDER BY started_at DESC, id DESC LIMIT ?`).all(...n)}maxTrackedInvocationId(e={}){let r=[],n=[];e.from!==void 0&&(r.push("from_identity = ?"),n.push(e.from)),e.scope_teamfile!==void 0&&(r.push("scope_teamfile = ?"),n.push(e.scope_teamfile));let s=r.length===0?"":` WHERE ${r.join(" AND ")}`,i=this.db.prepare(`SELECT COALESCE(MAX(id), 0) AS max_id FROM tracked_invocation${s}`).get(...n);return Number(i?.max_id??0)}listRunningTrackedInvocations(e={}){return this.listTrackedInvocations({...e,status:"running"})}enqueueMail(e){return this.sendMailboxMessage(e)}sendMailboxMessage(e){return this.db.transaction(()=>{let n=this.stmts.insertMailboxMessage.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile??null,e.sender_alias??null,e.root_teamfile??null,ws(e.payload),e.created_at??D(),e.remote_transport??null,e.remote_message_id??null,e.remote_thread_id??null,e.meta??null,e.message_type??"request",e.reply_mode??"pull",e.request_mailbox_id??null),s=this.getMailboxMessage(Number(n.lastInsertRowid));return ed(this.db,s,{provider:e.receiver_provider,sessionId:e.receiver_session_id},{provider:e.sender_provider,sessionId:e.sender_session_id}),s})()}listEnqueuedRequestMailFromSender(e,r,n,s){return this.stmts.listEnqueuedRequestMailFromSender.all(e,r,n,s)}listEnqueuedResponseMailFromSender(e,r,n,s){return this.stmts.listEnqueuedResponseMailFromSender.all(e,r,n,s)}listRelayMailboxLanes(e){return this.stmts.listRelayMailboxLanes.all(Math.max(1,Math.trunc(e)))}markMailDelivered(e,r,n){let s=[...new Set(e.map(a=>Math.trunc(a)).filter(a=>Number.isInteger(a)&&a>0))];if(s.length===0)return 0;let i=ws(r),o=[];this.db.exec("BEGIN IMMEDIATE");try{let a=0;for(let d of s){let c=this.getMailboxMessage(d),u=this.stmts.markMailboxMessageDelivered.run(n,i,d);a+=u.changes,u.changes===1&&c!==null&&o.push(c)}let l=new Map;for(let d of o){if(d.message_type!=="request")continue;let c=`${d.receiver_teamfile}\0${d.receiver_alias}`,u=l.get(c);(u===void 0||Xr([u,d])?.id===d.id)&&l.set(c,d)}for(let d of o){let c=l.get(`${d.receiver_teamfile}\0${d.receiver_alias}`)??null;Ss(this.db,d,i,n,null,d.message_type==="request"&&c!==null?{action:"clear",messageId:$e(c.id)}:null)}this.db.exec("COMMIT");for(let d of o)wr("mailbox_delivery_delivered",d,{transition:d.delivering_at===null?"pending->delivered":"delivering->delivered",delivered_at:n});return a}catch(a){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),a}}markRelayRequestDelivered(e,r,n){let s=ws(r),i=[],o=[];this.db.exec("BEGIN IMMEDIATE");try{let a=0;for(let c of e){if(this.stmts.markMailboxMessageDeliveredIfUnchanged.run(n,s,c.id,c.delivering_at,c.delivery_holder_pid,c.delivery_holder_host).changes!==1){o.push(c);continue}a+=1,i.push(c)}let l=Xr(i),d=l===null?null:{action:"clear",messageId:$e(l.id)};for(let c of i)Ss(this.db,c,s,n,null,d);this.db.exec("COMMIT");for(let c of i)wr("mailbox_delivery_delivered",c,{transition:"delivering->delivered",delivered_at:n,finalizer:"lease-cas"});for(let c of o)wr("mailbox_delivery_finalize_skipped",c,{delivered_at:n,finalizer:"lease-cas",reason:"observed delivery lease changed before finalization"});return a}catch(a){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),a}}markRelayRequestDeliveredAndEnqueueResponses(e,r,n){let s=ws(r),i=[],o=[];this.db.exec("BEGIN IMMEDIATE");try{let a=0,l=0;for(let p of e){if(this.stmts.markMailboxMessageDeliveredIfUnchanged.run(n,s,p.id,p.delivering_at,p.delivery_holder_pid,p.delivery_holder_host).changes!==1){o.push(p);continue}a+=1,i.push(p)}let d=[...i].sort((p,h)=>p.created_at.localeCompare(h.created_at)||p.id-h.id),c=Xr(i),u=null;if(c!==null&&c.sender_teamfile!==null&&c.sender_alias!==null){let p=this.stmts.insertMailboxResponseIfAbsent.run(c.sender_teamfile,c.sender_alias,c.receiver_teamfile,c.receiver_alias,c.root_teamfile,s,n,null,null,null,null,c.reply_mode,c.id);if(l=p.changes,p.changes===1&&(u=this.getMailboxMessage(Number(p.lastInsertRowid)),u===null))throw new Error("mailbox response disappeared during event append")}let m=u===null?null:$e(u.id),f=c===null?null:{action:"clear",messageId:$e(c.id)};for(let p of i)Ss(this.db,p,s,n,c!==null&&p.id!==c.id?m:null,f);u!==null&&ed(this.db,u,{},{},d.map(p=>$e(p.id))),this.db.exec("COMMIT");for(let p of i)wr("mailbox_delivery_delivered",p,{transition:"delivering->delivered",delivered_at:n,finalizer:"lease-cas-with-response"});for(let p of o)wr("mailbox_delivery_finalize_skipped",p,{delivered_at:n,finalizer:"lease-cas-with-response",reason:"observed delivery lease changed before finalization"});return{marked:a,responses:l}}catch(a){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),a}}claimMailForDelivery(e,r,n=process.pid,s=As()){let i=[...new Set(e.map(o=>Math.trunc(o)).filter(o=>Number.isInteger(o)&&o>0))];if(i.length===0)return[];this.db.exec("BEGIN IMMEDIATE");try{let o=[];for(let l of i)if(this.stmts.claimMailboxMessageDelivery.run(r,n,s,l).changes===1){let c=this.getMailboxMessage(l);c!==null&&(Vp(this.db,c,r,n,s),o.push(c))}this.db.exec("COMMIT");let a=o.map(l=>l.id);for(let l of o)wr("mailbox_delivery_claimed",l,{transition:"pending->delivering",batch_ids:a,delivering_at:r,delivery_holder_pid:n,delivery_holder_host:s});return o}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}clearMailDelivery(e){let r=[...new Set(e.map(s=>Math.trunc(s)).filter(s=>Number.isInteger(s)&&s>0))];if(r.length===0)return 0;let n=[];this.db.exec("BEGIN IMMEDIATE");try{let s=0;for(let i of r){let o=this.getMailboxMessage(i),a=this.stmts.clearMailboxMessageDelivery.run(i);s+=a.changes,a.changes===1&&o!==null&&o.delivering_at!==null&&(nd(this.db,o,"explicit-clear"),n.push(o))}this.db.exec("COMMIT");for(let i of n)wr("mailbox_delivery_cleared",i,{transition:"delivering->pending",reason:"explicit non-CAS clear"});return s}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}reclaimMailboxDeliveryIfUnchanged(e,r="delivery-failure"){return this.db.transaction(()=>{let s=this.getMailboxMessage(e.id);if(this.stmts.clearMailboxMessageDeliveryIfUnchanged.run(e.id,e.delivering_at,e.delivery_holder_pid,e.delivery_holder_host).changes!==1)return null;if(s===null)throw new Error("mailbox row disappeared during claim release");return s.delivering_at!==null&&nd(this.db,s,r),this.getMailboxMessage(e.id)})()}reclaimStaleMailboxDeliveries(e){let r=this.stmts.listInFlightMailboxDeliveries.all(),n=[],s=[];this.db.exec("BEGIN IMMEDIATE");try{for(let i of r){let o=vx(i,e);if(!o.reclaim){s.push({row:i,decision:o,reclaimed:!1});continue}let a=this.reclaimMailboxDeliveryIfUnchanged(i,o.reason),l=a!==null;s.push({row:i,decision:o,reclaimed:l}),l&&n.push(a)}this.db.exec("COMMIT");for(let i of s)wr(i.decision.reclaim?i.reclaimed?"mailbox_delivery_reclaimed":"mailbox_delivery_reclaim_raced":"mailbox_delivery_reclaim_deferred",i.row,{transition:i.reclaimed?"delivering->pending":"delivering->delivering",stale_before:e,reclaim_reason:i.decision.reason,holder_pid_alive:i.decision.holderPidAlive});return n}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}listDeliveredReceiptsForSender(e,r){return this.stmts.listDeliveredReceiptsForSender.all(e,r)}listOutboundPendingForSender(e,r){return this.stmts.listOutboundPendingForSender.all(e,r)}getMailboxMessage(e){return this.stmts.getMailboxMessage.get(e)??null}peekMailboxMessages(e,r=1e3){return this.stmts.listMailboxMessagesForReceiver.all(e.receiver_teamfile,e.receiver_alias,Math.max(1,Math.min(1e3,Math.trunc(r))))}recvMailboxMessages(e){return this.recvMailboxMessagesTxn(e.receiver_teamfile,e.receiver_alias)}updateTeamChatLogResponse(e,r){this.stmts.updateTeamChatLogResponse.run(r.response,r.status,r.error_detail,r.truncated,e)}getAgentInflight(e,r){return this.stmts.getAgentInflight.get(e,r)??null}listAgentInflight(){return this.stmts.listAgentInflight.all()}tryAcquireAgentInflight(e,r){return this.tryAcquireAgentInflightTxn(e,r)}heartbeatAgentInflight(e,r,n=D()){return this.db.transaction(()=>{let s=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);return s===null||s.sender_teamfile!==e.sender_teamfile||s.sender_alias!==e.sender_alias||s.started_at!==e.started_at?!1:Zp(this.db,s,r,n)})()}clearAgentInflight(e,r){this.db.transaction(()=>{let s=this.getAgentInflight(e,r);if(s===null)return;this.stmts.clearAgentInflight.run(e,r).changes===1&&ks(this.db,s,"INFLIGHT_RECLAIM","stale")})()}clearObservedTerminalAgentInflight(e,r,n){return this.db.transaction(()=>{let i=this.getAgentInflight(e,r),o=this.stmts.clearObservedTerminalAgentInflight.run({receiver_teamfile:e,receiver_alias:r,observed_sender_teamfile:n.sender_teamfile,observed_sender_alias:n.sender_alias,observed_started_at:n.started_at,observed_holder_pid:n.holder_pid});return o.changes===1&&i!==null&&ks(this.db,i,"INFLIGHT_RELEASE"),o.changes===1})()}releaseAgentInflight(e,r){this.db.exec("BEGIN IMMEDIATE");try{let n=this.getAgentInflight(e.receiver_teamfile,e.receiver_alias);if(n===null||n.sender_teamfile!==e.sender_teamfile||n.sender_alias!==e.sender_alias)return this.db.exec("COMMIT"),!1;if(r!==void 0&&this.db.prepare(`SELECT lease_id FROM agent_state
1600
1600
  WHERE receiver_teamfile = ? AND receiver_alias = ?`).get(e.receiver_teamfile,e.receiver_alias)?.lease_id!==r)return this.db.exec("COMMIT"),!1;if(n.active_count<=1){let i=this.stmts.clearAgentInflightIfSender.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return i.changes===1&&ks(this.db,n,"INFLIGHT_RELEASE"),this.db.exec("COMMIT"),i.changes===1}let s=this.stmts.decrementAgentInflight.run(e.receiver_teamfile,e.receiver_alias,e.sender_teamfile,e.sender_alias);return this.db.exec("COMMIT"),s.changes===1}catch(n){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),n}}clearAgentInflightOlderThan(e){return this.db.transaction(()=>{let n=this.listAgentInflight().filter(i=>i.started_at<e),s=0;for(let i of n)this.stmts.clearAgentInflight.run(i.receiver_teamfile,i.receiver_alias).changes===1&&(ks(this.db,i,"INFLIGHT_RECLAIM","stale"),s+=1);return s})()}getTerminalLock(e,r){let n=this.stmts.getRuntimeState.get(Ts,bs(e,r),vs);return n===void 0?null:Up(n.data)}setTerminalLock(e){this.db.transaction(()=>{let n=this.getTerminalLock(e.teamfile,e.alias);n!==null&&n.lock_id!==e.lock_id&&sd(this.db,n,!0),this.stmts.upsertRuntimeState.run(Ts,bs(e.teamfile,e.alias),vs,JSON.stringify(e),e.last_heartbeat),n?.lock_id!==e.lock_id&&Qp(this.db,e)})()}heartbeatTerminalLock(e,r,n,s){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getTerminalLock(e,r);if(i===null||i.lock_id!==n)return this.db.exec("COMMIT"),!1;let o={...i,last_heartbeat:s};return this.stmts.upsertRuntimeState.run(Ts,bs(e,r),vs,JSON.stringify(o),s),this.db.exec("COMMIT"),!0}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}clearTerminalLock(e,r,n){this.db.exec("BEGIN IMMEDIATE");try{let s=this.getTerminalLock(e,r);if(s===null||s.lock_id!==n)return this.db.exec("COMMIT"),!1;let i=this.stmts.deleteRuntimeState.run(Ts,bs(e,r),vs);return i.changes===1&&sd(this.db,s),this.db.exec("COMMIT"),i.changes===1}catch(s){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),s}}getRuntimeProcessLock(e,r,n){let s=this.stmts.getRuntimeState.get(e,r,n);return s===void 0?null:wx(s.data)}tryAcquireRuntimeProcessLock(e,r,n,s,i=D()){this.db.exec("BEGIN IMMEDIATE");try{let o=this.getRuntimeProcessLock(e,r,n);if(o!==null&&!Tx(o,s))return this.db.exec("COMMIT"),{acquired:!1,current:o};let a={lock_id:p_(),holder_pid:process.pid,holder_host:As(),started_at:i,last_heartbeat:i};return this.stmts.upsertRuntimeState.run(e,r,n,JSON.stringify(a),i),this.db.exec("COMMIT"),{acquired:!0,lock:a,previous:o}}catch(o){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),o}}clearRuntimeProcessLock(e,r,n,s){this.db.exec("BEGIN IMMEDIATE");try{let i=this.getRuntimeProcessLock(e,r,n);if(i===null||i.lock_id!==s)return this.db.exec("COMMIT"),!1;let o=this.stmts.deleteRuntimeState.run(e,r,n);return this.db.exec("COMMIT"),o.changes===1}catch(i){throw this.db.inTransaction&&this.db.exec("ROLLBACK"),i}}getRun(e){return this.stmts.getRun.get(e)??null}setRunCurrentState(e,r){return this.stmts.setRunCurrentState.run(r,e),this.stmts.getRun.get(e)??null}setRunPausedState(e,r,n){return this.stmts.setRunPausedState.run(r,n,e),this.stmts.getRun.get(e)??null}setRunPendingEscalationDecision(e,r){return this.stmts.setRunPendingEscalationDecision.run(r,e),this.stmts.getRun.get(e)??null}setRunTerminalState(e,r){return this.stmts.setRunTerminalState.run(r,D(),e),this.stmts.getRun.get(e)??null}pauseJob(e){return this.stmts.pauseJob.run(e),this.getJob(e)}resumeRun(e,r){return this.resumeRunTxn(e,r,D())}insertStep(e){let r=this.stmts.insertStep.run(e.run_id,e.parent_step_id??null,e.state_name,e.outcome??null,e.status_detail??null,D());return this.stmts.getStep.get(r.lastInsertRowid)}finishStep(e,r,n){return this.stmts.finishStep.run(r??null,n??null,D(),e),this.stmts.getStep.get(e)??null}listStepsForRun(e){return this.stmts.listStepsForRun.all(e)}listLatestStepOutcomesByState(e){let r=this.stmts.listLatestStepOutcomesByState.all(e),n={};for(let s of r)n[s.state_name]=s.outcome;return n}insertSubmittedPr(e){let r=this.stmts.insertSubmittedPr.run(e.repo,e.pr_url,e.issue_url??null,e.local_path??null,e.branch??null,e.head_sha??null,e.status??"watching",e.submitted_at??D(),e.last_known_state??null,e.created_by_run_id??null);return this.stmts.getSubmittedPr.get(r.lastInsertRowid)}listSubmittedPrs(e){return e?.status!==void 0?this.stmts.listSubmittedPrsByStatus.all(e.status):this.stmts.listSubmittedPrs.all()}getSubmittedPr(e){return this.stmts.getSubmittedPr.get(e)??null}findSubmittedPrByUrl(e){return this.stmts.findSubmittedPrByUrl.get(e)??null}insertStepArtifact(e){let r=this.stmts.insertStepArtifact.run(e.step_id,e.kind,e.path??null,e.content??null,e.sha??null,e.provider_call_mode??null,D());return this.stmts.getStepArtifact.get(r.lastInsertRowid)}insertExternalObject(e){let n=this.stmts.insertExternalObject.run(e.type,e.provider,e.project_id,e.run_id??null,e.external_id,e.url??null,e.status??null,e.metadata??null,e.last_seen_at??null,D()).changes===1;return{row:this.stmts.findExternalObjectByUnique.get(e.provider,e.type,e.external_id),inserted:n}}insertExternalSignal(e){let r=this.stmts.insertExternalSignal.run(e.object_id,e.kind,e.source??null,e.occurred_at??null,e.payload??null,e.signal_hash??null,null,D()),n=r.changes===1;return{row:e.signal_hash===void 0||e.signal_hash===null?this.stmts.getExternalSignal.get(r.lastInsertRowid):this.stmts.findExternalSignalByUnique.get(e.object_id,e.kind,e.signal_hash),inserted:n}}raiseAttention(e){let r=this.stmts.insertAttention.run(e.kind,e.severity??"warn",e.project_id??null,e.run_id??null,e.external_object_id??null,e.requires_user===!0?1:0,e.payload??null,D());return this.stmts.getAttention.get(r.lastInsertRowid)}acknowledgeAttention(e){return this.stmts.ackAttention.run(D(),e),this.stmts.getAttention.get(e)??null}upsertDurableMemory(e){let r=D();return this.stmts.upsertDurableMemory.run(e.project_id,e.type,e.name,e.description??null,e.body,r,r),this.stmts.getDurableMemoryByName.get(e.project_id,e.name)}getDurableMemoryByName(e,r){return this.stmts.getDurableMemoryByName.get(e,r)??null}deleteDurableMemory(e,r){return this.stmts.deleteDurableMemory.run(e,r).changes>0}listDurableMemory(e,r){return r!==void 0?this.stmts.listDurableMemoryByType.all(e,r):this.stmts.listDurableMemory.all(e)}indexDurableMemory(e,r){return r!==void 0&&r.length>0?this.stmts.listDurableMemory.all(e).filter(s=>r.includes(s.type)).map(({name:s,description:i,type:o,updated_at:a})=>({name:s,description:i,type:o,updated_at:a})):this.stmts.listDurableMemory.all(e).map(({name:n,description:s,type:i,updated_at:o})=>({name:n,description:s,type:i,updated_at:o}))}recordSessionSize(e){let r=this.stmts.insertSessionSize.run(e.team_name,e.alias,e.sessionid,e.input_tokens??null,e.cache_tokens??null,e.output_tokens??null,e.total_tokens??null,e.observed_at??D());return this.stmts.getSessionSize.get(r.lastInsertRowid)}latestSessionSizes(){return this.stmts.latestSessionSizes.all()}sessionSizeHistory(e,r,n=20){return this.stmts.sessionSizeHistory.all(e,r,n)}insertSessionEvent(e){let r=this.stmts.insertSessionEvent.run(e.run_id,e.step_id??null,e.kind,e.timestamp_ms,e.payload,e.payload_truncated??0,e.overflow_artifact_id??null);return this.stmts.getSessionEvent.get(r.lastInsertRowid)}listSessionEvents(e,r){return r!==void 0?this.stmts.listSessionEventsSince.all(e,r):this.stmts.listSessionEvents.all(e)}listSessionEventsSince(e,r=1e3){return this.stmts.listAllEventsSince.all(e,r)}latestAgentCall(e){let r=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call' ORDER BY id DESC LIMIT 1").get(e);if(r===void 0)return null;try{let n=JSON.parse(r.payload);return typeof n.alias!="string"||typeof n.provider!="string"?null:{alias:n.alias,provider:n.provider,...typeof n.model=="string"?{model:n.model}:{}}}catch{return null}}agentCallTokenTotals(e){let r=this.db.prepare("SELECT payload FROM session_event WHERE run_id = ? AND kind = 'agent_call'").all(e),n=0,s=0,i=0;for(let o of r)try{let a=JSON.parse(o.payload);typeof a.tokens_in=="number"&&(n+=a.tokens_in),typeof a.tokens_out=="number"&&(s+=a.tokens_out),i+=1}catch{}return{totalInputTokens:n,totalOutputTokens:s,agentCallCount:i}}addRollupValue(e){this.stmts.upsertRollupStat.run(e.run_id,e.step_id??null,e.metric_kind,e.value,e.bucket_start_ms,e.bucket_end_ms,e.updated_at)}listRollupStats(e){return this.stmts.listRollupStats.all(e)}getRollupCursor(){return this.stmts.getRollupCursor.get("last_event_id")?.value??0}setRollupCursor(e){this.stmts.setRollupCursor.run("last_event_id",e)}insertDriftSignal(e){let r=this.stmts.insertDriftSignal.run(e.team_member_id,e.project_id??null,e.signal_kind,e.severity,e.description,e.detected_at,e.expires_at??null,e.payload??null);return this.stmts.getDriftSignal.get(r.lastInsertRowid)}listDriftSignals(e={}){return e.team_member_id!==void 0&&e.unacked?this.stmts.listUnackedDriftByMember.all(e.team_member_id):e.team_member_id!==void 0?this.stmts.listDriftByMember.all(e.team_member_id):e.project_id!==void 0?this.stmts.listDriftByProject.all(e.project_id):this.stmts.listAllDrift.all()}hasUnackedDriftSignal(e,r,n){return this.stmts.findUnackedDrift.get(e,r??null,n)!==void 0}acknowledgeDriftSignal(e){return this.stmts.ackDriftSignal.run(Date.now(),e),this.stmts.getDriftSignal.get(e)??null}insertInteractiveSession(e){let r=Date.now();return this.stmts.insertInteractiveSession.run(e.run_id,e.step_id,e.state_name,e.status,r,r),this.stmts.getInteractiveSessionByStepId.get(e.step_id)}getInteractiveSessionByStepId(e){return this.stmts.getInteractiveSessionByStepId.get(e)??null}getInteractiveSessionByRunAndState(e,r){return this.stmts.getInteractiveSessionByRunAndState.get(e,r)??null}setInteractiveAgentOutput(e,r,n){this.stmts.setInteractiveAgentOutput.run(r,n,Date.now(),e)}resumeInteractive(e,r,n){return this.resumeInteractiveTxn(e,r,n,D())}resumeEscalation(e,r){return this.resumeEscalationTxn(e,r,D())}}});import{realpathSync as Ix}from"node:fs";import{resolve as Nx}from"node:path";function dd(t){let e=Nx(t);try{return Ix(e)}catch{return e}}var g_=w(()=>{"use strict"});import{platform as y_}from"node:os";function Ot(t){let e=new xs;for(let r of t)e.registerAdapter(r);return e}var xs,cd=w(()=>{"use strict";g_();xs=class{providers=[];adapters=new Map;register(e){this.providers.push(e)}async listAll(e){let r=[],n=e?.provider?this.providers.filter(o=>o.name===e.provider):this.providers,s=await Promise.all(n.map(o=>o.discoverSessions()));for(let o of s)r.push(...o);let i=r;if(e?.workspace){let o=dd(e.workspace);i=i.filter(a=>dd(a.cwd)===o)}if(e?.from){let o=e.from.getTime();i=i.filter(a=>a.modifiedAt.getTime()>=o)}if(e?.to){let o=e.to.getTime();i=i.filter(a=>a.modifiedAt.getTime()<=o)}return i.sort((o,a)=>a.modifiedAt.getTime()-o.modifiedAt.getTime()),e?.limit&&(i=i.slice(0,e.limit)),i}async getSession(e,r){let n=r?this.providers.filter(s=>s.name===r):this.providers;for(let s of n){let i=await s.loadSession(e);if(i)return i}return null}async resolveSession(e,r){let n=await this.resolveSessions(e,r);return n.length===1?n[0]:null}async resolveSessions(e,r){let n=r?this.providers.filter(i=>i.name===r):this.providers,s=[];for(let i of n){let o=await i.resolveSessionPath(e);o&&s.push({provider:i,filePath:o})}return s}getWatchTargets(){let e=y_()==="darwin"||y_()==="win32",r=[];for(let n of this.providers)if(typeof n.getWatchPaths=="function")for(let s of n.getWatchPaths())r.push({provider:n.name,directory:s.directory,recursive:e,filePattern:s.filePattern});return r}async deleteSession(e,r){let n=await this.resolveSession(e,r);return n?n.provider.deleteSession(e):!1}registerAdapter(e){this.adapters.set(e.name,e),this.providers.push({name:e.name,discoverSessions:()=>e.discover(),loadSession:r=>e.load(r),resolveSessionPath:r=>e.resolvePath(r),deleteSession:r=>e.delete(r),getWatchPaths:()=>e.getWatchPaths?.()??[]})}getAdapter(e){return this.adapters.get(e)}getAllAdapters(){return[...this.adapters.values()]}}});import{createReadStream as E_}from"node:fs";import{createInterface as w_}from"node:readline";import{stat as Ax}from"node:fs/promises";import{homedir as xx}from"node:os";function T_(t){try{let e=JSON.parse(t);return e===null||typeof e!="object"||Array.isArray(e)?void 0:e}catch{return}}async function*Be(t){let e=E_(t,{encoding:"utf-8"}),r=w_({input:e,crlfDelay:1/0});try{for await(let n of r){let s=n.trim();if(!s)continue;let i=T_(s);i!==void 0&&(yield i)}}finally{e.destroy()}}async function Xe(t,e){let r=[],n=E_(t,{encoding:"utf-8"}),s=w_({input:n,crlfDelay:1/0});try{for await(let i of s){let o=i.trim();if(!o)continue;let a=T_(o);if(a!==void 0&&r.push(a),r.length>=e)break}}finally{s.close(),n.destroy()}return r}async function Oe(t){let e=await Ax(t);return{createdAt:e.birthtime,modifiedAt:e.mtime}}function me(t){return t.replace(/\\n/g,`
1601
1601
  `).replace(/\\t/g," ").replace(/\\r/g,"\r")}function X(t,e){return t.length<=e?t:t.slice(0,e-3)+"..."}function Ct(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}var ve,tr=w(()=>{"use strict";ve=xx()});import{readdir as Gi,stat as v_,unlink as Rx}from"node:fs/promises";import{join as Nn,basename as b_}from"node:path";function Lx(t){return t==="file-history-snapshot"||t==="progress"||t==="system"||t==="queue-operation"}function Ox(t){if(t.type==="system"){let e=t.message?.content;if(typeof e=="string"&&e.trim())return me(e.trim());if(e!==void 0)return JSON.stringify(e,null,2)}return t.type==="progress"&&t.data!==void 0?JSON.stringify(t.data,null,2):JSON.stringify(t,null,2)}async function S_(t){let e=0,r=0,n=0,s=0,i=0,o=0,a;for await(let l of Be(t))if(!l.isSidechain){if(l.type==="user"&&!l.isMeta&&l.message){let d=l.message.content;if(typeof d=="string"){if(d.includes("<command-name>")||d.includes("<local-command-"))continue;e++}}else if(l.type==="assistant"&&l.message){let d=l.message.content;if(Array.isArray(d))for(let u of d)u.type==="text"&&e++;let c=l.message.usage;if(c){let u=c.input_tokens||0,m=c.cache_creation_input_tokens||0,f=c.cache_read_input_tokens||0,p=c.output_tokens||0;r+=u+m+f,n+=f,s+=m,i+=p;let h=u+m+f;h&&(o=h),a={inputTokens:u,cacheWriteInputTokens:m,cachedInputTokens:f,outputTokens:p}}}}return{messageCount:e,totalInputTokens:r,totalCacheReadInputTokens:n,totalCacheWriteInputTokens:s,totalOutputTokens:i,lastInputTokens:o,lastTokenUsage:a}}function Cx(t){let e=$x(t),r=new Set;for(let n of t){if(n.role!=="tool_use"||n.toolName!=="Bash"||n.toolInputData?.run_in_background!==!0||n.toolCallId===void 0)continue;let s=e.get(n.toolCallId);if(s===void 0)continue;let i=s.content.match(/Command running in background with ID:\s*([A-Za-z0-9_-]+)/)?.[1];i!==void 0&&(r.add(i),n.backgroundTaskId=i,s.backgroundTaskId=i)}for(let n of t){if(n.role!=="tool_use"||n.toolName!=="TaskOutput"&&n.toolName!=="TaskStop"||n.toolCallId===void 0)continue;let s=n.toolInputData?.task_id;if(typeof s!="string"||!r.has(s))continue;n.backgroundTaskId=s;let i=e.get(n.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function $x(t){let e=new Map;for(let r of t)r.role==="tool_result"&&r.toolCallId!==void 0&&e.set(r.toolCallId,r);return e}var Ki,k_=w(()=>{"use strict";tr();Ki=class{name="claude";claudeDir;projectsDir;constructor(e={}){this.claudeDir=e.claudeDir||Nn(ve,".claude"),this.projectsDir=Nn(this.claudeDir,"projects")}getWatchPaths(){return[{directory:this.projectsDir,filePattern:/\.jsonl$/}]}async discoverSessions(){let e=[],r;try{r=await Gi(this.projectsDir)}catch{return e}for(let n of r){let s=Nn(this.projectsDir,n);if(!(await v_(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await Gi(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=b_(a,".jsonl");if(!/^[0-9a-f]{8}-/.test(l))continue;let d=Nn(s,a);try{let c=await this.extractSummary(d,l);c&&e.push(c)}catch{}}}return e}async extractSummary(e,r){let n=await Xe(e,50),s=await Oe(e),i="",o,a,l,d,c,u;for(let f of n)if(!Lx(f.type)&&(!i&&f.cwd&&(i=f.cwd),!o&&f.slug&&(o=f.slug),!a&&f.version&&(a=f.version),!u&&f.timestamp&&(u=new Date(f.timestamp)),f.type==="assistant"&&f.message?.model&&(l=f.message.model),f.type==="user"&&!f.isMeta&&f.message)){let p=f.message.content;if(typeof p=="string"){if(p.includes("<command-name>")||p.includes("<local-command-"))continue;d||(d=X(p.trim(),80)),c=X(p.trim(),80)}}if(!i)return null;let m=await S_(e);return{provider:"claude",sessionId:r,slug:o,cwd:i,createdAt:u||s.createdAt,modifiedAt:s.modifiedAt,model:l,cliVersion:a,startCommand:"claude",firstUserMessage:d,lastUserMessage:c,messageCount:m.messageCount,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:m.totalCacheWriteInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async loadSession(e){let r=await this.resolveSessionFile(e);if(!r)return null;let n=await Oe(r),s=[],i="",o,a,l,d,c,u,m,f=e,p;for await(let _ of Be(r))if(_.type!=="file-history-snapshot"&&!_.isSidechain){if(!i&&_.cwd&&(i=_.cwd),!o&&_.slug&&(o=_.slug),!a&&_.version&&(a=_.version),!d&&_.gitBranch&&(d=_.gitBranch),!m&&_.timestamp&&(m=new Date(_.timestamp)),_.sessionId&&(f=_.sessionId),_.type==="system"||_.type==="progress"||_.type==="queue-operation"){s.push({role:"system",timestamp:new Date(_.timestamp||0),content:Ox(_)});continue}if(_.type==="user"&&_.message){if(_.isMeta)continue;let g=new Date(_.timestamp||0),y=_.message.content;if(typeof y=="string"){if(y.includes("<command-name>")||y.includes("<local-command-"))continue;c||(c=X(y.trim(),80)),u=X(y.trim(),80),p=void 0,s.push({role:"user",timestamp:g,content:me(y.trim())})}else if(Array.isArray(y)){for(let E of y)if(E.type==="tool_result"){let v=typeof E.content=="string"?me(E.content):JSON.stringify(E.content);s.push({role:"tool_result",timestamp:g,content:v,toolCallId:E.tool_use_id})}}}if(_.type==="assistant"&&_.message){_.message.stop_reason===null||_.message.stop_reason==="tool_use"?p="in_progress":typeof _.message.stop_reason=="string"&&(p="complete"),_.message.model&&(l=_.message.model);let g=new Date(_.timestamp||0),y=_.message.content;if(Array.isArray(y))for(let E of y)E.type==="text"&&E.text?s.push({role:"assistant",timestamp:g,content:me(E.text),model:_.message.model,...typeof _.message.stop_reason=="string"?{stopReason:_.message.stop_reason}:{}}):E.type==="tool_use"?s.push({role:"tool_use",timestamp:g,content:E.name||"unknown tool",toolName:E.name,toolInput:JSON.stringify(E.input,null,2),toolInputData:E.input,toolCallId:E.id,model:_.message.model,...typeof _.message.stop_reason=="string"?{stopReason:_.message.stop_reason}:{}}):E.type==="thinking"&&E.thinking&&s.push({role:"thinking",timestamp:g,content:E.thinking})}}if(!i)return null;Cx(s);let h=await S_(r);return{provider:"claude",sessionId:f,slug:o,cwd:i,createdAt:m||n.createdAt,modifiedAt:n.modifiedAt,model:l,cliVersion:a,startCommand:"claude",gitBranch:d,turnStatus:p,firstUserMessage:c,lastUserMessage:u,messageCount:h.messageCount,filePath:r,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCacheReadInputTokens||void 0,totalCacheWriteInputTokens:h.totalCacheWriteInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:s}}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let r=await this.resolveSessionFile(e);return r?(await Rx(r),!0):!1}async resolveSessionFile(e){let r;try{r=await Gi(this.projectsDir)}catch{return null}let n=[];for(let o of r){let a=Nn(this.projectsDir,o);if(!(await v_(a).catch(()=>null))?.isDirectory())continue;let d;try{d=await Gi(a)}catch{continue}for(let c of d){if(!c.endsWith(".jsonl"))continue;let u=b_(c,".jsonl");/^[0-9a-f]{8}-/.test(u)&&n.push({filePath:Nn(a,c),fileSessionId:u})}}let s=n.find(o=>o.fileSessionId===e);if(s)return s.filePath;let i=n.filter(o=>o.fileSessionId.startsWith(e));if(i.length===1)return i[0].filePath;for(let o of n){let a=await Xe(o.filePath,20);for(let l of a)if(l.slug&&l.slug===e)return o.filePath}return null}}});import{readFileSync as Mx,writeFileSync as YK,mkdirSync as zK}from"node:fs";import{join as Dx,dirname as QK}from"node:path";import{homedir as jx}from"node:os";function Fx(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function Ux(t){let e=t.indexOf("=");if(e===-1)return null;let r=t.slice(0,e).trim(),n=Fx(t.slice(e+1).trim());return r?{key:r,value:n}:null}function Wx(t){let e=t.trim();return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).trim():null}function Vi(t){return"'"+t.replace(/'/g,"'\\''")+"'"}function qx(){return Dx(jx(),".lmctl","config.toml")}function N_(t){let e=t??qx(),r;try{r=Mx(e,"utf-8")}catch{return{tools:{}}}return Bx(r)}function I_(t){if(typeof t=="number")return Number.isFinite(t)?t:null;let e=String(t).trim();if(!e)return null;let r=e.match(/^(\d+(?:\.\d+)?)\s*([KkMm]?)$/);if(!r)return null;let n=parseFloat(r[1]);if(!Number.isFinite(n))return null;switch(r[2]){case"K":case"k":return Math.round(n*1e3);case"M":case"m":return Math.round(n*1e6);default:return Math.round(n)}}function Bx(t){let e={},r={},n=t.split(`
1602
1602
  `),s={kind:"none"},i={},o=!1,a={};function l(){if(s.kind==="tool"){let u=e[s.tool]??{};if(s.profile){let m=u.profiles?.[s.profile]??{};i.description&&(m.description=i.description),i.flags!==void 0&&(m.flags=i.flags),u.profiles||(u.profiles={}),u.profiles[s.profile]=m}else i.start&&(u.start=i.start),i.resume&&(u.resume=i.resume),i.agent&&(u.agent=i.agent),i.profile_flag!==void 0&&(u.profile_flag=i.profile_flag);e[s.tool]=u}else if(s.kind==="compact"){let u=s.provider?r.providers?.[s.provider]??{}:r.global??{};if(i.min!==void 0){let m=I_(i.min);m!==null&&(u.min=m)}if(i.max!==void 0){let m=I_(i.max);m!==null&&(u.max=m)}s.provider?(r.providers||(r.providers={}),r.providers[s.provider]=u):r.global=u}i={}}for(let u of n){let m=u.trim();if(!m||m.startsWith("#"))continue;let f=Wx(m);if(f!==null){if(o=!0,l(),f.startsWith("tool.")){let h=".profile.",_=f.indexOf(h);_!==-1?s={kind:"tool",tool:f.slice(5,_),profile:f.slice(_+h.length)}:s={kind:"tool",tool:f.slice(5),profile:null}}else f==="compact"?s={kind:"compact",provider:null}:f.startsWith("compact.")?s={kind:"compact",provider:f.slice(8)}:s={kind:"none"};continue}let p=Ux(m);p&&s.kind!=="none"?i[p.key]=p.value:p&&!o&&(a[p.key]=p.value)}l();let d={tools:e};(r.global||r.providers)&&(d.compact=r);let c=a.site_name;return c!==void 0&&c.length>0&&(d.site_name=c),d}function A_(t){return t.site_name??null}function Hx(t,e,r){if(!r)return"";let n=t.tools[e]??ud[e],s=n?.profiles?.[r]?.flags??ud[e]?.profiles?.[r]?.flags;if(s!==void 0)return s.trim();if(n?.profile_flag)return n.profile_flag.replace(/\{\{profile\}\}/g,r).trim();throw new Error(`Profile "${r}" is not configured for tool "${e}"`)}function x_(t,e){return!!t.tools[e]}function R_(t,e,r,n,s){let i=t.tools[e]??ud[e],o;if(i?.agent){let l=Vi(n);o=i.agent.replace(/\{\{session_id\}\}/g,r).replace(/\{\{prompt\}\}/g,l)}else{let l=Px[e];if(!l)throw new Error(`No agent command configured for tool "${e}"`);let d=l.argv.map(c=>c.replace(/\{\{session_id\}\}/g,r).replace(/\{\{prompt\}\}/g,n));if(l.mode==="stdin"){let c=d.map(Vi).join(" ");o=`printf '%s\\n' ${Vi(n)} | ${c}`}else o=d.map(Vi).join(" ")}let a=Hx(t,e,s);return a&&(o+=" "+a),o}var ud,Px,md=w(()=>{"use strict";ud={claude:{start:"claude",resume:"claude --resume {{session_id}} --dangerously-skip-permissions",profiles:{default:{description:"Default profile",flags:""}}},codex:{start:"codex",resume:"codex resume {{session_id}} --dangerously-bypass-approvals-and-sandbox",profiles:{default:{description:"Default profile",flags:""}}},opencode:{start:"opencode",resume:"opencode --session {{session_id}}",profiles:{default:{description:"Default profile",flags:""}}},gemini:{start:"gemini",resume:"gemini --resume {{session_id}} -y",profiles:{default:{description:"Default profile",flags:""}}},copilot:{start:"copilot",resume:"copilot --resume={{session_id}} --yolo",profiles:{default:{description:"Default profile",flags:""}}},qwen:{start:"qwen",resume:"qwen --resume {{session_id}} --approval-mode yolo",profiles:{default:{description:"Default profile",flags:""}}},agy:{start:"agy",resume:"agy --conversation {{session_id}} --dangerously-skip-permissions",profiles:{default:{description:"Default profile",flags:""}}},kimi:{start:"kimi --auto",resume:"kimi --session {{session_id}} --auto",profiles:{default:{description:"Default profile",flags:""}}}},Px={claude:{mode:"argv",argv:["claude","-p","{{prompt}}","--resume","{{session_id}}"]},codex:{mode:"argv",argv:["codex","exec","--dangerously-bypass-approvals-and-sandbox","--skip-git-repo-check","resume","{{session_id}}","{{prompt}}"]},opencode:{mode:"argv",argv:["opencode","run","--session","{{session_id}}","{{prompt}}"]},gemini:{mode:"argv",argv:["gemini","-p","{{prompt}}","--resume","{{session_id}}"]},copilot:{mode:"argv",argv:["gh","copilot","--","--resume={{session_id}}","-p","{{prompt}}","-s","--allow-all-tools"]},qwen:{mode:"argv",argv:["qwen","-p","{{prompt}}","--resume","{{session_id}}","--approval-mode","yolo"]},agy:{mode:"argv",argv:["agy","--conversation","{{session_id}}","-p","{{prompt}}","--dangerously-skip-permissions","--print-timeout","8h"]},kimi:{mode:"argv",argv:["kimi","-p","{{prompt}}","--session","{{session_id}}","--output-format","stream-json"]}}});function L_(t=process.env){let e=t.LMCTL_ONE_SHOT_TIMEOUT_MS;if(!e)return 6e5;let r=Number(e);return!Number.isFinite(r)||r<=0?6e5:r}var O_=w(()=>{"use strict"});var Xx,ge,Yi,gt=w(()=>{"use strict";Xx="ACK: waiting for explicit lmctl task.",ge=`lmctl seed initial connection only. Create or pin this provider session, then stop. Do not inspect files, run commands, infer a task, delegate, edit, or begin work. Reply exactly: ${Xx}`,Yi=`send this exact lmctl seed instruction: "${ge}"`});function Tr(t,e){let r={...t??process.env,PWD:e};return delete r.OLDPWD,r}function Gx(t,e){return e===void 0||e.length===0?t:{...t??process.env,[Rs]:e}}function Je(t,e,r,n="chat"){return{...Gx(Tr(t,e),r),[Jx]:n}}var Rs,Jx,yt=w(()=>{"use strict";Rs="LMCTL_SELF_SESSIONID",Jx="LMCTL_LAUNCH_SOURCE"});import{spawn as C_}from"node:child_process";import{mkdirSync as Kx}from"node:fs";var fd,xe,$t=w(()=>{"use strict";md();O_();gt();yt();fd=class t extends Error{cancelReason;constructor(e,r){super(e),this.name="TurnAbortError",this.cancelReason=r,Object.setPrototypeOf(this,t.prototype)}},xe=class t{name;capabilities;injection;provider;binary;seedArgs;seedStdin;resumeTemplate;startTemplate;transportFn;constructor(e){this.name=e.provider.name,this.provider=e.provider,this.capabilities=e.capabilities,this.injection=e.injection,this.binary=e.binary,this.seedArgs=e.seedArgs,this.seedStdin=e.seedStdin,this.resumeTemplate=e.resumeTemplate,this.startTemplate=e.startTemplate,this.transportFn=e.transport}discover(){return this.provider.discoverSessions()}load(e){return this.provider.loadSession(e)}resolvePath(e){return this.provider.resolveSessionPath(e)}delete(e){return this.provider.deleteSession(e)}getWatchPaths(){return this.provider.getWatchPaths?.()??[]}seedArgsFor(e){let r=e?.prompt;return r===void 0?this.seedArgs:this.seedArgs.map(n=>n===ge?r:n)}seed(e,r){return Kx(e,{recursive:!0}),new Promise(n=>{let s;try{s=C_(this.binary,this.seedArgsFor(r),{cwd:e,env:Tr(void 0,e),stdio:["pipe","pipe","pipe"],timeout:6e4})}catch(a){return n({success:!1,error:a instanceof Error?a.message:String(a)})}let i="";s.stderr?.on("data",a=>{i+=a.toString()});let o=r?.prompt!==void 0&&this.seedStdin!==void 0?`${r.prompt}
@@ -1644,11 +1644,11 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1644
1644
  `,resumeTemplate:"codex resume {{session_id}}",startTemplate:"codex",transport:nh})}seedArgsFor(e){let r=super.seedArgsFor(e);return e?.model?[...r.slice(0,-1),"--model",e.model,r[r.length-1]]:r}}});function Ms(t){if(!t.trim())return"unknown";let e=t.split(/\r?\n/).filter(n=>n.trim().length>0);if(e.length>1)try{let n=JSON.parse(e[0]);if(n!==null&&typeof n=="object"&&!Array.isArray(n)&&"kind"in n)return"jsonl"}catch{}let r;try{r=JSON.parse(t)}catch{return"unknown"}if(r!==null&&typeof r=="object"&&!Array.isArray(r)){let n=r;if(Array.isArray(n.messages))return"json";if("kind"in n)return"jsonl"}return"unknown"}function io(t){let e=Ms(t);if(e==="unknown")throw new Error("gemini session content matches neither known format (old .json with messages[] or new .jsonl with kind metadata)");if(e==="json"){let a=JSON.parse(t);return{sessionId:a.sessionId,projectHash:a.projectHash,startTime:a.startTime,lastUpdated:a.lastUpdated,kind:a.kind,messages:Array.isArray(a.messages)?a.messages:[]}}let r=t.split(`
1645
1645
  `).map(a=>a).filter(a=>a.trim().length>0);if(r.length===0)throw new Error("gemini session file is empty");let n=r[0],s;try{s=JSON.parse(n)}catch(a){throw new Error(`gemini JSONL session: metadata line failed to parse: ${a instanceof Error?a.message:String(a)}`)}if(s===null||typeof s!="object")throw new Error("gemini JSONL session: metadata line is not an object");let i=[],o=new Map;for(let a=1;a<r.length;a++){let l;try{l=JSON.parse(r[a])}catch{continue}if(l===null||typeof l!="object")continue;let d=l;if("$set"in d&&d.$set&&typeof d.$set=="object"){Object.assign(s,d.$set);continue}if(typeof d.id=="string"||typeof d.type=="string"){let c=d;if(typeof c.id=="string"){let u=o.get(c.id);u?GR(u,c):(i.push(c),o.set(c.id,c))}else i.push(c)}}return{sessionId:typeof s.sessionId=="string"?s.sessionId:void 0,projectHash:typeof s.projectHash=="string"?s.projectHash:void 0,startTime:typeof s.startTime=="string"?s.startTime:void 0,lastUpdated:typeof s.lastUpdated=="string"?s.lastUpdated:void 0,kind:typeof s.kind=="string"?s.kind:void 0,messages:i}}function GR(t,e){for(let[r,n]of Object.entries(e))if(n!==void 0){if(r==="tokens"&&lh(t.tokens)&&lh(n)){t.tokens={...t.tokens,...n};continue}t[r]=n}}function lh(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function dh(t,e){if(e==="json")return JSON.stringify(t,null,2);let{messages:r,...n}=t,s=[JSON.stringify(n)];for(let i of r)s.push(JSON.stringify(i));return s.join(`
1646
1646
  `)+`
1647
- `}var Fd=w(()=>{"use strict"});import{createHash as KR}from"node:crypto";import{readdir as Ds,readFile as ch,stat as oo,unlink as VR}from"node:fs/promises";import{join as rt,basename as YR,dirname as zR}from"node:path";import{cwd as ZR}from"node:process";function uh(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function mh(t){return t==="user"}function Ud(t){return t==="gemini"||t==="assistant"}function Gr(t,e=new Date(0)){if(!t)return e;let r=new Date(t);return Number.isNaN(r.getTime())?e:r}function QR(t){return`${t.sessionId}\0${t.cwd}`}function e0(t,e){let r=t.filePaths??[t.filePath],n=e.filePaths??[e.filePath],s=[...new Set([...r,...n])],i=e.modifiedAt.getTime()>=t.modifiedAt.getTime()?e:t;return{...i,createdAt:t.createdAt.getTime()<=e.createdAt.getTime()?t.createdAt:e.createdAt,modifiedAt:i.modifiedAt,filePath:i.filePath,filePaths:s}}function ao(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function fh(t){let e=0,r=0,n=0,s=0,i=0,o;for(let a of t){if(!Ud(a.type)||!a.tokens)continue;let l=ao(a.tokens.input),d=ao(a.tokens.cached),c=Math.max(l-d,0),u=ao(a.tokens.output),m=ao(a.tokens.thoughts);e+=l,r+=d,n+=u,s+=m,i=l,o={inputTokens:c,cachedInputTokens:d,cacheWriteInputTokens:0,outputTokens:u,reasoningOutputTokens:m,totalTokens:l+u+m}}return{totalInputTokens:e,totalCachedInputTokens:r,totalOutputTokens:n,totalReasoningOutputTokens:s,lastInputTokens:i,lastTokenUsage:o}}function t0(t){return KR("sha256").update(t).digest("hex")}function js(t,e){let r=e;for(;r&&!t.has(r);){t.add(r);let n=zR(r);if(n===r)break;r=n}}var lo,ph=w(()=>{"use strict";tr();Fd();pe();lo=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let r=e.geminiDir||rt(ve,".gemini");this.geminiProjectsFile=rt(r,"projects.json"),this.geminiTmpDir=rt(r,"tmp");let n=e.claudeDir||rt(ve,".claude");this.claudeProjectsDir=rt(n,"projects");let s=[rt(ve,".codex"),rt(ve,".code")],i=e.codexDirs&&e.codexDirs.length>0?e.codexDirs:[e.codexDir||s[0],e.codeDir||s[1]];this.codexSessionDirs=[...new Set(i)].map(o=>rt(o,"sessions")),this.extraWorkspacePaths=e.extraWorkspacePaths||[]}getWatchPaths(){return[{directory:this.geminiTmpDir,filePattern:/\.jsonl?$/}]}async discoverSessions(){let e=await this.findSessionFiles(),r=new Map;for(let n of e)try{let s=await this.extractSummary(n);if(!s)continue;let i=QR(s),o=r.get(i);r.set(i,o?e0(o,s):s)}catch{}return[...r.values()]}async loadSession(e){let r=await this.resolveSessionFile(e);if(!r)return null;let n;try{n=await this.readSessionFile(r)}catch{return null}if(!n)return null;let s=await Oe(r),i=[],o=n.messages||[],a=n.sessionId||this.extractSessionIdFromFilename(r),l=n.projectHash||"",d=await this.resolveWorkspace(l),c,u,m;for(let _ of o){let g=Gr(_.timestamp),y=_.type,E=me(uh(_.content));if(mh(y)){let S=E.trim();S&&(c||(c=X(S,80)),u=X(S,80)),i.push({role:"user",timestamp:g,content:S||E});continue}if(Ud(y)){_.model&&(m=_.model);for(let S of _.thoughts||[]){let x=[S.subject,S.description].filter(Boolean).join(`
1648
- `).trim();x&&i.push({role:"thinking",timestamp:Gr(S.timestamp,g),content:me(x)})}i.push({role:"assistant",timestamp:g,content:E,model:_.model});continue}let v=y?`[${y}] `:"";i.push({role:"system",timestamp:g,content:`${v}${E}`.trim()})}let f=Gr(n.startTime,s.createdAt),p=Gr(n.lastUpdated,s.modifiedAt),h=fh(o);return{provider:"gemini",sessionId:a,cwd:d,createdAt:f,modifiedAt:p,model:m,startCommand:"gemini",firstUserMessage:c,lastUserMessage:u,messageCount:i.filter(_=>_.role==="user"||_.role==="assistant").length,filePath:r,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCachedInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,totalReasoningOutputTokens:h.totalReasoningOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:i}}async extractSummary(e){let r=await this.readSessionFile(e);if(!r)return null;let n=await Oe(e),s=r.messages||[],i=r.sessionId||this.extractSessionIdFromFilename(e),o=r.projectHash||"",a=await this.resolveWorkspace(o),l,d,c,u=0;for(let f of s)if(mh(f.type)){u++;let p=uh(f.content).trim();p&&(l||(l=X(me(p),80)),d=X(me(p),80))}else Ud(f.type)&&(u++,f.model&&(c=f.model));let m=fh(s);return{provider:"gemini",sessionId:i,cwd:a,createdAt:Gr(r.startTime,n.createdAt),modifiedAt:Gr(r.lastUpdated,n.modifiedAt),model:c,startCommand:"gemini",firstUserMessage:l,lastUserMessage:d,messageCount:u,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async readSessionFile(e){let r=await ch(e,"utf-8");if(Ms(r)==="unknown")return M({event:"gemini_session_format_unknown",provider:"gemini",file:e,preview:r.slice(0,120),message:`gemini session file at ${e} matches neither old (.json with messages[]) nor new (.jsonl with kind metadata) format. Skipping; lmctl ls / audit / stats will not see this session.`}),null;try{return io(r)}catch{return null}}extractSessionIdFromFilename(e){let r=YR(e).replace(/\.jsonl?$/,""),n=r.match(/session-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-(.+)$/);return n?n[1]:r}async findSessionFiles(){let e=[],r;try{r=await Ds(this.geminiTmpDir)}catch{return e}for(let n of r){let s=rt(this.geminiTmpDir,n,"chats");if(!(await oo(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await Ds(s)}catch{continue}for(let a of o)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(rt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let r=await this.resolveSessionFile(e);return r?(await VR(r),!0):!1}async resolveSessionFile(e){let r=await this.findSessionFiles(),n=[];for(let s of r){let i=await this.readSessionFile(s).catch(()=>null),o=this.extractSessionIdFromFilename(s),a=i?.sessionId||o,l=a===e||a.startsWith(e),d=o===e||o.startsWith(e)||o.length>=8&&e.startsWith(o);if(!l&&!d)continue;let c=await Oe(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));n.push({filePath:s,modifiedAt:Gr(i?.lastUpdated,c.modifiedAt)})}return n.sort((s,i)=>{let o=i.modifiedAt.getTime()-s.modifiedAt.getTime();return o!==0?o:i.filePath.localeCompare(s.filePath)}),n[0]?.filePath??null}async resolveWorkspace(e){return e?(await this.getWorkspaceHashMap()).get(e)||`[hash:${e.slice(0,16)}]`:"(unknown workspace)"}async getWorkspaceHashMap(){if(this.workspaceHashMap)return this.workspaceHashMap;let e=new Set;js(e,ZR());for(let n of this.extraWorkspacePaths)js(e,n);for(let n of await this.collectGeminiProjectPaths())js(e,n);for(let n of await this.collectCodexCwds())js(e,n);for(let n of await this.collectClaudeCwds())js(e,n);let r=new Map;for(let n of e)r.set(t0(n),n);return this.workspaceHashMap=r,r}async collectGeminiProjectPaths(){let e;try{e=await ch(this.geminiProjectsFile,"utf-8")}catch{return[]}try{let n=JSON.parse(e).projects;return!n||typeof n!="object"||Array.isArray(n)?[]:Object.keys(n)}catch{return[]}}async collectCodexCwds(){let e=new Set;for(let r of this.codexSessionDirs){let n=await this.findJsonlFiles(r);for(let s of n){let o=(await Xe(s,1).catch(()=>[]))[0]?.payload?.cwd;o&&e.add(o)}}return[...e]}async collectClaudeCwds(){let e=new Set,r;try{r=await Ds(this.claudeProjectsDir)}catch{return[]}for(let n of r){let s=rt(this.claudeProjectsDir,n);if(!(await oo(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await Ds(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=rt(s,a),c=(await Xe(l,1).catch(()=>[]))[0]?.cwd;c&&e.add(c)}}return[...e]}async findJsonlFiles(e){let r=[];if(!(await oo(e).catch(()=>null))?.isDirectory())return r;let s;try{s=await Ds(e)}catch{return r}for(let i of s){let o=rt(e,i),a=await oo(o).catch(()=>null);if(a)if(a.isDirectory()){let l=await this.findJsonlFiles(o);r.push(...l)}else i.endsWith(".jsonl")&&r.push(o)}return r}}});import{readFileSync as r0,writeFileSync as n0,mkdirSync as s0}from"node:fs";import{join as i0,dirname as o0}from"node:path";import{randomUUID as a0}from"node:crypto";function qd(t){return new Wd(t)}var Wd,Bd=w(()=>{"use strict";ph();$t();kr();gt();Fd();Wd=class extends xe{constructor(e){super({provider:new lo(e),capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!0,forkSupport:"automatic",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"skill-file",leaderSetupHint:"Place skill files in the project's .gemini/ directory"},binary:"gemini",seedArgs:["-p",ge,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:(r,n)=>Sr(r,{...n,acpTool:"gemini"})})}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
1647
+ `}var Fd=w(()=>{"use strict"});import{createHash as KR}from"node:crypto";import{readdir as Ds,readFile as ch,stat as oo,unlink as VR}from"node:fs/promises";import{join as rt,basename as YR,dirname as zR}from"node:path";import{cwd as ZR}from"node:process";function uh(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.text||"").join(""):"":""}function mh(t){return t==="user"}function Ud(t){return t==="gemini"||t==="assistant"}function Kr(t,e=new Date(0)){if(!t)return e;let r=new Date(t);return Number.isNaN(r.getTime())?e:r}function QR(t){return`${t.sessionId}\0${t.cwd}`}function e0(t,e){let r=t.filePaths??[t.filePath],n=e.filePaths??[e.filePath],s=[...new Set([...r,...n])],i=e.modifiedAt.getTime()>=t.modifiedAt.getTime()?e:t;return{...i,createdAt:t.createdAt.getTime()<=e.createdAt.getTime()?t.createdAt:e.createdAt,modifiedAt:i.modifiedAt,filePath:i.filePath,filePaths:s}}function ao(t){let e=Number(t??0);return Number.isFinite(e)?Math.max(0,Math.round(e)):0}function fh(t){let e=0,r=0,n=0,s=0,i=0,o;for(let a of t){if(!Ud(a.type)||!a.tokens)continue;let l=ao(a.tokens.input),d=ao(a.tokens.cached),c=Math.max(l-d,0),u=ao(a.tokens.output),m=ao(a.tokens.thoughts);e+=l,r+=d,n+=u,s+=m,i=l,o={inputTokens:c,cachedInputTokens:d,cacheWriteInputTokens:0,outputTokens:u,reasoningOutputTokens:m,totalTokens:l+u+m}}return{totalInputTokens:e,totalCachedInputTokens:r,totalOutputTokens:n,totalReasoningOutputTokens:s,lastInputTokens:i,lastTokenUsage:o}}function t0(t){return KR("sha256").update(t).digest("hex")}function js(t,e){let r=e;for(;r&&!t.has(r);){t.add(r);let n=zR(r);if(n===r)break;r=n}}var lo,ph=w(()=>{"use strict";tr();Fd();pe();lo=class{name="gemini";workspaceHashMap;geminiProjectsFile;geminiTmpDir;claudeProjectsDir;codexSessionDirs;extraWorkspacePaths;constructor(e={}){let r=e.geminiDir||rt(ve,".gemini");this.geminiProjectsFile=rt(r,"projects.json"),this.geminiTmpDir=rt(r,"tmp");let n=e.claudeDir||rt(ve,".claude");this.claudeProjectsDir=rt(n,"projects");let s=[rt(ve,".codex"),rt(ve,".code")],i=e.codexDirs&&e.codexDirs.length>0?e.codexDirs:[e.codexDir||s[0],e.codeDir||s[1]];this.codexSessionDirs=[...new Set(i)].map(o=>rt(o,"sessions")),this.extraWorkspacePaths=e.extraWorkspacePaths||[]}getWatchPaths(){return[{directory:this.geminiTmpDir,filePattern:/\.jsonl?$/}]}async discoverSessions(){let e=await this.findSessionFiles(),r=new Map;for(let n of e)try{let s=await this.extractSummary(n);if(!s)continue;let i=QR(s),o=r.get(i);r.set(i,o?e0(o,s):s)}catch{}return[...r.values()]}async loadSession(e){let r=await this.resolveSessionFile(e);if(!r)return null;let n;try{n=await this.readSessionFile(r)}catch{return null}if(!n)return null;let s=await Oe(r),i=[],o=n.messages||[],a=n.sessionId||this.extractSessionIdFromFilename(r),l=n.projectHash||"",d=await this.resolveWorkspace(l),c,u,m;for(let _ of o){let g=Kr(_.timestamp),y=_.type,E=me(uh(_.content));if(mh(y)){let S=E.trim();S&&(c||(c=X(S,80)),u=X(S,80)),i.push({role:"user",timestamp:g,content:S||E});continue}if(Ud(y)){_.model&&(m=_.model);for(let S of _.thoughts||[]){let x=[S.subject,S.description].filter(Boolean).join(`
1648
+ `).trim();x&&i.push({role:"thinking",timestamp:Kr(S.timestamp,g),content:me(x)})}i.push({role:"assistant",timestamp:g,content:E,model:_.model});continue}let v=y?`[${y}] `:"";i.push({role:"system",timestamp:g,content:`${v}${E}`.trim()})}let f=Kr(n.startTime,s.createdAt),p=Kr(n.lastUpdated,s.modifiedAt),h=fh(o);return{provider:"gemini",sessionId:a,cwd:d,createdAt:f,modifiedAt:p,model:m,startCommand:"gemini",firstUserMessage:c,lastUserMessage:u,messageCount:i.filter(_=>_.role==="user"||_.role==="assistant").length,filePath:r,totalInputTokens:h.totalInputTokens||void 0,totalCachedInputTokens:h.totalCachedInputTokens||void 0,totalOutputTokens:h.totalOutputTokens||void 0,totalReasoningOutputTokens:h.totalReasoningOutputTokens||void 0,lastInputTokens:h.lastInputTokens||void 0,lastTokenUsage:h.lastTokenUsage,messages:i}}async extractSummary(e){let r=await this.readSessionFile(e);if(!r)return null;let n=await Oe(e),s=r.messages||[],i=r.sessionId||this.extractSessionIdFromFilename(e),o=r.projectHash||"",a=await this.resolveWorkspace(o),l,d,c,u=0;for(let f of s)if(mh(f.type)){u++;let p=uh(f.content).trim();p&&(l||(l=X(me(p),80)),d=X(me(p),80))}else Ud(f.type)&&(u++,f.model&&(c=f.model));let m=fh(s);return{provider:"gemini",sessionId:i,cwd:a,createdAt:Kr(r.startTime,n.createdAt),modifiedAt:Kr(r.lastUpdated,n.modifiedAt),model:c,startCommand:"gemini",firstUserMessage:l,lastUserMessage:d,messageCount:u,filePath:e,totalInputTokens:m.totalInputTokens||void 0,totalCachedInputTokens:m.totalCachedInputTokens||void 0,totalOutputTokens:m.totalOutputTokens||void 0,totalReasoningOutputTokens:m.totalReasoningOutputTokens||void 0,lastInputTokens:m.lastInputTokens||void 0,lastTokenUsage:m.lastTokenUsage}}async readSessionFile(e){let r=await ch(e,"utf-8");if(Ms(r)==="unknown")return M({event:"gemini_session_format_unknown",provider:"gemini",file:e,preview:r.slice(0,120),message:`gemini session file at ${e} matches neither old (.json with messages[]) nor new (.jsonl with kind metadata) format. Skipping; lmctl ls / audit / stats will not see this session.`}),null;try{return io(r)}catch{return null}}extractSessionIdFromFilename(e){let r=YR(e).replace(/\.jsonl?$/,""),n=r.match(/session-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-(.+)$/);return n?n[1]:r}async findSessionFiles(){let e=[],r;try{r=await Ds(this.geminiTmpDir)}catch{return e}for(let n of r){let s=rt(this.geminiTmpDir,n,"chats");if(!(await oo(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await Ds(s)}catch{continue}for(let a of o)a.startsWith("session-")&&(!a.endsWith(".json")&&!a.endsWith(".jsonl")||e.push(rt(s,a)))}return e}async resolveSessionPath(e){return this.resolveSessionFile(e)}async deleteSession(e){let r=await this.resolveSessionFile(e);return r?(await VR(r),!0):!1}async resolveSessionFile(e){let r=await this.findSessionFiles(),n=[];for(let s of r){let i=await this.readSessionFile(s).catch(()=>null),o=this.extractSessionIdFromFilename(s),a=i?.sessionId||o,l=a===e||a.startsWith(e),d=o===e||o.startsWith(e)||o.length>=8&&e.startsWith(o);if(!l&&!d)continue;let c=await Oe(s).catch(()=>({createdAt:new Date(0),modifiedAt:new Date(0)}));n.push({filePath:s,modifiedAt:Kr(i?.lastUpdated,c.modifiedAt)})}return n.sort((s,i)=>{let o=i.modifiedAt.getTime()-s.modifiedAt.getTime();return o!==0?o:i.filePath.localeCompare(s.filePath)}),n[0]?.filePath??null}async resolveWorkspace(e){return e?(await this.getWorkspaceHashMap()).get(e)||`[hash:${e.slice(0,16)}]`:"(unknown workspace)"}async getWorkspaceHashMap(){if(this.workspaceHashMap)return this.workspaceHashMap;let e=new Set;js(e,ZR());for(let n of this.extraWorkspacePaths)js(e,n);for(let n of await this.collectGeminiProjectPaths())js(e,n);for(let n of await this.collectCodexCwds())js(e,n);for(let n of await this.collectClaudeCwds())js(e,n);let r=new Map;for(let n of e)r.set(t0(n),n);return this.workspaceHashMap=r,r}async collectGeminiProjectPaths(){let e;try{e=await ch(this.geminiProjectsFile,"utf-8")}catch{return[]}try{let n=JSON.parse(e).projects;return!n||typeof n!="object"||Array.isArray(n)?[]:Object.keys(n)}catch{return[]}}async collectCodexCwds(){let e=new Set;for(let r of this.codexSessionDirs){let n=await this.findJsonlFiles(r);for(let s of n){let o=(await Xe(s,1).catch(()=>[]))[0]?.payload?.cwd;o&&e.add(o)}}return[...e]}async collectClaudeCwds(){let e=new Set,r;try{r=await Ds(this.claudeProjectsDir)}catch{return[]}for(let n of r){let s=rt(this.claudeProjectsDir,n);if(!(await oo(s).catch(()=>null))?.isDirectory())continue;let o;try{o=await Ds(s)}catch{continue}for(let a of o){if(!a.endsWith(".jsonl"))continue;let l=rt(s,a),c=(await Xe(l,1).catch(()=>[]))[0]?.cwd;c&&e.add(c)}}return[...e]}async findJsonlFiles(e){let r=[];if(!(await oo(e).catch(()=>null))?.isDirectory())return r;let s;try{s=await Ds(e)}catch{return r}for(let i of s){let o=rt(e,i),a=await oo(o).catch(()=>null);if(a)if(a.isDirectory()){let l=await this.findJsonlFiles(o);r.push(...l)}else i.endsWith(".jsonl")&&r.push(o)}return r}}});import{readFileSync as r0,writeFileSync as n0,mkdirSync as s0}from"node:fs";import{join as i0,dirname as o0}from"node:path";import{randomUUID as a0}from"node:crypto";function qd(t){return new Wd(t)}var Wd,Bd=w(()=>{"use strict";ph();$t();kr();gt();Fd();Wd=class extends xe{constructor(e){super({provider:new lo(e),capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!0,forkSupport:"automatic",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"skill-file",leaderSetupHint:"Place skill files in the project's .gemini/ directory"},binary:"gemini",seedArgs:["-p",ge,"-y","--skip-trust"],resumeTemplate:"gemini --resume {{session_id}} --skip-trust",startTemplate:"gemini --skip-trust",transport:(r,n)=>Sr(r,{...n,acpTool:"gemini"})})}forkHint(e){return["Gemini fork: copies the session file with a new ID.","The forked session has the same conversation history","but diverges from that point forward."].join(`
1649
1649
  `)}seedArgsFor(e){let r=super.seedArgsFor(e);return e?.model?[...r,"--model",e.model]:r}manualSeedHint(e){return{launchCommand:`cd ${e} && gemini --skip-trust`,postLaunchNote:Yi,lsCommand:`lmctl ls --provider gemini --sessiondir ${e}`}}async fork(e,r){let n=await this.resolvePath(e);if(!n)return{success:!1,error:`Session file not found for ${e}`};try{let s=r0(n,"utf-8"),i=Ms(s),o=io(s),a=a0();o.sessionId=a,o.kind="main";let l=o0(n),d=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),c=i==="jsonl"?".jsonl":".json",u=`session-${d}-${a.slice(0,8)}${c}`,m=i0(l,u);return s0(l,{recursive:!0}),n0(m,dh(o,i),"utf-8"),{success:!0,sessionId:a,filePath:m}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}}});import{readdir as _h,readFile as l0,rm as d0,stat as On}from"node:fs/promises";import{basename as c0,join as wt}from"node:path";function u0(t){if(!t)return null;let e={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,reasoningTokens:0},r=!1;for(let n of Object.values(t))n?.usage&&(r=!0,e.inputTokens+=n.usage.inputTokens??0,e.outputTokens+=n.usage.outputTokens??0,e.cacheReadTokens+=n.usage.cacheReadTokens??0,e.cacheWriteTokens+=n.usage.cacheWriteTokens??0,e.reasoningTokens+=n.usage.reasoningTokens??0);return r?e:null}function Hd(){return{shutdownTotals:null,assistantOutputSum:0}}function gh(t,e){if(e.type==="assistant.message"){let r=e.data?.outputTokens;typeof r=="number"&&(t.assistantOutputSum+=r,t.lastAssistantOutputTokens=r)}else if(e.type==="session.shutdown"){let r=u0(e.data?.modelMetrics);r&&(t.shutdownTotals=r)}}function hh(t){let e=t.shutdownTotals,r=t.lastAssistantOutputTokens!==void 0?{outputTokens:t.lastAssistantOutputTokens}:void 0;return{totalInputTokens:e?.inputTokens,totalCachedInputTokens:e?.cacheReadTokens,totalCacheWriteInputTokens:e?.cacheWriteTokens,totalOutputTokens:e?.outputTokens??(t.lastAssistantOutputTokens===void 0?void 0:t.assistantOutputSum),totalReasoningOutputTokens:e?.reasoningTokens,lastTokenUsage:r}}function m0(t){let e={};for(let r of t.split(`
1650
- `)){let n=r.match(/^(\w+):\s*(.*)$/);n&&(e[n[1]]=n[2].trim())}return{id:e.id,cwd:e.cwd,summary_count:e.summary_count?parseInt(e.summary_count,10):void 0,created_at:e.created_at,updated_at:e.updated_at,summary:e.summary}}function Kr(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function f0(t){let e=0,r=Hd();for await(let n of Be(t))(n.type==="user.message"||n.type==="assistant.message"&&(n.data?.content||"").trim())&&e++,gh(r,n);return{messageCount:e,tokens:r}}function p0(t){let e=_0(t),r=new Map;for(let n of t){if(n.role!=="tool_use"||n.toolCallId===void 0)continue;if(n.toolName==="bash"){let l=e.get(n.toolCallId),c=[l?.content,l?.toolDetailedContent].filter(m=>typeof m=="string").join(`
1651
- `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(c===void 0)continue;let u=`copilot-shell:${c}:${n.toolCallId}`;r.set(c,u),n.backgroundTaskId=u,l!==void 0&&(l.backgroundTaskId=u);continue}if(!["read_bash","write_bash","stop_bash"].includes(n.toolName??""))continue;let s=n.toolInputData?.shellId;if(typeof s!="string"&&typeof s!="number")continue;let i=String(s),o=r.get(i);if(o===void 0)continue;n.backgroundTaskId=o;let a=e.get(n.toolCallId);a!==void 0&&(a.backgroundTaskId=o)}}function _0(t){let e=new Map;for(let r of t)r.role==="tool_result"&&r.toolCallId!==void 0&&e.set(r.toolCallId,r);return e}var co,yh=w(()=>{"use strict";tr();co=class{name="copilot";sessionStateDir;constructor(e={}){let r=e.copilotDir||wt(ve,".copilot");this.sessionStateDir=wt(r,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],r;try{r=await _h(this.sessionStateDir)}catch{return e}for(let n of r){let s=wt(this.sessionStateDir,n);if((await On(s).catch(()=>null))?.isDirectory())try{let o=await this.extractSummary(s,n);o&&e.push(o)}catch{}}return e}async loadSession(e){let r=await this.resolveSessionDir(e);if(!r)return null;let n=await this.readWorkspaceYaml(r),s=wt(r,"events.jsonl"),i=await On(s).catch(()=>null),o=i?s:wt(r,"workspace.yaml"),a=await Oe(i?s:r),l=[],d=n?.cwd||"(unknown workspace)",c,u,m,f,p,h,_=n?.id||c0(r)||e,g=Hd();if(i)for await(let y of Be(s)){let E=Kr(y.timestamp)||a.modifiedAt;if(gh(g,y),y.type==="session.start"&&y.data){y.data.sessionId&&(_=y.data.sessionId),y.data.copilotVersion&&(u=y.data.copilotVersion),y.data.startTime&&(h=Kr(y.data.startTime)),y.data.selectedModel&&(c=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){c=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let v=y.data.content||"",S=v.trim();S&&(f||(f=X(S,80)),p=X(S,80)),l.push({role:"user",timestamp:E,content:me(S||v)});continue}if(y.type==="assistant.message"&&y.data){let v=(y.data.content||"").trim();if(v&&l.push({role:"assistant",timestamp:E,content:me(v),model:c}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:E,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments?JSON.stringify(S.arguments,null,2):void 0,toolInputData:Ct(S.arguments),toolCallId:S.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let v=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:E,content:me(v),toolDetailedContent:S?me(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:E,content:me(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let v=y.data?.message||"";v.trim()&&l.push({role:"system",timestamp:E,content:me(v)});continue}}if(!f){let y=(n?.summary||"").trim();y&&(f=X(y,80))}return p0(l),{provider:"copilot",sessionId:_,cwd:d,createdAt:h??Kr(n?.created_at)??a.createdAt,modifiedAt:Kr(n?.updated_at)??a.modifiedAt,model:c,cliVersion:u,startCommand:"copilot",gitBranch:m,firstUserMessage:f,lastUserMessage:p,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:o,...hh(g),messages:l}}async extractSummary(e,r){let n=await this.readWorkspaceYaml(e),s=wt(e,"events.jsonl"),i=await On(s).catch(()=>null),o=i?s:wt(e,"workspace.yaml"),a=await Oe(i?s:e),l=i?await Xe(s,20):[],d=n?.id||r,c=n?.cwd||"(unknown workspace)",u,m,f,p,h;for(let g of l)if(g.type==="session.start"&&g.data&&(g.data.sessionId&&(d=g.data.sessionId),g.data.copilotVersion&&(m=g.data.copilotVersion),g.data.startTime&&(f=Kr(g.data.startTime)),g.data.selectedModel&&(u=g.data.selectedModel),g.data.context?.cwd&&(c=g.data.context.cwd)),g.type==="session.model_change"&&g.data?.newModel&&(u||(u=g.data.newModel)),g.type==="user.message"&&g.data){let y=(g.data.content||"").trim();y&&(p||(p=X(y,80)),h=X(y,80))}if(!p){let g=(n?.summary||"").trim();g&&(p=X(g,80))}let _=i?await f0(s):{messageCount:0,tokens:Hd()};return{provider:"copilot",sessionId:d,cwd:c,createdAt:f??Kr(n?.created_at)??a.createdAt,modifiedAt:Kr(n?.updated_at)??a.modifiedAt,model:u,cliVersion:m,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h,messageCount:_.messageCount,filePath:o,...hh(_.tokens)}}async readWorkspaceYaml(e){let r=wt(e,"workspace.yaml");try{let n=await l0(r,"utf-8");return m0(n)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let r=await this.resolveSessionDir(e);return r?(await d0(r,{recursive:!0}),!0):!1}async resolveSessionDir(e){let r;try{r=await _h(this.sessionStateDir)}catch{return null}if(r.includes(e)){let s=wt(this.sessionStateDir,e);if((await On(s).catch(()=>null))?.isDirectory())return s}let n=[];for(let s of r)if(s.startsWith(e)){let i=wt(this.sessionStateDir,s);(await On(i).catch(()=>null))?.isDirectory()&&n.push(i)}if(n.length===1)return n[0];for(let s of r){let i=wt(this.sessionStateDir,s);if(!(await On(i).catch(()=>null))?.isDirectory())continue;let a=await this.readWorkspaceYaml(i);if(a&&(a.id===e||a.id?.startsWith(e)))return i}return null}}});function Jd(t){return new Xd(t)}var Xd,Gd=w(()=>{"use strict";yh();$t();kr();pe();gt();Xd=class extends xe{constructor(e){super({provider:new co(e),capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",ge,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(r,n)=>Sr(r,{...n,acpTool:"copilot"})})}async seed(e,r){let n=await super.seed(e,r);if(r?.model===void 0||r.model.trim().length===0)return n;let s="copilot seed does not implement per-session model selection";return je({event:"model_ignored",provider:"copilot",model:r.model,reason:s}),{...n,warnings:[...n.warnings??[],`copilot seed ignored model=${r.model}: ${s}`]}}}});import{existsSync as Eh,readdirSync as h0,statSync as wh}from"node:fs";import{join as Ir}from"node:path";import{createRequire as g0}from"node:module";function Th(){return Kd===null&&(Kd=g0(import.meta.url)("node:sqlite").DatabaseSync),Kd}function vh(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function bh(t,e){if(!e)return;t.observed=!0;let r=e.input??0,n=e.output??0,s=e.reasoning??0,i=e.cache?.read??0,o=e.cache?.write??0;if(t.totalInputTokens+=r,t.totalCachedInputTokens+=i,t.totalCacheWriteInputTokens+=o,t.totalOutputTokens+=n,t.totalReasoningOutputTokens+=s,r+n+s+i+o>0){let a=r+i+o;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:r,cachedInputTokens:i,cacheWriteInputTokens:o,outputTokens:n,reasoningOutputTokens:s,totalTokens:a+n+s}}}function Sh(t){return t.observed?{totalInputTokens:t.totalInputTokens,totalCachedInputTokens:t.totalCachedInputTokens,totalCacheWriteInputTokens:t.totalCacheWriteInputTokens,totalOutputTokens:t.totalOutputTokens,totalReasoningOutputTokens:t.totalReasoningOutputTokens,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}:{}}function y0(){let t=process.env.XDG_DATA_HOME||Ir(ve,".local","share"),e=process.env.XDG_CONFIG_HOME||Ir(ve,".config");return[Ir(t,"opencode","opencode.db"),Ir(e,"opencode","opencode.db")]}function E0(){if(process.env.OPENCODE_DB)return[process.env.OPENCODE_DB];let t=process.env.XDG_DATA_HOME||Ir(ve,".local","share"),e=Ir(t,"lmplayer"),r=Ir(e,"opencode-local.db"),n=[r];try{let s=h0(e).filter(i=>/^opencode.*\.db$/u.test(i)).map(i=>Ir(e,i)).filter(i=>i!==r).sort((i,o)=>{try{return wh(o).mtimeMs-wh(i).mtimeMs}catch{return 0}});n.push(...s)}catch{}return n}function w0(t){return t==="lmplayer"?E0():y0()}var Kd,Cn,Vd=w(()=>{"use strict";tr();Kd=null;Cn=class{name;startCommand;dbPaths;constructor(e){this.name=e?.providerName??"opencode",this.startCommand=e?.startCommand??this.name,e?.dbPath?this.dbPaths=[e.dbPath]:this.dbPaths=w0(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>Eh(e))}openDb(e){return Eh(e)?new(Th())(e,{open:!0,readOnly:!0}):null}async discoverSessions(){let e=[];for(let r of this.existingDbPaths()){let n=this.openDb(r);if(n)try{let s=new Map,i=n.prepare("SELECT id, worktree, name FROM project").all();for(let a of i)s.set(a.id,a);let o=n.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
1650
+ `)){let n=r.match(/^(\w+):\s*(.*)$/);n&&(e[n[1]]=n[2].trim())}return{id:e.id,cwd:e.cwd,summary_count:e.summary_count?parseInt(e.summary_count,10):void 0,created_at:e.created_at,updated_at:e.updated_at,summary:e.summary}}function Vr(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}async function f0(t){let e=0,r=Hd();for await(let n of Be(t))(n.type==="user.message"||n.type==="assistant.message"&&(n.data?.content||"").trim())&&e++,gh(r,n);return{messageCount:e,tokens:r}}function p0(t){let e=_0(t),r=new Map;for(let n of t){if(n.role!=="tool_use"||n.toolCallId===void 0)continue;if(n.toolName==="bash"){let l=e.get(n.toolCallId),c=[l?.content,l?.toolDetailedContent].filter(m=>typeof m=="string").join(`
1651
+ `).match(/<command (?:started in (?:detached )?background with|with) shellId:\s*([^>\s]+)/i)?.[1];if(c===void 0)continue;let u=`copilot-shell:${c}:${n.toolCallId}`;r.set(c,u),n.backgroundTaskId=u,l!==void 0&&(l.backgroundTaskId=u);continue}if(!["read_bash","write_bash","stop_bash"].includes(n.toolName??""))continue;let s=n.toolInputData?.shellId;if(typeof s!="string"&&typeof s!="number")continue;let i=String(s),o=r.get(i);if(o===void 0)continue;n.backgroundTaskId=o;let a=e.get(n.toolCallId);a!==void 0&&(a.backgroundTaskId=o)}}function _0(t){let e=new Map;for(let r of t)r.role==="tool_result"&&r.toolCallId!==void 0&&e.set(r.toolCallId,r);return e}var co,yh=w(()=>{"use strict";tr();co=class{name="copilot";sessionStateDir;constructor(e={}){let r=e.copilotDir||wt(ve,".copilot");this.sessionStateDir=wt(r,"session-state")}getWatchPaths(){return[{directory:this.sessionStateDir,filePattern:/events\.jsonl$/}]}async discoverSessions(){let e=[],r;try{r=await _h(this.sessionStateDir)}catch{return e}for(let n of r){let s=wt(this.sessionStateDir,n);if((await On(s).catch(()=>null))?.isDirectory())try{let o=await this.extractSummary(s,n);o&&e.push(o)}catch{}}return e}async loadSession(e){let r=await this.resolveSessionDir(e);if(!r)return null;let n=await this.readWorkspaceYaml(r),s=wt(r,"events.jsonl"),i=await On(s).catch(()=>null),o=i?s:wt(r,"workspace.yaml"),a=await Oe(i?s:r),l=[],d=n?.cwd||"(unknown workspace)",c,u,m,f,p,h,_=n?.id||c0(r)||e,g=Hd();if(i)for await(let y of Be(s)){let E=Vr(y.timestamp)||a.modifiedAt;if(gh(g,y),y.type==="session.start"&&y.data){y.data.sessionId&&(_=y.data.sessionId),y.data.copilotVersion&&(u=y.data.copilotVersion),y.data.startTime&&(h=Vr(y.data.startTime)),y.data.selectedModel&&(c=y.data.selectedModel),y.data.context&&(y.data.context.cwd&&(d=y.data.context.cwd),y.data.context.branch&&(m=y.data.context.branch));continue}if(y.type==="session.model_change"&&y.data?.newModel){c=y.data.newModel;continue}if(y.type==="user.message"&&y.data){let v=y.data.content||"",S=v.trim();S&&(f||(f=X(S,80)),p=X(S,80)),l.push({role:"user",timestamp:E,content:me(S||v)});continue}if(y.type==="assistant.message"&&y.data){let v=(y.data.content||"").trim();if(v&&l.push({role:"assistant",timestamp:E,content:me(v),model:c}),y.data.toolRequests)for(let S of y.data.toolRequests)l.push({role:"tool_use",timestamp:E,content:S.name||"unknown tool",toolName:S.name,toolInput:S.arguments?JSON.stringify(S.arguments,null,2):void 0,toolInputData:Ct(S.arguments),toolCallId:S.toolCallId});continue}if(y.type==="tool.execution_complete"&&y.data){let v=y.data.result?.content||"",S=y.data.result?.detailedContent||"";l.push({role:"tool_result",timestamp:E,content:me(v),toolDetailedContent:S?me(S):void 0,toolCallId:y.data.toolCallId});continue}if(y.type==="assistant.reasoning"&&y.data?.content){l.push({role:"thinking",timestamp:E,content:me(y.data.content)});continue}if(y.type==="session.error"||y.type==="session.warning"||y.type==="session.info"||y.type==="system.message"){let v=y.data?.message||"";v.trim()&&l.push({role:"system",timestamp:E,content:me(v)});continue}}if(!f){let y=(n?.summary||"").trim();y&&(f=X(y,80))}return p0(l),{provider:"copilot",sessionId:_,cwd:d,createdAt:h??Vr(n?.created_at)??a.createdAt,modifiedAt:Vr(n?.updated_at)??a.modifiedAt,model:c,cliVersion:u,startCommand:"copilot",gitBranch:m,firstUserMessage:f,lastUserMessage:p,messageCount:l.filter(y=>y.role==="user"||y.role==="assistant").length,filePath:o,...hh(g),messages:l}}async extractSummary(e,r){let n=await this.readWorkspaceYaml(e),s=wt(e,"events.jsonl"),i=await On(s).catch(()=>null),o=i?s:wt(e,"workspace.yaml"),a=await Oe(i?s:e),l=i?await Xe(s,20):[],d=n?.id||r,c=n?.cwd||"(unknown workspace)",u,m,f,p,h;for(let g of l)if(g.type==="session.start"&&g.data&&(g.data.sessionId&&(d=g.data.sessionId),g.data.copilotVersion&&(m=g.data.copilotVersion),g.data.startTime&&(f=Vr(g.data.startTime)),g.data.selectedModel&&(u=g.data.selectedModel),g.data.context?.cwd&&(c=g.data.context.cwd)),g.type==="session.model_change"&&g.data?.newModel&&(u||(u=g.data.newModel)),g.type==="user.message"&&g.data){let y=(g.data.content||"").trim();y&&(p||(p=X(y,80)),h=X(y,80))}if(!p){let g=(n?.summary||"").trim();g&&(p=X(g,80))}let _=i?await f0(s):{messageCount:0,tokens:Hd()};return{provider:"copilot",sessionId:d,cwd:c,createdAt:f??Vr(n?.created_at)??a.createdAt,modifiedAt:Vr(n?.updated_at)??a.modifiedAt,model:u,cliVersion:m,startCommand:"copilot",firstUserMessage:p,lastUserMessage:h,messageCount:_.messageCount,filePath:o,...hh(_.tokens)}}async readWorkspaceYaml(e){let r=wt(e,"workspace.yaml");try{let n=await l0(r,"utf-8");return m0(n)}catch{return null}}async resolveSessionPath(e){return this.resolveSessionDir(e)}async deleteSession(e){let r=await this.resolveSessionDir(e);return r?(await d0(r,{recursive:!0}),!0):!1}async resolveSessionDir(e){let r;try{r=await _h(this.sessionStateDir)}catch{return null}if(r.includes(e)){let s=wt(this.sessionStateDir,e);if((await On(s).catch(()=>null))?.isDirectory())return s}let n=[];for(let s of r)if(s.startsWith(e)){let i=wt(this.sessionStateDir,s);(await On(i).catch(()=>null))?.isDirectory()&&n.push(i)}if(n.length===1)return n[0];for(let s of r){let i=wt(this.sessionStateDir,s);if(!(await On(i).catch(()=>null))?.isDirectory())continue;let a=await this.readWorkspaceYaml(i);if(a&&(a.id===e||a.id?.startsWith(e)))return i}return null}}});function Jd(t){return new Xd(t)}var Xd,Gd=w(()=>{"use strict";yh();$t();kr();pe();gt();Xd=class extends xe{constructor(e){super({provider:new co(e),capabilities:{canCreate:!0,canResumeInteractive:!0,canFork:!1,forkSupport:"manual",canStructuredTurn:!0,canStreamDeltas:!0,canCancel:!0},injection:{leaderMode:"prompt-append"},binary:"copilot",seedArgs:["-p",ge,"--yolo"],resumeTemplate:"copilot --resume={{session_id}}",startTemplate:"copilot",transport:(r,n)=>Sr(r,{...n,acpTool:"copilot"})})}async seed(e,r){let n=await super.seed(e,r);if(r?.model===void 0||r.model.trim().length===0)return n;let s="copilot seed does not implement per-session model selection";return je({event:"model_ignored",provider:"copilot",model:r.model,reason:s}),{...n,warnings:[...n.warnings??[],`copilot seed ignored model=${r.model}: ${s}`]}}}});import{existsSync as Eh,readdirSync as h0,statSync as wh}from"node:fs";import{join as Ir}from"node:path";import{createRequire as g0}from"node:module";function Th(){return Kd===null&&(Kd=g0(import.meta.url)("node:sqlite").DatabaseSync),Kd}function vh(){return{observed:!1,totalInputTokens:0,totalCachedInputTokens:0,totalCacheWriteInputTokens:0,totalOutputTokens:0,totalReasoningOutputTokens:0}}function bh(t,e){if(!e)return;t.observed=!0;let r=e.input??0,n=e.output??0,s=e.reasoning??0,i=e.cache?.read??0,o=e.cache?.write??0;if(t.totalInputTokens+=r,t.totalCachedInputTokens+=i,t.totalCacheWriteInputTokens+=o,t.totalOutputTokens+=n,t.totalReasoningOutputTokens+=s,r+n+s+i+o>0){let a=r+i+o;t.lastInputTokens=a,t.lastTokenUsage={inputTokens:r,cachedInputTokens:i,cacheWriteInputTokens:o,outputTokens:n,reasoningOutputTokens:s,totalTokens:a+n+s}}}function Sh(t){return t.observed?{totalInputTokens:t.totalInputTokens,totalCachedInputTokens:t.totalCachedInputTokens,totalCacheWriteInputTokens:t.totalCacheWriteInputTokens,totalOutputTokens:t.totalOutputTokens,totalReasoningOutputTokens:t.totalReasoningOutputTokens,lastInputTokens:t.lastInputTokens,lastTokenUsage:t.lastTokenUsage}:{}}function y0(){let t=process.env.XDG_DATA_HOME||Ir(ve,".local","share"),e=process.env.XDG_CONFIG_HOME||Ir(ve,".config");return[Ir(t,"opencode","opencode.db"),Ir(e,"opencode","opencode.db")]}function E0(){if(process.env.OPENCODE_DB)return[process.env.OPENCODE_DB];let t=process.env.XDG_DATA_HOME||Ir(ve,".local","share"),e=Ir(t,"lmplayer"),r=Ir(e,"opencode-local.db"),n=[r];try{let s=h0(e).filter(i=>/^opencode.*\.db$/u.test(i)).map(i=>Ir(e,i)).filter(i=>i!==r).sort((i,o)=>{try{return wh(o).mtimeMs-wh(i).mtimeMs}catch{return 0}});n.push(...s)}catch{}return n}function w0(t){return t==="lmplayer"?E0():y0()}var Kd,Cn,Vd=w(()=>{"use strict";tr();Kd=null;Cn=class{name;startCommand;dbPaths;constructor(e){this.name=e?.providerName??"opencode",this.startCommand=e?.startCommand??this.name,e?.dbPath?this.dbPaths=[e.dbPath]:this.dbPaths=w0(this.name)}existingDbPaths(){return this.dbPaths.filter(e=>Eh(e))}openDb(e){return Eh(e)?new(Th())(e,{open:!0,readOnly:!0}):null}async discoverSessions(){let e=[];for(let r of this.existingDbPaths()){let n=this.openDb(r);if(n)try{let s=new Map,i=n.prepare("SELECT id, worktree, name FROM project").all();for(let a of i)s.set(a.id,a);let o=n.prepare(`SELECT s.id, s.project_id, s.slug, s.directory, s.title, s.version,
1652
1652
  s.time_created, s.time_updated
1653
1653
  FROM session s
1654
1654
  ORDER BY s.time_updated DESC`).all();for(let a of o){let l=s.get(a.project_id),d=a.directory||l?.worktree||"(unknown)",c=n.prepare(`SELECT m.id, m.data, m.time_created FROM message m
@@ -1661,9 +1661,9 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1661
1661
  FROM session s
1662
1662
  WHERE s.id LIKE ?
1663
1663
  ORDER BY s.time_updated DESC
1664
- LIMIT 2`).all(`${r}%`);return s.length!==1?null:s[0]}}});function zd(){return new Yd}var Yd,Zd=w(()=>{"use strict";Vd();$t();kr();gt();Yd=class extends xe{constructor(){super({provider:new Cn,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,r)=>Sr(e,{...r,acpTool:"opencode"})})}seedArgsFor(e){let r=["run"];return e?.model&&r.push("--model",e.model),e?.effort&&r.push("--variant",e.effort),r.push(e?.prompt??ge),r}}});import{appendFile as T0,mkdir as v0,readFile as kh,readdir as Ih,rm as b0,stat as Nh}from"node:fs/promises";import{basename as S0,dirname as k0,isAbsolute as Ah,join as Vr,relative as I0,resolve as Qd}from"node:path";function ec(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function x0(t){return typeof t=="number"?new Date(t):ec(t)??new Date(0)}function R0(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(`
1665
- `).trim():""}function xh(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function L0(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:xh(t)??""}function O0(t){let e=C0(t),r=new Set;for(let n of t){if(n.role!=="tool_use"||n.toolName!=="Bash"||n.toolInputData?.run_in_background!==!0||n.toolCallId===void 0)continue;let s=e.get(n.toolCallId);if(s===void 0)continue;let i=s.content.match(/(?:^|\n)task_id:\s*([^\s]+)/)?.[1];i!==void 0&&(r.add(i),n.backgroundTaskId=i,s.backgroundTaskId=i)}for(let n of t){if(n.role!=="tool_use"||n.toolName!=="TaskOutput"&&n.toolName!=="TaskStop"||n.toolCallId===void 0)continue;let s=n.toolInputData?.task_id;if(typeof s!="string"||!r.has(s))continue;n.backgroundTaskId=s;let i=e.get(n.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function C0(t){let e=new Map;for(let r of t)r.role==="tool_result"&&r.toolCallId!==void 0&&e.set(r.toolCallId,r);return e}var N0,A0,uo,Rh=w(()=>{"use strict";tr();N0="1.4",A0="1.5",uo=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Qd(e?.kimiHome??process.env.KIMI_CODE_HOME??Vr(ve,".kimi-code")),this.sessionsDir=Vr(this.homeDir,"sessions")}async discoverSessions(){let e=[];for(let r of await this.sessionFiles())try{let n=await this.summary(r);n&&e.push(n)}catch{}return e.sort((r,n)=>n.modifiedAt.getTime()-r.modifiedAt.getTime())}async loadSession(e){let r=await this.findSession(e);if(!r)return null;let n=await this.summary(r);if(!n)return null;let s=await this.parseWire(r.wirePath);return{...n,messages:s.messages}}async resolveSessionPath(e){return(await this.findSession(e))?.wirePath??null}async deleteSession(e){let r=await this.findSession(e);return r?(await b0(r.sessionDir,{recursive:!0,force:!0}),await v0(k0(this.indexPath()),{recursive:!0,mode:448}),await T0(this.indexPath(),`${JSON.stringify({sessionId:r.sessionId,deleted:!0})}
1666
- `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Vr(this.homeDir,"session_index.jsonl")}async sessionFiles(){let e=await this.readIndex(),r=new Map;for(let s of e.values())this.validSessionDir(s.sessionDir,s.sessionId)&&r.set(s.sessionId,this.filesFor(s.sessionId,s.sessionDir,s.workDir));let n;try{n=await Ih(this.sessionsDir,{withFileTypes:!0})}catch{return[...r.values()]}for(let s of n){if(!s.isDirectory())continue;let i=Vr(this.sessionsDir,s.name),o;try{o=await Ih(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||r.has(a.name))continue;let l=Vr(i,a.name);r.set(a.name,this.filesFor(a.name,l))}}return[...r.values()]}async readIndex(){let e;try{e=await kh(this.indexPath(),"utf-8")}catch{return new Map}let r=new Map;for(let n of e.split(/\r?\n/))if(n.trim())try{let s=JSON.parse(n);if(typeof s.sessionId!="string")continue;s.deleted===!0?r.delete(s.sessionId):typeof s.sessionDir=="string"&&typeof s.workDir=="string"&&r.set(s.sessionId,{sessionId:s.sessionId,sessionDir:Qd(s.sessionDir),workDir:s.workDir})}catch{}return r}filesFor(e,r,n){return{sessionId:e,sessionDir:r,statePath:Vr(r,"state.json"),wirePath:Vr(r,"agents","main","wire.jsonl"),indexedWorkDir:n}}validSessionDir(e,r){if(!Ah(e)||S0(e)!==r)return!1;let n=I0(this.sessionsDir,Qd(e));return n!==""&&n!==".."&&!n.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Ah(n)}async findSession(e){let r=await this.sessionFiles(),n=r.find(i=>i.sessionId===e);if(n)return n;let s=r.filter(i=>i.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let r=JSON.parse(await kh(e,"utf-8"));return r!==null&&typeof r=="object"&&!Array.isArray(r)?r:null}catch{return null}}async summary(e){let r=await this.readState(e.statePath);if(!r)return null;let n;try{n=await Nh(e.wirePath)}catch{return null}let s=await Nh(e.statePath).catch(()=>n),i=await this.parseWire(e.wirePath),o=ec(r.createdAt)??s.birthtime,a=ec(r.updatedAt)??(s.mtime>n.mtime?s.mtime:n.mtime);return{provider:"kimi",sessionId:e.sessionId,slug:r.title,cwd:r.workDir??e.indexedWorkDir??"(unknown)",createdAt:o,modifiedAt:a,model:i.model,startCommand:"kimi",firstUserMessage:i.firstUserMessage,lastUserMessage:i.lastUserMessage??(r.lastPrompt?X(r.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 r=[],n=!0,s,i,o,a=0,l=0,d=0,c=0,u=!1,m=0,f,p;for await(let h of Be(e)){let _=x0(h.time??h.created_at);if(n&&(n=!1,h.type==="metadata"&&h.protocol_version!==N0)){let y=h.protocol_version===A0?"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:y}],messageCount:1,firstUserMessage:y,lastUserMessage:y}}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 y=h.usage?.inputOther??0,E=h.usage?.inputCacheRead??0,v=h.usage?.inputCacheCreation??0,S=h.usage?.output??0;a+=y,l+=E,d+=v,c+=S,h.usageScope==="turn"&&(f=y+E+v,p={inputTokens:y,cachedInputTokens:E,cacheWriteInputTokens:v,outputTokens:S,totalTokens:f+S});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let y=R0(h.input);y&&(i??=X(y,80),o=X(y,80),r.push({role:"user",timestamp:_,content:y}),m++);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?(r.push({role:"assistant",timestamp:_,content:g.part.text,model:s}),m++):g.type==="content.part"&&g.part?.type==="think"&&g.part.think?r.push({role:"thinking",timestamp:_,content:g.part.think,model:s}):g.type==="tool.call"?r.push({role:"tool_use",timestamp:_,content:g.name??"tool",toolName:g.name,toolInput:xh(g.args),toolInputData:Ct(g.args),toolCallId:g.toolCallId,model:s}):g.type==="tool.result"&&r.push({role:"tool_result",timestamp:_,content:L0(g.result),toolCallId:g.toolCallId,model:s})}return O0(r),{messages:r,messageCount:m,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:f,lastTokenUsage:p}}}});function rc(t){return new tc(t)}var tc,nc=w(()=>{"use strict";Rh();$t();kr();gt();tc=class extends xe{constructor(e){super({provider:new uo(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:(r,n)=>Sr(r,{...n,acpTool:"kimi"})})}seedArgsFor(e){let r=[];return e?.model&&r.push("--model",e.model),r.push("-p",e?.prompt??ge,"--output-format","stream-json"),r}}});import{spawn as $0}from"node:child_process";import{mkdirSync as M0}from"node:fs";function ic(t){return new sc(t)}async function D0(t,e){let r=Date.now(),n=Lh({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});Et("lmplayer",n,e.permissionMode??"yolo");let s=await Oh(e.binary,n,{cwd:e.cwd,env:Je(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()-r}}function Lh(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(...vr("lmplayer",t.permissionMode)??[]),e.push(t.prompt),e}function Oh(t,e,r){return new Promise((n,s)=>{let i;try{i=$0(t,e,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(_){s(_);return}let o="",a="",l="",d,c,u=[],m=!1,f=r.timeoutMs===void 0?void 0:setTimeout(()=>{m||(m=!0,i.kill(),p(),s(new Error(`lmplayer seed timed out after ${r.timeoutMs}ms`)))},r.timeoutMs),p=()=>{f!==void 0&&clearTimeout(f)},h=_=>{let g=_.trim();if(!g)return;let y;try{y=JSON.parse(g)}catch{u.push(_),r.onText?.(_);return}if(!fo(y))return;let E=mo(y,!1);d===void 0&&E!==void 0&&(d=E),c=mo(y,!0)??c;let v=Ch(y);v&&(u.push(v),r.onText?.(v))};i.stdout?.on("data",_=>{let g=_.toString("utf8");o+=g,l+=g;let y=l.indexOf(`
1664
+ LIMIT 2`).all(`${r}%`);return s.length!==1?null:s[0]}}});function zd(){return new Yd}var Yd,Zd=w(()=>{"use strict";Vd();$t();kr();gt();Yd=class extends xe{constructor(){super({provider:new Cn,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,r)=>Sr(e,{...r,acpTool:"opencode"})})}seedArgsFor(e){let r=["run"];return e?.model&&r.push("--model",e.model),e?.effort&&r.push("--variant",e.effort),r.push(e?.prompt??ge),r}}});import{appendFile as T0,mkdir as v0,readFile as kh,readdir as Ih,rm as b0,stat as Nh}from"node:fs/promises";import{basename as S0,dirname as k0,isAbsolute as Ah,join as Yr,relative as I0,resolve as Qd}from"node:path";function ec(t){if(!t)return;let e=new Date(t);return Number.isNaN(e.getTime())?void 0:e}function x0(t){return typeof t=="number"?new Date(t):ec(t)??new Date(0)}function R0(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(`
1665
+ `).trim():""}function xh(t){if(t!==void 0)try{return JSON.stringify(t)}catch{return String(t)}}function L0(t){return t&&typeof t=="object"&&"output"in t&&typeof t.output=="string"?t.output:xh(t)??""}function O0(t){let e=C0(t),r=new Set;for(let n of t){if(n.role!=="tool_use"||n.toolName!=="Bash"||n.toolInputData?.run_in_background!==!0||n.toolCallId===void 0)continue;let s=e.get(n.toolCallId);if(s===void 0)continue;let i=s.content.match(/(?:^|\n)task_id:\s*([^\s]+)/)?.[1];i!==void 0&&(r.add(i),n.backgroundTaskId=i,s.backgroundTaskId=i)}for(let n of t){if(n.role!=="tool_use"||n.toolName!=="TaskOutput"&&n.toolName!=="TaskStop"||n.toolCallId===void 0)continue;let s=n.toolInputData?.task_id;if(typeof s!="string"||!r.has(s))continue;n.backgroundTaskId=s;let i=e.get(n.toolCallId);i!==void 0&&(i.backgroundTaskId=s)}}function C0(t){let e=new Map;for(let r of t)r.role==="tool_result"&&r.toolCallId!==void 0&&e.set(r.toolCallId,r);return e}var N0,A0,uo,Rh=w(()=>{"use strict";tr();N0="1.4",A0="1.5",uo=class{name="kimi";homeDir;sessionsDir;constructor(e){this.homeDir=Qd(e?.kimiHome??process.env.KIMI_CODE_HOME??Yr(ve,".kimi-code")),this.sessionsDir=Yr(this.homeDir,"sessions")}async discoverSessions(){let e=[];for(let r of await this.sessionFiles())try{let n=await this.summary(r);n&&e.push(n)}catch{}return e.sort((r,n)=>n.modifiedAt.getTime()-r.modifiedAt.getTime())}async loadSession(e){let r=await this.findSession(e);if(!r)return null;let n=await this.summary(r);if(!n)return null;let s=await this.parseWire(r.wirePath);return{...n,messages:s.messages}}async resolveSessionPath(e){return(await this.findSession(e))?.wirePath??null}async deleteSession(e){let r=await this.findSession(e);return r?(await b0(r.sessionDir,{recursive:!0,force:!0}),await v0(k0(this.indexPath()),{recursive:!0,mode:448}),await T0(this.indexPath(),`${JSON.stringify({sessionId:r.sessionId,deleted:!0})}
1666
+ `,"utf-8"),!0):!1}getWatchPaths(){return[{directory:this.sessionsDir,filePattern:/wire\.jsonl$/}]}indexPath(){return Yr(this.homeDir,"session_index.jsonl")}async sessionFiles(){let e=await this.readIndex(),r=new Map;for(let s of e.values())this.validSessionDir(s.sessionDir,s.sessionId)&&r.set(s.sessionId,this.filesFor(s.sessionId,s.sessionDir,s.workDir));let n;try{n=await Ih(this.sessionsDir,{withFileTypes:!0})}catch{return[...r.values()]}for(let s of n){if(!s.isDirectory())continue;let i=Yr(this.sessionsDir,s.name),o;try{o=await Ih(i,{withFileTypes:!0})}catch{continue}for(let a of o){if(!a.isDirectory()||r.has(a.name))continue;let l=Yr(i,a.name);r.set(a.name,this.filesFor(a.name,l))}}return[...r.values()]}async readIndex(){let e;try{e=await kh(this.indexPath(),"utf-8")}catch{return new Map}let r=new Map;for(let n of e.split(/\r?\n/))if(n.trim())try{let s=JSON.parse(n);if(typeof s.sessionId!="string")continue;s.deleted===!0?r.delete(s.sessionId):typeof s.sessionDir=="string"&&typeof s.workDir=="string"&&r.set(s.sessionId,{sessionId:s.sessionId,sessionDir:Qd(s.sessionDir),workDir:s.workDir})}catch{}return r}filesFor(e,r,n){return{sessionId:e,sessionDir:r,statePath:Yr(r,"state.json"),wirePath:Yr(r,"agents","main","wire.jsonl"),indexedWorkDir:n}}validSessionDir(e,r){if(!Ah(e)||S0(e)!==r)return!1;let n=I0(this.sessionsDir,Qd(e));return n!==""&&n!==".."&&!n.startsWith(`..${process.platform==="win32"?"\\":"/"}`)&&!Ah(n)}async findSession(e){let r=await this.sessionFiles(),n=r.find(i=>i.sessionId===e);if(n)return n;let s=r.filter(i=>i.sessionId.startsWith(e));return s.length===1?s[0]:null}async readState(e){try{let r=JSON.parse(await kh(e,"utf-8"));return r!==null&&typeof r=="object"&&!Array.isArray(r)?r:null}catch{return null}}async summary(e){let r=await this.readState(e.statePath);if(!r)return null;let n;try{n=await Nh(e.wirePath)}catch{return null}let s=await Nh(e.statePath).catch(()=>n),i=await this.parseWire(e.wirePath),o=ec(r.createdAt)??s.birthtime,a=ec(r.updatedAt)??(s.mtime>n.mtime?s.mtime:n.mtime);return{provider:"kimi",sessionId:e.sessionId,slug:r.title,cwd:r.workDir??e.indexedWorkDir??"(unknown)",createdAt:o,modifiedAt:a,model:i.model,startCommand:"kimi",firstUserMessage:i.firstUserMessage,lastUserMessage:i.lastUserMessage??(r.lastPrompt?X(r.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 r=[],n=!0,s,i,o,a=0,l=0,d=0,c=0,u=!1,m=0,f,p;for await(let h of Be(e)){let _=x0(h.time??h.created_at);if(n&&(n=!1,h.type==="metadata"&&h.protocol_version!==N0)){let y=h.protocol_version===A0?"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:y}],messageCount:1,firstUserMessage:y,lastUserMessage:y}}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 y=h.usage?.inputOther??0,E=h.usage?.inputCacheRead??0,v=h.usage?.inputCacheCreation??0,S=h.usage?.output??0;a+=y,l+=E,d+=v,c+=S,h.usageScope==="turn"&&(f=y+E+v,p={inputTokens:y,cachedInputTokens:E,cacheWriteInputTokens:v,outputTokens:S,totalTokens:f+S});continue}if(h.type==="turn.prompt"&&h.origin?.kind==="user"){let y=R0(h.input);y&&(i??=X(y,80),o=X(y,80),r.push({role:"user",timestamp:_,content:y}),m++);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?(r.push({role:"assistant",timestamp:_,content:g.part.text,model:s}),m++):g.type==="content.part"&&g.part?.type==="think"&&g.part.think?r.push({role:"thinking",timestamp:_,content:g.part.think,model:s}):g.type==="tool.call"?r.push({role:"tool_use",timestamp:_,content:g.name??"tool",toolName:g.name,toolInput:xh(g.args),toolInputData:Ct(g.args),toolCallId:g.toolCallId,model:s}):g.type==="tool.result"&&r.push({role:"tool_result",timestamp:_,content:L0(g.result),toolCallId:g.toolCallId,model:s})}return O0(r),{messages:r,messageCount:m,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:f,lastTokenUsage:p}}}});function rc(t){return new tc(t)}var tc,nc=w(()=>{"use strict";Rh();$t();kr();gt();tc=class extends xe{constructor(e){super({provider:new uo(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:(r,n)=>Sr(r,{...n,acpTool:"kimi"})})}seedArgsFor(e){let r=[];return e?.model&&r.push("--model",e.model),r.push("-p",e?.prompt??ge,"--output-format","stream-json"),r}}});import{spawn as $0}from"node:child_process";import{mkdirSync as M0}from"node:fs";function ic(t){return new sc(t)}async function D0(t,e){let r=Date.now(),n=Lh({prompt:t,sessionId:e.sessionId,model:e.model,effort:e.effort,formatJson:!0,permissionMode:e.permissionMode??"yolo"});Et("lmplayer",n,e.permissionMode??"yolo");let s=await Oh(e.binary,n,{cwd:e.cwd,env:Je(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()-r}}function Lh(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(...vr("lmplayer",t.permissionMode)??[]),e.push(t.prompt),e}function Oh(t,e,r){return new Promise((n,s)=>{let i;try{i=$0(t,e,{cwd:r.cwd,env:r.env,stdio:["ignore","pipe","pipe"]})}catch(_){s(_);return}let o="",a="",l="",d,c,u=[],m=!1,f=r.timeoutMs===void 0?void 0:setTimeout(()=>{m||(m=!0,i.kill(),p(),s(new Error(`lmplayer seed timed out after ${r.timeoutMs}ms`)))},r.timeoutMs),p=()=>{f!==void 0&&clearTimeout(f)},h=_=>{let g=_.trim();if(!g)return;let y;try{y=JSON.parse(g)}catch{u.push(_),r.onText?.(_);return}if(!fo(y))return;let E=mo(y,!1);d===void 0&&E!==void 0&&(d=E),c=mo(y,!0)??c;let v=Ch(y);v&&(u.push(v),r.onText?.(v))};i.stdout?.on("data",_=>{let g=_.toString("utf8");o+=g,l+=g;let y=l.indexOf(`
1667
1667
  `);for(;y>=0;){let E=l.slice(0,y);l=l.slice(y+1),h(E),y=l.indexOf(`
1668
1668
  `)}}),i.stderr?.on("data",_=>{a+=_.toString("utf8")}),r.signal&&(r.signal.aborted?i.kill():r.signal.addEventListener("abort",()=>i.kill(),{once:!0})),i.on("exit",_=>{m||(m=!0,p(),l.length>0&&h(l),n({code:_,stdout:o,stderr:a,sessionId:d??c,text:u.join("")}))}),i.on("error",_=>{m||(m=!0,p(),s(_))})})}function Ch(t){for(let e of["text","content","delta","output","message"]){let r=t[e];if(typeof r=="string")return r}for(let e of["data","event","payload","part"]){let r=t[e];if(fo(r)){let n=Ch(r);if(n)return n}}}function mo(t,e){for(let n of["sessionID","sessionId","session_id"]){let s=t[n];if(typeof s=="string"&&s.length>0)return s}let r=t.session;if(typeof r=="string"&&r.length>0)return r;if(fo(r)){let n=mo(r,e);if(n!==void 0)return n}if(e){let n=t.id;if(typeof n=="string"&&n.length>0)return n}for(let n of["data","event","payload","part"]){let s=t[n];if(fo(s)){let i=mo(s,e);if(i!==void 0)return i}}}function fo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var sc,oc=w(()=>{"use strict";Vd();$t();gt();xn();yt();sc=class extends xe{constructor(e){super({provider:new Cn({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:D0})}seedArgsFor(e){return Lh({prompt:e?.prompt??ge,model:e?.model,effort:e?.effort,formatJson:!0,permissionMode:"yolo"})}async seed(e,r){M0(e,{recursive:!0});let n=this.seedArgsFor(r);Et("lmplayer",n);try{let s=await Oh(this.binary,n,{cwd:e,env:Tr(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 po,readFile as j0,rm as P0}from"node:fs/promises";import{basename as $h,join as Nr}from"node:path";function F0(){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 U0(t,e){if(!e)return;t.observed=!0;let r=Ps(e.promptTokenCount),n=Ps(e.cachedContentTokenCount),s=Ps(e.candidatesTokenCount),i=Ps(e.thoughtsTokenCount);t.totalInputTokens+=r,t.totalCachedInputTokens+=n,t.totalOutputTokens+=s,t.totalReasoningOutputTokens+=i,t.lastInputTokens=r,t.lastTokenUsage={inputTokens:Math.max(r-n,0),cachedInputTokens:n,outputTokens:s,reasoningOutputTokens:i,totalTokens:Ps(e.totalTokenCount)||r+s}}function W0(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 Mh(t){return t.type==="user"||t.message?.role==="user"}function Dh(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(r=>r.type==="text").map(r=>r.text||"").join(`
1669
1669
  `):Array.isArray(e.parts)?e.parts.filter(r=>!r.thought&&r.type!=="thinking").map(r=>r.text||"").join(`
@@ -1697,7 +1697,7 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1697
1697
  `),o={scanned:i.length,hung_detected:0,attentions_created:0,duplicates_suppressed:0};for(let a of i){let l=UL(a.workflow_definition,a.session_state_name,a.step_state_name);if(l===null)continue;let d=PL(e,a.team_id,l);if(d===null||d.sessionid===null)continue;let c=d.alias.toLowerCase()!=="lead",u=a.last_activity_at<s&&(a.last_event_at===null||a.last_event_at<s),m=a.started_at<s;if(!c||!u||!m)continue;let f={session_id:d.sessionid,step_id:a.step_id,member_alias:d.alias,provider:Qe(d),last_activity_at:a.last_activity_at,elapsed_ms:r-a.started_at,session_state:a.session_status,factors:{leaf:!0,no_activity:!0,elapsed:!0}};if(o.hung_detected+=1,FL(e,a.run_id,a.step_id,d.sessionid)){o.duplicates_suppressed+=1;continue}let p={run_id:a.run_id,project_id:a.project_id,payload:f};e.raiseAttention({kind:"session_hung",severity:"warn",project_id:a.project_id,run_id:a.run_id,requires_user:!0,payload:JSON.stringify(f)}),o.attentions_created+=1,t.enableKillHook===!0&&t.killHook!==void 0&&await t.killHook(p)}return o}function jL(t){return gg(t.getConfig(Io),DL)*1e3}function Oc(t,e){return gg(t.getConfig(No),e)}function gg(t,e){if(t===null||t.trim().length===0)return e;let r=Number(t);return Number.isFinite(r)&&r>0?Math.floor(r):e}function PL(t,e,r){return t.query("SELECT * FROM team_member WHERE team_id = ? AND lower(alias) = lower(?) LIMIT 1",e,r)[0]??null}function FL(t,e,r,n){return t.query(`SELECT * FROM attention
1698
1698
  WHERE kind = 'session_hung'
1699
1699
  AND run_id = ?
1700
- AND acknowledged_at IS NULL`,e).some(i=>{let o=yg(i.payload);return o!==null&&o.step_id===r&&o.session_id===n})}function UL(t,e,r){let n=yg(t);return n===null?null:WL(n,e,r)??qL(n,e,r)}function WL(t,e,r){if(!Array.isArray(t.steps))return null;let n=t.steps.filter(BL),s=n.find(a=>a.id===e)??n.find(a=>a.name===e)??n.find(a=>a.name===r);if(s===void 0||s.type!=="lmctl/interactive")return null;let i=Yr(s.members)?s.members:null,o=i!==null&&Yr(i.agent)?i.agent:null;return typeof o?.alias=="string"?o.alias:null}function qL(t,e,r){if(!Yr(t.states))return null;let n=t.states[e]??t.states[r];if(!Yr(n))return null;let s=n;if(!Yr(s.agent))return null;let i=s.agent;return typeof i.alias=="string"?i.alias:null}function BL(t){return Yr(t)}function yg(t){if(t===null)return null;try{let e=JSON.parse(t);return Yr(e)?e:null}catch{return null}}function Yr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Io,No,DL,Cc=w(()=>{"use strict";dt();Io="monitor.session_hung.elapsed_threshold_seconds",No="monitor.session_hung.check_interval_ms",DL=600});function xo(t){let e=t.query(`
1700
+ AND acknowledged_at IS NULL`,e).some(i=>{let o=yg(i.payload);return o!==null&&o.step_id===r&&o.session_id===n})}function UL(t,e,r){let n=yg(t);return n===null?null:WL(n,e,r)??qL(n,e,r)}function WL(t,e,r){if(!Array.isArray(t.steps))return null;let n=t.steps.filter(BL),s=n.find(a=>a.id===e)??n.find(a=>a.name===e)??n.find(a=>a.name===r);if(s===void 0||s.type!=="lmctl/interactive")return null;let i=zr(s.members)?s.members:null,o=i!==null&&zr(i.agent)?i.agent:null;return typeof o?.alias=="string"?o.alias:null}function qL(t,e,r){if(!zr(t.states))return null;let n=t.states[e]??t.states[r];if(!zr(n))return null;let s=n;if(!zr(s.agent))return null;let i=s.agent;return typeof i.alias=="string"?i.alias:null}function BL(t){return zr(t)}function yg(t){if(t===null)return null;try{let e=JSON.parse(t);return zr(e)?e:null}catch{return null}}function zr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Io,No,DL,Cc=w(()=>{"use strict";dt();Io="monitor.session_hung.elapsed_threshold_seconds",No="monitor.session_hung.check_interval_ms",DL=600});function xo(t){let e=t.query(`
1701
1701
  SELECT status, COUNT(*) AS count FROM job GROUP BY status
1702
1702
  `),r={queued:Ao(e,"queued"),running:Ao(e,"running"),done:Ao(e,"done"),failed:Ao(e,"failed"),total:Mc(e)},n=t.query(`
1703
1703
  SELECT terminal_state, COUNT(*) AS count FROM run GROUP BY terminal_state
@@ -1712,7 +1712,7 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1712
1712
  GROUP BY name
1713
1713
  ) latest ON latest.name = w.name AND latest.version = w.version
1714
1714
  ORDER BY w.name ASC
1715
- `)}function vg(t,e={}){return e.status!==void 0?t.query("SELECT * FROM job WHERE status = ? ORDER BY priority DESC, id ASC",e.status):t.query("SELECT * FROM job ORDER BY priority DESC, id ASC LIMIT 100")}function bg(t,e={}){if(e.pr_url!==void 0){let r=t.findSubmittedPrByUrl(e.pr_url);return r===null?[]:[r]}return t.listSubmittedPrs({status:e.status})}function Sg(t,e){return t.getSubmittedPr(e)}function Oo(t,e){return t.query("SELECT * FROM job WHERE id = ?",e)[0]??null}function jn(t,e={}){return t.query("SELECT * FROM run ORDER BY id DESC LIMIT ?",e.limit??100)}function zr(t,e){let r=t.query("SELECT * FROM run WHERE id = ?",e)[0];return r===void 0?null:{...r,job:Oo(t,r.job_id),workflow:t.query("SELECT * FROM workflow WHERE id = ?",r.workflow_id)[0]??null,team:t.getTeam(r.team_id),steps:HL(t,r.id)}}function HL(t,e){return t.query("SELECT * FROM step WHERE run_id = ? ORDER BY id ASC",e).map(r=>({...r,artifacts:kg(t,r.id)}))}function Dc(t,e,r){let n=t.query("SELECT * FROM step WHERE run_id = ? AND id = ?",e,r)[0];return n===void 0?null:{...n,artifacts:kg(t,n.id)}}function kg(t,e){return t.query("SELECT * FROM step_artifact WHERE step_id = ? ORDER BY id ASC",e)}function Zr(t,e,r){let n=r===void 0?"SELECT sa.*, s.state_name FROM step_artifact sa JOIN step s ON sa.step_id = s.id WHERE s.run_id = ? ORDER BY sa.id ASC":"SELECT sa.*, s.state_name FROM step_artifact sa JOIN step s ON sa.step_id = s.id WHERE s.run_id = ? AND sa.kind = ? ORDER BY sa.id ASC";return r===void 0?t.query(n,e):t.query(n,e,r)}function Ig(t,e,r){let n=Dc(t,e,r);return n===null?null:(n.artifacts.find(i=>i.kind===`${n.state_name}_transcript`)??n.artifacts.find(i=>i.content!==null))?.content??null}function Ng(t,e={}){return e.type!==void 0?t.query("SELECT * FROM external_object WHERE type = ? ORDER BY id DESC",e.type):t.query("SELECT * FROM external_object ORDER BY id DESC LIMIT 100")}function Ag(t,e={}){return e.unhandled===!0?t.query("SELECT * FROM external_signal WHERE handled_at IS NULL ORDER BY id DESC"):t.query("SELECT * FROM external_signal ORDER BY id DESC LIMIT 100")}function xr(t,e={}){return e.unacked===!0?t.query("SELECT * FROM attention WHERE acknowledged_at IS NULL ORDER BY id DESC"):t.query("SELECT * FROM attention ORDER BY id DESC LIMIT 100")}function Co(t,e={}){let r=[],n="a.kind IN ('interactive_waiting_operator', 'workflow_escalation')";return e.all!==!0&&(n+=" AND a.acknowledged_at IS NULL"),e.project!==void 0&&(n+=" AND p.name = ?",r.push(e.project)),e.since!==void 0&&(n+=" AND a.created_at >= ?",r.push(e.since)),t.query(`${xg}
1715
+ `)}function vg(t,e={}){return e.status!==void 0?t.query("SELECT * FROM job WHERE status = ? ORDER BY priority DESC, id ASC",e.status):t.query("SELECT * FROM job ORDER BY priority DESC, id ASC LIMIT 100")}function bg(t,e={}){if(e.pr_url!==void 0){let r=t.findSubmittedPrByUrl(e.pr_url);return r===null?[]:[r]}return t.listSubmittedPrs({status:e.status})}function Sg(t,e){return t.getSubmittedPr(e)}function Oo(t,e){return t.query("SELECT * FROM job WHERE id = ?",e)[0]??null}function jn(t,e={}){return t.query("SELECT * FROM run ORDER BY id DESC LIMIT ?",e.limit??100)}function Zr(t,e){let r=t.query("SELECT * FROM run WHERE id = ?",e)[0];return r===void 0?null:{...r,job:Oo(t,r.job_id),workflow:t.query("SELECT * FROM workflow WHERE id = ?",r.workflow_id)[0]??null,team:t.getTeam(r.team_id),steps:HL(t,r.id)}}function HL(t,e){return t.query("SELECT * FROM step WHERE run_id = ? ORDER BY id ASC",e).map(r=>({...r,artifacts:kg(t,r.id)}))}function Dc(t,e,r){let n=t.query("SELECT * FROM step WHERE run_id = ? AND id = ?",e,r)[0];return n===void 0?null:{...n,artifacts:kg(t,n.id)}}function kg(t,e){return t.query("SELECT * FROM step_artifact WHERE step_id = ? ORDER BY id ASC",e)}function Qr(t,e,r){let n=r===void 0?"SELECT sa.*, s.state_name FROM step_artifact sa JOIN step s ON sa.step_id = s.id WHERE s.run_id = ? ORDER BY sa.id ASC":"SELECT sa.*, s.state_name FROM step_artifact sa JOIN step s ON sa.step_id = s.id WHERE s.run_id = ? AND sa.kind = ? ORDER BY sa.id ASC";return r===void 0?t.query(n,e):t.query(n,e,r)}function Ig(t,e,r){let n=Dc(t,e,r);return n===null?null:(n.artifacts.find(i=>i.kind===`${n.state_name}_transcript`)??n.artifacts.find(i=>i.content!==null))?.content??null}function Ng(t,e={}){return e.type!==void 0?t.query("SELECT * FROM external_object WHERE type = ? ORDER BY id DESC",e.type):t.query("SELECT * FROM external_object ORDER BY id DESC LIMIT 100")}function Ag(t,e={}){return e.unhandled===!0?t.query("SELECT * FROM external_signal WHERE handled_at IS NULL ORDER BY id DESC"):t.query("SELECT * FROM external_signal ORDER BY id DESC LIMIT 100")}function xr(t,e={}){return e.unacked===!0?t.query("SELECT * FROM attention WHERE acknowledged_at IS NULL ORDER BY id DESC"):t.query("SELECT * FROM attention ORDER BY id DESC LIMIT 100")}function Co(t,e={}){let r=[],n="a.kind IN ('interactive_waiting_operator', 'workflow_escalation')";return e.all!==!0&&(n+=" AND a.acknowledged_at IS NULL"),e.project!==void 0&&(n+=" AND p.name = ?",r.push(e.project)),e.since!==void 0&&(n+=" AND a.created_at >= ?",r.push(e.since)),t.query(`${xg}
1716
1716
  WHERE ${n}
1717
1717
  ORDER BY a.created_at DESC`,...r).map(Rg)}function Ft(t,e){let n=t.query(`${xg}
1718
1718
  WHERE a.id = ?`,e)[0];return n===void 0?null:Rg(n)}function Rg(t){let{payload_json:e,...r}=t,n={...r,node_path:null,expected_response:null,transcript_tail:null,paused_at:null,created_run_inputs:null,workflow_version_id:null,workflow_step:null,escalation_tier:null,escalation_token:null,escalation_reason:null,declared_outcomes:null,agent_output:null};if(e==null)return n;let s;try{s=JSON.parse(e)}catch{return n}if(s===null||typeof s!="object")return n;let i=s;if(Array.isArray(i.node_path)&&i.node_path.every(o=>typeof o=="string")&&(n.node_path=i.node_path),i.expected_response!==null&&typeof i.expected_response=="object"){let o=i.expected_response;if(typeof o.kind=="string"){let a=Array.isArray(o.choices)&&o.choices.every(l=>typeof l=="string")?o.choices:null;n.expected_response={kind:o.kind,choices:a}}}if(Array.isArray(i.transcript_tail)&&i.transcript_tail.every(o=>typeof o=="string")&&(n.transcript_tail=i.transcript_tail),typeof i.paused_at=="string"&&(n.paused_at=i.paused_at),i.created_run_inputs!==null&&typeof i.created_run_inputs=="object"&&!Array.isArray(i.created_run_inputs)&&(n.created_run_inputs=i.created_run_inputs),typeof i.workflow_version_id=="number"?n.workflow_version_id=i.workflow_version_id:i.workflow_version_id===null&&(n.workflow_version_id=null),i.step!==null&&typeof i.step=="object"&&!Array.isArray(i.step)){let o=i.step;typeof o.id=="string"&&o.id.length>0&&(n.workflow_step={id:o.id,name:typeof o.name=="string"?o.name:null,type:typeof o.type=="string"?o.type:null})}return typeof i.tier=="string"&&(n.escalation_tier=i.tier),typeof i.token=="string"&&(n.escalation_token=i.token),typeof i.reason=="string"&&(n.escalation_reason=i.reason),Array.isArray(i.declared_outcomes)&&i.declared_outcomes.every(o=>typeof o=="string")&&(n.declared_outcomes=i.declared_outcomes),typeof i.agent_output=="string"&&(n.agent_output=i.agent_output),n}function Lg(t){return t.query(`
@@ -1827,7 +1827,7 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1827
1827
  `),2):cC(r.rest.slice(2),e);if(r.rest[0]==="run"&&r.rest[1]==="where"&&Uo(r.rest.slice(2)))return e.stdout.write(`${pO}
1828
1828
  `),0;if(r.rest[0]==="run"&&r.rest[1]==="timeline"&&Uo(r.rest.slice(2)))return e.stdout.write(`${_O}
1829
1829
  `),0;if(r.rest[0]==="run"&&r.rest[1]==="where")return r.present?oC(r.rest.slice(2),e):aC(r.rest.slice(2),e);if(r.rest[0]==="run"&&r.rest[1]==="timeline")return r.present?lC(r.rest.slice(2),e):dC(r.rest.slice(2),e);if(r.present)return XO(r.rest,e);let n=jg(t);if(typeof n=="string")return e.stderr.write(`error: ${n}
1830
- `),2;let s=Qr(e),i=s.baseUrl,o=Rr(n.accept,s.token),a=n.body;if(n.upload!==void 0)try{a=SO(n.upload.filePath,n.upload.project)}catch(d){return e.stderr.write(`error: upload failed: ${d instanceof Error?d.message:String(d)}
1830
+ `),2;let s=en(e),i=s.baseUrl,o=Rr(n.accept,s.token),a=n.body;if(n.upload!==void 0)try{a=SO(n.upload.filePath,n.upload.project)}catch(d){return e.stderr.write(`error: upload failed: ${d instanceof Error?d.message:String(d)}
1831
1831
  `),2}else n.body!==void 0&&n.contentType!==void 0?o["Content-Type"]=n.contentType:n.body!==void 0&&(o["Content-Type"]="application/json");let l;try{l=await fetch(new URL(n.path,i),{method:n.method,headers:o,body:a})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1832
1832
  `),2}if(!l.ok)return e.stderr.write(`error: HTTP ${l.status}: ${await l.text()}
1833
1833
  `),l.status===400?2:1;if(n.runAfterSubmit){let d=await l.json(),c=IO(d);if(c===null)return e.stderr.write(`error: submit-job response did not include a numeric job id
@@ -1837,7 +1837,7 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1837
1837
  `):e.stdout.write(`${JSON.stringify(m)}
1838
1838
  `)}else n.json?e.stdout.write(`${JSON.stringify(await l.json(),null,2)}
1839
1839
  `):(e.stdout.write(await l.text()),e.stdout.write(`
1840
- `));return 0}function jg(t){let e=Ug(t);if(typeof e=="string")return e;let r=e.args,n=e.format!=="text",[s,...i]=r;return s===void 0?"usage: lmctl api <subcommand>":s==="status"?Fo(i,"/api/status",n):s==="projects"?Fo(i,"/api/projects",n):s==="teams"?Fo(i,"/api/teams",n):s==="workflows"?i[0]==="verify"?$O(i.slice(1),e.format):Fo(i,"/api/workflows",n):s==="workflow"?CO(i,n):s==="upload"?LO(i,n):s==="submit-job"?OO(i,n):s==="issues"?RO(i,n):s==="jobs"?Bs(i,"--status","/api/jobs","status",n):s==="job"?xO(i,n):s==="project"?MO(i,n):s==="artifact"?PO(i,n):s==="runs"?Bs(i,"--limit","/api/runs","limit",n,!0):s==="external-objects"?Bs(i,"--type","/api/external-objects","type",n):s==="external-signals"?$g(i,"--unhandled","/api/external-signals","unhandled",n):s==="attentions"||s==="attention"?i[0]==="ack"?FO(i,n):$g(i,"--unacked","/api/attentions","unacked",n):s==="stats"?UO(i,n):s==="daemon"?WO(i,n):s==="intake"?qO(i,n):s==="session"?BO(i,n):s==="run"?HO(i,e.format):s==="prs"?Bs(i,"--status","/api/submitted-prs","status",n):s==="pr"?NO(i,n):`unknown subcommand: ${s}`}function Rr(t,e){let r={Accept:t};return e!==null&&e.length>0&&(r.Authorization=`Bearer ${e}`),r}function Qr(t){if(t.dal!==void 0)return Hs(t.dal,process.env,t);let e=qe({path:ne()});try{return Hs(e,process.env,t)}finally{e.close()}}function Hs(t,e,r){let n=[],s=t.getConfig("api.url"),i;s!==null?i=s:e.LMCTL_API_URL!==void 0&&e.LMCTL_API_URL.length>0?(i=e.LMCTL_API_URL,n.push("api.url")):i=aO;let o=t.getConfig("api.token"),a;e.LMCTL_API_TOKEN!==void 0&&e.LMCTL_API_TOKEN.length>0?(a=e.LMCTL_API_TOKEN,o===null?n.push("api.token"):o!==a&&r.stderr.write(`note: LMCTL_API_TOKEN env var overrides lmctl_config api.token for this API request.
1840
+ `));return 0}function jg(t){let e=Ug(t);if(typeof e=="string")return e;let r=e.args,n=e.format!=="text",[s,...i]=r;return s===void 0?"usage: lmctl api <subcommand>":s==="status"?Fo(i,"/api/status",n):s==="projects"?Fo(i,"/api/projects",n):s==="teams"?Fo(i,"/api/teams",n):s==="workflows"?i[0]==="verify"?$O(i.slice(1),e.format):Fo(i,"/api/workflows",n):s==="workflow"?CO(i,n):s==="upload"?LO(i,n):s==="submit-job"?OO(i,n):s==="issues"?RO(i,n):s==="jobs"?Bs(i,"--status","/api/jobs","status",n):s==="job"?xO(i,n):s==="project"?MO(i,n):s==="artifact"?PO(i,n):s==="runs"?Bs(i,"--limit","/api/runs","limit",n,!0):s==="external-objects"?Bs(i,"--type","/api/external-objects","type",n):s==="external-signals"?$g(i,"--unhandled","/api/external-signals","unhandled",n):s==="attentions"||s==="attention"?i[0]==="ack"?FO(i,n):$g(i,"--unacked","/api/attentions","unacked",n):s==="stats"?UO(i,n):s==="daemon"?WO(i,n):s==="intake"?qO(i,n):s==="session"?BO(i,n):s==="run"?HO(i,e.format):s==="prs"?Bs(i,"--status","/api/submitted-prs","status",n):s==="pr"?NO(i,n):`unknown subcommand: ${s}`}function Rr(t,e){let r={Accept:t};return e!==null&&e.length>0&&(r.Authorization=`Bearer ${e}`),r}function en(t){if(t.dal!==void 0)return Hs(t.dal,process.env,t);let e=qe({path:ne()});try{return Hs(e,process.env,t)}finally{e.close()}}function Hs(t,e,r){let n=[],s=t.getConfig("api.url"),i;s!==null?i=s:e.LMCTL_API_URL!==void 0&&e.LMCTL_API_URL.length>0?(i=e.LMCTL_API_URL,n.push("api.url")):i=aO;let o=t.getConfig("api.token"),a;e.LMCTL_API_TOKEN!==void 0&&e.LMCTL_API_TOKEN.length>0?(a=e.LMCTL_API_TOKEN,o===null?n.push("api.token"):o!==a&&r.stderr.write(`note: LMCTL_API_TOKEN env var overrides lmctl_config api.token for this API request.
1841
1841
  `)):o!==null?a=o:a=null;for(let l of n)r.stderr.write(`note: ${cO(l)} env var read; consider \`lmctl api config set ${l} ...\` to make this DB-canonical.
1842
1842
  `);return{baseUrl:i,token:a}}function cO(t){switch(t){case"api.port":return"LMCTL_API_PORT";case"api.token":return"LMCTL_API_TOKEN";case"api.url":return"LMCTL_API_URL";default:return`LMCTL_${t.replaceAll(".","_").toUpperCase()}`}}async function uO(t,e){let[r,...n]=t;if(r===void 0)return e.stderr.write(`usage: lmctl api config <get|set|list>
1843
1843
  `),2;let s=e.dal===void 0,i=e.dal??qe({path:ne()});try{if(r==="get"){if(n.length!==1)return e.stderr.write(`usage: lmctl api config get <key>
@@ -1856,7 +1856,7 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1856
1856
  `),0;let n=Jg(t,"--direct"),s=r||n.present,i=n.rest,[o,...a]=i;return o===void 0?(e.stderr.write(`usage: lmctl api escalations <list|show|respond>
1857
1857
  `),2):s?gO(o,a,e):o==="list"?EO(a,e):o==="show"?TO(a,e):o==="respond"?vO(a,e):(e.stderr.write(`error: unknown api escalations verb: ${o}
1858
1858
  `),2)}function Uo(t){return t.some(e=>e==="--help"||e==="-h")}function gO(t,e,r){let n=r.dal===void 0,s=r.dal??qe({path:ne()});try{return Gg(s,[t,...e],r)}finally{n&&s.close()}}function Pg(t){let e,r=!1,n=!1,s;for(let o=0;o<t.length;o+=1){let a=t[o];if(a==="--json"){r=!0;continue}if(a==="--all"){n=!0;continue}if(a==="--project"){let l=t[++o];if(l===void 0||l.startsWith("--"))return"missing value for --project";e=l;continue}if(a==="--since"){let l=t[++o];if(l===void 0||l.startsWith("--"))return"missing value for --since";let d=yO(l);if(typeof d=="object"&&"error"in d)return d.error;s=d.iso;continue}return ae(a)}let i={json:r,all:n};return e!==void 0&&(i.project=e),s!==void 0&&(i.since=s),i}function yO(t){let e=/^(\d+)([smhd])$/.exec(t);if(e!==null){let n=Number(e[1]),s=e[2],i=s==="s"?n:s==="m"?n*60:s==="h"?n*3600:n*86400;return{iso:new Date(Date.now()-i*1e3).toISOString()}}let r=Date.parse(t);return Number.isNaN(r)?{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`}:{iso:new Date(r).toISOString()}}async function EO(t,e){let r=Pg(t);if(typeof r=="string")return e.stderr.write(`error: ${r}
1859
- `),2;let n=Qr(e),s=Rr("application/json",n.token),i=new URLSearchParams;r.project!==void 0&&i.set("project",r.project),r.all&&i.set("all","true"),r.since!==void 0&&i.set("since",r.since);let o=i.toString().length>0?`?${i.toString()}`:"",a;try{a=await fetch(new URL(`/api/escalations${o}`,n.baseUrl),{method:"GET",headers:s})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1859
+ `),2;let n=en(e),s=Rr("application/json",n.token),i=new URLSearchParams;r.project!==void 0&&i.set("project",r.project),r.all&&i.set("all","true"),r.since!==void 0&&i.set("since",r.since);let o=i.toString().length>0?`?${i.toString()}`:"",a;try{a=await fetch(new URL(`/api/escalations${o}`,n.baseUrl),{method:"GET",headers:s})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1860
1860
  `),1}if(!a.ok)return e.stderr.write(`error: HTTP ${a.status}: ${await a.text()}
1861
1861
  `),a.status===400?2:1;let l=await a.json();return Fg(l,r.json,e)}function Fg(t,e,r){if(e)return r.stdout.write(`${JSON.stringify(t,null,2)}
1862
1862
  `),0;if(t.length===0)return r.stdout.write(`No pending escalations.
@@ -1870,13 +1870,13 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1870
1870
  `),r.stdout.write(`
1871
1871
  `)}return 0}function wO(t){let e=Date.parse(t);if(Number.isNaN(e))return"recently";let r=Math.max(0,Math.round((Date.now()-e)/1e3));if(r<60)return`${r}s ago`;let n=Math.round(r/60);if(n<60)return`${n}m ago`;let s=Math.round(n/60);return s<24?`${s}h ago`:`${Math.round(s/24)}d ago`}async function TO(t,e){let r=t.filter(a=>a!=="--json"&&a!=="--text");if(r.length!==1)return e.stderr.write(`usage: lmctl api escalations show <attention_id> [--json|--text]
1872
1872
  `),2;let n=le(r[0],"attention_id");if(typeof n=="string")return e.stderr.write(`error: ${n}
1873
- `),2;let s=Qr(e),i=Rr("application/json",s.token),o;try{o=await fetch(new URL(`/api/escalations/${n}`,s.baseUrl),{method:"GET",headers:i})}catch(a){return e.stderr.write(`error: network failure: ${a instanceof Error?a.message:String(a)}
1873
+ `),2;let s=en(e),i=Rr("application/json",s.token),o;try{o=await fetch(new URL(`/api/escalations/${n}`,s.baseUrl),{method:"GET",headers:i})}catch(a){return e.stderr.write(`error: network failure: ${a instanceof Error?a.message:String(a)}
1874
1874
  `),1}return o.status===404?(e.stderr.write(`error: escalation not found: ${n}
1875
1875
  `),1):o.ok?(e.stdout.write(`${JSON.stringify(await o.json(),null,2)}
1876
1876
  `),0):(e.stderr.write(`error: HTTP ${o.status}: ${await o.text()}
1877
1877
  `),o.status===400?2:1)}async function vO(t,e){let r=!1,n=!1,s=[];for(let m=0;m<t.length;m+=1){let f=t[m];if(f==="--json"){r=!0;continue}if(f==="--done"){n=!0;continue}s.push(f)}if(s.length!==2)return e.stderr.write(`usage: lmctl api escalations respond <attention_id> "<answer>" [--done] [--json]
1878
1878
  `),2;let i=le(s[0],"attention_id");if(typeof i=="string")return e.stderr.write(`error: ${i}
1879
- `),2;let o=s[1],a=Qr(e),l=Rr("application/json",a.token);l["Content-Type"]="application/json";let d={input:o};n&&(d.done=!0);let c;try{c=await fetch(new URL(`/api/escalations/${i}/respond`,a.baseUrl),{method:"POST",headers:l,body:JSON.stringify(d)})}catch(m){return e.stderr.write(`error: network failure: ${m instanceof Error?m.message:String(m)}
1879
+ `),2;let o=s[1],a=en(e),l=Rr("application/json",a.token);l["Content-Type"]="application/json";let d={input:o};n&&(d.done=!0);let c;try{c=await fetch(new URL(`/api/escalations/${i}/respond`,a.baseUrl),{method:"POST",headers:l,body:JSON.stringify(d)})}catch(m){return e.stderr.write(`error: network failure: ${m instanceof Error?m.message:String(m)}
1880
1880
  `),1}if(c.status===404)return e.stderr.write(`error: escalation not found: ${i}
1881
1881
  `),1;if(!c.ok){let m=await c.text();return e.stderr.write(`error: HTTP ${c.status}: ${m}
1882
1882
  `),c.status===400?2:1}let u=await c.json();return r?e.stdout.write(`${JSON.stringify(u,null,2)}
@@ -1926,7 +1926,7 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1926
1926
  `):e.stdout.write($o(a)),0)}finally{i&&o.close()}}async function aC(t,e){let[r,...n]=t;if(r===void 0)return e.stderr.write(`error: usage: lmctl api run where <run_id> [--json]
1927
1927
  `),2;if(!/^\d+$/.test(r)||Number(r)<=0)return e.stderr.write(`error: invalid run_id: ${r}
1928
1928
  `),2;let s=!1;for(let d of n){if(d==="--json"){s=!0;continue}if(d!=="--text")return e.stderr.write(`error: ${ae(d)}
1929
- `),2}let i=Qr(e),a=Rr(s?"application/json":"text/plain",i.token),l;try{l=await fetch(new URL(`/api/runs/${r}/where`,i.baseUrl),{method:"GET",headers:a})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1929
+ `),2}let i=en(e),a=Rr(s?"application/json":"text/plain",i.token),l;try{l=await fetch(new URL(`/api/runs/${r}/where`,i.baseUrl),{method:"GET",headers:a})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1930
1930
  `),2}return l.ok?(s?e.stdout.write(`${JSON.stringify(await l.json(),null,2)}
1931
1931
  `):(e.stdout.write(await l.text()),l.headers.get("content-type")?.includes("text/plain")||e.stdout.write(`
1932
1932
  `)),0):(e.stderr.write(`error: HTTP ${l.status}: ${await l.text()}
@@ -1938,12 +1938,12 @@ ${r}`:r}function OR(t,e){if(t!=="kimi"||!e.includes("notifications/initialized")
1938
1938
  `):e.stdout.write(Do(a)),0)}finally{i&&o.close()}}async function dC(t,e){let[r,...n]=t;if(r===void 0)return e.stderr.write(`error: usage: lmctl api run timeline <run_id> [--json]
1939
1939
  `),2;if(!/^\d+$/.test(r)||Number(r)<=0)return e.stderr.write(`error: invalid run_id: ${r}
1940
1940
  `),2;let s=!1;for(let d of n){if(d==="--json"){s=!0;continue}if(d!=="--text")return e.stderr.write(`error: ${ae(d)}
1941
- `),2}let i=Qr(e),a=Rr(s?"application/json":"text/plain",i.token),l;try{l=await fetch(new URL(`/api/runs/${r}/timeline`,i.baseUrl),{method:"GET",headers:a})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1941
+ `),2}let i=en(e),a=Rr(s?"application/json":"text/plain",i.token),l;try{l=await fetch(new URL(`/api/runs/${r}/timeline`,i.baseUrl),{method:"GET",headers:a})}catch(d){return e.stderr.write(`error: network failure: ${d instanceof Error?d.message:String(d)}
1942
1942
  `),2}return l.ok?(s?e.stdout.write(`${JSON.stringify(await l.json(),null,2)}
1943
1943
  `):(e.stdout.write(await l.text()),l.headers.get("content-type")?.includes("text/plain")||e.stdout.write(`
1944
1944
  `)),0):(e.stderr.write(`error: HTTP ${l.status}: ${await l.text()}
1945
1945
  `),l.status===404?1:l.status===400?2:1)}async function cC(t,e){let r=!1;for(let a of t){if(a==="--json"){r=!0;continue}if(a!=="--text")return e.stderr.write(`error: ${ae(a)}
1946
- `),2}let n=Qr(e),i=Rr(r?"application/json":"text/plain",n.token),o;try{o=await fetch(new URL("/api/workflows/verify",n.baseUrl),{method:"GET",headers:i})}catch(a){return e.stderr.write(`error: network failure: ${a instanceof Error?a.message:String(a)}
1946
+ `),2}let n=en(e),i=Rr(r?"application/json":"text/plain",n.token),o;try{o=await fetch(new URL("/api/workflows/verify",n.baseUrl),{method:"GET",headers:i})}catch(a){return e.stderr.write(`error: network failure: ${a instanceof Error?a.message:String(a)}
1947
1947
  `),2}return o.ok?(r?e.stdout.write(`${JSON.stringify(await o.json(),null,2)}
1948
1948
  `):(e.stdout.write(await o.text()),o.headers.get("content-type")?.includes("text/plain")||e.stdout.write(`
1949
1949
  `)),0):(e.stderr.write(`error: HTTP ${o.status}: ${await o.text()}
@@ -2107,22 +2107,22 @@ and \`lmctl api escalations\` (no args) print detailed usage.
2107
2107
 
2108
2108
  Verify every workflows/*.compound.json file: load/validate the workflow graph
2109
2109
  and report the first step that would be started. Default output is the TTY
2110
- table; --json emits the structured WorkflowVerifyReport payload.`;QO=["open","assigned","closed","reopened"]});import Vg from"jexl";function Fn(t){Vg.compile(Yg(t))}async function en(t,e){return Vg.eval(Yg(t),e)}function Yg(t){return t.replace(/([A-Za-z_$][\w$.[\]]*)\.includes\(([^()]+)\)/g,"($2 in $1)")}var Xs=w(()=>{"use strict"});import{z as T}from"zod";function Gc(t){let e=t.trim();return e.startsWith("={{")&&e.endsWith("}}")?e.slice(3,-2).trim():t}var fC,zg,Wc,qc,Bc,Hc,Xc,Jc,Zg,pC,_C,hC,Js,gC,Wo,qo,Bo,Ho,Xo,Qg,yC,EC,wC,TC,Jo,Un=w(()=>{"use strict";Xs();fC=T.object({kind:T.enum(["success","neutral","failure"])}),zg=T.enum(["string","number","boolean","object","array"]),Wc=T.object({name:T.string().min(1),type:zg,required:T.boolean().optional(),default:T.unknown().optional(),description:T.string().optional()}),qc=T.object({name:T.string().min(1),type:zg,source_step_id:T.string().min(1),source_field:T.string().min(1),description:T.string().optional()}),Bc=T.object({id:T.string().min(1),type:T.string().min(1),parameters:T.record(T.string(),T.unknown()).default({})}),Hc="__failure__",Xc=T.object({tools:T.array(T.string().min(1)).optional(),auth:T.array(T.string().min(1)).optional()}).strict().optional(),Jc=T.object({on_unhandled_failure:T.object({attention_kind:T.string().min(1).default("workflow_failed"),severity:T.enum(["warn","error","critical"]).default("warn"),capture_evidence:T.boolean().default(!0),recommend_recovery:T.string().min(1).optional()}).optional(),on_unhandled_failure_state:T.string().min(1).optional()}).optional(),Zg=T.object({type:T.literal("AssertRepoClean"),fail_message:T.string().min(1).optional(),next:T.string().min(1)}),pC=T.object({name:T.string().min(1),command:T.string().min(1).optional(),args:T.array(T.string()).optional(),env:T.record(T.string(),T.string()).optional(),type:T.enum(["stdio","http","sse"]).optional(),url:T.string().min(1).optional(),headers:T.record(T.string(),T.string()).optional()}).strict(),_C=T.union([T.string().min(1),pC]),hC=T.union([T.string().min(1),T.object({name:T.string().min(1),content:T.string().min(1)}).strict()]),Js=T.object({team:T.string().min(1),alias:T.string().min(1),prompt_template:T.string().optional(),mcp:T.array(_C).optional(),skills:T.array(hC).optional()}),gC=T.object({kind:T.literal("shell"),command:T.string().min(1),description:T.string().optional()}),Wo=T.object({type:T.literal("Review"),state_name:T.string().min(1),coder:Js,pre_checks:T.array(gC).optional(),reviewers:T.array(Js.extend({rubric_artifact:T.string().optional()})).optional(),outcomes:T.object({approve:T.string().min(1),request_changes:T.string().optional(),fail_pre_check:T.string().optional(),max_loops_exceeded:T.string().optional()}),writes_to_project_path:T.boolean().optional(),durable_memory_tags:T.array(T.string().min(1)).optional(),write_back_durable_memory:T.union([T.boolean(),T.string().min(1)]).optional(),max_loops:T.number().int().positive().default(5),loop_feedback_artifact:T.string().optional(),outcomes_from_stance:T.record(T.string(),T.string().min(1)).optional()}).superRefine((t,e)=>{(t.reviewers??[]).length>0&&t.outcomes_from_stance!==void 0&&e.addIssue({code:"custom",path:["outcomes_from_stance"],message:"outcomes_from_stance cannot be used when reviewers is non-empty"})}),qo=T.object({type:T.literal("Consolidate"),state_name:T.string().min(1),researchers:T.array(Js.extend({topic:T.string().min(1)})).optional(),consolidator:Js,outcomes:T.object({ok:T.string().min(1),error:T.string().optional()}),research_artifact_prefix:T.string().optional(),durable_memory_tags:T.array(T.string().min(1)).optional(),write_back_durable_memory:T.union([T.boolean(),T.string().min(1)]).optional()}),Bo=T.object({type:T.literal("Interactive"),state_name:T.string().min(1),agent:Js.extend({initial_prompt_template:T.string().min(1)}),termination:T.object({operator_signal:T.boolean().default(!0),agent_signal:T.string().optional(),max_turns:T.number().int().positive().default(20),timeout_seconds:T.number().int().positive().optional()}),outcomes:T.object({done:T.string().min(1),timeout:T.string().optional()}),artifact_name:T.string().optional(),durable_memory_tags:T.array(T.string().min(1)).optional(),write_back_durable_memory:T.union([T.boolean(),T.string().min(1)]).optional()}),Ho=T.object({type:T.literal("Loop"),state_name:T.string().min(1),over:T.string().min(1),item_var:T.string().min(1),body:T.string().min(1),outcomes:T.object({ok:T.string().min(1),error:T.string().optional()}),stop_on_error:T.boolean().default(!0),max_items:T.number().int().positive().default(1e3)}),Xo=T.object({type:T.literal("ShellStep"),state_name:T.string().min(1),command:T.string().min(1),outcomes_from_exit:T.record(T.string(),T.string().min(1)),timeout_ms:T.number().int().nonnegative().optional(),capture_output_to:T.string().optional(),writes_to_project_path:T.boolean().optional()}),Qg=T.object({type:T.literal("Choice"),state_name:T.string().min(1),branches:T.array(T.object({when:T.string().min(1),next:T.string().min(1)})).default([]),default_next:T.string().min(1).optional()}).superRefine((t,e)=>{for(let[r,n]of t.branches.entries())try{Fn(Gc(n.when))}catch(s){let i=s instanceof Error?s.message:"invalid expression";e.addIssue({code:"custom",path:["branches",r,"when"],message:`invalid jexl expression: ${i}`})}}),yC=T.discriminatedUnion("type",[Zg,Wo,qo,Bo,Ho,Xo,Qg]),EC=T.object({type:T.literal("ForEach"),state_name:T.string().min(1),items_from:T.string().min(1),mode:T.enum(["sequential","parallel"]).default("sequential"),max_concurrency:T.number().int().positive().default(1),on_item_failure:T.enum(["continue","stop"]).default("stop"),body:yC,outcomes:T.object({all_ok:T.string().min(1),any_failed:T.string().optional()})}).superRefine((t,e)=>{try{Fn(Gc(t.items_from))}catch(r){let n=r instanceof Error?r.message:"invalid expression";e.addIssue({code:"custom",path:["items_from"],message:`invalid jexl expression: ${n}`})}}),wC=T.object({type:T.literal("Subflow"),state_name:T.string().min(1),workflow_name:T.string().min(1),inputs:T.record(T.string(),T.string().min(1)).optional(),outcomes:T.record(T.string(),T.string().min(1))}).superRefine((t,e)=>{for(let[r,n]of Object.entries(t.inputs??{}))try{Fn(Gc(n))}catch(s){let i=s instanceof Error?s.message:"invalid expression";e.addIssue({code:"custom",path:["inputs",r],message:`invalid jexl expression: ${i}`})}}),TC=T.discriminatedUnion("type",[Zg,Wo,qo,Bo,Ho,Xo,Qg,EC,wC]),Jo=T.object({name:T.string().min(1),version:T.number().int().positive(),definition_schema_version:T.union([T.literal(1),T.literal(2)]),description:T.string().optional(),estimated_duration_ms:T.number().int().nonnegative().optional(),primitive_version:T.union([T.literal(1),T.literal(2)]).default(1),start_at:T.string().min(1),states:T.record(T.string().min(1),TC),terminals:T.record(T.string().min(1),fC),errors:Jc,concurrency_key:T.string().min(1).optional(),concurrent_limit:T.number().int().positive().optional(),default_task_timeout_ms:T.number().int().positive().max(216e5).optional(),inputs:T.array(Wc).optional(),outputs:T.array(qc).optional(),triggers:T.array(Bc).optional(),read_only:T.boolean().optional(),requires:Xc}).superRefine((t,e)=>{t.definition_schema_version===1&&t.errors!==void 0&&e.addIssue({code:"custom",path:["errors"],message:"errors block requires definition_schema_version: 2"}),t.definition_schema_version===1&&t.concurrency_key!==void 0&&e.addIssue({code:"custom",path:["concurrency_key"],message:"concurrency_key requires definition_schema_version: 2"}),t.definition_schema_version===1&&t.default_task_timeout_ms!==void 0&&e.addIssue({code:"custom",path:["default_task_timeout_ms"],message:"default_task_timeout_ms requires definition_schema_version: 2"})})});import{z}from"zod";var vC,Go,bC,SC,kC,Ut,Wn=w(()=>{"use strict";Un();vC=/^s-[a-z0-9-]+-[a-f0-9]{4}$/,Go=z.string().regex(vC),bC=z.object({step_id:Go,type:z.literal("main"),index:z.number().int().min(0)}),SC=z.record(Go,z.record(z.string().min(1),z.array(z.array(bC)))),kC=z.object({id:Go,name:z.string().min(1),type:z.string().min(1),typeVersion:z.number().int().positive().default(1),parameters:z.record(z.string(),z.unknown()).default({}),members:z.record(z.string(),z.unknown()).optional(),estimated_duration_ms:z.number().int().nonnegative().optional()}),Ut=z.object({schema_version:z.literal("lmctl/v3"),definition_schema_version:z.literal(3),name:z.string().min(1),version:z.number().int().positive(),description:z.string().optional(),estimated_duration_ms:z.number().int().nonnegative().optional(),default_task_timeout_ms:z.number().int().positive().max(216e5).optional(),concurrency_key:z.string().min(1).optional(),concurrent_limit:z.number().int().positive().optional(),errors:Jc,inputs:z.array(Wc).optional(),outputs:z.array(qc).optional(),steps:z.array(kC).min(1),connections:SC.default({}),entry_step_id:Go,triggers:z.array(Bc).optional(),read_only:z.boolean().optional(),requires:Xc}).superRefine((t,e)=>{let r=new Set;for(let[n,s]of t.steps.entries())r.has(s.id)&&e.addIssue({code:"custom",path:["steps",n,"id"],message:`duplicate step id: ${s.id}`}),r.add(s.id);r.has(t.entry_step_id)||e.addIssue({code:"custom",path:["entry_step_id"],message:`entry_step_id does not reference an existing step: ${t.entry_step_id}`});for(let[n,s]of Object.entries(t.connections)){r.has(n)||e.addIssue({code:"custom",path:["connections",n],message:`connection source does not reference an existing step: ${n}`});for(let[i,o]of Object.entries(s))for(let[a,l]of o.entries())for(let[d,c]of l.entries())r.has(c.step_id)||e.addIssue({code:"custom",path:["connections",n,i,a,d,"step_id"],message:`connection target does not reference an existing step: ${c.step_id}`})}})});function Ko(t){return Vc(t)}function Vc(t){if(Array.isArray(t))return t.map(Vc);if(t===null||typeof t!="object")return t;let e=t,r={};for(let n of Object.keys(e))r[n]=Vc(e[n]);if(typeof r.type=="string"){let n=NC[r.type];n!==void 0&&(r.type=n)}return r}var Kc,IC,NC,Yc=w(()=>{"use strict";Kc="lmctl.builtin.",IC={Review:`${Kc}Review`,Research:`${Kc}Research`,Consolidate:`${Kc}Consolidate`},NC=Object.fromEntries(Object.entries(IC).map(([t,e])=>[e,t]))});import{readFileSync as AC}from"node:fs";function ry(t){return xC(t)}function xC(t){let e=Ko(OC(t));if(LC(e),ny(e)===3)return RC(e);let r=Jo.safeParse(e);if(!r.success)throw new ir({errors:r.error.issues.map(s=>({path:s.path.length===0?"$":s.path.map(String).join("."),message:s.message}))});let n=CC(r.data);if(n.errors.length>0||n.unresolvedRefs.length>0)throw new ir(n);return r.data}function RC(t){let e=Ut.safeParse(t);if(!e.success)throw new ir({errors:e.error.issues.map(r=>({path:r.path.length===0?"$":r.path.map(String).join("."),message:r.message}))});return e.data}function LC(t){if(typeof t!="object"||t===null||!("definition_schema_version"in t))return;let e=ny(t);if(!(e===null||ey.includes(e)))throw new ir({errors:[{path:"definition_schema_version",message:`unsupported definition_schema_version ${e}; supported versions: ${ey.join(", ")}`}]})}function ny(t){if(typeof t!="object"||t===null||!("definition_schema_version"in t))return null;let e=t.definition_schema_version;return typeof e=="number"?e:null}function OC(t){if(typeof t!="string")return t;let e=t.trim();return t.includes(`
2110
+ table; --json emits the structured WorkflowVerifyReport payload.`;QO=["open","assigned","closed","reopened"]});import Vg from"jexl";function Fn(t){Vg.compile(Yg(t))}async function tn(t,e){return Vg.eval(Yg(t),e)}function Yg(t){return t.replace(/([A-Za-z_$][\w$.[\]]*)\.includes\(([^()]+)\)/g,"($2 in $1)")}var Xs=w(()=>{"use strict"});import{z as T}from"zod";function Gc(t){let e=t.trim();return e.startsWith("={{")&&e.endsWith("}}")?e.slice(3,-2).trim():t}var fC,zg,Wc,qc,Bc,Hc,Xc,Jc,Zg,pC,_C,hC,Js,gC,Wo,qo,Bo,Ho,Xo,Qg,yC,EC,wC,TC,Jo,Un=w(()=>{"use strict";Xs();fC=T.object({kind:T.enum(["success","neutral","failure"])}),zg=T.enum(["string","number","boolean","object","array"]),Wc=T.object({name:T.string().min(1),type:zg,required:T.boolean().optional(),default:T.unknown().optional(),description:T.string().optional()}),qc=T.object({name:T.string().min(1),type:zg,source_step_id:T.string().min(1),source_field:T.string().min(1),description:T.string().optional()}),Bc=T.object({id:T.string().min(1),type:T.string().min(1),parameters:T.record(T.string(),T.unknown()).default({})}),Hc="__failure__",Xc=T.object({tools:T.array(T.string().min(1)).optional(),auth:T.array(T.string().min(1)).optional()}).strict().optional(),Jc=T.object({on_unhandled_failure:T.object({attention_kind:T.string().min(1).default("workflow_failed"),severity:T.enum(["warn","error","critical"]).default("warn"),capture_evidence:T.boolean().default(!0),recommend_recovery:T.string().min(1).optional()}).optional(),on_unhandled_failure_state:T.string().min(1).optional()}).optional(),Zg=T.object({type:T.literal("AssertRepoClean"),fail_message:T.string().min(1).optional(),next:T.string().min(1)}),pC=T.object({name:T.string().min(1),command:T.string().min(1).optional(),args:T.array(T.string()).optional(),env:T.record(T.string(),T.string()).optional(),type:T.enum(["stdio","http","sse"]).optional(),url:T.string().min(1).optional(),headers:T.record(T.string(),T.string()).optional()}).strict(),_C=T.union([T.string().min(1),pC]),hC=T.union([T.string().min(1),T.object({name:T.string().min(1),content:T.string().min(1)}).strict()]),Js=T.object({team:T.string().min(1),alias:T.string().min(1),prompt_template:T.string().optional(),mcp:T.array(_C).optional(),skills:T.array(hC).optional()}),gC=T.object({kind:T.literal("shell"),command:T.string().min(1),description:T.string().optional()}),Wo=T.object({type:T.literal("Review"),state_name:T.string().min(1),coder:Js,pre_checks:T.array(gC).optional(),reviewers:T.array(Js.extend({rubric_artifact:T.string().optional()})).optional(),outcomes:T.object({approve:T.string().min(1),request_changes:T.string().optional(),fail_pre_check:T.string().optional(),max_loops_exceeded:T.string().optional()}),writes_to_project_path:T.boolean().optional(),durable_memory_tags:T.array(T.string().min(1)).optional(),write_back_durable_memory:T.union([T.boolean(),T.string().min(1)]).optional(),max_loops:T.number().int().positive().default(5),loop_feedback_artifact:T.string().optional(),outcomes_from_stance:T.record(T.string(),T.string().min(1)).optional()}).superRefine((t,e)=>{(t.reviewers??[]).length>0&&t.outcomes_from_stance!==void 0&&e.addIssue({code:"custom",path:["outcomes_from_stance"],message:"outcomes_from_stance cannot be used when reviewers is non-empty"})}),qo=T.object({type:T.literal("Consolidate"),state_name:T.string().min(1),researchers:T.array(Js.extend({topic:T.string().min(1)})).optional(),consolidator:Js,outcomes:T.object({ok:T.string().min(1),error:T.string().optional()}),research_artifact_prefix:T.string().optional(),durable_memory_tags:T.array(T.string().min(1)).optional(),write_back_durable_memory:T.union([T.boolean(),T.string().min(1)]).optional()}),Bo=T.object({type:T.literal("Interactive"),state_name:T.string().min(1),agent:Js.extend({initial_prompt_template:T.string().min(1)}),termination:T.object({operator_signal:T.boolean().default(!0),agent_signal:T.string().optional(),max_turns:T.number().int().positive().default(20),timeout_seconds:T.number().int().positive().optional()}),outcomes:T.object({done:T.string().min(1),timeout:T.string().optional()}),artifact_name:T.string().optional(),durable_memory_tags:T.array(T.string().min(1)).optional(),write_back_durable_memory:T.union([T.boolean(),T.string().min(1)]).optional()}),Ho=T.object({type:T.literal("Loop"),state_name:T.string().min(1),over:T.string().min(1),item_var:T.string().min(1),body:T.string().min(1),outcomes:T.object({ok:T.string().min(1),error:T.string().optional()}),stop_on_error:T.boolean().default(!0),max_items:T.number().int().positive().default(1e3)}),Xo=T.object({type:T.literal("ShellStep"),state_name:T.string().min(1),command:T.string().min(1),outcomes_from_exit:T.record(T.string(),T.string().min(1)),timeout_ms:T.number().int().nonnegative().optional(),capture_output_to:T.string().optional(),writes_to_project_path:T.boolean().optional()}),Qg=T.object({type:T.literal("Choice"),state_name:T.string().min(1),branches:T.array(T.object({when:T.string().min(1),next:T.string().min(1)})).default([]),default_next:T.string().min(1).optional()}).superRefine((t,e)=>{for(let[r,n]of t.branches.entries())try{Fn(Gc(n.when))}catch(s){let i=s instanceof Error?s.message:"invalid expression";e.addIssue({code:"custom",path:["branches",r,"when"],message:`invalid jexl expression: ${i}`})}}),yC=T.discriminatedUnion("type",[Zg,Wo,qo,Bo,Ho,Xo,Qg]),EC=T.object({type:T.literal("ForEach"),state_name:T.string().min(1),items_from:T.string().min(1),mode:T.enum(["sequential","parallel"]).default("sequential"),max_concurrency:T.number().int().positive().default(1),on_item_failure:T.enum(["continue","stop"]).default("stop"),body:yC,outcomes:T.object({all_ok:T.string().min(1),any_failed:T.string().optional()})}).superRefine((t,e)=>{try{Fn(Gc(t.items_from))}catch(r){let n=r instanceof Error?r.message:"invalid expression";e.addIssue({code:"custom",path:["items_from"],message:`invalid jexl expression: ${n}`})}}),wC=T.object({type:T.literal("Subflow"),state_name:T.string().min(1),workflow_name:T.string().min(1),inputs:T.record(T.string(),T.string().min(1)).optional(),outcomes:T.record(T.string(),T.string().min(1))}).superRefine((t,e)=>{for(let[r,n]of Object.entries(t.inputs??{}))try{Fn(Gc(n))}catch(s){let i=s instanceof Error?s.message:"invalid expression";e.addIssue({code:"custom",path:["inputs",r],message:`invalid jexl expression: ${i}`})}}),TC=T.discriminatedUnion("type",[Zg,Wo,qo,Bo,Ho,Xo,Qg,EC,wC]),Jo=T.object({name:T.string().min(1),version:T.number().int().positive(),definition_schema_version:T.union([T.literal(1),T.literal(2)]),description:T.string().optional(),estimated_duration_ms:T.number().int().nonnegative().optional(),primitive_version:T.union([T.literal(1),T.literal(2)]).default(1),start_at:T.string().min(1),states:T.record(T.string().min(1),TC),terminals:T.record(T.string().min(1),fC),errors:Jc,concurrency_key:T.string().min(1).optional(),concurrent_limit:T.number().int().positive().optional(),default_task_timeout_ms:T.number().int().positive().max(216e5).optional(),inputs:T.array(Wc).optional(),outputs:T.array(qc).optional(),triggers:T.array(Bc).optional(),read_only:T.boolean().optional(),requires:Xc}).superRefine((t,e)=>{t.definition_schema_version===1&&t.errors!==void 0&&e.addIssue({code:"custom",path:["errors"],message:"errors block requires definition_schema_version: 2"}),t.definition_schema_version===1&&t.concurrency_key!==void 0&&e.addIssue({code:"custom",path:["concurrency_key"],message:"concurrency_key requires definition_schema_version: 2"}),t.definition_schema_version===1&&t.default_task_timeout_ms!==void 0&&e.addIssue({code:"custom",path:["default_task_timeout_ms"],message:"default_task_timeout_ms requires definition_schema_version: 2"})})});import{z}from"zod";var vC,Go,bC,SC,kC,Ut,Wn=w(()=>{"use strict";Un();vC=/^s-[a-z0-9-]+-[a-f0-9]{4}$/,Go=z.string().regex(vC),bC=z.object({step_id:Go,type:z.literal("main"),index:z.number().int().min(0)}),SC=z.record(Go,z.record(z.string().min(1),z.array(z.array(bC)))),kC=z.object({id:Go,name:z.string().min(1),type:z.string().min(1),typeVersion:z.number().int().positive().default(1),parameters:z.record(z.string(),z.unknown()).default({}),members:z.record(z.string(),z.unknown()).optional(),estimated_duration_ms:z.number().int().nonnegative().optional()}),Ut=z.object({schema_version:z.literal("lmctl/v3"),definition_schema_version:z.literal(3),name:z.string().min(1),version:z.number().int().positive(),description:z.string().optional(),estimated_duration_ms:z.number().int().nonnegative().optional(),default_task_timeout_ms:z.number().int().positive().max(216e5).optional(),concurrency_key:z.string().min(1).optional(),concurrent_limit:z.number().int().positive().optional(),errors:Jc,inputs:z.array(Wc).optional(),outputs:z.array(qc).optional(),steps:z.array(kC).min(1),connections:SC.default({}),entry_step_id:Go,triggers:z.array(Bc).optional(),read_only:z.boolean().optional(),requires:Xc}).superRefine((t,e)=>{let r=new Set;for(let[n,s]of t.steps.entries())r.has(s.id)&&e.addIssue({code:"custom",path:["steps",n,"id"],message:`duplicate step id: ${s.id}`}),r.add(s.id);r.has(t.entry_step_id)||e.addIssue({code:"custom",path:["entry_step_id"],message:`entry_step_id does not reference an existing step: ${t.entry_step_id}`});for(let[n,s]of Object.entries(t.connections)){r.has(n)||e.addIssue({code:"custom",path:["connections",n],message:`connection source does not reference an existing step: ${n}`});for(let[i,o]of Object.entries(s))for(let[a,l]of o.entries())for(let[d,c]of l.entries())r.has(c.step_id)||e.addIssue({code:"custom",path:["connections",n,i,a,d,"step_id"],message:`connection target does not reference an existing step: ${c.step_id}`})}})});function Ko(t){return Vc(t)}function Vc(t){if(Array.isArray(t))return t.map(Vc);if(t===null||typeof t!="object")return t;let e=t,r={};for(let n of Object.keys(e))r[n]=Vc(e[n]);if(typeof r.type=="string"){let n=NC[r.type];n!==void 0&&(r.type=n)}return r}var Kc,IC,NC,Yc=w(()=>{"use strict";Kc="lmctl.builtin.",IC={Review:`${Kc}Review`,Research:`${Kc}Research`,Consolidate:`${Kc}Consolidate`},NC=Object.fromEntries(Object.entries(IC).map(([t,e])=>[e,t]))});import{readFileSync as AC}from"node:fs";function ry(t){return xC(t)}function xC(t){let e=Ko(OC(t));if(LC(e),ny(e)===3)return RC(e);let r=Jo.safeParse(e);if(!r.success)throw new ir({errors:r.error.issues.map(s=>({path:s.path.length===0?"$":s.path.map(String).join("."),message:s.message}))});let n=CC(r.data);if(n.errors.length>0||n.unresolvedRefs.length>0)throw new ir(n);return r.data}function RC(t){let e=Ut.safeParse(t);if(!e.success)throw new ir({errors:e.error.issues.map(r=>({path:r.path.length===0?"$":r.path.map(String).join("."),message:r.message}))});return e.data}function LC(t){if(typeof t!="object"||t===null||!("definition_schema_version"in t))return;let e=ny(t);if(!(e===null||ey.includes(e)))throw new ir({errors:[{path:"definition_schema_version",message:`unsupported definition_schema_version ${e}; supported versions: ${ey.join(", ")}`}]})}function ny(t){if(typeof t!="object"||t===null||!("definition_schema_version"in t))return null;let e=t.definition_schema_version;return typeof e=="number"?e:null}function OC(t){if(typeof t!="string")return t;let e=t.trim();return t.includes(`
2111
2111
  `)||e.startsWith("{")||e.startsWith("[")?ty(t,"$"):e.endsWith(".json")?ty(AC(e,"utf8"),e):t}function ty(t,e){try{return JSON.parse(t)}catch(r){let n=r instanceof Error?r.message:"invalid JSON";throw new ir({errors:[{path:e,message:`invalid JSON: ${n}`}]})}}function CC(t){let e=[],r=[],n=new Set(Object.keys(t.states));n.has(t.start_at)||r.push({state:"$",ref:t.start_at,kind:"next"}),$C(t,n,r);for(let[s,i]of Object.entries(t.states))new Set(Object.keys(t.terminals));return{errors:e,unresolvedRefs:r}}function $C(t,e,r){let n=t.errors?.on_unhandled_failure_state;n!==void 0&&(e.has(n)||r.push({state:"$",ref:n,kind:"next"}))}var ey,ir,sy=w(()=>{"use strict";Un();Wn();Yc();ey=[1,2,3],ir=class extends Error{errors;unresolvedRefs;constructor(e){super(e.message??"workflow validation failed"),this.name="WorkflowValidationError",this.errors=e.errors??[],this.unresolvedRefs=e.unresolvedRefs??[]}}});import{createHash as MC}from"node:crypto";function iy(t,e){let r=DC(e),n=MC("sha1").update(`${t}:${e}`).digest("hex").slice(0,4);return`s-${r}-${n}`}function DC(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"step"}var oy=w(()=>{"use strict";Wn()});function FC(t,e){let r=PC[t]??[],n={},s={};for(let[i,o]of Object.entries(e))r.includes(i)?s[i]=o:n[i]=o;return{params:n,members:s}}function cy(t){let e=[],r=(k,I)=>{throw new qn([{line:k,message:I}])},n=t.split(`
2112
2112
  `),s=[];for(let k=0;k<n.length;k+=1){let C=qC(n[k]).trim();C.length>0&&s.push({n:k+1,text:C})}s.length===0&&r(1,"empty composition: expected a `workflow <name> v<version>` header");let i=/^workflow\s+(\S+)\s+v(\d+)$/.exec(s[0].text)??r(s[0].n,`expected header \`workflow <name> v<version>\`, got: ${s[0].text}`),o=i[1],a=Number.parseInt(i[2],10),l=new Map,d=[],c=[],u=[],m,f={},p=new Map,h=new Map,_=new Map,g=(k,I,C,W,U,j)=>{l.has(k)&&r(W,`duplicate step/terminal id: ${k}`),/^[A-Za-z][\w-]*$/.test(k)||r(W,`invalid id (must start with a letter): ${k}`),l.set(k,{declId:k,type:I,params:C,line:W,isTerminal:U,...j?{members:j}:{}}),c.push(k)},y=k=>{let I=[],C=k+1;for(;C<s.length;C+=1){let W=/^([A-Za-z][\w-]*|default)\s*->\s*([A-Za-z][\w-]*)$/.exec(s[C].text);if(W===null)break;I.push({label:W[1],dst:W[2]})}return{branches:I,nextIdx:C-1}};for(let k=1;k<s.length;k+=1){let{n:I,text:C}=s[k],W=C.split(/\s+/,1)[0];if(/^meta\s*\(/.test(C)){k!==1&&r(I,"`meta(...)` must be the preamble \u2014 the FIRST line after the `workflow` header (at most one, before any construct)");let U=/^meta\s*\((.*)\)\s*$/.exec(C)??r(I,`malformed \`meta\` (expected \`meta({ "requires"?:\u2026, "default_task_timeout_ms"?:\u2026, "errors"?:\u2026, "concurrency_key"?:\u2026, "concurrent_limit"?:\u2026 })\`): ${C}`),j=Lr(U[1],I,r);for(let te of Object.keys(j))ly.has(te)||r(I,`unknown \`meta\` key \`${te}\` \u2014 only workflow-level runtime metadata is allowed: ${[...ly].join(", ")} (no grammar inflation; bounded)`);f=j;continue}if(W==="step"){let U=/^step\s+([A-Za-z][\w-]*)\s*=\s*([a-z][a-z0-9-]*)\s*\((.*)\)\s*$/.exec(C)??r(I,`malformed \`step\` (expected \`step <id> = <archetype>(k=v, ...)\`): ${C}`),j=U[1],te=U[2],Te=U[3],ce=ay[te];ce===void 0&&r(I,`unknown step type: ${te} (supported \`step\` archetypes: ${Object.keys(ay).join(", ")}; choice/terminal/loop/foreach/call/decide have their own constructs)`);let{params:Ae,members:Yt}=FC(ce,Lr(Te,I,r));g(j,ce,Ae,I,!1,Object.keys(Yt).length>0?Yt:void 0);continue}if(W==="trigger"){let U=/^trigger\s+([A-Za-z][\w-]*)\s*=\s*([a-z][a-z0-9-]*)\s*\((.*)\)\s*$/.exec(C)??r(I,`malformed \`trigger\` (expected \`trigger <id> = <trigger-type>({ ...json... })\`): ${C}`),j=U[1],te=U[2],Te=U[3],ce=dy[te];ce===void 0&&r(I,`unknown trigger type: ${te} (registered trigger archetypes: ${Object.keys(dy).join(", ")})`),p.has(j)&&r(I,`duplicate trigger id: ${j}`),p.set(j,{id:j,type:ce,parameters:Lr(Te,I,r)});continue}if(W==="mcp"||W==="skill"){let U=new RegExp(`^${W}\\s+([A-Za-z][\\w-]*)\\s*=\\s*(.+)$`).exec(C)??r(I,`malformed \`${W}\` decl (expected \`${W} <name> = {json} | ${W} <name> = "<file|url>"\`): ${C}`),j=U[1],te=U[2].trim(),Te=W==="mcp"?h:_;Te.has(j)&&r(I,`duplicate ${W} declaration: ${j}`);let ce;if(te.startsWith("{")){let Ae=Lr(te,I,r);W==="mcp"?ce={...Ae,name:j}:((typeof Ae.content!="string"||Ae.content.length===0)&&r(I,`\`skill ${j}\`: inline form requires a non-empty string \`content\` (a SKILL.md body)`),ce={name:j,content:Ae.content})}else{let Ae=uy(te);(typeof Ae!="string"||Ae.length===0)&&r(I,`\`${W} ${j}\`: string form must be a non-empty file path or http(s) URL`),ce=Ae}Te.set(j,ce);continue}if(W==="terminal"){let U=/^terminal\s+([A-Za-z][\w-]*)\s*=\s*([A-Za-z][\w-]*)(?:\s+(success|failure|neutral))?\s*$/.exec(C)??r(I,`malformed \`terminal\` (expected \`terminal <id> = <name> [success|failure|neutral]\`): ${C}`);g(U[1],"lmctl/terminal",{name:U[2],kind:U[3]??"neutral"},I,!0);continue}if(W==="seq"){let j=C.slice(3).trim().split(/\s*(->|-[a-z0-9_]+->)\s*/).map(te=>te.trim()).filter(te=>te.length>0);(j.length<3||j.length%2===0)&&r(I,`malformed \`seq\` (expected \`<id> -> <id> [ -> <id> ... ]\`, optional \`-<port>->\`): ${C}`);for(let te=0;te+2<j.length+1&&!(te+2>j.length-1);te+=2){let Te=j[te],ce=j[te+1],Ae=j[te+2],Yt=ce==="->"?"main":ce.slice(1,-2);d.push({srcDeclId:Te,port:Yt,dstDeclId:Ae,line:I})}continue}if(W==="choice"){let j=(/^choice\s+([A-Za-z][\w-]*)\s*:$/.exec(C)??r(I,`malformed \`choice\` (expected \`choice <id>:\` then \`when <predicate> -<port>-> <id>\` lines): ${C}`))[1],te=[],Te,ce=k+1;for(;ce<s.length;ce+=1){let Ae=s[ce].text,Yt=/^when\s+(.+)\s+-([a-z0-9_]+)->\s+([A-Za-z][\w-]*)$/.exec(Ae);if(Yt!==null){Te!==void 0&&r(s[ce].n,`\`choice ${j}\`: a \`when\` branch may not follow \`default\` (branches are ordered, default is the fallback)`);let _s=Yt[2];te.push({when:Yt[1].trim(),next:`@terminal:${_s}`}),d.push({srcDeclId:j,port:_s,dstDeclId:Yt[3],line:s[ce].n});continue}let Pl=/^default\s+-([a-z0-9_]+)->\s+([A-Za-z][\w-]*)$/.exec(Ae);if(Pl!==null){Te!==void 0&&r(s[ce].n,`\`choice ${j}\` has more than one \`default\``);let _s=Pl[1];Te=`@terminal:${_s}`,d.push({srcDeclId:j,port:_s,dstDeclId:Pl[2],line:s[ce].n});continue}break}te.length===0&&r(I,`\`choice ${j}\` has no \`when\` branches (need \u22651 \`when <jexl-predicate> -<port>-> <id>\`)`),g(j,"lmctl/choice",{branches:te,...Te!==void 0?{default_next:Te}:{}},I,!1),k=ce-1;continue}if(W==="loop"){let U=/^loop\s+([A-Za-z][\w-]*)\s*=\s*loop\s*\((.*)\)\s*$/.exec(C)??r(I,`malformed \`loop\` (expected \`loop <id> = loop(k=v, ...)\`): ${C}`);g(U[1],"lmctl/loop",Lr(U[2],I,r),I,!1);continue}if(W==="foreach"){let U=/^foreach\s+([A-Za-z][\w-]*)\s*=\s*foreach\s*\((.*)\)\s*$/.exec(C)??r(I,`malformed \`foreach\` (expected \`foreach <id> = foreach(items=<expr>, ...)\`): ${C}`),j=Lr(U[2],I,r);"mode"in j&&r(I,"foreach is SEQUENTIAL-ONLY: `mode` is not permitted (single-thread; durable-memory/composition-language-design.md \xA7Execution model)"),g(U[1],"lmctl/foreach",j,I,!1);continue}if(W==="call"){let U=/^call\s+([A-Za-z][\w-]*)\s*=\s*call\s*\((.*)\)\s*$/.exec(C)??r(I,`malformed \`call\` (expected \`call <id> = call(workflow=<name>, ...)\`): ${C}`),j=U[1],te=Lr(U[2],I,r),Te=te.workflow;(typeof Te!="string"||Te.length===0)&&r(I,`\`call ${j}\` requires a \`workflow=<name>\` argument`);let{workflow:ce,...Ae}=te;g(j,"lmctl/subflow",{workflow_name:Te,...Ae},I,!1),u.push({declId:j,target:Te,line:I});continue}if(W==="decide"){let U=/^decide\s+([A-Za-z][\w-]*)\s+by\s+agent\s*\((.*)\)\s*:$/.exec(C)??r(I,`malformed \`decide\` (expected \`decide <id> by agent(k=v, ...):\`): ${C}`),j=U[1],te=Lr(U[2],I,r),{branches:Te,nextIdx:ce}=y(k);Te.length===0&&r(I,`\`decide ${j}\` has no outcomes (need at least one \`<outcome> -> <id>\`)`),g(j,"lmctl/interactive",{termination:{operator_signal:!0}},I,!1,{agent:te});for(let Ae of Te)d.push({srcDeclId:j,port:Ae.label,dstDeclId:Ae.dst,line:I});k=ce;continue}if(W==="entry"){let U=/^entry\s+([A-Za-z][\w-]*)$/.exec(C)??r(I,`malformed \`entry\` (expected \`entry <id>\`): ${C}`);m!==void 0&&r(I,`duplicate \`entry\` (already set to ${m})`),m=U[1];continue}r(I,`unknown statement \`${W}\` (grammar: workflow / meta / trigger / mcp / skill / step / terminal / seq / choice / loop / foreach / call / decide / entry)`)}c.length===0&&r(s[0].n,"composition declares no steps"),m===void 0&&(m=c[0]),l.has(m)||r(s[0].n,`entry references undeclared step: ${m}`);let E=k=>{if(Array.isArray(k)){for(let C of k)E(C);return}if(typeof k!="object"||k===null)return;let I=k;if(typeof I.alias=="string")for(let[C,W]of[["mcp",h],["skills",_]]){let U=I[C];Array.isArray(U)&&(I[C]=U.map(j=>typeof j=="string"&&W.has(j)?structuredClone(W.get(j)):j))}for(let C of Object.values(I))E(C)};for(let k of c){let I=l.get(k);I.members!==void 0&&E(I.members)}let v=k=>iy(o,k),S=c.map(k=>{let I=l.get(k);return{id:v(k),name:k,type:I.type,typeVersion:1,parameters:I.params,...I.members?{members:I.members}:{}}}),x={};for(let k of d){l.has(k.srcDeclId)||r(k.line,`edge source references undeclared step: ${k.srcDeclId}`),l.has(k.dstDeclId)||r(k.line,`dangling edge target: ${k.dstDeclId} is not declared`),l.get(k.srcDeclId).isTerminal&&r(k.line,`terminal \`${k.srcDeclId}\` cannot have an outgoing edge`);let I=v(k.srcDeclId);x[I]??={},x[I][k.port]!==void 0&&r(k.line,`duplicate edge port \`${k.port}\` on step \`${k.srcDeclId}\``),x[I][k.port]=[[{step_id:v(k.dstDeclId),type:"main",index:0}]]}for(let k of c){let I=l.get(k);UC.has(I.type)||r(I.line,`unknown archetype \`${I.type}\` for step \`${k}\` \u2014 not a registered builtin (src/engine/archetypes/index.ts:17-32)`)}for(let k of u)k.target===o&&r(k.line,`subflow cycle: \`call ${k.declId}\` invokes this workflow (\`${o}\`) \u2014 direct recursion is not allowed (cross-workflow A\u2192B\u2192A cycle detection is deferred to the M3 compile.ts seam)`);let H=new Map;for(let k of d){let I=H.get(k.srcDeclId);I===void 0?H.set(k.srcDeclId,[k.dstDeclId]):I.push(k.dstDeclId)}for(let k of c){let I=l.get(k);if(I.type!=="lmctl/loop")continue;let C=I.params.body;if(typeof C=="string"&&l.has(C)){let W=H.get(k);W===void 0?H.set(k,[C]):W.push(C)}}let F=new Set([m]),$=[m];for(;$.length>0;){let k=$.shift();for(let I of H.get(k)??[])F.has(I)||(F.add(I),$.push(I))}for(let k of c)F.has(k)||r(l.get(k).line,`step \`${k}\` is unreachable from entry \`${m}\``);let R=new Map;for(let k of d){let I=R.get(k.srcDeclId);I===void 0&&(I=new Set,R.set(k.srcDeclId,I)),I.add(k.port)}let A=new Set(["approve","request_changes","fail_pre_check","max_loops_exceeded"]);for(let k of c){let I=l.get(k);if(I.isTerminal)continue;let C=R.get(k)??new Set;if(I.type==="lmctl/review"){let U=[...C].some(j=>!A.has(j));!C.has("approve")&&!U&&r(I.line,`uncovered outcome: review step \`${k}\` wires neither \`approve\` nor any stance outcome \u2014 route \`approve\` (\`seq ${k} -approve-> <target>\`) or a stance port (run.ts:423-438 synthesizes outcomes_from_stance; review.ts:88-102 routes a stance before default approve)`);continue}let W=WC[I.type];if(W!==void 0)for(let U of W)C.has(U)||r(I.line,`uncovered outcome: required outcome \`${U}\` of step \`${k}\` (\`${I.type}\`) has no connection \u2014 route it (\`seq ${k} -${U}-> <target|terminal>\`)`);else C.size===0&&r(I.line,`uncovered outcome: non-terminal step \`${k}\` (\`${I.type}\`) has no outgoing connection \u2014 wire it with \`seq\` or route to a \`terminal\``)}for(let k of c){let I=l.get(k),C=jC[I.type];if(C===void 0)continue;let W={...I.params,...I.members??{},type:C.v2type,state_name:k,...Object.keys(C.outcomes).length>0?{outcomes:C.outcomes}:{}},U=C.schema.safeParse(W);if(!U.success){let j=U.error.issues[0],te=j.path.length===0?"$":j.path.map(String).join(".");r(I.line,`step \`${k}\` (\`${I.type}\`) has invalid params for archetype \`${C.v2type}\` at \`${te}\`: ${j.message} \u2014 this would crash the engine (it derefs this field unguarded). Provide it via the structured form: \`step ${k} = ${I.type.replace("lmctl/","")}({ ... })\``)}}let Y={schema_version:"lmctl/v3",definition_schema_version:3,name:o,version:a,...f,...p.size>0?{triggers:[...p.values()]}:{},steps:S,connections:x,entry_step_id:v(m)},B=Ut.safeParse(Y);if(!B.success)throw new qn(B.error.issues.map(k=>({line:s[0].n,message:`emitted V3 invalid at ${k.path.length===0?"$":k.path.map(String).join(".")}: ${k.message}`})));return B.data}function qC(t){let e=null;for(let r=0;r<t.length;r+=1){let n=t[r];if(e!==null){if(n==="\\"){r+=1;continue}n===e&&(e=null);continue}if(n==='"'||n==="'"){e=n;continue}if(n==="#")return t.slice(0,r)}return t}function Lr(t,e,r){let n=t.trim();if(n.length===0)return{};if(n.startsWith("{")){let i;try{i=JSON.parse(n)}catch(o){r(e,`malformed structured args (expected a single-line JSON object): ${o.message}`)}return(i===null||typeof i!="object"||Array.isArray(i))&&r(e,"structured args must be a JSON object"),i}let s={};for(let i of BC(n)){let o=i.indexOf("=");o===-1&&r(e,`malformed arg (expected k=v): ${i}`);let a=i.slice(0,o).trim(),l=i.slice(o+1).trim();/^[A-Za-z_][\w-]*$/.test(a)||r(e,`invalid arg name: ${a}`),s[a]=uy(l)}return s}function BC(t){return t.split(",").map(e=>e.trim()).filter(e=>e.length>0)}function uy(t){return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t==="true"?!0:t==="false"?!1:/^-?\d+$/.test(t)?Number.parseInt(t,10):/^-?\d*\.\d+$/.test(t)?Number.parseFloat(t):t}var jC,PC,ay,qn,UC,WC,ly,dy,my=w(()=>{"use strict";Wn();oy();Un();jC={"lmctl/review":{v2type:"Review",outcomes:{approve:"_"},schema:Wo},"lmctl/consolidate":{v2type:"Consolidate",outcomes:{ok:"_"},schema:qo},"lmctl/interactive":{v2type:"Interactive",outcomes:{done:"_"},schema:Bo},"lmctl/loop":{v2type:"Loop",outcomes:{ok:"_"},schema:Ho},"lmctl/shell-step":{v2type:"ShellStep",outcomes:{},schema:Xo}},PC={"lmctl/review":["coder","reviewers"],"lmctl/consolidate":["researchers","consolidator"],"lmctl/interactive":["agent"]};ay={review:"lmctl/review",consolidate:"lmctl/consolidate",interactive:"lmctl/interactive","shell-step":"lmctl/shell-step","assert-repo-clean":"lmctl/assert-repo-clean","render-docx":"lmctl/render-docx","render-xlsx":"lmctl/render-xlsx"},qn=class extends Error{issues;constructor(e){super(`composition DSL compile failed:
2113
2113
  ${e.map(r=>` line ${r.line}: ${r.message}`).join(`
2114
2114
  `)}`),this.issues=e,this.name="DslCompileError"}},UC=new Set(["lmctl/assert-repo-clean","lmctl/review","lmctl/consolidate","lmctl/interactive","lmctl/loop","lmctl/render-docx","lmctl/render-xlsx","lmctl/shell-step","lmctl/choice","lmctl/foreach","lmctl/subflow","lmctl/terminal","lmctl/trigger-schedule","lmctl/trigger-gh-issue"]),WC={"lmctl/consolidate":["ok"],"lmctl/interactive":["done"],"lmctl/loop":["ok"],"lmctl/foreach":["all_ok"]},ly=new Set(["requires","default_task_timeout_ms","errors","concurrency_key","concurrent_limit"]),dy={"trigger-schedule":"lmctl/trigger-schedule","trigger-gh-issue":"lmctl/trigger-gh-issue"}});import{readFileSync as HC}from"node:fs";function XC(){let t=process.env.LMCTL_DSL;return t===void 0?!0:!["0","false","off"].includes(t.trim().toLowerCase())}function JC(t){for(let e of t.split(`
2115
2115
  `)){let r=e.replace(/#.*/,"").trim();if(r.length!==0)return/^workflow\s+\S+\s+v\d+\s*$/.test(r)}return!1}function Tt(t){if(typeof t=="string"&&XC()&&JC(t)){let r;try{r=cy(t)}catch(s){throw s instanceof qn?new or(s.issues.map(i=>({path:`dsl:${i.line}`,message:i.message}))):s}let n=Ut.safeParse(r);if(!n.success)throw new or(n.error.issues.map(s=>({path:s.path.length===0?"$":s.path.map(String).join("."),message:s.message})));return n.data}let e=Ko(KC(t));if(VC(e)&&e.definition_schema_version===3){let r=Ut.safeParse(e);if(!r.success)throw new or(r.error.issues.map(n=>({path:n.path.length===0?"$":n.path.map(String).join("."),message:n.message})));return r.data}return GC(e)}function GC(t){let e=Jo.safeParse(t);if(!e.success)throw new or(e.error.issues.map(s=>({path:s.path.length===0?"$":s.path.map(String).join("."),message:s.message})));let r=e.data,n=new Set(["Task","Pause","Parallel","LoopUntil","Pass","Fail","Succeed"]);for(let[s,i]of Object.entries(r.states))if(n.has(i.type))throw new or([{path:`states.${s}`,message:`v2 workflows (primitive_version: 2) may not use v1 primitive type: ${i.type}`}]);try{return ry(r)}catch(s){throw s instanceof ir?new zc(s):s}}function KC(t){if(typeof t!="string")return t;let e=t.trim();return t.includes(`
2116
- `)||e.startsWith("{")||e.startsWith("[")?fy(t):e.endsWith(".json")?fy(HC(e,"utf8")):t}function fy(t){return JSON.parse(t)}function VC(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var zc,or,Gs=w(()=>{"use strict";Un();sy();Yc();Wn();my();zc=class extends Error{causeError;constructor(e){super("compiler emitted invalid atomic workflow"),this.causeError=e,this.name="CompilerInvariantError"}},or=class extends Error{issues;constructor(e){super("compound workflow validation failed"),this.issues=e,this.name="CompilerValidationError"}}});function Vo(t){let e=t.workflow?.concurrent_limit??1,r=t.job.concurrency_key_resolved??t.workflow?.concurrency_key??null;return r===null||r.trim().length===0?{concurrency_key:null,concurrent_limit:e}:{concurrency_key:YC(r,{job:{id:t.job.id,kind:t.job.source,source:t.job.source,source_ref:t.job.source_ref,payload:ZC(t.job.payload)},project:t.project===null?null:{id:t.project.id,name:t.project.name}}),concurrent_limit:e}}function YC(t,e){return t.replace(/\{\{\s*([^}]+?)\s*\}\}/g,(r,n)=>{let s=zC(e,n.trim());return s==null?"":typeof s=="string"?s:typeof s=="number"||typeof s=="boolean"?String(s):JSON.stringify(s)})}function zC(t,e){let r=t;for(let n of e.split(".")){if(typeof r!="object"||r===null||!Object.prototype.hasOwnProperty.call(r,n))return;r=r[n]}return r}function ZC(t){if(t===null||t.trim().length===0)return null;try{return JSON.parse(t)}catch{return t}}var Zc=w(()=>{"use strict"});var py={};he(py,{enqueueFromAgentOutput:()=>e$,enqueueFromGitHubIssue:()=>Qc,enqueueManual:()=>QC,enqueueScheduled:()=>t$});function Qc(t,e){return zo(t,{project_id:e.project_id,workflow_id_override:e.workflow_id_override??null,source:"gh_issue",source_ref:e.issue_url,dedupe_key:e.dedupe_key??e.issue_url,payload:Yo(e.payload),concurrency_key:e.concurrency_key,priority:e.priority})}function QC(t,e){return zo(t,{project_id:e.project_id,workflow_id_override:null,source:"manual",source_ref:e.source_ref??null,dedupe_key:e.source_ref??null,payload:Yo(e.payload),concurrency_key:e.concurrency_key})}function e$(t,e){let r=e.sequence===void 0?`run:${e.parent_run_id}`:`run:${e.parent_run_id}:${e.sequence}`;return zo(t,{project_id:e.project_id,workflow_id_override:null,source:"agent_output",source_ref:r,dedupe_key:r,available_at:e.available_at,payload:Yo(e.payload),concurrency_key:e.concurrency_key})}function t$(t,e){return zo(t,{project_id:e.project_id,workflow_id_override:null,source:"schedule",source_ref:e.source_ref,dedupe_key:e.source_ref,available_at:e.available_at,payload:Yo(e.payload),concurrency_key:e.concurrency_key})}function Yo(t){return t==null?null:typeof t=="string"?t:JSON.stringify(t)}function zo(t,e){let r=e.concurrency_key;if(r!==void 0)return t.enqueueJob({...e,concurrency_key:r});let n=t.getProject(e.project_id),s=n===null?null:e.workflow_id_override!==void 0&&e.workflow_id_override!==null?t.getWorkflow(e.workflow_id_override):t.getWorkflowByName(n.workflow_name);if(n===null||s===null)return t.enqueueJob(e);try{let i=Tt(s.definition),o={id:-1,project_id:e.project_id,workflow_id_override:e.workflow_id_override??null,source:e.source,source_ref:e.source_ref??null,payload:e.payload??null,status:"queued",priority:e.priority??0,available_at:e.available_at??new Date().toISOString(),locked_by:null,locked_until:null,attempt_count:0,last_error:null,dedupe_key:e.dedupe_key??null,concurrency_key_resolved:null,enqueued_at:new Date().toISOString(),started_at:null,ended_at:null,run_id:null},a=Vo({workflow:i,job:o,project:n});return t.enqueueJob({...e,concurrency_key:a.concurrency_key})}catch{return t.enqueueJob(e)}}var eu=w(()=>{"use strict";Gs();Zc()});async function hy(t){let e=t.dal.listProjectWorkflows(t.project.id,{enabled_only:!0});if(e.length===0)return _y(t.dal,t.project.id,t.issue,t.issue.url,null,t.issue,void 0);let r={event:{kind:"github_issue",issue:t.issue}},n=[],s=0;for(let i of e){if(!await r$(i.condition,r))continue;let o=`${t.issue.url}#workflow:${i.workflow_id}`,a={issue:t.issue,...n$(i.parameters_override)},l=_y(t.dal,t.project.id,t.issue,o,i.workflow_id,a,-i.priority);n.push(...l.jobs),s+=l.new_jobs}return{jobs:n,new_jobs:s}}function _y(t,e,r,n,s,i,o){let a=t.findJobBySourceAndDedupe("gh_issue",n);return{jobs:[Qc(t,{project_id:e,issue_url:r.url,payload:i,workflow_id_override:s,dedupe_key:n,priority:o})],new_jobs:a===null?1:0}}async function r$(t,e){if(t===null||t.trim().length===0)return!0;try{return await en(t,e)===!0}catch{return!1}}function n$(t){if(t===null||t.trim().length===0)return{};try{let e=JSON.parse(t);if(e!==null&&typeof e=="object"&&!Array.isArray(e))return e}catch{return{}}return{}}var gy=w(()=>{"use strict";Xs();eu()});import{spawnSync as s$}from"node:child_process";async function i$(t){let e=t.labels??["bug"],r=t.state??"open",n=["issue","list","--repo",t.project.name,"--state",r,"--json","number,title,url,body,state,labels","--limit","100"];e.length>0&&n.splice(4,0,"--label",e.join(","));let s=s$(t.binary??"gh",n,{encoding:"utf8",timeout:t.timeoutMs??6e4,maxBuffer:10*1024*1024});if(s.error!==void 0)throw s.error;if(s.status!==0)throw new Error(`gh issue list failed: ${s.stderr??""}`.trim());let i;try{i=JSON.parse(s.stdout??"[]")}catch{throw new Error("gh issue list returned malformed JSON")}if(!a$(i))throw new Error("gh issue list returned unexpected JSON shape");let o=0;for(let a of i){let l=await hy({dal:t.dal,project:t.project,issue:l$(a)});o+=l.new_jobs}return{scanned:i.length,new_jobs:o}}async function Zo(t){if(process.env.LMCTL_INTAKE_DISABLED==="1")return[];let e=[];for(let r of t.listProjectsWithIntakeEnabled()){let n=o$(r.intake_config);try{let s=await i$({dal:t,project:r,labels:n.labels,state:n.state});e.push({project_id:r.id,project_name:r.name,...s})}catch(s){let i=s instanceof Error?s.message:String(s);e.push({project_id:r.id,project_name:r.name,scanned:0,new_jobs:0,error:i});try{t.raiseAttention({kind:"daemon_intake_scan_failed",severity:"warn",project_id:r.id,payload:JSON.stringify({project_id:r.id,project_name:r.name,error:i})})}catch{}}}return e}function o$(t){if(t===null)return{};try{let e=JSON.parse(t);if(!tu(e))return{};let r=e.state==="open"||e.state==="closed"||e.state==="all"?e.state:void 0,n=Array.isArray(e.labels)?e.labels.filter(s=>typeof s=="string"&&s.length>0):void 0;return{scan_github_issues:e.scan_github_issues===!0,labels:n,state:r}}catch{return{}}}function a$(t){return Array.isArray(t)&&t.every(e=>{if(!tu(e))return!1;let r=e.labels;return typeof e.number=="number"&&typeof e.title=="string"&&typeof e.url=="string"&&(typeof e.body=="string"||e.body===null||e.body===void 0)&&(e.state===void 0||typeof e.state=="string")&&(r===void 0||Array.isArray(r)&&r.every(n=>typeof n=="string"?!0:tu(n)&&typeof n.name=="string"))})}function l$(t){let e=t.labels?.map(s=>typeof s=="string"?s:s.name),{labels:r,...n}=t;return e===void 0?n:{...n,labels:e}}function tu(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ru=w(()=>{"use strict";gy()});function Ey(t){return async e=>c$(t.app,e,t.log!==void 0?{log:t.log}:{})}async function c$(t,e,r={}){let n=u$(e.path),s={"content-type":"application/json",...e.headers??{},[Qo]:nu},i={method:e.method,headers:s};e.body!==void 0&&e.method!=="GET"&&e.method!=="DELETE"&&(i.body=typeof e.body=="string"?e.body:JSON.stringify(e.body));let o=new Request(n,i),a=Date.now();try{let l=await t.fetch(o),d=await m$(l);if(r.log!==void 0){let c=Date.now()-a;r.log(`[mailbox-dispatch] ${e.method} ${yy(e.path)} \u2192 ${d.status} (${c}ms)`)}return d}catch(l){if(r.log!==void 0){let d=Date.now()-a;r.log(`[mailbox-dispatch] ${e.method} ${yy(e.path)} \u2192 ERR (${d}ms)`)}throw l}}function yy(t){let e=t.startsWith("/")?t:`/${t}`,r=e.search(/[?#]/);return r===-1?e:e.slice(0,r)}function u$(t){let e=t.startsWith("/")?t:`/${t}`;return`${d$}${e}`}async function m$(t){let e=await t.text(),r;if(e==="")r=void 0;else try{r=JSON.parse(e)}catch{r=e}let n={};t.headers.forEach((i,o)=>{o.toLowerCase()!==Qo&&(n[o]=i)});let s={status:t.status};return Object.keys(n).length>0&&(s.headers=n),r!==void 0&&(s.body=r),s}var Qo,nu,d$,su=w(()=>{"use strict";Qo="x-mailbox-channel",nu="1",d$="http://mailbox.local"});import{createHash as wy,createHmac as f$,timingSafeEqual as p$}from"node:crypto";function Ty(t={}){return async(e,r)=>{if(t.disabled===!0){await r();return}let n=vy();if(n===null||E$(e.req.path)){await r();return}if(e.req.path.startsWith("/mailbox/")&&e.req.header(Qo)===nu){await r();return}let s=e.req.query("token");if(s!==void 0&&ea(s,n)){ou(e,n),await r();return}if(y$(e,n)){await r();return}return e.req.path.startsWith("/api/")||e.req.path.startsWith("/mailbox/")?e.json({error:"API requires auth; set LMCTL_API_TOKEN"},401):e.redirect("/login",302)}}function vy(){let t=process.env.LMCTL_API_TOKEN;return t&&t.length>0?t:null}function by(t){let e=vy();return e!==null&&ea(t,e)}function ou(t,e,r=new Date){t.header("Set-Cookie",`${iu}=${h$(e,r)}; Path=/; HttpOnly; SameSite=Lax`)}function Sy(t){t.header("Set-Cookie",`${iu}=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0`)}function h$(t,e=new Date){let n=`auth=ok|${new Date(e.getTime()+_$*24*60*60*1e3).toISOString()}`;return Buffer.from(`${n}|${ky(t,n)}`,"utf8").toString("base64url")}function g$(t,e,r=new Date){let n;try{n=Buffer.from(t,"base64url").toString("utf8")}catch{return!1}let s=n.split("|");if(s.length!==3||s[0]!=="auth=ok")return!1;let i=new Date(s[1]);return Number.isNaN(i.getTime())||i.getTime()<=r.getTime()?!1:ea(s[2],ky(e,`${s[0]}|${s[1]}`))}function ea(t,e){return p$(wy("sha256").update(t).digest(),wy("sha256").update(e).digest())}function y$(t,e){let r=/^Bearer\s+(.+)$/i.exec(t.req.header("authorization")??"")?.[1];if(r!==void 0&&ea(r,e))return!0;let n=w$(t.req.header("cookie")??"")[iu];return n!==void 0&&g$(n,e)}function E$(t){return t==="/login"||t==="/logout"}function w$(t){let e={};for(let r of t.split(";")){let[n,...s]=r.trim().split("=");n===void 0||n.length===0||s.length===0||(e[n]=s.join("="))}return e}function ky(t,e){return f$("sha256",t).update(e).digest("hex")}var iu,_$,Iy=w(()=>{"use strict";su();iu="lmctl_next_session",_$=30});import{existsSync as Bn,mkdirSync as T$,readdirSync as v$,readFileSync as ta,unlinkSync as b$,writeFileSync as du}from"node:fs";import{join as tn}from"node:path";function ut(t){if(!S$.test(t))throw new Error(`invalid memory name "${t}": only alphanumeric characters, underscores, and hyphens are allowed`)}function Ay(t,e){let r=e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);if(r===null)return null;let n=r[1],s=r[2].trimStart(),i=n.match(/^type:\s*(.+)$/m),o=n.match(/^description:\s*(.+)$/m),a=i?.[1]?.trim()??"";return A$(a)?{name:t,type:a,description:o?.[1]?.trim()??null,body:s,created_at:Ny,updated_at:Ny}:null}function k$(t,e,r,n){let s=r!==null?`
2116
+ `)||e.startsWith("{")||e.startsWith("[")?fy(t):e.endsWith(".json")?fy(HC(e,"utf8")):t}function fy(t){return JSON.parse(t)}function VC(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}var zc,or,Gs=w(()=>{"use strict";Un();sy();Yc();Wn();my();zc=class extends Error{causeError;constructor(e){super("compiler emitted invalid atomic workflow"),this.causeError=e,this.name="CompilerInvariantError"}},or=class extends Error{issues;constructor(e){super("compound workflow validation failed"),this.issues=e,this.name="CompilerValidationError"}}});function Vo(t){let e=t.workflow?.concurrent_limit??1,r=t.job.concurrency_key_resolved??t.workflow?.concurrency_key??null;return r===null||r.trim().length===0?{concurrency_key:null,concurrent_limit:e}:{concurrency_key:YC(r,{job:{id:t.job.id,kind:t.job.source,source:t.job.source,source_ref:t.job.source_ref,payload:ZC(t.job.payload)},project:t.project===null?null:{id:t.project.id,name:t.project.name}}),concurrent_limit:e}}function YC(t,e){return t.replace(/\{\{\s*([^}]+?)\s*\}\}/g,(r,n)=>{let s=zC(e,n.trim());return s==null?"":typeof s=="string"?s:typeof s=="number"||typeof s=="boolean"?String(s):JSON.stringify(s)})}function zC(t,e){let r=t;for(let n of e.split(".")){if(typeof r!="object"||r===null||!Object.prototype.hasOwnProperty.call(r,n))return;r=r[n]}return r}function ZC(t){if(t===null||t.trim().length===0)return null;try{return JSON.parse(t)}catch{return t}}var Zc=w(()=>{"use strict"});var py={};he(py,{enqueueFromAgentOutput:()=>e$,enqueueFromGitHubIssue:()=>Qc,enqueueManual:()=>QC,enqueueScheduled:()=>t$});function Qc(t,e){return zo(t,{project_id:e.project_id,workflow_id_override:e.workflow_id_override??null,source:"gh_issue",source_ref:e.issue_url,dedupe_key:e.dedupe_key??e.issue_url,payload:Yo(e.payload),concurrency_key:e.concurrency_key,priority:e.priority})}function QC(t,e){return zo(t,{project_id:e.project_id,workflow_id_override:null,source:"manual",source_ref:e.source_ref??null,dedupe_key:e.source_ref??null,payload:Yo(e.payload),concurrency_key:e.concurrency_key})}function e$(t,e){let r=e.sequence===void 0?`run:${e.parent_run_id}`:`run:${e.parent_run_id}:${e.sequence}`;return zo(t,{project_id:e.project_id,workflow_id_override:null,source:"agent_output",source_ref:r,dedupe_key:r,available_at:e.available_at,payload:Yo(e.payload),concurrency_key:e.concurrency_key})}function t$(t,e){return zo(t,{project_id:e.project_id,workflow_id_override:null,source:"schedule",source_ref:e.source_ref,dedupe_key:e.source_ref,available_at:e.available_at,payload:Yo(e.payload),concurrency_key:e.concurrency_key})}function Yo(t){return t==null?null:typeof t=="string"?t:JSON.stringify(t)}function zo(t,e){let r=e.concurrency_key;if(r!==void 0)return t.enqueueJob({...e,concurrency_key:r});let n=t.getProject(e.project_id),s=n===null?null:e.workflow_id_override!==void 0&&e.workflow_id_override!==null?t.getWorkflow(e.workflow_id_override):t.getWorkflowByName(n.workflow_name);if(n===null||s===null)return t.enqueueJob(e);try{let i=Tt(s.definition),o={id:-1,project_id:e.project_id,workflow_id_override:e.workflow_id_override??null,source:e.source,source_ref:e.source_ref??null,payload:e.payload??null,status:"queued",priority:e.priority??0,available_at:e.available_at??new Date().toISOString(),locked_by:null,locked_until:null,attempt_count:0,last_error:null,dedupe_key:e.dedupe_key??null,concurrency_key_resolved:null,enqueued_at:new Date().toISOString(),started_at:null,ended_at:null,run_id:null},a=Vo({workflow:i,job:o,project:n});return t.enqueueJob({...e,concurrency_key:a.concurrency_key})}catch{return t.enqueueJob(e)}}var eu=w(()=>{"use strict";Gs();Zc()});async function hy(t){let e=t.dal.listProjectWorkflows(t.project.id,{enabled_only:!0});if(e.length===0)return _y(t.dal,t.project.id,t.issue,t.issue.url,null,t.issue,void 0);let r={event:{kind:"github_issue",issue:t.issue}},n=[],s=0;for(let i of e){if(!await r$(i.condition,r))continue;let o=`${t.issue.url}#workflow:${i.workflow_id}`,a={issue:t.issue,...n$(i.parameters_override)},l=_y(t.dal,t.project.id,t.issue,o,i.workflow_id,a,-i.priority);n.push(...l.jobs),s+=l.new_jobs}return{jobs:n,new_jobs:s}}function _y(t,e,r,n,s,i,o){let a=t.findJobBySourceAndDedupe("gh_issue",n);return{jobs:[Qc(t,{project_id:e,issue_url:r.url,payload:i,workflow_id_override:s,dedupe_key:n,priority:o})],new_jobs:a===null?1:0}}async function r$(t,e){if(t===null||t.trim().length===0)return!0;try{return await tn(t,e)===!0}catch{return!1}}function n$(t){if(t===null||t.trim().length===0)return{};try{let e=JSON.parse(t);if(e!==null&&typeof e=="object"&&!Array.isArray(e))return e}catch{return{}}return{}}var gy=w(()=>{"use strict";Xs();eu()});import{spawnSync as s$}from"node:child_process";async function i$(t){let e=t.labels??["bug"],r=t.state??"open",n=["issue","list","--repo",t.project.name,"--state",r,"--json","number,title,url,body,state,labels","--limit","100"];e.length>0&&n.splice(4,0,"--label",e.join(","));let s=s$(t.binary??"gh",n,{encoding:"utf8",timeout:t.timeoutMs??6e4,maxBuffer:10*1024*1024});if(s.error!==void 0)throw s.error;if(s.status!==0)throw new Error(`gh issue list failed: ${s.stderr??""}`.trim());let i;try{i=JSON.parse(s.stdout??"[]")}catch{throw new Error("gh issue list returned malformed JSON")}if(!a$(i))throw new Error("gh issue list returned unexpected JSON shape");let o=0;for(let a of i){let l=await hy({dal:t.dal,project:t.project,issue:l$(a)});o+=l.new_jobs}return{scanned:i.length,new_jobs:o}}async function Zo(t){if(process.env.LMCTL_INTAKE_DISABLED==="1")return[];let e=[];for(let r of t.listProjectsWithIntakeEnabled()){let n=o$(r.intake_config);try{let s=await i$({dal:t,project:r,labels:n.labels,state:n.state});e.push({project_id:r.id,project_name:r.name,...s})}catch(s){let i=s instanceof Error?s.message:String(s);e.push({project_id:r.id,project_name:r.name,scanned:0,new_jobs:0,error:i});try{t.raiseAttention({kind:"daemon_intake_scan_failed",severity:"warn",project_id:r.id,payload:JSON.stringify({project_id:r.id,project_name:r.name,error:i})})}catch{}}}return e}function o$(t){if(t===null)return{};try{let e=JSON.parse(t);if(!tu(e))return{};let r=e.state==="open"||e.state==="closed"||e.state==="all"?e.state:void 0,n=Array.isArray(e.labels)?e.labels.filter(s=>typeof s=="string"&&s.length>0):void 0;return{scan_github_issues:e.scan_github_issues===!0,labels:n,state:r}}catch{return{}}}function a$(t){return Array.isArray(t)&&t.every(e=>{if(!tu(e))return!1;let r=e.labels;return typeof e.number=="number"&&typeof e.title=="string"&&typeof e.url=="string"&&(typeof e.body=="string"||e.body===null||e.body===void 0)&&(e.state===void 0||typeof e.state=="string")&&(r===void 0||Array.isArray(r)&&r.every(n=>typeof n=="string"?!0:tu(n)&&typeof n.name=="string"))})}function l$(t){let e=t.labels?.map(s=>typeof s=="string"?s:s.name),{labels:r,...n}=t;return e===void 0?n:{...n,labels:e}}function tu(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var ru=w(()=>{"use strict";gy()});function Ey(t){return async e=>c$(t.app,e,t.log!==void 0?{log:t.log}:{})}async function c$(t,e,r={}){let n=u$(e.path),s={"content-type":"application/json",...e.headers??{},[Qo]:nu},i={method:e.method,headers:s};e.body!==void 0&&e.method!=="GET"&&e.method!=="DELETE"&&(i.body=typeof e.body=="string"?e.body:JSON.stringify(e.body));let o=new Request(n,i),a=Date.now();try{let l=await t.fetch(o),d=await m$(l);if(r.log!==void 0){let c=Date.now()-a;r.log(`[mailbox-dispatch] ${e.method} ${yy(e.path)} \u2192 ${d.status} (${c}ms)`)}return d}catch(l){if(r.log!==void 0){let d=Date.now()-a;r.log(`[mailbox-dispatch] ${e.method} ${yy(e.path)} \u2192 ERR (${d}ms)`)}throw l}}function yy(t){let e=t.startsWith("/")?t:`/${t}`,r=e.search(/[?#]/);return r===-1?e:e.slice(0,r)}function u$(t){let e=t.startsWith("/")?t:`/${t}`;return`${d$}${e}`}async function m$(t){let e=await t.text(),r;if(e==="")r=void 0;else try{r=JSON.parse(e)}catch{r=e}let n={};t.headers.forEach((i,o)=>{o.toLowerCase()!==Qo&&(n[o]=i)});let s={status:t.status};return Object.keys(n).length>0&&(s.headers=n),r!==void 0&&(s.body=r),s}var Qo,nu,d$,su=w(()=>{"use strict";Qo="x-mailbox-channel",nu="1",d$="http://mailbox.local"});import{createHash as wy,createHmac as f$,timingSafeEqual as p$}from"node:crypto";function Ty(t={}){return async(e,r)=>{if(t.disabled===!0){await r();return}let n=vy();if(n===null||E$(e.req.path)){await r();return}if(e.req.path.startsWith("/mailbox/")&&e.req.header(Qo)===nu){await r();return}let s=e.req.query("token");if(s!==void 0&&ea(s,n)){ou(e,n),await r();return}if(y$(e,n)){await r();return}return e.req.path.startsWith("/api/")||e.req.path.startsWith("/mailbox/")?e.json({error:"API requires auth; set LMCTL_API_TOKEN"},401):e.redirect("/login",302)}}function vy(){let t=process.env.LMCTL_API_TOKEN;return t&&t.length>0?t:null}function by(t){let e=vy();return e!==null&&ea(t,e)}function ou(t,e,r=new Date){t.header("Set-Cookie",`${iu}=${h$(e,r)}; Path=/; HttpOnly; SameSite=Lax`)}function Sy(t){t.header("Set-Cookie",`${iu}=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0`)}function h$(t,e=new Date){let n=`auth=ok|${new Date(e.getTime()+_$*24*60*60*1e3).toISOString()}`;return Buffer.from(`${n}|${ky(t,n)}`,"utf8").toString("base64url")}function g$(t,e,r=new Date){let n;try{n=Buffer.from(t,"base64url").toString("utf8")}catch{return!1}let s=n.split("|");if(s.length!==3||s[0]!=="auth=ok")return!1;let i=new Date(s[1]);return Number.isNaN(i.getTime())||i.getTime()<=r.getTime()?!1:ea(s[2],ky(e,`${s[0]}|${s[1]}`))}function ea(t,e){return p$(wy("sha256").update(t).digest(),wy("sha256").update(e).digest())}function y$(t,e){let r=/^Bearer\s+(.+)$/i.exec(t.req.header("authorization")??"")?.[1];if(r!==void 0&&ea(r,e))return!0;let n=w$(t.req.header("cookie")??"")[iu];return n!==void 0&&g$(n,e)}function E$(t){return t==="/login"||t==="/logout"}function w$(t){let e={};for(let r of t.split(";")){let[n,...s]=r.trim().split("=");n===void 0||n.length===0||s.length===0||(e[n]=s.join("="))}return e}function ky(t,e){return f$("sha256",t).update(e).digest("hex")}var iu,_$,Iy=w(()=>{"use strict";su();iu="lmctl_next_session",_$=30});import{existsSync as Bn,mkdirSync as T$,readdirSync as v$,readFileSync as ta,unlinkSync as b$,writeFileSync as du}from"node:fs";import{join as rn}from"node:path";function ut(t){if(!S$.test(t))throw new Error(`invalid memory name "${t}": only alphanumeric characters, underscores, and hyphens are allowed`)}function Ay(t,e){let r=e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);if(r===null)return null;let n=r[1],s=r[2].trimStart(),i=n.match(/^type:\s*(.+)$/m),o=n.match(/^description:\s*(.+)$/m),a=i?.[1]?.trim()??"";return A$(a)?{name:t,type:a,description:o?.[1]?.trim()??null,body:s,created_at:Ny,updated_at:Ny}:null}function k$(t,e,r,n){let s=r!==null?`
2117
2117
  description: ${r}`:"";return`---
2118
2118
  name: ${t}${s}
2119
2119
  type: ${e}
2120
2120
  ---
2121
- ${n}`}function I$(t,e,r,n){let s=tn(t,cu),i=`- [${e}.md](${e}.md)${n!==null?` \u2014 ${n}`:""} (${r})`,o=Bn(s)?ta(s,"utf8"):"",a=new RegExp(`^- \\[${xy(e)}\\.md\\].*$`,"m");a.test(o)?o=o.replace(a,i):o=o.length>0&&!o.endsWith(`
2121
+ ${n}`}function I$(t,e,r,n){let s=rn(t,cu),i=`- [${e}.md](${e}.md)${n!==null?` \u2014 ${n}`:""} (${r})`,o=Bn(s)?ta(s,"utf8"):"",a=new RegExp(`^- \\[${xy(e)}\\.md\\].*$`,"m");a.test(o)?o=o.replace(a,i):o=o.length>0&&!o.endsWith(`
2122
2122
  `)?`${o}
2123
2123
  ${i}
2124
2124
  `:`${o}${i}
2125
- `,du(s,o,"utf8")}function N$(t,e){let r=tn(t,cu);if(!Bn(r))return;let n=ta(r,"utf8"),s=new RegExp(`^- \\[${xy(e)}\\.md\\].*$\\r?\\n?`,"m");s.test(n)&&du(r,n.replace(s,""),"utf8")}function xy(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function A$(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"}function vt(t,e){return t.durable_memory_mode==="db"?new lu(e,t.id):new au(t.local_path)}var S$,cu,Ny,au,lu,uu=w(()=>{"use strict";S$=/^[a-zA-Z0-9_-]+$/;cu="MEMORY.md",Ny="1970-01-01T00:00:00.000Z",au=class{dir;constructor(e){this.dir=tn(e,"durable-memory")}read(e){ut(e);let r=tn(this.dir,`${e}.md`);if(!Bn(r))return null;let n=ta(r,"utf8");return Ay(e,n)}write(e){ut(e.name),T$(this.dir,{recursive:!0});let r=tn(this.dir,`${e.name}.md`),n=!Bn(r),s=k$(e.name,e.type,e.description??null,e.body);return du(r,s,"utf8"),I$(this.dir,e.name,e.type,e.description??null),{created:n}}index(e){return this.listFiles().filter(r=>e===void 0||e.length===0||e.includes(r.type)).map(({name:r,type:n,description:s,updated_at:i})=>({name:r,type:n,description:s,updated_at:i}))}list(e){return this.listFiles().filter(r=>e===void 0||r.type===e).map(({name:r,type:n,updated_at:s})=>({name:r,type:n,updated_at:s}))}delete(e){ut(e);let r=tn(this.dir,`${e}.md`);return Bn(r)?(b$(r),N$(this.dir,e),!0):!1}listFiles(){if(!Bn(this.dir))return[];let e=v$(this.dir).filter(n=>n.endsWith(".md")&&n!==cu),r=[];for(let n of e){let s=n.slice(0,-3),i=ta(tn(this.dir,n),"utf8"),o=Ay(s,i);o!==null&&r.push(o)}return r.sort((n,s)=>n.name.localeCompare(s.name))}};lu=class{dal;projectId;constructor(e,r){this.dal=e,this.projectId=r}read(e){ut(e);let r=this.dal.getDurableMemoryByName(this.projectId,e);return r===null?null:{name:r.name,type:r.type,description:r.description,body:r.body,created_at:r.created_at,updated_at:r.updated_at}}write(e){ut(e.name);let r=this.dal.getDurableMemoryByName(this.projectId,e.name);return this.dal.upsertDurableMemory({project_id:this.projectId,type:e.type,name:e.name,description:e.description??null,body:e.body}),{created:r===null}}index(e){return this.dal.indexDurableMemory(this.projectId,e).map(n=>({name:n.name,type:n.type,description:n.description,updated_at:n.updated_at}))}list(e){return this.dal.listDurableMemory(this.projectId,e).map(n=>({name:n.name,type:n.type,updated_at:n.updated_at}))}delete(e){return ut(e),this.dal.deleteDurableMemory(this.projectId,e)}}});function Ly(t,e){let{dal:r}=e;t.get("/api/durable-memory/index/:project_id",n=>{let s=Number(n.req.param("project_id")),i=r.getProject(s);if(i===null)return n.json({error:"project not found"},404);let o=vt(i,r),a=n.req.query("types"),l=a!==void 0&&a.length>0?a.split(",").map(d=>d.trim()).filter(Boolean):void 0;return n.json(o.index(l))}),t.get("/api/durable-memory/read/:project_id/:name",n=>{let s=Number(n.req.param("project_id")),i=n.req.param("name"),o=r.getProject(s);if(o===null)return n.json({error:"project not found"},404);let a=vt(o,r),l;try{l=a.read(i)}catch(d){return n.json({error:d.message},400)}return l===null?n.json({error:`memory entry not found: ${i}`},404):n.json(l)}),t.post("/api/durable-memory/write/:project_id",async n=>{let s=Number(n.req.param("project_id")),i=r.getProject(s);if(i===null)return n.json({error:"project not found"},404);let o;try{o=await n.req.json()}catch{return n.json({error:"invalid JSON body"},400)}let a=typeof o.type=="string"?o.type:null,l=typeof o.name=="string"?o.name:null,d=typeof o.body=="string"?o.body:null,c=typeof o.description=="string"?o.description:null;if(a===null||!Ry.has(a))return n.json({error:`invalid type: must be one of ${[...Ry].join("|")}`},400);if(l===null)return n.json({error:"missing name"},400);if(d===null)return n.json({error:"missing body"},400);let u=vt(i,r),m;try{({created:m}=u.write({type:a,name:l,description:c,body:d}))}catch(f){return n.json({error:f.message},400)}return n.json({success:!0,created_or_updated:m?"created":"updated"})}),t.get("/api/durable-memory/list/:project_id",n=>{let s=Number(n.req.param("project_id")),i=r.getProject(s);if(i===null)return n.json({error:"project not found"},404);let o=vt(i,r),a=n.req.query("type");return n.json(o.list(a))})}var Ry,Oy=w(()=>{"use strict";uu();Ry=new Set(["user","feedback","project","reference"])});function R$(t){let e=4294967295;for(let r=0;r<t.length;r+=1)e=(x$[(e^t[r])&255]^e>>>8)>>>0;return(e^4294967295)>>>0}function L$(t){let e=Math.max(1980,t.getFullYear()),r=(t.getHours()&31)<<11|(t.getMinutes()&63)<<5|Math.floor(t.getSeconds()/2)&31,n=(e-1980&127)<<9|(t.getMonth()+1&15)<<5|t.getDate()&31;return{time:r,date:n}}function Cy(t,e=new Date){let{time:r,date:n}=L$(e),s=[],i=[],o=0,a=new TextEncoder;for(let h of t){let _=a.encode(h.name),g=R$(h.data),y=h.data.length,E=new Uint8Array(30+_.length),v=new DataView(E.buffer);v.setUint32(0,67324752,!0),v.setUint16(4,20,!0),v.setUint16(6,0,!0),v.setUint16(8,0,!0),v.setUint16(10,r,!0),v.setUint16(12,n,!0),v.setUint32(14,g,!0),v.setUint32(18,y,!0),v.setUint32(22,y,!0),v.setUint16(26,_.length,!0),v.setUint16(28,0,!0),E.set(_,30),s.push(E,h.data);let S=new Uint8Array(46+_.length),x=new DataView(S.buffer);x.setUint32(0,33639248,!0),x.setUint16(4,20,!0),x.setUint16(6,20,!0),x.setUint16(8,0,!0),x.setUint16(10,0,!0),x.setUint16(12,r,!0),x.setUint16(14,n,!0),x.setUint32(16,g,!0),x.setUint32(20,y,!0),x.setUint32(24,y,!0),x.setUint16(28,_.length,!0),x.setUint16(30,0,!0),x.setUint16(32,0,!0),x.setUint16(34,0,!0),x.setUint16(36,0,!0),x.setUint32(38,0,!0),x.setUint32(42,o,!0),S.set(_,46),i.push(S),o+=E.length+h.data.length}let l=o,d=0;for(let h of i)d+=h.length;let c=new Uint8Array(22),u=new DataView(c.buffer);u.setUint32(0,101010256,!0),u.setUint16(4,0,!0),u.setUint16(6,0,!0),u.setUint16(8,t.length,!0),u.setUint16(10,t.length,!0),u.setUint32(12,d,!0),u.setUint32(16,l,!0),u.setUint16(20,0,!0);let m=l+d+c.length,f=new Uint8Array(m),p=0;for(let h of s)f.set(h,p),p+=h.length;for(let h of i)f.set(h,p),p+=h.length;return f.set(c,p),f}var x$,$y=w(()=>{"use strict";x$=(()=>{let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=r&1?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t})()});import{existsSync as sa,mkdirSync as O$,readdirSync as C$,readFileSync as jy,statSync as $$,unlinkSync as M$,writeFileSync as D$}from"node:fs";import{join as Ys}from"node:path";function Py(t,e){let{dal:r}=e;t.post("/api/projects",async n=>{let s=await bt(n);if(typeof s=="string")return L(n,s,400);let i=fe(s,"name"),o=fe(s,"local_path");if(i===null||i.length===0)return L(n,"missing or empty name",400);if(o===null||o.length===0)return L(n,"missing or empty local_path",400);if(r.findProjectByName(i)!==null)return L(n,`project already exists: ${i}`,409);let a=fe(s,"workflow_name")??"bugfix",l,d=fe(s,"team_name");if(d!==null&&d.length>0){let u=r.findTeamByName(d);if(u===null)return L(n,`team not found: ${d}`,404);l=u.id}else{let u=r.listTeams();if(u.length===0)return L(n,"no teams exist; create a team first",400);l=u[0].id}let c=r.insertProject({name:i,local_path:o,workflow_name:a,team_id:l,default_branch:fe(s,"default_branch")});return n.json(c,201)}),t.patch("/api/projects/:name",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o={};if(Object.prototype.hasOwnProperty.call(i,"local_path")){let l=i.local_path;if(typeof l!="string"||l.length===0)return L(n,"local_path must be a non-empty string",400);o.local_path=l}if(Object.prototype.hasOwnProperty.call(i,"durable_memory_mode")){let l=i.durable_memory_mode;if(l!=="folder"&&l!=="db")return L(n,'durable_memory_mode must be "folder" or "db"',400);o.durable_memory_mode=l}if(Object.prototype.hasOwnProperty.call(i,"default_branch")){let l=i.default_branch;if(l!==null&&typeof l!="string")return L(n,"default_branch must be string or null",400);o.default_branch=l}if(Object.prototype.hasOwnProperty.call(i,"intake_config")){let l=i.intake_config;if(l===null)o.intake_config=null;else if(typeof l=="string")o.intake_config=l;else if(typeof l=="object"&&!Array.isArray(l))o.intake_config=JSON.stringify(l);else return L(n,"intake_config must be a JSON object, string, or null",400)}let a=r.updateProjectSettings(s.id,o);return a===null?L(n,"project not found",404):n.json(a)}),t.post("/api/teams",async n=>{let s=await bt(n);if(typeof s=="string")return L(n,s,400);let i=fe(s,"name");if(i===null||i.length===0)return L(n,"missing or empty name",400);if(r.findTeamByName(i)!==null)return L(n,`team already exists: ${i}`,409);let o=r.insertTeam({name:i});return n.json(o,201)}),t.post("/api/teams/:name/members",async n=>{let s=r.findTeamByName(n.req.param("name"));if(s===null)return L(n,"team not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"alias"),a=fe(i,"provider");if(o===null||o.length===0)return L(n,"missing or empty alias",400);if(a===null||a.length===0)return L(n,"missing or empty provider",400);if(r.findTeamMemberByAlias(s.id,o)!==null)return L(n,`member already exists: ${o}`,409);let l=fe(i,"model"),d=r.insertTeamMember({team_id:s.id,alias:o,provider:a,model:l,sessiondir:`.lmctl/sessions/${s.name}/${o}`}),c=fe(i,"role_prompt");c!==null&&r.setMemberRolePrompt(d.id,c);let u=r.findTeamMemberByAlias(s.id,o);return n.json(u??d,201)}),t.put("/api/teams/:name/members/:alias",async n=>{let s=r.findTeamByName(n.req.param("name"));if(s===null)return L(n,"team not found",404);let i=r.findTeamMemberByAlias(s.id,n.req.param("alias"));if(i===null)return L(n,"member not found",404);let o=await bt(n);if(typeof o=="string")return L(n,o,400);let a={};if(Object.prototype.hasOwnProperty.call(o,"role_prompt")){let d=o.role_prompt;if(d!==null&&typeof d!="string")return L(n,"role_prompt must be string or null",400);a.role_prompt=d}if(Object.prototype.hasOwnProperty.call(o,"model")){let d=o.model;if(d!==null&&typeof d!="string")return L(n,"model must be string or null",400);a.model=d}if(Object.prototype.hasOwnProperty.call(o,"provider")){let d=o.provider;if(typeof d!="string"||d.length===0)return L(n,"provider must be a non-empty string",400);a.provider=d}if(Object.keys(a).length===0)return L(n,"no updatable fields provided",400);let l=r.updateTeamMemberMeta(i.id,a);return l===null?L(n,"member not found",404):n.json(l)}),t.get("/api/projects/:name/durable-memory",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=vt(s,r);return n.json(i.index())}),t.post("/api/projects/:name/durable-memory",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"name"),a=fe(i,"body"),l=fe(i,"type");if(o===null||o.length===0)return L(n,"missing or empty name",400);if(a===null)return L(n,"missing body",400);if(l===null||!ra.includes(l))return L(n,`invalid type: must be one of ${ra.join("|")}`,400);try{ut(o)}catch(u){return L(n,u.message,400)}let d=vt(s,r);try{if(d.read(o)!==null)return L(n,`chapter already exists: ${o}`,409)}catch(u){return L(n,u.message,400)}try{d.write({type:l,name:o,description:fe(i,"description"),body:a})}catch(u){return L(n,u.message,400)}let c=d.read(o);return c===null?L(n,"chapter created but unreadable",500):n.json(c,201)}),t.get("/api/projects/:name/durable-memory/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=vt(s,r),o;try{o=i.read(n.req.param("chapter"))}catch(a){return L(n,a.message,400)}return o===null?L(n,"chapter not found",404):n.json(o)}),t.put("/api/projects/:name/durable-memory/:chapter",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=n.req.param("chapter"),o=await bt(n);if(typeof o=="string")return L(n,o,400);let a=vt(s,r),l;try{l=a.read(i)}catch(f){return L(n,f.message,400)}if(l===null)return L(n,"chapter not found",404);let d=fe(o,"body")??l.body,c=Object.prototype.hasOwnProperty.call(o,"description")?fe(o,"description"):l.description,u=fe(o,"type")??l.type;if(!ra.includes(u))return L(n,`invalid type: must be one of ${ra.join("|")}`,400);try{a.write({type:u,name:i,description:c,body:d})}catch(f){return L(n,f.message,400)}let m=a.read(i);return m===null?L(n,"chapter updated but unreadable",500):n.json(m)}),t.delete("/api/projects/:name/durable-memory/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=vt(s,r),o;try{o=i.delete(n.req.param("chapter"))}catch(a){return L(n,a.message,400)}return o?n.json({removed:!0}):L(n,"chapter not found",404)}),t.get("/api/projects/:name/ai-test",n=>{let s=r.findProjectByName(n.req.param("name"));return s===null?L(n,"project not found",404):n.json(P$(s.local_path))}),t.post("/api/projects/:name/ai-test",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"name"),a=fe(i,"body"),l=fe(i,"type");if(o===null||o.length===0)return L(n,"missing or empty name",400);if(a===null)return L(n,"missing body",400);if(l===null||!na.has(l))return L(n,`invalid type: must be one of ${[...na].join("|")}`,400);try{ut(o)}catch(m){return L(n,m.message,400)}let d=Ks(s.local_path),c=Ys(d,`${o}.md`);if(sa(c))return L(n,`chapter already exists: ${o}`,409);O$(d,{recursive:!0}),Dy(c,o,l,fe(i,"description"),a);let u=Vs(d,o);return u===null?L(n,"chapter created but unreadable",500):n.json(u,201)}),t.get("/api/projects/:name/ai-test/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);try{ut(n.req.param("chapter"))}catch(o){return L(n,o.message,400)}let i=Vs(Ks(s.local_path),n.req.param("chapter"));return i===null?L(n,"chapter not found",404):n.json(i)}),t.put("/api/projects/:name/ai-test/:chapter",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=n.req.param("chapter");try{ut(i)}catch(f){return L(n,f.message,400)}let o=Ks(s.local_path),a=Vs(o,i);if(a===null)return L(n,"chapter not found",404);let l=await bt(n);if(typeof l=="string")return L(n,l,400);let d=fe(l,"body")??a.body,c=Object.prototype.hasOwnProperty.call(l,"description")?fe(l,"description"):a.description,u=fe(l,"type")??a.type;if(!na.has(u))return L(n,`invalid type: must be one of ${[...na].join("|")}`,400);Dy(Ys(o,`${i}.md`),i,u,c,d);let m=Vs(o,i);return m===null?L(n,"chapter updated but unreadable",500):n.json(m)}),t.delete("/api/projects/:name/ai-test/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=n.req.param("chapter");try{ut(i)}catch(a){return L(n,a.message,400)}let o=Ys(Ks(s.local_path),`${i}.md`);return sa(o)?(M$(o),n.json({removed:!0})):L(n,"chapter not found",404)}),t.get("/api/tokens",n=>n.json([])),t.post("/api/tokens",n=>L(n,"scoped-tokens table not yet migrated; see briefs/scoped-tokens-design.md",501)),t.get("/api/settings",n=>n.json({})),t.patch("/api/settings",async n=>{let s=await bt(n);return typeof s=="string"?L(n,s,400):n.json({accepted:s,note:"settings persistence not yet implemented"})}),t.get("/api/chat/sessions",n=>n.json(r.listChatbotSessions(My))),t.post("/api/chat/sessions",async n=>{let s=await j$(n);if(typeof s=="string")return L(n,s,400);let i=s!==null?fe(s,"title"):null,o=r.createChatbotSession(My,i);return n.json(o,201)}),t.get("/api/chat/sessions/:id/messages",n=>{let s=n.req.param("id");return r.getChatbotSession(s)===null?L(n,"chat session not found",404):n.json(r.listChatbotMessages(s))}),t.post("/api/chat/sessions/:id/messages",async n=>{let s=n.req.param("id");if(r.getChatbotSession(s)===null)return L(n,"chat session not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"role"),a=fe(i,"content");if(o===null||o!=="user"&&o!=="assistant"&&o!=="tool")return L(n,"role must be one of user|assistant|tool",400);if(a===null)return L(n,"missing content",400);let l=r.appendChatbotMessage(s,o,a);return n.json(l,201)}),t.get("/api/runs/:id/artifacts.zip",n=>{let s=Number(n.req.param("id"));if(!Number.isInteger(s))return L(n,"invalid run id",400);if(r.getRun(s)===null)return L(n,"run not found",404);let o=Zr(r,s),a=[];for(let d of o){let c=U$(d),u=null;if(d.content!==null&&d.content!==void 0)u=new TextEncoder().encode(d.content);else if(d.path!==null&&d.path!==void 0)try{let m=jy(d.path),f=m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength);u=new Uint8Array(f)}catch{u=new Uint8Array(0)}u!==null&&a.push({name:c,data:u})}let l=Cy(a);return new Response(l,{status:200,headers:{"Content-Type":"application/zip","Content-Disposition":`attachment; filename="run-${s}-artifacts.zip"`,"Content-Length":String(l.byteLength)}})})}function L(t,e,r){return t.json({error:e},r)}async function bt(t){try{let e=await t.req.json();return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:"invalid JSON body"}catch{return"invalid JSON body"}}async function j$(t){let e=await t.req.text().catch(()=>"");if(e.trim().length===0)return null;try{let r=JSON.parse(e);return r!==null&&typeof r=="object"&&!Array.isArray(r)?r:"invalid JSON body"}catch{return"invalid JSON body"}}function fe(t,e){let r=t[e];return typeof r!="string"?null:r}function Ks(t){return Ys(t,"ai-test")}function Vs(t,e){let r=Ys(t,`${e}.md`);if(!sa(r))return null;let n=jy(r,"utf8"),s=F$(n),i=$$(r).mtime.toISOString();return{name:e,type:s.type,description:s.description,body:s.body,updated_at:i}}function P$(t){let e=Ks(t);return sa(e)?C$(e).filter(r=>r.endsWith(".md")&&r!=="index.md").map(r=>r.slice(0,-3)).sort().map(r=>{let n=Vs(e,r);if(n===null)return null;let{name:s,type:i,description:o,updated_at:a}=n;return{name:s,type:i,description:o,updated_at:a}}).filter(r=>r!==null):[]}function Dy(t,e,r,n,s){let i=n!==null&&n.length>0?`
2125
+ `,du(s,o,"utf8")}function N$(t,e){let r=rn(t,cu);if(!Bn(r))return;let n=ta(r,"utf8"),s=new RegExp(`^- \\[${xy(e)}\\.md\\].*$\\r?\\n?`,"m");s.test(n)&&du(r,n.replace(s,""),"utf8")}function xy(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function A$(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"}function vt(t,e){return t.durable_memory_mode==="db"?new lu(e,t.id):new au(t.local_path)}var S$,cu,Ny,au,lu,uu=w(()=>{"use strict";S$=/^[a-zA-Z0-9_-]+$/;cu="MEMORY.md",Ny="1970-01-01T00:00:00.000Z",au=class{dir;constructor(e){this.dir=rn(e,"durable-memory")}read(e){ut(e);let r=rn(this.dir,`${e}.md`);if(!Bn(r))return null;let n=ta(r,"utf8");return Ay(e,n)}write(e){ut(e.name),T$(this.dir,{recursive:!0});let r=rn(this.dir,`${e.name}.md`),n=!Bn(r),s=k$(e.name,e.type,e.description??null,e.body);return du(r,s,"utf8"),I$(this.dir,e.name,e.type,e.description??null),{created:n}}index(e){return this.listFiles().filter(r=>e===void 0||e.length===0||e.includes(r.type)).map(({name:r,type:n,description:s,updated_at:i})=>({name:r,type:n,description:s,updated_at:i}))}list(e){return this.listFiles().filter(r=>e===void 0||r.type===e).map(({name:r,type:n,updated_at:s})=>({name:r,type:n,updated_at:s}))}delete(e){ut(e);let r=rn(this.dir,`${e}.md`);return Bn(r)?(b$(r),N$(this.dir,e),!0):!1}listFiles(){if(!Bn(this.dir))return[];let e=v$(this.dir).filter(n=>n.endsWith(".md")&&n!==cu),r=[];for(let n of e){let s=n.slice(0,-3),i=ta(rn(this.dir,n),"utf8"),o=Ay(s,i);o!==null&&r.push(o)}return r.sort((n,s)=>n.name.localeCompare(s.name))}};lu=class{dal;projectId;constructor(e,r){this.dal=e,this.projectId=r}read(e){ut(e);let r=this.dal.getDurableMemoryByName(this.projectId,e);return r===null?null:{name:r.name,type:r.type,description:r.description,body:r.body,created_at:r.created_at,updated_at:r.updated_at}}write(e){ut(e.name);let r=this.dal.getDurableMemoryByName(this.projectId,e.name);return this.dal.upsertDurableMemory({project_id:this.projectId,type:e.type,name:e.name,description:e.description??null,body:e.body}),{created:r===null}}index(e){return this.dal.indexDurableMemory(this.projectId,e).map(n=>({name:n.name,type:n.type,description:n.description,updated_at:n.updated_at}))}list(e){return this.dal.listDurableMemory(this.projectId,e).map(n=>({name:n.name,type:n.type,updated_at:n.updated_at}))}delete(e){return ut(e),this.dal.deleteDurableMemory(this.projectId,e)}}});function Ly(t,e){let{dal:r}=e;t.get("/api/durable-memory/index/:project_id",n=>{let s=Number(n.req.param("project_id")),i=r.getProject(s);if(i===null)return n.json({error:"project not found"},404);let o=vt(i,r),a=n.req.query("types"),l=a!==void 0&&a.length>0?a.split(",").map(d=>d.trim()).filter(Boolean):void 0;return n.json(o.index(l))}),t.get("/api/durable-memory/read/:project_id/:name",n=>{let s=Number(n.req.param("project_id")),i=n.req.param("name"),o=r.getProject(s);if(o===null)return n.json({error:"project not found"},404);let a=vt(o,r),l;try{l=a.read(i)}catch(d){return n.json({error:d.message},400)}return l===null?n.json({error:`memory entry not found: ${i}`},404):n.json(l)}),t.post("/api/durable-memory/write/:project_id",async n=>{let s=Number(n.req.param("project_id")),i=r.getProject(s);if(i===null)return n.json({error:"project not found"},404);let o;try{o=await n.req.json()}catch{return n.json({error:"invalid JSON body"},400)}let a=typeof o.type=="string"?o.type:null,l=typeof o.name=="string"?o.name:null,d=typeof o.body=="string"?o.body:null,c=typeof o.description=="string"?o.description:null;if(a===null||!Ry.has(a))return n.json({error:`invalid type: must be one of ${[...Ry].join("|")}`},400);if(l===null)return n.json({error:"missing name"},400);if(d===null)return n.json({error:"missing body"},400);let u=vt(i,r),m;try{({created:m}=u.write({type:a,name:l,description:c,body:d}))}catch(f){return n.json({error:f.message},400)}return n.json({success:!0,created_or_updated:m?"created":"updated"})}),t.get("/api/durable-memory/list/:project_id",n=>{let s=Number(n.req.param("project_id")),i=r.getProject(s);if(i===null)return n.json({error:"project not found"},404);let o=vt(i,r),a=n.req.query("type");return n.json(o.list(a))})}var Ry,Oy=w(()=>{"use strict";uu();Ry=new Set(["user","feedback","project","reference"])});function R$(t){let e=4294967295;for(let r=0;r<t.length;r+=1)e=(x$[(e^t[r])&255]^e>>>8)>>>0;return(e^4294967295)>>>0}function L$(t){let e=Math.max(1980,t.getFullYear()),r=(t.getHours()&31)<<11|(t.getMinutes()&63)<<5|Math.floor(t.getSeconds()/2)&31,n=(e-1980&127)<<9|(t.getMonth()+1&15)<<5|t.getDate()&31;return{time:r,date:n}}function Cy(t,e=new Date){let{time:r,date:n}=L$(e),s=[],i=[],o=0,a=new TextEncoder;for(let h of t){let _=a.encode(h.name),g=R$(h.data),y=h.data.length,E=new Uint8Array(30+_.length),v=new DataView(E.buffer);v.setUint32(0,67324752,!0),v.setUint16(4,20,!0),v.setUint16(6,0,!0),v.setUint16(8,0,!0),v.setUint16(10,r,!0),v.setUint16(12,n,!0),v.setUint32(14,g,!0),v.setUint32(18,y,!0),v.setUint32(22,y,!0),v.setUint16(26,_.length,!0),v.setUint16(28,0,!0),E.set(_,30),s.push(E,h.data);let S=new Uint8Array(46+_.length),x=new DataView(S.buffer);x.setUint32(0,33639248,!0),x.setUint16(4,20,!0),x.setUint16(6,20,!0),x.setUint16(8,0,!0),x.setUint16(10,0,!0),x.setUint16(12,r,!0),x.setUint16(14,n,!0),x.setUint32(16,g,!0),x.setUint32(20,y,!0),x.setUint32(24,y,!0),x.setUint16(28,_.length,!0),x.setUint16(30,0,!0),x.setUint16(32,0,!0),x.setUint16(34,0,!0),x.setUint16(36,0,!0),x.setUint32(38,0,!0),x.setUint32(42,o,!0),S.set(_,46),i.push(S),o+=E.length+h.data.length}let l=o,d=0;for(let h of i)d+=h.length;let c=new Uint8Array(22),u=new DataView(c.buffer);u.setUint32(0,101010256,!0),u.setUint16(4,0,!0),u.setUint16(6,0,!0),u.setUint16(8,t.length,!0),u.setUint16(10,t.length,!0),u.setUint32(12,d,!0),u.setUint32(16,l,!0),u.setUint16(20,0,!0);let m=l+d+c.length,f=new Uint8Array(m),p=0;for(let h of s)f.set(h,p),p+=h.length;for(let h of i)f.set(h,p),p+=h.length;return f.set(c,p),f}var x$,$y=w(()=>{"use strict";x$=(()=>{let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=r&1?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t})()});import{existsSync as sa,mkdirSync as O$,readdirSync as C$,readFileSync as jy,statSync as $$,unlinkSync as M$,writeFileSync as D$}from"node:fs";import{join as Ys}from"node:path";function Py(t,e){let{dal:r}=e;t.post("/api/projects",async n=>{let s=await bt(n);if(typeof s=="string")return L(n,s,400);let i=fe(s,"name"),o=fe(s,"local_path");if(i===null||i.length===0)return L(n,"missing or empty name",400);if(o===null||o.length===0)return L(n,"missing or empty local_path",400);if(r.findProjectByName(i)!==null)return L(n,`project already exists: ${i}`,409);let a=fe(s,"workflow_name")??"bugfix",l,d=fe(s,"team_name");if(d!==null&&d.length>0){let u=r.findTeamByName(d);if(u===null)return L(n,`team not found: ${d}`,404);l=u.id}else{let u=r.listTeams();if(u.length===0)return L(n,"no teams exist; create a team first",400);l=u[0].id}let c=r.insertProject({name:i,local_path:o,workflow_name:a,team_id:l,default_branch:fe(s,"default_branch")});return n.json(c,201)}),t.patch("/api/projects/:name",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o={};if(Object.prototype.hasOwnProperty.call(i,"local_path")){let l=i.local_path;if(typeof l!="string"||l.length===0)return L(n,"local_path must be a non-empty string",400);o.local_path=l}if(Object.prototype.hasOwnProperty.call(i,"durable_memory_mode")){let l=i.durable_memory_mode;if(l!=="folder"&&l!=="db")return L(n,'durable_memory_mode must be "folder" or "db"',400);o.durable_memory_mode=l}if(Object.prototype.hasOwnProperty.call(i,"default_branch")){let l=i.default_branch;if(l!==null&&typeof l!="string")return L(n,"default_branch must be string or null",400);o.default_branch=l}if(Object.prototype.hasOwnProperty.call(i,"intake_config")){let l=i.intake_config;if(l===null)o.intake_config=null;else if(typeof l=="string")o.intake_config=l;else if(typeof l=="object"&&!Array.isArray(l))o.intake_config=JSON.stringify(l);else return L(n,"intake_config must be a JSON object, string, or null",400)}let a=r.updateProjectSettings(s.id,o);return a===null?L(n,"project not found",404):n.json(a)}),t.post("/api/teams",async n=>{let s=await bt(n);if(typeof s=="string")return L(n,s,400);let i=fe(s,"name");if(i===null||i.length===0)return L(n,"missing or empty name",400);if(r.findTeamByName(i)!==null)return L(n,`team already exists: ${i}`,409);let o=r.insertTeam({name:i});return n.json(o,201)}),t.post("/api/teams/:name/members",async n=>{let s=r.findTeamByName(n.req.param("name"));if(s===null)return L(n,"team not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"alias"),a=fe(i,"provider");if(o===null||o.length===0)return L(n,"missing or empty alias",400);if(a===null||a.length===0)return L(n,"missing or empty provider",400);if(r.findTeamMemberByAlias(s.id,o)!==null)return L(n,`member already exists: ${o}`,409);let l=fe(i,"model"),d=r.insertTeamMember({team_id:s.id,alias:o,provider:a,model:l,sessiondir:`.lmctl/sessions/${s.name}/${o}`}),c=fe(i,"role_prompt");c!==null&&r.setMemberRolePrompt(d.id,c);let u=r.findTeamMemberByAlias(s.id,o);return n.json(u??d,201)}),t.put("/api/teams/:name/members/:alias",async n=>{let s=r.findTeamByName(n.req.param("name"));if(s===null)return L(n,"team not found",404);let i=r.findTeamMemberByAlias(s.id,n.req.param("alias"));if(i===null)return L(n,"member not found",404);let o=await bt(n);if(typeof o=="string")return L(n,o,400);let a={};if(Object.prototype.hasOwnProperty.call(o,"role_prompt")){let d=o.role_prompt;if(d!==null&&typeof d!="string")return L(n,"role_prompt must be string or null",400);a.role_prompt=d}if(Object.prototype.hasOwnProperty.call(o,"model")){let d=o.model;if(d!==null&&typeof d!="string")return L(n,"model must be string or null",400);a.model=d}if(Object.prototype.hasOwnProperty.call(o,"provider")){let d=o.provider;if(typeof d!="string"||d.length===0)return L(n,"provider must be a non-empty string",400);a.provider=d}if(Object.keys(a).length===0)return L(n,"no updatable fields provided",400);let l=r.updateTeamMemberMeta(i.id,a);return l===null?L(n,"member not found",404):n.json(l)}),t.get("/api/projects/:name/durable-memory",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=vt(s,r);return n.json(i.index())}),t.post("/api/projects/:name/durable-memory",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"name"),a=fe(i,"body"),l=fe(i,"type");if(o===null||o.length===0)return L(n,"missing or empty name",400);if(a===null)return L(n,"missing body",400);if(l===null||!ra.includes(l))return L(n,`invalid type: must be one of ${ra.join("|")}`,400);try{ut(o)}catch(u){return L(n,u.message,400)}let d=vt(s,r);try{if(d.read(o)!==null)return L(n,`chapter already exists: ${o}`,409)}catch(u){return L(n,u.message,400)}try{d.write({type:l,name:o,description:fe(i,"description"),body:a})}catch(u){return L(n,u.message,400)}let c=d.read(o);return c===null?L(n,"chapter created but unreadable",500):n.json(c,201)}),t.get("/api/projects/:name/durable-memory/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=vt(s,r),o;try{o=i.read(n.req.param("chapter"))}catch(a){return L(n,a.message,400)}return o===null?L(n,"chapter not found",404):n.json(o)}),t.put("/api/projects/:name/durable-memory/:chapter",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=n.req.param("chapter"),o=await bt(n);if(typeof o=="string")return L(n,o,400);let a=vt(s,r),l;try{l=a.read(i)}catch(f){return L(n,f.message,400)}if(l===null)return L(n,"chapter not found",404);let d=fe(o,"body")??l.body,c=Object.prototype.hasOwnProperty.call(o,"description")?fe(o,"description"):l.description,u=fe(o,"type")??l.type;if(!ra.includes(u))return L(n,`invalid type: must be one of ${ra.join("|")}`,400);try{a.write({type:u,name:i,description:c,body:d})}catch(f){return L(n,f.message,400)}let m=a.read(i);return m===null?L(n,"chapter updated but unreadable",500):n.json(m)}),t.delete("/api/projects/:name/durable-memory/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=vt(s,r),o;try{o=i.delete(n.req.param("chapter"))}catch(a){return L(n,a.message,400)}return o?n.json({removed:!0}):L(n,"chapter not found",404)}),t.get("/api/projects/:name/ai-test",n=>{let s=r.findProjectByName(n.req.param("name"));return s===null?L(n,"project not found",404):n.json(P$(s.local_path))}),t.post("/api/projects/:name/ai-test",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"name"),a=fe(i,"body"),l=fe(i,"type");if(o===null||o.length===0)return L(n,"missing or empty name",400);if(a===null)return L(n,"missing body",400);if(l===null||!na.has(l))return L(n,`invalid type: must be one of ${[...na].join("|")}`,400);try{ut(o)}catch(m){return L(n,m.message,400)}let d=Ks(s.local_path),c=Ys(d,`${o}.md`);if(sa(c))return L(n,`chapter already exists: ${o}`,409);O$(d,{recursive:!0}),Dy(c,o,l,fe(i,"description"),a);let u=Vs(d,o);return u===null?L(n,"chapter created but unreadable",500):n.json(u,201)}),t.get("/api/projects/:name/ai-test/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);try{ut(n.req.param("chapter"))}catch(o){return L(n,o.message,400)}let i=Vs(Ks(s.local_path),n.req.param("chapter"));return i===null?L(n,"chapter not found",404):n.json(i)}),t.put("/api/projects/:name/ai-test/:chapter",async n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=n.req.param("chapter");try{ut(i)}catch(f){return L(n,f.message,400)}let o=Ks(s.local_path),a=Vs(o,i);if(a===null)return L(n,"chapter not found",404);let l=await bt(n);if(typeof l=="string")return L(n,l,400);let d=fe(l,"body")??a.body,c=Object.prototype.hasOwnProperty.call(l,"description")?fe(l,"description"):a.description,u=fe(l,"type")??a.type;if(!na.has(u))return L(n,`invalid type: must be one of ${[...na].join("|")}`,400);Dy(Ys(o,`${i}.md`),i,u,c,d);let m=Vs(o,i);return m===null?L(n,"chapter updated but unreadable",500):n.json(m)}),t.delete("/api/projects/:name/ai-test/:chapter",n=>{let s=r.findProjectByName(n.req.param("name"));if(s===null)return L(n,"project not found",404);let i=n.req.param("chapter");try{ut(i)}catch(a){return L(n,a.message,400)}let o=Ys(Ks(s.local_path),`${i}.md`);return sa(o)?(M$(o),n.json({removed:!0})):L(n,"chapter not found",404)}),t.get("/api/tokens",n=>n.json([])),t.post("/api/tokens",n=>L(n,"scoped-tokens table not yet migrated; see briefs/scoped-tokens-design.md",501)),t.get("/api/settings",n=>n.json({})),t.patch("/api/settings",async n=>{let s=await bt(n);return typeof s=="string"?L(n,s,400):n.json({accepted:s,note:"settings persistence not yet implemented"})}),t.get("/api/chat/sessions",n=>n.json(r.listChatbotSessions(My))),t.post("/api/chat/sessions",async n=>{let s=await j$(n);if(typeof s=="string")return L(n,s,400);let i=s!==null?fe(s,"title"):null,o=r.createChatbotSession(My,i);return n.json(o,201)}),t.get("/api/chat/sessions/:id/messages",n=>{let s=n.req.param("id");return r.getChatbotSession(s)===null?L(n,"chat session not found",404):n.json(r.listChatbotMessages(s))}),t.post("/api/chat/sessions/:id/messages",async n=>{let s=n.req.param("id");if(r.getChatbotSession(s)===null)return L(n,"chat session not found",404);let i=await bt(n);if(typeof i=="string")return L(n,i,400);let o=fe(i,"role"),a=fe(i,"content");if(o===null||o!=="user"&&o!=="assistant"&&o!=="tool")return L(n,"role must be one of user|assistant|tool",400);if(a===null)return L(n,"missing content",400);let l=r.appendChatbotMessage(s,o,a);return n.json(l,201)}),t.get("/api/runs/:id/artifacts.zip",n=>{let s=Number(n.req.param("id"));if(!Number.isInteger(s))return L(n,"invalid run id",400);if(r.getRun(s)===null)return L(n,"run not found",404);let o=Qr(r,s),a=[];for(let d of o){let c=U$(d),u=null;if(d.content!==null&&d.content!==void 0)u=new TextEncoder().encode(d.content);else if(d.path!==null&&d.path!==void 0)try{let m=jy(d.path),f=m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength);u=new Uint8Array(f)}catch{u=new Uint8Array(0)}u!==null&&a.push({name:c,data:u})}let l=Cy(a);return new Response(l,{status:200,headers:{"Content-Type":"application/zip","Content-Disposition":`attachment; filename="run-${s}-artifacts.zip"`,"Content-Length":String(l.byteLength)}})})}function L(t,e,r){return t.json({error:e},r)}async function bt(t){try{let e=await t.req.json();return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:"invalid JSON body"}catch{return"invalid JSON body"}}async function j$(t){let e=await t.req.text().catch(()=>"");if(e.trim().length===0)return null;try{let r=JSON.parse(e);return r!==null&&typeof r=="object"&&!Array.isArray(r)?r:"invalid JSON body"}catch{return"invalid JSON body"}}function fe(t,e){let r=t[e];return typeof r!="string"?null:r}function Ks(t){return Ys(t,"ai-test")}function Vs(t,e){let r=Ys(t,`${e}.md`);if(!sa(r))return null;let n=jy(r,"utf8"),s=F$(n),i=$$(r).mtime.toISOString();return{name:e,type:s.type,description:s.description,body:s.body,updated_at:i}}function P$(t){let e=Ks(t);return sa(e)?C$(e).filter(r=>r.endsWith(".md")&&r!=="index.md").map(r=>r.slice(0,-3)).sort().map(r=>{let n=Vs(e,r);if(n===null)return null;let{name:s,type:i,description:o,updated_at:a}=n;return{name:s,type:i,description:o,updated_at:a}}).filter(r=>r!==null):[]}function Dy(t,e,r,n,s){let i=n!==null&&n.length>0?`
2126
2126
  description: ${n}`:"",o=`---
2127
2127
  name: ${e}${i}
2128
2128
  type: ${r}
@@ -2198,7 +2198,7 @@ ${s}`;D$(t,o,"utf8")}function F$(t){let e=t.match(/^---\r?\n([\s\S]*?)\r?\n---\r
2198
2198
  FROM session_size WHERE observed_at >= ? AND observed_at <= ?`,n.started_at,n.ended_at??new Date().toISOString())[0],H=x?.input!==null&&x?.input!==void 0?`input: ${x.input}, output: ${x.output??0}`:"n/a",F=e.getWorkflow(n.workflow_id),$=n.started_at!==null&&n.ended_at!==null?Math.max(0,new Date(n.ended_at).getTime()-new Date(n.started_at).getTime()):null,R={run_id:t,workflow_name:F?.name??null,started_at:n.started_at,ended_at:n.ended_at,terminal_state:n.terminal_state,duration_ms:$,steps:d,tool_stats:f,reviewer_interventions:{count:p.length,state_names:h},drift_signals:v,token_totals:H};e.insertStepArtifact({step_id:i,kind:"run_report",content:JSON.stringify(R)})}var Ky=w(()=>{"use strict"});import{spawnSync as Yy}from"node:child_process";function yu(t){return nM[t]??`no install hint; ensure '${t}' is on PATH`}function sM(t){switch(t){case"gh":return{args:["auth","status"]};case"claude":case"codex":case"gemini":case"qwen":return{args:["auth","status"]};case"opencode":return{args:["auth","list"]};default:return null}}function Vy(t){return Yy("which",[t],{encoding:"utf8"}).status===0}function zy(t){if(t===void 0)return null;for(let e of t.tools??[])if(!Vy(e)){let r=yu(e);return{kind:"missing_tool",tool:e,install_hint:r,message:`missing dependency: ${e}; ${r}`}}for(let e of t.auth??[]){if(!Vy(e)){let s=yu(e);return{kind:"missing_tool",tool:e,install_hint:s,message:`missing dependency: ${e}; ${s}`}}let r=sM(e);if(r===null)continue;let n=Yy(e,r.args,{encoding:"utf8"});if(n.status!==0){let s=typeof n.stderr=="string"?n.stderr.trim():"";return{kind:"auth_failed",tool:e,install_hint:yu(e),message:`${e} not authenticated; run \`${e} login\` or equivalent`,detail:s.length>0?s:void 0}}}return null}var nM,Zy=w(()=>{"use strict";nM={gh:"install: https://cli.github.com/",git:"install: apt-get install git OR brew install git",node:"install: https://nodejs.org/",claude:"install: https://docs.anthropic.com/en/docs/claude-code/quickstart",codex:"install: https://github.com/openai/codex",gemini:"install: https://github.com/google-gemini/gemini-cli",opencode:"install: https://opencode.ai/",qwen:"install: https://github.com/QwenLM/qwen-code",kimi:"install: https://github.com/MoonshotAI/kimi-code"}});import{existsSync as iM,readdirSync as oM,readFileSync as aM}from"node:fs";import{join as Qy}from"node:path";function lM(t){let e=t.match(/^---\n([\s\S]*?)\n---/);if(!e)return[];let r=e[1],n=r.match(/^tags:\s*\[([^\]]*)\]/m);if(n)return n[1].split(",").map(i=>i.trim()).filter(Boolean);let s=r.match(/^tags:\s*\n((?:\s*-\s+.+\n?)*)/m);return s?s[1].split(`
2199
2199
  `).map(i=>i.replace(/^\s*-\s+/,"").trim()).filter(Boolean):[]}function eE(t,e){let r=t.match(/^---\n([\s\S]*?)\n---/);if(!r)return null;let s=r[1].match(new RegExp(`^${e}:\\s*(.+)$`,"m"));return s?s[1].trim():null}function tE(t,e){if(e.length===0)return null;let r=Qy(t,"durable-memory");if(!iM(r))return null;let n;try{n=oM(r).filter(i=>i.endsWith(".md")&&i!=="index.md")}catch{return null}let s=[];for(let i of n)try{let o=aM(Qy(r,i),"utf8");if(lM(o).some(l=>e.includes(l))){let l=eE(o,"name")??i.replace(".md",""),d=eE(o,"description");s.push(d?`${l} (${d})`:l)}}catch{}return s.length===0?null:`[Durable-memory entries relevant to this task: ${s.join(", ")}. Pull the full chapter as needed.]`}var rE=w(()=>{"use strict"});function Tu(t){let e=t.trim().replace(dM,"").trim();for(let r=0;r<4;r+=1){let n=cM.exec(e);if(n===null)break;e=n[2].trim()}return e}function nE(t){let e=t.trim(),r=uM.exec(e);if(r!==null)return r[2];let n=mM.exec(e);return n!==null?n[0]:null}function Qs(t,e){let r=t.split(`
2200
2200
  `),n=null,s=-1;for(let o=0;o<r.length;o+=1){let a=Tu(r[o]),l=Eu.exec(a);if(l===null)continue;let d=l[1].trim();if(wu.test(d))continue;let c=nE(d);c!==null&&(n=c,s=o)}if(n===null)return{outcome:null,reason:"no_stance"};if(!e.includes(n))return{outcome:null,reason:"unknown_outcome",actual:n};let i={};for(let o=s-1;o>=0;o-=1){let a=Tu(r[o]),l=Eu.exec(a);if(l===null)break;let d=wu.exec(l[1].trim());if(d===null)break;i[d[1]]=d[2].trim()}return{outcome:n,evidence:i}}function sE(t){let e=t.split(`
2201
- `),r=null;for(let n=0;n<e.length;n+=1){let s=Tu(e[n]),i=Eu.exec(s);if(i===null)continue;let o=i[1].trim();if(wu.test(o))continue;let a=nE(o);if(a===null||!In(a))continue;let d=o.slice(o.indexOf(a)+a.length).replace(/^[`*_:\s\-–—]+/,"").trim();r={token:a,reason:d}}return r}var dM,cM,Eu,wu,uM,mM,vu=w(()=>{"use strict";Ns();dM=/^#{1,6}\s+/,cM=/^(```|\*\*|__|`|\*|_)([\s\S]+?)\1$/,Eu=/^STANCE:\s+(.+)$/,wu=/^([A-Z][A-Z0-9_]*):\s*(.+)$/,uM=/^(```|\*\*|__|`|\*|_)([A-Za-z0-9_-]+)\1/,mM=/^[A-Za-z0-9_-]+/});function iE(t,e,r){return n=>{let s=r(),i=Date.now(),o=JSON.stringify({kind:n.kind,tool:n.tool??null,summary:n.summary??null,id:n.id??null,elapsedMs:n.elapsedMs??null,status:n.status??null}),a=Buffer.byteLength(o,"utf8");if(a<=262144){t.insertSessionEvent({run_id:e,step_id:s,kind:n.kind,timestamp_ms:i,payload:o});return}let l=o.slice(0,1024),d=JSON.stringify({truncated:!0,size:a,preview:l});if(s!==null){let c=t.insertStepArtifact({step_id:s,kind:"session_event_overflow",content:o});t.insertSessionEvent({run_id:e,step_id:s,kind:n.kind,timestamp_ms:i,payload:d,payload_truncated:1,overflow_artifact_id:c.id})}else t.insertSessionEvent({run_id:e,step_id:null,kind:n.kind,timestamp_ms:i,payload:d,payload_truncated:1,overflow_artifact_id:null})}}var oE=w(()=>{"use strict"});import{readFileSync as fM}from"node:fs";import{dirname as pM,join as _M}from"node:path";import{fileURLToPath as hM}from"node:url";function EM(t){return t.rules.map(e=>({command:e.command,subcommands:e.argv_patterns.map(r=>r.trim().split(/\s+/)),kind:e.kind}))}function bM(t){let e=[],r=[];for(let n of t)gM.has(n)?(r.length>0&&e.push(r),r=[]):r.push(n);return r.length>0&&e.push(r),e}function SM(t,e){if(t.length===0)return{matched:!1};let r=0;for(;r<t.length&&yM.test(t[r]);)r+=1;if(r>=t.length)return{matched:!1};let n=t[r],s=t.slice(r+1);for(let i of e)if(n===i.command){for(let o of i.subcommands)if(o.every((l,d)=>s[d]===l))return{matched:!0,kind:i.kind}}return{matched:!1}}function kM(t,e){if(t.length===0)return{matched:!1};let r=bM(t);for(let n of r){let s=SM(n,e);if(s.matched)return s}return{matched:!1}}function bu(t){return kM(t,vM)}function IM(t){return t.replace(/&&/g," && ").replace(/\|\|/g," || ").replace(/;/g," ; ").replace(/\|/g," | ").replace(/(?<!\d)>{1,2}/g,e=>` ${e} `).replace(/(?<!\d)<{1,2}/g,e=>` ${e} `).replace(/\s+/g," ").trim()}function Su(t){return IM(t).split(" ").filter(e=>e.length>0)}var gM,yM,wM,TM,vM,aE=w(()=>{"use strict";gM=new Set(["&&","||",";","|",">",">>","<","<<"]),yM=/^[A-Za-z_][A-Za-z0-9_]*=/;wM=pM(hM(import.meta.url)),TM=JSON.parse(fM(_M(wM,"side_effect_classifier.json"),"utf-8")),vM=EM(TM)});function la(t){return{context:{outcomes:t.outcomes,inputs:t.inputs,item:t.iteration?.item,index:t.iteration?.index},outcomes:t.outcomes,inputs:t.inputs,item:t.iteration?.item,index:t.iteration?.index}}async function lE(t,e){try{return await en(ku(t)??t,la(e))===!0}catch{return!1}}async function da(t,e){try{return await en(ku(t)??t,la(e))}catch{return}}async function dE(t,e){if(typeof t!="string")return t;let r=ku(t);if(r===null)return t;try{return await en(r,la(e))}catch{return}}async function cE(t,e){let r=Array.from(t.matchAll(/=\{\{([\s\S]*?)\}\}/g));if(r.length===0)return t;let n="",s=0;for(let i of r){let o=i.index??0;n+=t.slice(s,o);let a=i[1]?.trim()??"";try{n+=NM(await en(a,la(e)))}catch{n+=""}s=o+i[0].length}return n+=t.slice(s),n}function ku(t){let e=t.trim();return!e.startsWith("={{")||!e.endsWith("}}")?null:e.slice(3,-2).trim()}function NM(t){return t==null?"":typeof t=="string"?t:JSON.stringify(t)}var ei=w(()=>{"use strict";Xs()});import{existsSync as uE,readdirSync as mE,readFileSync as AM,statSync as fE}from"node:fs";import{join as ua}from"node:path";function pE(t,e,r,n){return Object.assign(t,{stateId:e,state:r,displayName:n})}function J(t,e){return t.dal.insertStep({...e,parent_step_id:t.parent_step_id})}function G(t,e){return e.startsWith("@terminal:")?{kind:"terminal",terminal:e.slice(10)}:t.states[e]===void 0?{kind:"escalate",token:e,reason:`unknown state ref '${e}'`}:{kind:"state",state:e}}function mt(t,e,r,n,s={}){let i=D(),o=J(t,{run_id:t.run_id,state_name:e.name});t.steps_executed+=1,t.dal.finishStep(o.id,null,`escalation:${n}`.slice(0,480)),t.dal.setRunPausedState(t.run_id,`${ti}${e.id}`,i);let a=t.dal.getRun(t.run_id),l=In(r)?"generic":"unhandled";return t.dal.raiseAttention({kind:Xi,severity:"attn",project_id:t.project.id,run_id:t.run_id,requires_user:!0,payload:JSON.stringify({run_id:t.run_id,step_id:o.id,project_id:t.project.id,workflow_name:t.workflow.name,workflow_version_id:a?.workflow_version_id??null,step:{id:e.id,name:e.name,type:e.type},tier:l,token:r,reason:n,declared_outcomes:[...s.declared_outcomes??[]],agent_output:xM(s.agent_output??n),paused_at:i,created_at:i})}),t.dal.pauseJob(t.job.id),{kind:"paused"}}function xM(t){return t.length>8e3?`${t.slice(0,8e3)}
2201
+ `),r=null;for(let n=0;n<e.length;n+=1){let s=Tu(e[n]),i=Eu.exec(s);if(i===null)continue;let o=i[1].trim();if(wu.test(o))continue;let a=nE(o);if(a===null||!In(a))continue;let d=o.slice(o.indexOf(a)+a.length).replace(/^[`*_:\s\-–—]+/,"").trim();r={token:a,reason:d}}return r}var dM,cM,Eu,wu,uM,mM,vu=w(()=>{"use strict";Ns();dM=/^#{1,6}\s+/,cM=/^(```|\*\*|__|`|\*|_)([\s\S]+?)\1$/,Eu=/^STANCE:\s+(.+)$/,wu=/^([A-Z][A-Z0-9_]*):\s*(.+)$/,uM=/^(```|\*\*|__|`|\*|_)([A-Za-z0-9_-]+)\1/,mM=/^[A-Za-z0-9_-]+/});function iE(t,e,r){return n=>{let s=r(),i=Date.now(),o=JSON.stringify({kind:n.kind,tool:n.tool??null,summary:n.summary??null,id:n.id??null,elapsedMs:n.elapsedMs??null,status:n.status??null}),a=Buffer.byteLength(o,"utf8");if(a<=262144){t.insertSessionEvent({run_id:e,step_id:s,kind:n.kind,timestamp_ms:i,payload:o});return}let l=o.slice(0,1024),d=JSON.stringify({truncated:!0,size:a,preview:l});if(s!==null){let c=t.insertStepArtifact({step_id:s,kind:"session_event_overflow",content:o});t.insertSessionEvent({run_id:e,step_id:s,kind:n.kind,timestamp_ms:i,payload:d,payload_truncated:1,overflow_artifact_id:c.id})}else t.insertSessionEvent({run_id:e,step_id:null,kind:n.kind,timestamp_ms:i,payload:d,payload_truncated:1,overflow_artifact_id:null})}}var oE=w(()=>{"use strict"});import{readFileSync as fM}from"node:fs";import{dirname as pM,join as _M}from"node:path";import{fileURLToPath as hM}from"node:url";function EM(t){return t.rules.map(e=>({command:e.command,subcommands:e.argv_patterns.map(r=>r.trim().split(/\s+/)),kind:e.kind}))}function bM(t){let e=[],r=[];for(let n of t)gM.has(n)?(r.length>0&&e.push(r),r=[]):r.push(n);return r.length>0&&e.push(r),e}function SM(t,e){if(t.length===0)return{matched:!1};let r=0;for(;r<t.length&&yM.test(t[r]);)r+=1;if(r>=t.length)return{matched:!1};let n=t[r],s=t.slice(r+1);for(let i of e)if(n===i.command){for(let o of i.subcommands)if(o.every((l,d)=>s[d]===l))return{matched:!0,kind:i.kind}}return{matched:!1}}function kM(t,e){if(t.length===0)return{matched:!1};let r=bM(t);for(let n of r){let s=SM(n,e);if(s.matched)return s}return{matched:!1}}function bu(t){return kM(t,vM)}function IM(t){return t.replace(/&&/g," && ").replace(/\|\|/g," || ").replace(/;/g," ; ").replace(/\|/g," | ").replace(/(?<!\d)>{1,2}/g,e=>` ${e} `).replace(/(?<!\d)<{1,2}/g,e=>` ${e} `).replace(/\s+/g," ").trim()}function Su(t){return IM(t).split(" ").filter(e=>e.length>0)}var gM,yM,wM,TM,vM,aE=w(()=>{"use strict";gM=new Set(["&&","||",";","|",">",">>","<","<<"]),yM=/^[A-Za-z_][A-Za-z0-9_]*=/;wM=pM(hM(import.meta.url)),TM=JSON.parse(fM(_M(wM,"side_effect_classifier.json"),"utf-8")),vM=EM(TM)});function la(t){return{context:{outcomes:t.outcomes,inputs:t.inputs,item:t.iteration?.item,index:t.iteration?.index},outcomes:t.outcomes,inputs:t.inputs,item:t.iteration?.item,index:t.iteration?.index}}async function lE(t,e){try{return await tn(ku(t)??t,la(e))===!0}catch{return!1}}async function da(t,e){try{return await tn(ku(t)??t,la(e))}catch{return}}async function dE(t,e){if(typeof t!="string")return t;let r=ku(t);if(r===null)return t;try{return await tn(r,la(e))}catch{return}}async function cE(t,e){let r=Array.from(t.matchAll(/=\{\{([\s\S]*?)\}\}/g));if(r.length===0)return t;let n="",s=0;for(let i of r){let o=i.index??0;n+=t.slice(s,o);let a=i[1]?.trim()??"";try{n+=NM(await tn(a,la(e)))}catch{n+=""}s=o+i[0].length}return n+=t.slice(s),n}function ku(t){let e=t.trim();return!e.startsWith("={{")||!e.endsWith("}}")?null:e.slice(3,-2).trim()}function NM(t){return t==null?"":typeof t=="string"?t:JSON.stringify(t)}var ei=w(()=>{"use strict";Xs()});import{existsSync as uE,readdirSync as mE,readFileSync as AM,statSync as fE}from"node:fs";import{join as ua}from"node:path";function pE(t,e,r,n){return Object.assign(t,{stateId:e,state:r,displayName:n})}function J(t,e){return t.dal.insertStep({...e,parent_step_id:t.parent_step_id})}function G(t,e){return e.startsWith("@terminal:")?{kind:"terminal",terminal:e.slice(10)}:t.states[e]===void 0?{kind:"escalate",token:e,reason:`unknown state ref '${e}'`}:{kind:"state",state:e}}function mt(t,e,r,n,s={}){let i=D(),o=J(t,{run_id:t.run_id,state_name:e.name});t.steps_executed+=1,t.dal.finishStep(o.id,null,`escalation:${n}`.slice(0,480)),t.dal.setRunPausedState(t.run_id,`${ti}${e.id}`,i);let a=t.dal.getRun(t.run_id),l=In(r)?"generic":"unhandled";return t.dal.raiseAttention({kind:Xi,severity:"attn",project_id:t.project.id,run_id:t.run_id,requires_user:!0,payload:JSON.stringify({run_id:t.run_id,step_id:o.id,project_id:t.project.id,workflow_name:t.workflow.name,workflow_version_id:a?.workflow_version_id??null,step:{id:e.id,name:e.name,type:e.type},tier:l,token:r,reason:n,declared_outcomes:[...s.declared_outcomes??[]],agent_output:xM(s.agent_output??n),paused_at:i,created_at:i})}),t.dal.pauseJob(t.job.id),{kind:"paused"}}function xM(t){return t.length>8e3?`${t.slice(0,8e3)}
2202
2202
  \u2026[truncated ${t.length-8e3} chars]`:t}function K(t,e,r,n){t.outcomes[e]=n,r!==e&&(t.outcomes[r]=n)}function Z(t){return t.terminals.aborted?.kind==="failure"?"aborted":Object.entries(t.terminals).find(([,r])=>r.kind==="failure")?.[0]??Object.keys(t.terminals)[0]??"aborted"}function _E(t,e){let r=e.trim();if(r.startsWith("[")){try{let n=JSON.parse(r);if(Array.isArray(n)&&n.every(s=>typeof s=="string"))return n}catch{return null}return null}if(r.startsWith("job.payload.")){let n=r.slice(12);if(n.length===0)return null;let i=Or(t.job.payload)?.[n];if(Array.isArray(i)&&i.every(o=>typeof o=="string"))return i}return null}async function st(t,e,r){let n=t.replace(/(?<!=)\{\{\s*([a-zA-Z0-9_.]+)\s*\}\}/g,(s,i)=>{if(i==="run_id")return String(e.run_id);if(i==="state_id")return r;if(i==="item")return e.iteration?.item??"";if(i==="index")return e.iteration===null?"":String(e.iteration.index);if(i.startsWith("project.")){let o=i.slice(8);if(o==="id")return String(e.project.id);if(o==="name")return e.project.name;if(o==="local_path")return e.project.local_path;if(o==="default_branch")return e.project.default_branch??"";if(o==="owner"){let a=e.project.name.indexOf("/");return a>0?e.project.name.slice(0,a):""}if(o==="repo"){let a=e.project.name.indexOf("/");return a>0?e.project.name.slice(a+1):e.project.name}if(o==="test_command"){let a=e.project.test_command;return a===null||a===""?"npm test":a}return""}if(i==="job_payload"){let o=Or(e.job.payload);return o===null?"":JSON.stringify(o)}if(i.startsWith("job_payload.")){let o=i.slice(12),l=Or(e.job.payload)?.[o];return l==null?"":String(l)}if(i.startsWith("outcomes.")){let o=RM(e.outcomes,i.slice(9));return o==null?"":typeof o=="string"?o:JSON.stringify(o)}return""});return cE(n,e)}function RM(t,e){let r=t;for(let n of e.split(".")){if(r===null||typeof r!="object"||Array.isArray(r))return;r=r[n]}return r}function Or(t){if(t===null)return null;try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}catch{return null}}async function ri(t){let{context:e,stateId:r,member:n,prompt:s,stepId:i,timeoutMs:o,writesToProjectPath:a}=t,l=iE(e.dal,e.run_id,()=>i),d=Iu(e,r),c={violation:null},u=y=>{if(l(y),c.violation===null&&y.kind==="tool_use"&&y.tool==="Bash"&&y.summary){let E=Su(y.summary),v=bu(E);v.matched&&!d&&(c.violation={summary:y.summary,kind:v.kind})}},m=new Date(Date.now()-1),f=0,p=0,h=y=>{u(y),LM(y,(E,v)=>{f+=E,p+=v})},_=await To({sessionid:n.sessionid,sessiondir:n.sessiondir,prompt:s,timeoutMs:o,dal:e.dal,team_member_id:n.id,onProgress:h});e.dal.insertSessionEvent({run_id:e.run_id,step_id:i,kind:"agent_call",timestamp_ms:Date.now(),payload:JSON.stringify({alias:n.alias,provider:Qe(n),model:n.model??"unknown",tokens_in:f,tokens_out:p,wall_time_ms:_.ms})}),OM(e.project,e.dal,m);let g=c.violation;return g!==null?{kind:"g3_violation",summary:g.summary,violationKind:g.kind}:!a&&e.project.local_path.trim().length>0&&Nu(e.project.local_path,m)?{kind:"g2_violation"}:{kind:"ok",text:_.text,ms:_.ms,argv:_.argv}}function LM(t,e){let r=t.raw;if(r==null)return;let s=r.message?.usage;if(s!==void 0){let o=ca(s.input_tokens),a=ca(s.output_tokens);(o>0||a>0)&&e(o,a);return}let i=r.usage;if(i!==void 0){let o=ca(i.input_tokens),a=ca(i.output_tokens);(o>0||a>0)&&e(o,a)}}function ca(t){return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:0}async function ar(t,e,r,n){if(r.sessionid===null)return;let s=`${e}:write_back`,i=J(t,{run_id:t.run_id,state_name:s});t.steps_executed+=1;let a=`This state completed successfully.${typeof n=="string"?` Category hint: "${n}".`:""} Did you learn anything worth preserving in durable-memory? If yes, use Write to create/update an entry under <project>/durable-memory/<descriptive-name>.md. Include YAML frontmatter (name/description/type[/tags]). Be brief \u2014 one entry per insight. If you didn't learn anything new, respond with \`STANCE: no_writeback\` and the engine moves on.`;try{let l=await ri({context:t,stateId:s,member:r,prompt:a,stepId:i.id,timeoutMs:t.workflow.default_task_timeout_ms,writesToProjectPath:!1});if(l.kind==="ok"){t.dal.insertStepArtifact({step_id:i.id,kind:"write_back_transcript",content:l.text});let d=!l.text.includes("STANCE: no_writeback");t.dal.finishStep(i.id,d?"wrote_back":"no_writeback","write_back_turn")}else t.dal.finishStep(i.id,null,`write_back_${l.kind}`)}catch{t.dal.finishStep(i.id,null,"write_back_error")}}async function Xn(t,e,r,n,s,i,o,a=!1,l){let d=t.membersByAlias.get(r.alias);if(d===void 0||d.sessionid===null)return{outcome:null,text:"",status_detail:`missing_agent:${r.alias}`};let c=J(t,{run_id:t.run_id,state_name:e});t.steps_executed+=1;let u=[];d.prompt_snapshot!==null&&d.prompt_snapshot.length>0&&u.push(d.prompt_snapshot),i&&u.push(f_(s)),l!=null&&l.length>0&&u.push(l);let m=r.prompt_template!==void 0?await st(r.prompt_template,t,e):"";m.length>0&&u.push(m),n!==null&&n.length>0&&u.push(n);let f=u.join(`
2203
2203
 
2204
2204
  `);try{let p=await ri({context:t,stateId:e,member:d,prompt:f,stepId:c.id,timeoutMs:o,writesToProjectPath:a});if(p.kind==="g3_violation"||p.kind==="g2_violation"){let _=p.kind==="g3_violation"?`policy_violation:side_effect_without_pause:${p.violationKind}`:"policy_violation:writes_to_project_path";return t.dal.insertSessionEvent({run_id:t.run_id,step_id:c.id,kind:"policy_violation",timestamp_ms:Date.now(),payload:JSON.stringify(p.kind==="g3_violation"?{violation:"side_effect_without_pause",state_id:e,kind:p.violationKind,command_summary:p.summary,message:`State ${e} ran a classified side-effect command (${p.violationKind}) without a preceding approved Pause`}:{violation:"writes_to_project_path",state_id:e,message:`State ${e} wrote to project.local_path without writes_to_project_path: true`})}),t.dal.finishStep(c.id,null,_),{outcome:null,text:"",status_detail:_}}if(t.dal.insertStepArtifact({step_id:c.id,kind:`${e}_transcript`,content:p.text}),t.transcripts[e]=p.text,!i)return t.dal.finishStep(c.id,"done",`chat_ms=${p.ms}`),t.outcomes[e]="done",{outcome:"done",text:p.text,status_detail:`chat_ms=${p.ms}`};let h=Qs(p.text,s);return t.dal.finishStep(c.id,h.outcome,h.outcome!==null?`chat_ms=${p.ms}`:h.reason),h.outcome!==null&&(t.outcomes[e]=h.outcome),{outcome:h.outcome,text:p.text,status_detail:h.outcome!==null?`chat_ms=${p.ms}`:h.reason}}catch(p){let h=p instanceof Re?`chat_${p.kind}`:"chat_other";return t.dal.finishStep(c.id,null,h),{outcome:null,text:"",status_detail:h}}}function Jn(t,e){return(e?.length??0)>0?tE(t.project.local_path,e):null}function hE(t){return bu(Su(t))}function Iu(t,e){let r=t.dal.query(`SELECT state_name, outcome FROM step
@@ -2228,7 +2228,7 @@ ${p.text}`,["approve","request_changes"],!0,s,e.writes_to_project_path===!0)));i
2228
2228
  JOIN job j ON j.id = r.job_id
2229
2229
  WHERE j.project_id = ?
2230
2230
  AND r.terminal_state IS NOT NULL
2231
- ${r!==null?"AND r.id > ?":""}`,...r!==null?[e.id,r]:[e.id]);return{count:n[0]?.cnt??0,maxRunId:n[0]?.max_id??0}}function ww(t){for(let e of Uj)try{e(t)}catch{}}var ya,oi,Uj,Cu=w(()=>{"use strict";ya="memory_policy",oi="memory_consolidation_request";Uj=[Pj]});var Iw={};he(Iw,{getOrInsertConsolidationWorkflow:()=>vw,runJobById:()=>Xj,runOnce:()=>nn,startWorker:()=>Jj});import{createHash as Wj}from"node:crypto";import{readFileSync as qj}from"node:fs";import{pathToFileURL as Bj}from"node:url";function vw(t,e="durable-memory-consolidation-v2"){let r=t.getWorkflowByName(e);if(r!==null)return r;try{Jy({swallow:!0});let n=aa(e);if(n===null)return null;let s=qj(n,"utf8"),i=Tt(s);return t.insertWorkflow({name:e,version:i.version,definition_schema_version:i.definition_schema_version,definition:s,source_uri:Bj(n).href,source_sha256:Wj("sha256").update(s).digest("hex")})}catch{return null}}async function nn(t){let e=Date.now(),r=null;try{return r=t.dal.claimNextJobWithConcurrency({worker_id:t.worker_id,lease_ms:t.lease_ms??Tw,evaluator:n=>Sw(t.dal,n)}),r===null?null:await bw(t.dal,r,e)}catch(n){if(r!==null)return Mr(t.dal,r,"worker_run_failed",rn(n),e);try{t.dal.raiseAttention({kind:"worker_run_failed",severity:"error",payload:JSON.stringify({error:Ea(rn(n))})})}catch{}return null}finally{t.max_concurrent}}async function Xj(t){let e=Date.now(),r=null;try{let n=t.dal.claimJobByIdWithConcurrency({job_id:t.job_id,worker_id:t.worker_id,lease_ms:t.lease_ms??Tw,evaluator:s=>Sw(t.dal,s)});return n.claimed?(r=n.job,{claimed:!0,...await bw(t.dal,r,e)}):n}catch(n){if(r!==null)return{claimed:!0,...Mr(t.dal,r,"worker_run_failed",rn(n),e)};try{t.dal.raiseAttention({kind:"worker_run_failed",severity:"error",payload:JSON.stringify({error:Ea(rn(n)),job_id:t.job_id})})}catch{}return{claimed:!1,reason:"not_claimable",job_id:t.job_id}}finally{t.max_concurrent}}async function bw(t,e,r){let n=t.getProjectByJob(e.id);if(n===null)return Mr(t,e,"worker_project_missing","project_not_found",r);let s=e.source===ya&&e.source_ref===oi,i=e.run_id===null?null:t.getRun(e.run_id),o;if(i!==null?o=t.getWorkflow(i.workflow_id):s?o=vw(t):o=kw(t,e,n),o===null)return Mr(t,e,"worker_workflow_missing","workflow_not_found",r,n);let a=t.getTeam(i?.team_id??n.team_id),l=a===null?[]:t.listTeamMembers(a.id);if(a===null||l.length===0)return Mr(t,e,"worker_team_missing","team_not_found",r,n);let d;try{d=Tt(o.definition)}catch(u){return Mr(t,e,"worker_workflow_invalid",rn(u),r,n)}let c=Gj(d,l);if(c.length>0)return Mr(t,e,"worker_team_missing_aliases",`missing_aliases:${c.join(",")}`,r,n,a);try{let u=await iw({dal:t,job:e,workflow:d,team:a,members:l,workflowRow:o});return t.setJobRun(e.id,u.run_id),u.paused===!0?{job_id:e.id,run_id:u.run_id,status:"paused",terminal_state:null,ms:Date.now()-r}:(t.releaseJob(e.id,"done",null),{job_id:e.id,run_id:u.run_id,status:"done",terminal_state:u.terminal_state,ms:Date.now()-r})}catch(u){return Mr(t,e,"worker_run_failed",rn(u),r,n,a)}}function Sw(t,e){let r=t.getProjectByJob(e.id);if(r===null)return{concurrency_key:e.concurrency_key_resolved,concurrent_limit:1};let n=kw(t,e,r);if(n===null)return{concurrency_key:e.concurrency_key_resolved,concurrent_limit:1};let s=null;try{s=Tt(n.definition)}catch{s=null}return Vo({workflow:s,job:e,project:r})}function kw(t,e,r){return e.workflow_id_override!==null?t.getWorkflow(e.workflow_id_override):t.getWorkflowByName(r.workflow_name)}async function Jj(t){let e=!1,r=null,n=Promise.resolve(),s=async()=>{if(!e){try{let i;do i=await nn(t);while(!e&&i!==null)}catch(i){try{t.dal.raiseAttention({kind:"worker_loop_error",severity:"error",payload:JSON.stringify({error:Ea(rn(i))})})}catch{}}e||(r=setTimeout(()=>{n=s()},t.poll_interval_ms??Hj))}};return n=s(),{stop:async()=>{e=!0,r!==null&&clearTimeout(r),await n.catch(()=>{})}}}function Mr(t,e,r,n,s,i,o){let a=Ea(n);return t.releaseJob(e.id,"failed",a),t.raiseAttention({kind:r,severity:"error",project_id:i?.id??e.project_id,payload:JSON.stringify({job_id:e.id,team_id:o?.id??null,error:a})}),{job_id:e.id,run_id:null,status:"failed",terminal_state:null,ms:Date.now()-s}}function rn(t){return t instanceof Error?t.message:String(t)}function Ea(t){return t.length>4096?t.slice(0,4096):t}function Gj(t,e){let r=Ew(t);if(r.length===0)return[];let n=new Set(e.map(s=>s.alias));return r.filter(s=>!n.has(s))}var Tw,Hj,wa=w(()=>{"use strict";gu();uw();Gs();ga();Zc();Cu();Tw=6e5,Hj=5e3});import{existsSync as Kj,readFileSync as Vj}from"node:fs";import{marked as Yj}from"marked";function Rw(t,e){t.get("/layman",r=>r.html(Fe("Layman Home",zj(e.dal)))),t.get("/api/layman",r=>r.json($w(e.dal))),t.get("/layman/start/:workflow",r=>{let n=xw(r);return n===null?r.notFound():r.html(Fe(`Start ${Kn(n)}`,eP(e.dal,n)))}),t.post("/layman/start/:workflow",async r=>{let n=xw(r);return n===null?r.notFound():n==="newspaper"?Nw(r,e.dal):tP(r,e.dal,n)}),t.get("/layman/run/:id",r=>{let n=zr(e.dal,Ta(r,"id"));return n===null?r.notFound():r.html(Fe(`Run ${n.id}`,sP(e.dal,n)))}),t.get("/api/layman/run/:id",r=>{let n=zr(e.dal,Ta(r,"id"));return n===null?r.notFound():r.json(_P(e.dal,n))}),t.post("/layman/run/:id/respond",async r=>oP(r,e.dal)),t.get("/layman/newspaper",r=>r.html(Fe("Newspaper Subscriptions",fP(e.dal)))),t.post("/layman/newspaper",r=>Nw(r,e.dal)),t.delete("/layman/newspaper/:id",r=>Aw(r,e.dal)),t.post("/layman/newspaper/:id/delete",r=>Aw(r,e.dal))}function zj(t){let e=$w(t);return`<section class="layman-home">
2231
+ ${r!==null?"AND r.id > ?":""}`,...r!==null?[e.id,r]:[e.id]);return{count:n[0]?.cnt??0,maxRunId:n[0]?.max_id??0}}function ww(t){for(let e of Uj)try{e(t)}catch{}}var ya,oi,Uj,Cu=w(()=>{"use strict";ya="memory_policy",oi="memory_consolidation_request";Uj=[Pj]});var Iw={};he(Iw,{getOrInsertConsolidationWorkflow:()=>vw,runJobById:()=>Xj,runOnce:()=>sn,startWorker:()=>Jj});import{createHash as Wj}from"node:crypto";import{readFileSync as qj}from"node:fs";import{pathToFileURL as Bj}from"node:url";function vw(t,e="durable-memory-consolidation-v2"){let r=t.getWorkflowByName(e);if(r!==null)return r;try{Jy({swallow:!0});let n=aa(e);if(n===null)return null;let s=qj(n,"utf8"),i=Tt(s);return t.insertWorkflow({name:e,version:i.version,definition_schema_version:i.definition_schema_version,definition:s,source_uri:Bj(n).href,source_sha256:Wj("sha256").update(s).digest("hex")})}catch{return null}}async function sn(t){let e=Date.now(),r=null;try{return r=t.dal.claimNextJobWithConcurrency({worker_id:t.worker_id,lease_ms:t.lease_ms??Tw,evaluator:n=>Sw(t.dal,n)}),r===null?null:await bw(t.dal,r,e)}catch(n){if(r!==null)return Mr(t.dal,r,"worker_run_failed",nn(n),e);try{t.dal.raiseAttention({kind:"worker_run_failed",severity:"error",payload:JSON.stringify({error:Ea(nn(n))})})}catch{}return null}finally{t.max_concurrent}}async function Xj(t){let e=Date.now(),r=null;try{let n=t.dal.claimJobByIdWithConcurrency({job_id:t.job_id,worker_id:t.worker_id,lease_ms:t.lease_ms??Tw,evaluator:s=>Sw(t.dal,s)});return n.claimed?(r=n.job,{claimed:!0,...await bw(t.dal,r,e)}):n}catch(n){if(r!==null)return{claimed:!0,...Mr(t.dal,r,"worker_run_failed",nn(n),e)};try{t.dal.raiseAttention({kind:"worker_run_failed",severity:"error",payload:JSON.stringify({error:Ea(nn(n)),job_id:t.job_id})})}catch{}return{claimed:!1,reason:"not_claimable",job_id:t.job_id}}finally{t.max_concurrent}}async function bw(t,e,r){let n=t.getProjectByJob(e.id);if(n===null)return Mr(t,e,"worker_project_missing","project_not_found",r);let s=e.source===ya&&e.source_ref===oi,i=e.run_id===null?null:t.getRun(e.run_id),o;if(i!==null?o=t.getWorkflow(i.workflow_id):s?o=vw(t):o=kw(t,e,n),o===null)return Mr(t,e,"worker_workflow_missing","workflow_not_found",r,n);let a=t.getTeam(i?.team_id??n.team_id),l=a===null?[]:t.listTeamMembers(a.id);if(a===null||l.length===0)return Mr(t,e,"worker_team_missing","team_not_found",r,n);let d;try{d=Tt(o.definition)}catch(u){return Mr(t,e,"worker_workflow_invalid",nn(u),r,n)}let c=Gj(d,l);if(c.length>0)return Mr(t,e,"worker_team_missing_aliases",`missing_aliases:${c.join(",")}`,r,n,a);try{let u=await iw({dal:t,job:e,workflow:d,team:a,members:l,workflowRow:o});return t.setJobRun(e.id,u.run_id),u.paused===!0?{job_id:e.id,run_id:u.run_id,status:"paused",terminal_state:null,ms:Date.now()-r}:(t.releaseJob(e.id,"done",null),{job_id:e.id,run_id:u.run_id,status:"done",terminal_state:u.terminal_state,ms:Date.now()-r})}catch(u){return Mr(t,e,"worker_run_failed",nn(u),r,n,a)}}function Sw(t,e){let r=t.getProjectByJob(e.id);if(r===null)return{concurrency_key:e.concurrency_key_resolved,concurrent_limit:1};let n=kw(t,e,r);if(n===null)return{concurrency_key:e.concurrency_key_resolved,concurrent_limit:1};let s=null;try{s=Tt(n.definition)}catch{s=null}return Vo({workflow:s,job:e,project:r})}function kw(t,e,r){return e.workflow_id_override!==null?t.getWorkflow(e.workflow_id_override):t.getWorkflowByName(r.workflow_name)}async function Jj(t){let e=!1,r=null,n=Promise.resolve(),s=async()=>{if(!e){try{let i;do i=await sn(t);while(!e&&i!==null)}catch(i){try{t.dal.raiseAttention({kind:"worker_loop_error",severity:"error",payload:JSON.stringify({error:Ea(nn(i))})})}catch{}}e||(r=setTimeout(()=>{n=s()},t.poll_interval_ms??Hj))}};return n=s(),{stop:async()=>{e=!0,r!==null&&clearTimeout(r),await n.catch(()=>{})}}}function Mr(t,e,r,n,s,i,o){let a=Ea(n);return t.releaseJob(e.id,"failed",a),t.raiseAttention({kind:r,severity:"error",project_id:i?.id??e.project_id,payload:JSON.stringify({job_id:e.id,team_id:o?.id??null,error:a})}),{job_id:e.id,run_id:null,status:"failed",terminal_state:null,ms:Date.now()-s}}function nn(t){return t instanceof Error?t.message:String(t)}function Ea(t){return t.length>4096?t.slice(0,4096):t}function Gj(t,e){let r=Ew(t);if(r.length===0)return[];let n=new Set(e.map(s=>s.alias));return r.filter(s=>!n.has(s))}var Tw,Hj,wa=w(()=>{"use strict";gu();uw();Gs();ga();Zc();Cu();Tw=6e5,Hj=5e3});import{existsSync as Kj,readFileSync as Vj}from"node:fs";import{marked as Yj}from"marked";function Rw(t,e){t.get("/layman",r=>r.html(Fe("Layman Home",zj(e.dal)))),t.get("/api/layman",r=>r.json($w(e.dal))),t.get("/layman/start/:workflow",r=>{let n=xw(r);return n===null?r.notFound():r.html(Fe(`Start ${Kn(n)}`,eP(e.dal,n)))}),t.post("/layman/start/:workflow",async r=>{let n=xw(r);return n===null?r.notFound():n==="newspaper"?Nw(r,e.dal):tP(r,e.dal,n)}),t.get("/layman/run/:id",r=>{let n=Zr(e.dal,Ta(r,"id"));return n===null?r.notFound():r.html(Fe(`Run ${n.id}`,sP(e.dal,n)))}),t.get("/api/layman/run/:id",r=>{let n=Zr(e.dal,Ta(r,"id"));return n===null?r.notFound():r.json(_P(e.dal,n))}),t.post("/layman/run/:id/respond",async r=>oP(r,e.dal)),t.get("/layman/newspaper",r=>r.html(Fe("Newspaper Subscriptions",fP(e.dal)))),t.post("/layman/newspaper",r=>Nw(r,e.dal)),t.delete("/layman/newspaper/:id",r=>Aw(r,e.dal)),t.post("/layman/newspaper/:id/delete",r=>Aw(r,e.dal))}function zj(t){let e=$w(t);return`<section class="layman-home">
2232
2232
  <h1>Welcome</h1>
2233
2233
  <p class="muted">Choose a workflow and answer a few plain-language prompts.</p>
2234
2234
  <div class="grid">${va.map(Zj).join("")}</div>
@@ -2256,7 +2256,7 @@ ${p.text}`,["approve","request_changes"],!0,s,e.writes_to_project_path===!0)));i
2256
2256
  <label>Slug<input name="slug" placeholder="my-document" required></label>
2257
2257
  <label>Output directory<input name="output_dir" value="drafts"></label>
2258
2258
  <button type="submit">Start Document Wizard</button>
2259
- </form>`:Cw(n,"/layman/start/newspaper")}function Lw(t){return`<label>Project<select name="project_id" required>${t.map(e=>`<option value="${b(e.id)}">${b(e.name)}</option>`).join("")}</select></label>`}async function tP(t,e,r){let n=await t.req.parseBody(),s=jw(e,n);if(s===null)return t.html(Fe("Start workflow",'<p class="error">Choose a valid project.</p>'),400);let i=e.getWorkflowByName(r);if(i===null)return t.html(Fe("Start workflow",`<p class="error">${b(Kn(r))} is not loaded.</p>`),400);let o=r==="info-qa"?rP(n):nP(n);if(typeof o=="string")return t.html(Fe("Start workflow",`<p class="error">${b(o)}</p>`),400);let a=e.enqueueJob({project_id:s.id,workflow_id_override:i.id,source:"layman",source_ref:r,dedupe_key:`layman:${r}:${Date.now()}:${Math.random()}`,payload:JSON.stringify(o)}),l=await nn({dal:e,worker_id:`layman-start-${Date.now()}`}),d=e.getJob(a.id),c=l?.job_id===a.id?l.run_id:d?.run_id??null;return c===null?t.redirect("/layman?queued=1",302):t.redirect(`/layman/run/${c}`,302)}function rP(t){let e=it(t.question).trim();if(e.length===0)return"Enter a question.";let r=it(t.output_path).trim();return{question:e,...r.length>0?{output_path:r}:{}}}function nP(t){let e=it(t.task_description).trim(),r=vP(it(t.slug).trim()),n=it(t.output_dir).trim()||"drafts";return e.length===0?"Describe the document you want.":r.length===0?"Enter a document slug.":{task_description:e,slug:r,output_dir:n}}function sP(t,e){let r=e.workflow?.name??"unknown",n=`<h1>${b(Kn(r))}</h1>
2259
+ </form>`:Cw(n,"/layman/start/newspaper")}function Lw(t){return`<label>Project<select name="project_id" required>${t.map(e=>`<option value="${b(e.id)}">${b(e.name)}</option>`).join("")}</select></label>`}async function tP(t,e,r){let n=await t.req.parseBody(),s=jw(e,n);if(s===null)return t.html(Fe("Start workflow",'<p class="error">Choose a valid project.</p>'),400);let i=e.getWorkflowByName(r);if(i===null)return t.html(Fe("Start workflow",`<p class="error">${b(Kn(r))} is not loaded.</p>`),400);let o=r==="info-qa"?rP(n):nP(n);if(typeof o=="string")return t.html(Fe("Start workflow",`<p class="error">${b(o)}</p>`),400);let a=e.enqueueJob({project_id:s.id,workflow_id_override:i.id,source:"layman",source_ref:r,dedupe_key:`layman:${r}:${Date.now()}:${Math.random()}`,payload:JSON.stringify(o)}),l=await sn({dal:e,worker_id:`layman-start-${Date.now()}`}),d=e.getJob(a.id),c=l?.job_id===a.id?l.run_id:d?.run_id??null;return c===null?t.redirect("/layman?queued=1",302):t.redirect(`/layman/run/${c}`,302)}function rP(t){let e=it(t.question).trim();if(e.length===0)return"Enter a question.";let r=it(t.output_path).trim();return{question:e,...r.length>0?{output_path:r}:{}}}function nP(t){let e=it(t.task_description).trim(),r=vP(it(t.slug).trim()),n=it(t.output_dir).trim()||"drafts";return e.length===0?"Describe the document you want.":r.length===0?"Enter a document slug.":{task_description:e,slug:r,output_dir:n}}function sP(t,e){let r=e.workflow?.name??"unknown",n=`<h1>${b(Kn(r))}</h1>
2260
2260
  <p><a href="/layman">Layman home</a></p>`;if(e.terminal_state!==null)return`${n}${lP(t,e,r)}`;let s=Dw(t,e);return s!==null&&s.status==="waiting_operator"?`${n}${iP(e,s)}`:`${n}<section hx-get="/layman/run/${b(e.id)}" hx-trigger="every 2s" hx-swap="outerHTML">
2261
2261
  <h2>Running</h2>
2262
2262
  <p class="muted">Current stage: <strong>${b(e.current_state??"starting")}</strong></p>
@@ -2272,13 +2272,13 @@ ${p.text}`,["approve","request_changes"],!0,s,e.writes_to_project_path===!0)));i
2272
2272
  <button type="submit" name="done" value="false">Send response</button>
2273
2273
  <button type="submit" name="done" value="true">Done with this stage</button>
2274
2274
  </form>
2275
- </section>`}async function oP(t,e){let r=Ta(t,"id"),n=await t.req.parseBody(),s=Number(it(n.step_id)),i=it(n.input),o=it(n.done)==="true";if(!Number.isInteger(s))return t.html(Fe("Interactive response",'<p class="error">Missing interactive step.</p>'),400);let a=e.resumeInteractive(s,i,o);return a.resumed?(aP(e,a.run.id),await nn({dal:e,worker_id:`layman-respond-${Date.now()}`}),t.redirect(`/layman/run/${r}`,302)):t.html(Fe("Interactive response",`<p class="error">Could not submit response: ${b(a.reason)}</p>`),400)}function aP(t,e){let r=t.getRun(e);if(r===null||r.current_state===null)return;let n=t.getWorkflow(r.workflow_id);if(n!==null)try{let s=JSON.parse(n.definition);if(!Mu(s)||s.definition_schema_version!==3||!Array.isArray(s.steps))return;let i=s.steps.find(o=>Mu(o)&&o.name===r.current_state&&typeof o.id=="string");Mu(i)&&typeof i.id=="string"&&t.setRunCurrentState(r.id,i.id)}catch{return}}function lP(t,e,r){let n=EP(e.terminal_state);return`<section class="metric terminal-run">
2275
+ </section>`}async function oP(t,e){let r=Ta(t,"id"),n=await t.req.parseBody(),s=Number(it(n.step_id)),i=it(n.input),o=it(n.done)==="true";if(!Number.isInteger(s))return t.html(Fe("Interactive response",'<p class="error">Missing interactive step.</p>'),400);let a=e.resumeInteractive(s,i,o);return a.resumed?(aP(e,a.run.id),await sn({dal:e,worker_id:`layman-respond-${Date.now()}`}),t.redirect(`/layman/run/${r}`,302)):t.html(Fe("Interactive response",`<p class="error">Could not submit response: ${b(a.reason)}</p>`),400)}function aP(t,e){let r=t.getRun(e);if(r===null||r.current_state===null)return;let n=t.getWorkflow(r.workflow_id);if(n!==null)try{let s=JSON.parse(n.definition);if(!Mu(s)||s.definition_schema_version!==3||!Array.isArray(s.steps))return;let i=s.steps.find(o=>Mu(o)&&o.name===r.current_state&&typeof o.id=="string");Mu(i)&&typeof i.id=="string"&&t.setRunCurrentState(r.id,i.id)}catch{return}}function lP(t,e,r){let n=EP(e.terminal_state);return`<section class="metric terminal-run">
2276
2276
  <h2>${n?"Complete":"Stopped"}</h2>
2277
2277
  <p>Status: <strong>${b(e.terminal_state)}</strong></p>
2278
2278
  ${n?dP(t,e,r):uP(e)}
2279
2279
  <h2>Stage Log</h2>
2280
2280
  ${Ow(e)}
2281
- </section>`}function dP(t,e,r){if(r==="info-qa"){let n=ju(e,["info_qa_consolidated"]);return`<h3>Answer</h3><div class="metric">${Pu(n??"No answer artifact was recorded yet.")}</div>`}if(r==="document-creation")return cP(t,e);if(r==="newspaper"){let n=ju(e,["newspaper_consolidated"]);return`<h3>Digest</h3><div class="metric">${Pu(n??"No digest artifact was recorded yet.")}</div>`}return'<p class="muted">No layman output renderer for this workflow.</p>'}function cP(t,e){let r=Zr(t,e.id),n=$u(r,["render_docx"]),s=$u(r,["render_xlsx"]),i=ju(e,["review:coder[0]_transcript","chat_output_md"])??mP($u(r,["document_md","markdown"])),o=[n,s].filter(a=>a!==null).map(a=>`<li><a href="file://${b(a)}">${b(a)}</a></li>`).join("");return`<h3>Document Preview</h3>
2281
+ </section>`}function dP(t,e,r){if(r==="info-qa"){let n=ju(e,["info_qa_consolidated"]);return`<h3>Answer</h3><div class="metric">${Pu(n??"No answer artifact was recorded yet.")}</div>`}if(r==="document-creation")return cP(t,e);if(r==="newspaper"){let n=ju(e,["newspaper_consolidated"]);return`<h3>Digest</h3><div class="metric">${Pu(n??"No digest artifact was recorded yet.")}</div>`}return'<p class="muted">No layman output renderer for this workflow.</p>'}function cP(t,e){let r=Qr(t,e.id),n=$u(r,["render_docx"]),s=$u(r,["render_xlsx"]),i=ju(e,["review:coder[0]_transcript","chat_output_md"])??mP($u(r,["document_md","markdown"])),o=[n,s].filter(a=>a!==null).map(a=>`<li><a href="file://${b(a)}">${b(a)}</a></li>`).join("");return`<h3>Document Preview</h3>
2282
2282
  <pre>${b(TP(wP(i??"No preview available."),30))}</pre>
2283
2283
  <h3>Downloads</h3>
2284
2284
  ${o.length>0?`<ul>${o}</ul>`:'<p class="muted">No rendered files found yet.</p>'}`}function uP(t){let e=[...t.steps].reverse().find(r=>r.status_detail!==null);return`<p class="error">${b(e?.status_detail??"The workflow did not complete successfully.")}</p>`}function ju(t,e){for(let r of[...t.steps].reverse())for(let n of e){let s=[...r.artifacts].reverse().find(i=>i.kind===n&&i.content!==null);if(s?.content!==null&&s?.content!==void 0)return s.content}return null}function $u(t,e){for(let r of[...t].reverse())if(e.includes(r.kind)&&r.path!==null)return r.path;return null}function mP(t){if(t===null||!Kj(t)||!t.endsWith(".md"))return null;try{return Vj(t,"utf8")}catch{return null}}function fP(t){let e=t.listProjects();return`<h1>Newspaper Subscriptions</h1>
@@ -2307,7 +2307,7 @@ ${p.text}`,["approve","request_changes"],!0,s,e.writes_to_project_path===!0)));i
2307
2307
  WHERE w.name = ?
2308
2308
  ORDER BY pw.id DESC`,"newspaper")}function Dw(t,e){for(let r of[...e.steps].reverse()){let n=t.getInteractiveSessionByStepId(r.id);if(n!==null)return n}return null}function jw(t,e){let r=Number(it(e.project_id));return Number.isInteger(r)?t.getProject(r):null}function gP(t){let e=it(t.schedule)||"daily";return e==="weekly"?{preset:e,cron:"0 6 * * 1"}:e==="custom"?{preset:e,cron:it(t.cron).trim()||"0 6 * * *"}:{preset:"daily",cron:"0 6 * * *"}}function xw(t){let e=t.req.param("workflow");return Du.includes(e)?e:null}function Kn(t){return va.find(e=>e.name===t)?.title??t}function yP(t){return t.split(/[_:-]/).filter(Boolean).map(e=>`${e[0]?.toUpperCase()??""}${e.slice(1)}`).join(" ")}function Pu(t){return Yj.parse(t,{async:!1})}function EP(t){return t==="done"||t==="pr_ready"||t==="merged"}function wP(t){return t.replace(/\n*STANCE:\s+\S+\s*$/,"").trimEnd()}function TP(t,e){return t.split(`
2309
2309
  `).slice(0,e).join(`
2310
- `)}function vP(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function it(t){return typeof t=="string"?t:""}function bP(t){if(t===null)return{};try{let e=JSON.parse(t);if(e!==null&&typeof e=="object"&&!Array.isArray(e))return e}catch{return{}}return{}}function Mu(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ta(t,e){return Number(t.req.param(e))}var va,Du,Pw=w(()=>{"use strict";wa();sr();mu();va=[{name:"info-qa",title:"Ask a Question",description:"Get a grounded answer from multiple researchers and one consolidator."},{name:"document-creation",title:"Create a Document",description:"Draft, review, and render a polished document with an interactive wizard."},{name:"newspaper",title:"Daily Newspaper",description:"Subscribe to recurring digests for topics you care about."}],Du=va.map(t=>t.name)});function kP(t){return t.replace(/^\/+/,"")}function Fw(t){return typeof t=="string"&&t!==""&&!t.includes("/")&&!t.includes("\\")}function Vn(t){if(t.mailboxKey!==void 0&&t.mailboxKey!==null&&t.mailboxKey!==""){let e=kP(t.mailboxKey),r=e.lastIndexOf("/");return(r>=0?e.slice(r+1):e).includes(".")&&(e=r>=0?e.slice(0,r+1):""),e!==""&&!e.endsWith("/")&&(e+="/"),e}return Fw(t.userId)&&Fw(t.deviceId)?`${t.userId}/${t.deviceId}/`:`${SP}/${t.identityId}/`}function NP(t){return String(Math.max(0,Math.floor(t))).padStart(IP,"0")}function Fu(t,e,r){return`${t}${e}${NP(r)}.json`}function ba(t,e){return`${t}${e}`}function Sa(t,e,r){let n=`${e}${r}`;if(!t.startsWith(n))return;let s=t.slice(n.length).match(/^(\d+)\.json$/);if(s===null)return;let i=Number(s[1]);return Number.isSafeInteger(i)?i:void 0}var SP,IP,ka=w(()=>{"use strict";SP="mailbox";IP=12});function dr(t,e){let r=Math.floor(t),n="",s=r;for(let c=0;c<12;c++)n=Ia[s&15]+n,s=Math.floor(s/16);let i=Math.floor(e()*4096)&4095,o="",a=i;for(let c=0;c<3;c++)o=Ia[a&15]+o,a=a>>4;let l=Ia[8|Math.floor(e()*4)&3],d="";for(let c=0;c<15;c++)d+=Ia[Math.floor(e()*16)&15];return n.slice(0,8)+"-"+n.slice(8,12)+"-7"+o+"-"+l+d.slice(0,3)+"-"+d.slice(3,15)}var Ia,Na=w(()=>{"use strict";Ia="0123456789abcdef"});function Wu(t,e){return!Number.isFinite(t)||t<=0?e:t}function qu(t){if(t===null||typeof t!="object")return!1;let e=t;return e.name==="NoSuchKey"||e.name==="NotFound"||e.Code==="NoSuchKey"||e.code==="NoSuchKey"||e.$metadata!==void 0&&e.$metadata.httpStatusCode===404}function Hw(t){return t.conversation_id===Bw&&RP(t.payload)}function RP(t){return typeof t=="object"&&t!==null&&t.kind==="heartbeat"}function LP(t){let e=typeof t.hb=="string"&&t.hb!==""?t.hb:Hw(t)?t.timestamp:void 0;if(e===void 0)return;let r=Date.parse(e);return Number.isFinite(r)?r:void 0}var Uw,Ww,qw,AP,Bw,xP,Uu,sn,Aa=w(()=>{"use strict";ka();Na();Uw=3e3,Ww=1e4,qw=12e3,AP=1e3,Bw="__lmctl_heartbeat__",xP={kind:"heartbeat"},Uu={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t)},sn=class{opts;basePrefix;ownStream;peerStream;cursor;ownSeq;bootstrapped=!1;bootstrapInFlight=null;bootstrapPromise=null;writeChain=Promise.resolve();readIntervalMs;heartbeatIdleMs;backoffReadIntervalMs;running=!1;stopped=!1;stopRequested=!1;timerHandle=null;heartbeatTimerHandle=null;lastWriteMs;lastPeerHeartbeatMs;tickInFlight=null;constructor(e){this.opts=e,this.basePrefix=Vn({identityId:e.identityId,userId:e.userId,deviceId:e.deviceId,mailboxKey:e.mailboxKey}),this.ownStream=e.selfRole==="agent"?"local":"web",this.peerStream=e.selfRole==="agent"?"web":"local",this.cursor=e.cursor,this.readIntervalMs=Wu(e.readIntervalMs??e.pollIntervalMs??Uw,Uw),this.heartbeatIdleMs=Wu(e.heartbeatIdleMs??Ww,Ww),this.backoffReadIntervalMs=Wu(e.backoffReadIntervalMs??e.pollIntervalMs??qw,qw)}start(){if(this.stopped)throw new Error("SequentialMailboxClient: cannot start after stop()");this.running||(this.running=!0,this.bootstrapInFlight=this.bootstrapThenRun())}async stop(){this.stopped=!0,this.stopRequested=!0;let e=this.opts.timers??Uu;if(this.timerHandle!==null&&(e.clearTimeout(this.timerHandle),this.timerHandle=null),this.heartbeatTimerHandle!==null&&(e.clearTimeout(this.heartbeatTimerHandle),this.heartbeatTimerHandle=null),this.bootstrapInFlight!==null)try{await this.bootstrapInFlight}catch{}if(this.tickInFlight!==null)try{await this.tickInFlight}catch{}this.running=!1}async putMessage(e){return this.putEnvelope(e.conversation_id,e.payload)}getCursor(){return this.cursor}getMailboxBasePrefix(){return this.basePrefix}setPollIntervalMs(e){if(!Number.isFinite(e)||e<=0)throw new Error(`SequentialMailboxClient.setPollIntervalMs: invalid ms=${e}`);this.readIntervalMs=e}isPeerOn(){return this.peerIsOn((this.opts.now??Date.now)())}async bootstrapThenRun(){if(await this.ensureBootstrapped(),this.stopRequested){this.running=!1;return}this.runTick(),this.writeHeartbeat()}ensureBootstrapped(){return this.bootstrapped?Promise.resolve():(this.bootstrapPromise===null&&(this.bootstrapPromise=this.runColdStart()),this.bootstrapPromise)}async runColdStart(){try{let e=await this.maxSeq(this.ownStream);this.ownSeq=e,this.cursor===void 0&&(this.cursor=await this.maxSeq(this.peerStream)),this.bootstrapped=!0}catch(e){throw this.bootstrapPromise=null,this.emitError(e,"list"),e}}async maxSeq(e){let r=ba(this.basePrefix,e),n=0,s;do{let i=await this.opts.s3.send(new this.opts.commands.ListObjectsV2Command({Bucket:this.opts.bucket,Prefix:r,MaxKeys:AP,...s!==void 0&&{ContinuationToken:s}}));this.opts.onS3Op?.("list");for(let o of i.Contents??[]){let a=Sa(o.Key??"",this.basePrefix,e);a!==void 0&&a>n&&(n=a)}s=i.IsTruncated===!0?i.NextContinuationToken:void 0}while(s!==void 0);return n}async putEnvelope(e,r){let n=this.writeChain.then(()=>this.doPut(e,r));return this.writeChain=n.catch(()=>{}),n}async doPut(e,r){await this.ensureBootstrapped();let n=(this.opts.now??Date.now)(),s=new Date(n).toISOString(),i={message_id:dr(n,this.opts.random??Math.random),from:this.opts.selfRole,timestamp:s,hb:s,conversation_id:e,payload:r},o=(this.ownSeq??0)+1,a=Fu(this.basePrefix,this.ownStream,o);return await this.opts.s3.send(new this.opts.commands.PutObjectCommand({Bucket:this.opts.bucket,Key:a,Body:JSON.stringify(i),ContentType:"application/json"})),this.opts.onS3Op?.("put"),this.ownSeq=o,this.recordWrite(n),a}scheduleNextTick(e){if(this.stopRequested)return;let r=this.opts.timers??Uu;this.timerHandle=r.setTimeout(()=>{this.timerHandle=null,this.runTick()},e)}runTick(){this.stopRequested||(this.tickInFlight=(async()=>{try{await this.pollOnce()}finally{this.tickInFlight=null,this.stopRequested||this.scheduleNextTick(this.nextReadDelayMs())}})())}async pollOnce(){for(;!this.stopRequested;){let e=(this.cursor??0)+1,r=Fu(this.basePrefix,this.peerStream,e),n;try{let i=await this.opts.s3.send(new this.opts.commands.GetObjectCommand({Bucket:this.opts.bucket,Key:r}));if(this.opts.onS3Op?.("get"),i.Body===void 0){this.emitError(new Error(`GetObject ${r}: empty body`),"get"),this.advanceCursor(e);continue}n=await i.Body.transformToString("utf-8")}catch(i){if(qu(i)){this.opts.onS3Op?.("get");return}this.emitError(i,"get");return}let s;try{s=JSON.parse(n)}catch(i){this.emitError(i,"get"),this.advanceCursor(e);continue}if(this.recordPeerHeartbeat(s),Hw(s)){this.advanceCursor(e);continue}try{await this.opts.onMessage(s)}catch(i){this.emitError(i,"handle");return}this.advanceCursor(e)}}advanceCursor(e){this.cursor=e,this.notifyCursorAdvance(e)}nextReadDelayMs(){return this.peerIsOn((this.opts.now??Date.now)())?this.readIntervalMs:this.backoffReadIntervalMs}peerIsOn(e){return this.lastPeerHeartbeatMs!==void 0&&e-this.lastPeerHeartbeatMs<=this.heartbeatIdleMs}recordPeerHeartbeat(e){let r=LP(e);r!==void 0&&(this.lastPeerHeartbeatMs=r)}recordWrite(e){this.lastWriteMs=e,this.scheduleHeartbeatCheck(this.heartbeatIdleMs)}scheduleHeartbeatCheck(e){if(this.stopRequested)return;let r=this.opts.timers??Uu;this.heartbeatTimerHandle!==null&&r.clearTimeout(this.heartbeatTimerHandle),this.heartbeatTimerHandle=r.setTimeout(()=>{this.heartbeatTimerHandle=null,this.maybeWriteHeartbeat()},e)}async maybeWriteHeartbeat(){if(this.stopRequested)return;let e=(this.opts.now??Date.now)();if(this.lastWriteMs!==void 0){let r=e-this.lastWriteMs;if(r<this.heartbeatIdleMs){this.scheduleHeartbeatCheck(this.heartbeatIdleMs-r);return}}await this.writeHeartbeat()}async writeHeartbeat(){try{await this.putEnvelope(Bw,xP)}catch(e){this.emitError(e,"put"),this.scheduleHeartbeatCheck(this.heartbeatIdleMs)}}notifyCursorAdvance(e){if(this.opts.onCursorAdvance!==void 0)try{this.opts.onCursorAdvance(e)}catch(r){this.emitError(r,"handle")}}emitError(e,r){if(this.opts.onError!==void 0)try{this.opts.onError(e,r)}catch{}else console.error(`SequentialMailboxClient[${r}]`,e)}}});import{getConnInfo as OP}from"@hono/node-server/conninfo";function Xw(t,e){let r=e.bucket??CP,n=e.remoteAddressOf??(i=>MP(i)),s=i=>{let o=n(i);return DP(o)?null:i.json({error:"forbidden",message:"local-mailbox is loopback-only"},403)};t.get("/local-mailbox/object",async i=>{let o=s(i);if(o!==null)return o;let a=Bu(i.req.query("key"));if(typeof a!="string")return i.json({error:"bad_request",message:a.error},400);try{let l=await e.s3.send(new e.commands.GetObjectCommand({Bucket:r,Key:a}));if(l.Body===void 0)return i.json({error:"empty_body"},404);let d=await l.Body.transformToString("utf-8");return i.body(d,200,{"Content-Type":"application/octet-stream"})}catch(l){return qu(l)?i.json({error:"not_found"},404):i.json({error:"internal",message:Hu(l)},500)}}),t.put("/local-mailbox/object",async i=>{let o=s(i);if(o!==null)return o;let a=Bu(i.req.query("key"));if(typeof a!="string")return i.json({error:"bad_request",message:a.error},400);let l=new Uint8Array(await i.req.arrayBuffer());try{return await e.s3.send(new e.commands.PutObjectCommand({Bucket:r,Key:a,Body:l})),i.json({ok:!0})}catch(d){return i.json({error:"internal",message:Hu(d)},500)}}),t.get("/local-mailbox/list",async i=>{let o=s(i);if(o!==null)return o;let a=i.req.query("prefix")??"",l=Bu(a,{allowEmpty:!0});if(typeof l!="string")return i.json({error:"bad_request",message:l.error},400);let d=$P(i.req.query("maxKeys")),c=i.req.query("token");try{let u=await e.s3.send(new e.commands.ListObjectsV2Command({Bucket:r,Prefix:l,...d!==void 0?{MaxKeys:d}:{},...c!==void 0&&c!==""?{ContinuationToken:c}:{}}));return i.json({Contents:(u.Contents??[]).map(m=>({Key:m.Key,LastModified:m.LastModified instanceof Date?m.LastModified.toISOString():m.LastModified})),IsTruncated:u.IsTruncated??!1,...u.NextContinuationToken!==void 0?{NextContinuationToken:u.NextContinuationToken}:{}})}catch(u){return i.json({error:"internal",message:Hu(u)},500)}})}function Bu(t,e={}){if(t===void 0||t==="")return e.allowEmpty===!0?"":{error:"key required"};let r=t.replace(/^\/+/,"");return r.split("/").includes("..")?{error:"key must not contain '..'"}:r}function $P(t){if(t===void 0||t==="")return;let e=Number(t);return Number.isInteger(e)&&e>0?e:void 0}function MP(t){try{return OP(t).remote.address}catch{return}}function DP(t){return t===void 0||t===""?!1:!!(t==="127.0.0.1"||t==="::1"||t.startsWith("::ffff:127.")||t.startsWith("127."))}function Hu(t){return t instanceof Error?t.message:String(t)}var CP,Jw=w(()=>{"use strict";Aa();CP="local"});function Gw(t,e){t.get("/mailbox/workspace",r=>FP(r,e)),t.get("/mailbox/projects",r=>UP(r,e)),t.get("/mailbox/projects/:id",r=>WP(r,e)),t.post("/mailbox/projects",r=>qP(r,e)),t.patch("/mailbox/projects/:id",r=>BP(r,e)),t.delete("/mailbox/projects/:id",r=>HP(r,e)),t.post("/mailbox/projects/:project_id/prompts",r=>XP(r,e)),t.get("/mailbox/prompts/:id",r=>JP(r,e))}function FP(t,e){e.dal.ensureWorkspace({id:zn,name:Xu});let r=Kw(e.dal),n={id:zn,name:Xu,created_at:PP,projects:r};return t.json({workspace:n})}function UP(t,e){return t.json({projects:Kw(e.dal)})}function WP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project id required"},400);if(r.startsWith(Yn)){let s=Ju(e.dal,r);return s===null||s.deleted_at!==null?t.json({project:null},404):t.json({project:La(s)})}let n=Yw(e.dal,r);return n===null?t.json({project:null},404):t.json({project:Vw(n)})}async function qP(t,e){let r;try{r=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let n=r.input;if(n===void 0||typeof n!="object")return t.json({error:"bad_request",message:"input is required"},400);if(typeof n.name!="string"||n.name==="")return t.json({error:"bad_request",message:"input.name is required"},400);if(typeof n.repo_path!="string"||n.repo_path==="")return t.json({error:"bad_request",message:"input.repo_path is required"},400);e.dal.ensureWorkspace({id:zn,name:Xu});let s=e.dal.insertWebProject({workspace_id:zn,name:n.name,repo_path:n.repo_path,config_json:n.config_json===void 0?null:JSON.stringify(n.config_json)});return t.json({project:La(s)},201)}async function BP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project id required"},400);let n;try{n=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let s=n.input??{};if(r.startsWith(Yn)){let i=Ju(e.dal,r);if(i===null||i.deleted_at!==null)return t.json({error:"project_not_found",message:`project not found: ${r}`},404);let o=e.dal.updateWebProject({id:i.id,name:s.name===void 0?void 0:s.name,config_json:s.config_json===void 0?void 0:JSON.stringify(s.config_json)});return o===null?t.json({error:"project_not_found",message:`project not found: ${r}`},404):t.json({project:La(o)})}return t.json({error:"project_not_found",message:`project not found: ${r}`},404)}function HP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project id required"},400);if(r.startsWith(Yn)){let n=Ju(e.dal,r);if(n===null)return t.json({deleted:!1});let s=e.dal.softDeleteWebProject(n.id);return t.json({deleted:s})}return t.json({deleted:!1})}async function XP(t,e){let r=t.req.param("project_id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project_id required in path"},400);let n;try{n=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let s=n.input;if(s===void 0||typeof s!="object")return t.json({error:"bad_request",message:"input is required"},400);let i=s.project_id??r;if(typeof s.text!="string"||s.text==="")return t.json({error:"bad_request",message:"input.text is required"},400);let o=Yw(e.dal,i);if(o===null)return t.json({error:"project_not_found",message:`project not found: ${i}`},404);if(e.dal.getWorkflowByName(o.workflow_name)===null)return t.json({error:"workflow_not_registered",message:`project ${o.name} has no registered workflow "${o.workflow_name}"`},400);let l=`${jP}${crypto.randomUUID()}`,d={text:s.text,context_json:s.context_json??null},c;e.enqueueProjectJob!==void 0?c=e.enqueueProjectJob({dal:e.dal,project_id:o.id,source_ref:l,payload:d}):c=await GP({dal:e.dal,project_id:o.id,source_ref:l,payload:d}),e.dal.insertPromptDispatch({prompt_id:l,project_id:o.id,job_id:c.id,text:s.text,context_json:s.context_json===void 0?null:JSON.stringify(s.context_json)});let u={id:l,project_id:`${Ra}${o.id}`,text:s.text,status:"pending",created_at:new Date().toISOString(),completed_at:null};return t.json({prompt:u},201)}function JP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"prompt id required"},400);let n=KP(e.dal,r);return t.json({result:n})}function Kw(t){let e=t.listProjects().map(Vw),r=t.listWebProjectsActive(zn).map(La);return[...e,...r].sort(sF)}function Vw(t){return{id:`${Ra}${t.id}`,workspace_id:zn,name:t.name,repo_path:t.local_path,config_json:{workflow_name:t.workflow_name,team_id:t.team_id,durable_memory_mode:t.durable_memory_mode},last_active_at:null,created_at:t.created_at}}function La(t){let e={};if(t.config_json!==null)try{let r=JSON.parse(t.config_json);r!==null&&typeof r=="object"&&(e=r)}catch{}return t.linked_v4_project_id!==null&&(e={...e,linked_v4_project_id:t.linked_v4_project_id}),{id:`${Yn}${t.id}`,workspace_id:t.workspace_id,name:t.name,repo_path:t.repo_path,config_json:e,last_active_at:t.last_active_at,created_at:t.created_at}}function Ju(t,e){if(!e.startsWith(Yn))return null;let r=e.slice(Yn.length),n=Number.parseInt(r,10);return!Number.isFinite(n)||String(n)!==r?null:t.getWebProject(n)}function Yw(t,e){if(e.startsWith(Ra)){let n=e.slice(Ra.length),s=Number.parseInt(n,10);if(Number.isFinite(s)&&String(s)===n)return t.getProject(s)}let r=Number.parseInt(e,10);return Number.isFinite(r)&&String(r)===e?t.getProject(r):null}async function GP(t){let{enqueueManual:e}=await Promise.resolve().then(()=>(eu(),py));return{id:e(t.dal,{project_id:t.project_id,source_ref:t.source_ref,payload:t.payload}).id}}function KP(t,e){let r=t.getPromptDispatch(e);if(r===null)return{prompt_id:e,data:{status:"unknown"},errors_json:{error:"prompt_not_found"},duration_ms:null};let n=t.getJob(r.job_id);if(n===null)return{prompt_id:e,data:null,errors_json:{error:"job_missing",job_id:r.job_id},duration_ms:null};let s=n.run_id===null?null:t.getRun(n.run_id),i=t.getProject(r.project_id),o=tF(t,i?.team_id??null),a=eF(s),l=rF(n,a,o.length>0),d=nF(r.created_at,s),c=i===null?{totalEstimatedMs:void 0,perStep:new Map}:VP(t,i.workflow_name),u=c.totalEstimatedMs,m=zw(r.created_at),f=i?.workflow_name,p=c.perStep.size>0?c.perStep.size:void 0,h=s===null?[]:YP(t,s.id),_=zP(s,a,h,c.perStep,o),g=ZP(h,c.perStep),y=QP(_,g,u,m,f,p);return l==="error"?{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,...xa(u,m),...y},errors_json:{error:n.last_error??"job_failed",job_id:n.id,run_id:s?.id??null},duration_ms:d}:l==="done"?(r.completed_at===null&&t.setPromptDispatchCompleted(e),{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,terminal_state:s?.terminal_state??null,text:r.text,...xa(u,m),...y},errors_json:null,duration_ms:d}):l==="paused"?{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,attempt_count:n.attempt_count,paused_step:a,attention_needed:o,...xa(u,m),...y},errors_json:null,duration_ms:d}:{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,attempt_count:n.attempt_count,...xa(u,m),...y},errors_json:null,duration_ms:d}}function VP(t,e){let r={totalEstimatedMs:void 0,perStep:new Map},n=t.getWorkflowByName(e);if(n===null)return r;let s;try{s=JSON.parse(n.definition)}catch{return r}if(s===null||typeof s!="object")return r;let i=s,o=typeof i.estimated_duration_ms=="number"&&Number.isFinite(i.estimated_duration_ms)&&i.estimated_duration_ms>=0?i.estimated_duration_ms:void 0,a=new Map;if(Array.isArray(i.steps))for(let l of i.steps){if(l===null||typeof l!="object")continue;let d=l;if(typeof d.id!="string"||d.id.length===0)continue;let c=typeof d.name=="string"&&d.name.length>0?d.name:d.id,u=typeof d.estimated_duration_ms=="number"&&Number.isFinite(d.estimated_duration_ms)&&d.estimated_duration_ms>=0?d.estimated_duration_ms:void 0;a.set(d.id,u===void 0?{name:c}:{name:c,estimated_duration_ms:u})}if(i.steps===void 0&&i.states!==null&&typeof i.states=="object")for(let[l,d]of Object.entries(i.states)){if(d===null||typeof d!="object")continue;let c=d,u=typeof c.estimated_duration_ms=="number"&&Number.isFinite(c.estimated_duration_ms)&&c.estimated_duration_ms>=0?c.estimated_duration_ms:void 0;a.set(l,u===void 0?{name:l}:{name:l,estimated_duration_ms:u})}return{totalEstimatedMs:o,perStep:a}}function YP(t,e){try{return t.listStepsForRun(e)}catch{return[]}}function zP(t,e,r,n,s){if(t===null||t.terminal_state!==null)return;let i=e!==null?e:t.current_state;if(i===null||i.length===0)return;let a=[...r].reverse().find(m=>m.state_name===i&&m.ended_at===null)?.started_at??t.paused_at??t.started_at,l=n.get(i),d=l?.name??i,c=zw(a),u={id:i,name:d,started_at:a,elapsed_ms:c};return l?.estimated_duration_ms!==void 0&&(u.estimated_duration_ms=l.estimated_duration_ms),s.length>0&&(u.attention_needed=s),u}function ZP(t,e){let r=[];for(let n of t){if(n.ended_at===null)continue;let s=Date.parse(n.started_at),i=Date.parse(n.ended_at),o=Number.isFinite(s)&&Number.isFinite(i)?Math.max(0,i-s):0,a=e.get(n.state_name)?.name??n.state_name,l=n.outcome==="failed"?"failed":"done";r.push({id:n.state_name,name:a,duration_ms:o,status:l})}return r}function QP(t,e,r,n,s,i){let o={completed_steps:e,total_elapsed_ms:n};return t!==void 0&&(o.current_step=t),r!==void 0&&(o.total_estimated_ms=r),s!==void 0&&s.length>0&&(o.workflow_name=s),i!==void 0&&(o.total_steps=i),o}function zw(t){let e=Date.parse(t);return Number.isNaN(e)?0:Math.max(0,Date.now()-e)}function xa(t,e){return t===void 0?{elapsed_ms:e}:{elapsed_ms:e,estimated_duration_ms:t}}function eF(t){if(t===null)return null;let e=t.current_state;if(e===null)return null;let r="__paused__:";return e.startsWith(r)?e.slice(r.length):null}function tF(t,e){if(e===null)return[];let r;try{r=t.listTeamMembers(e)}catch{return[]}return r.filter(n=>n.state==="attention_needed").map(n=>({alias:n.alias,reason:n.state_reason}))}function rF(t,e,r){return t.status==="queued"?"pending":t.status==="done"?"done":t.status==="failed"?"error":e!==null||r||t.status==="paused"?"paused":t.status==="running"?"running":"error"}function nF(t,e){let r=Date.parse(t);if(Number.isNaN(r))return null;let n=e?.ended_at??null,s=n===null?Date.now():Date.parse(n);return Number.isNaN(s)?null:Math.max(0,s-r)}function sF(t,e){let r=Date.parse(t.last_active_at??""),n=Date.parse(e.last_active_at??""),s=(Number.isNaN(n)?0:n)-(Number.isNaN(r)?0:r);return s===0?t.name.localeCompare(e.name):s}var Ra,Yn,jP,zn,Xu,PP,Zw=w(()=>{"use strict";Ra="project:",Yn="web_project:",jP="prompt:",zn="default",Xu="Default workspace",PP=new Date(0).toISOString()});import{Buffer as Qw}from"node:buffer";function eT(t,e,r){if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;if(e!==void 0&&e!==""){let n=Number(e);if(Number.isFinite(n)&&n>0)return n}return r}function tT(t){return aF[t]}function rT(t){let e=t.trim();if(e==="")return;let r=e.split(/\s+/),n=r.shift();if(!(n===void 0||n===""))return{cmd:n,args:r}}var iF,oF,Oa,aF,Gu=w(()=>{"use strict";iF=1e4,oF=256*1024,Oa=class{opts;sessions=new Map;pushWindowMs;pushByteCap;timers;constructor(e){this.opts=e,this.pushWindowMs=eT(e.pushWindowMs,process.env.LMCTL_TERMINAL_PUSH_WINDOW_MS,iF),this.pushByteCap=eT(e.pushByteCap,process.env.LMCTL_TERMINAL_PUSH_BYTE_CAP,oF),this.timers=e.timers??{setTimeout:(r,n)=>globalThis.setTimeout(r,n),clearTimeout:r=>globalThis.clearTimeout(r)}}startSession(e){if(this.sessions.has(e.session_id))throw new Error(`terminal_session_already_exists: ${e.session_id}`);let r=this.opts.pty.spawn(e.command,e.args,{name:"xterm-256color",cols:e.cols??120,rows:e.rows??30,cwd:e.cwd??process.cwd(),env:e.env??process.env}),n={session_id:e.session_id,pty:r,pendingOutput:[],pendingBytes:0,pushTimer:void 0,closed:!1};return this.sessions.set(e.session_id,n),r.onData(s=>{this.onPtyData(n,s)}),r.onExit(s=>{this.onPtyExit(n,s)}),this.opts.log?.(`[dt-2] terminal session ${e.session_id} started pid=${r.pid} cmd=${e.command}`),{pid:r.pid}}endSession(e){let r=this.sessions.get(e);if(r!==void 0)try{r.pty.kill()}catch{}}onInbound(e){if(e.direction!=="user_to_agent")return;let r=this.sessions.get(e.session_id);if(r===void 0){this.opts.log?.(`[dt-2] inbound terminal data for unknown session ${e.session_id}; dropping`);return}if(r.closed){this.opts.log?.(`[dt-2] inbound terminal data for closed session ${e.session_id}; dropping`);return}try{r.pty.write(e.data)}catch(n){this.opts.log?.(`[dt-2] pty.write failed for session ${e.session_id}: ${n instanceof Error?n.message:String(n)}`)}}setPublish(e){this.opts={...this.opts,publish:e}}listSessions(){return Array.from(this.sessions.values()).map(e=>({session_id:e.session_id,pid:e.pty.pid}))}pendingBytesFor(e){return this.sessions.get(e)?.pendingBytes}async stop(){for(let e of Array.from(this.sessions.values()))try{e.pty.kill()}catch{}for(let e of Array.from(this.sessions.values()))e.pushTimer!==void 0&&(this.timers.clearTimeout(e.pushTimer),e.pushTimer=void 0)}onPtyData(e,r){if(!e.closed){if(e.pendingOutput.push(r),e.pendingBytes+=Qw.byteLength(r,"utf8"),e.pendingBytes>=this.pushByteCap){this.flush(e,"byte_cap");return}e.pushTimer===void 0&&(e.pushTimer=this.timers.setTimeout(()=>{this.flush(e,"window_idle")},this.pushWindowMs))}}async flush(e,r){if(e.pushTimer!==void 0&&(this.timers.clearTimeout(e.pushTimer),e.pushTimer=void 0),e.pendingOutput.length===0)return;let n=e.pendingOutput.join("");e.pendingOutput=[],e.pendingBytes=0;let s={kind:"terminal",session_id:e.session_id,direction:"agent_to_user",data:n,ts:(this.opts.now??Date.now)()};try{await this.opts.publish(s),this.opts.log?.(`[dt-2] flushed session=${e.session_id} reason=${r} bytes=${Qw.byteLength(n,"utf8")}`)}catch(i){this.opts.log?.(`[dt-2] publish failed session=${e.session_id} reason=${r}: ${i instanceof Error?i.message:String(i)}`)}}async onPtyExit(e,r){if(e.closed)return;await this.flush(e,"pty_exit");let n=`\r
2310
+ `)}function vP(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function it(t){return typeof t=="string"?t:""}function bP(t){if(t===null)return{};try{let e=JSON.parse(t);if(e!==null&&typeof e=="object"&&!Array.isArray(e))return e}catch{return{}}return{}}function Mu(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ta(t,e){return Number(t.req.param(e))}var va,Du,Pw=w(()=>{"use strict";wa();sr();mu();va=[{name:"info-qa",title:"Ask a Question",description:"Get a grounded answer from multiple researchers and one consolidator."},{name:"document-creation",title:"Create a Document",description:"Draft, review, and render a polished document with an interactive wizard."},{name:"newspaper",title:"Daily Newspaper",description:"Subscribe to recurring digests for topics you care about."}],Du=va.map(t=>t.name)});function kP(t){return t.replace(/^\/+/,"")}function Fw(t){return typeof t=="string"&&t!==""&&!t.includes("/")&&!t.includes("\\")}function Vn(t){if(t.mailboxKey!==void 0&&t.mailboxKey!==null&&t.mailboxKey!==""){let e=kP(t.mailboxKey),r=e.lastIndexOf("/");return(r>=0?e.slice(r+1):e).includes(".")&&(e=r>=0?e.slice(0,r+1):""),e!==""&&!e.endsWith("/")&&(e+="/"),e}return Fw(t.userId)&&Fw(t.deviceId)?`${t.userId}/${t.deviceId}/`:`${SP}/${t.identityId}/`}function NP(t){return String(Math.max(0,Math.floor(t))).padStart(IP,"0")}function Fu(t,e,r){return`${t}${e}${NP(r)}.json`}function ba(t,e){return`${t}${e}`}function Sa(t,e,r){let n=`${e}${r}`;if(!t.startsWith(n))return;let s=t.slice(n.length).match(/^(\d+)\.json$/);if(s===null)return;let i=Number(s[1]);return Number.isSafeInteger(i)?i:void 0}var SP,IP,ka=w(()=>{"use strict";SP="mailbox";IP=12});function dr(t,e){let r=Math.floor(t),n="",s=r;for(let c=0;c<12;c++)n=Ia[s&15]+n,s=Math.floor(s/16);let i=Math.floor(e()*4096)&4095,o="",a=i;for(let c=0;c<3;c++)o=Ia[a&15]+o,a=a>>4;let l=Ia[8|Math.floor(e()*4)&3],d="";for(let c=0;c<15;c++)d+=Ia[Math.floor(e()*16)&15];return n.slice(0,8)+"-"+n.slice(8,12)+"-7"+o+"-"+l+d.slice(0,3)+"-"+d.slice(3,15)}var Ia,Na=w(()=>{"use strict";Ia="0123456789abcdef"});function Wu(t,e){return!Number.isFinite(t)||t<=0?e:t}function qu(t){if(t===null||typeof t!="object")return!1;let e=t;return e.name==="NoSuchKey"||e.name==="NotFound"||e.Code==="NoSuchKey"||e.code==="NoSuchKey"||e.$metadata!==void 0&&e.$metadata.httpStatusCode===404}function Hw(t){return t.conversation_id===Bw&&RP(t.payload)}function RP(t){return typeof t=="object"&&t!==null&&t.kind==="heartbeat"}function LP(t){let e=typeof t.hb=="string"&&t.hb!==""?t.hb:Hw(t)?t.timestamp:void 0;if(e===void 0)return;let r=Date.parse(e);return Number.isFinite(r)?r:void 0}var Uw,Ww,qw,AP,Bw,xP,Uu,on,Aa=w(()=>{"use strict";ka();Na();Uw=3e3,Ww=1e4,qw=12e3,AP=1e3,Bw="__lmctl_heartbeat__",xP={kind:"heartbeat"},Uu={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t)},on=class{opts;basePrefix;ownStream;peerStream;cursor;ownSeq;bootstrapped=!1;bootstrapInFlight=null;bootstrapPromise=null;writeChain=Promise.resolve();readIntervalMs;heartbeatIdleMs;backoffReadIntervalMs;running=!1;stopped=!1;stopRequested=!1;timerHandle=null;heartbeatTimerHandle=null;lastWriteMs;lastPeerHeartbeatMs;tickInFlight=null;constructor(e){this.opts=e,this.basePrefix=Vn({identityId:e.identityId,userId:e.userId,deviceId:e.deviceId,mailboxKey:e.mailboxKey}),this.ownStream=e.selfRole==="agent"?"local":"web",this.peerStream=e.selfRole==="agent"?"web":"local",this.cursor=e.cursor,this.readIntervalMs=Wu(e.readIntervalMs??e.pollIntervalMs??Uw,Uw),this.heartbeatIdleMs=Wu(e.heartbeatIdleMs??Ww,Ww),this.backoffReadIntervalMs=Wu(e.backoffReadIntervalMs??e.pollIntervalMs??qw,qw)}start(){if(this.stopped)throw new Error("SequentialMailboxClient: cannot start after stop()");this.running||(this.running=!0,this.bootstrapInFlight=this.bootstrapThenRun())}async stop(){this.stopped=!0,this.stopRequested=!0;let e=this.opts.timers??Uu;if(this.timerHandle!==null&&(e.clearTimeout(this.timerHandle),this.timerHandle=null),this.heartbeatTimerHandle!==null&&(e.clearTimeout(this.heartbeatTimerHandle),this.heartbeatTimerHandle=null),this.bootstrapInFlight!==null)try{await this.bootstrapInFlight}catch{}if(this.tickInFlight!==null)try{await this.tickInFlight}catch{}this.running=!1}async putMessage(e){return this.putEnvelope(e.conversation_id,e.payload)}getCursor(){return this.cursor}getMailboxBasePrefix(){return this.basePrefix}setPollIntervalMs(e){if(!Number.isFinite(e)||e<=0)throw new Error(`SequentialMailboxClient.setPollIntervalMs: invalid ms=${e}`);this.readIntervalMs=e}isPeerOn(){return this.peerIsOn((this.opts.now??Date.now)())}async bootstrapThenRun(){if(await this.ensureBootstrapped(),this.stopRequested){this.running=!1;return}this.runTick(),this.writeHeartbeat()}ensureBootstrapped(){return this.bootstrapped?Promise.resolve():(this.bootstrapPromise===null&&(this.bootstrapPromise=this.runColdStart()),this.bootstrapPromise)}async runColdStart(){try{let e=await this.maxSeq(this.ownStream);this.ownSeq=e,this.cursor===void 0&&(this.cursor=await this.maxSeq(this.peerStream)),this.bootstrapped=!0}catch(e){throw this.bootstrapPromise=null,this.emitError(e,"list"),e}}async maxSeq(e){let r=ba(this.basePrefix,e),n=0,s;do{let i=await this.opts.s3.send(new this.opts.commands.ListObjectsV2Command({Bucket:this.opts.bucket,Prefix:r,MaxKeys:AP,...s!==void 0&&{ContinuationToken:s}}));this.opts.onS3Op?.("list");for(let o of i.Contents??[]){let a=Sa(o.Key??"",this.basePrefix,e);a!==void 0&&a>n&&(n=a)}s=i.IsTruncated===!0?i.NextContinuationToken:void 0}while(s!==void 0);return n}async putEnvelope(e,r){let n=this.writeChain.then(()=>this.doPut(e,r));return this.writeChain=n.catch(()=>{}),n}async doPut(e,r){await this.ensureBootstrapped();let n=(this.opts.now??Date.now)(),s=new Date(n).toISOString(),i={message_id:dr(n,this.opts.random??Math.random),from:this.opts.selfRole,timestamp:s,hb:s,conversation_id:e,payload:r},o=(this.ownSeq??0)+1,a=Fu(this.basePrefix,this.ownStream,o);return await this.opts.s3.send(new this.opts.commands.PutObjectCommand({Bucket:this.opts.bucket,Key:a,Body:JSON.stringify(i),ContentType:"application/json"})),this.opts.onS3Op?.("put"),this.ownSeq=o,this.recordWrite(n),a}scheduleNextTick(e){if(this.stopRequested)return;let r=this.opts.timers??Uu;this.timerHandle=r.setTimeout(()=>{this.timerHandle=null,this.runTick()},e)}runTick(){this.stopRequested||(this.tickInFlight=(async()=>{try{await this.pollOnce()}finally{this.tickInFlight=null,this.stopRequested||this.scheduleNextTick(this.nextReadDelayMs())}})())}async pollOnce(){for(;!this.stopRequested;){let e=(this.cursor??0)+1,r=Fu(this.basePrefix,this.peerStream,e),n;try{let i=await this.opts.s3.send(new this.opts.commands.GetObjectCommand({Bucket:this.opts.bucket,Key:r}));if(this.opts.onS3Op?.("get"),i.Body===void 0){this.emitError(new Error(`GetObject ${r}: empty body`),"get"),this.advanceCursor(e);continue}n=await i.Body.transformToString("utf-8")}catch(i){if(qu(i)){this.opts.onS3Op?.("get");return}this.emitError(i,"get");return}let s;try{s=JSON.parse(n)}catch(i){this.emitError(i,"get"),this.advanceCursor(e);continue}if(this.recordPeerHeartbeat(s),Hw(s)){this.advanceCursor(e);continue}try{await this.opts.onMessage(s)}catch(i){this.emitError(i,"handle");return}this.advanceCursor(e)}}advanceCursor(e){this.cursor=e,this.notifyCursorAdvance(e)}nextReadDelayMs(){return this.peerIsOn((this.opts.now??Date.now)())?this.readIntervalMs:this.backoffReadIntervalMs}peerIsOn(e){return this.lastPeerHeartbeatMs!==void 0&&e-this.lastPeerHeartbeatMs<=this.heartbeatIdleMs}recordPeerHeartbeat(e){let r=LP(e);r!==void 0&&(this.lastPeerHeartbeatMs=r)}recordWrite(e){this.lastWriteMs=e,this.scheduleHeartbeatCheck(this.heartbeatIdleMs)}scheduleHeartbeatCheck(e){if(this.stopRequested)return;let r=this.opts.timers??Uu;this.heartbeatTimerHandle!==null&&r.clearTimeout(this.heartbeatTimerHandle),this.heartbeatTimerHandle=r.setTimeout(()=>{this.heartbeatTimerHandle=null,this.maybeWriteHeartbeat()},e)}async maybeWriteHeartbeat(){if(this.stopRequested)return;let e=(this.opts.now??Date.now)();if(this.lastWriteMs!==void 0){let r=e-this.lastWriteMs;if(r<this.heartbeatIdleMs){this.scheduleHeartbeatCheck(this.heartbeatIdleMs-r);return}}await this.writeHeartbeat()}async writeHeartbeat(){try{await this.putEnvelope(Bw,xP)}catch(e){this.emitError(e,"put"),this.scheduleHeartbeatCheck(this.heartbeatIdleMs)}}notifyCursorAdvance(e){if(this.opts.onCursorAdvance!==void 0)try{this.opts.onCursorAdvance(e)}catch(r){this.emitError(r,"handle")}}emitError(e,r){if(this.opts.onError!==void 0)try{this.opts.onError(e,r)}catch{}else console.error(`SequentialMailboxClient[${r}]`,e)}}});import{getConnInfo as OP}from"@hono/node-server/conninfo";function Xw(t,e){let r=e.bucket??CP,n=e.remoteAddressOf??(i=>MP(i)),s=i=>{let o=n(i);return DP(o)?null:i.json({error:"forbidden",message:"local-mailbox is loopback-only"},403)};t.get("/local-mailbox/object",async i=>{let o=s(i);if(o!==null)return o;let a=Bu(i.req.query("key"));if(typeof a!="string")return i.json({error:"bad_request",message:a.error},400);try{let l=await e.s3.send(new e.commands.GetObjectCommand({Bucket:r,Key:a}));if(l.Body===void 0)return i.json({error:"empty_body"},404);let d=await l.Body.transformToString("utf-8");return i.body(d,200,{"Content-Type":"application/octet-stream"})}catch(l){return qu(l)?i.json({error:"not_found"},404):i.json({error:"internal",message:Hu(l)},500)}}),t.put("/local-mailbox/object",async i=>{let o=s(i);if(o!==null)return o;let a=Bu(i.req.query("key"));if(typeof a!="string")return i.json({error:"bad_request",message:a.error},400);let l=new Uint8Array(await i.req.arrayBuffer());try{return await e.s3.send(new e.commands.PutObjectCommand({Bucket:r,Key:a,Body:l})),i.json({ok:!0})}catch(d){return i.json({error:"internal",message:Hu(d)},500)}}),t.get("/local-mailbox/list",async i=>{let o=s(i);if(o!==null)return o;let a=i.req.query("prefix")??"",l=Bu(a,{allowEmpty:!0});if(typeof l!="string")return i.json({error:"bad_request",message:l.error},400);let d=$P(i.req.query("maxKeys")),c=i.req.query("token");try{let u=await e.s3.send(new e.commands.ListObjectsV2Command({Bucket:r,Prefix:l,...d!==void 0?{MaxKeys:d}:{},...c!==void 0&&c!==""?{ContinuationToken:c}:{}}));return i.json({Contents:(u.Contents??[]).map(m=>({Key:m.Key,LastModified:m.LastModified instanceof Date?m.LastModified.toISOString():m.LastModified})),IsTruncated:u.IsTruncated??!1,...u.NextContinuationToken!==void 0?{NextContinuationToken:u.NextContinuationToken}:{}})}catch(u){return i.json({error:"internal",message:Hu(u)},500)}})}function Bu(t,e={}){if(t===void 0||t==="")return e.allowEmpty===!0?"":{error:"key required"};let r=t.replace(/^\/+/,"");return r.split("/").includes("..")?{error:"key must not contain '..'"}:r}function $P(t){if(t===void 0||t==="")return;let e=Number(t);return Number.isInteger(e)&&e>0?e:void 0}function MP(t){try{return OP(t).remote.address}catch{return}}function DP(t){return t===void 0||t===""?!1:!!(t==="127.0.0.1"||t==="::1"||t.startsWith("::ffff:127.")||t.startsWith("127."))}function Hu(t){return t instanceof Error?t.message:String(t)}var CP,Jw=w(()=>{"use strict";Aa();CP="local"});function Gw(t,e){t.get("/mailbox/workspace",r=>FP(r,e)),t.get("/mailbox/projects",r=>UP(r,e)),t.get("/mailbox/projects/:id",r=>WP(r,e)),t.post("/mailbox/projects",r=>qP(r,e)),t.patch("/mailbox/projects/:id",r=>BP(r,e)),t.delete("/mailbox/projects/:id",r=>HP(r,e)),t.post("/mailbox/projects/:project_id/prompts",r=>XP(r,e)),t.get("/mailbox/prompts/:id",r=>JP(r,e))}function FP(t,e){e.dal.ensureWorkspace({id:zn,name:Xu});let r=Kw(e.dal),n={id:zn,name:Xu,created_at:PP,projects:r};return t.json({workspace:n})}function UP(t,e){return t.json({projects:Kw(e.dal)})}function WP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project id required"},400);if(r.startsWith(Yn)){let s=Ju(e.dal,r);return s===null||s.deleted_at!==null?t.json({project:null},404):t.json({project:La(s)})}let n=Yw(e.dal,r);return n===null?t.json({project:null},404):t.json({project:Vw(n)})}async function qP(t,e){let r;try{r=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let n=r.input;if(n===void 0||typeof n!="object")return t.json({error:"bad_request",message:"input is required"},400);if(typeof n.name!="string"||n.name==="")return t.json({error:"bad_request",message:"input.name is required"},400);if(typeof n.repo_path!="string"||n.repo_path==="")return t.json({error:"bad_request",message:"input.repo_path is required"},400);e.dal.ensureWorkspace({id:zn,name:Xu});let s=e.dal.insertWebProject({workspace_id:zn,name:n.name,repo_path:n.repo_path,config_json:n.config_json===void 0?null:JSON.stringify(n.config_json)});return t.json({project:La(s)},201)}async function BP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project id required"},400);let n;try{n=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let s=n.input??{};if(r.startsWith(Yn)){let i=Ju(e.dal,r);if(i===null||i.deleted_at!==null)return t.json({error:"project_not_found",message:`project not found: ${r}`},404);let o=e.dal.updateWebProject({id:i.id,name:s.name===void 0?void 0:s.name,config_json:s.config_json===void 0?void 0:JSON.stringify(s.config_json)});return o===null?t.json({error:"project_not_found",message:`project not found: ${r}`},404):t.json({project:La(o)})}return t.json({error:"project_not_found",message:`project not found: ${r}`},404)}function HP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project id required"},400);if(r.startsWith(Yn)){let n=Ju(e.dal,r);if(n===null)return t.json({deleted:!1});let s=e.dal.softDeleteWebProject(n.id);return t.json({deleted:s})}return t.json({deleted:!1})}async function XP(t,e){let r=t.req.param("project_id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"project_id required in path"},400);let n;try{n=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let s=n.input;if(s===void 0||typeof s!="object")return t.json({error:"bad_request",message:"input is required"},400);let i=s.project_id??r;if(typeof s.text!="string"||s.text==="")return t.json({error:"bad_request",message:"input.text is required"},400);let o=Yw(e.dal,i);if(o===null)return t.json({error:"project_not_found",message:`project not found: ${i}`},404);if(e.dal.getWorkflowByName(o.workflow_name)===null)return t.json({error:"workflow_not_registered",message:`project ${o.name} has no registered workflow "${o.workflow_name}"`},400);let l=`${jP}${crypto.randomUUID()}`,d={text:s.text,context_json:s.context_json??null},c;e.enqueueProjectJob!==void 0?c=e.enqueueProjectJob({dal:e.dal,project_id:o.id,source_ref:l,payload:d}):c=await GP({dal:e.dal,project_id:o.id,source_ref:l,payload:d}),e.dal.insertPromptDispatch({prompt_id:l,project_id:o.id,job_id:c.id,text:s.text,context_json:s.context_json===void 0?null:JSON.stringify(s.context_json)});let u={id:l,project_id:`${Ra}${o.id}`,text:s.text,status:"pending",created_at:new Date().toISOString(),completed_at:null};return t.json({prompt:u},201)}function JP(t,e){let r=t.req.param("id");if(r===void 0||r==="")return t.json({error:"bad_request",message:"prompt id required"},400);let n=KP(e.dal,r);return t.json({result:n})}function Kw(t){let e=t.listProjects().map(Vw),r=t.listWebProjectsActive(zn).map(La);return[...e,...r].sort(sF)}function Vw(t){return{id:`${Ra}${t.id}`,workspace_id:zn,name:t.name,repo_path:t.local_path,config_json:{workflow_name:t.workflow_name,team_id:t.team_id,durable_memory_mode:t.durable_memory_mode},last_active_at:null,created_at:t.created_at}}function La(t){let e={};if(t.config_json!==null)try{let r=JSON.parse(t.config_json);r!==null&&typeof r=="object"&&(e=r)}catch{}return t.linked_v4_project_id!==null&&(e={...e,linked_v4_project_id:t.linked_v4_project_id}),{id:`${Yn}${t.id}`,workspace_id:t.workspace_id,name:t.name,repo_path:t.repo_path,config_json:e,last_active_at:t.last_active_at,created_at:t.created_at}}function Ju(t,e){if(!e.startsWith(Yn))return null;let r=e.slice(Yn.length),n=Number.parseInt(r,10);return!Number.isFinite(n)||String(n)!==r?null:t.getWebProject(n)}function Yw(t,e){if(e.startsWith(Ra)){let n=e.slice(Ra.length),s=Number.parseInt(n,10);if(Number.isFinite(s)&&String(s)===n)return t.getProject(s)}let r=Number.parseInt(e,10);return Number.isFinite(r)&&String(r)===e?t.getProject(r):null}async function GP(t){let{enqueueManual:e}=await Promise.resolve().then(()=>(eu(),py));return{id:e(t.dal,{project_id:t.project_id,source_ref:t.source_ref,payload:t.payload}).id}}function KP(t,e){let r=t.getPromptDispatch(e);if(r===null)return{prompt_id:e,data:{status:"unknown"},errors_json:{error:"prompt_not_found"},duration_ms:null};let n=t.getJob(r.job_id);if(n===null)return{prompt_id:e,data:null,errors_json:{error:"job_missing",job_id:r.job_id},duration_ms:null};let s=n.run_id===null?null:t.getRun(n.run_id),i=t.getProject(r.project_id),o=tF(t,i?.team_id??null),a=eF(s),l=rF(n,a,o.length>0),d=nF(r.created_at,s),c=i===null?{totalEstimatedMs:void 0,perStep:new Map}:VP(t,i.workflow_name),u=c.totalEstimatedMs,m=zw(r.created_at),f=i?.workflow_name,p=c.perStep.size>0?c.perStep.size:void 0,h=s===null?[]:YP(t,s.id),_=zP(s,a,h,c.perStep,o),g=ZP(h,c.perStep),y=QP(_,g,u,m,f,p);return l==="error"?{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,...xa(u,m),...y},errors_json:{error:n.last_error??"job_failed",job_id:n.id,run_id:s?.id??null},duration_ms:d}:l==="done"?(r.completed_at===null&&t.setPromptDispatchCompleted(e),{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,terminal_state:s?.terminal_state??null,text:r.text,...xa(u,m),...y},errors_json:null,duration_ms:d}):l==="paused"?{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,attempt_count:n.attempt_count,paused_step:a,attention_needed:o,...xa(u,m),...y},errors_json:null,duration_ms:d}:{prompt_id:e,data:{status:l,job_id:n.id,project_id:r.project_id,run_id:s?.id??null,attempt_count:n.attempt_count,...xa(u,m),...y},errors_json:null,duration_ms:d}}function VP(t,e){let r={totalEstimatedMs:void 0,perStep:new Map},n=t.getWorkflowByName(e);if(n===null)return r;let s;try{s=JSON.parse(n.definition)}catch{return r}if(s===null||typeof s!="object")return r;let i=s,o=typeof i.estimated_duration_ms=="number"&&Number.isFinite(i.estimated_duration_ms)&&i.estimated_duration_ms>=0?i.estimated_duration_ms:void 0,a=new Map;if(Array.isArray(i.steps))for(let l of i.steps){if(l===null||typeof l!="object")continue;let d=l;if(typeof d.id!="string"||d.id.length===0)continue;let c=typeof d.name=="string"&&d.name.length>0?d.name:d.id,u=typeof d.estimated_duration_ms=="number"&&Number.isFinite(d.estimated_duration_ms)&&d.estimated_duration_ms>=0?d.estimated_duration_ms:void 0;a.set(d.id,u===void 0?{name:c}:{name:c,estimated_duration_ms:u})}if(i.steps===void 0&&i.states!==null&&typeof i.states=="object")for(let[l,d]of Object.entries(i.states)){if(d===null||typeof d!="object")continue;let c=d,u=typeof c.estimated_duration_ms=="number"&&Number.isFinite(c.estimated_duration_ms)&&c.estimated_duration_ms>=0?c.estimated_duration_ms:void 0;a.set(l,u===void 0?{name:l}:{name:l,estimated_duration_ms:u})}return{totalEstimatedMs:o,perStep:a}}function YP(t,e){try{return t.listStepsForRun(e)}catch{return[]}}function zP(t,e,r,n,s){if(t===null||t.terminal_state!==null)return;let i=e!==null?e:t.current_state;if(i===null||i.length===0)return;let a=[...r].reverse().find(m=>m.state_name===i&&m.ended_at===null)?.started_at??t.paused_at??t.started_at,l=n.get(i),d=l?.name??i,c=zw(a),u={id:i,name:d,started_at:a,elapsed_ms:c};return l?.estimated_duration_ms!==void 0&&(u.estimated_duration_ms=l.estimated_duration_ms),s.length>0&&(u.attention_needed=s),u}function ZP(t,e){let r=[];for(let n of t){if(n.ended_at===null)continue;let s=Date.parse(n.started_at),i=Date.parse(n.ended_at),o=Number.isFinite(s)&&Number.isFinite(i)?Math.max(0,i-s):0,a=e.get(n.state_name)?.name??n.state_name,l=n.outcome==="failed"?"failed":"done";r.push({id:n.state_name,name:a,duration_ms:o,status:l})}return r}function QP(t,e,r,n,s,i){let o={completed_steps:e,total_elapsed_ms:n};return t!==void 0&&(o.current_step=t),r!==void 0&&(o.total_estimated_ms=r),s!==void 0&&s.length>0&&(o.workflow_name=s),i!==void 0&&(o.total_steps=i),o}function zw(t){let e=Date.parse(t);return Number.isNaN(e)?0:Math.max(0,Date.now()-e)}function xa(t,e){return t===void 0?{elapsed_ms:e}:{elapsed_ms:e,estimated_duration_ms:t}}function eF(t){if(t===null)return null;let e=t.current_state;if(e===null)return null;let r="__paused__:";return e.startsWith(r)?e.slice(r.length):null}function tF(t,e){if(e===null)return[];let r;try{r=t.listTeamMembers(e)}catch{return[]}return r.filter(n=>n.state==="attention_needed").map(n=>({alias:n.alias,reason:n.state_reason}))}function rF(t,e,r){return t.status==="queued"?"pending":t.status==="done"?"done":t.status==="failed"?"error":e!==null||r||t.status==="paused"?"paused":t.status==="running"?"running":"error"}function nF(t,e){let r=Date.parse(t);if(Number.isNaN(r))return null;let n=e?.ended_at??null,s=n===null?Date.now():Date.parse(n);return Number.isNaN(s)?null:Math.max(0,s-r)}function sF(t,e){let r=Date.parse(t.last_active_at??""),n=Date.parse(e.last_active_at??""),s=(Number.isNaN(n)?0:n)-(Number.isNaN(r)?0:r);return s===0?t.name.localeCompare(e.name):s}var Ra,Yn,jP,zn,Xu,PP,Zw=w(()=>{"use strict";Ra="project:",Yn="web_project:",jP="prompt:",zn="default",Xu="Default workspace",PP=new Date(0).toISOString()});import{Buffer as Qw}from"node:buffer";function eT(t,e,r){if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;if(e!==void 0&&e!==""){let n=Number(e);if(Number.isFinite(n)&&n>0)return n}return r}function tT(t){return aF[t]}function rT(t){let e=t.trim();if(e==="")return;let r=e.split(/\s+/),n=r.shift();if(!(n===void 0||n===""))return{cmd:n,args:r}}var iF,oF,Oa,aF,Gu=w(()=>{"use strict";iF=1e4,oF=256*1024,Oa=class{opts;sessions=new Map;pushWindowMs;pushByteCap;timers;constructor(e){this.opts=e,this.pushWindowMs=eT(e.pushWindowMs,process.env.LMCTL_TERMINAL_PUSH_WINDOW_MS,iF),this.pushByteCap=eT(e.pushByteCap,process.env.LMCTL_TERMINAL_PUSH_BYTE_CAP,oF),this.timers=e.timers??{setTimeout:(r,n)=>globalThis.setTimeout(r,n),clearTimeout:r=>globalThis.clearTimeout(r)}}startSession(e){if(this.sessions.has(e.session_id))throw new Error(`terminal_session_already_exists: ${e.session_id}`);let r=this.opts.pty.spawn(e.command,e.args,{name:"xterm-256color",cols:e.cols??120,rows:e.rows??30,cwd:e.cwd??process.cwd(),env:e.env??process.env}),n={session_id:e.session_id,pty:r,pendingOutput:[],pendingBytes:0,pushTimer:void 0,closed:!1};return this.sessions.set(e.session_id,n),r.onData(s=>{this.onPtyData(n,s)}),r.onExit(s=>{this.onPtyExit(n,s)}),this.opts.log?.(`[dt-2] terminal session ${e.session_id} started pid=${r.pid} cmd=${e.command}`),{pid:r.pid}}endSession(e){let r=this.sessions.get(e);if(r!==void 0)try{r.pty.kill()}catch{}}onInbound(e){if(e.direction!=="user_to_agent")return;let r=this.sessions.get(e.session_id);if(r===void 0){this.opts.log?.(`[dt-2] inbound terminal data for unknown session ${e.session_id}; dropping`);return}if(r.closed){this.opts.log?.(`[dt-2] inbound terminal data for closed session ${e.session_id}; dropping`);return}try{r.pty.write(e.data)}catch(n){this.opts.log?.(`[dt-2] pty.write failed for session ${e.session_id}: ${n instanceof Error?n.message:String(n)}`)}}setPublish(e){this.opts={...this.opts,publish:e}}listSessions(){return Array.from(this.sessions.values()).map(e=>({session_id:e.session_id,pid:e.pty.pid}))}pendingBytesFor(e){return this.sessions.get(e)?.pendingBytes}async stop(){for(let e of Array.from(this.sessions.values()))try{e.pty.kill()}catch{}for(let e of Array.from(this.sessions.values()))e.pushTimer!==void 0&&(this.timers.clearTimeout(e.pushTimer),e.pushTimer=void 0)}onPtyData(e,r){if(!e.closed){if(e.pendingOutput.push(r),e.pendingBytes+=Qw.byteLength(r,"utf8"),e.pendingBytes>=this.pushByteCap){this.flush(e,"byte_cap");return}e.pushTimer===void 0&&(e.pushTimer=this.timers.setTimeout(()=>{this.flush(e,"window_idle")},this.pushWindowMs))}}async flush(e,r){if(e.pushTimer!==void 0&&(this.timers.clearTimeout(e.pushTimer),e.pushTimer=void 0),e.pendingOutput.length===0)return;let n=e.pendingOutput.join("");e.pendingOutput=[],e.pendingBytes=0;let s={kind:"terminal",session_id:e.session_id,direction:"agent_to_user",data:n,ts:(this.opts.now??Date.now)()};try{await this.opts.publish(s),this.opts.log?.(`[dt-2] flushed session=${e.session_id} reason=${r} bytes=${Qw.byteLength(n,"utf8")}`)}catch(i){this.opts.log?.(`[dt-2] publish failed session=${e.session_id} reason=${r}: ${i instanceof Error?i.message:String(i)}`)}}async onPtyExit(e,r){if(e.closed)return;await this.flush(e,"pty_exit");let n=`\r
2311
2311
  [process exited with code ${r.exitCode}${r.signal!==void 0?` signal ${r.signal}`:""}]\r
2312
2312
  `,s={kind:"terminal",session_id:e.session_id,direction:"agent_to_user",data:n,ts:(this.opts.now??Date.now)()};try{await this.opts.publish(s)}catch(i){this.opts.log?.(`[dt-2] publish (exit) failed session=${e.session_id}: ${i instanceof Error?i.message:String(i)}`)}e.closed=!0,this.sessions.delete(e.session_id)}};aF={claude:{cmd:"claude",args:["--dangerously-skip-permissions"]},codex:{cmd:"codex",args:["--yolo","--sandbox","danger-full-access"]},gemini:{cmd:"gemini",args:["-y","--skip-trust"]},copilot:{cmd:"copilot",args:["--yolo"]},qwen:{cmd:"qwen",args:["--approval-mode","yolo"]},opencode:{cmd:"opencode",args:[]},kimi:{cmd:"kimi",args:["--auto"]}}});function sT(t,e){t.post("/mailbox/terminal/launch",r=>lF(r,e)),t.post("/mailbox/terminal/end/:session_id",r=>dF(r,e)),t.get("/mailbox/terminal/sessions",r=>cF(r,e))}async function lF(t,e){let r=e.terminalSessionManager;if(r===void 0)return t.json({error:"terminal_unavailable",message:"terminal session manager not configured (mailbox runtime missing)"},503);let n;try{n=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let s=n.session_id;if(typeof s!="string"||!nT.test(s))return t.json({error:"bad_request",message:"session_id must be a UUIDv7 string"},400);let i=n.provider;if(typeof i!="string"||i==="")return t.json({error:"bad_request",message:"provider is required"},400);let o;if(typeof n.command_line=="string"&&n.command_line.trim()!==""){if(o=rT(n.command_line),o===void 0)return t.json({error:"bad_request",message:"command_line could not be parsed"},400)}else{let a=tT(i);if(a===void 0)return t.json({error:"no_default_for_provider",message:`no TERMINAL_LAUNCH_DEFAULTS entry for provider "${i}"`},400);o={cmd:a.cmd,args:[...a.args]}}try{let{pid:a}=r.startSession({session_id:s,command:o.cmd,args:o.args,...typeof n.cwd=="string"&&n.cwd!==""?{cwd:n.cwd}:{}});return t.json({session_id:s,pid:a,command:o.cmd,args:o.args},201)}catch(a){let l=a instanceof Error?a.message:String(a);return l.startsWith("terminal_session_already_exists")?t.json({error:"session_exists",message:l},409):t.json({error:"spawn_failed",message:l},500)}}function dF(t,e){let r=e.terminalSessionManager;if(r===void 0)return t.json({error:"terminal_unavailable",message:"terminal session manager not configured"},503);let n=t.req.param("session_id");return n===void 0||!nT.test(n)?t.json({error:"bad_request",message:"session_id must be a UUIDv7 string"},400):(r.endSession(n),t.json({session_id:n,ended:!0}))}function cF(t,e){let r=e.terminalSessionManager;return r===void 0?t.json({sessions:[],note:"terminal session manager not configured"}):t.json({sessions:r.listSessions()})}var nT,iT=w(()=>{"use strict";Gu();nT=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i});import{Buffer as uF}from"node:buffer";function pF(t){try{return uF.byteLength(JSON.stringify(t),"utf8")}catch{return 256}}function oT(t,e,r){if(typeof t=="number"&&Number.isFinite(t)&&t>0)return t;if(e!==void 0&&e!==""){let n=Number(e);if(Number.isFinite(n)&&n>0)return n}return r}function aT(t){return _F[t]}function lT(t){let e=t.trim();if(e==="")return;let r=[],n=0;for(;n<e.length;){let i=e[n];if(i===" "||i===" "){n+=1;continue}if(i==='"'){let a=n+1,l="";for(;a<e.length&&e[a]!=='"';)l+=e[a],a+=1;r.push(l),n=a+1;continue}let o=n;for(;o<e.length&&e[o]!==" "&&e[o]!==" ";)o+=1;r.push(e.slice(n,o)),n=o}if(r.length===0)return;let s=r.shift();if(!(s===void 0||s===""))return{cmd:s,args:r}}var mF,fF,Ca,_F,Ku=w(()=>{"use strict";mF=2e3,fF=64*1024,Ca=class{opts;sessions=new Map;pushWindowMs;pushByteCap;timers;constructor(e){this.opts=e,this.pushWindowMs=oT(e.pushWindowMs,process.env.LMCTL_PROVIDER_PUSH_WINDOW_MS,mF),this.pushByteCap=oT(e.pushByteCap,process.env.LMCTL_PROVIDER_PUSH_BYTE_CAP,fF),this.timers=e.timers??{setTimeout:(r,n)=>globalThis.setTimeout(r,n),clearTimeout:r=>globalThis.clearTimeout(r)}}async startSession(e){if(this.sessions.has(e.session_id))throw new Error(`persistent_session_already_exists: ${e.session_id}`);let r=this.opts.adapterFactory(e.provider),n={session_id:e.session_id,provider:e.provider,adapter:r,child:void 0,pendingEvents:[],pendingBytes:0,pushTimer:void 0,generation:1,turnMap:new Map,closed:!1};this.sessions.set(e.session_id,n);let s=this.makeAdapterContext(n);try{let i=await r.start(e,s);return n.child=i,this.wireChildExit(n,i),this.opts.log?.(`[dt-3] persistent session ${e.session_id} started provider=${e.provider} pid=${i.pid??"?"}`),{pid:i.pid}}catch(i){throw this.sessions.delete(e.session_id),i}}async endSession(e){let r=this.sessions.get(e);if(r!==void 0){r.generation+=1;try{await r.adapter.stop()}catch{}if(r.child!==void 0)try{r.child.kill("SIGTERM")}catch{}await this.flush(r,"session_end"),r.closed=!0,this.sessions.delete(e)}}async onInbound(e){if(e.direction!=="user_to_agent")return;let r=this.sessions.get(e.session_id);if(r===void 0){this.opts.log?.(`[dt-3] inbound provider data for unknown session ${e.session_id}; dropping`);return}if(r.closed){this.opts.log?.(`[dt-3] inbound provider data for closed session ${e.session_id}; dropping`);return}let n=e.user_input??"";if(n!=="")try{await r.adapter.sendTurn(n)}catch(s){let i=s instanceof Error?s.message:String(s);this.opts.log?.(`[dt-3] adapter.sendTurn failed session=${e.session_id}: ${i}`),this.appendEvent(r,{event_type:"error",payload:{message:`sendTurn failed: ${i}`}})}}setPublish(e){this.opts={...this.opts,publish:e}}listSessions(){return Array.from(this.sessions.values()).map(e=>({session_id:e.session_id,provider:e.provider,pid:e.child?.pid}))}pendingEventCountFor(e){return this.sessions.get(e)?.pendingEvents.length}generationFor(e){return this.sessions.get(e)?.generation}_testBumpGeneration(e){let r=this.sessions.get(e);r!==void 0&&(r.generation+=1)}async stop(){for(let e of Array.from(this.sessions.values())){e.generation+=1;try{await e.adapter.stop()}catch{}if(e.child!==void 0)try{e.child.kill("SIGTERM")}catch{}}for(let e of Array.from(this.sessions.values()))e.pushTimer!==void 0&&(this.timers.clearTimeout(e.pushTimer),e.pushTimer=void 0)}makeAdapterContext(e){let r=e.generation,n=this;return{generation:r,currentGeneration(){return e.generation},emit(s){r===e.generation&&(e.closed||n.appendEvent(e,s))},...n.opts.log!==void 0?{log:n.opts.log}:{},turnMap:e.turnMap}}appendEvent(e,r){e.pendingEvents.push(r);let n=pF(r);if(e.pendingBytes+=n,e.pendingBytes>=this.pushByteCap){this.flush(e,"byte_cap");return}e.pushTimer===void 0&&(e.pushTimer=this.timers.setTimeout(()=>{this.flush(e,"window_idle")},this.pushWindowMs))}async flush(e,r){if(e.pushTimer!==void 0&&(this.timers.clearTimeout(e.pushTimer),e.pushTimer=void 0),e.pendingEvents.length===0)return;let n=e.pendingEvents;e.pendingEvents=[],e.pendingBytes=0;let s={kind:"provider",session_id:e.session_id,direction:"agent_to_user",events:n,ts:(this.opts.now??Date.now)()};try{await this.opts.publish(s),this.opts.log?.(`[dt-3] flushed session=${e.session_id} reason=${r} events=${n.length}`)}catch(i){this.opts.log?.(`[dt-3] publish failed session=${e.session_id} reason=${r}: ${i instanceof Error?i.message:String(i)}`)}}wireChildExit(e,r){let n=e.generation;r.on("exit",(s,i)=>{n===e.generation&&(e.closed||(this.appendEvent(e,{event_type:"error",payload:{message:`provider child exited code=${s??"?"} signal=${i??""}; session ended. Click Reset to start a new chat.`}}),this.flush(e,"child_exit"),e.closed=!0))}),r.on("error",s=>{n===e.generation&&(e.closed||(this.appendEvent(e,{event_type:"error",payload:{message:`provider child error: ${s.message}`}}),this.flush(e,"child_exit")))})}};_F={codex:{cmd:"codex",args:["app-server","--listen","stdio://"]},claude:{cmd:"claude",args:["-p","","--output-format","stream-json","--input-format","stream-json","--verbose","--dangerously-skip-permissions"]},gemini:{cmd:"gemini",args:["--acp","-y","--skip-trust"]},copilot:{cmd:"copilot",args:["--acp","--yolo"]},opencode:{cmd:"opencode",args:["acp"]},kimi:{cmd:"kimi",args:["acp"]},qwen:{cmd:"qwen",args:["-p","","--output-format","stream-json","--input-format","stream-json","--approval-mode","yolo"]}}});function cT(t,e){t.post("/mailbox/chat/launch",r=>hF(r,e)),t.post("/mailbox/chat/end/:session_id",r=>gF(r,e)),t.get("/mailbox/chat/sessions",r=>yF(r,e))}async function hF(t,e){let r=e.persistentSessionManager;if(r===void 0)return t.json({error:"chat_unavailable",message:"persistent session manager not configured (mailbox runtime missing)"},503);let n;try{n=await t.req.json()}catch{return t.json({error:"bad_request",message:"invalid JSON body"},400)}let s=n.session_id;if(typeof s!="string"||!dT.test(s))return t.json({error:"bad_request",message:"session_id must be a UUIDv7 string"},400);let i=n.provider;if(typeof i!="string"||i==="")return t.json({error:"bad_request",message:"provider is required"},400);let o;if(typeof n.command_line=="string"&&n.command_line.trim()!==""){if(o=lT(n.command_line),o===void 0)return t.json({error:"bad_request",message:"command_line could not be parsed"},400)}else{let a=aT(i);if(a===void 0)return t.json({error:"no_default_for_provider",message:`no PERSISTENT_LAUNCH_DEFAULTS entry for provider "${i}"`},400);o={cmd:a.cmd,args:[...a.args]}}try{let{pid:a}=await r.startSession({session_id:s,provider:i,command:o.cmd,args:o.args,...typeof n.cwd=="string"&&n.cwd!==""?{cwd:n.cwd}:{}});return t.json({session_id:s,provider:i,pid:a,command:o.cmd,args:o.args},201)}catch(a){let l=a instanceof Error?a.message:String(a);return l.startsWith("persistent_session_already_exists")?t.json({error:"session_exists",message:l},409):l.startsWith("no_persistent_adapter_for_provider")?t.json({error:"no_adapter",message:l},400):t.json({error:"spawn_failed",message:l},500)}}async function gF(t,e){let r=e.persistentSessionManager;if(r===void 0)return t.json({error:"chat_unavailable",message:"persistent session manager not configured"},503);let n=t.req.param("session_id");return n===void 0||!dT.test(n)?t.json({error:"bad_request",message:"session_id must be a UUIDv7 string"},400):(await r.endSession(n),t.json({session_id:n,ended:!0}))}function yF(t,e){let r=e.persistentSessionManager;return r===void 0?t.json({sessions:[],note:"persistent session manager not configured"}):t.json({sessions:r.listSessions()})}var dT,uT=w(()=>{"use strict";Ku();dT=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i});import{readFileSync as EF}from"node:fs";function fT(t){let e=t.artifacts.find(r=>r.kind===`${t.state_name}_transcript`);if(e?.content!==void 0&&e.content!==null)return mT(e.content);if(e?.path===void 0||e.path===null)return[];try{let r=EF(e.path,{encoding:"utf8"});return mT(r)}catch{return[]}}function mT(t){let e=t.split(/\r?\n/).filter(r=>r.trim().length>0);return e.length===0?[]:e.map(r=>{let n=/^(user|assistant|system|tool)\s*:\s*(.*)$/i.exec(r);return n===null?{role:"transcript",text:r}:{role:n[1].toLowerCase(),text:n[2]}})}var pT=w(()=>{"use strict"});function _T(t,e,r){let n=t.getRun(e);if(n===null)return{err:`run ${e}: not found`};if(r!==void 0){let l=t.findTeamMemberByAlias(n.team_id,r);return l===null?{err:`run ${e}: team has no member alias "${r}"`}:l.sessionid===null||l.sessionid.length===0?{err:`run ${e}: member "${l.alias}" has no sessionid yet (seed first)`}:{ok:{provider:l.provider,sessionid:l.sessionid,sessiondir:l.sessiondir,alias:l.alias,...l.model!==null&&l.model!==void 0?{model:l.model}:{}}}}let s=t.latestAgentCall(e);if(s!==null){let l=t.findTeamMemberByAlias(n.team_id,s.alias);return l===null?{err:`run ${e}: team has no member alias "${s.alias}" (latest agent_call references a member that has been removed)`}:l.sessionid===null||l.sessionid.length===0?{err:`run ${e}: member "${l.alias}" has no sessionid yet (seed first)`}:{ok:{provider:l.provider,sessionid:l.sessionid,sessiondir:l.sessiondir,alias:l.alias,...l.model!==null&&l.model!==void 0?{model:l.model}:{}}}}let o=t.listTeamMembers(n.team_id).filter(l=>l.state!=="retired"&&l.sessionid!==null&&l.sessionid.length>0);if(o.length===0)return{err:`run ${e}: cannot resolve an agent session (no agent_call yet, no seeded member)`};if(o.length>1){let l=o.map(d=>d.alias).join(", ");return{err:`run ${e}: cannot resolve an agent session (no agent_call yet; team has multiple members [${l}] \u2014 pass --alias)`}}let a=o[0];return{ok:{provider:a.provider,sessionid:a.sessionid,sessiondir:a.sessiondir,alias:a.alias,...a.model!==null&&a.model!==void 0?{model:a.model}:{}}}}function $a(t,e){let r=t.query(`SELECT id, kind FROM attention
2313
2313
  WHERE run_id = ?
@@ -2319,7 +2319,7 @@ ${p.text}`,["approve","request_changes"],!0,s,e.writes_to_project_path===!0)));i
2319
2319
  <label>Token <input name="token" type="password"></label>
2320
2320
  <button type="submit">Login</button>
2321
2321
  </form>
2322
- `))),e.post("/login",async s=>{let i=await s.req.parseBody(),o=typeof i.token=="string"?i.token:"";return by(o)?(ou(s,o),s.redirect("/",302)):s.html(Fe("Login","<p>Invalid token</p>"),401)}),e.post("/logout",s=>(Sy(s),s.redirect("/login",302))),Rw(e,{dal:t.dal}),kT(e,{dal:t.dal}),Gw(e,{dal:t.dal}),sT(e,{terminalSessionManager:t.terminalSessionManager}),cT(e,{persistentSessionManager:t.persistentSessionManager}),e.post("/api/teams/:team_name/refresh",async s=>{let i=qs(s.req.param("team_name")),o=t.dal.findTeamByName(i);if(o===null)return s.notFound();let a=[],d=t.dal.db.transaction(()=>{let m=t.dal.listTeamMembers(o.id),f=m.filter(p=>p.state!=="idle");if(f.length>0)return{ok:!1,nonIdle:f.map(p=>({alias:p.alias,state:p.state}))};for(let p of m)t.dal.setMemberState(p.id,"in_chat","refreshing");return a=m.map(p=>({id:p.id,alias:p.alias})),{ok:!0}})();if(!d.ok){let m=d.nonIdle.map(f=>`${f.alias}:${f.state}`).join(", ");return s.text(`refresh refused: non-idle members: ${m}`,409)}let c=[],u=[];for(let m of a)try{await Rc(t.dal,i,m.alias),t.dal.setMemberState(m.id,"idle",null),c.push(m.alias)}catch(f){let p=f instanceof Error?f.message:String(f);t.dal.setMemberState(m.id,"attention_needed",`refresh failed: ${p}`),u.push({alias:m.alias,error:p})}return q(s,{team:i,seeded:c,failed:u},m=>`<p>refreshed team ${b(m.team)}: seeded [${m.seeded.map(f=>b(f)).join(", ")}]${m.failed.length>0?` failed [${m.failed.map(f=>`${b(f.alias)}: ${b(f.error)}`).join(", ")}]`:""}</p>`)}),Ly(e,{dal:t.dal}),Py(e,{dal:t.dal}),e.get("/api/status",s=>q(s,xo(t.dal),a1)),e.get("/api/projects",s=>q(s,Ro(t.dal),l1)),e.get("/api/teams",s=>q(s,Tg(t.dal),u1)),e.get("/api/workflows",s=>q(s,Lo(t.dal),m1)),e.get("/api/workflows/verify",s=>{let i=pw();return s.req.header("accept")?.includes("text/plain")?s.text(hw(i)):s.json(i)}),e.get("/api/jobs",s=>q(s,vg(t.dal,{status:s.req.query("status")}),f1)),e.post("/api/uploads",s=>OT(s,t.dal)),e.get("/api/jobs/:id",s=>{let i=Oo(t.dal,ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.post("/api/jobs",async s=>{let i;try{i=await s.req.json()}catch{return s.text("invalid JSON body",400)}let o=null;if(typeof i.project_id=="number")o=i.project_id;else if(typeof i.project=="string"){let m=t.dal.findProjectByName(i.project);if(m===null)return s.text(`project not found: ${i.project}`,404);o=m.id}else{let m=t.dal.listProjects();m.length===1&&(o=m[0].id)}if(o===null)return s.text("missing project or project_id",400);let a=typeof i.workflow_id_override=="number"?i.workflow_id_override:null;if(a===null&&typeof i.workflow=="string"){let m=t.dal.getWorkflowByName(i.workflow);if(m===null)return s.text(`workflow not found: ${i.workflow}`,404);a=m.id}let l=typeof i.source=="string"?i.source:"manual",d=i.payload,c=d==null?null:typeof d=="string"?d:JSON.stringify(d),u=t.dal.enqueueJob({project_id:o,workflow_id_override:a,source:l,source_ref:typeof i.source_ref=="string"?i.source_ref:null,payload:c,priority:typeof i.priority=="number"?i.priority:0,dedupe_key:typeof i.dedupe_key=="string"?i.dedupe_key:null});return q(s,u,_e)}),e.post("/api/jobs/:id/run",async s=>{let{runJobById:i}=await Promise.resolve().then(()=>(wa(),Iw)),o=Oo(t.dal,ie(s,"id"));if(o===null)return s.notFound();let a=await i({dal:t.dal,worker_id:`api-job-run-${process.pid}-${Date.now()}`,job_id:o.id});return a.claimed?s.json({job_id:a.job_id,run_id:a.run_id,status:a.status,terminal_state:a.terminal_state,ms:a.ms}):s.json(a,409)}),e.get("/api/workflows/:name",s=>{let i=t.dal.getWorkflowByName(s.req.param("name"));return i===null?s.notFound():q(s,i,_e)}),e.get("/api/projects/:name/workflows",s=>{let i=t.dal.findProjectByName(s.req.param("name"));return i===null?s.notFound():q(s,t.dal.listProjectWorkflows(i.id),d1)}),e.post("/api/projects/:name/workflows",async s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.text(o,400);let a=typeof o.workflow=="string"?o.workflow:null,l=typeof o.workflow_id=="number"?o.workflow_id:null,d=l!==null?t.dal.getWorkflow(l):a!==null?t.dal.getWorkflowByName(a):null;if(d===null)return s.text("workflow not found",404);let c=typeof o.condition=="string"&&o.condition.length>0?o.condition:null;if(c!==null)try{Fn(c)}catch{return s.text("invalid condition",400)}let u=n1(o.parameters_override??o.params);if(typeof u=="string"&&u.startsWith("error:"))return s.text(u.slice(6),400);let m=typeof o.priority=="number"&&Number.isInteger(o.priority)?o.priority:100,f=t.dal.insertProjectWorkflow({project_id:i.id,workflow_id:d.id,condition:c,parameters_override:u,priority:m});return q(s,f,_e)}),e.get("/api/projects/workflows/:id",s=>{let i=t.dal.getProjectWorkflow(ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.delete("/api/projects/workflows/:id",s=>t.dal.removeProjectWorkflow(ie(s,"id"))?q(s,{removed:!0},_e):s.notFound()),e.post("/api/projects/workflows/:id/enable",s=>{let i=t.dal.setProjectWorkflowEnabled(ie(s,"id"),!0);return i===null?s.notFound():q(s,i,_e)}),e.post("/api/projects/workflows/:id/disable",s=>{let i=t.dal.setProjectWorkflowEnabled(ie(s,"id"),!1);return i===null?s.notFound():q(s,i,_e)}),e.get("/api/projects/:name/issues",s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=MT(s.req.query("status"),s1);if(typeof o=="string")return s.text(o,400);let a=MT(s.req.query("severity"),qT);return typeof a=="string"?s.text(a,400):q(s,t.dal.listIssues(i.id,{...o!==void 0?{status:o}:{},...a!==void 0?{severity:a}:{},...s.req.query("ai_test_path")!==void 0?{ai_test_path:s.req.query("ai_test_path")}:{}}),c1)}),e.post("/api/projects/:name/issues",async s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.text(o,400);let a=typeof o.title=="string"&&o.title.trim().length>0?o.title:null,l=typeof o.body=="string"?o.body:null;if(a===null||l===null)return s.text("missing title or body",400);let d=i1(o.severity);if(typeof d=="object")return s.text(d.error,400);let c=o1(o.labels);if(typeof c=="string"&&c.startsWith("error:"))return s.text(c.slice(6),400);let u=t.dal.createIssue({project_id:i.id,title:a,body:l,...d!==void 0?{severity:d}:{},labels:c,ai_test_path:typeof o.ai_test_path=="string"?o.ai_test_path:null,source_run_id:typeof o.source_run_id=="number"?o.source_run_id:null});return q(s,u,_e)}),e.get("/api/issues/:id",s=>{let i=t.dal.getIssue(ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.post("/api/issues/:id/claim",async s=>{let i=ie(s,"id"),o=t.dal.getIssue(i);if(o===null)return s.notFound();let a=await Qn(s);if(typeof a=="string")return s.json({error:a},400);let l=typeof a.assigned_run_id=="number"?a.assigned_run_id:null;if(l===null)return s.json({error:"missing assigned_run_id"},400);let d=t.dal.claimIssue(i,l);return d===null?s.json({error:`issue ${i} is not in a claimable state (status=${o.status})`},400):q(s,d,_e)}),e.post("/api/projects/:name/issues/claim-next",async s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.json({error:"project_not_found"},404);let o=await Qn(s);if(typeof o=="string")return s.json({error:o},400);let a=typeof o.assigned_run_id=="number"?o.assigned_run_id:null;if(a===null)return s.json({error:"missing assigned_run_id"},400);let l=t.dal.claimNextIssue(i.id,a);return l===null?s.json({status:"queue_empty"},404):q(s,l,_e)}),e.post("/api/issues/:id/close",async s=>{let i=t.dal.getIssue(ie(s,"id"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.json({error:o},400);let a=typeof o.closed_run_id=="number"?o.closed_run_id:i.assigned_run_id;if(a===null)return s.json({error:"missing closed_run_id"},400);try{return q(s,t.dal.closeIssue(ie(s,"id"),a,typeof o.commit_hash=="string"?o.commit_hash:null),_e)}catch(l){return s.json({error:l instanceof Error?l.message:String(l)},400)}}),e.post("/api/issues/:id/reopen",async s=>{let i=t.dal.getIssue(ie(s,"id"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.json({error:o},400);let a=typeof o.source_run_id=="number"?o.source_run_id:i.closed_run_id??i.source_run_id;if(a===null)return s.json({error:"missing source_run_id"},400);try{return q(s,t.dal.reopenIssue(ie(s,"id"),a),_e)}catch(l){return s.json({error:l instanceof Error?l.message:String(l)},400)}}),e.get("/api/projects/:name",s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=i.name.indexOf("/"),a=o>0?i.name.slice(0,o):null,l=o>0?i.name.slice(o+1):i.name;return q(s,{...i,owner:a,repo:l},_e)}),e.get("/api/runs/:run_id/artifacts",s=>{let i=ie(s,"run_id"),o=s.req.query("kind"),a=Zr(t.dal,i,o);return q(s,a,_e)}),e.get("/api/runs/:run_id/artifacts/:kind",async s=>{let i=ie(s,"run_id"),o=s.req.param("kind"),a=Zr(t.dal,i,o);if(a.length===0)return s.notFound();let l=a[a.length-1],d=s.req.query("raw")==="true";if(l.content!==null&&l.content!==void 0)return d?s.text(l.content):q(s,l,_e);if(l.path!==null&&l.path!==void 0){if(d)try{let{readFileSync:c}=await import("node:fs"),u=t1(l.path);if(r1(u)){let h=c(l.path,"utf8");return s.body(h,200,{"Content-Type":u})}let m=c(l.path),f=m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength),p=XF(l.path);return s.body(f,200,{"Content-Type":u,"Content-Disposition":`attachment; filename="${p}"`})}catch(c){return s.text(`failed to read artifact path: ${c.message}`,500)}return q(s,l,_e)}return q(s,l,_e)}),e.get("/api/runs",s=>q(s,jn(t.dal,{limit:tm(s,"limit")??100}),p1)),e.get("/api/runs/:id",s=>{let i=zr(t.dal,ie(s,"id"));return i===null?s.notFound():q(s,i,_1)}),e.get("/api/runs/:id/where",s=>{let i=Pn(t.dal,ie(s,"id"));return i===null?s.notFound():s.req.header("accept")?.includes("text/plain")?s.text($o(i)):s.json(i)}),e.get("/api/runs/:id/timeline",s=>{let i=Mo(t.dal,ie(s,"id"));return i===null?s.notFound():s.req.header("accept")?.includes("text/plain")?s.text(Do(i)):s.json(i)}),e.post("/api/runs/:id/resume",async s=>{let i=s.req.query("outcome");if(i===void 0||i.length===0){let a=s.req.header("content-type")??"";if(a.includes("application/x-www-form-urlencoded")||a.includes("multipart/form-data")){let d=(await s.req.parseBody().catch(()=>({}))).outcome;typeof d=="string"&&d.length>0&&(i=d)}}if(i===void 0||i.length===0)return s.text("missing outcome",400);let o=t.dal.resumeRun(ie(s,"id"),i);return!o.resumed&&o.reason==="run_not_found"?s.notFound():o.resumed?(Ua(t.daemon),q(s,o,DT)):q(s,o,DT,400)}),e.post("/api/interactive/:step_id/respond",async s=>{let i=ie(s,"step_id"),o,a=!1;if((s.req.header("content-type")??"").includes("application/json"))try{let c=await s.req.json();typeof c.input=="string"&&(o=c.input),c.done===!0&&(a=!0)}catch{return s.text("invalid JSON body",400)}else{let c=await s.req.parseBody().catch(()=>({}));typeof c.input=="string"&&(o=c.input),(c.done==="true"||c.done===!0)&&(a=!0)}if(o===void 0)return s.text("missing input",400);let d=t.dal.resumeInteractive(i,o,a);return!d.resumed&&d.reason==="not_found"?s.notFound():d.resumed?(Ua(t.daemon),s.json({resumed:!0,session_status:d.session.status})):s.json({resumed:!1,reason:d.reason},400)}),e.get("/api/runs/:id/steps/:step_id",s=>$T(s,t.dal,i=>q(s,i,g1))),e.get("/api/runs/:id/steps/:step_id/transcript",s=>{let i=Ig(t.dal,ie(s,"id"),ie(s,"step_id"));return i===null?s.notFound():WT(s)?s.html(`<pre>${b(i)}</pre>`):s.req.header("accept")?.includes("text/plain")?s.text(i):s.json({transcript:i})}),e.get("/api/runs/:id/steps/:step_id/messages",s=>$T(s,t.dal,i=>{let o=fT(i);return q(s,o,a=>ye(["role","text"],a.map(l=>[b(l.role),b(l.text)])))})),e.get("/api/external-objects",s=>q(s,Ng(t.dal,{type:s.req.query("type")}),y1)),e.get("/api/external-signals",s=>q(s,Ag(t.dal,{unhandled:s.req.query("unhandled")==="true"}),E1)),e.get("/api/attentions",s=>q(s,xr(t.dal,{unacked:s.req.query("unacked")==="true"}),w1)),e.post("/api/attentions/:id/ack",s=>{let i=t.dal.acknowledgeAttention(ie(s,"id"));return i===null?s.notFound():q(s,i,o=>`<p>acknowledged attention ${b(o.id)}</p>`)}),e.get("/api/escalations",s=>{let i=s.req.query("project"),o=s.req.query("all")==="true",a=s.req.query("since"),l={all:o};i!==void 0&&(l.project=i),a!==void 0&&(l.since=a);let d=Co(t.dal,l);return q(s,d,c=>`<h1>Escalations</h1>${ye(["attention_id","project","run","workflow","state","prompt"],c.map(u=>[b(u.attention_id),b(u.project),b(u.run_id),b(u.workflow_name),b(u.state_name),b((u.prompt??"").slice(0,120))]))}`)}),e.get("/api/escalations/:id",s=>{let i=Ft(t.dal,ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.post("/api/escalations/:id/respond",async s=>{let i=ie(s,"id"),o,a=!1;if((s.req.header("content-type")??"").includes("application/json"))try{let f=await s.req.json();typeof f.input=="string"&&(o=f.input),f.done===!0&&(a=!0)}catch{return s.text("invalid JSON body",400)}else{let f=await s.req.parseBody().catch(()=>({}));typeof f.input=="string"&&(o=f.input),(f.done==="true"||f.done===!0)&&(a=!0)}if(o===void 0)return s.text("missing input",400);let d=Ft(t.dal,i);if(d===null)return s.notFound();let c=xr(t.dal).find(f=>f.id===i);if(c===void 0)return s.notFound();if(c.kind==="workflow_escalation"){let f=t.dal.resumeEscalation(i,o);if(!f.resumed)return s.json({ok:!1,reason:f.reason},400);Ua(t.daemon);let p=xr(t.dal).find(h=>h.id===i);return s.json({ok:!0,attention_id:i,run_id:f.run.id,decision:o,session_status:"escalation_resumed",acknowledged_at:p?.acknowledged_at??null})}if(c.kind!=="interactive_waiting_operator")return s.json({ok:!1,reason:"wrong_kind",kind:c.kind},400);if(c.acknowledged_at!==null)return s.json({ok:!1,reason:"already_acked"},400);if(d.step_id===null)return s.json({ok:!1,reason:"no_step"},400);let u=t.dal.resumeInteractive(d.step_id,o,a);if(!u.resumed)return s.json({ok:!1,reason:u.reason,step_id:d.step_id},400);let m=t.dal.acknowledgeAttention(i);return Ua(t.daemon),s.json({ok:!0,attention_id:i,step_id:d.step_id,session_status:u.session.status,acknowledged_at:m?.acknowledged_at??null})}),e.get("/api/submitted-prs",s=>{let i=s.req.query("pr_url"),o=s.req.query("status"),a=bg(t.dal,{status:o,pr_url:i});return q(s,a,T1)}),e.get("/api/submitted-prs/:id",s=>{let i=ie(s,"id"),o=Sg(t.dal,i);return o===null?s.notFound():q(s,o,v1)}),e.get("/api/sessions",s=>q(s,t.dal.latestSessionSizes(),jT)),e.get("/api/sessions/:team_name/:alias/history",s=>{let i=qs(s.req.param("team_name"));return q(s,t.dal.sessionSizeHistory(i,s.req.param("alias")),jT)}),e.post("/api/sessions/:team_name/:alias/compact",async s=>{let i=qs(s.req.param("team_name"));try{let o=await pg(t.dal,i,s.req.param("alias"));return q(s,o,a=>PT("compacted",a.row))}catch(o){if(o instanceof Ws)return s.text(o.message,409);throw o}}),e.post("/api/sessions/:team_name/:alias/refresh",async s=>{let i=qs(s.req.param("team_name")),o=await Rc(t.dal,i,s.req.param("alias"));return q(s,o,a=>PT(`refreshed ${a.sessionid}`,a.row))}),e.get("/api/intake/state",s=>q(s,r,FT)),e.post("/api/intake/scan",async s=>(r=await Zo(t.dal),q(s,r,FT))),e.get("/api/stats/run-throughput",s=>q(s,Lg(t.dal),b1)),e.get("/api/daemon/state",s=>q(s,t.daemon?.state??null,S1)),e.post("/api/daemon/cycle",async s=>{if(t.daemon===void 0)return q(s,{disabled:!0},_e);let i=await t.daemon.runCycle();return q(s,{state:t.daemon.state,result:i},_e)}),e.get("/metrics/:project_id",s=>{let i=ie(s,"project_id"),o=t.dal.getProject(i);if(o===null)return s.notFound();let a=jc(t.dal,i),l=Pc(t.dal,{project_id:i});return s.html(Fe(`Metrics \u2014 ${o.name}`,k1(o.name,a,l)))}),e.get("/api/metrics/reviewer/:project_id",s=>{let i=ie(s,"project_id");if(t.dal.getProject(i)===null)return s.notFound();let o=tm(s,"since_days");return s.json(jc(t.dal,i,o))}),e.get("/api/metrics/tools/:project_id",s=>{let i=ie(s,"project_id");if(t.dal.getProject(i)===null)return s.notFound();let o=tm(s,"since_days");return s.json(Pc(t.dal,{project_id:i,since_days:o}))}),e.post("/api/drift/:id/ack",s=>{let i=t.dal.acknowledgeDriftSignal(ie(s,"id"));return i===null?s.notFound():s.json({id:i.id,acknowledged_at:i.acknowledged_at})}),e}function $T(t,e,r){let n=Dc(e,ie(t,"id"),ie(t,"step_id"));return n===null?t.notFound():r(n)}function Ua(t){t!==void 0&&t.runCycle().catch(()=>{})}function q(t,e,r,n=200){return WT(t)?n===200?t.html(r(e)):t.html(r(e),400):new Response(JSON.stringify(e),{status:n,headers:{"Content-Type":"application/json; charset=UTF-8"}})}function WT(t){let e=t.req.header("accept")??"";return e.includes("text/html")&&!e.includes("application/json")}function QF(){let t=process.env.LMCTL_WEBUI_DIST;if(t!==void 0)return Fa(`${t}/index.html`)?rm(t):null;let e="src/serve/webui-dist";if(Fa(`${e}/index.html`))return e;let r="dist/serve/webui-dist";if(Fa(`${r}/index.html`))return r;let n=VF(JF(zF(import.meta.url)),"webui-dist");return Fa(`${n}/index.html`)?rm(n):null}function rm(t){if(!KF(t))return t;let e=YF(process.cwd(),t);return e.length===0?".":e}function e1(){return async(t,e)=>{await e(),t.header("Cache-Control","no-store")}}function ie(t,e){return Number(t.req.param(e))}function tm(t,e){let r=t.req.query(e);if(r===void 0)return;let n=Number(r);return Number.isInteger(n)&&n>0?n:void 0}function t1(t){switch(GF(t).toLowerCase()){case".txt":return"text/plain; charset=utf-8";case".md":return"text/markdown; charset=utf-8";case".html":case".htm":return"text/html; charset=utf-8";case".css":return"text/css; charset=utf-8";case".csv":return"text/csv; charset=utf-8";case".json":return"application/json; charset=utf-8";case".xml":return"application/xml; charset=utf-8";case".yaml":case".yml":return"text/yaml; charset=utf-8";case".js":case".mjs":case".cjs":return"text/javascript; charset=utf-8";case".ts":return"text/x-typescript; charset=utf-8";case".log":return"text/plain; charset=utf-8";case".docx":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case".xlsx":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case".pptx":return"application/vnd.openxmlformats-officedocument.presentationml.presentation";case".pdf":return"application/pdf";case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";case".zip":return"application/zip";case".gz":return"application/gzip";default:return"application/octet-stream"}}function r1(t){return!!(t.startsWith("text/")||t.startsWith("application/json")||t.startsWith("application/xml"))}async function Qn(t){try{let e=await t.req.json();return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:"invalid JSON body"}catch{return"invalid JSON body"}}function n1(t){if(t==null)return null;if(typeof t=="string"){try{let e=JSON.parse(t);if(e!==null&&typeof e=="object"&&!Array.isArray(e))return JSON.stringify(e)}catch{return"error:invalid parameters_override JSON"}return"error:parameters_override must be a JSON object"}return typeof t=="object"&&!Array.isArray(t)?JSON.stringify(t):"error:parameters_override must be a JSON object"}function MT(t,e){if(t===void 0||t.length===0)return;let r=t.split(",").map(n=>n.trim()).filter(n=>n.length>0);if(r.length!==0){for(let n of r)if(!e.includes(n))return`invalid value: ${n}`;return r}}function i1(t){if(t!=null)return typeof t=="string"&&qT.includes(t)?t:{error:`invalid severity: ${String(t)}`}}function o1(t){if(t==null)return null;if(typeof t=="string")try{let e=JSON.parse(t);return Array.isArray(e)&&e.every(r=>typeof r=="string")?JSON.stringify(e):"error:labels must be a JSON string array"}catch{return"error:invalid labels JSON"}return Array.isArray(t)&&t.every(e=>typeof e=="string")?JSON.stringify(t):"error:labels must be a JSON string array"}function a1(t){return`<h1>Status</h1><div class="grid">
2322
+ `))),e.post("/login",async s=>{let i=await s.req.parseBody(),o=typeof i.token=="string"?i.token:"";return by(o)?(ou(s,o),s.redirect("/",302)):s.html(Fe("Login","<p>Invalid token</p>"),401)}),e.post("/logout",s=>(Sy(s),s.redirect("/login",302))),Rw(e,{dal:t.dal}),kT(e,{dal:t.dal}),Gw(e,{dal:t.dal}),sT(e,{terminalSessionManager:t.terminalSessionManager}),cT(e,{persistentSessionManager:t.persistentSessionManager}),e.post("/api/teams/:team_name/refresh",async s=>{let i=qs(s.req.param("team_name")),o=t.dal.findTeamByName(i);if(o===null)return s.notFound();let a=[],d=t.dal.db.transaction(()=>{let m=t.dal.listTeamMembers(o.id),f=m.filter(p=>p.state!=="idle");if(f.length>0)return{ok:!1,nonIdle:f.map(p=>({alias:p.alias,state:p.state}))};for(let p of m)t.dal.setMemberState(p.id,"in_chat","refreshing");return a=m.map(p=>({id:p.id,alias:p.alias})),{ok:!0}})();if(!d.ok){let m=d.nonIdle.map(f=>`${f.alias}:${f.state}`).join(", ");return s.text(`refresh refused: non-idle members: ${m}`,409)}let c=[],u=[];for(let m of a)try{await Rc(t.dal,i,m.alias),t.dal.setMemberState(m.id,"idle",null),c.push(m.alias)}catch(f){let p=f instanceof Error?f.message:String(f);t.dal.setMemberState(m.id,"attention_needed",`refresh failed: ${p}`),u.push({alias:m.alias,error:p})}return q(s,{team:i,seeded:c,failed:u},m=>`<p>refreshed team ${b(m.team)}: seeded [${m.seeded.map(f=>b(f)).join(", ")}]${m.failed.length>0?` failed [${m.failed.map(f=>`${b(f.alias)}: ${b(f.error)}`).join(", ")}]`:""}</p>`)}),Ly(e,{dal:t.dal}),Py(e,{dal:t.dal}),e.get("/api/status",s=>q(s,xo(t.dal),a1)),e.get("/api/projects",s=>q(s,Ro(t.dal),l1)),e.get("/api/teams",s=>q(s,Tg(t.dal),u1)),e.get("/api/workflows",s=>q(s,Lo(t.dal),m1)),e.get("/api/workflows/verify",s=>{let i=pw();return s.req.header("accept")?.includes("text/plain")?s.text(hw(i)):s.json(i)}),e.get("/api/jobs",s=>q(s,vg(t.dal,{status:s.req.query("status")}),f1)),e.post("/api/uploads",s=>OT(s,t.dal)),e.get("/api/jobs/:id",s=>{let i=Oo(t.dal,ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.post("/api/jobs",async s=>{let i;try{i=await s.req.json()}catch{return s.text("invalid JSON body",400)}let o=null;if(typeof i.project_id=="number")o=i.project_id;else if(typeof i.project=="string"){let m=t.dal.findProjectByName(i.project);if(m===null)return s.text(`project not found: ${i.project}`,404);o=m.id}else{let m=t.dal.listProjects();m.length===1&&(o=m[0].id)}if(o===null)return s.text("missing project or project_id",400);let a=typeof i.workflow_id_override=="number"?i.workflow_id_override:null;if(a===null&&typeof i.workflow=="string"){let m=t.dal.getWorkflowByName(i.workflow);if(m===null)return s.text(`workflow not found: ${i.workflow}`,404);a=m.id}let l=typeof i.source=="string"?i.source:"manual",d=i.payload,c=d==null?null:typeof d=="string"?d:JSON.stringify(d),u=t.dal.enqueueJob({project_id:o,workflow_id_override:a,source:l,source_ref:typeof i.source_ref=="string"?i.source_ref:null,payload:c,priority:typeof i.priority=="number"?i.priority:0,dedupe_key:typeof i.dedupe_key=="string"?i.dedupe_key:null});return q(s,u,_e)}),e.post("/api/jobs/:id/run",async s=>{let{runJobById:i}=await Promise.resolve().then(()=>(wa(),Iw)),o=Oo(t.dal,ie(s,"id"));if(o===null)return s.notFound();let a=await i({dal:t.dal,worker_id:`api-job-run-${process.pid}-${Date.now()}`,job_id:o.id});return a.claimed?s.json({job_id:a.job_id,run_id:a.run_id,status:a.status,terminal_state:a.terminal_state,ms:a.ms}):s.json(a,409)}),e.get("/api/workflows/:name",s=>{let i=t.dal.getWorkflowByName(s.req.param("name"));return i===null?s.notFound():q(s,i,_e)}),e.get("/api/projects/:name/workflows",s=>{let i=t.dal.findProjectByName(s.req.param("name"));return i===null?s.notFound():q(s,t.dal.listProjectWorkflows(i.id),d1)}),e.post("/api/projects/:name/workflows",async s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.text(o,400);let a=typeof o.workflow=="string"?o.workflow:null,l=typeof o.workflow_id=="number"?o.workflow_id:null,d=l!==null?t.dal.getWorkflow(l):a!==null?t.dal.getWorkflowByName(a):null;if(d===null)return s.text("workflow not found",404);let c=typeof o.condition=="string"&&o.condition.length>0?o.condition:null;if(c!==null)try{Fn(c)}catch{return s.text("invalid condition",400)}let u=n1(o.parameters_override??o.params);if(typeof u=="string"&&u.startsWith("error:"))return s.text(u.slice(6),400);let m=typeof o.priority=="number"&&Number.isInteger(o.priority)?o.priority:100,f=t.dal.insertProjectWorkflow({project_id:i.id,workflow_id:d.id,condition:c,parameters_override:u,priority:m});return q(s,f,_e)}),e.get("/api/projects/workflows/:id",s=>{let i=t.dal.getProjectWorkflow(ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.delete("/api/projects/workflows/:id",s=>t.dal.removeProjectWorkflow(ie(s,"id"))?q(s,{removed:!0},_e):s.notFound()),e.post("/api/projects/workflows/:id/enable",s=>{let i=t.dal.setProjectWorkflowEnabled(ie(s,"id"),!0);return i===null?s.notFound():q(s,i,_e)}),e.post("/api/projects/workflows/:id/disable",s=>{let i=t.dal.setProjectWorkflowEnabled(ie(s,"id"),!1);return i===null?s.notFound():q(s,i,_e)}),e.get("/api/projects/:name/issues",s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=MT(s.req.query("status"),s1);if(typeof o=="string")return s.text(o,400);let a=MT(s.req.query("severity"),qT);return typeof a=="string"?s.text(a,400):q(s,t.dal.listIssues(i.id,{...o!==void 0?{status:o}:{},...a!==void 0?{severity:a}:{},...s.req.query("ai_test_path")!==void 0?{ai_test_path:s.req.query("ai_test_path")}:{}}),c1)}),e.post("/api/projects/:name/issues",async s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.text(o,400);let a=typeof o.title=="string"&&o.title.trim().length>0?o.title:null,l=typeof o.body=="string"?o.body:null;if(a===null||l===null)return s.text("missing title or body",400);let d=i1(o.severity);if(typeof d=="object")return s.text(d.error,400);let c=o1(o.labels);if(typeof c=="string"&&c.startsWith("error:"))return s.text(c.slice(6),400);let u=t.dal.createIssue({project_id:i.id,title:a,body:l,...d!==void 0?{severity:d}:{},labels:c,ai_test_path:typeof o.ai_test_path=="string"?o.ai_test_path:null,source_run_id:typeof o.source_run_id=="number"?o.source_run_id:null});return q(s,u,_e)}),e.get("/api/issues/:id",s=>{let i=t.dal.getIssue(ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.post("/api/issues/:id/claim",async s=>{let i=ie(s,"id"),o=t.dal.getIssue(i);if(o===null)return s.notFound();let a=await Qn(s);if(typeof a=="string")return s.json({error:a},400);let l=typeof a.assigned_run_id=="number"?a.assigned_run_id:null;if(l===null)return s.json({error:"missing assigned_run_id"},400);let d=t.dal.claimIssue(i,l);return d===null?s.json({error:`issue ${i} is not in a claimable state (status=${o.status})`},400):q(s,d,_e)}),e.post("/api/projects/:name/issues/claim-next",async s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.json({error:"project_not_found"},404);let o=await Qn(s);if(typeof o=="string")return s.json({error:o},400);let a=typeof o.assigned_run_id=="number"?o.assigned_run_id:null;if(a===null)return s.json({error:"missing assigned_run_id"},400);let l=t.dal.claimNextIssue(i.id,a);return l===null?s.json({status:"queue_empty"},404):q(s,l,_e)}),e.post("/api/issues/:id/close",async s=>{let i=t.dal.getIssue(ie(s,"id"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.json({error:o},400);let a=typeof o.closed_run_id=="number"?o.closed_run_id:i.assigned_run_id;if(a===null)return s.json({error:"missing closed_run_id"},400);try{return q(s,t.dal.closeIssue(ie(s,"id"),a,typeof o.commit_hash=="string"?o.commit_hash:null),_e)}catch(l){return s.json({error:l instanceof Error?l.message:String(l)},400)}}),e.post("/api/issues/:id/reopen",async s=>{let i=t.dal.getIssue(ie(s,"id"));if(i===null)return s.notFound();let o=await Qn(s);if(typeof o=="string")return s.json({error:o},400);let a=typeof o.source_run_id=="number"?o.source_run_id:i.closed_run_id??i.source_run_id;if(a===null)return s.json({error:"missing source_run_id"},400);try{return q(s,t.dal.reopenIssue(ie(s,"id"),a),_e)}catch(l){return s.json({error:l instanceof Error?l.message:String(l)},400)}}),e.get("/api/projects/:name",s=>{let i=t.dal.findProjectByName(s.req.param("name"));if(i===null)return s.notFound();let o=i.name.indexOf("/"),a=o>0?i.name.slice(0,o):null,l=o>0?i.name.slice(o+1):i.name;return q(s,{...i,owner:a,repo:l},_e)}),e.get("/api/runs/:run_id/artifacts",s=>{let i=ie(s,"run_id"),o=s.req.query("kind"),a=Qr(t.dal,i,o);return q(s,a,_e)}),e.get("/api/runs/:run_id/artifacts/:kind",async s=>{let i=ie(s,"run_id"),o=s.req.param("kind"),a=Qr(t.dal,i,o);if(a.length===0)return s.notFound();let l=a[a.length-1],d=s.req.query("raw")==="true";if(l.content!==null&&l.content!==void 0)return d?s.text(l.content):q(s,l,_e);if(l.path!==null&&l.path!==void 0){if(d)try{let{readFileSync:c}=await import("node:fs"),u=t1(l.path);if(r1(u)){let h=c(l.path,"utf8");return s.body(h,200,{"Content-Type":u})}let m=c(l.path),f=m.buffer.slice(m.byteOffset,m.byteOffset+m.byteLength),p=XF(l.path);return s.body(f,200,{"Content-Type":u,"Content-Disposition":`attachment; filename="${p}"`})}catch(c){return s.text(`failed to read artifact path: ${c.message}`,500)}return q(s,l,_e)}return q(s,l,_e)}),e.get("/api/runs",s=>q(s,jn(t.dal,{limit:tm(s,"limit")??100}),p1)),e.get("/api/runs/:id",s=>{let i=Zr(t.dal,ie(s,"id"));return i===null?s.notFound():q(s,i,_1)}),e.get("/api/runs/:id/where",s=>{let i=Pn(t.dal,ie(s,"id"));return i===null?s.notFound():s.req.header("accept")?.includes("text/plain")?s.text($o(i)):s.json(i)}),e.get("/api/runs/:id/timeline",s=>{let i=Mo(t.dal,ie(s,"id"));return i===null?s.notFound():s.req.header("accept")?.includes("text/plain")?s.text(Do(i)):s.json(i)}),e.post("/api/runs/:id/resume",async s=>{let i=s.req.query("outcome");if(i===void 0||i.length===0){let a=s.req.header("content-type")??"";if(a.includes("application/x-www-form-urlencoded")||a.includes("multipart/form-data")){let d=(await s.req.parseBody().catch(()=>({}))).outcome;typeof d=="string"&&d.length>0&&(i=d)}}if(i===void 0||i.length===0)return s.text("missing outcome",400);let o=t.dal.resumeRun(ie(s,"id"),i);return!o.resumed&&o.reason==="run_not_found"?s.notFound():o.resumed?(Ua(t.daemon),q(s,o,DT)):q(s,o,DT,400)}),e.post("/api/interactive/:step_id/respond",async s=>{let i=ie(s,"step_id"),o,a=!1;if((s.req.header("content-type")??"").includes("application/json"))try{let c=await s.req.json();typeof c.input=="string"&&(o=c.input),c.done===!0&&(a=!0)}catch{return s.text("invalid JSON body",400)}else{let c=await s.req.parseBody().catch(()=>({}));typeof c.input=="string"&&(o=c.input),(c.done==="true"||c.done===!0)&&(a=!0)}if(o===void 0)return s.text("missing input",400);let d=t.dal.resumeInteractive(i,o,a);return!d.resumed&&d.reason==="not_found"?s.notFound():d.resumed?(Ua(t.daemon),s.json({resumed:!0,session_status:d.session.status})):s.json({resumed:!1,reason:d.reason},400)}),e.get("/api/runs/:id/steps/:step_id",s=>$T(s,t.dal,i=>q(s,i,g1))),e.get("/api/runs/:id/steps/:step_id/transcript",s=>{let i=Ig(t.dal,ie(s,"id"),ie(s,"step_id"));return i===null?s.notFound():WT(s)?s.html(`<pre>${b(i)}</pre>`):s.req.header("accept")?.includes("text/plain")?s.text(i):s.json({transcript:i})}),e.get("/api/runs/:id/steps/:step_id/messages",s=>$T(s,t.dal,i=>{let o=fT(i);return q(s,o,a=>ye(["role","text"],a.map(l=>[b(l.role),b(l.text)])))})),e.get("/api/external-objects",s=>q(s,Ng(t.dal,{type:s.req.query("type")}),y1)),e.get("/api/external-signals",s=>q(s,Ag(t.dal,{unhandled:s.req.query("unhandled")==="true"}),E1)),e.get("/api/attentions",s=>q(s,xr(t.dal,{unacked:s.req.query("unacked")==="true"}),w1)),e.post("/api/attentions/:id/ack",s=>{let i=t.dal.acknowledgeAttention(ie(s,"id"));return i===null?s.notFound():q(s,i,o=>`<p>acknowledged attention ${b(o.id)}</p>`)}),e.get("/api/escalations",s=>{let i=s.req.query("project"),o=s.req.query("all")==="true",a=s.req.query("since"),l={all:o};i!==void 0&&(l.project=i),a!==void 0&&(l.since=a);let d=Co(t.dal,l);return q(s,d,c=>`<h1>Escalations</h1>${ye(["attention_id","project","run","workflow","state","prompt"],c.map(u=>[b(u.attention_id),b(u.project),b(u.run_id),b(u.workflow_name),b(u.state_name),b((u.prompt??"").slice(0,120))]))}`)}),e.get("/api/escalations/:id",s=>{let i=Ft(t.dal,ie(s,"id"));return i===null?s.notFound():q(s,i,_e)}),e.post("/api/escalations/:id/respond",async s=>{let i=ie(s,"id"),o,a=!1;if((s.req.header("content-type")??"").includes("application/json"))try{let f=await s.req.json();typeof f.input=="string"&&(o=f.input),f.done===!0&&(a=!0)}catch{return s.text("invalid JSON body",400)}else{let f=await s.req.parseBody().catch(()=>({}));typeof f.input=="string"&&(o=f.input),(f.done==="true"||f.done===!0)&&(a=!0)}if(o===void 0)return s.text("missing input",400);let d=Ft(t.dal,i);if(d===null)return s.notFound();let c=xr(t.dal).find(f=>f.id===i);if(c===void 0)return s.notFound();if(c.kind==="workflow_escalation"){let f=t.dal.resumeEscalation(i,o);if(!f.resumed)return s.json({ok:!1,reason:f.reason},400);Ua(t.daemon);let p=xr(t.dal).find(h=>h.id===i);return s.json({ok:!0,attention_id:i,run_id:f.run.id,decision:o,session_status:"escalation_resumed",acknowledged_at:p?.acknowledged_at??null})}if(c.kind!=="interactive_waiting_operator")return s.json({ok:!1,reason:"wrong_kind",kind:c.kind},400);if(c.acknowledged_at!==null)return s.json({ok:!1,reason:"already_acked"},400);if(d.step_id===null)return s.json({ok:!1,reason:"no_step"},400);let u=t.dal.resumeInteractive(d.step_id,o,a);if(!u.resumed)return s.json({ok:!1,reason:u.reason,step_id:d.step_id},400);let m=t.dal.acknowledgeAttention(i);return Ua(t.daemon),s.json({ok:!0,attention_id:i,step_id:d.step_id,session_status:u.session.status,acknowledged_at:m?.acknowledged_at??null})}),e.get("/api/submitted-prs",s=>{let i=s.req.query("pr_url"),o=s.req.query("status"),a=bg(t.dal,{status:o,pr_url:i});return q(s,a,T1)}),e.get("/api/submitted-prs/:id",s=>{let i=ie(s,"id"),o=Sg(t.dal,i);return o===null?s.notFound():q(s,o,v1)}),e.get("/api/sessions",s=>q(s,t.dal.latestSessionSizes(),jT)),e.get("/api/sessions/:team_name/:alias/history",s=>{let i=qs(s.req.param("team_name"));return q(s,t.dal.sessionSizeHistory(i,s.req.param("alias")),jT)}),e.post("/api/sessions/:team_name/:alias/compact",async s=>{let i=qs(s.req.param("team_name"));try{let o=await pg(t.dal,i,s.req.param("alias"));return q(s,o,a=>PT("compacted",a.row))}catch(o){if(o instanceof Ws)return s.text(o.message,409);throw o}}),e.post("/api/sessions/:team_name/:alias/refresh",async s=>{let i=qs(s.req.param("team_name")),o=await Rc(t.dal,i,s.req.param("alias"));return q(s,o,a=>PT(`refreshed ${a.sessionid}`,a.row))}),e.get("/api/intake/state",s=>q(s,r,FT)),e.post("/api/intake/scan",async s=>(r=await Zo(t.dal),q(s,r,FT))),e.get("/api/stats/run-throughput",s=>q(s,Lg(t.dal),b1)),e.get("/api/daemon/state",s=>q(s,t.daemon?.state??null,S1)),e.post("/api/daemon/cycle",async s=>{if(t.daemon===void 0)return q(s,{disabled:!0},_e);let i=await t.daemon.runCycle();return q(s,{state:t.daemon.state,result:i},_e)}),e.get("/metrics/:project_id",s=>{let i=ie(s,"project_id"),o=t.dal.getProject(i);if(o===null)return s.notFound();let a=jc(t.dal,i),l=Pc(t.dal,{project_id:i});return s.html(Fe(`Metrics \u2014 ${o.name}`,k1(o.name,a,l)))}),e.get("/api/metrics/reviewer/:project_id",s=>{let i=ie(s,"project_id");if(t.dal.getProject(i)===null)return s.notFound();let o=tm(s,"since_days");return s.json(jc(t.dal,i,o))}),e.get("/api/metrics/tools/:project_id",s=>{let i=ie(s,"project_id");if(t.dal.getProject(i)===null)return s.notFound();let o=tm(s,"since_days");return s.json(Pc(t.dal,{project_id:i,since_days:o}))}),e.post("/api/drift/:id/ack",s=>{let i=t.dal.acknowledgeDriftSignal(ie(s,"id"));return i===null?s.notFound():s.json({id:i.id,acknowledged_at:i.acknowledged_at})}),e}function $T(t,e,r){let n=Dc(e,ie(t,"id"),ie(t,"step_id"));return n===null?t.notFound():r(n)}function Ua(t){t!==void 0&&t.runCycle().catch(()=>{})}function q(t,e,r,n=200){return WT(t)?n===200?t.html(r(e)):t.html(r(e),400):new Response(JSON.stringify(e),{status:n,headers:{"Content-Type":"application/json; charset=UTF-8"}})}function WT(t){let e=t.req.header("accept")??"";return e.includes("text/html")&&!e.includes("application/json")}function QF(){let t=process.env.LMCTL_WEBUI_DIST;if(t!==void 0)return Fa(`${t}/index.html`)?rm(t):null;let e="src/serve/webui-dist";if(Fa(`${e}/index.html`))return e;let r="dist/serve/webui-dist";if(Fa(`${r}/index.html`))return r;let n=VF(JF(zF(import.meta.url)),"webui-dist");return Fa(`${n}/index.html`)?rm(n):null}function rm(t){if(!KF(t))return t;let e=YF(process.cwd(),t);return e.length===0?".":e}function e1(){return async(t,e)=>{await e(),t.header("Cache-Control","no-store")}}function ie(t,e){return Number(t.req.param(e))}function tm(t,e){let r=t.req.query(e);if(r===void 0)return;let n=Number(r);return Number.isInteger(n)&&n>0?n:void 0}function t1(t){switch(GF(t).toLowerCase()){case".txt":return"text/plain; charset=utf-8";case".md":return"text/markdown; charset=utf-8";case".html":case".htm":return"text/html; charset=utf-8";case".css":return"text/css; charset=utf-8";case".csv":return"text/csv; charset=utf-8";case".json":return"application/json; charset=utf-8";case".xml":return"application/xml; charset=utf-8";case".yaml":case".yml":return"text/yaml; charset=utf-8";case".js":case".mjs":case".cjs":return"text/javascript; charset=utf-8";case".ts":return"text/x-typescript; charset=utf-8";case".log":return"text/plain; charset=utf-8";case".docx":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case".xlsx":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case".pptx":return"application/vnd.openxmlformats-officedocument.presentationml.presentation";case".pdf":return"application/pdf";case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".gif":return"image/gif";case".webp":return"image/webp";case".zip":return"application/zip";case".gz":return"application/gzip";default:return"application/octet-stream"}}function r1(t){return!!(t.startsWith("text/")||t.startsWith("application/json")||t.startsWith("application/xml"))}async function Qn(t){try{let e=await t.req.json();return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:"invalid JSON body"}catch{return"invalid JSON body"}}function n1(t){if(t==null)return null;if(typeof t=="string"){try{let e=JSON.parse(t);if(e!==null&&typeof e=="object"&&!Array.isArray(e))return JSON.stringify(e)}catch{return"error:invalid parameters_override JSON"}return"error:parameters_override must be a JSON object"}return typeof t=="object"&&!Array.isArray(t)?JSON.stringify(t):"error:parameters_override must be a JSON object"}function MT(t,e){if(t===void 0||t.length===0)return;let r=t.split(",").map(n=>n.trim()).filter(n=>n.length>0);if(r.length!==0){for(let n of r)if(!e.includes(n))return`invalid value: ${n}`;return r}}function i1(t){if(t!=null)return typeof t=="string"&&qT.includes(t)?t:{error:`invalid severity: ${String(t)}`}}function o1(t){if(t==null)return null;if(typeof t=="string")try{let e=JSON.parse(t);return Array.isArray(e)&&e.every(r=>typeof r=="string")?JSON.stringify(e):"error:labels must be a JSON string array"}catch{return"error:invalid labels JSON"}return Array.isArray(t)&&t.every(e=>typeof e=="string")?JSON.stringify(t):"error:labels must be a JSON string array"}function a1(t){return`<h1>Status</h1><div class="grid">
2323
2323
  <div class="metric"><strong>${t.jobs.queued}</strong><br>queued jobs</div>
2324
2324
  <div class="metric"><strong>${t.jobs.done}</strong><br>done jobs</div>
2325
2325
  <div class="metric"><strong>${t.runs.active}</strong><br>active runs</div>
@@ -2368,14 +2368,14 @@ ${p.text}`,["approve","request_changes"],!0,s,e.writes_to_project_path===!0)));i
2368
2368
  WHERE j.project_id = ?
2369
2369
  AND r.terminal_state IS NOT NULL
2370
2370
  ORDER BY r.id DESC
2371
- LIMIT ?`,r.id,3);if(n.length<3||!n.every(l=>t.query("SELECT 1 FROM step WHERE run_id = ? AND outcome = ? LIMIT 1",l.id,x1).length>0))continue;let i=n[0].team_id,o=t.listTeamMembers(i),a=o.find(l=>l.alias.toLowerCase().includes("coder"))??o[0];a!==void 0&&(t.hasUnackedDriftSignal(a.id,r.id,JT)||t.insertDriftSignal({team_member_id:a.id,project_id:r.id,signal_kind:JT,severity:"high",description:`3+ consecutive reviewer rejections (request_changes) for project ${r.name}`,detected_at:Date.now(),payload:JSON.stringify({run_ids:n.map(l=>l.id),consecutive_threshold:3})}))}}function GT(t){for(let e of L1)try{e(t)}catch{}}var x1,JT,L1,KT=w(()=>{"use strict";x1="request_changes",JT="reviewer_rejection_rate_high";L1=[R1]});function VT(t,e){return yn(e)!=="dead"?null:t.reclaimTrackedInvocationIfUnchanged(e.id,{holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat_at:e.last_heartbeat_at},{status:"aborted",error:O1})}function YT(t){let e=0;for(let r of t.listAllRunningTrackedInvocations())VT(t,r)!==null&&(e+=1);return e}function Wa(t,e,r){let n=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
2371
+ LIMIT ?`,r.id,3);if(n.length<3||!n.every(l=>t.query("SELECT 1 FROM step WHERE run_id = ? AND outcome = ? LIMIT 1",l.id,x1).length>0))continue;let i=n[0].team_id,o=t.listTeamMembers(i),a=o.find(l=>l.alias.toLowerCase().includes("coder"))??o[0];a!==void 0&&(t.hasUnackedDriftSignal(a.id,r.id,JT)||t.insertDriftSignal({team_member_id:a.id,project_id:r.id,signal_kind:JT,severity:"high",description:`3+ consecutive reviewer rejections (request_changes) for project ${r.name}`,detected_at:Date.now(),payload:JSON.stringify({run_ids:n.map(l=>l.id),consecutive_threshold:3})}))}}function GT(t){for(let e of L1)try{e(t)}catch{}}var x1,JT,L1,KT=w(()=>{"use strict";x1="request_changes",JT="reviewer_rejection_rate_high";L1=[R1]});function VT(t,e){return En(e)!=="dead"?null:t.reclaimTrackedInvocationIfUnchanged(e.id,{holder_pid:e.holder_pid,holder_host:e.holder_host,started_at:e.started_at,last_heartbeat_at:e.last_heartbeat_at},{status:"aborted",error:O1})}function YT(t){let e=0;for(let r of t.listAllRunningTrackedInvocations())VT(t,r)!==null&&(e+=1);return e}function Wa(t,e,r){let n=t.query(`SELECT id, status, holder_pid, holder_host, started_at, last_heartbeat_at
2372
2372
  FROM tracked_invocation
2373
2373
  WHERE target_teamfile = ?
2374
2374
  AND target_alias = ?
2375
2375
  AND status = 'running'`,e,r),s=0;for(let i of n)VT(t,i)!==null&&(s+=1);return s}var O1,qa=w(()=>{"use strict";ht();O1="holder process verified not alive; reconciled to aborted"});async function O(t,e){if(t.dal!==void 0)return e(t.dal);let r=qe({path:ne()});try{return await e(r)}finally{r.close()}}function Q(t,e,r=["--json"]){let n=new Set(e),s=new Set(r),i=[],o={};for(let a=0;a<t.length;a+=1){let l=t[a];if(!l.startsWith("--")){i.push(l);continue}if(s.has(l)){o[l]=!0;continue}if(!n.has(l))return{positionals:i,flags:o,error:`unknown flag: ${l}`};let d=t[a+1];if(d===void 0||d.startsWith("--"))return{positionals:i,flags:o,error:`missing value for ${l}`};o[l]=d,a+=1}return{positionals:i,flags:o}}function P(t,e){let r=t.flags[e];return typeof r=="string"?r:void 0}function V(t,e){return t.flags[e]===!0}function re(t,e){t.stdout.write(`${JSON.stringify(e,null,2)}
2376
2376
  `)}function N(t,e){return t.stderr.write(`error: ${e}
2377
2377
  `),1}function Ke(t,e){let r=e instanceof Error?e.message:String(e);return t.stderr.write(`internal error: ${r}
2378
- `),2}var Me=w(()=>{"use strict";dt();ze()});import{hostname as QT}from"node:os";function ev(t,e,r){let n=`${e.teamfile}:${e.alias}`,s=null,i=()=>t.dal!==void 0?t.dal:(s===null&&(s=qe({path:ne()})),s),o=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>i().listAgentInflight().some(a=>a.sender_teamfile===e.teamfile&&a.sender_alias===e.alias&&!(a.receiver_teamfile===e.teamfile&&a.receiver_alias===e.alias)&&a.holder_pid!==null&&He(a.holder_pid)),pollMs:C1,settleMs:$1,maxHoldMs:En(r),onHold:()=>M({event:"delivery_hold_open_started",receiver:n}),onRelease:a=>{o(),!(!a.held&&a.reason==="cleared")&&M({event:"delivery_hold_open_released",receiver:n,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function es(t){let e=t.finalize??"auto";await Xa(t.io,t.env);let r=await O(t.io,h=>{if(t.onlyMailboxId!==void 0){let _=h.getMailboxMessage(t.onlyMailboxId);return _!==null&&_.message_type==="request"&&tv(_,t.sender)&&_.receiver_teamfile===t.receiver.teamfile&&_.receiver_alias===t.receiver.alias&&_.delivered_at===null&&_.delivering_at===null?[_]:[]}return h.listEnqueuedRequestMailFromSender(t.sender.teamfile,t.sender.alias,t.receiver.teamfile,t.receiver.alias)}),n=r.length===0?[]:await O(t.io,h=>h.claimMailForDelivery(r.map(_=>_.id),new Date().toISOString(),process.pid,QT())),s=t.newMessage===void 0?Xr(n):null,i=s===null?null:$e(s.id);if(i!==null)try{await O(t.io,h=>{h.setCurrentlyHandlingMessage(t.receiver.teamfile,t.receiver.alias,i)})}catch(h){t.io.stderr.write(`warning: failed to set mailbox causal pointer: ${h instanceof Error?h.message:String(h)}
2378
+ `),2}var Me=w(()=>{"use strict";dt();ze()});import{hostname as QT}from"node:os";function ev(t,e,r){let n=`${e.teamfile}:${e.alias}`,s=null,i=()=>t.dal!==void 0?t.dal:(s===null&&(s=qe({path:ne()})),s),o=()=>{if(s===null)return;let a=s;s=null;try{a.close()}catch{}};return{hasOutstandingWork:()=>i().listAgentInflight().some(a=>a.sender_teamfile===e.teamfile&&a.sender_alias===e.alias&&!(a.receiver_teamfile===e.teamfile&&a.receiver_alias===e.alias)&&a.holder_pid!==null&&He(a.holder_pid)),pollMs:C1,settleMs:$1,maxHoldMs:wn(r),onHold:()=>M({event:"delivery_hold_open_started",receiver:n}),onRelease:a=>{o(),!(!a.held&&a.reason==="cleared")&&M({event:"delivery_hold_open_released",receiver:n,elapsed_ms:a.elapsedMs,held:a.held,reason:a.reason})}}}async function es(t){let e=t.finalize??"auto";await Xa(t.io,t.env);let r=await O(t.io,h=>{if(t.onlyMailboxId!==void 0){let _=h.getMailboxMessage(t.onlyMailboxId);return _!==null&&_.message_type==="request"&&tv(_,t.sender)&&_.receiver_teamfile===t.receiver.teamfile&&_.receiver_alias===t.receiver.alias&&_.delivered_at===null&&_.delivering_at===null?[_]:[]}return h.listEnqueuedRequestMailFromSender(t.sender.teamfile,t.sender.alias,t.receiver.teamfile,t.receiver.alias)}),n=r.length===0?[]:await O(t.io,h=>h.claimMailForDelivery(r.map(_=>_.id),new Date().toISOString(),process.pid,QT())),s=t.newMessage===void 0?Xr(n):null,i=s===null?null:$e(s.id);if(i!==null)try{await O(t.io,h=>{h.setCurrentlyHandlingMessage(t.receiver.teamfile,t.receiver.alias,i)})}catch(h){t.io.stderr.write(`warning: failed to set mailbox causal pointer: ${h instanceof Error?h.message:String(h)}
2379
2379
  `)}let o=M1(n,t.newMessage,{newMessageFrom:t.newMessageFrom??nv(t.sender)});if(o.length===0)throw new Error(`no queued mail to deliver for ${t.sender.teamfile}:${t.sender.alias} -> ${t.receiver.teamfile}:${t.receiver.alias}`);let a=!1,l=ue(),d=0,c=0,u=0,m={provider:t.receiver.provider,sessionId:t.receiver.sessionId,cwd:t.receiver.cwd,prompt:o,permissionMode:t.permissionMode,env:t.env,onDelta:h=>{a=!0,l&&(d+=1,u=Buffer.byteLength(h,"utf8"),c+=u),t.onDelta?.(h)},onProgress:h=>t.onProgress?.(h)};t.receiver.model!==void 0&&(m.model=t.receiver.model),t.receiver.effort!==void 0&&(m.effort=t.receiver.effort),m.alias=t.receiver.alias,m.isLead=t.receiver.isLead,t.idleTimeoutMs!==void 0&&(m.timeoutMs=t.idleTimeoutMs),m.holdOpen=ev(t.io,t.receiver,t.env);let f;try{cr("mailbox_delivery_attempt_started",n,{batch_ids:n.map(h=>h.id),provider:t.receiver.provider,receiver_session_id:t.receiver.sessionId}),await t.onPromptBuilt?.(o),f=await jt(m)}catch(h){let _=h instanceof Error?h.message:String(h);if(cr("mailbox_delivery_attempt_failed",n,{error_message:_}),e==="auto"&&await ZT(t.io,n,"provider-or-preflight-error",_),e==="caller")return{status:"error",receipt:_,prompt:o,queued:n,deliveredIds:[],wroteDelta:a,error:_};throw h}finally{if(i!==null)try{await O(t.io,h=>{h.clearCurrentlyHandlingMessage(t.receiver.teamfile,t.receiver.alias,i)})}catch(h){t.io.stderr.write(`warning: failed to clear mailbox causal pointer: ${h instanceof Error?h.message:String(h)}
2380
2380
  `)}}if(l&&Pe(JSON.stringify({event:"chat_return",alias:t.receiver.alias,provider:t.receiver.provider,streamed:a,blockCount:d,streamedBytes:c,resultTextBytes:Buffer.byteLength(f.text,"utf8"),lastChunkBytes:u,tailPreview:f.text.slice(-200)})),f.status==="stalled")return cr("mailbox_delivery_attempt_stalled",n,{stalled_after_ms:f.stalledAfterMs,duration_ms:f.durationMs}),e==="auto"&&await ZT(t.io,n,"provider-stalled"),{status:"stalled",receipt:f.text,prompt:o,queued:n,deliveredIds:[],wroteDelta:a,durationMs:f.durationMs,stalledAfterMs:f.stalledAfterMs};let p=n.map(h=>h.id);return e==="auto"&&await Ba(t.io,n,f.text),{status:"ok",receipt:f.text,prompt:o,queued:n,deliveredIds:p,wroteDelta:a,durationMs:f.durationMs}}async function Ha(t){await Xa(t.io,t.env);let e=await O(t.io,i=>{if(t.onlyMailboxId!==void 0){let o=i.getMailboxMessage(t.onlyMailboxId);return o!==null&&o.message_type==="response"&&tv(o,t.sender)&&o.receiver_teamfile===t.receiver.teamfile&&o.receiver_alias===t.receiver.alias&&o.delivered_at===null&&o.delivering_at===null?[o]:[]}return i.listEnqueuedResponseMailFromSender(t.sender.teamfile,t.sender.alias,t.receiver.teamfile,t.receiver.alias)}),r=e.length===0?[]:await O(t.io,i=>i.claimMailForDelivery(e.map(o=>o.id),new Date().toISOString(),process.pid,QT())),n=D1(r);if(n.length===0)throw new Error(`no queued response mail to deliver for ${t.sender.teamfile}:${t.sender.alias} -> ${t.receiver.teamfile}:${t.receiver.alias}`);let s={provider:t.receiver.provider,sessionId:t.receiver.sessionId,cwd:t.receiver.cwd,prompt:n,permissionMode:t.permissionMode,env:t.env,alias:t.receiver.alias,isLead:t.receiver.isLead};t.receiver.model!==void 0&&(s.model=t.receiver.model),t.receiver.effort!==void 0&&(s.effort=t.receiver.effort),t.idleTimeoutMs!==void 0&&(s.timeoutMs=t.idleTimeoutMs),s.holdOpen=ev(t.io,t.receiver,t.env),cr("mailbox_delivery_attempt_started",r,{batch_ids:r.map(i=>i.id),provider:t.receiver.provider,receiver_session_id:t.receiver.sessionId});try{let i=await jt(s);if(i.status==="stalled"){let a=`response delivery error: provider stalled${i.stalledAfterMs!==void 0?` after ${i.stalledAfterMs}ms`:""}
2381
2381
  ${i.text}`;return cr("mailbox_delivery_attempt_stalled",r,{stalled_after_ms:i.stalledAfterMs,duration_ms:i.durationMs}),await Ba(t.io,r,a),{status:"stalled",receipt:a,prompt:n,queued:r,deliveredIds:r.map(l=>l.id),durationMs:i.durationMs,stalledAfterMs:i.stalledAfterMs}}let o="response delivered; recipient output discarded";return await Ba(t.io,r,o),{status:"ok",receipt:o,prompt:n,queued:r,deliveredIds:r.map(a=>a.id),durationMs:i.durationMs}}catch(i){let o=i instanceof Error?i.message:String(i),a=`response delivery error: ${o}`;return cr("mailbox_delivery_attempt_failed",r,{error_message:o}),await Ba(t.io,r,a),{status:"error",receipt:a,prompt:n,queued:r,deliveredIds:r.map(l=>l.id),error:o}}}function M1(t,e,r={}){let n=t.map((s,i)=>[`--- queued message ${i+1} (mail #${s.id}, from ${rv(s)}, sent ${s.created_at}) ---`,s.payload].join(`
@@ -2387,26 +2387,26 @@ ${i.text}`;return cr("mailbox_delivery_attempt_stalled",r,{stalled_after_ms:i.st
2387
2387
 
2388
2388
  `)}function rv(t){return t.sender_teamfile===null||t.sender_alias===null?"operator":nv({teamfile:t.sender_teamfile,alias:t.sender_alias})}function nv(t){return`${t.teamfile}:${t.alias}`}async function Ba(t,e,r){if(e.length!==0)try{await O(t,n=>{n.markRelayRequestDelivered(e,r,new Date().toISOString())})}catch(n){let s=n instanceof Error?n.message:String(n);cr("mailbox_delivery_finalize_failed",e,{error_message:s}),t.stderr.write(`warning: failed to mark queued mailbox mail delivered: ${s}
2389
2389
  `)}}async function ZT(t,e,r,n){if(e.length!==0)try{let s=await O(t,i=>e.map(o=>({row:o,cleared:i.reclaimMailboxDeliveryIfUnchanged(o)!==null})));for(let i of s)cr(i.cleared?"mailbox_delivery_cleared":"mailbox_delivery_clear_skipped",[i.row],{transition:i.cleared?"delivering->pending":"delivering->delivering",reason:r,...n===void 0?{}:{error_message:n}})}catch(s){let i=s instanceof Error?s.message:String(s);cr("mailbox_delivery_clear_failed",e,{reason:r,error_message:i,...n===void 0?{}:{causing_error:n}}),t.stderr.write(`warning: failed to clear queued mailbox delivery marker: ${i}
2390
- `)}}async function Xa(t,e=process.env){try{await O(t,r=>{r.reclaimStaleMailboxDeliveries(new Date(Date.now()-nm(e)).toISOString())})}catch{}}function nm(t=process.env){let e=t.LMCTL_MAILBOX_DELIVERY_STALE_MS;if(e===void 0||e.trim()==="")return zT;let r=Number(e);return!Number.isFinite(r)||r<=0?zT:r}function cr(t,e,r={}){let n=new Date().toISOString();for(let s of e)M({event:t,event_at:n,message_id:s.id,message_type:s.message_type,lane_key:JSON.stringify([s.sender_teamfile,s.sender_alias,s.receiver_teamfile,s.receiver_alias]),sender_teamfile:s.sender_teamfile,sender_alias:s.sender_alias,receiver_teamfile:s.receiver_teamfile,receiver_alias:s.receiver_alias,message_created_at:s.created_at,delivering_at:s.delivering_at,delivered_at:s.delivered_at,delivery_holder_pid:s.delivery_holder_pid,delivery_holder_host:s.delivery_holder_host,...r})}var zT,C1,$1,Ja=w(()=>{"use strict";Pt();Pi();kn();pe();Me();dt();ze();Jr();ht();zT=60*60*1e3,C1=2e3,$1=5e3});import{basename as j1}from"node:path";function ov(t,e){let r=new Date(e.now.getTime()-qt()).toISOString(),n=dv(t,r).filter(f=>!f.sender.teamfile.startsWith("prompt:")),s=W1(e.sender,n),i=q1(e.sender,n);i!==null&&i.teamfile===e.root&&!iv(s[0],i)&&s.unshift({...i,at:null});let o={teamfile:e.receiverTeamfile,alias:e.receiverAlias,at:e.now.getTime()},a=[...s,o],l=s.filter(f=>iv(f,o)),d=l.map(f=>f.at).filter(f=>f!==null).sort((f,p)=>p-f)[0]??null,c=d!==null&&e.now.getTime()-d<P1,u=sm(e.sender,n).length;return{stop:l.length>=1&&c&&u>=F1,chain:B1(a)}}function av(t,e){let r=new Date(e.now.getTime()-qt()).toISOString(),n=dv(t,r),s=sm(e.sender,n);if(s.length===0)return null;let i=s[0];return i.sender.teamfile.startsWith("prompt:")?i.receiver.teamfile:i.sender.teamfile}function qt(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return sv;let r=Number(e);return!Number.isFinite(r)||r<=0?sv:r}function lv(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function U1(t){return{sender:{teamfile:t.sender_teamfile,alias:t.sender_alias},receiver:{teamfile:t.receiver_teamfile,alias:t.receiver_alias},at:Date.parse(t.started_at)}}function dv(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(U1).filter(r=>Number.isFinite(r.at)&&new Date(r.at).toISOString()>=e).sort((r,n)=>r.at-n.at)}function W1(t,e,r={}){let n=new Map;for(let a of e)n.set(on(a.receiver),a);let s=[{...t,at:null}],i=t,o=new Set([on(t)]);for(let a=0;a<64;a+=1){let l=n.get(on(i));if(l===void 0)break;s[0]={...s[0],at:s[0].at??l.at};let d={...l.sender,at:l.at};if(l.sender.teamfile.startsWith("prompt:")&&r.includePromptSender!==!0)break;let c=on(l.sender);if(o.has(c))break;s.unshift(d),o.add(c),i=l.sender}return s}function sm(t,e){let r=on(t),n=new Set([r]),s=[r],i=[];for(let o=0;s.length>0&&o<128;o+=1){let a=s.shift();for(let l of e){let d=on(l.sender),c=on(l.receiver);d!==a&&c!==a||(i.includes(l)||i.push(l),n.has(d)||(n.add(d),s.push(d)),n.has(c)||(n.add(c),s.push(c)))}}return i.sort((o,a)=>o.at-a.at)}function q1(t,e){let r=sm(t,e);if(r.length===0)return null;let n=r[0];return n.sender.teamfile.startsWith("prompt:")?n.receiver:n.sender}function iv(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function on(t){return`${t.teamfile}\0${t.alias}`}function B1(t){return t.map(e=>`${j1(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var P1,F1,sv,li=w(()=>{"use strict";P1=6e4,F1=2,sv=8*60*60*1e3});function cv(t){if(t.length===0||!t.startsWith("---"))throw new Bt("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
2390
+ `)}}async function Xa(t,e=process.env){try{await O(t,r=>{r.reclaimStaleMailboxDeliveries(new Date(Date.now()-nm(e)).toISOString())})}catch{}}function nm(t=process.env){let e=t.LMCTL_MAILBOX_DELIVERY_STALE_MS;if(e===void 0||e.trim()==="")return zT;let r=Number(e);return!Number.isFinite(r)||r<=0?zT:r}function cr(t,e,r={}){let n=new Date().toISOString();for(let s of e)M({event:t,event_at:n,message_id:s.id,message_type:s.message_type,lane_key:JSON.stringify([s.sender_teamfile,s.sender_alias,s.receiver_teamfile,s.receiver_alias]),sender_teamfile:s.sender_teamfile,sender_alias:s.sender_alias,receiver_teamfile:s.receiver_teamfile,receiver_alias:s.receiver_alias,message_created_at:s.created_at,delivering_at:s.delivering_at,delivered_at:s.delivered_at,delivery_holder_pid:s.delivery_holder_pid,delivery_holder_host:s.delivery_holder_host,...r})}var zT,C1,$1,Ja=w(()=>{"use strict";Pt();Pi();kn();pe();Me();dt();ze();Jr();ht();zT=60*60*1e3,C1=2e3,$1=5e3});import{basename as j1}from"node:path";function ov(t,e){let r=new Date(e.now.getTime()-qt()).toISOString(),n=dv(t,r).filter(f=>!f.sender.teamfile.startsWith("prompt:")),s=W1(e.sender,n),i=q1(e.sender,n);i!==null&&i.teamfile===e.root&&!iv(s[0],i)&&s.unshift({...i,at:null});let o={teamfile:e.receiverTeamfile,alias:e.receiverAlias,at:e.now.getTime()},a=[...s,o],l=s.filter(f=>iv(f,o)),d=l.map(f=>f.at).filter(f=>f!==null).sort((f,p)=>p-f)[0]??null,c=d!==null&&e.now.getTime()-d<P1,u=sm(e.sender,n).length;return{stop:l.length>=1&&c&&u>=F1,chain:B1(a)}}function av(t,e){let r=new Date(e.now.getTime()-qt()).toISOString(),n=dv(t,r),s=sm(e.sender,n);if(s.length===0)return null;let i=s[0];return i.sender.teamfile.startsWith("prompt:")?i.receiver.teamfile:i.sender.teamfile}function qt(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return sv;let r=Number(e);return!Number.isFinite(r)||r<=0?sv:r}function lv(t){return`cross-team cycle detected (${t}); stopping to prevent a runaway loop.`}function U1(t){return{sender:{teamfile:t.sender_teamfile,alias:t.sender_alias},receiver:{teamfile:t.receiver_teamfile,alias:t.receiver_alias},at:Date.parse(t.started_at)}}function dv(t,e){return t.clearAgentInflightOlderThan(e),t.listAgentInflight().map(U1).filter(r=>Number.isFinite(r.at)&&new Date(r.at).toISOString()>=e).sort((r,n)=>r.at-n.at)}function W1(t,e,r={}){let n=new Map;for(let a of e)n.set(an(a.receiver),a);let s=[{...t,at:null}],i=t,o=new Set([an(t)]);for(let a=0;a<64;a+=1){let l=n.get(an(i));if(l===void 0)break;s[0]={...s[0],at:s[0].at??l.at};let d={...l.sender,at:l.at};if(l.sender.teamfile.startsWith("prompt:")&&r.includePromptSender!==!0)break;let c=an(l.sender);if(o.has(c))break;s.unshift(d),o.add(c),i=l.sender}return s}function sm(t,e){let r=an(t),n=new Set([r]),s=[r],i=[];for(let o=0;s.length>0&&o<128;o+=1){let a=s.shift();for(let l of e){let d=an(l.sender),c=an(l.receiver);d!==a&&c!==a||(i.includes(l)||i.push(l),n.has(d)||(n.add(d),s.push(d)),n.has(c)||(n.add(c),s.push(c)))}}return i.sort((o,a)=>o.at-a.at)}function q1(t,e){let r=sm(t,e);if(r.length===0)return null;let n=r[0];return n.sender.teamfile.startsWith("prompt:")?n.receiver:n.sender}function iv(t,e){return t.teamfile===e.teamfile&&t.alias===e.alias}function an(t){return`${t.teamfile}\0${t.alias}`}function B1(t){return t.map(e=>`${j1(e.teamfile)}:${e.alias}`).join(" \u2192 ")}var P1,F1,sv,li=w(()=>{"use strict";P1=6e4,F1=2,sv=8*60*60*1e3});function cv(t){if(t.length===0||!t.startsWith("---"))throw new Bt("frontmatter must start at line 1 with `---` on its own line");let e=t.split(`
2391
2391
  `);if(e[0]!=="---")throw new Bt("frontmatter must start at line 1 with `---` on its own line");let r={},n=-1;for(let o=1;o<e.length;o++){let a=e[o];if(a==="---"){n=o;break}if(a.trim()==="")continue;let l=a.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\s*:\s*(.*)$/);if(!l)throw new Bt(`malformed frontmatter line ${o+1}: ${JSON.stringify(a)} (expected "key: value" or "---")`);let d=l[1],c=l[2].trim();if(!H1.has(d))throw new Bt(`unknown frontmatter key "${d}" \u2014 allowed keys: ${Ga.join(", ")}`);r[d]=c}if(n===-1)throw new Bt("frontmatter not closed (missing trailing `---` on its own line)");for(let o of Ga)if(r[o]===void 0)throw new Bt(`missing required frontmatter key "${o}" \u2014 required: ${Ga.join(", ")}`);let s=0;for(let o=0;o<=n;o++)s+=e[o].length+1;s>t.length&&(s=t.length);let i=r.members.split(",").map(o=>o.trim()).filter(Boolean);return{title:r.title,description:r.description,members:i,bodyOffset:s}}var Ga,H1,Bt,uv=w(()=>{"use strict";Ga=["title","description","members"],H1=new Set(Ga),Bt=class extends Error{constructor(e){super(e),this.name="FrontmatterError"}}});import{readFileSync as X1,writeFileSync as R7,renameSync as L7,existsSync as fv}from"node:fs";import{basename as J1,resolve as ts,dirname as im}from"node:path";function K1(t){let e={},r=/(\w+)=(?:"([^"]*)"|([\S]*))/g,n;for(;(n=r.exec(t))!==null;){let s=n[1],i=n[2]!==void 0?n[2]:n[3];e[s]=i}return e}function V1(t){return/^\s*_MEMBER_\s+\S/.test(t)}function Y1(t){return/^\s*_SESSION_\s+\S/.test(t)}function z1(t){return/^\s*_SKILL_(?:\s|$)/.test(t)}function Ka(t){let e=J1(t);return e.endsWith(".lmctl")?e.slice(0,-6):e}function ot(t){let e=X1(t,"utf-8"),r=im(ts(t)),n=am(e,Ka(t),{baseDir:r,sourcePath:ts(t)});for(let s of n.members)s.sessiondir&&!s.sessiondir.startsWith("/")&&(s.sessiondir=ts(r,s.sessiondir));return n}function am(t,e,r={}){let n=[],s=[];r.sourcePath,r.baseDir;let i=t;if(i.startsWith("#teamfile:")){let l=i.indexOf(`
2392
2392
  `);i=l>=0?i.slice(l+1):""}let o=null;if(i.startsWith("---"))try{o=cv(i)}catch(l){if(l instanceof Bt)s.push(`frontmatter: ${l.message}`);else throw l}let a=t.split(`
2393
2393
  `);for(let l=0;l<a.length;l++){let d=a[l],c=l+1;if(Y1(d))throw new Error(`line ${c}: _SESSION_ is the legacy prefix. Rename to _MEMBER_. (line: ${d.trim()})`);if(z1(d)||!V1(d))continue;let u=K1(d);for(let p of Object.keys(u))if(!mv.includes(p))throw new Error(`line ${c}: unknown key "${p}" on _MEMBER_ line: ${d.trim()}
2394
2394
  allowed keys: ${mv.join(", ")}`);if(!u.provider&&!u.teamfile){s.push(`line ${c}: member line missing provider (or teamfile): ${d.trim()}`);continue}let f={alias:u.alias||`member${n.length+1}`,provider:u.provider||"",extra:{}};u.sessionid&&(f.session=u.sessionid),Object.prototype.hasOwnProperty.call(u,"sessiondir")&&(f.sessiondir=u.sessiondir),u.teamfile&&(f.teamfile=u.teamfile),u.model&&(f.model=u.model),u.effort&&(f.effort=u.effort),n.push(f)}return{name:e,members:n,rawText:t,parseErrors:s,frontmatter:o}}function lm(t,e){let r=[];for(let i of t.parseErrors)r.push({field:"session",message:i});let n=t.members.filter(i=>i.alias.toLowerCase()===om.toLowerCase());n.length>1&&r.push({field:om,message:`${n.length} alias=Lead found (max 1)`});let s=new Set;for(let i of t.members){let o=i.alias.toLowerCase();if(s.has(o)&&r.push({field:i.alias,message:`Duplicate alias "${i.alias}" (case-insensitive)`}),s.add(o),i.teamfile){let a=e?ts(e,i.teamfile):ts(i.teamfile);if(!fv(a))r.push({field:i.alias,message:`Teamfile not found: ${a}`});else{let l=ot(a),d=Ht(l);d?d.session||r.push({field:i.alias,message:`Team at ${i.teamfile} lead has no session ID. Run: lmctl seed`}):r.push({field:i.alias,message:`Team at ${i.teamfile} has no lead session`})}}else G1.has(i.provider)||r.push({field:i.alias,message:`Invalid provider "${i.provider}"`});i.sessiondir!==void 0&&i.sessiondir===""&&r.push({field:i.alias,message:"sessiondir is empty"})}return r}function Ht(t){return t.members.find(e=>e.alias.toLowerCase()===om.toLowerCase())}function dm(t,e,r,n={}){let s=n.requireSession??!0;if(!t.teamfile)throw new Error(`Member "${t.alias}" is not a team reference`);let i=ts(e,t.teamfile),o=r??new Set;if(o.has(i))throw new Error(`Circular team reference: ${t.alias} \u2192 ${i} (already visited: ${[...o].join(" \u2192 ")})`);if(o.add(i),!fv(i))throw new Error(`Teamfile not found: ${i} (referenced by alias "${t.alias}")`);let a=ot(i),l=Ht(a);if(!l)throw new Error(`Team at ${i} has no lead session`);if(l.teamfile)return dm(l,im(i),o,n);if(s&&!l.session)throw new Error(`Team at ${i} lead has no session ID. Run: lmctl seed`);return{provider:l.provider,session:l.session??"",sessiondir:l.sessiondir||im(i),alias:t.alias,resolvedFrom:i,model:l.model,effort:l.effort}}function Va(t,e){return t.members.find(r=>r.alias===e)??t.members.find(r=>r.alias.toLowerCase()===e.toLowerCase())}var om,G1,mv,ur=w(()=>{"use strict";uv();om="Lead",G1=new Set(["claude","codex","opencode","lmplayer","gemini","copilot","qwen","agy","kimi","ClaudeMock"]);mv=["alias","provider","sessionid","sessiondir","teamfile","model","effort"]});import{createHash as Z1}from"node:crypto";import{existsSync as um,readFileSync as _v,realpathSync as Q1}from"node:fs";import{basename as pv,dirname as eU,resolve as hv}from"node:path";function Se(t,e){let r=hv(t);if(um(r))return Q1(r);if(e!==void 0){let n=rU(t,r,e);if(n!==null)return n}return r}function za(t,e){let r=eU(e),n=am(t,Ka(e),{baseDir:r});for(let s of n.members)s.sessiondir!==void 0&&!s.sessiondir.startsWith("/")&&(s.sessiondir=hv(r,s.sessiondir));return n}function Ve(t,e,r=n=>{process.stderr.write(`warning: ${n}
2395
- `)}){let n=Se(t,tU(e)?e:void 0);if(um(n)){let i=_v(n,"utf8"),o=za(i,n);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(n)===null&&nU(o)&&iU(e,n,o,i,r),o}let s=e?.getRootTeam(n)??null;throw s!==null?new Error(`teamfile missing on disk: ${n} (registered ${s.registered_at}; the file was renamed or deleted \u2014 seed the team at its new path)`):new Error(`teamfile not found: ${t}`)}function tU(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function rU(t,e,r){let n=r.getRootTeam(t)??r.getRootTeam(e);if(n!==null)return n.teamfile_path;let s=pv(t),i=Ka(t),o=r.listRootTeams().filter(l=>(pv(l.teamfile_path)===s||l.name===i)&&um(l.teamfile_path));if(o.length===0)return null;if(o.length===1)return o[0].teamfile_path;let a=o.map(l=>l.teamfile_path).join(", ");throw new Error(`ambiguous teamfile "${t}" in root-team registry: ${a}; pass an absolute path`)}function nU(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=cm)}function mm(t,e,r){let n=Se(e),s=r.members.filter(i=>i.teamfile===void 0&&i.session!==void 0&&i.session.length>=cm);if(s.length!==0)for(let i of t.listRootTeams()){let o,a;try{if(o=Se(i.teamfile_path),o===n)continue;a=_v(o,"utf8")}catch(d){if(sU(d))continue;throw d}let l=za(a,o);for(let d of s){let c=l.members.find(u=>u.teamfile===void 0&&u.session===d.session&&(u.session?.length??0)>=cm);if(c!==void 0)throw new Ya(`sessionid ownership conflict: ${n}:${d.alias} and ${o}:${c.alias} both use sessionid "${d.session}"`)}}}function sU(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function iU(t,e,r,n,s){try{mm(t,e,r)}catch(o){if(!(o instanceof Ya))throw o;s(`${o.message}; skipping automatic registration`);return}let i={teamfile_path:e,name:r.name,raw_text:n,raw_sha256:Z1("sha256").update(n).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(i)}var cm,Ya,mr=w(()=>{"use strict";ur();cm=5,Ya=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{existsSync as oU}from"node:fs";import{dirname as gv}from"node:path";function dU(t){return aU.test(t)||lU.test(t)}function yv(t){return Za.test(t)}function an(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),r=t.slice(0,e),n=t.slice(e+1);return!r.endsWith(".lmctl")||!Za.test(n)?null:{teamfile:r,alias:n}}function Ne(t,e,r){if(!t.endsWith(".lmctl"))throw new ke(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl extension).`);if(!yv(e))throw new ke(`lmctl: "${e}" is not a valid alias (must match ${Za.source}).`);let n=Se(t,r);if(r===void 0&&!oU(n))throw new ke(`lmctl: teamfile not found: ${t}`);let s;try{s=Ve(n,r)}catch(o){throw new ke(`lmctl: ${t}: ${o instanceof Error?o.message:String(o)}`)}if(s.parseErrors.length>0)throw new ke(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let i=Va(s,e);if(i===void 0){let o=s.members.map(a=>a.alias).join(", ")||"(none)";throw new ke(`lmctl: alias "${e}" not found in ${t}.
2395
+ `)}){let n=Se(t,tU(e)?e:void 0);if(um(n)){let i=_v(n,"utf8"),o=za(i,n);return e!==void 0&&"upsertRootTeam"in e&&e.getRootTeam(n)===null&&nU(o)&&iU(e,n,o,i,r),o}let s=e?.getRootTeam(n)??null;throw s!==null?new Error(`teamfile missing on disk: ${n} (registered ${s.registered_at}; the file was renamed or deleted \u2014 seed the team at its new path)`):new Error(`teamfile not found: ${t}`)}function tU(t){return typeof t=="object"&&t!==null&&"getRootTeam"in t&&"listRootTeams"in t}function rU(t,e,r){let n=r.getRootTeam(t)??r.getRootTeam(e);if(n!==null)return n.teamfile_path;let s=pv(t),i=Ka(t),o=r.listRootTeams().filter(l=>(pv(l.teamfile_path)===s||l.name===i)&&um(l.teamfile_path));if(o.length===0)return null;if(o.length===1)return o[0].teamfile_path;let a=o.map(l=>l.teamfile_path).join(", ");throw new Error(`ambiguous teamfile "${t}" in root-team registry: ${a}; pass an absolute path`)}function nU(t){return t.parseErrors.length>0?!1:t.members.every(e=>e.teamfile!==void 0?!0:e.session!==void 0&&e.session.length>=cm)}function mm(t,e,r){let n=Se(e),s=r.members.filter(i=>i.teamfile===void 0&&i.session!==void 0&&i.session.length>=cm);if(s.length!==0)for(let i of t.listRootTeams()){let o,a;try{if(o=Se(i.teamfile_path),o===n)continue;a=_v(o,"utf8")}catch(d){if(sU(d))continue;throw d}let l=za(a,o);for(let d of s){let c=l.members.find(u=>u.teamfile===void 0&&u.session===d.session&&(u.session?.length??0)>=cm);if(c!==void 0)throw new Ya(`sessionid ownership conflict: ${n}:${d.alias} and ${o}:${c.alias} both use sessionid "${d.session}"`)}}}function sU(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function iU(t,e,r,n,s){try{mm(t,e,r)}catch(o){if(!(o instanceof Ya))throw o;s(`${o.message}; skipping automatic registration`);return}let i={teamfile_path:e,name:r.name,raw_text:n,raw_sha256:Z1("sha256").update(n).digest("hex"),registered_at:new Date().toISOString(),last_seeded_at:null};t.upsertRootTeam(i)}var cm,Ya,mr=w(()=>{"use strict";ur();cm=5,Ya=class extends Error{constructor(e){super(e),this.name="ForeignSessionidOwnershipError"}}});import{existsSync as oU}from"node:fs";import{dirname as gv}from"node:path";function dU(t){return aU.test(t)||lU.test(t)}function yv(t){return Za.test(t)}function ln(t){if(!t.includes(":"))return null;let e=t.lastIndexOf(":"),r=t.slice(0,e),n=t.slice(e+1);return!r.endsWith(".lmctl")||!Za.test(n)?null:{teamfile:r,alias:n}}function Ne(t,e,r){if(!t.endsWith(".lmctl"))throw new ke(`lmctl: "${t}" doesn't look like a teamfile (expected .lmctl extension).`);if(!yv(e))throw new ke(`lmctl: "${e}" is not a valid alias (must match ${Za.source}).`);let n=Se(t,r);if(r===void 0&&!oU(n))throw new ke(`lmctl: teamfile not found: ${t}`);let s;try{s=Ve(n,r)}catch(o){throw new ke(`lmctl: ${t}: ${o instanceof Error?o.message:String(o)}`)}if(s.parseErrors.length>0)throw new ke(`lmctl: ${t}: ${s.parseErrors.join("; ")}`);let i=Va(s,e);if(i===void 0){let o=s.members.map(a=>a.alias).join(", ")||"(none)";throw new ke(`lmctl: alias "${e}" not found in ${t}.
2396
2396
  Known aliases: ${o}`)}if(i.teamfile!==void 0){let o=dm(i,gv(n));return{teamfile:n,alias:i.alias,provider:o.provider,sessionid:o.session,sessiondir:o.sessiondir,isLead:!0,...o.model??i.model?{model:o.model??i.model}:{},...o.effort??i.effort?{effort:o.effort??i.effort}:{}}}if(i.session===void 0)throw new ke(`lmctl: alias "${i.alias}" in ${t} has no session ID yet.
2397
- Run: lmctl seed ${t}`);return{teamfile:n,alias:i.alias,provider:i.provider,sessionid:i.session,sessiondir:i.sessiondir??gv(n),isLead:Ht(s)?.alias===i.alias,...i.model!==void 0?{model:i.model}:{},...i.effort!==void 0?{effort:i.effort}:{}}}function Dr(t,e){let{target:r,alias:n,flags:s}=e;if(s.run!==void 0||s.project!==void 0||s.workflow!==void 0){if(r!==void 0)return{mode:"error",message:`lmctl ${t.name}: --run/--project/--workflow (managed mode) are mutually exclusive with a positional target "${r}" \u2014 pick one form.`};let o={mode:"managed"};return s.run!==void 0&&(o.run=s.run),s.project!==void 0&&(o.project=s.project),s.workflow!==void 0&&(o.workflow=s.workflow),o}if(r!==void 0){let o=an(r);if(o!==null)return n!==void 0&&n!==o.alias?{mode:"error",message:`lmctl ${t.name}: got "${r}" AND second positional "${n}" \u2014 pick one form.`}:{mode:"ai-team",teamfile:o.teamfile,alias:o.alias};if(r.endsWith(".lmctl"))return n!==void 0?yv(n)?{mode:"ai-team",teamfile:r,alias:n}:{mode:"error",message:`lmctl ${t.name}: "${n}" is not a valid alias (must match ${Za.source}).`}:t.allowsBareTeamfile?{mode:"ai-team",teamfile:r}:{mode:"error",message:`lmctl ${t.name}: alias required.
2397
+ Run: lmctl seed ${t}`);return{teamfile:n,alias:i.alias,provider:i.provider,sessionid:i.session,sessiondir:i.sessiondir??gv(n),isLead:Ht(s)?.alias===i.alias,...i.model!==void 0?{model:i.model}:{},...i.effort!==void 0?{effort:i.effort}:{}}}function Dr(t,e){let{target:r,alias:n,flags:s}=e;if(s.run!==void 0||s.project!==void 0||s.workflow!==void 0){if(r!==void 0)return{mode:"error",message:`lmctl ${t.name}: --run/--project/--workflow (managed mode) are mutually exclusive with a positional target "${r}" \u2014 pick one form.`};let o={mode:"managed"};return s.run!==void 0&&(o.run=s.run),s.project!==void 0&&(o.project=s.project),s.workflow!==void 0&&(o.workflow=s.workflow),o}if(r!==void 0){let o=ln(r);if(o!==null)return n!==void 0&&n!==o.alias?{mode:"error",message:`lmctl ${t.name}: got "${r}" AND second positional "${n}" \u2014 pick one form.`}:{mode:"ai-team",teamfile:o.teamfile,alias:o.alias};if(r.endsWith(".lmctl"))return n!==void 0?yv(n)?{mode:"ai-team",teamfile:r,alias:n}:{mode:"error",message:`lmctl ${t.name}: "${n}" is not a valid alias (must match ${Za.source}).`}:t.allowsBareTeamfile?{mode:"ai-team",teamfile:r}:{mode:"error",message:`lmctl ${t.name}: alias required.
2398
2398
  Use: lmctl ${t.name} ${r}:<alias> or lmctl ${t.name} ${r} <alias>`};if(dU(r)){if(n!==void 0)return{mode:"error",message:`lmctl ${t.name}: got a second positional "${n}" but "${r}" is not a teamfile path.`};if(!t.supportsRaw)return{mode:"error",message:`lmctl ${t.name}: "${r}" is a bare sessionid, but ${t.name} is teamfile-only (a sessionid carries no provider resume incantation).`};let a={mode:"ai-team-raw",sessionid:r};return s.provider!==void 0&&(a.provider=s.provider),a}return n!==void 0?{mode:"error",message:`lmctl ${t.name}: got a second positional "${n}" but "${r}" is not a teamfile path.
2399
2399
  Either drop the second arg, or pass <teamfile>.lmctl as the first arg.`}:{mode:"error",message:`lmctl ${t.name}: can't infer target type from "${r}".
2400
2400
  Expected one of: <path>.lmctl, <path>.lmctl:<alias>, <sessionid>.`}}if(s.session!==void 0){if(!t.supportsRaw)return{mode:"error",message:`lmctl ${t.name}: --session (raw mode) is not supported by ${t.name}.`};let o={mode:"ai-team-raw",sessionid:s.session};return s.provider!==void 0&&(o.provider=s.provider),o}return{mode:"error",message:`lmctl ${t.name}: a target is required.
2401
- Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var ke,aU,lU,Za,at=w(()=>{"use strict";ur();mr();ke=class extends Error{constructor(e){super(e),this.name="ChatTargetError"}},aU=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,lU=/^ses_[A-Za-z0-9_-]+$/,Za=/^[A-Za-z][A-Za-z0-9_-]*$/});function Qa(t){return uU.has(t)}function pm(){return fm===null&&(fm=Ot(Dt())),fm}function _m(t,e,r={}){if(!Qa(t))return null;try{let n=pm().getAdapter?.(t);if(n===void 0)return null;let s=n.resumeCommand(e).trim();if(s.length===0)return null;let i=s.split(/\s+/),o=t==="codex"&&r.isLead===!0?Qi({warn:()=>{}}):[],a=r.model!==void 0&&r.model.trim().length>0?cU[t]?.(r.model):void 0;return r.model!==void 0&&r.model.trim().length>0&&a===void 0&&r.onModelIgnored?.({provider:t,model:r.model,reason:`${t} terminal resume does not implement per-session model selection`}),[...i,...a??[],...o,...Ev[t]??[]]}catch{return null}}function el(t,e,r={}){let n=_m(t,e,r);return n===null?null:n.join(" ")}function Ue(t,e){return pm().getSession(t,e)}async function rs(t){return(await pm().resolveSessions(t)).map(r=>r.provider.name)}var Ev,cU,uU,wv,fm,Xt=w(()=>{"use strict";Pt();Ed();Ev={claude:["--dangerously-skip-permissions"],codex:["--dangerously-bypass-approvals-and-sandbox"],gemini:["-y"],copilot:["--yolo"],opencode:[],qwen:["--approval-mode","yolo"],agy:[],lmplayer:[],kimi:[]},cU={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]},uU=new Set(Object.keys(Ev)),wv=/^[\w.:-]+$/;fm=null});function mU(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return Tv;let r=Number(e);return!Number.isFinite(r)||r<=0?Tv:r}async function fU(t,e,r){try{let n=Ne(e,r,t),s=n.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let i;if(typeof n.provider=="string"&&n.provider.trim()!=="")i=n.provider;else{let d=await rs(s);if(d.length!==1)return null;i=d[0]}let o=await Ue(s,i);if(o===null)return null;let a=o.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function ns(t,e,r,n,s){if(!e.busy||e.reason!=="in-flight")return!1;let i=s??mU(),o=await fU(t,r,n),a=o!==null&&o>=i;return a&&M({event:"session_idle_reclaim",receiver_teamfile:r,receiver_alias:n,idle_ms:o,idle_minutes:o===null?null:Math.round(o/6e4),threshold_ms:i,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var Tv,tl=w(()=>{"use strict";pe();Xt();at();Tv=36e5});function pU(t=process.env){let e=t.LMCTL_DAEMON_MAILBOX_RELAY_MAX_BATCHES;if(e===void 0||e.trim()==="")return vv;let r=Number(e);return!Number.isFinite(r)||r<=0?vv:Math.max(1,Math.trunc(r))}async function Sv(t){let e=t.env??process.env,r=t.maxBatches??pU(e),n=TU(t.dal),s={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};wU(t.dal,e);let i=new Set;for(;s.scanned<r;){let o=t.dal.listRelayMailboxLanes(r).find(l=>!i.has(bv(l)));if(o===void 0)break;i.add(bv(o)),s.scanned+=1;let a=await _U(t.dal,n,e,o);s.delivered+=a.delivered,s.skipped_busy+=a.skipped_busy,s.skipped_terminal+=a.skipped_terminal,s.errors+=a.errors}return s}function bv(t){return JSON.stringify([t.sender_teamfile,t.sender_alias,t.receiver_teamfile,t.receiver_alias])}async function _U(t,e,r,n){let s={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};Wa(t,n.receiver_teamfile,n.receiver_alias);let i=_t(t,n.receiver_teamfile,n.receiver_alias),o=!1;if(i.busy){if(!await ns(t,i,n.receiver_teamfile,n.receiver_alias))return i.reason==="terminal-held"?{...s,skipped_terminal:1}:{...s,skipped_busy:1};o=!0}let a=null,l=null;try{let d=Ne(n.receiver_teamfile,n.receiver_alias,t),c=Lt(t,{receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,sender_teamfile:n.sender_teamfile,sender_alias:n.sender_alias,ttlMs:qt(),...o?{force:!0}:{}});if(!c.acquired)return{...s,skipped_busy:1};if(a={row:c.lease,leaseId:c.leaseId},l=Er(m=>t.heartbeatAgentInflight(a.row,a.leaseId,m),{intervalMs:gn(r)}),n.message_type==="response"){let m=await Ha({sender:{teamfile:n.sender_teamfile,alias:n.sender_alias},receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias,provider:d.provider,sessionId:d.sessionid,cwd:d.sessiondir,...d.model!==void 0?{model:d.model}:{},...d.effort!==void 0?{effort:d.effort}:{},...d.isLead!==void 0?{isLead:d.isLead}:{}},io:e,permissionMode:"yolo",env:r});return yU(m)}let u=await es({sender:{teamfile:n.sender_teamfile,alias:n.sender_alias},receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias,provider:d.provider,sessionId:d.sessionid,cwd:d.sessiondir,...d.model!==void 0?{model:d.model}:{},...d.effort!==void 0?{effort:d.effort}:{},...d.isLead!==void 0?{isLead:d.isLead}:{}},io:e,permissionMode:"yolo",env:r,finalize:"caller"});return gU(t,u)}catch(d){return hU(t,n,`relay delivery error: ${d instanceof Error?d.message:String(d)}`)}finally{if(l!==null&&clearInterval(l),a!==null)try{t.releaseAgentInflight(a.row,a.leaseId)}catch{}}}function hU(t,e,r){let n={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};try{let s=e.message_type==="response"?t.listEnqueuedResponseMailFromSender(e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias):t.listEnqueuedRequestMailFromSender(e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias),i=e.message_type==="response"?t.markMailDelivered(s.map(o=>o.id),r,new Date().toISOString()):t.markRelayRequestDeliveredAndEnqueueResponses(s,r,new Date().toISOString()).marked;return{...n,delivered:i,errors:1}}catch{return{...n,errors:1}}}function gU(t,e){let r={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},n=EU(e),s=new Date().toISOString(),{marked:i}=t.markRelayRequestDeliveredAndEnqueueResponses(e.queued,n,s);return{...r,delivered:i,errors:e.status==="ok"?0:1}}function yU(t){return{...{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},delivered:t.deliveredIds.length,errors:t.status==="ok"?0:1}}function EU(t){return t.status==="ok"?t.receipt:t.status==="stalled"?`relay delivery error: provider stalled${t.stalledAfterMs!==void 0?` after ${t.stalledAfterMs}ms`:""}
2402
- ${t.receipt}`:`relay delivery error: ${t.error}`}function wU(t,e){t.reclaimStaleMailboxDeliveries(new Date(Date.now()-nm(e)).toISOString())}function TU(t){return{stdout:{write:()=>{}},stderr:{write:()=>{}},dal:t}}var vv,kv=w(()=>{"use strict";ht();qa();Ja();li();at();tl();vv=10});function di(){let t=process.env.LMCTL_DAEMON_INTERVAL_MS;if(t===void 0||t.trim().length===0)return 5e3;let e=Number(t);return Number.isFinite(e)&&e>0?e:5e3}function bU(t=process.env){let e=t.LMCTL_DAEMON_FEATURES;if(e===void 0)return new Set(["mailbox-relay"]);if(e.trim()==="")return new Set;let r=new Set;for(let n of e.split(",")){let s=n.trim();if(s!==""){if(s==="all")return new Set(Iv);vU.has(s)&&r.add(s)}}return r}function Nv(t){let e=t.intervalMs??di(),r=t.runOnceFn??nn,n=new Set(t.features??bU()),s={running:t.autoStart!==!1,in_flight:!1,interval_ms:e,enabled_features:[...n].sort(),cycles:0,jobs_processed:0,last_jobs_processed:0,last_started_at:null,last_finished_at:null,last_error:null,last_session_sizes_recorded:0,last_session_size_failures:0,last_intake_scanned:0,last_intake_new_jobs:0,last_intake_failures:0,last_session_hung_detected:0,last_session_monitor_checked_at:null,last_session_monitor_error:null,last_mailbox_relay_scanned:0,last_mailbox_relay_delivered:0,last_mailbox_relay_errors:0},i=null,o=null,a=null,l=null,d=null;n.has("rollup-updater")&&t.startRollupUpdaterFn!==!1&&(d=(t.startRollupUpdaterFn??HT)(t.dal));let c=f=>{s.running&&(i=setTimeout(()=>{m.runCycle().finally(()=>c(e))},f))},u=f=>{s.running&&(o=setTimeout(()=>{l===null&&(l=Av(t.dal,n,t.monitorSessionActivityFn??Lc,e,s).finally(()=>{l=null})),l.finally(()=>u(Oc(t.dal,e)))},f))},m={state:s,runCycle:async()=>(a!==null||(a=SU(t.dal,r,t.collectSessionSizesFn??fg,t.scanIntakeFn??Zo,t.monitorSessionActivityFn??Lc,t.mailboxRelayFn??Sv,t.worker_id??"daemon",e,n,s).finally(()=>{a=null})),a),stop:async()=>{s.running=!1,i!==null&&clearTimeout(i),o!==null&&clearTimeout(o),d?.stop(),a!==null&&await a.catch(()=>{}),l!==null&&await l.catch(()=>{})}};if(s.running){let f=t.firstDelayMs??5e3;c(f),n.has("session-monitor")&&u(f)}return m}async function SU(t,e,r,n,s,i,o,a,l,d){d.in_flight=!0,d.last_started_at=new Date().toISOString(),d.last_error=null;let c=[],u=0,m=0,f=[],p=null,h=kU();try{if(l.has("durable-memory-policies")&&ww({dal:t}),l.has("drift-detectors")&&GT({dal:t}),l.has("intake")&&(f=await n(t)),l.has("job-worker"))for(;;){let _=await e({dal:t,worker_id:o,lease_ms:6e5});if(_===null)break;c.push(_)}if(l.has("mailbox-relay")&&(h=await i({dal:t})),l.has("session-size")){let _=await r(t);u=_.recorded,m=_.failed}l.has("session-monitor")&&(p=await Av(t,l,s,a,d))}catch(_){d.last_error=_ instanceof Error?_.message:String(_);try{t.raiseAttention({kind:"daemon_worker_failed",severity:"error",payload:JSON.stringify({error:d.last_error})})}catch{}}finally{d.in_flight=!1,d.cycles+=1,d.last_jobs_processed=c.length,d.last_session_sizes_recorded=u,d.last_session_size_failures=m,d.last_intake_scanned=f.reduce((_,g)=>_+g.scanned,0),d.last_intake_new_jobs=f.reduce((_,g)=>_+g.new_jobs,0),d.last_intake_failures=f.filter(_=>_.error!==void 0).length,d.last_session_hung_detected=p?.hung_detected??0,d.last_mailbox_relay_scanned=h.scanned,d.last_mailbox_relay_delivered=h.delivered,d.last_mailbox_relay_errors=h.errors,d.jobs_processed+=c.length,d.last_finished_at=new Date().toISOString()}return{jobs_processed:c.length,outcomes:c,session_sizes_recorded:u,session_size_failures:m,intake:f,session_monitor:p,mailbox_relay:h}}function kU(){return{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0}}async function Av(t,e,r,n,s){if(!e.has("session-monitor"))return null;let i=Oc(t,n),o=Date.now();if(s.last_session_monitor_checked_at!==null){let a=Date.parse(s.last_session_monitor_checked_at);if(Number.isFinite(a)&&o-a<i)return null}s.last_session_monitor_checked_at=new Date(o).toISOString(),s.last_session_monitor_error=null;try{return await r({dal:t,nowMs:o})}catch(a){s.last_session_monitor_error=a instanceof Error?a.message:String(a);try{t.raiseAttention({kind:"daemon_session_monitor_failed",severity:"error",payload:JSON.stringify({error:s.last_session_monitor_error})})}catch{}return null}}var Iv,vU,hm=w(()=>{"use strict";ru();wa();Cu();ko();XT();KT();Cc();kv();Iv=["durable-memory-policies","drift-detectors","intake","job-worker","mailbox-relay","session-size","session-monitor","rollup-updater"],vU=new Set(Iv)});function xv(t){let e=t.listMembersInState("in_chat");for(let r of e)t.setMemberState(r.id,"attention_needed","daemon_restarted_mid_chat");return e.length}var Rv=w(()=>{"use strict"});import{mkdirSync as IU,readFileSync as NU,readdirSync as AU,statSync as xU,writeFileSync as RU}from"node:fs";import{dirname as LU,join as Ov,sep as Lv}from"node:path";function rl(t){return{s3:{async send(n){let s=n;switch(s._localfsTag){case Cv:return OU(t,s.input);case $v:return CU(t,s.input);case Mv:return $U(t,s.input);default:throw new Error("createLocalFsS3Client: unknown command")}}},commands:{ListObjectsV2Command:Em,GetObjectCommand:ym,PutObjectCommand:gm}}}function OU(t,e){let r=Dv(t,e.Key);return IU(LU(r),{recursive:!0}),RU(r,e.Body),{}}function CU(t,e){let r=Dv(t,e.Key),n;try{n=NU(r)}catch(i){throw i.code==="ENOENT"?Object.assign(new Error("NoSuchKey"),{name:"NoSuchKey"}):i}let s=n.toString("utf-8");return{Body:{transformToString:async()=>s}}}function $U(t,e){let r=e.Prefix??"";jv(r);let s=MU(t).sort((c,u)=>c.key<u.key?-1:c.key>u.key?1:0).filter(c=>c.key.startsWith(r)),i=e.ContinuationToken;i!==void 0&&i!==""&&(s=s.filter(c=>c.key>i));let o=typeof e.MaxKeys=="number"&&Number.isFinite(e.MaxKeys)&&e.MaxKeys>0?Math.floor(e.MaxKeys):void 0,a=s,l=!1;o!==void 0&&s.length>o&&(a=s.slice(0,o),l=!0);let d={Contents:a.map(c=>({Key:c.key,LastModified:c.lastModified})),IsTruncated:l};return l&&(d.NextContinuationToken=a[a.length-1].key),d}function Dv(t,e){return jv(e),Ov(t,e)}function jv(t){if(t.split("/").includes(".."))throw new Error(`localfs-s3-client: refusing key/prefix with '..': ${t}`)}function MU(t){let e=[],r=(n,s)=>{let i;try{i=AU(n,{withFileTypes:!0})}catch(o){if(o.code==="ENOENT")return;throw o}for(let o of i){let a=s===""?o.name:`${s}/${o.name}`,l=Ov(n,o.name);if(o.isDirectory())r(l,a);else if(o.isFile()){let d=Lv==="/"?a:a.split(Lv).join("/");e.push({key:d,lastModified:xU(l).mtime})}}};return r(t,""),e}var Cv,$v,Mv,gm,ym,Em,wm=w(()=>{"use strict";Cv="localfs-put",$v="localfs-get",Mv="localfs-list",gm=class{input;_localfsTag=Cv;constructor(e){this.input=e}},ym=class{input;_localfsTag=$v;constructor(e){this.input=e}},Em=class{input;_localfsTag=Mv;constructor(e){this.input=e}}});function Pv(){return{put:0,get:0,list:0}}function Tm(t,e=DU){return t.put*e.putUsd+t.get*e.getUsd+t.list*e.listUsd}function vm(t){let e=new Date(t),r=e.getUTCFullYear(),n=String(e.getUTCMonth()+1).padStart(2,"0");return`${r}-${n}`}var DU,nl,bm=w(()=>{"use strict";DU={putUsd:5e-6,getUsd:40000000000000003e-23,listUsd:5e-6};nl=class{counts=Pv();record(e,r=1){this.counts[e]+=r}peek(){return{...this.counts}}drain(){let e={...this.counts};return this.counts=Pv(),e}estimateCostUsd(e){return Tm(this.counts,e)}}});function Fv(t){let e=t.now??Date.now,r=t.timers??jU,n=null,s=null;async function i(){let l=e(),d=vm(l),c=t.meter.drain();(c.put>0||c.get>0||c.list>0)&&t.store.addUsage({user_id:t.userId,device_id:t.deviceId,period:d,put:c.put,get:c.get,list:c.list,updated_at:new Date(l).toISOString()});let u=t.store.loadUsage(t.userId,t.deviceId,d),m=u?{put:u.put_count,get:u.get_count,list:u.list_count}:{put:0,get:0,list:0};if(t.publishOwnRollup!==void 0)try{await t.publishOwnRollup(d,m)}catch(h){t.log?.(`[usage] publish rollup failed: ${h instanceof Error?h.message:String(h)}`)}let f=m;if(t.readUserTotal!==void 0)try{f=await t.readUserTotal(d)}catch(h){t.log?.(`[usage] read user total failed: ${h instanceof Error?h.message:String(h)}`),f=m}let p=Tm(f);if(n!==d&&p>=t.ceilingUsd){n=d,t.log?.(`[usage] quota exceeded period=${d} cost=$${p.toFixed(4)} >= ceiling $${t.ceilingUsd}`);try{t.onQuotaExceeded({period:d,costUsd:p,ceilingUsd:t.ceilingUsd})}catch(h){t.log?.(`[usage] onQuotaExceeded threw: ${h instanceof Error?h.message:String(h)}`)}}}function o(){return s=(s??Promise.resolve()).then(()=>i()).catch(()=>{}),s}let a=r.setInterval(()=>{o()},t.intervalMs);return{stop(){r.clearInterval(a)},flushNow(){return o()},isOverQuota(){return n!==null&&n===vm(e())}}}var jU,Uv=w(()=>{"use strict";bm();jU={setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)}});var Sm=w(()=>{"use strict";ka();Na();Na()});function PU(t){if(typeof t!="object"||t===null||Array.isArray(t))return null;let e=t;if(typeof e.message_id!="string"||e.message_id==="")return null;if(typeof e.reply_to=="string"&&e.reply_to!==""){let s=e.response;if(typeof s!="object"||s===null)return null;let i=s;return typeof i.status!="number"?null:{message_id:e.message_id,reply_to:e.reply_to,response:i}}let r=e.request;if(typeof r!="object"||r===null)return null;let n=r;return typeof n.method!="string"||n.method===""||typeof n.path!="string"||n.path===""?null:{message_id:e.message_id,request:n}}function FU(t){return t.reply_to!==void 0&&t.response!==void 0}function UU(t){if(typeof t!="object"||t===null)return;let e=t.conversation_id;return typeof e=="string"?e:void 0}function Wv(t){let e=t.reason;if(e!==void 0)return e;try{return new DOMException("Aborted","AbortError")}catch{let r=new Error("Aborted");return r.name="AbortError",r}}var sl,ci,qv=w(()=>{"use strict";Sm();sl=class extends Error{name="MailboxFetchStoppedError";code="mailbox_fetch_stopped";constructor(e="MailboxFetchClient stopped before a response arrived"){super(e)}},ci=class{client;log;now;random;pending=new Map;requestHandler=null;stopped=!1;constructor(e){this.client=e.client,this.log=e.log??(()=>{}),this.now=e.now??Date.now,this.random=e.random??Math.random}onRequest(e){if(this.requestHandler!==null)throw new Error("MailboxFetchClient: onRequest handler already registered");this.requestHandler=e}async fetch(e,r){if(this.stopped)throw new sl("MailboxFetchClient.fetch after stop()");if(typeof e.path!="string"||e.path==="")throw new Error("MailboxFetchClient.fetch: request.path is required");let n=e.method;if(typeof n!="string"||n==="")throw new Error("MailboxFetchClient.fetch: request.method is required");let s=dr(this.now(),this.random);if(this.pending.has(s))throw new Error(`MailboxFetchClient.fetch: duplicate message_id=${s}`);let i=r?.conversationId??s,o={message_id:s,request:e};return new Promise((a,l)=>{let d=r?.abortSignal,c;if(d!==void 0){if(d.aborted){l(Wv(d));return}c=()=>{this.pending.has(s)&&(this.pending.delete(s),l(Wv(d)))},d.addEventListener("abort",c,{once:!0})}this.pending.set(s,{resolve:a,reject:l,...c!==void 0?{abortListener:c}:{},...d!==void 0?{abortSignal:d}:{}}),this.client.putMessage({conversation_id:i,payload:o}).catch(u=>{let m=this.pending.get(s);m!==void 0&&(this.pending.delete(s),m.abortListener!==void 0&&m.abortSignal!==void 0&&m.abortSignal.removeEventListener("abort",m.abortListener),m.reject(u))})})}async stop(){if(this.stopped)return;this.stopped=!0;let e=Array.from(this.pending.values());this.pending.clear();let r=new sl;for(let n of e){n.abortListener!==void 0&&n.abortSignal!==void 0&&n.abortSignal.removeEventListener("abort",n.abortListener);try{n.reject(r)}catch{}}}async handleIncoming(e,r){let n=PU(e);if(n===null){this.log("MailboxFetchClient: dropping non-envelope inbound payload");return}if(FU(n)){let l=this.pending.get(n.reply_to);if(l===void 0){this.log(`MailboxFetchClient: dropping response for unknown reply_to=${n.reply_to}`);return}this.pending.delete(n.reply_to),l.abortListener!==void 0&&l.abortSignal!==void 0&&l.abortSignal.removeEventListener("abort",l.abortListener),l.resolve(n.response);return}if(this.requestHandler===null){this.log(`MailboxFetchClient: no handler registered; dropping request message_id=${n.message_id}`);return}let s=r?.conversation_id??UU(e)??n.message_id,i;try{i=await this.requestHandler(n.request)}catch(l){let d=l instanceof Error?l.message:String(l),c=typeof l.code=="string"?l.code:"INTERNAL_ERROR";i={status:500,headers:{"content-type":"application/json"},body:{error:c,message:d}}}let a={message_id:dr(this.now(),this.random),reply_to:n.message_id,response:i};try{await this.client.putMessage({conversation_id:s,payload:a})}catch(l){this.log(`MailboxFetchClient: response PUT failed for reply_to=${n.message_id}: ${l instanceof Error?l.message:String(l)}`)}}}});function km(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;return!(e.kind!=="terminal"||typeof e.session_id!="string"||e.session_id===""||e.direction!=="agent_to_user"&&e.direction!=="user_to_agent"||typeof e.data!="string"||typeof e.ts!="number")}var Bv=w(()=>{"use strict"});function Im(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;if(e.kind!=="provider"||typeof e.session_id!="string"||e.session_id===""||e.direction!=="agent_to_user"&&e.direction!=="user_to_agent"||typeof e.ts!="number")return!1;if(e.direction==="agent_to_user"){if(!Array.isArray(e.events))return!1;for(let r of e.events)if(typeof r!="object"||r===null||Array.isArray(r)||typeof r.event_type!="string")return!1}else if(typeof e.user_input!="string")return!1;return!0}var Hv=w(()=>{"use strict"});function Am(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;if(e.kind!=="daemon_event"||typeof e.event!="string"||e.event===""||typeof e.ts!="number")return!1;if(e.event==="workflows"){if(!Array.isArray(e.workflows))return!1;for(let r of e.workflows){if(typeof r!="object"||r===null||Array.isArray(r))return!1;let n=r;if(typeof n.teamfile_path!="string"||n.teamfile_path===""||n.name!==null&&typeof n.name!="string"||typeof n.registered_at!="string"||n.registered_at===""||n.last_seeded_at!==null&&typeof n.last_seeded_at!="string")return!1}}else if(e.event==="chat_log"){if(typeof e.entry!="object"||e.entry===null||Array.isArray(e.entry))return!1;let r=e.entry;if(typeof r.id!="number"||typeof r.root_teamfile!="string"||r.root_teamfile===""||r.sender_teamfile!==null&&(typeof r.sender_teamfile!="string"||r.sender_teamfile==="")||r.sender_alias!==null&&(typeof r.sender_alias!="string"||r.sender_alias==="")||typeof r.receiver_teamfile!="string"||r.receiver_teamfile===""||typeof r.receiver_alias!="string"||r.receiver_alias===""||typeof r.message!="string"||r.response!==null&&typeof r.response!="string"||typeof r.status!="string"||r.status===""||typeof r.created_at!="string"||r.created_at==="")return!1}return!0}var Nm,Xv=w(()=>{"use strict";Nm="daemon:events"});function Gv(t){return{kind:"prompt",prompt_id:t.prompt_id??dr(t.now?.()??Date.now(),t.random??Math.random),root_teamfile:t.root_teamfile,text:t.text}}function xm(t){if(t===null||typeof t!="object")return!1;let e=t;return e.kind==="prompt"&&typeof e.prompt_id=="string"&&e.prompt_id.length>0&&typeof e.root_teamfile=="string"&&e.root_teamfile.length>0&&typeof e.text=="string"}var Jv,Rm=w(()=>{"use strict";Sm();Jv="prompt:root"});function ui(t){let e=t.split(".");if(e.length<2||e[1]===void 0||e[1]==="")return null;try{let r=JSON.parse(Vv(e[1]));return typeof r.sub=="string"&&r.sub!==""?r.sub:null}catch{return null}}function WU(t){let e=t.split(".");if(e.length<2||e[1]===void 0||e[1]==="")return null;try{let r=JSON.parse(Vv(e[1]));return typeof r.exp=="number"&&Number.isFinite(r.exp)?r.exp:null}catch{return null}}function Kv(t,e=60){if(typeof t!="string"||t==="")return!0;let r=WU(t);return r===null?!0:Date.now()/1e3>=r-e}function Vv(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e.padEnd(Math.ceil(e.length/4)*4,"="),n=globalThis.Buffer;return n!==void 0?n.from(r,"base64").toString("utf8"):atob(r)}var Lm=w(()=>{"use strict"});async function il(t){let e=t.fetchImpl??fetch,r=`https://cognito-idp.${t.region}.amazonaws.com/`,n=await e(r,{method:"POST",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":qU},body:JSON.stringify({AuthFlow:"REFRESH_TOKEN_AUTH",ClientId:t.clientId,AuthParameters:{REFRESH_TOKEN:t.refreshToken}})}),s=await n.text();if(!n.ok){let l=s;try{let d=JSON.parse(s);l=d.message??d.__type??s}catch{}throw new Error(`cognito_refresh_failed: ${n.status} ${l}`)}let o=JSON.parse(s).AuthenticationResult,a=o?.IdToken;if(typeof a!="string"||a==="")throw new Error("cognito_refresh_no_id_token: InitiateAuth returned no IdToken");return{idToken:a,...typeof o?.AccessToken=="string"&&o.AccessToken!==""?{accessToken:o.AccessToken}:{},...typeof o?.ExpiresIn=="number"&&Number.isFinite(o.ExpiresIn)?{expiresAt:Date.now()+o.ExpiresIn*1e3}:{}}}var qU,Om=w(()=>{"use strict";qU="AWSCognitoIdentityProviderService.InitiateAuth"});import{chmodSync as Yv,mkdirSync as zv,readFileSync as Zv,writeFileSync as Qv}from"node:fs";import{homedir as eb}from"node:os";import{dirname as tb,join as rb}from"node:path";function mi(){return process.env.LMCTL_DEVICE_AUTH_PATH??rb(eb(),".lmctl","device-auth.json")}function nb(){return process.env.LMCTL_TOKEN_PATH??rb(eb(),".lmctl","cli-tokens.json")}function Cm(t=mi()){try{let e=JSON.parse(Zv(t,"utf8"));return typeof e.userId!="string"||e.userId===""||typeof e.refreshToken!="string"||e.refreshToken===""?null:{userId:e.userId,refreshToken:e.refreshToken}}catch{return null}}function sb(t,e=mi()){zv(tb(e),{recursive:!0,mode:448}),Qv(e,JSON.stringify(t,null,2));try{Yv(e,384)}catch{}}function $m(t,e=nb()){let r={};try{r=JSON.parse(Zv(e,"utf8"))}catch{}let n={...r.cognito??{}};n.idToken=t.idToken,t.accessToken!==void 0&&(n.accessToken=t.accessToken),t.refreshToken!==void 0&&(n.refreshToken=t.refreshToken),t.expiresAt!==void 0&&(n.expiresAt=t.expiresAt);let s={...r,cognito:n};zv(tb(e),{recursive:!0,mode:448}),Qv(e,JSON.stringify(s,null,2));try{Yv(e,384)}catch{}}async function ib(t){let e=t.deviceAuthPath??mi(),r=Cm(e);if(r===null)throw new Error("device_auth_not_found: no ~/.lmctl/device-auth.json; run `lmctl device login` first");let n=await il({region:t.region,clientId:t.clientId,refreshToken:r.refreshToken,...t.fetchImpl!==void 0?{fetchImpl:t.fetchImpl}:{}});return $m({idToken:n.idToken,...n.accessToken!==void 0?{accessToken:n.accessToken}:{},refreshToken:r.refreshToken,...n.expiresAt!==void 0?{expiresAt:n.expiresAt}:{}},t.cliTokensPath??nb()),{idToken:n.idToken,userId:r.userId}}var Mm=w(()=>{"use strict";Om()});import{existsSync as BU,realpathSync as HU}from"node:fs";import{dirname as XU}from"node:path";function Dm(t){JU(t).catch(e=>{t.log?.(`[mailbox] prompt trigger failed: ${e instanceof Error?e.message:String(e)}`)})}async function JU(t){let e=t.payload.root_teamfile;try{e=HU(t.payload.root_teamfile)}catch(i){let o=`prompt root missing/unreadable: ${t.payload.root_teamfile}: ${i instanceof Error?i.message:String(i)}`;return ss({rootTeamfile:t.payload.root_teamfile,receiverTeamfile:t.payload.root_teamfile,receiverAlias:"Lead",message:t.payload.text,promptId:t.payload.prompt_id,detail:o,reason:"root_unavailable"}),t.log?.(`[mailbox] ${o}`),{status:"error",response:null,error_detail:o}}if(t.store.getRootTeam(e)===null){let i=`prompt root is not registered: ${e}`;return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:"Lead",message:t.payload.text,promptId:t.payload.prompt_id,detail:i,reason:"root_unregistered"}),t.log?.(`[mailbox] ${i}`),{status:"error",response:null,error_detail:i}}let r=KU(e);if("error"in r)return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:"Lead",message:t.payload.text,promptId:t.payload.prompt_id,detail:r.error,reason:"root_invalid"}),t.log?.(`[mailbox] ${r.error}`),{status:"error",response:null,error_detail:r.error};let n=Lt(t.store,{receiver_teamfile:e,receiver_alias:r.alias,sender_teamfile:`prompt:${t.payload.prompt_id}`,sender_alias:"operator",ttlMs:ZU(t.env??process.env)});if(!n.acquired){let i=zU(r.alias,n.current);return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,promptId:t.payload.prompt_id,detail:i,reason:"unavailable"}),t.log?.(`[mailbox] prompt rejected: ${i}`),{status:"error",response:null,error_detail:i}}let s=Er(i=>t.store.heartbeatAgentInflight(n.lease,n.leaseId,i),{intervalMs:gn(t.env??process.env)});try{let o=await(t.chat??jt)({provider:r.provider,sessionId:r.sessionid,cwd:r.sessiondir,prompt:t.payload.text,env:t.env??process.env,alias:r.alias,permissionMode:"yolo",...t.timeoutMs!==void 0?{timeoutMs:t.timeoutMs}:{}}),a=o.status==="stalled",l=!a&&o.text.trim()==="",d=a?`provider stalled${o.stalledAfterMs!==void 0?` after ${o.stalledAfterMs}ms`:""}`:l?"provider returned empty response":null,c=a||l?"error":"ok";return c==="ok"?await VU(t.store,{rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,response:o.text,status:c,error_detail:null,log:t.log}):ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,promptId:t.payload.prompt_id,detail:d??"provider failed",reason:a?"stalled":"empty_response"}),{status:c,response:c==="error"?null:o.text,error_detail:d}}catch(i){let o=i instanceof Error?i.message:String(i);return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,promptId:t.payload.prompt_id,detail:o,reason:"provider_error"}),t.log?.(`[mailbox] prompt provider error: ${o}`),{status:"error",response:null,error_detail:o}}finally{clearInterval(s);try{t.store.releaseAgentInflight(n.lease,n.leaseId)}catch(i){t.log?.(`[mailbox] failed to release prompt in-flight slot: ${i instanceof Error?i.message:String(i)}`)}}}function ss(t){M({event:"prompt_trigger_error",reason:t.reason,prompt_id:t.promptId,root_teamfile:t.rootTeamfile,sender_teamfile:t.rootTeamfile,sender_alias:"operator",receiver_teamfile:t.receiverTeamfile,receiver_alias:t.receiverAlias,error_detail:t.detail,message_preview:GU(t.message)})}function GU(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function KU(t){if(!BU(t))return{error:`prompt root missing/unreadable: ${t}`};let e=ot(t);if(e.parseErrors.length>0)return{error:`prompt root parse error: ${e.parseErrors.join("; ")}`};let r=Ht(e);return r===void 0?{error:`prompt root has no Lead: ${t}`}:r.session===void 0||r.session.trim()===""?{error:`prompt root Lead is unseeded: ${t}`}:{alias:r.alias,provider:r.provider,sessionid:r.session,sessiondir:r.sessiondir??XU(t)}}async function VU(t,e){let r=lb(e.message),n=e.response===null?null:lb(e.response);try{t.insertTeamChatLog({root_teamfile:e.rootTeamfile,sender_teamfile:e.rootTeamfile,sender_alias:"operator",receiver_teamfile:e.receiverTeamfile,receiver_alias:e.receiverAlias,message:r.text,response:n?.text??null,origin:"unknown",status:e.status,error_detail:e.error_detail,truncated:r.truncated||n?.truncated?1:0,created_at:new Date().toISOString()})}catch(s){e.log?.(`[mailbox] warning: failed to record prompt chat log: ${s instanceof Error?s.message:String(s)}`)}}function lb(t){return t.length<=ob?{text:t,truncated:!1}:{text:t.slice(0,ob),truncated:!0}}function YU(t,e){return`${t} is servicing ${e.sender_alias} (${e.sender_teamfile}) since ${e.started_at}`}function zU(t,e){return e.sender_teamfile.startsWith("prompt:")?`${t} is busy servicing another prompt since ${e.started_at}`:YU(t,e)}function ZU(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return ab;let r=Number(e);return!Number.isFinite(r)||r<=0?ab:r}var ob,ab,db=w(()=>{"use strict";Pt();ur();pe();ht();ob=256*1024,ab=30*60*1e3});import{chmodSync as _b,existsSync as QU,mkdirSync as hb,readFileSync as dl,writeFileSync as gb}from"node:fs";import{dirname as jm,resolve as ol,join as yb}from"node:path";import{fileURLToPath as eW}from"node:url";import{homedir as Eb}from"node:os";import{CognitoIdentityClient as tW,GetIdCommand as rW}from"@aws-sdk/client-cognito-identity";import{fromCognitoIdentity as cb}from"@aws-sdk/credential-provider-cognito-identity";import{GetObjectCommand as nW,ListObjectsV2Command as sW,PutObjectCommand as iW,S3Client as ub}from"@aws-sdk/client-s3";function pi(t={}){let e=t.env??process.env,r=t.tfstatePath!==void 0?[t.tfstatePath]:cW(t.selfUrl),n={},s;for(let S of r)if(QU(S)){n=dW(S),s=S;break}let i=(...S)=>{for(let x of S)if(typeof x=="string"&&x!=="")return x},o=i(e.LMCTL_NEXT_IDENTITY_POOL_ID,n.LMCTL_NEXT_IDENTITY_POOL_ID)??oW,a=i(e.LMCTL_NEXT_COGNITO_USER_POOL_ID,n.LMCTL_NEXT_COGNITO_USER_POOL_ID)??aW,l=i(e.LMCTL_NEXT_MAILBOX_BUCKET,e.LMCTL_NEXT_POLICY_BUCKET,n.LMCTL_NEXT_MAILBOX_BUCKET,n.LMCTL_NEXT_POLICY_BUCKET)??lW,d=i(e.AWS_REGION,e.AWS_DEFAULT_REGION)??"us-east-1",c=i(e.LMCTL_NEXT_COGNITO_CLIENT_ID,n.LMCTL_NEXT_COGNITO_CLIENT_ID)??cl,u=[];o===void 0&&u.push("LMCTL_NEXT_IDENTITY_POOL_ID"),a===void 0&&u.push("LMCTL_NEXT_COGNITO_USER_POOL_ID"),l===void 0&&u.push("LMCTL_NEXT_MAILBOX_BUCKET");let m={missing:u,tfstateCandidatesChecked:r,...s!==void 0?{tfstatePathUsed:s}:{}};if(u.length>0)return m;let f=e.LMCTL_MAILBOX_POLL_MS,p=f!==void 0&&f.length>0?Number(f):void 0,h=ll(e.LMCTL_MAILBOX_READ_INTERVAL_SECONDS),_=ll(e.LMCTL_MAILBOX_HEARTBEAT_IDLE_SECONDS),g=ll(e.LMCTL_MAILBOX_BACKOFF_READ_INTERVAL_SECONDS),y=ll(e.LMCTL_MAILBOX_CHATLOG_POLL_SECONDS),E=i(e.LMCTL_MAILBOX_KEY),v=i(e.LMCTL_TOKEN_PATH);return m.config={identityPoolId:o,cognitoUserPoolId:a,cognitoClientId:c,region:d,mailboxBucket:l,...typeof p=="number"&&Number.isFinite(p)&&p>=100?{pollIntervalMs:p}:{},...h!==void 0?{readIntervalMs:h}:{},..._!==void 0?{heartbeatIdleMs:_}:{},...g!==void 0?{backoffReadIntervalMs:g}:{},...y!==void 0?{chatLogPollIntervalMs:y}:{},...E!==void 0?{mailboxKey:E}:{},...v!==void 0?{tokenPath:v}:{}},m}function dW(t){try{let e=dl(t,"utf8"),n=JSON.parse(e).outputs??{},s={};for(let[i,o]of Object.entries(n))o!==null&&typeof o=="object"&&typeof o.value=="string"&&(s[i]=o.value);return s}catch{return{}}}function cW(t){let e=jm(eW(t??import.meta.url));return[ol(e,"..","..","..","..","infra","terraform","terraform.tfstate"),ol(e,"..","..","..","..","..","infra","terraform","terraform.tfstate"),ol(e,"..","..","..","infra","terraform","terraform.tfstate"),ol(e,"..","..","infra","terraform","terraform.tfstate")]}function ll(t){if(t===void 0||t==="")return;let e=Number(t);if(!(!Number.isFinite(e)||e<=0))return e*1e3}function uW(t){let e=mW(t.intervalMs)??wb,r=Math.max(1,Math.trunc(t.limit??500)),n=t.now??Date.now,s=t.cursorKey!==void 0&&t.store.loadTeamChatLogCursor!==void 0&&t.store.saveTeamChatLogCursor!==void 0?{key:t.cursorKey,load:t.store.loadTeamChatLogCursor.bind(t.store),save:t.store.saveTeamChatLogCursor.bind(t.store)}:null,i,o=!1,a=!1,l=()=>{try{if(s!==null){let u=s.load(s.key);if(u!==null)return i=u.last_pushed_id,!0}return i=t.store.getMaxTeamChatLogId(),s!==null&&s.save({cursor_key:s.key,last_pushed_id:i,updated_at:new Date(n()).toISOString()}),!0}catch(u){return t.log?.(`[mailbox] daemon_event chat_log seed failed: ${u instanceof Error?u.message:String(u)}`),!1}};l();let d=async()=>{if(!(a||o)){o=!0;try{if(i===void 0&&!l())return;let u=t.store.listTeamChatLogSinceId(i,r);for(let m of u){let f={kind:"daemon_event",event:"chat_log",ts:n(),entry:{id:m.id,root_teamfile:m.root_teamfile,sender_teamfile:m.sender_teamfile,sender_alias:m.sender_alias,receiver_teamfile:m.receiver_teamfile,receiver_alias:m.receiver_alias,message:m.message,response:m.response,status:m.status,created_at:m.created_at}};await t.publishDaemonEvent(f),s!==null&&s.save({cursor_key:s.key,last_pushed_id:m.id,updated_at:new Date(n()).toISOString()}),i=Math.max(i,m.id)}}catch(u){t.log?.(`[mailbox] daemon_event chat_log tail failed: ${u instanceof Error?u.message:String(u)}`)}finally{o=!1}}},c=setInterval(()=>{d()},e);return typeof c.unref=="function"&&c.unref(),{pollNow:d,stop(){a=!0,clearInterval(c)}}}function mW(t){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:void 0}async function Tb(t){let e=t.tokenPath??yb(Eb(),".lmctl","cli-tokens.json"),r=fb(t.tokenPath);if(Kv(r.cognito?.idToken)&&Cm()!==null)try{await ib({region:t.region,clientId:t.cognitoClientId??cl,cliTokensPath:e}),r=fb(t.tokenPath),t.log?.("[mx-mailbox] refreshed IdToken from device-auth refresh token")}catch(A){let Y=A instanceof Error?A.message:String(A);t.log?.(`[mx-mailbox] device-auth refresh failed: ${Y}`)}if(r.cognito===void 0)throw new Error("agent_mailbox_not_logged_in: ~/.lmctl/cli-tokens.json has no cognito tokens; run `webcli login` or `lmctl device login` first");let n=r.cognito.idToken;if(typeof n!="string"||n==="")throw new Error("agent_mailbox_no_id_token: cli-tokens.json's cognito.idToken is empty; run `webcli login` or `lmctl device login` first");let s=`cognito-idp.${t.region}.amazonaws.com/${t.cognitoUserPoolId}`,i=r.cognito.identityId,o=!1;i===void 0||i===""?i=await pb({tokenPath:e,region:t.region,identityPoolId:t.identityPoolId,idpProvider:s,idToken:n,log:t.log}):(o=!0,t.log?.(`[mx-mailbox] using cached identityId from cli-tokens (skipping GetId) for ${i}`));let a=cb({identityId:i,logins:{[s]:n},clientConfig:{region:t.region}}),l=new ub({region:t.region,credentials:a}),d={ListObjectsV2Command:sW,GetObjectCommand:nW,PutObjectCommand:iW},c=ui(n),u=c??i,m=t.deviceId,f=Vn({identityId:i,userId:c,deviceId:m,mailboxKey:t.mailboxKey}),p=t.cursorStore,h;if(p!==void 0){let A=p.loadMailboxCursor(u,f);if(A!==null)h=A.last_processed_seq??void 0,t.log?.(`[mx-mailbox] resumed seq cursor=${h??"(sentinel)"} for user_id=${u}`);else{let Y=!1,B=0;for(;!Y&&B<2;){B+=1;try{let k=ba(f,"web"),I=0,C;do{let W=await l.send(new d.ListObjectsV2Command({Bucket:t.mailboxBucket,Prefix:k,MaxKeys:1e3,...C!==void 0?{ContinuationToken:C}:{}}));for(let U of W.Contents??[]){let j=Sa(U.Key??"",f,"web");j!==void 0&&j>I&&(I=j)}C=W.IsTruncated===!0?W.NextContinuationToken:void 0}while(C!==void 0);h=I,t.log?.(`[mx-mailbox] cold start: seeded seq cursor=${I} for user_id=${u}`),Y=!0}catch(k){let I=k instanceof Error?k.message:String(k);if(o&&B===1&&_W(k)){t.log?.(`[mx-mailbox] cached identityId rejected by cognito (${I}); clearing + refreshing`),pW(e),o=!1,i=await pb({tokenPath:e,region:t.region,identityPoolId:t.identityPoolId,idpProvider:s,idToken:n,log:t.log}),a=cb({identityId:i,logins:{[s]:n},clientConfig:{region:t.region}}),l=new ub({region:t.region,credentials:a}),f=Vn({identityId:i,userId:c,deviceId:m,mailboxKey:t.mailboxKey});continue}t.log?.(`[mx-mailbox] cold start seq probe failed: ${I}`);break}}p.saveMailboxCursor({user_id:u,mailbox_key:f,last_processed_version_id:null,last_processed_seq:h??null,last_processed_at:new Date().toISOString()})}}let _=null,g=t.terminalSessionManager,y=t.persistentSessionManager,E=t.promptTriggerStore,v=new nl,S=new sn({bucket:t.mailboxBucket,identityId:i,...c!==null?{userId:c}:{},...m!==void 0?{deviceId:m}:{},...t.mailboxKey!==void 0?{mailboxKey:t.mailboxKey}:{},s3:l,commands:d,selfRole:"agent",onS3Op:A=>v.record(A),onMessage:async A=>{if(g!==void 0&&km(A.payload)){g.onInbound(A.payload);return}if(y!==void 0&&Im(A.payload)){await y.onInbound(A.payload);return}if(!Am(A.payload)){if(E!==void 0&&xm(A.payload)){Dm({store:E,payload:A.payload,log:t.log});return}_!==null&&await _.handleIncoming(A.payload,A)}},...p!==void 0?{onCursorAdvance:A=>{p.saveMailboxCursor({user_id:u,mailbox_key:f,last_processed_version_id:null,last_processed_seq:A,last_processed_at:new Date().toISOString()})}}:{},...h!==void 0?{cursor:h}:{},...t.pollIntervalMs!==void 0?{pollIntervalMs:t.pollIntervalMs}:{},...t.readIntervalMs!==void 0?{readIntervalMs:t.readIntervalMs}:{},...t.heartbeatIdleMs!==void 0?{heartbeatIdleMs:t.heartbeatIdleMs}:{},...t.backoffReadIntervalMs!==void 0?{backoffReadIntervalMs:t.backoffReadIntervalMs}:{}});_=new ci({client:S,...t.log!==void 0?{log:t.log}:{}}),g!==void 0&&g.setPublish(async A=>S.putMessage({conversation_id:`terminal:${A.session_id}`,payload:A})),y!==void 0&&y.setPublish(async A=>S.putMessage({conversation_id:`provider:${A.session_id}`,payload:A}));let x=A=>S.putMessage({conversation_id:Nm,payload:A});S.start();let H=t.chatLogTailStore===void 0?void 0:uW({store:t.chatLogTailStore,publishDaemonEvent:x,cursorKey:f,intervalMs:t.chatLogPollIntervalMs??t.readIntervalMs??t.pollIntervalMs??wb,log:t.log});t.log?.(`[mx-mailbox] agent polling ${f} (bucket=${t.mailboxBucket})`);let F=t.deviceId??i,$=`${u}/usage/`,R;return R=t.usageStore===void 0?void 0:Fv({meter:v,store:t.usageStore,userId:u,deviceId:F,ceilingUsd:t.usageQuotaUsd??1/0,onQuotaExceeded:({period:A,costUsd:Y,ceilingUsd:B})=>{t.log?.(`[usage] month ${A} cost $${Y.toFixed(4)} >= ceiling $${B} \u2014 blocking mailbox`),S.stop().catch(()=>{}),R?.stop()},publishOwnRollup:async(A,Y)=>{await l.send(new d.PutObjectCommand({Bucket:t.mailboxBucket,Key:`${$}${F}-${A}.json`,Body:JSON.stringify({...Y,updated_at:new Date().toISOString()}),ContentType:"application/json"}))},readUserTotal:async A=>{let Y={put:0,get:0,list:0},B;do{let k=await l.send(new d.ListObjectsV2Command({Bucket:t.mailboxBucket,Prefix:$,MaxKeys:1e3,...B!==void 0?{ContinuationToken:B}:{}}));for(let I of k.Contents??[]){let C=I.Key??"";if(C.endsWith(`-${A}.json`))try{let W=await l.send(new d.GetObjectCommand({Bucket:t.mailboxBucket,Key:C}));if(W.Body===void 0)continue;let U=JSON.parse(await W.Body.transformToString("utf-8"));Y.put+=U.put??0,Y.get+=U.get??0,Y.list+=U.list??0}catch{}}B=k.IsTruncated===!0?k.NextContinuationToken:void 0}while(B!==void 0);return Y},intervalMs:t.usageFlushIntervalMs??36e5,...t.log!==void 0?{log:t.log}:{}}),{identityId:i,mailbox:S,fetchClient:_,publishDaemonEvent:x,async stop(){H?.stop(),R!==void 0&&(await R.flushNow().catch(()=>{}),R.stop()),await _.stop().catch(()=>{}),await S.stop().catch(()=>{})}}}async function vb(t){let e=t.s3!==void 0&&t.commands!==void 0?{s3:t.s3,commands:t.commands}:rl(t.rootDir),r=Vn({identityId:fi,userId:fi,deviceId:mb}),n=null,s=t.terminalSessionManager,i=t.persistentSessionManager,o=t.promptTriggerStore,a=new sn({bucket:"local",identityId:fi,userId:fi,deviceId:mb,s3:e.s3,commands:e.commands,selfRole:"agent",onMessage:async d=>{if(s!==void 0&&km(d.payload)){s.onInbound(d.payload);return}if(i!==void 0&&Im(d.payload)){await i.onInbound(d.payload);return}if(!Am(d.payload)){if(o!==void 0&&xm(d.payload)){Dm({store:o,payload:d.payload,log:t.log});return}n!==null&&await n.handleIncoming(d.payload,d)}},pollIntervalMs:t.pollIntervalMs??al,readIntervalMs:t.readIntervalMs??al,heartbeatIdleMs:t.heartbeatIdleMs??al,backoffReadIntervalMs:t.backoffReadIntervalMs??al});n=new ci({client:a,...t.log!==void 0?{log:t.log}:{}}),s!==void 0&&s.setPublish(async d=>a.putMessage({conversation_id:`terminal:${d.session_id}`,payload:d})),i!==void 0&&i.setPublish(async d=>a.putMessage({conversation_id:`provider:${d.session_id}`,payload:d}));let l=d=>a.putMessage({conversation_id:Nm,payload:d});return a.start(),t.log?.(`[local-webui] agent polling ${r} (local-fs ${t.rootDir})`),{identityId:fi,mailbox:a,fetchClient:n,publishDaemonEvent:l,async stop(){await n.stop().catch(()=>{}),await a.stop().catch(()=>{})}}}function fb(t){let e=t??yb(Eb(),".lmctl","cli-tokens.json");try{let r=dl(e,"utf8");return JSON.parse(r)}catch{return{}}}function fW(t,e){if(e===void 0||e==="")return;let r={};try{let s=dl(t,"utf8");r=JSON.parse(s)}catch{}if(r.cognito===void 0)return;let n={...r,cognito:{...r.cognito,identityId:e}};hb(jm(t),{recursive:!0,mode:448}),gb(t,JSON.stringify(n,null,2));try{_b(t,384)}catch{}}function pW(t){let e={};try{let n=dl(t,"utf8");e=JSON.parse(n)}catch{return}if(e.cognito===void 0)return;let r={...e,cognito:{...e.cognito}};delete r.cognito.identityId,hb(jm(t),{recursive:!0,mode:448}),gb(t,JSON.stringify(r,null,2));try{_b(t,384)}catch{}}async function pb(t){t.log?.("[mx-mailbox] cli-tokens has no identityId; calling GetId");let r=await new tW({region:t.region}).send(new rW({IdentityPoolId:t.identityPoolId,Logins:{[t.idpProvider]:t.idToken}}));if(r.IdentityId===void 0||r.IdentityId==="")throw new Error("cognito_getid_no_identity_id");try{fW(t.tokenPath,r.IdentityId),t.log?.(`[mx-mailbox] persisted identityId=${r.IdentityId} to ${t.tokenPath}`)}catch(n){let s=n instanceof Error?n.message:String(n);t.log?.(`[mx-mailbox] WARNING: identityId persist failed (${s}); will redo GetId on next restart`)}return r.IdentityId}function _W(t){if(t===null||typeof t!="object")return!1;let e=t,r=[typeof e.name=="string"?e.name:void 0,typeof e.Code=="string"?e.Code:void 0,typeof e.__type=="string"?e.__type:void 0];for(let s of r)if(s!==void 0&&(s==="NotAuthorizedException"||s==="ResourceNotFoundException"||s==="InvalidIdentityPoolConfigurationException"||s==="ExpiredTokenException"))return!0;let n=typeof e.message=="string"?e.message:"";return!!(n.includes("NotAuthorizedException")||n.includes("Invalid identity pool configuration")||n.includes("Identity")&&n.includes("not found"))}var wb,al,cl,oW,aW,lW,fi,mb,Pm=w(()=>{"use strict";Aa();wm();bm();Uv();qv();Bv();Hv();Xv();Rm();ka();Lm();Mm();db();wb=3e3,al=1e3,cl="79u5jhkk46qofog661c9i0bdcs",oW="us-east-1:69636ff0-e008-4cbc-853d-180e5526a198",aW="us-east-1_4iUdFggDn",lW="lmctl-next-preview-mailbox-254332045686";fi="local",mb="local"});import{spawn as qm}from"node:child_process";import{createInterface as bb}from"node:readline";var Fm,Um,Wm,Sb,kb=w(()=>{"use strict";ro();pe();Ls();Fm=class{child;ctx;rl;nextRpcId=1;pending=new Map;threadId;nextLocalTurnId=1;closed=!1;setResumeThreadId(e){this.threadId=e}async start(e,r){this.ctx=r;let n=qm(e.command,e.args,{cwd:e.cwd??process.cwd(),env:e.env??process.env,stdio:["pipe","pipe","pipe"]});if(this.child=n,this.rl=bb({input:n.stdout}),this.rl.on("line",s=>{r.generation===r.currentGeneration()&&this.handleLine(s)}),n.stderr?.on("data",s=>{if(r.generation!==r.currentGeneration())return;let i=s instanceof Buffer?s.toString("utf8"):String(s);r.emit({event_type:"notification",payload:{source:"stderr",text:i}})}),await this.rpc("initialize",{clientInfo:{name:"lmctl-dt3",title:"lmctl DT-3",version:"0.1.0"},capabilities:{experimentalApi:!1}}),this.notify("initialized",{}),this.threadId!==void 0&&this.threadId!=="")try{await this.rpc("thread/resume",{threadId:this.threadId,approvalPolicy:"never",sandbox:"danger-full-access"}),r.emit({event_type:"thread_started",payload:{thread_id:this.threadId,resumed:!0}})}catch{let i=(await this.rpc("thread/start",{cwd:e.cwd??process.cwd(),approvalPolicy:"never",sandbox:"danger-full-access"})).result?.thread,o=typeof i?.id=="string"?i.id:void 0;this.threadId=o,r.emit({event_type:"thread_started",payload:{thread_id:o,resumed:!1}})}else{let i=(await this.rpc("thread/start",{cwd:e.cwd??process.cwd(),approvalPolicy:"never",sandbox:"danger-full-access"})).result?.thread,o=typeof i?.id=="string"?i.id:void 0;this.threadId=o,r.emit({event_type:"thread_started",payload:{thread_id:o,resumed:!1}})}return n}async sendTurn(e){if(this.closed)throw new Error("codex_session_closed");if(this.threadId===void 0||this.threadId==="")throw new Error("codex_no_thread_id");let r=`local-${this.nextLocalTurnId++}`;this.ctx?.turnMap.set(r,{startedAt:Date.now()});try{let s=(await this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}]})).result?.turn,i=typeof s?.id=="string"?s.id:void 0;if(i!==void 0){let o=this.ctx?.turnMap.get(r);this.ctx?.turnMap.delete(r),o!==void 0&&this.ctx?.turnMap.set(i,o)}}catch(n){throw this.ctx?.turnMap.delete(r),n}}async stop(){if(this.closed=!0,this.rl!==void 0&&(this.rl.close(),this.rl=void 0),this.child?.stdin!==null&&this.child?.stdin?.end!==void 0)try{this.child.stdin.end()}catch{}for(let e of this.pending.values())e.reject(new Error("codex_session_stopping"));this.pending.clear()}async rpc(e,r){if(this.child?.stdin===null||this.child===void 0)throw new Error("codex_child_unavailable");return new Promise((n,s)=>{let i=this.nextRpcId++;this.pending.set(i,{resolve:n,reject:s});let o=JSON.stringify({jsonrpc:"2.0",id:i,method:e,params:r});try{this.child.stdin.write(o+`
2401
+ Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var ke,aU,lU,Za,at=w(()=>{"use strict";ur();mr();ke=class extends Error{constructor(e){super(e),this.name="ChatTargetError"}},aU=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,lU=/^ses_[A-Za-z0-9_-]+$/,Za=/^[A-Za-z][A-Za-z0-9_-]*$/});function Qa(t){return uU.has(t)}function pm(){return fm===null&&(fm=Ot(Dt())),fm}function _m(t,e,r={}){if(!Qa(t))return null;try{let n=pm().getAdapter?.(t);if(n===void 0)return null;let s=n.resumeCommand(e).trim();if(s.length===0)return null;let i=s.split(/\s+/),o=t==="codex"&&r.isLead===!0?Qi({warn:()=>{}}):[],a=r.model!==void 0&&r.model.trim().length>0?cU[t]?.(r.model):void 0;return r.model!==void 0&&r.model.trim().length>0&&a===void 0&&r.onModelIgnored?.({provider:t,model:r.model,reason:`${t} terminal resume does not implement per-session model selection`}),[...i,...a??[],...o,...Ev[t]??[]]}catch{return null}}function el(t,e,r={}){let n=_m(t,e,r);return n===null?null:n.join(" ")}function Ue(t,e){return pm().getSession(t,e)}async function rs(t){return(await pm().resolveSessions(t)).map(r=>r.provider.name)}var Ev,cU,uU,wv,fm,Xt=w(()=>{"use strict";Pt();Ed();Ev={claude:["--dangerously-skip-permissions"],codex:["--dangerously-bypass-approvals-and-sandbox"],gemini:["-y"],copilot:["--yolo"],opencode:[],qwen:["--approval-mode","yolo"],agy:[],lmplayer:[],kimi:[]},cU={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]},uU=new Set(Object.keys(Ev)),wv=/^[\w.:-]+$/;fm=null});function mU(t=process.env){let e=t.LMCTL_SESSION_IDLE_TIMEOUT_MS;if(e===void 0||e.trim()==="")return Tv;let r=Number(e);return!Number.isFinite(r)||r<=0?Tv:r}async function fU(t,e,r){try{let n=Ne(e,r,t),s=n.sessionid;if(typeof s!="string"||s.trim()===""||s===".")return null;let i;if(typeof n.provider=="string"&&n.provider.trim()!=="")i=n.provider;else{let d=await rs(s);if(d.length!==1)return null;i=d[0]}let o=await Ue(s,i);if(o===null)return null;let a=o.modifiedAt;if(!(a instanceof Date))return null;let l=a.getTime();return Number.isFinite(l)?Date.now()-l:null}catch{return null}}async function ns(t,e,r,n,s){if(!e.busy||e.reason!=="in-flight")return!1;let i=s??mU(),o=await fU(t,r,n),a=o!==null&&o>=i;return a&&M({event:"session_idle_reclaim",receiver_teamfile:r,receiver_alias:n,idle_ms:o,idle_minutes:o===null?null:Math.round(o/6e4),threshold_ms:i,reason:"in-flight holder idle past session-idle threshold; lease will be force-reclaimed"}),a}var Tv,tl=w(()=>{"use strict";pe();Xt();at();Tv=36e5});function pU(t=process.env){let e=t.LMCTL_DAEMON_MAILBOX_RELAY_MAX_BATCHES;if(e===void 0||e.trim()==="")return vv;let r=Number(e);return!Number.isFinite(r)||r<=0?vv:Math.max(1,Math.trunc(r))}async function Sv(t){let e=t.env??process.env,r=t.maxBatches??pU(e),n=TU(t.dal),s={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};wU(t.dal,e);let i=new Set;for(;s.scanned<r;){let o=t.dal.listRelayMailboxLanes(r).find(l=>!i.has(bv(l)));if(o===void 0)break;i.add(bv(o)),s.scanned+=1;let a=await _U(t.dal,n,e,o);s.delivered+=a.delivered,s.skipped_busy+=a.skipped_busy,s.skipped_terminal+=a.skipped_terminal,s.errors+=a.errors}return s}function bv(t){return JSON.stringify([t.sender_teamfile,t.sender_alias,t.receiver_teamfile,t.receiver_alias])}async function _U(t,e,r,n){let s={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};Wa(t,n.receiver_teamfile,n.receiver_alias);let i=_t(t,n.receiver_teamfile,n.receiver_alias),o=!1;if(i.busy){if(!await ns(t,i,n.receiver_teamfile,n.receiver_alias))return i.reason==="terminal-held"?{...s,skipped_terminal:1}:{...s,skipped_busy:1};o=!0}let a=null,l=null;try{let d=Ne(n.receiver_teamfile,n.receiver_alias,t),c=Lt(t,{receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,sender_teamfile:n.sender_teamfile,sender_alias:n.sender_alias,ttlMs:qt(),...o?{force:!0}:{}});if(!c.acquired)return{...s,skipped_busy:1};if(a={row:c.lease,leaseId:c.leaseId},l=Er(m=>t.heartbeatAgentInflight(a.row,a.leaseId,m),{intervalMs:yn(r)}),n.message_type==="response"){let m=await Ha({sender:{teamfile:n.sender_teamfile,alias:n.sender_alias},receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias,provider:d.provider,sessionId:d.sessionid,cwd:d.sessiondir,...d.model!==void 0?{model:d.model}:{},...d.effort!==void 0?{effort:d.effort}:{},...d.isLead!==void 0?{isLead:d.isLead}:{}},io:e,permissionMode:"yolo",env:r});return yU(m)}let u=await es({sender:{teamfile:n.sender_teamfile,alias:n.sender_alias},receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias,provider:d.provider,sessionId:d.sessionid,cwd:d.sessiondir,...d.model!==void 0?{model:d.model}:{},...d.effort!==void 0?{effort:d.effort}:{},...d.isLead!==void 0?{isLead:d.isLead}:{}},io:e,permissionMode:"yolo",env:r,finalize:"caller"});return gU(t,u)}catch(d){return hU(t,n,`relay delivery error: ${d instanceof Error?d.message:String(d)}`)}finally{if(l!==null&&clearInterval(l),a!==null)try{t.releaseAgentInflight(a.row,a.leaseId)}catch{}}}function hU(t,e,r){let n={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};try{let s=e.message_type==="response"?t.listEnqueuedResponseMailFromSender(e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias):t.listEnqueuedRequestMailFromSender(e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias),i=e.message_type==="response"?t.markMailDelivered(s.map(o=>o.id),r,new Date().toISOString()):t.markRelayRequestDeliveredAndEnqueueResponses(s,r,new Date().toISOString()).marked;return{...n,delivered:i,errors:1}}catch{return{...n,errors:1}}}function gU(t,e){let r={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},n=EU(e),s=new Date().toISOString(),{marked:i}=t.markRelayRequestDeliveredAndEnqueueResponses(e.queued,n,s);return{...r,delivered:i,errors:e.status==="ok"?0:1}}function yU(t){return{...{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},delivered:t.deliveredIds.length,errors:t.status==="ok"?0:1}}function EU(t){return t.status==="ok"?t.receipt:t.status==="stalled"?`relay delivery error: provider stalled${t.stalledAfterMs!==void 0?` after ${t.stalledAfterMs}ms`:""}
2402
+ ${t.receipt}`:`relay delivery error: ${t.error}`}function wU(t,e){t.reclaimStaleMailboxDeliveries(new Date(Date.now()-nm(e)).toISOString())}function TU(t){return{stdout:{write:()=>{}},stderr:{write:()=>{}},dal:t}}var vv,kv=w(()=>{"use strict";ht();qa();Ja();li();at();tl();vv=10});function di(){let t=process.env.LMCTL_DAEMON_INTERVAL_MS;if(t===void 0||t.trim().length===0)return 5e3;let e=Number(t);return Number.isFinite(e)&&e>0?e:5e3}function bU(t=process.env){let e=t.LMCTL_DAEMON_FEATURES;if(e===void 0)return new Set(["mailbox-relay"]);if(e.trim()==="")return new Set;let r=new Set;for(let n of e.split(",")){let s=n.trim();if(s!==""){if(s==="all")return new Set(Iv);vU.has(s)&&r.add(s)}}return r}function Nv(t){let e=t.intervalMs??di(),r=t.runOnceFn??sn,n=new Set(t.features??bU()),s={running:t.autoStart!==!1,in_flight:!1,interval_ms:e,enabled_features:[...n].sort(),cycles:0,jobs_processed:0,last_jobs_processed:0,last_started_at:null,last_finished_at:null,last_error:null,last_session_sizes_recorded:0,last_session_size_failures:0,last_intake_scanned:0,last_intake_new_jobs:0,last_intake_failures:0,last_session_hung_detected:0,last_session_monitor_checked_at:null,last_session_monitor_error:null,last_mailbox_relay_scanned:0,last_mailbox_relay_delivered:0,last_mailbox_relay_errors:0},i=null,o=null,a=null,l=null,d=null;n.has("rollup-updater")&&t.startRollupUpdaterFn!==!1&&(d=(t.startRollupUpdaterFn??HT)(t.dal));let c=f=>{s.running&&(i=setTimeout(()=>{m.runCycle().finally(()=>c(e))},f))},u=f=>{s.running&&(o=setTimeout(()=>{l===null&&(l=Av(t.dal,n,t.monitorSessionActivityFn??Lc,e,s).finally(()=>{l=null})),l.finally(()=>u(Oc(t.dal,e)))},f))},m={state:s,runCycle:async()=>(a!==null||(a=SU(t.dal,r,t.collectSessionSizesFn??fg,t.scanIntakeFn??Zo,t.monitorSessionActivityFn??Lc,t.mailboxRelayFn??Sv,t.worker_id??"daemon",e,n,s).finally(()=>{a=null})),a),stop:async()=>{s.running=!1,i!==null&&clearTimeout(i),o!==null&&clearTimeout(o),d?.stop(),a!==null&&await a.catch(()=>{}),l!==null&&await l.catch(()=>{})}};if(s.running){let f=t.firstDelayMs??5e3;c(f),n.has("session-monitor")&&u(f)}return m}async function SU(t,e,r,n,s,i,o,a,l,d){d.in_flight=!0,d.last_started_at=new Date().toISOString(),d.last_error=null;let c=[],u=0,m=0,f=[],p=null,h=kU();try{if(l.has("durable-memory-policies")&&ww({dal:t}),l.has("drift-detectors")&&GT({dal:t}),l.has("intake")&&(f=await n(t)),l.has("job-worker"))for(;;){let _=await e({dal:t,worker_id:o,lease_ms:6e5});if(_===null)break;c.push(_)}if(l.has("mailbox-relay")&&(h=await i({dal:t})),l.has("session-size")){let _=await r(t);u=_.recorded,m=_.failed}l.has("session-monitor")&&(p=await Av(t,l,s,a,d))}catch(_){d.last_error=_ instanceof Error?_.message:String(_);try{t.raiseAttention({kind:"daemon_worker_failed",severity:"error",payload:JSON.stringify({error:d.last_error})})}catch{}}finally{d.in_flight=!1,d.cycles+=1,d.last_jobs_processed=c.length,d.last_session_sizes_recorded=u,d.last_session_size_failures=m,d.last_intake_scanned=f.reduce((_,g)=>_+g.scanned,0),d.last_intake_new_jobs=f.reduce((_,g)=>_+g.new_jobs,0),d.last_intake_failures=f.filter(_=>_.error!==void 0).length,d.last_session_hung_detected=p?.hung_detected??0,d.last_mailbox_relay_scanned=h.scanned,d.last_mailbox_relay_delivered=h.delivered,d.last_mailbox_relay_errors=h.errors,d.jobs_processed+=c.length,d.last_finished_at=new Date().toISOString()}return{jobs_processed:c.length,outcomes:c,session_sizes_recorded:u,session_size_failures:m,intake:f,session_monitor:p,mailbox_relay:h}}function kU(){return{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0}}async function Av(t,e,r,n,s){if(!e.has("session-monitor"))return null;let i=Oc(t,n),o=Date.now();if(s.last_session_monitor_checked_at!==null){let a=Date.parse(s.last_session_monitor_checked_at);if(Number.isFinite(a)&&o-a<i)return null}s.last_session_monitor_checked_at=new Date(o).toISOString(),s.last_session_monitor_error=null;try{return await r({dal:t,nowMs:o})}catch(a){s.last_session_monitor_error=a instanceof Error?a.message:String(a);try{t.raiseAttention({kind:"daemon_session_monitor_failed",severity:"error",payload:JSON.stringify({error:s.last_session_monitor_error})})}catch{}return null}}var Iv,vU,hm=w(()=>{"use strict";ru();wa();Cu();ko();XT();KT();Cc();kv();Iv=["durable-memory-policies","drift-detectors","intake","job-worker","mailbox-relay","session-size","session-monitor","rollup-updater"],vU=new Set(Iv)});function xv(t){let e=t.listMembersInState("in_chat");for(let r of e)t.setMemberState(r.id,"attention_needed","daemon_restarted_mid_chat");return e.length}var Rv=w(()=>{"use strict"});import{mkdirSync as IU,readFileSync as NU,readdirSync as AU,statSync as xU,writeFileSync as RU}from"node:fs";import{dirname as LU,join as Ov,sep as Lv}from"node:path";function rl(t){return{s3:{async send(n){let s=n;switch(s._localfsTag){case Cv:return OU(t,s.input);case $v:return CU(t,s.input);case Mv:return $U(t,s.input);default:throw new Error("createLocalFsS3Client: unknown command")}}},commands:{ListObjectsV2Command:Em,GetObjectCommand:ym,PutObjectCommand:gm}}}function OU(t,e){let r=Dv(t,e.Key);return IU(LU(r),{recursive:!0}),RU(r,e.Body),{}}function CU(t,e){let r=Dv(t,e.Key),n;try{n=NU(r)}catch(i){throw i.code==="ENOENT"?Object.assign(new Error("NoSuchKey"),{name:"NoSuchKey"}):i}let s=n.toString("utf-8");return{Body:{transformToString:async()=>s}}}function $U(t,e){let r=e.Prefix??"";jv(r);let s=MU(t).sort((c,u)=>c.key<u.key?-1:c.key>u.key?1:0).filter(c=>c.key.startsWith(r)),i=e.ContinuationToken;i!==void 0&&i!==""&&(s=s.filter(c=>c.key>i));let o=typeof e.MaxKeys=="number"&&Number.isFinite(e.MaxKeys)&&e.MaxKeys>0?Math.floor(e.MaxKeys):void 0,a=s,l=!1;o!==void 0&&s.length>o&&(a=s.slice(0,o),l=!0);let d={Contents:a.map(c=>({Key:c.key,LastModified:c.lastModified})),IsTruncated:l};return l&&(d.NextContinuationToken=a[a.length-1].key),d}function Dv(t,e){return jv(e),Ov(t,e)}function jv(t){if(t.split("/").includes(".."))throw new Error(`localfs-s3-client: refusing key/prefix with '..': ${t}`)}function MU(t){let e=[],r=(n,s)=>{let i;try{i=AU(n,{withFileTypes:!0})}catch(o){if(o.code==="ENOENT")return;throw o}for(let o of i){let a=s===""?o.name:`${s}/${o.name}`,l=Ov(n,o.name);if(o.isDirectory())r(l,a);else if(o.isFile()){let d=Lv==="/"?a:a.split(Lv).join("/");e.push({key:d,lastModified:xU(l).mtime})}}};return r(t,""),e}var Cv,$v,Mv,gm,ym,Em,wm=w(()=>{"use strict";Cv="localfs-put",$v="localfs-get",Mv="localfs-list",gm=class{input;_localfsTag=Cv;constructor(e){this.input=e}},ym=class{input;_localfsTag=$v;constructor(e){this.input=e}},Em=class{input;_localfsTag=Mv;constructor(e){this.input=e}}});function Pv(){return{put:0,get:0,list:0}}function Tm(t,e=DU){return t.put*e.putUsd+t.get*e.getUsd+t.list*e.listUsd}function vm(t){let e=new Date(t),r=e.getUTCFullYear(),n=String(e.getUTCMonth()+1).padStart(2,"0");return`${r}-${n}`}var DU,nl,bm=w(()=>{"use strict";DU={putUsd:5e-6,getUsd:40000000000000003e-23,listUsd:5e-6};nl=class{counts=Pv();record(e,r=1){this.counts[e]+=r}peek(){return{...this.counts}}drain(){let e={...this.counts};return this.counts=Pv(),e}estimateCostUsd(e){return Tm(this.counts,e)}}});function Fv(t){let e=t.now??Date.now,r=t.timers??jU,n=null,s=null;async function i(){let l=e(),d=vm(l),c=t.meter.drain();(c.put>0||c.get>0||c.list>0)&&t.store.addUsage({user_id:t.userId,device_id:t.deviceId,period:d,put:c.put,get:c.get,list:c.list,updated_at:new Date(l).toISOString()});let u=t.store.loadUsage(t.userId,t.deviceId,d),m=u?{put:u.put_count,get:u.get_count,list:u.list_count}:{put:0,get:0,list:0};if(t.publishOwnRollup!==void 0)try{await t.publishOwnRollup(d,m)}catch(h){t.log?.(`[usage] publish rollup failed: ${h instanceof Error?h.message:String(h)}`)}let f=m;if(t.readUserTotal!==void 0)try{f=await t.readUserTotal(d)}catch(h){t.log?.(`[usage] read user total failed: ${h instanceof Error?h.message:String(h)}`),f=m}let p=Tm(f);if(n!==d&&p>=t.ceilingUsd){n=d,t.log?.(`[usage] quota exceeded period=${d} cost=$${p.toFixed(4)} >= ceiling $${t.ceilingUsd}`);try{t.onQuotaExceeded({period:d,costUsd:p,ceilingUsd:t.ceilingUsd})}catch(h){t.log?.(`[usage] onQuotaExceeded threw: ${h instanceof Error?h.message:String(h)}`)}}}function o(){return s=(s??Promise.resolve()).then(()=>i()).catch(()=>{}),s}let a=r.setInterval(()=>{o()},t.intervalMs);return{stop(){r.clearInterval(a)},flushNow(){return o()},isOverQuota(){return n!==null&&n===vm(e())}}}var jU,Uv=w(()=>{"use strict";bm();jU={setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)}});var Sm=w(()=>{"use strict";ka();Na();Na()});function PU(t){if(typeof t!="object"||t===null||Array.isArray(t))return null;let e=t;if(typeof e.message_id!="string"||e.message_id==="")return null;if(typeof e.reply_to=="string"&&e.reply_to!==""){let s=e.response;if(typeof s!="object"||s===null)return null;let i=s;return typeof i.status!="number"?null:{message_id:e.message_id,reply_to:e.reply_to,response:i}}let r=e.request;if(typeof r!="object"||r===null)return null;let n=r;return typeof n.method!="string"||n.method===""||typeof n.path!="string"||n.path===""?null:{message_id:e.message_id,request:n}}function FU(t){return t.reply_to!==void 0&&t.response!==void 0}function UU(t){if(typeof t!="object"||t===null)return;let e=t.conversation_id;return typeof e=="string"?e:void 0}function Wv(t){let e=t.reason;if(e!==void 0)return e;try{return new DOMException("Aborted","AbortError")}catch{let r=new Error("Aborted");return r.name="AbortError",r}}var sl,ci,qv=w(()=>{"use strict";Sm();sl=class extends Error{name="MailboxFetchStoppedError";code="mailbox_fetch_stopped";constructor(e="MailboxFetchClient stopped before a response arrived"){super(e)}},ci=class{client;log;now;random;pending=new Map;requestHandler=null;stopped=!1;constructor(e){this.client=e.client,this.log=e.log??(()=>{}),this.now=e.now??Date.now,this.random=e.random??Math.random}onRequest(e){if(this.requestHandler!==null)throw new Error("MailboxFetchClient: onRequest handler already registered");this.requestHandler=e}async fetch(e,r){if(this.stopped)throw new sl("MailboxFetchClient.fetch after stop()");if(typeof e.path!="string"||e.path==="")throw new Error("MailboxFetchClient.fetch: request.path is required");let n=e.method;if(typeof n!="string"||n==="")throw new Error("MailboxFetchClient.fetch: request.method is required");let s=dr(this.now(),this.random);if(this.pending.has(s))throw new Error(`MailboxFetchClient.fetch: duplicate message_id=${s}`);let i=r?.conversationId??s,o={message_id:s,request:e};return new Promise((a,l)=>{let d=r?.abortSignal,c;if(d!==void 0){if(d.aborted){l(Wv(d));return}c=()=>{this.pending.has(s)&&(this.pending.delete(s),l(Wv(d)))},d.addEventListener("abort",c,{once:!0})}this.pending.set(s,{resolve:a,reject:l,...c!==void 0?{abortListener:c}:{},...d!==void 0?{abortSignal:d}:{}}),this.client.putMessage({conversation_id:i,payload:o}).catch(u=>{let m=this.pending.get(s);m!==void 0&&(this.pending.delete(s),m.abortListener!==void 0&&m.abortSignal!==void 0&&m.abortSignal.removeEventListener("abort",m.abortListener),m.reject(u))})})}async stop(){if(this.stopped)return;this.stopped=!0;let e=Array.from(this.pending.values());this.pending.clear();let r=new sl;for(let n of e){n.abortListener!==void 0&&n.abortSignal!==void 0&&n.abortSignal.removeEventListener("abort",n.abortListener);try{n.reject(r)}catch{}}}async handleIncoming(e,r){let n=PU(e);if(n===null){this.log("MailboxFetchClient: dropping non-envelope inbound payload");return}if(FU(n)){let l=this.pending.get(n.reply_to);if(l===void 0){this.log(`MailboxFetchClient: dropping response for unknown reply_to=${n.reply_to}`);return}this.pending.delete(n.reply_to),l.abortListener!==void 0&&l.abortSignal!==void 0&&l.abortSignal.removeEventListener("abort",l.abortListener),l.resolve(n.response);return}if(this.requestHandler===null){this.log(`MailboxFetchClient: no handler registered; dropping request message_id=${n.message_id}`);return}let s=r?.conversation_id??UU(e)??n.message_id,i;try{i=await this.requestHandler(n.request)}catch(l){let d=l instanceof Error?l.message:String(l),c=typeof l.code=="string"?l.code:"INTERNAL_ERROR";i={status:500,headers:{"content-type":"application/json"},body:{error:c,message:d}}}let a={message_id:dr(this.now(),this.random),reply_to:n.message_id,response:i};try{await this.client.putMessage({conversation_id:s,payload:a})}catch(l){this.log(`MailboxFetchClient: response PUT failed for reply_to=${n.message_id}: ${l instanceof Error?l.message:String(l)}`)}}}});function km(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;return!(e.kind!=="terminal"||typeof e.session_id!="string"||e.session_id===""||e.direction!=="agent_to_user"&&e.direction!=="user_to_agent"||typeof e.data!="string"||typeof e.ts!="number")}var Bv=w(()=>{"use strict"});function Im(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;if(e.kind!=="provider"||typeof e.session_id!="string"||e.session_id===""||e.direction!=="agent_to_user"&&e.direction!=="user_to_agent"||typeof e.ts!="number")return!1;if(e.direction==="agent_to_user"){if(!Array.isArray(e.events))return!1;for(let r of e.events)if(typeof r!="object"||r===null||Array.isArray(r)||typeof r.event_type!="string")return!1}else if(typeof e.user_input!="string")return!1;return!0}var Hv=w(()=>{"use strict"});function Am(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let e=t;if(e.kind!=="daemon_event"||typeof e.event!="string"||e.event===""||typeof e.ts!="number")return!1;if(e.event==="workflows"){if(!Array.isArray(e.workflows))return!1;for(let r of e.workflows){if(typeof r!="object"||r===null||Array.isArray(r))return!1;let n=r;if(typeof n.teamfile_path!="string"||n.teamfile_path===""||n.name!==null&&typeof n.name!="string"||typeof n.registered_at!="string"||n.registered_at===""||n.last_seeded_at!==null&&typeof n.last_seeded_at!="string")return!1}}else if(e.event==="chat_log"){if(typeof e.entry!="object"||e.entry===null||Array.isArray(e.entry))return!1;let r=e.entry;if(typeof r.id!="number"||typeof r.root_teamfile!="string"||r.root_teamfile===""||r.sender_teamfile!==null&&(typeof r.sender_teamfile!="string"||r.sender_teamfile==="")||r.sender_alias!==null&&(typeof r.sender_alias!="string"||r.sender_alias==="")||typeof r.receiver_teamfile!="string"||r.receiver_teamfile===""||typeof r.receiver_alias!="string"||r.receiver_alias===""||typeof r.message!="string"||r.response!==null&&typeof r.response!="string"||typeof r.status!="string"||r.status===""||typeof r.created_at!="string"||r.created_at==="")return!1}return!0}var Nm,Xv=w(()=>{"use strict";Nm="daemon:events"});function Gv(t){return{kind:"prompt",prompt_id:t.prompt_id??dr(t.now?.()??Date.now(),t.random??Math.random),root_teamfile:t.root_teamfile,text:t.text}}function xm(t){if(t===null||typeof t!="object")return!1;let e=t;return e.kind==="prompt"&&typeof e.prompt_id=="string"&&e.prompt_id.length>0&&typeof e.root_teamfile=="string"&&e.root_teamfile.length>0&&typeof e.text=="string"}var Jv,Rm=w(()=>{"use strict";Sm();Jv="prompt:root"});function ui(t){let e=t.split(".");if(e.length<2||e[1]===void 0||e[1]==="")return null;try{let r=JSON.parse(Vv(e[1]));return typeof r.sub=="string"&&r.sub!==""?r.sub:null}catch{return null}}function WU(t){let e=t.split(".");if(e.length<2||e[1]===void 0||e[1]==="")return null;try{let r=JSON.parse(Vv(e[1]));return typeof r.exp=="number"&&Number.isFinite(r.exp)?r.exp:null}catch{return null}}function Kv(t,e=60){if(typeof t!="string"||t==="")return!0;let r=WU(t);return r===null?!0:Date.now()/1e3>=r-e}function Vv(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e.padEnd(Math.ceil(e.length/4)*4,"="),n=globalThis.Buffer;return n!==void 0?n.from(r,"base64").toString("utf8"):atob(r)}var Lm=w(()=>{"use strict"});async function il(t){let e=t.fetchImpl??fetch,r=`https://cognito-idp.${t.region}.amazonaws.com/`,n=await e(r,{method:"POST",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":qU},body:JSON.stringify({AuthFlow:"REFRESH_TOKEN_AUTH",ClientId:t.clientId,AuthParameters:{REFRESH_TOKEN:t.refreshToken}})}),s=await n.text();if(!n.ok){let l=s;try{let d=JSON.parse(s);l=d.message??d.__type??s}catch{}throw new Error(`cognito_refresh_failed: ${n.status} ${l}`)}let o=JSON.parse(s).AuthenticationResult,a=o?.IdToken;if(typeof a!="string"||a==="")throw new Error("cognito_refresh_no_id_token: InitiateAuth returned no IdToken");return{idToken:a,...typeof o?.AccessToken=="string"&&o.AccessToken!==""?{accessToken:o.AccessToken}:{},...typeof o?.ExpiresIn=="number"&&Number.isFinite(o.ExpiresIn)?{expiresAt:Date.now()+o.ExpiresIn*1e3}:{}}}var qU,Om=w(()=>{"use strict";qU="AWSCognitoIdentityProviderService.InitiateAuth"});import{chmodSync as Yv,mkdirSync as zv,readFileSync as Zv,writeFileSync as Qv}from"node:fs";import{homedir as eb}from"node:os";import{dirname as tb,join as rb}from"node:path";function mi(){return process.env.LMCTL_DEVICE_AUTH_PATH??rb(eb(),".lmctl","device-auth.json")}function nb(){return process.env.LMCTL_TOKEN_PATH??rb(eb(),".lmctl","cli-tokens.json")}function Cm(t=mi()){try{let e=JSON.parse(Zv(t,"utf8"));return typeof e.userId!="string"||e.userId===""||typeof e.refreshToken!="string"||e.refreshToken===""?null:{userId:e.userId,refreshToken:e.refreshToken}}catch{return null}}function sb(t,e=mi()){zv(tb(e),{recursive:!0,mode:448}),Qv(e,JSON.stringify(t,null,2));try{Yv(e,384)}catch{}}function $m(t,e=nb()){let r={};try{r=JSON.parse(Zv(e,"utf8"))}catch{}let n={...r.cognito??{}};n.idToken=t.idToken,t.accessToken!==void 0&&(n.accessToken=t.accessToken),t.refreshToken!==void 0&&(n.refreshToken=t.refreshToken),t.expiresAt!==void 0&&(n.expiresAt=t.expiresAt);let s={...r,cognito:n};zv(tb(e),{recursive:!0,mode:448}),Qv(e,JSON.stringify(s,null,2));try{Yv(e,384)}catch{}}async function ib(t){let e=t.deviceAuthPath??mi(),r=Cm(e);if(r===null)throw new Error("device_auth_not_found: no ~/.lmctl/device-auth.json; run `lmctl device login` first");let n=await il({region:t.region,clientId:t.clientId,refreshToken:r.refreshToken,...t.fetchImpl!==void 0?{fetchImpl:t.fetchImpl}:{}});return $m({idToken:n.idToken,...n.accessToken!==void 0?{accessToken:n.accessToken}:{},refreshToken:r.refreshToken,...n.expiresAt!==void 0?{expiresAt:n.expiresAt}:{}},t.cliTokensPath??nb()),{idToken:n.idToken,userId:r.userId}}var Mm=w(()=>{"use strict";Om()});import{existsSync as BU,realpathSync as HU}from"node:fs";import{dirname as XU}from"node:path";function Dm(t){JU(t).catch(e=>{t.log?.(`[mailbox] prompt trigger failed: ${e instanceof Error?e.message:String(e)}`)})}async function JU(t){let e=t.payload.root_teamfile;try{e=HU(t.payload.root_teamfile)}catch(i){let o=`prompt root missing/unreadable: ${t.payload.root_teamfile}: ${i instanceof Error?i.message:String(i)}`;return ss({rootTeamfile:t.payload.root_teamfile,receiverTeamfile:t.payload.root_teamfile,receiverAlias:"Lead",message:t.payload.text,promptId:t.payload.prompt_id,detail:o,reason:"root_unavailable"}),t.log?.(`[mailbox] ${o}`),{status:"error",response:null,error_detail:o}}if(t.store.getRootTeam(e)===null){let i=`prompt root is not registered: ${e}`;return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:"Lead",message:t.payload.text,promptId:t.payload.prompt_id,detail:i,reason:"root_unregistered"}),t.log?.(`[mailbox] ${i}`),{status:"error",response:null,error_detail:i}}let r=KU(e);if("error"in r)return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:"Lead",message:t.payload.text,promptId:t.payload.prompt_id,detail:r.error,reason:"root_invalid"}),t.log?.(`[mailbox] ${r.error}`),{status:"error",response:null,error_detail:r.error};let n=Lt(t.store,{receiver_teamfile:e,receiver_alias:r.alias,sender_teamfile:`prompt:${t.payload.prompt_id}`,sender_alias:"operator",ttlMs:ZU(t.env??process.env)});if(!n.acquired){let i=zU(r.alias,n.current);return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,promptId:t.payload.prompt_id,detail:i,reason:"unavailable"}),t.log?.(`[mailbox] prompt rejected: ${i}`),{status:"error",response:null,error_detail:i}}let s=Er(i=>t.store.heartbeatAgentInflight(n.lease,n.leaseId,i),{intervalMs:yn(t.env??process.env)});try{let o=await(t.chat??jt)({provider:r.provider,sessionId:r.sessionid,cwd:r.sessiondir,prompt:t.payload.text,env:t.env??process.env,alias:r.alias,permissionMode:"yolo",...t.timeoutMs!==void 0?{timeoutMs:t.timeoutMs}:{}}),a=o.status==="stalled",l=!a&&o.text.trim()==="",d=a?`provider stalled${o.stalledAfterMs!==void 0?` after ${o.stalledAfterMs}ms`:""}`:l?"provider returned empty response":null,c=a||l?"error":"ok";return c==="ok"?await VU(t.store,{rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,response:o.text,status:c,error_detail:null,log:t.log}):ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,promptId:t.payload.prompt_id,detail:d??"provider failed",reason:a?"stalled":"empty_response"}),{status:c,response:c==="error"?null:o.text,error_detail:d}}catch(i){let o=i instanceof Error?i.message:String(i);return ss({rootTeamfile:e,receiverTeamfile:e,receiverAlias:r.alias,message:t.payload.text,promptId:t.payload.prompt_id,detail:o,reason:"provider_error"}),t.log?.(`[mailbox] prompt provider error: ${o}`),{status:"error",response:null,error_detail:o}}finally{clearInterval(s);try{t.store.releaseAgentInflight(n.lease,n.leaseId)}catch(i){t.log?.(`[mailbox] failed to release prompt in-flight slot: ${i instanceof Error?i.message:String(i)}`)}}}function ss(t){M({event:"prompt_trigger_error",reason:t.reason,prompt_id:t.promptId,root_teamfile:t.rootTeamfile,sender_teamfile:t.rootTeamfile,sender_alias:"operator",receiver_teamfile:t.receiverTeamfile,receiver_alias:t.receiverAlias,error_detail:t.detail,message_preview:GU(t.message)})}function GU(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function KU(t){if(!BU(t))return{error:`prompt root missing/unreadable: ${t}`};let e=ot(t);if(e.parseErrors.length>0)return{error:`prompt root parse error: ${e.parseErrors.join("; ")}`};let r=Ht(e);return r===void 0?{error:`prompt root has no Lead: ${t}`}:r.session===void 0||r.session.trim()===""?{error:`prompt root Lead is unseeded: ${t}`}:{alias:r.alias,provider:r.provider,sessionid:r.session,sessiondir:r.sessiondir??XU(t)}}async function VU(t,e){let r=lb(e.message),n=e.response===null?null:lb(e.response);try{t.insertTeamChatLog({root_teamfile:e.rootTeamfile,sender_teamfile:e.rootTeamfile,sender_alias:"operator",receiver_teamfile:e.receiverTeamfile,receiver_alias:e.receiverAlias,message:r.text,response:n?.text??null,origin:"unknown",status:e.status,error_detail:e.error_detail,truncated:r.truncated||n?.truncated?1:0,created_at:new Date().toISOString()})}catch(s){e.log?.(`[mailbox] warning: failed to record prompt chat log: ${s instanceof Error?s.message:String(s)}`)}}function lb(t){return t.length<=ob?{text:t,truncated:!1}:{text:t.slice(0,ob),truncated:!0}}function YU(t,e){return`${t} is servicing ${e.sender_alias} (${e.sender_teamfile}) since ${e.started_at}`}function zU(t,e){return e.sender_teamfile.startsWith("prompt:")?`${t} is busy servicing another prompt since ${e.started_at}`:YU(t,e)}function ZU(t=process.env){let e=t.LMCTL_INFLIGHT_TTL_MS;if(e===void 0||e.trim()==="")return ab;let r=Number(e);return!Number.isFinite(r)||r<=0?ab:r}var ob,ab,db=w(()=>{"use strict";Pt();ur();pe();ht();ob=256*1024,ab=30*60*1e3});import{chmodSync as _b,existsSync as QU,mkdirSync as hb,readFileSync as dl,writeFileSync as gb}from"node:fs";import{dirname as jm,resolve as ol,join as yb}from"node:path";import{fileURLToPath as eW}from"node:url";import{homedir as Eb}from"node:os";import{CognitoIdentityClient as tW,GetIdCommand as rW}from"@aws-sdk/client-cognito-identity";import{fromCognitoIdentity as cb}from"@aws-sdk/credential-provider-cognito-identity";import{GetObjectCommand as nW,ListObjectsV2Command as sW,PutObjectCommand as iW,S3Client as ub}from"@aws-sdk/client-s3";function pi(t={}){let e=t.env??process.env,r=t.tfstatePath!==void 0?[t.tfstatePath]:cW(t.selfUrl),n={},s;for(let S of r)if(QU(S)){n=dW(S),s=S;break}let i=(...S)=>{for(let x of S)if(typeof x=="string"&&x!=="")return x},o=i(e.LMCTL_NEXT_IDENTITY_POOL_ID,n.LMCTL_NEXT_IDENTITY_POOL_ID)??oW,a=i(e.LMCTL_NEXT_COGNITO_USER_POOL_ID,n.LMCTL_NEXT_COGNITO_USER_POOL_ID)??aW,l=i(e.LMCTL_NEXT_MAILBOX_BUCKET,e.LMCTL_NEXT_POLICY_BUCKET,n.LMCTL_NEXT_MAILBOX_BUCKET,n.LMCTL_NEXT_POLICY_BUCKET)??lW,d=i(e.AWS_REGION,e.AWS_DEFAULT_REGION)??"us-east-1",c=i(e.LMCTL_NEXT_COGNITO_CLIENT_ID,n.LMCTL_NEXT_COGNITO_CLIENT_ID)??cl,u=[];o===void 0&&u.push("LMCTL_NEXT_IDENTITY_POOL_ID"),a===void 0&&u.push("LMCTL_NEXT_COGNITO_USER_POOL_ID"),l===void 0&&u.push("LMCTL_NEXT_MAILBOX_BUCKET");let m={missing:u,tfstateCandidatesChecked:r,...s!==void 0?{tfstatePathUsed:s}:{}};if(u.length>0)return m;let f=e.LMCTL_MAILBOX_POLL_MS,p=f!==void 0&&f.length>0?Number(f):void 0,h=ll(e.LMCTL_MAILBOX_READ_INTERVAL_SECONDS),_=ll(e.LMCTL_MAILBOX_HEARTBEAT_IDLE_SECONDS),g=ll(e.LMCTL_MAILBOX_BACKOFF_READ_INTERVAL_SECONDS),y=ll(e.LMCTL_MAILBOX_CHATLOG_POLL_SECONDS),E=i(e.LMCTL_MAILBOX_KEY),v=i(e.LMCTL_TOKEN_PATH);return m.config={identityPoolId:o,cognitoUserPoolId:a,cognitoClientId:c,region:d,mailboxBucket:l,...typeof p=="number"&&Number.isFinite(p)&&p>=100?{pollIntervalMs:p}:{},...h!==void 0?{readIntervalMs:h}:{},..._!==void 0?{heartbeatIdleMs:_}:{},...g!==void 0?{backoffReadIntervalMs:g}:{},...y!==void 0?{chatLogPollIntervalMs:y}:{},...E!==void 0?{mailboxKey:E}:{},...v!==void 0?{tokenPath:v}:{}},m}function dW(t){try{let e=dl(t,"utf8"),n=JSON.parse(e).outputs??{},s={};for(let[i,o]of Object.entries(n))o!==null&&typeof o=="object"&&typeof o.value=="string"&&(s[i]=o.value);return s}catch{return{}}}function cW(t){let e=jm(eW(t??import.meta.url));return[ol(e,"..","..","..","..","infra","terraform","terraform.tfstate"),ol(e,"..","..","..","..","..","infra","terraform","terraform.tfstate"),ol(e,"..","..","..","infra","terraform","terraform.tfstate"),ol(e,"..","..","infra","terraform","terraform.tfstate")]}function ll(t){if(t===void 0||t==="")return;let e=Number(t);if(!(!Number.isFinite(e)||e<=0))return e*1e3}function uW(t){let e=mW(t.intervalMs)??wb,r=Math.max(1,Math.trunc(t.limit??500)),n=t.now??Date.now,s=t.cursorKey!==void 0&&t.store.loadTeamChatLogCursor!==void 0&&t.store.saveTeamChatLogCursor!==void 0?{key:t.cursorKey,load:t.store.loadTeamChatLogCursor.bind(t.store),save:t.store.saveTeamChatLogCursor.bind(t.store)}:null,i,o=!1,a=!1,l=()=>{try{if(s!==null){let u=s.load(s.key);if(u!==null)return i=u.last_pushed_id,!0}return i=t.store.getMaxTeamChatLogId(),s!==null&&s.save({cursor_key:s.key,last_pushed_id:i,updated_at:new Date(n()).toISOString()}),!0}catch(u){return t.log?.(`[mailbox] daemon_event chat_log seed failed: ${u instanceof Error?u.message:String(u)}`),!1}};l();let d=async()=>{if(!(a||o)){o=!0;try{if(i===void 0&&!l())return;let u=t.store.listTeamChatLogSinceId(i,r);for(let m of u){let f={kind:"daemon_event",event:"chat_log",ts:n(),entry:{id:m.id,root_teamfile:m.root_teamfile,sender_teamfile:m.sender_teamfile,sender_alias:m.sender_alias,receiver_teamfile:m.receiver_teamfile,receiver_alias:m.receiver_alias,message:m.message,response:m.response,status:m.status,created_at:m.created_at}};await t.publishDaemonEvent(f),s!==null&&s.save({cursor_key:s.key,last_pushed_id:m.id,updated_at:new Date(n()).toISOString()}),i=Math.max(i,m.id)}}catch(u){t.log?.(`[mailbox] daemon_event chat_log tail failed: ${u instanceof Error?u.message:String(u)}`)}finally{o=!1}}},c=setInterval(()=>{d()},e);return typeof c.unref=="function"&&c.unref(),{pollNow:d,stop(){a=!0,clearInterval(c)}}}function mW(t){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:void 0}async function Tb(t){let e=t.tokenPath??yb(Eb(),".lmctl","cli-tokens.json"),r=fb(t.tokenPath);if(Kv(r.cognito?.idToken)&&Cm()!==null)try{await ib({region:t.region,clientId:t.cognitoClientId??cl,cliTokensPath:e}),r=fb(t.tokenPath),t.log?.("[mx-mailbox] refreshed IdToken from device-auth refresh token")}catch(A){let Y=A instanceof Error?A.message:String(A);t.log?.(`[mx-mailbox] device-auth refresh failed: ${Y}`)}if(r.cognito===void 0)throw new Error("agent_mailbox_not_logged_in: ~/.lmctl/cli-tokens.json has no cognito tokens; run `webcli login` or `lmctl device login` first");let n=r.cognito.idToken;if(typeof n!="string"||n==="")throw new Error("agent_mailbox_no_id_token: cli-tokens.json's cognito.idToken is empty; run `webcli login` or `lmctl device login` first");let s=`cognito-idp.${t.region}.amazonaws.com/${t.cognitoUserPoolId}`,i=r.cognito.identityId,o=!1;i===void 0||i===""?i=await pb({tokenPath:e,region:t.region,identityPoolId:t.identityPoolId,idpProvider:s,idToken:n,log:t.log}):(o=!0,t.log?.(`[mx-mailbox] using cached identityId from cli-tokens (skipping GetId) for ${i}`));let a=cb({identityId:i,logins:{[s]:n},clientConfig:{region:t.region}}),l=new ub({region:t.region,credentials:a}),d={ListObjectsV2Command:sW,GetObjectCommand:nW,PutObjectCommand:iW},c=ui(n),u=c??i,m=t.deviceId,f=Vn({identityId:i,userId:c,deviceId:m,mailboxKey:t.mailboxKey}),p=t.cursorStore,h;if(p!==void 0){let A=p.loadMailboxCursor(u,f);if(A!==null)h=A.last_processed_seq??void 0,t.log?.(`[mx-mailbox] resumed seq cursor=${h??"(sentinel)"} for user_id=${u}`);else{let Y=!1,B=0;for(;!Y&&B<2;){B+=1;try{let k=ba(f,"web"),I=0,C;do{let W=await l.send(new d.ListObjectsV2Command({Bucket:t.mailboxBucket,Prefix:k,MaxKeys:1e3,...C!==void 0?{ContinuationToken:C}:{}}));for(let U of W.Contents??[]){let j=Sa(U.Key??"",f,"web");j!==void 0&&j>I&&(I=j)}C=W.IsTruncated===!0?W.NextContinuationToken:void 0}while(C!==void 0);h=I,t.log?.(`[mx-mailbox] cold start: seeded seq cursor=${I} for user_id=${u}`),Y=!0}catch(k){let I=k instanceof Error?k.message:String(k);if(o&&B===1&&_W(k)){t.log?.(`[mx-mailbox] cached identityId rejected by cognito (${I}); clearing + refreshing`),pW(e),o=!1,i=await pb({tokenPath:e,region:t.region,identityPoolId:t.identityPoolId,idpProvider:s,idToken:n,log:t.log}),a=cb({identityId:i,logins:{[s]:n},clientConfig:{region:t.region}}),l=new ub({region:t.region,credentials:a}),f=Vn({identityId:i,userId:c,deviceId:m,mailboxKey:t.mailboxKey});continue}t.log?.(`[mx-mailbox] cold start seq probe failed: ${I}`);break}}p.saveMailboxCursor({user_id:u,mailbox_key:f,last_processed_version_id:null,last_processed_seq:h??null,last_processed_at:new Date().toISOString()})}}let _=null,g=t.terminalSessionManager,y=t.persistentSessionManager,E=t.promptTriggerStore,v=new nl,S=new on({bucket:t.mailboxBucket,identityId:i,...c!==null?{userId:c}:{},...m!==void 0?{deviceId:m}:{},...t.mailboxKey!==void 0?{mailboxKey:t.mailboxKey}:{},s3:l,commands:d,selfRole:"agent",onS3Op:A=>v.record(A),onMessage:async A=>{if(g!==void 0&&km(A.payload)){g.onInbound(A.payload);return}if(y!==void 0&&Im(A.payload)){await y.onInbound(A.payload);return}if(!Am(A.payload)){if(E!==void 0&&xm(A.payload)){Dm({store:E,payload:A.payload,log:t.log});return}_!==null&&await _.handleIncoming(A.payload,A)}},...p!==void 0?{onCursorAdvance:A=>{p.saveMailboxCursor({user_id:u,mailbox_key:f,last_processed_version_id:null,last_processed_seq:A,last_processed_at:new Date().toISOString()})}}:{},...h!==void 0?{cursor:h}:{},...t.pollIntervalMs!==void 0?{pollIntervalMs:t.pollIntervalMs}:{},...t.readIntervalMs!==void 0?{readIntervalMs:t.readIntervalMs}:{},...t.heartbeatIdleMs!==void 0?{heartbeatIdleMs:t.heartbeatIdleMs}:{},...t.backoffReadIntervalMs!==void 0?{backoffReadIntervalMs:t.backoffReadIntervalMs}:{}});_=new ci({client:S,...t.log!==void 0?{log:t.log}:{}}),g!==void 0&&g.setPublish(async A=>S.putMessage({conversation_id:`terminal:${A.session_id}`,payload:A})),y!==void 0&&y.setPublish(async A=>S.putMessage({conversation_id:`provider:${A.session_id}`,payload:A}));let x=A=>S.putMessage({conversation_id:Nm,payload:A});S.start();let H=t.chatLogTailStore===void 0?void 0:uW({store:t.chatLogTailStore,publishDaemonEvent:x,cursorKey:f,intervalMs:t.chatLogPollIntervalMs??t.readIntervalMs??t.pollIntervalMs??wb,log:t.log});t.log?.(`[mx-mailbox] agent polling ${f} (bucket=${t.mailboxBucket})`);let F=t.deviceId??i,$=`${u}/usage/`,R;return R=t.usageStore===void 0?void 0:Fv({meter:v,store:t.usageStore,userId:u,deviceId:F,ceilingUsd:t.usageQuotaUsd??1/0,onQuotaExceeded:({period:A,costUsd:Y,ceilingUsd:B})=>{t.log?.(`[usage] month ${A} cost $${Y.toFixed(4)} >= ceiling $${B} \u2014 blocking mailbox`),S.stop().catch(()=>{}),R?.stop()},publishOwnRollup:async(A,Y)=>{await l.send(new d.PutObjectCommand({Bucket:t.mailboxBucket,Key:`${$}${F}-${A}.json`,Body:JSON.stringify({...Y,updated_at:new Date().toISOString()}),ContentType:"application/json"}))},readUserTotal:async A=>{let Y={put:0,get:0,list:0},B;do{let k=await l.send(new d.ListObjectsV2Command({Bucket:t.mailboxBucket,Prefix:$,MaxKeys:1e3,...B!==void 0?{ContinuationToken:B}:{}}));for(let I of k.Contents??[]){let C=I.Key??"";if(C.endsWith(`-${A}.json`))try{let W=await l.send(new d.GetObjectCommand({Bucket:t.mailboxBucket,Key:C}));if(W.Body===void 0)continue;let U=JSON.parse(await W.Body.transformToString("utf-8"));Y.put+=U.put??0,Y.get+=U.get??0,Y.list+=U.list??0}catch{}}B=k.IsTruncated===!0?k.NextContinuationToken:void 0}while(B!==void 0);return Y},intervalMs:t.usageFlushIntervalMs??36e5,...t.log!==void 0?{log:t.log}:{}}),{identityId:i,mailbox:S,fetchClient:_,publishDaemonEvent:x,async stop(){H?.stop(),R!==void 0&&(await R.flushNow().catch(()=>{}),R.stop()),await _.stop().catch(()=>{}),await S.stop().catch(()=>{})}}}async function vb(t){let e=t.s3!==void 0&&t.commands!==void 0?{s3:t.s3,commands:t.commands}:rl(t.rootDir),r=Vn({identityId:fi,userId:fi,deviceId:mb}),n=null,s=t.terminalSessionManager,i=t.persistentSessionManager,o=t.promptTriggerStore,a=new on({bucket:"local",identityId:fi,userId:fi,deviceId:mb,s3:e.s3,commands:e.commands,selfRole:"agent",onMessage:async d=>{if(s!==void 0&&km(d.payload)){s.onInbound(d.payload);return}if(i!==void 0&&Im(d.payload)){await i.onInbound(d.payload);return}if(!Am(d.payload)){if(o!==void 0&&xm(d.payload)){Dm({store:o,payload:d.payload,log:t.log});return}n!==null&&await n.handleIncoming(d.payload,d)}},pollIntervalMs:t.pollIntervalMs??al,readIntervalMs:t.readIntervalMs??al,heartbeatIdleMs:t.heartbeatIdleMs??al,backoffReadIntervalMs:t.backoffReadIntervalMs??al});n=new ci({client:a,...t.log!==void 0?{log:t.log}:{}}),s!==void 0&&s.setPublish(async d=>a.putMessage({conversation_id:`terminal:${d.session_id}`,payload:d})),i!==void 0&&i.setPublish(async d=>a.putMessage({conversation_id:`provider:${d.session_id}`,payload:d}));let l=d=>a.putMessage({conversation_id:Nm,payload:d});return a.start(),t.log?.(`[local-webui] agent polling ${r} (local-fs ${t.rootDir})`),{identityId:fi,mailbox:a,fetchClient:n,publishDaemonEvent:l,async stop(){await n.stop().catch(()=>{}),await a.stop().catch(()=>{})}}}function fb(t){let e=t??yb(Eb(),".lmctl","cli-tokens.json");try{let r=dl(e,"utf8");return JSON.parse(r)}catch{return{}}}function fW(t,e){if(e===void 0||e==="")return;let r={};try{let s=dl(t,"utf8");r=JSON.parse(s)}catch{}if(r.cognito===void 0)return;let n={...r,cognito:{...r.cognito,identityId:e}};hb(jm(t),{recursive:!0,mode:448}),gb(t,JSON.stringify(n,null,2));try{_b(t,384)}catch{}}function pW(t){let e={};try{let n=dl(t,"utf8");e=JSON.parse(n)}catch{return}if(e.cognito===void 0)return;let r={...e,cognito:{...e.cognito}};delete r.cognito.identityId,hb(jm(t),{recursive:!0,mode:448}),gb(t,JSON.stringify(r,null,2));try{_b(t,384)}catch{}}async function pb(t){t.log?.("[mx-mailbox] cli-tokens has no identityId; calling GetId");let r=await new tW({region:t.region}).send(new rW({IdentityPoolId:t.identityPoolId,Logins:{[t.idpProvider]:t.idToken}}));if(r.IdentityId===void 0||r.IdentityId==="")throw new Error("cognito_getid_no_identity_id");try{fW(t.tokenPath,r.IdentityId),t.log?.(`[mx-mailbox] persisted identityId=${r.IdentityId} to ${t.tokenPath}`)}catch(n){let s=n instanceof Error?n.message:String(n);t.log?.(`[mx-mailbox] WARNING: identityId persist failed (${s}); will redo GetId on next restart`)}return r.IdentityId}function _W(t){if(t===null||typeof t!="object")return!1;let e=t,r=[typeof e.name=="string"?e.name:void 0,typeof e.Code=="string"?e.Code:void 0,typeof e.__type=="string"?e.__type:void 0];for(let s of r)if(s!==void 0&&(s==="NotAuthorizedException"||s==="ResourceNotFoundException"||s==="InvalidIdentityPoolConfigurationException"||s==="ExpiredTokenException"))return!0;let n=typeof e.message=="string"?e.message:"";return!!(n.includes("NotAuthorizedException")||n.includes("Invalid identity pool configuration")||n.includes("Identity")&&n.includes("not found"))}var wb,al,cl,oW,aW,lW,fi,mb,Pm=w(()=>{"use strict";Aa();wm();bm();Uv();qv();Bv();Hv();Xv();Rm();ka();Lm();Mm();db();wb=3e3,al=1e3,cl="79u5jhkk46qofog661c9i0bdcs",oW="us-east-1:69636ff0-e008-4cbc-853d-180e5526a198",aW="us-east-1_4iUdFggDn",lW="lmctl-next-preview-mailbox-254332045686";fi="local",mb="local"});import{spawn as qm}from"node:child_process";import{createInterface as bb}from"node:readline";var Fm,Um,Wm,Sb,kb=w(()=>{"use strict";ro();pe();Ls();Fm=class{child;ctx;rl;nextRpcId=1;pending=new Map;threadId;nextLocalTurnId=1;closed=!1;setResumeThreadId(e){this.threadId=e}async start(e,r){this.ctx=r;let n=qm(e.command,e.args,{cwd:e.cwd??process.cwd(),env:e.env??process.env,stdio:["pipe","pipe","pipe"]});if(this.child=n,this.rl=bb({input:n.stdout}),this.rl.on("line",s=>{r.generation===r.currentGeneration()&&this.handleLine(s)}),n.stderr?.on("data",s=>{if(r.generation!==r.currentGeneration())return;let i=s instanceof Buffer?s.toString("utf8"):String(s);r.emit({event_type:"notification",payload:{source:"stderr",text:i}})}),await this.rpc("initialize",{clientInfo:{name:"lmctl-dt3",title:"lmctl DT-3",version:"0.1.0"},capabilities:{experimentalApi:!1}}),this.notify("initialized",{}),this.threadId!==void 0&&this.threadId!=="")try{await this.rpc("thread/resume",{threadId:this.threadId,approvalPolicy:"never",sandbox:"danger-full-access"}),r.emit({event_type:"thread_started",payload:{thread_id:this.threadId,resumed:!0}})}catch{let i=(await this.rpc("thread/start",{cwd:e.cwd??process.cwd(),approvalPolicy:"never",sandbox:"danger-full-access"})).result?.thread,o=typeof i?.id=="string"?i.id:void 0;this.threadId=o,r.emit({event_type:"thread_started",payload:{thread_id:o,resumed:!1}})}else{let i=(await this.rpc("thread/start",{cwd:e.cwd??process.cwd(),approvalPolicy:"never",sandbox:"danger-full-access"})).result?.thread,o=typeof i?.id=="string"?i.id:void 0;this.threadId=o,r.emit({event_type:"thread_started",payload:{thread_id:o,resumed:!1}})}return n}async sendTurn(e){if(this.closed)throw new Error("codex_session_closed");if(this.threadId===void 0||this.threadId==="")throw new Error("codex_no_thread_id");let r=`local-${this.nextLocalTurnId++}`;this.ctx?.turnMap.set(r,{startedAt:Date.now()});try{let s=(await this.rpc("turn/start",{threadId:this.threadId,input:[{type:"text",text:e}]})).result?.turn,i=typeof s?.id=="string"?s.id:void 0;if(i!==void 0){let o=this.ctx?.turnMap.get(r);this.ctx?.turnMap.delete(r),o!==void 0&&this.ctx?.turnMap.set(i,o)}}catch(n){throw this.ctx?.turnMap.delete(r),n}}async stop(){if(this.closed=!0,this.rl!==void 0&&(this.rl.close(),this.rl=void 0),this.child?.stdin!==null&&this.child?.stdin?.end!==void 0)try{this.child.stdin.end()}catch{}for(let e of this.pending.values())e.reject(new Error("codex_session_stopping"));this.pending.clear()}async rpc(e,r){if(this.child?.stdin===null||this.child===void 0)throw new Error("codex_child_unavailable");return new Promise((n,s)=>{let i=this.nextRpcId++;this.pending.set(i,{resolve:n,reject:s});let o=JSON.stringify({jsonrpc:"2.0",id:i,method:e,params:r});try{this.child.stdin.write(o+`
2403
2403
  `)}catch(a){this.pending.delete(i),s(a instanceof Error?a:new Error(String(a)))}})}notify(e,r){if(this.child?.stdin===null||this.child===void 0)return;let n=JSON.stringify({jsonrpc:"2.0",method:e,params:r});try{this.child.stdin.write(n+`
2404
2404
  `)}catch{}}handleLine(e){if(e.trim()==="")return;let r;try{r=JSON.parse(e)}catch{return}if(typeof r.id=="number"&&this.pending.has(r.id)){let o=this.pending.get(r.id);if(this.pending.delete(r.id),r.error!==void 0){let a=r.error,l=typeof a?.message=="string"&&a.message!==""?a.message:JSON.stringify(r.error);o.reject(new Error(`codex_rpc_error: ${l}`))}else o.resolve(r);return}let n=typeof r.method=="string"?r.method:void 0;if(n===void 0)return;let s=r.params??{},i=this.normalizeNotification(n,s);i!==void 0&&this.ctx?.emit(i)}normalizeNotification(e,r){if(e==="thread/started"){let n=r.thread;return typeof n?.id=="string"&&(this.threadId=n.id),{event_type:"thread_started",payload:{thread_id:this.threadId,raw:r}}}if(e==="turn/started")return{event_type:"turn_started",payload:{turn_id:r.turn?.id,thread_id:this.threadId}};if(e==="item/agentMessage/delta")return{event_type:"assistant_message_delta",payload:{text:typeof r.delta=="string"?r.delta:""}};if(e==="item/started"||e==="item/completed"){let n=r.item;return n?.type!==void 0&&n.type!=="agentMessage"&&n.type!=="userMessage"?{event_type:"tool_call",payload:{name:n.name??n.type,status:e==="item/started"?"started":"completed",item:n}}:{event_type:"notification",payload:{method:e,params:r}}}if(e==="turn/completed"){let n=r.turn;return typeof n?.id=="string"&&this.ctx?.turnMap.delete(n.id),{event_type:"turn_complete",payload:r}}if(e==="error"){let n=r.error;return{event_type:"error",payload:{message:typeof n?.message=="string"?n.message:JSON.stringify(r),raw:r}}}return{event_type:"notification",payload:{method:e,params:r}}}},Um=class{child;ctx;buffer="";sessionIdSeen;closed=!1;async start(e,r){this.ctx=r;let n=qm(e.command,e.args,{cwd:e.cwd??process.cwd(),env:e.env??process.env,stdio:["pipe","pipe","pipe"]});return this.child=n,n.stdout.on("data",s=>{if(r.generation!==r.currentGeneration())return;let i=s instanceof Buffer?s.toString("utf8"):String(s);this.buffer+=i;let o=this.buffer.split(`
2405
2405
  `);this.buffer=o.pop()??"";for(let a of o)this.handleLine(a)}),n.stderr?.on("data",s=>{if(r.generation!==r.currentGeneration())return;let i=s instanceof Buffer?s.toString("utf8"):String(s);r.emit({event_type:"notification",payload:{source:"stderr",text:i}})}),n}async sendTurn(e){if(this.closed)throw new Error("claude_session_closed");if(this.child===void 0||this.child.stdin===null)throw new Error("claude_child_unavailable");let r=`claude-${Date.now()}`;this.ctx?.turnMap.set(r,{startedAt:Date.now()});let n=JSON.stringify({type:"user",message:{role:"user",content:e}});try{this.child.stdin.write(n+`
2406
2406
  `)}catch(s){throw this.ctx?.turnMap.delete(r),s instanceof Error?s:new Error(String(s))}}async stop(){if(this.closed=!0,this.child?.stdin?.end!==void 0)try{this.child.stdin.end()}catch{}}handleLine(e){if(e.trim()==="")return;let r;try{r=JSON.parse(e)}catch{return}let n=typeof r.type=="string"?r.type:"";if(n==="system"&&r.subtype==="init"){let s=typeof r.session_id=="string"?r.session_id:void 0;s!==void 0&&s!==this.sessionIdSeen&&(this.sessionIdSeen=s,this.ctx?.emit({event_type:"thread_started",payload:{thread_id:s,raw:r}}));return}if(n==="assistant"){let i=r.message?.content;if(Array.isArray(i))for(let o of i)o.type==="text"&&typeof o.text=="string"&&o.text!==""&&this.ctx?.emit({event_type:"assistant_message_delta",payload:{text:o.text}});return}if(n==="result"){let s=typeof r.session_id=="string"?r.session_id:void 0;for(let i of Array.from(this.ctx?.turnMap.keys()??[]))this.ctx?.turnMap.delete(i);this.ctx?.emit({event_type:"turn_complete",payload:{result:r.result,session_id:s,raw:r}});return}this.ctx?.emit({event_type:"notification",payload:{method:n,params:r}})}},Wm=class{child;ctx;rl;nextRpcId=1;pending=new Map;sessionId;closed=!1;async start(e,r){this.ctx=r;let n=e.cwd??process.cwd();if(e.provider==="opencode")try{to(n)}catch(i){M({event:"opencode_config_install_failed",cwd:n,error_message:i instanceof Error?i.message:String(i)})}let s=qm(e.command,e.args,{cwd:n,env:e.env??process.env,stdio:["pipe","pipe","pipe"]});this.child=s,this.rl=bb({input:s.stdout}),this.rl.on("line",i=>{r.generation===r.currentGeneration()&&this.handleLine(i)}),s.stderr?.on("data",i=>{if(r.generation!==r.currentGeneration())return;let o=i instanceof Buffer?i.toString("utf8"):String(i);r.emit({event_type:"notification",payload:{source:"stderr",text:o}})});try{await this.rpc("initialize",{protocolVersion:1,clientInfo:{name:"lmctl-dt3",version:"0.1.0"},clientCapabilities:{}}),this.notify("notifications/initialized",{});let o=(await this.rpc("session/new",{cwd:e.cwd??process.cwd(),mcpServers:[]})).result;if(this.sessionId=typeof o?.sessionId=="string"?o.sessionId:void 0,e.provider==="kimi"){if(this.sessionId===void 0)throw new Error("Kimi ACP session/new response missing sessionId");try{await this.rpc("session/set_config_option",{sessionId:this.sessionId,configId:"mode",value:"auto"})}catch(a){let l=a instanceof Error?a.message:String(a);throw M({event:"acp_permission_mode_failed",provider:e.provider,config_id:"mode",value:"auto",error_message:l}),new Error(`Cannot set Kimi ACP permission mode to auto: ${l}`)}}return r.emit({event_type:"thread_started",payload:{thread_id:this.sessionId,raw:o}}),s}catch(i){try{await this.stop()}catch{}try{s.kill("SIGTERM")}catch{}throw i}}async sendTurn(e){if(this.closed)throw new Error("acp_session_closed");if(this.sessionId===void 0)throw new Error("acp_no_session_id");let r=`acp-${Date.now()}`;this.ctx?.turnMap.set(r,{startedAt:Date.now()});try{let s=(await this.rpc("session/prompt",{sessionId:this.sessionId,prompt:[{type:"text",text:e}]})).result;this.ctx?.emit({event_type:"turn_complete",payload:{stopReason:s?.stopReason,raw:s}})}finally{this.ctx?.turnMap.delete(r)}}async stop(){this.closed=!0,this.rl!==void 0&&(this.rl.close(),this.rl=void 0);for(let e of this.pending.values())e.reject(new Error("acp_session_stopping"));this.pending.clear(),this.child!==void 0&&await et(this.child)}async rpc(e,r){if(this.child?.stdin===null||this.child===void 0)throw new Error("acp_child_unavailable");return new Promise((n,s)=>{let i=this.nextRpcId++;this.pending.set(i,{resolve:n,reject:s});let o=JSON.stringify({jsonrpc:"2.0",id:i,method:e,params:r});try{this.child.stdin.write(o+`
2407
2407
  `)}catch(a){this.pending.delete(i),s(a instanceof Error?a:new Error(String(a)))}})}notify(e,r){if(this.child?.stdin===null||this.child===void 0)return;let n=JSON.stringify({jsonrpc:"2.0",method:e,params:r});try{this.child.stdin.write(n+`
2408
2408
  `)}catch{}}handleLine(e){if(e.trim()==="")return;let r;try{r=JSON.parse(e)}catch{return}if(typeof r.id=="number"&&this.pending.has(r.id)){let s=this.pending.get(r.id);if(this.pending.delete(r.id),r.error!==void 0){let i=r.error,o=typeof i?.message=="string"&&i.message!==""?i.message:JSON.stringify(r.error);s.reject(new Error(`acp_rpc_error: ${o}`))}else s.resolve(r);return}let n=typeof r.method=="string"?r.method:void 0;if(n!==void 0){if(typeof r.id=="number"){let s=JSON.stringify({jsonrpc:"2.0",id:r.id,error:{code:-32601,message:`Method not found: ${n} (lmctl dt-3 does not implement server-side ACP methods)`}});try{this.child?.stdin?.write(s+`
2409
- `)}catch{}this.ctx?.emit({event_type:"notification",payload:{kind:"unhandled_request",method:n,id:r.id,params:r.params}});return}if(n==="session/update"){let s=r.params,i=s?.update;if((typeof i?.sessionUpdate=="string"?i.sessionUpdate:"")==="agent_message_chunk"){let a=i?.content,l=typeof a?.text=="string"?a.text:"";if(l!==""){this.ctx?.emit({event_type:"assistant_message_delta",payload:{text:l}});return}}this.ctx?.emit({event_type:"notification",payload:{method:n,params:s}});return}this.ctx?.emit({event_type:"notification",payload:{method:n,params:r.params}})}}},Sb=t=>{switch(t){case"codex":return new Fm;case"claude":case"qwen":return new Um;case"gemini":case"copilot":case"opencode":case"kimi":return new Wm;default:throw new Error(`no_persistent_adapter_for_provider: ${t}`)}}});import{randomUUID as hW}from"node:crypto";import{existsSync as vQ,mkdirSync as gW,readFileSync as yW,writeFileSync as EW}from"node:fs";import{homedir as wW}from"node:os";import{dirname as TW,join as vW}from"node:path";function ul(){return process.env.LMCTL_DEVICE_FILE??vW(wW(),".lmctl","device.json")}function ln(t=ul()){let e=process.env.LMCTL_DEVICE_ID;if(e!==void 0&&e!=="")return{device_id:e,created_at:"env"};try{let r=JSON.parse(yW(t,"utf8"));return typeof r.device_id!="string"||r.device_id===""?null:{device_id:r.device_id,created_at:typeof r.created_at=="string"?r.created_at:""}}catch{return null}}function Bm(t=ul()){let e=ln(t);if(e!==null&&e.created_at!=="env")return e;let r={device_id:hW(),created_at:new Date().toISOString()};return gW(TW(t),{recursive:!0}),EW(t,`${JSON.stringify(r,null,2)}
2409
+ `)}catch{}this.ctx?.emit({event_type:"notification",payload:{kind:"unhandled_request",method:n,id:r.id,params:r.params}});return}if(n==="session/update"){let s=r.params,i=s?.update;if((typeof i?.sessionUpdate=="string"?i.sessionUpdate:"")==="agent_message_chunk"){let a=i?.content,l=typeof a?.text=="string"?a.text:"";if(l!==""){this.ctx?.emit({event_type:"assistant_message_delta",payload:{text:l}});return}}this.ctx?.emit({event_type:"notification",payload:{method:n,params:s}});return}this.ctx?.emit({event_type:"notification",payload:{method:n,params:r.params}})}}},Sb=t=>{switch(t){case"codex":return new Fm;case"claude":case"qwen":return new Um;case"gemini":case"copilot":case"opencode":case"kimi":return new Wm;default:throw new Error(`no_persistent_adapter_for_provider: ${t}`)}}});import{randomUUID as hW}from"node:crypto";import{existsSync as vQ,mkdirSync as gW,readFileSync as yW,writeFileSync as EW}from"node:fs";import{homedir as wW}from"node:os";import{dirname as TW,join as vW}from"node:path";function ul(){return process.env.LMCTL_DEVICE_FILE??vW(wW(),".lmctl","device.json")}function dn(t=ul()){let e=process.env.LMCTL_DEVICE_ID;if(e!==void 0&&e!=="")return{device_id:e,created_at:"env"};try{let r=JSON.parse(yW(t,"utf8"));return typeof r.device_id!="string"||r.device_id===""?null:{device_id:r.device_id,created_at:typeof r.created_at=="string"?r.created_at:""}}catch{return null}}function Bm(t=ul()){let e=dn(t);if(e!==null&&e.created_at!=="env")return e;let r={device_id:hW(),created_at:new Date().toISOString()};return gW(TW(t),{recursive:!0}),EW(t,`${JSON.stringify(r,null,2)}
2410
2410
  `,{encoding:"utf8",mode:384}),r}var Hm=w(()=>{"use strict"});import{mkdirSync as bW,readFileSync as Ib,rmSync as SW,writeFileSync as kW}from"node:fs";import{dirname as Nb,join as IW}from"node:path";function Jt(t=ne()){return IW(Nb(t),"serve.pid")}function Ab(t,e){let r=Jt(e);return bW(Nb(r),{recursive:!0}),kW(r,`${JSON.stringify(t,null,2)}
2411
2411
  `,"utf-8"),r}function Xm(t){let e=Jt(t),r;try{r=Ib(e,"utf-8")}catch{return null}try{let n=JSON.parse(r);return!Number.isInteger(n.pid)||(n.pid??0)<=0?null:{pid:n.pid,startedAt:typeof n.startedAt=="string"?n.startedAt:"unknown",port:Number.isInteger(n.port)?n.port:0,bind:typeof n.bind=="string"?n.bind:"unknown",dbPath:typeof n.dbPath=="string"?n.dbPath:"unknown",startToken:typeof n.startToken=="string"?n.startToken:null}}catch{return null}}function is(t){SW(Jt(t),{force:!0})}function ml(t){let e=NW(t),r=Xm(t);if(r===null)return{entry:null,running:!1,stale:!1,corrupt:e};switch(Bp(r.pid,r.startToken??null)){case"same":return{entry:r,running:!0,stale:!1,corrupt:!1};case"different":return{entry:r,running:!1,stale:!0,corrupt:!1,staleReason:"pid-reused"};case"gone":return{entry:r,running:!1,stale:!0,corrupt:!1,staleReason:"process-gone"};case"unverified":default:return{entry:r,running:!0,stale:!1,corrupt:!1,unverified:!0}}}function NW(t){let e=Jt(t),r;try{r=Ib(e,"utf-8")}catch{return!1}try{let n=JSON.parse(r);return!Number.isInteger(n.pid)||(n.pid??0)<=0}catch{return!0}}function xb(){return zl(process.pid)}var Rb=w(()=>{"use strict";Jr();ze()});var Hb={};he(Hb,{_resetStdoutEpipeGuardForTests:()=>CW,bootstrapAgentRestMailbox:()=>Fb,installStdoutEpipeGuard:()=>Mb,publishRegisteredWorkflowsOnStart:()=>Pb,resolveLocalMailboxDir:()=>qb,resolveLocalWebuiDir:()=>Wb,resolveServeConfig:()=>Ub,runServe:()=>LW,runServeStatus:()=>Db,runServeStop:()=>jb,validateServeArgs:()=>Bb});import{randomBytes as AW}from"node:crypto";import{existsSync as Cb}from"node:fs";import{isIP as Lb}from"node:net";import{homedir as xW}from"node:os";import{isAbsolute as $b,resolve as Jm}from"node:path";async function LW(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(RW),0;let r=t[0];return r==="status"?Db(t.slice(1),e):r==="stop"?jb(t.slice(1),e):r!=="start"?(e.stderr.write(r===void 0?Ob:`error: unknown serve subcommand: ${r}
2412
2412
 
@@ -2417,7 +2417,7 @@ ${Ob.replace(/^error: [^\n]*\n\n/,"")}`),2):OW(t.slice(1),e)}async function OW(t
2417
2417
  `)}let l=r.noDaemon?void 0:Nv({dal:n,intervalMs:di()}),d=a!==void 0?{missing:[],tfstateCandidatesChecked:[]}:pi({env:process.env});d.missing.length>0&&e.stderr.write(`[lmctl-next-agent] mailbox transport not configured: missing ${d.missing.join(", ")}; running without cloud sync`+(d.tfstatePathUsed===void 0?` (no terraform.tfstate found; checked ${d.tfstateCandidatesChecked.length} candidate path${d.tfstateCandidatesChecked.length===1?"":"s"})`:` (terraform.tfstate at ${d.tfstatePathUsed} did not supply the missing fields)`)+`
2418
2418
  `);let c=await WW({log:S=>e.stderr.write(`${S}
2419
2419
  `)}),u=new Ca({adapterFactory:Sb,publish:async()=>{throw new Error("persistent_publish_not_wired: mailbox runtime has not bound the publish hook yet")},log:S=>e.stderr.write(`${S}
2420
- `)}),m=ln()?.device_id,f=UT({dal:n,daemon:l,...d.config!==void 0?{webuiRuntimeConfig:FW(d.config,m)}:{},...c!==void 0?{terminalSessionManager:c}:{},persistentSessionManager:u,...a!==void 0?{localWebui:{webuiDir:a.webuiDir,localMailbox:{s3:a.s3,commands:a.commands}}}:{},authDisabled:r.insecureNoAuth}),p=process.env.LMCTL_USAGE_QUOTA_USD,h=p!==void 0&&p!==""?Number(p):NaN,_=Number.isFinite(h)&&h>0?h:void 0,g=await Fb({dal:n,app:f,io:e,mailbox:d.config===void 0?void 0:{...d.config,cursorStore:n,chatLogTailStore:n,promptTriggerStore:n,usageStore:n,..._!==void 0?{usageQuotaUsd:_}:{},...m!==void 0?{deviceId:m}:{}},...a!==void 0?{localMailbox:{rootDir:a.rootDir,s3:a.s3,commands:a.commands,promptTriggerStore:n}}:{},...c!==void 0?{terminalSessionManager:c}:{},persistentSessionManager:u});await Pb({dal:n,mailbox:g.mailbox,io:e});let{serve:y}=await import("@hono/node-server"),E=await new Promise((S,x)=>{let H,F=$=>x($);H=y({fetch:f.fetch,port:i.port,hostname:r.bind},()=>{H.removeListener?.("error",F),S(H)}),H.once("error",F)}).catch(async S=>(l!==void 0&&await l.stop().catch(()=>{}),await g.stop().catch(()=>{}),c!==void 0&&await c.stop().catch(()=>{}),await u.stop().catch(()=>{}),n.close(),e.stderr.write(`error: could not bind ${r.bind}:${i.port}: ${S instanceof Error?S.message:String(S)}
2420
+ `)}),m=dn()?.device_id,f=UT({dal:n,daemon:l,...d.config!==void 0?{webuiRuntimeConfig:FW(d.config,m)}:{},...c!==void 0?{terminalSessionManager:c}:{},persistentSessionManager:u,...a!==void 0?{localWebui:{webuiDir:a.webuiDir,localMailbox:{s3:a.s3,commands:a.commands}}}:{},authDisabled:r.insecureNoAuth}),p=process.env.LMCTL_USAGE_QUOTA_USD,h=p!==void 0&&p!==""?Number(p):NaN,_=Number.isFinite(h)&&h>0?h:void 0,g=await Fb({dal:n,app:f,io:e,mailbox:d.config===void 0?void 0:{...d.config,cursorStore:n,chatLogTailStore:n,promptTriggerStore:n,usageStore:n,..._!==void 0?{usageQuotaUsd:_}:{},...m!==void 0?{deviceId:m}:{}},...a!==void 0?{localMailbox:{rootDir:a.rootDir,s3:a.s3,commands:a.commands,promptTriggerStore:n}}:{},...c!==void 0?{terminalSessionManager:c}:{},persistentSessionManager:u});await Pb({dal:n,mailbox:g.mailbox,io:e});let{serve:y}=await import("@hono/node-server"),E=await new Promise((S,x)=>{let H,F=$=>x($);H=y({fetch:f.fetch,port:i.port,hostname:r.bind},()=>{H.removeListener?.("error",F),S(H)}),H.once("error",F)}).catch(async S=>(l!==void 0&&await l.stop().catch(()=>{}),await g.stop().catch(()=>{}),c!==void 0&&await c.stop().catch(()=>{}),await u.stop().catch(()=>{}),n.close(),e.stderr.write(`error: could not bind ${r.bind}:${i.port}: ${S instanceof Error?S.message:String(S)}
2421
2421
  `),null));if(E===null)return 2;e.stdout.write(`listening on ${r.bind}:${i.port}
2422
2422
  `);let v=ne();try{let S=ml(v);S.running&&S.entry!==null&&S.entry.pid!==process.pid&&e.stderr.write(`note: replacing pidfile for a still-running daemon (pid ${S.entry.pid}, port ${S.entry.port}); \`lmctl serve stop\` will now target pid ${process.pid}
2423
2423
  `);let x=Ab({pid:process.pid,startedAt:new Date().toISOString(),port:i.port,bind:r.bind,dbPath:v,startToken:xb()},v);e.stdout.write(`pidfile ${x} (pid ${process.pid})
@@ -2527,8 +2527,8 @@ To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}
2527
2527
  The session marker may be stale or the team may not be registered in this lmctl database.
2528
2528
  Consulted ${hs(ne())}
2529
2529
  To experiment with it manually: https://lmctl.com/lmctl/docs/manual-invocation`}function pS(t){return`unknown option --from
2530
- ${Qm(t)}`}function _S(t,e){let r=dn(t,e);return r.ok?{ok:!0,identity:r.identity,source:"session"}:r}function dn(t,e){let r=t[Rs];if(r===void 0||r.length===0)return{ok:!1,reason:"unset"};let n=[];for(let i of e.listRootTeams()){let o;try{o=Ve(i.teamfile_path,e)}catch{continue}for(let a of o.members)a.teamfile===void 0&&a.session===r&&n.push(`${i.teamfile_path}:${a.alias}`)}let s=[...new Set(n)];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 gi=w(()=>{"use strict";yt();ze();mr()});function De(t){let e=an(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var hl=w(()=>{"use strict";at()});async function El(t){let e=t.onEvent??(()=>{}),r=wq(t.io,e),n=null,s=null,i=null,o,a,l=null,d=!1,c=null,u=t.prompt;try{let m=await O(r,R=>Ne(t.teamfile,t.alias,R)),f=m.teamfile,p=await O(r,R=>Aq(R,t.env??process.env)),h=p.sender,_=await xq(r,{explicitRoot:t.rootFlag,sender:h,receiverTeamfile:f,operatorOrigin:p.origin==="operator"}),g=h===null?null:await Rq(r,{rootTeamfile:_,sender:h,receiverTeamfile:f,receiverAlias:m.alias});g!==null&&!g.allowed&&e({kind:"warning",message:`warning: out-of-policy chat send: ${g.reason}
2531
- `}),i=await bq(r,{receiverTeamfile:f,receiverAlias:m.alias,sender:h,rootTeamfile:_,provider:m.provider,model:m.model,sessionId:m.sessionid,cwd:m.sessiondir,prompt:t.prompt,origin:p.origin}),o=Iq(r,i);try{as(r,ot(f),f)}catch{}n={root_teamfile:_,sender_teamfile:h?.teamfile??null,sender_alias:h?.alias??null,receiver_teamfile:f,receiver_alias:m.alias,receiver_provider:m.provider,receiver_session_id:m.sessionid,origin:p.origin,policy:g};let y=await wS(r,f,m.alias);if(y!==null){let R=zm(y);if(h!==null){let A=await ef(r,{sender:h,receiverTeamfile:f,receiverAlias:m.alias,receiverProvider:m.provider,receiverSessionId:m.sessionid,rootTeamfile:_,payload:t.prompt});return c=gl(`enqueued mailbox message ${A.id}`,null),tf(A.id,h,f,m.alias)}return ds(i,n,t.prompt,R,"unavailable"),c=rf(R,null),{status:"busy",message:R,teamChatLogId:null}}let E=await Tq(r,f,m.alias);if(E.busy){if(h!==null){let A=await ef(r,{sender:h,receiverTeamfile:f,receiverAlias:m.alias,receiverProvider:m.provider,receiverSessionId:m.sessionid,rootTeamfile:_,payload:t.prompt});return c=gl(`enqueued mailbox message ${A.id}`,null),tf(A.id,h,f,m.alias)}let R=await vq(r,f,m.alias);return ds(i,n,t.prompt,R,"unavailable"),c=rf(R,null),{status:"busy",message:R,teamChatLogId:null}}if(h!==null&&h.teamfile!==f){let R=await O(r,A=>ov(A,{root:_,sender:h,receiverTeamfile:f,receiverAlias:m.alias,now:new Date}));if(R.stop){let A=lv(R.chain);return ds(i,n,t.prompt,A,"cycle"),c=yl(A,null),{status:"error",errorKind:"cycle",message:A,teamChatLogId:null,messageId:null}}}let v=await Cq(r,{receiver_teamfile:f,receiver_alias:m.alias,sender_teamfile:h?.teamfile??f,sender_alias:h?.alias??"operator",...E.idleReclaim?{force:!0,reclaimReason:"session-idle"}:{}});if(!v.acquired){let R=TS(f,m.alias,v.current);if(h!==null){let A=await ef(r,{sender:h,receiverTeamfile:f,receiverAlias:m.alias,receiverProvider:m.provider,receiverSessionId:m.sessionid,rootTeamfile:_,payload:t.prompt});return c=gl(`enqueued mailbox message ${A.id}`,null),tf(A.id,h,f,m.alias)}return ds(i,n,t.prompt,R,"unavailable"),c=rf(R,null),{status:"busy",message:R,teamChatLogId:null}}s={row:v.lease,leaseId:v.leaseId},a=Er(R=>O(r,A=>A.heartbeatAgentInflight(s.row,s.leaseId,R)),{intervalMs:ES,onError:R=>{ue()&&Pe(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:R instanceof Error?R.message:String(R)}))}});let S=await es({sender:h??{teamfile:f,alias:"operator"},receiver:{teamfile:f,alias:m.alias,provider:m.provider,sessionId:m.sessionid,cwd:m.sessiondir,...m.model!==void 0?{model:m.model}:{},...m.effort!==void 0?{effort:m.effort}:{},...m.isLead!==void 0?{isLead:m.isLead}:{}},newMessage:t.prompt,newMessageFrom:h===null?"operator":`${h.teamfile}:${h.alias}`,io:r,permissionMode:t.permissionMode,env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:R=>e({kind:"delta",chunk:R}),onProgress:R=>e({kind:"progress",alias:m.alias,event:R}),onPromptBuilt:async R=>{u=R,l===null&&(l=await Mq(r,{...n,message:R})),i!==null&&await kq(r,i,R)}});u=S.prompt;let x=S.status==="stalled",H=null,F=x?`provider stalled${S.stalledAfterMs!==void 0?` after ${S.stalledAfterMs}ms`:""}`:S.status==="error"?S.error??S.receipt:n.policy?.outOfPolicy===!0?n.policy.reason:null,$=x||S.status==="error"?"error":n.policy?.outOfPolicy===!0?"out_of_policy":"ok";if(l!==null?(await yS(r,l,{...n,message:u,response:S.receipt,status:$,error_detail:F}),d=!0,H=l):H=await jq(r,{...n,message:u,response:S.receipt,status:$,error_detail:F}),x){let R=F;ds(i,n,u,R,"error"),c=yl(R,H,S.receipt)}else c=gl(S.receipt,H);return{status:x?"stalled":"ok",replyText:S.receipt,wroteDelta:S.wroteDelta,teamChatLogId:H,messageId:H===null?null:bn(H),durationMs:S.durationMs}}catch(m){let f=m instanceof Error?m.message:String(m);return l!==null&&!d&&n!==null&&(await yS(r,l,{...n,message:u,response:null,status:"error",error_detail:f}),d=!0),ds(i,n,u,f,"error"),c=yl(f,l),{status:"error",errorKind:m instanceof ke?"target":"provider",message:f,teamChatLogId:l,messageId:l===null?null:bn(l)}}finally{o!==void 0&&clearInterval(o),a!==void 0&&clearInterval(a),l!==null&&await Dq(r,n,bn(l)),s!==null&&await $q(r,s.row,s.leaseId),i!==null&&await Sq(r,i,c??yl("chat turn exited without a terminal outcome",null))}}function wq(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:r=>{e({kind:"warning",message:r})}}}}async function Tq(t,e,r){let n=await O(t,i=>(Wa(i,e,r),_t(i,e,r)));if(!n.busy)return{busy:!1,idleReclaim:!1};let s=await O(t,i=>ns(i,n,e,r));return{busy:!s,idleReclaim:s}}async function vq(t,e,r){let n=await wS(t,e,r);if(n!==null)return zm(n);let s=await O(t,i=>i.getAgentInflight(e,r));return s!==null?TS(e,r,s):`${r} is busy; wait and retry`}async function ef(t,e){return await Xa(t,t.env??process.env),await O(t,r=>{let n=Ne(e.sender.teamfile,e.sender.alias,r);return r.enqueueMail({sender_teamfile:e.sender.teamfile,sender_alias:e.sender.alias,sender_provider:n.provider,sender_session_id:n.sessionid,receiver_teamfile:e.receiverTeamfile,receiver_alias:e.receiverAlias,receiver_provider:e.receiverProvider,receiver_session_id:e.receiverSessionId,root_teamfile:e.rootTeamfile,payload:e.payload})})}function tf(t,e,r,n){let s=`${r}:${n}`;return{status:"enqueued",id:t,message:`mailbox message ${t} enqueued to ${s}`,teamChatLogId:null,messageId:$e(t),sender:`${e.teamfile}:${e.alias}`,receiver:s}}async function bq(t,e){try{return(await O(t,n=>n.startTrackedInvocation({kind:"chat",origin:e.origin,scope_teamfile:e.receiverTeamfile,from_identity:e.sender===null?"operator":`${e.sender.teamfile}:${e.sender.alias}`,target_teamfile:e.receiverTeamfile,target_alias:e.receiverAlias,root_teamfile:e.rootTeamfile,cwd:e.cwd??null,command:Nq(e.receiverTeamfile,e.receiverAlias,e.prompt),holder_pid:process.pid,request_payload:e.prompt,meta:JSON.stringify({provider:e.provider,model:e.model??null,sessionid:e.sessionId??null})}))).id}catch(r){return ue()&&Pe(JSON.stringify({event:"tracked_invocation_start_error",error:r instanceof Error?r.message:String(r)})),null}}async function Sq(t,e,r){try{await O(t,n=>{n.finishTrackedInvocation(e,r)})}catch(n){ue()&&Pe(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:n instanceof Error?n.message:String(n)}))}}async function kq(t,e,r){try{await O(t,n=>{n.updateTrackedInvocationRequestPayload(e,r)})}catch(n){ue()&&Pe(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:n instanceof Error?n.message:String(n)}))}}function Iq(t,e){if(e===null)return;let r=setInterval(()=>{O(t,n=>n.heartbeatTrackedInvocation(e)).catch(n=>{ue()&&Pe(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:n instanceof Error?n.message:String(n)}))})},ES);return r.unref?.(),r}function gl(t,e){return{status:"done",result_summary:yi(t),error:null,team_chat_log_id:e}}function rf(t,e){return{status:"busy",result_summary:yi(t),error:t,team_chat_log_id:e}}function yl(t,e,r){return{status:"error",result_summary:yi(r===void 0?t:r),error:t,team_chat_log_id:e}}function yi(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function Nq(t,e,r){return`lmctl chat ${JSON.stringify(t)} ${e} ${JSON.stringify(r)}`}function Aq(t,e){let r=_S(e,t);if(r.ok)return{sender:De(r.identity),origin:"agent"};if(r.reason==="unset")return{sender:null,origin:"operator"};throw new Error(fr("chat"))}async function xq(t,e){if(e.explicitRoot!==void 0)return await O(t,n=>Se(e.explicitRoot,n));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let r=e.sender;return await O(t,n=>av(n,{sender:r,now:new Date})??e.receiverTeamfile)}async function Rq(t,e){return await O(t,r=>lS({rootTeamfile:e.rootTeamfile,fromTeamfile:e.sender.teamfile,fromAlias:e.sender.alias,toTeamfile:e.receiverTeamfile,toAlias:e.receiverAlias,registry:Lq(r,e.sender.teamfile,e.receiverTeamfile)}))}function Lq(t,e,r){return{teams:[e,r].map(s=>Oq(s,t))}}function Oq(t,e){let r=Ve(t,e),n=Ht(r);return{teamfile:t,aliases:r.members.map(s=>s.alias),leadAlias:n?.alias??null}}async function Cq(t,e){return await O(t,r=>{let n=ue(),s=Lt(r,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:qt(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(n&&Pe(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:s.reclaimReason===null?"acquired":"reclaimed",...s.reclaimReason===null?{}:{reclaim_reason:s.reclaimReason,holder:gS(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(n&&Pe(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:"rejected",holder:gS(s.current)})),{acquired:!1,current:s.current})})}async function wS(t,e,r){return await O(t,n=>{for(let i=0;i<2;i+=1){let o=n.getTerminalLock(e,r);if(o===null)return null;if(Ym(o).live)return o;let l=n.getAgentInflight(e,r);if(n.clearTerminalLock(e,r,o.lock_id))return l!==null&&l.sender_teamfile===e&&l.sender_alias==="terminal"&&n.clearObservedTerminalAgentInflight(e,r,{sender_teamfile:l.sender_teamfile,sender_alias:l.sender_alias,started_at:l.started_at,holder_pid:l.holder_pid}),null}let s=n.getTerminalLock(e,r);return s===null?null:Ym(s).live?s:null})}function gS(t){return t===null?null:{sender_teamfile:t.sender_teamfile,sender_alias:t.sender_alias,holder_pid:t.holder_pid,started_at:t.started_at}}async function $q(t,e,r){try{await O(t,n=>{n.releaseAgentInflight(e,r)})}catch(n){t.stderr.write(`warning: failed to release chat in-flight slot: ${n instanceof Error?n.message:String(n)}
2530
+ ${Qm(t)}`}function _S(t,e){let r=cn(t,e);return r.ok?{ok:!0,identity:r.identity,source:"session"}:r}function cn(t,e){let r=t[Rs];if(r===void 0||r.length===0)return{ok:!1,reason:"unset"};let n=[];for(let i of e.listRootTeams()){let o;try{o=Ve(i.teamfile_path,e)}catch{continue}for(let a of o.members)a.teamfile===void 0&&a.session===r&&n.push(`${i.teamfile_path}:${a.alias}`)}let s=[...new Set(n)];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 gi=w(()=>{"use strict";yt();ze();mr()});function De(t){let e=ln(t);if(e===null)throw new Error(`invalid agent identity: ${t}`);return{teamfile:e.teamfile,alias:e.alias,value:t}}var hl=w(()=>{"use strict";at()});async function El(t){let e=t.onEvent??(()=>{}),r=wq(t.io,e),n=null,s=null,i=null,o,a,l=null,d=!1,c=null,u=t.prompt;try{let m=await O(r,R=>Ne(t.teamfile,t.alias,R)),f=m.teamfile,p=await O(r,R=>Aq(R,t.env??process.env)),h=p.sender,_=await xq(r,{explicitRoot:t.rootFlag,sender:h,receiverTeamfile:f,operatorOrigin:p.origin==="operator"}),g=h===null?null:await Rq(r,{rootTeamfile:_,sender:h,receiverTeamfile:f,receiverAlias:m.alias});g!==null&&!g.allowed&&e({kind:"warning",message:`warning: out-of-policy chat send: ${g.reason}
2531
+ `}),i=await bq(r,{receiverTeamfile:f,receiverAlias:m.alias,sender:h,rootTeamfile:_,provider:m.provider,model:m.model,sessionId:m.sessionid,cwd:m.sessiondir,prompt:t.prompt,origin:p.origin}),o=Iq(r,i);try{as(r,ot(f),f)}catch{}n={root_teamfile:_,sender_teamfile:h?.teamfile??null,sender_alias:h?.alias??null,receiver_teamfile:f,receiver_alias:m.alias,receiver_provider:m.provider,receiver_session_id:m.sessionid,origin:p.origin,policy:g};let y=await wS(r,f,m.alias);if(y!==null){let R=zm(y);if(h!==null){let A=await ef(r,{sender:h,receiverTeamfile:f,receiverAlias:m.alias,receiverProvider:m.provider,receiverSessionId:m.sessionid,rootTeamfile:_,payload:t.prompt});return c=gl(`enqueued mailbox message ${A.id}`,null),tf(A.id,h,f,m.alias)}return ds(i,n,t.prompt,R,"unavailable"),c=rf(R,null),{status:"busy",message:R,teamChatLogId:null}}let E=await Tq(r,f,m.alias);if(E.busy){if(h!==null){let A=await ef(r,{sender:h,receiverTeamfile:f,receiverAlias:m.alias,receiverProvider:m.provider,receiverSessionId:m.sessionid,rootTeamfile:_,payload:t.prompt});return c=gl(`enqueued mailbox message ${A.id}`,null),tf(A.id,h,f,m.alias)}let R=await vq(r,f,m.alias);return ds(i,n,t.prompt,R,"unavailable"),c=rf(R,null),{status:"busy",message:R,teamChatLogId:null}}if(h!==null&&h.teamfile!==f){let R=await O(r,A=>ov(A,{root:_,sender:h,receiverTeamfile:f,receiverAlias:m.alias,now:new Date}));if(R.stop){let A=lv(R.chain);return ds(i,n,t.prompt,A,"cycle"),c=yl(A,null),{status:"error",errorKind:"cycle",message:A,teamChatLogId:null,messageId:null}}}let v=await Cq(r,{receiver_teamfile:f,receiver_alias:m.alias,sender_teamfile:h?.teamfile??f,sender_alias:h?.alias??"operator",...E.idleReclaim?{force:!0,reclaimReason:"session-idle"}:{}});if(!v.acquired){let R=TS(f,m.alias,v.current);if(h!==null){let A=await ef(r,{sender:h,receiverTeamfile:f,receiverAlias:m.alias,receiverProvider:m.provider,receiverSessionId:m.sessionid,rootTeamfile:_,payload:t.prompt});return c=gl(`enqueued mailbox message ${A.id}`,null),tf(A.id,h,f,m.alias)}return ds(i,n,t.prompt,R,"unavailable"),c=rf(R,null),{status:"busy",message:R,teamChatLogId:null}}s={row:v.lease,leaseId:v.leaseId},a=Er(R=>O(r,A=>A.heartbeatAgentInflight(s.row,s.leaseId,R)),{intervalMs:ES,onError:R=>{ue()&&Pe(JSON.stringify({event:"agent_inflight_heartbeat_error",receiver:{teamfile:s.row.receiver_teamfile,alias:s.row.receiver_alias},error:R instanceof Error?R.message:String(R)}))}});let S=await es({sender:h??{teamfile:f,alias:"operator"},receiver:{teamfile:f,alias:m.alias,provider:m.provider,sessionId:m.sessionid,cwd:m.sessiondir,...m.model!==void 0?{model:m.model}:{},...m.effort!==void 0?{effort:m.effort}:{},...m.isLead!==void 0?{isLead:m.isLead}:{}},newMessage:t.prompt,newMessageFrom:h===null?"operator":`${h.teamfile}:${h.alias}`,io:r,permissionMode:t.permissionMode,env:t.env??process.env,...t.idleTimeoutMs!==void 0?{idleTimeoutMs:t.idleTimeoutMs}:{},onDelta:R=>e({kind:"delta",chunk:R}),onProgress:R=>e({kind:"progress",alias:m.alias,event:R}),onPromptBuilt:async R=>{u=R,l===null&&(l=await Mq(r,{...n,message:R}),l!==null&&t.onAccepted?.(Gr(l))),i!==null&&await kq(r,i,R)}});u=S.prompt;let x=S.status==="stalled",H=null,F=x?`provider stalled${S.stalledAfterMs!==void 0?` after ${S.stalledAfterMs}ms`:""}`:S.status==="error"?S.error??S.receipt:n.policy?.outOfPolicy===!0?n.policy.reason:null,$=x||S.status==="error"?"error":n.policy?.outOfPolicy===!0?"out_of_policy":"ok";if(l!==null?(await yS(r,l,{...n,message:u,response:S.receipt,status:$,error_detail:F}),d=!0,H=l):H=await jq(r,{...n,message:u,response:S.receipt,status:$,error_detail:F}),x){let R=F;ds(i,n,u,R,"error"),c=yl(R,H,S.receipt)}else c=gl(S.receipt,H);return{status:x?"stalled":"ok",replyText:S.receipt,wroteDelta:S.wroteDelta,teamChatLogId:H,messageId:H===null?null:Gr(H),durationMs:S.durationMs}}catch(m){let f=m instanceof Error?m.message:String(m);return l!==null&&!d&&n!==null&&(await yS(r,l,{...n,message:u,response:null,status:"error",error_detail:f}),d=!0),ds(i,n,u,f,"error"),c=yl(f,l),{status:"error",errorKind:m instanceof ke?"target":"provider",message:f,teamChatLogId:l,messageId:l===null?null:Gr(l)}}finally{o!==void 0&&clearInterval(o),a!==void 0&&clearInterval(a),l!==null&&await Dq(r,n,Gr(l)),s!==null&&await $q(r,s.row,s.leaseId),i!==null&&await Sq(r,i,c??yl("chat turn exited without a terminal outcome",null))}}function wq(t,e){return{...t,stdout:{write:()=>{}},stderr:{write:r=>{e({kind:"warning",message:r})}}}}async function Tq(t,e,r){let n=await O(t,i=>(Wa(i,e,r),_t(i,e,r)));if(!n.busy)return{busy:!1,idleReclaim:!1};let s=await O(t,i=>ns(i,n,e,r));return{busy:!s,idleReclaim:s}}async function vq(t,e,r){let n=await wS(t,e,r);if(n!==null)return zm(n);let s=await O(t,i=>i.getAgentInflight(e,r));return s!==null?TS(e,r,s):`${r} is busy; wait and retry`}async function ef(t,e){return await Xa(t,t.env??process.env),await O(t,r=>{let n=Ne(e.sender.teamfile,e.sender.alias,r);return r.enqueueMail({sender_teamfile:e.sender.teamfile,sender_alias:e.sender.alias,sender_provider:n.provider,sender_session_id:n.sessionid,receiver_teamfile:e.receiverTeamfile,receiver_alias:e.receiverAlias,receiver_provider:e.receiverProvider,receiver_session_id:e.receiverSessionId,root_teamfile:e.rootTeamfile,payload:e.payload})})}function tf(t,e,r,n){let s=`${r}:${n}`;return{status:"enqueued",id:t,message:`mailbox message ${t} enqueued to ${s}`,teamChatLogId:null,messageId:$e(t),sender:`${e.teamfile}:${e.alias}`,receiver:s}}async function bq(t,e){try{return(await O(t,n=>n.startTrackedInvocation({kind:"chat",origin:e.origin,scope_teamfile:e.receiverTeamfile,from_identity:e.sender===null?"operator":`${e.sender.teamfile}:${e.sender.alias}`,target_teamfile:e.receiverTeamfile,target_alias:e.receiverAlias,root_teamfile:e.rootTeamfile,cwd:e.cwd??null,command:Nq(e.receiverTeamfile,e.receiverAlias,e.prompt),holder_pid:process.pid,request_payload:e.prompt,meta:JSON.stringify({provider:e.provider,model:e.model??null,sessionid:e.sessionId??null})}))).id}catch(r){return ue()&&Pe(JSON.stringify({event:"tracked_invocation_start_error",error:r instanceof Error?r.message:String(r)})),null}}async function Sq(t,e,r){try{await O(t,n=>{n.finishTrackedInvocation(e,r)})}catch(n){ue()&&Pe(JSON.stringify({event:"tracked_invocation_finish_error",id:e,error:n instanceof Error?n.message:String(n)}))}}async function kq(t,e,r){try{await O(t,n=>{n.updateTrackedInvocationRequestPayload(e,r)})}catch(n){ue()&&Pe(JSON.stringify({event:"tracked_invocation_request_payload_error",id:e,error:n instanceof Error?n.message:String(n)}))}}function Iq(t,e){if(e===null)return;let r=setInterval(()=>{O(t,n=>n.heartbeatTrackedInvocation(e)).catch(n=>{ue()&&Pe(JSON.stringify({event:"tracked_invocation_heartbeat_error",id:e,error:n instanceof Error?n.message:String(n)}))})},ES);return r.unref?.(),r}function gl(t,e){return{status:"done",result_summary:yi(t),error:null,team_chat_log_id:e}}function rf(t,e){return{status:"busy",result_summary:yi(t),error:t,team_chat_log_id:e}}function yl(t,e,r){return{status:"error",result_summary:yi(r===void 0?t:r),error:t,team_chat_log_id:e}}function yi(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=500?e:`${e.slice(0,497)}...`}function Nq(t,e,r){return`lmctl chat ${JSON.stringify(t)} ${e} ${JSON.stringify(r)}`}function Aq(t,e){let r=_S(e,t);if(r.ok)return{sender:De(r.identity),origin:"agent"};if(r.reason==="unset")return{sender:null,origin:"operator"};throw new Error(fr("chat"))}async function xq(t,e){if(e.explicitRoot!==void 0)return await O(t,n=>Se(e.explicitRoot,n));if(e.operatorOrigin||e.sender===null)return e.receiverTeamfile;let r=e.sender;return await O(t,n=>av(n,{sender:r,now:new Date})??e.receiverTeamfile)}async function Rq(t,e){return await O(t,r=>lS({rootTeamfile:e.rootTeamfile,fromTeamfile:e.sender.teamfile,fromAlias:e.sender.alias,toTeamfile:e.receiverTeamfile,toAlias:e.receiverAlias,registry:Lq(r,e.sender.teamfile,e.receiverTeamfile)}))}function Lq(t,e,r){return{teams:[e,r].map(s=>Oq(s,t))}}function Oq(t,e){let r=Ve(t,e),n=Ht(r);return{teamfile:t,aliases:r.members.map(s=>s.alias),leadAlias:n?.alias??null}}async function Cq(t,e){return await O(t,r=>{let n=ue(),s=Lt(r,{receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,ttlMs:qt(),...e.force===!0?{force:!0}:{},...e.reclaimReason===void 0?{}:{reclaimReason:e.reclaimReason}});return s.acquired?(n&&Pe(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:s.reclaimReason===null?"acquired":"reclaimed",...s.reclaimReason===null?{}:{reclaim_reason:s.reclaimReason,holder:gS(s.previous)}})),{acquired:!0,lease:s.lease,leaseId:s.leaseId}):(n&&Pe(JSON.stringify({event:"inflight_acquire",receiver:{teamfile:e.receiver_teamfile,alias:e.receiver_alias},sender:{teamfile:e.sender_teamfile,alias:e.sender_alias},result:"rejected",holder:gS(s.current)})),{acquired:!1,current:s.current})})}async function wS(t,e,r){return await O(t,n=>{for(let i=0;i<2;i+=1){let o=n.getTerminalLock(e,r);if(o===null)return null;if(Ym(o).live)return o;let l=n.getAgentInflight(e,r);if(n.clearTerminalLock(e,r,o.lock_id))return l!==null&&l.sender_teamfile===e&&l.sender_alias==="terminal"&&n.clearObservedTerminalAgentInflight(e,r,{sender_teamfile:l.sender_teamfile,sender_alias:l.sender_alias,started_at:l.started_at,holder_pid:l.holder_pid}),null}let s=n.getTerminalLock(e,r);return s===null?null:Ym(s).live?s:null})}function gS(t){return t===null?null:{sender_teamfile:t.sender_teamfile,sender_alias:t.sender_alias,holder_pid:t.holder_pid,started_at:t.started_at}}async function $q(t,e,r){try{await O(t,n=>{n.releaseAgentInflight(e,r)})}catch(n){t.stderr.write(`warning: failed to release chat in-flight slot: ${n instanceof Error?n.message:String(n)}
2532
2532
  `)}}function TS(t,e,r){return`${e} is servicing ${r.sender_alias} (${r.sender_teamfile}) since ${r.started_at} \u2014 wait and retry, or inspect without waking it: lmctl tail "${t}" ${e}`}async function Mq(t,e){let r=Ei(e.message);try{return await O(t,n=>n.beginTeamChatLog({root_teamfile:e.root_teamfile,sender_teamfile:e.sender_teamfile,sender_alias:e.sender_alias,receiver_teamfile:e.receiver_teamfile,receiver_alias:e.receiver_alias,receiver_provider:e.receiver_provider,receiver_session_id:e.receiver_session_id,provider_prompt:e.message,message:r.text,response:null,origin:e.origin,status:"running",error_detail:null,truncated:r.truncated?1:0,created_at:new Date().toISOString()}))}catch(n){return t.stderr.write(`warning: failed to begin chat log: ${n instanceof Error?n.message:String(n)}
2533
2533
  `),null}}async function yS(t,e,r){let n=Ei(r.message),s=r.response===null?null:Ei(r.response);try{await O(t,i=>i.finishTeamChatLog(e,{root_teamfile:r.root_teamfile,sender_teamfile:r.sender_teamfile,sender_alias:r.sender_alias,receiver_teamfile:r.receiver_teamfile,receiver_alias:r.receiver_alias,receiver_provider:r.receiver_provider,receiver_session_id:r.receiver_session_id,provider_prompt:r.message,message:n.text,response:s?.text??null,origin:r.origin,status:r.status,error_detail:r.error_detail,truncated:n.truncated||s?.truncated?1:0,created_at:new Date().toISOString()}))}catch(i){t.stderr.write(`warning: failed to finish chat log ${e}: ${i instanceof Error?i.message:String(i)}
2534
2534
  `)}}async function Dq(t,e,r){if(e!==null)try{await O(t,n=>{n.clearCurrentlyHandlingMessage(e.receiver_teamfile,e.receiver_alias,r)})}catch(n){t.stderr.write(`warning: failed to clear chat causal pointer: ${n instanceof Error?n.message:String(n)}
@@ -2550,7 +2550,8 @@ ${bS}
2550
2550
  `),1})}let s=Dr(Fq,{target:n.target,alias:n.alias,flags:{session:n.sessionFlag,provider:n.providerFlag}});if(s.mode==="error")return e.stderr.write(`error: ${s.message}
2551
2551
  `),2;if(s.mode==="managed")return e.stderr.write(`error: chat managed mode requires --run <id>
2552
2552
  `),2;let i;if(s.mode==="ai-team"){if(s.alias===void 0)return e.stderr.write(`error: chat: alias required (internal)
2553
- `),2;let u=await El({teamfile:s.teamfile,alias:s.alias,prompt:n.prompt,permissionMode:n.permissionMode,...n.idleTimeoutMs!==void 0?{idleTimeoutMs:n.idleTimeoutMs}:{},...n.rootFlag!==void 0?{rootFlag:n.rootFlag}:{},env:r,io:e,onEvent:m=>Hq(e,m)});return n.json===!0?u.status==="enqueued"?(e.stdout.write(`${JSON.stringify({status:"enqueued",path:"enqueued",id:u.id,message_id:u.messageId,sender:u.sender,receiver:u.receiver})}
2553
+ `),2;let u=await El({teamfile:s.teamfile,alias:s.alias,prompt:n.prompt,permissionMode:n.permissionMode,...n.idleTimeoutMs!==void 0?{idleTimeoutMs:n.idleTimeoutMs}:{},...n.rootFlag!==void 0?{rootFlag:n.rootFlag}:{},env:r,io:e,onEvent:m=>{n.json===!0&&m.kind==="delta"||Hq(e,m)},...n.json===!0?{onAccepted:m=>{e.stdout.write(`${JSON.stringify({status:"accepted",message_id:m})}
2554
+ `)}}:{}});return n.json===!0?u.status==="enqueued"?(e.stdout.write(`${JSON.stringify({status:"enqueued",path:"enqueued",id:u.id,message_id:u.messageId,sender:u.sender,receiver:u.receiver})}
2554
2555
  `),0):u.status==="busy"?(e.stdout.write(`${JSON.stringify({status:"busy",message:u.message,teamChatLogId:u.teamChatLogId})}
2555
2556
  `),1):u.status==="error"?(e.stdout.write(`${JSON.stringify({status:"error",errorKind:u.errorKind,message:u.message,teamChatLogId:u.teamChatLogId,...u.messageId===null?{}:{message_id:u.messageId}})}
2556
2557
  `),1):(e.stdout.write(`${JSON.stringify({status:u.status,replyText:u.replyText,teamChatLogId:u.teamChatLogId,...u.messageId===null?{}:{message_id:u.messageId}})}
@@ -2593,14 +2594,16 @@ Safe input (no shell involved) \u2014 use for anything non-trivial:
2593
2594
  quotes are expanded before lmctl sees them. Write the text to a file with
2594
2595
  your file-writing tool (not echo/heredoc), then pass --prompt-file.
2595
2596
  --permission-mode defaults to yolo.
2596
- Managed-team --json results include the event-substrate message_id for mail commands.
2597
+ Managed-team --json synchronous sends emit an early {"status":"accepted",
2598
+ "message_id":"msg_..."} line after durable creation, then a final result line
2599
+ with the same message_id. Busy and enqueued outcomes emit one line.
2597
2600
 
2598
2601
  Send a prompt to a team member or raw provider session, or answer a paused run.`});function wi(t){for(let e=t.length-1;e>=0;e-=1){let r=t[e],n=Xq.exec(r.content);if(n===null){if(r.role==="assistant"&&r.content.trim().length>0)return null;continue}let s=Number.parseInt(n[1],10),i=n[2]===void 0?0:Number.parseInt(n[2],10),o=n[3].toLowerCase(),a=n[4]?.trim()??null,l=`${n[1]}${n[2]!==void 0?`:${n[2]}`:""}${o}`;return{state:"LIMITED",resets_at:a===null?null:Jq(r.timestamp,s,i,o,a),reset_time:l,timezone:a,detected_at:r.timestamp.toISOString()}}return null}function Jq(t,e,r,n,s){if(!Number.isFinite(t.getTime())||e<1||e>12||r<0||r>59)return null;let i=Gq(e,n);try{let o=Kq(t,s),a=xS(o.year,o.month,o.day,i,r,s);if(a.getTime()<=t.getTime()){let l=Zq(o,1);a=xS(l.year,l.month,l.day,i,r,s)}return a.toISOString()}catch{return null}}function Gq(t,e){return e==="am"?t===12?0:t:t===12?12:t+12}function Kq(t,e){let r=RS(e,!1).formatToParts(t);return{year:pr(r,"year"),month:pr(r,"month"),day:pr(r,"day")}}function xS(t,e,r,n,s,i){let o=Date.UTC(t,e-1,r,n,s,0,0);for(let a=0;a<3;a+=1){let l=Vq(new Date(o),i);o=Date.UTC(t,e-1,r,n,s,0,0)-l}return new Date(o)}function Vq(t,e){let r=RS(e,!0).formatToParts(t);return Date.UTC(pr(r,"year"),pr(r,"month")-1,pr(r,"day"),pr(r,"hour"),pr(r,"minute"),pr(r,"second"),0)-t.getTime()}function RS(t,e){let r=e?zq:Yq,n=r.get(t);if(n!==void 0)return n;let s=new Intl.DateTimeFormat("en-US",{timeZone:t,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",...e?{hour:"2-digit",minute:"2-digit",second:"2-digit"}:{}});return r.set(t,s),s}function pr(t,e){let r=t.find(n=>n.type===e)?.value;if(r===void 0)throw new Error(`missing ${e}`);return Number.parseInt(r,10)}function Zq(t,e){let r=new Date(Date.UTC(t.year,t.month-1,t.day+e));return{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate()}}var Xq,Yq,zq,sf=w(()=>{"use strict";Xq=/you['\u2019]ve hit your session limit\s*(?:\u00b7|-|:)?\s*resets\s+([0-9]{1,2})(?::([0-9]{2}))?\s*(am|pm)\s*(?:\(([^)]+)\))?/i;Yq=new Map,zq=new Map});var CS={};he(CS,{runRecover:()=>eB});import{dirname as LS,resolve as OS}from"node:path";async function eB(t,e,r={}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(`${of}
2599
2602
  `),0;let n=Q(t.filter(p=>p!=="--"),[],["--all","--dry-run","--json"]);if(n.error!==void 0)return N(e,`${n.error}
2600
2603
 
2601
2604
  ${of}`);if(n.positionals.length===0)return N(e,`recover requires a <teamfile>
2602
2605
 
2603
- ${of}`);if(n.positionals.length>2)return N(e,`unexpected argument: ${n.positionals[2]}`);let s=n.positionals[0],i=an(s),o=i?.teamfile??s,a=n.positionals[1],l=i?.alias??a;if(i!==null&&a!==void 0)return N(e,"recover alias was provided twice; use either <teamfile>:<alias> or <teamfile> <alias>");if(V(n,"--all")&&l!==void 0)return N(e,"recover --all is mutually exclusive with <alias>");let d;try{d=await tB(e,o,l)}catch(p){if(p instanceof ke)return N(e,p.message);throw p}let c=r.now??new Date,u=V(n,"--dry-run"),m=[];for(let p of d)m.push(await rB(e,p,{now:c,dryRun:u}));let f={checked:m.length,recovered:m.filter(p=>p.action==="recovered").length,wouldRecover:m.filter(p=>p.action==="would_recover").length,skipped:m.filter(p=>p.action!=="recovered"&&p.action!=="would_recover").length,errors:m.filter(p=>p.action==="load_error"||p.action==="send_error").length};if(V(n,"--json"))re(e,{dryRun:u,now:c.toISOString(),summary:f,members:m});else{for(let p of m)e.stdout.write(nB(p));e.stdout.write(`Recover checked ${f.checked}: ${u?`${f.wouldRecover} would recover`:`${f.recovered} recovered`}, ${f.skipped} skipped, ${f.errors} error(s).
2606
+ ${of}`);if(n.positionals.length>2)return N(e,`unexpected argument: ${n.positionals[2]}`);let s=n.positionals[0],i=ln(s),o=i?.teamfile??s,a=n.positionals[1],l=i?.alias??a;if(i!==null&&a!==void 0)return N(e,"recover alias was provided twice; use either <teamfile>:<alias> or <teamfile> <alias>");if(V(n,"--all")&&l!==void 0)return N(e,"recover --all is mutually exclusive with <alias>");let d;try{d=await tB(e,o,l)}catch(p){if(p instanceof ke)return N(e,p.message);throw p}let c=r.now??new Date,u=V(n,"--dry-run"),m=[];for(let p of d)m.push(await rB(e,p,{now:c,dryRun:u}));let f={checked:m.length,recovered:m.filter(p=>p.action==="recovered").length,wouldRecover:m.filter(p=>p.action==="would_recover").length,skipped:m.filter(p=>p.action!=="recovered"&&p.action!=="would_recover").length,errors:m.filter(p=>p.action==="load_error"||p.action==="send_error").length};if(V(n,"--json"))re(e,{dryRun:u,now:c.toISOString(),summary:f,members:m});else{for(let p of m)e.stdout.write(nB(p));e.stdout.write(`Recover checked ${f.checked}: ${u?`${f.wouldRecover} would recover`:`${f.recovered} recovered`}, ${f.skipped} skipped, ${f.errors} error(s).
2604
2607
  `)}return f.errors>0?1:0}async function tB(t,e,r){return await O(t,n=>{let s=Se(e,n);if(r!==void 0){let i=Ve(s,n);if(i.parseErrors.length>0)throw new ke(`lmctl: ${e}: ${i.parseErrors.join("; ")}`);let o=Va(i,r);return o?.teamfile!==void 0?af(OS(LS(s),o.teamfile),n,new Set):[Ne(e,r,n)]}return af(s,n,new Set)})}function af(t,e,r){let n=Se(t,e);if(r.has(n))return[];r.add(n);let s=Ve(n,e);if(s.parseErrors.length>0)throw new ke(`lmctl: ${n}: ${s.parseErrors.join("; ")}`);let i=[];for(let o of s.members){if(o.teamfile!==void 0){i.push(...af(OS(LS(n),o.teamfile),e,r));continue}o.session!==void 0&&i.push(Ne(n,o.alias,e))}return i}async function rB(t,e,r){let n;try{let a=await Ue(e.sessionid,e.provider);if(a===null)return Kt(e,"session_not_found",null,"session detail not found");n=wi(a.messages)}catch(a){return Kt(e,"load_error",null,a instanceof Error?a.message:String(a))}if(n===null)return Kt(e,"not_limited",null,"no current session-limit marker");if(n.resets_at===null)return Kt(e,"unknown_reset",n,"reset time could not be parsed");let s=Date.parse(n.resets_at);if(!Number.isFinite(s))return Kt(e,"unknown_reset",n,"reset time could not be parsed");if(s>r.now.getTime())return Kt(e,"not_due",n,`resets_at ${n.resets_at} is in the future`);let i=await O(t,a=>a.getAgentInflight(e.teamfile,e.alias));if(i!==null)return Kt(e,"busy",n,`in-flight since ${i.started_at}`);if(r.dryRun)return Kt(e,"would_recover",n,null);let o=await El({teamfile:e.teamfile,alias:e.alias,prompt:Qq,permissionMode:"yolo",io:t,env:process.env});return o.status==="ok"||o.status==="stalled"?Kt(e,"recovered",n,null):Kt(e,o.status==="busy"?"busy":"send_error",n,o.message)}function Kt(t,e,r,n){return{alias:t.alias,teamfile:t.teamfile,provider:t.provider,sessionid:t.sessionid,action:e,sessionLimit:r,reason:n}}function nB(t){let e=t.sessionLimit?.resets_at??"unknown",r=t.reason===null?"":` (${t.reason})`;return`${t.alias}: ${t.action} resets_at=${e}${r}
2605
2608
  `}var Qq,of,$S=w(()=>{"use strict";sf();Xt();ur();mr();at();nf();Me();Qq="Your session limit reset time has passed. Continue your work from the last actionable point.",of=["usage: lmctl recover <teamfile> [--all|<alias>] [--dry-run] [--json]"," lmctl recover <teamfile>:<alias> [--dry-run] [--json]","","Wake team members whose latest provider output is a session-limit message","and whose resets_at time has passed. Defaults to the full teamfile report","subtree. A busy/in-flight member is skipped."].join(`
2606
2609
  `)});var Ti,Vee,lf=w(()=>{"use strict";Ti=[{name:"lmctl_chat",description:"Synchronous/blocking backup: send one prompt to a member of an AI-managed .lmctl team \u2014 addressed by teamfile path (team) and alias \u2014 and return the reply. This is the only MCP tool lmctl exposes. Prefer the CLI for normal delegation. For async or long-running work, use the provider or host runtime background/task surface around the blocking command.",inputSchema:{type:"object",properties:{team:{type:"string",description:"Path to .lmctl teamfile"},alias:{type:"string",description:"Target alias; omitted means Lead"},prompt:{type:"string",description:"Prompt text to send"}},required:["team","prompt"]},local:!0}],Vee=Ti.length});import{spawn as sB}from"node:child_process";async function DS(t,e,r){let n=oB.get(t);if(n===void 0)return{status:"error",code:404,message:`unknown tool: ${t}`};let s=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{};for(let i of n.inputSchema.required??[])if(s[i]===void 0)return{status:"error",code:400,message:`missing required parameter: ${i}`};return aB(n.name,s)}function aB(t,e){return t==="lmctl_chat"?lB(e):{status:"error",code:404,message:`unknown local tool: ${t}`}}function lB(t){let e=typeof t.prompt=="string"?t.prompt:"";if(e.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: prompt"});let r=typeof t.team=="string"?t.team:"";if(r.length===0)return Promise.resolve({status:"error",code:400,message:"missing required parameter: team"});let n=typeof t.alias=="string"&&t.alias.length>0?t.alias:"Lead",s=["chat",r,n,e];return ue()&&Pe(JSON.stringify({event:"mcp_chat_spawn",team:r,alias:n})),dB(s,process.cwd())}function dB(t,e){return new Promise(r=>{let n=!1,s,i=c=>{n||(n=!0,s!==void 0&&clearTimeout(s),r(c))},o=sB("lmctl",t,{cwd:e,env:process.env,stdio:["ignore","pipe","pipe"]}),a=cB(process.env);s=setTimeout(()=>{try{o.kill("SIGTERM")}catch{}i({status:"error",code:124,message:`lmctl chat timed out after ${a}ms`})},a),s.unref?.();let l="",d="";o.stdout?.on("data",c=>{l+=c.toString("utf8")}),o.stderr?.on("data",c=>{d+=c.toString("utf8")}),o.on("error",c=>{i({status:"error",code:1,message:`failed to spawn lmctl chat: ${c.message}`})}),o.on("exit",c=>{if(c===0){ue()&&Pe(JSON.stringify({event:"mcp_chat_payload",bytes:Buffer.byteLength(l,"utf8"),lines:l.split(`
@@ -2614,20 +2617,20 @@ ${of}`);if(n.positionals.length>2)return N(e,`unexpected argument: ${n.positiona
2614
2617
  Start the stdio MCP bridge. The bridge resolves api.url and api.token from
2615
2618
  local config, then uses stdin/stdout for JSON-RPC frames.
2616
2619
  `});var qS={};he(qS,{runDevice:()=>xB});import{readFileSync as EB}from"node:fs";import{homedir as wB}from"node:os";import{join as TB}from"node:path";import{CognitoIdentityClient as vB,GetIdCommand as bB}from"@aws-sdk/client-cognito-identity";import{fromCognitoIdentity as SB}from"@aws-sdk/credential-provider-cognito-identity";import{GetObjectCommand as kB,ListObjectsV2Command as IB,PutObjectCommand as NB,S3Client as AB}from"@aws-sdk/client-s3";async function xB(t,e={stdout:process.stdout,stderr:process.stderr}){let[r]=t;if(r===void 0||r==="--help"||r==="-h"||r==="help")return e.stdout.write(mf),0;if(r==="init"){let n=Bm();return e.stdout.write(`${n.device_id}
2617
- `),0}if(r==="id"){let n=ln();return n===null?(e.stderr.write(`error: no device id initialized at ${ul()}; run 'lmctl device init'
2620
+ `),0}if(r==="id"){let n=dn();return n===null?(e.stderr.write(`error: no device id initialized at ${ul()}; run 'lmctl device init'
2618
2621
  `),1):(e.stdout.write(`${n.device_id}
2619
2622
  `),0)}return r==="login"?await RB(t.slice(1),e):r==="prompt"?await OB(t.slice(1),e):(e.stderr.write(`usage: lmctl device <id|init|login|prompt>
2620
2623
  `),1)}async function RB(t,e){let r=LB(t);if(typeof r=="string")return e.stderr.write(`error: ${r}
2621
2624
  ${mf}`),2;let n=pi();if(n.config===void 0)return e.stderr.write(`error: mailbox is not configured; missing ${n.missing.join(", ")}
2622
2625
  `),1;sb({userId:r.userId,refreshToken:r.accessKey});let s,i,o;try{let d=await il({region:n.config.region,clientId:n.config.cognitoClientId??cl,refreshToken:r.accessKey});s=d.idToken,i=d.accessToken,o=d.expiresAt}catch(d){let c=d instanceof Error?d.message:String(d);return e.stderr.write(`error: could not authenticate access key: ${c}
2623
2626
  `),1}let a=ui(s);if(a!==null&&a!==r.userId)return e.stderr.write(`error: access key belongs to user-id ${a}, not ${r.userId}
2624
- `),1;$m({idToken:s,...i!==void 0?{accessToken:i}:{},refreshToken:r.accessKey,...o!==void 0?{expiresAt:o}:{}});let l=ln()??Bm();return e.stdout.write(`logged in as ${r.userId}
2627
+ `),1;$m({idToken:s,...i!==void 0?{accessToken:i}:{},refreshToken:r.accessKey,...o!==void 0?{expiresAt:o}:{}});let l=dn()??Bm();return e.stdout.write(`logged in as ${r.userId}
2625
2628
  device id: ${l.device_id}
2626
2629
  mailbox prefix: ${r.userId}/${l.device_id}/
2627
2630
  access key stored at ${mi()}
2628
2631
  `),0}function LB(t){let e,r;for(let n=0;n<t.length;n+=1){let s=t[n];if(s==="--user-id"){let i=t[++n];if(i===void 0||i.startsWith("--"))return"missing value for --user-id";e=i;continue}if(s==="--access-key"){let i=t[++n];if(i===void 0||i.startsWith("--"))return"missing value for --access-key";r=i;continue}return`unknown argument: ${s}`}return e===void 0?"missing --user-id <sub>":r===void 0?"missing --access-key <refreshToken>":{userId:e,accessKey:r}}async function OB(t,e){let r=CB(t);if(typeof r=="string")return e.stderr.write(`error: ${r}
2629
2632
  ${mf}`),2;let n=pi();if(n.config===void 0)return e.stderr.write(`error: mailbox is not configured; missing ${n.missing.join(", ")}
2630
- `),1;let s=MB();if(s===null)return e.stderr.write("error: no Cognito id token found; run `webcli login` or `lmctl device login` first\n"),1;let i=s.cognito?.idToken;if(typeof i!="string"||i.length===0)return e.stderr.write("error: no Cognito id token found; run `webcli login` or `lmctl device login` first\n"),1;let o=`cognito-idp.${n.config.region}.amazonaws.com/${n.config.cognitoUserPoolId}`,a=typeof s.cognito?.identityId=="string"&&s.cognito.identityId.length>0?s.cognito.identityId:await $B({region:n.config.region,identityPoolId:n.config.identityPoolId,idpProvider:o,idToken:i}),l=SB({identityId:a,logins:{[o]:i},clientConfig:{region:n.config.region}}),d=n.config.deviceId??ln()?.device_id,c=ui(i)??void 0,u=new sn({bucket:n.config.mailboxBucket,identityId:a,...c!==void 0?{userId:c}:{},...d!==void 0?{deviceId:d}:{},...n.config.mailboxKey!==void 0?{mailboxKey:n.config.mailboxKey}:{},s3:new AB({region:n.config.region,credentials:l}),commands:{ListObjectsV2Command:IB,GetObjectCommand:kB,PutObjectCommand:NB},selfRole:"browser",onMessage:async()=>{}}),m=Gv({root_teamfile:r.root,text:r.text,...r.promptId!==void 0?{prompt_id:r.promptId}:{}}),f=await u.putMessage({conversation_id:Jv,payload:m});return e.stdout.write(JSON.stringify({prompt_id:m.prompt_id,mailbox_key:u.getMailboxBasePrefix(),object_key:f},null,2)+`
2633
+ `),1;let s=MB();if(s===null)return e.stderr.write("error: no Cognito id token found; run `webcli login` or `lmctl device login` first\n"),1;let i=s.cognito?.idToken;if(typeof i!="string"||i.length===0)return e.stderr.write("error: no Cognito id token found; run `webcli login` or `lmctl device login` first\n"),1;let o=`cognito-idp.${n.config.region}.amazonaws.com/${n.config.cognitoUserPoolId}`,a=typeof s.cognito?.identityId=="string"&&s.cognito.identityId.length>0?s.cognito.identityId:await $B({region:n.config.region,identityPoolId:n.config.identityPoolId,idpProvider:o,idToken:i}),l=SB({identityId:a,logins:{[o]:i},clientConfig:{region:n.config.region}}),d=n.config.deviceId??dn()?.device_id,c=ui(i)??void 0,u=new on({bucket:n.config.mailboxBucket,identityId:a,...c!==void 0?{userId:c}:{},...d!==void 0?{deviceId:d}:{},...n.config.mailboxKey!==void 0?{mailboxKey:n.config.mailboxKey}:{},s3:new AB({region:n.config.region,credentials:l}),commands:{ListObjectsV2Command:IB,GetObjectCommand:kB,PutObjectCommand:NB},selfRole:"browser",onMessage:async()=>{}}),m=Gv({root_teamfile:r.root,text:r.text,...r.promptId!==void 0?{prompt_id:r.promptId}:{}}),f=await u.putMessage({conversation_id:Jv,payload:m});return e.stdout.write(JSON.stringify({prompt_id:m.prompt_id,mailbox_key:u.getMailboxBasePrefix(),object_key:f},null,2)+`
2631
2634
  `),0}function CB(t){let e,r,n;for(let s=0;s<t.length;s+=1){let i=t[s];if(i==="--root"){let o=t[++s];if(o===void 0||o.startsWith("--"))return"missing value for --root";e=o;continue}if(i==="--text"){let o=t[++s];if(o===void 0||o.startsWith("--"))return"missing value for --text";r=o;continue}if(i==="--prompt-id"){let o=t[++s];if(o===void 0||o.startsWith("--"))return"missing value for --prompt-id";n=o;continue}return`unknown argument: ${i}`}return e===void 0?"missing --root <teamfile>":r===void 0?"missing --text <prompt>":{root:e,text:r,...n!==void 0?{promptId:n}:{}}}async function $B(t){let r=await new vB({region:t.region}).send(new bB({IdentityPoolId:t.identityPoolId,Logins:{[t.idpProvider]:t.idToken}}));if(r.IdentityId===void 0||r.IdentityId.length===0)throw new Error("Cognito GetId returned no IdentityId");return r.IdentityId}function MB(t=process.env.LMCTL_TOKEN_PATH??TB(wB(),".lmctl","cli-tokens.json")){try{return JSON.parse(EB(t,"utf8"))}catch{return null}}var mf,BS=w(()=>{"use strict";Hm();Pm();Aa();Rm();Lm();Mm();Om();mf=`usage: lmctl device <id|init|login|prompt>
2632
2635
  lmctl device login --user-id <sub> --access-key <refreshToken>
2633
2636
  lmctl device prompt --root <teamfile> --text <prompt> [--prompt-id <id>]
@@ -2652,7 +2655,7 @@ token). The access key is stored in ~/.lmctl/device-auth.json (chmod 600).
2652
2655
  `),e.stdout.write(` db: ${i.db.delivered?"delivered":i.db.handled?"handled":"not delivered"}
2653
2656
  `),e.stdout.write(` transcript: ${i.transcript.checked?i.transcript.found?`seen at ${i.transcript.seen_at}`:"not found":`not checked (${i.transcript.reason})`}
2654
2657
  `),e.stdout.write(` answered: ${i.answered?.via??"no evidence"}
2655
- `)),0}async function iH(t,e){if(gr(t))return e.stdout.write(GB),0;let r=Vt(t),n=Q(Tl(t,["--receiver","--limit"]),["--receiver","--limit"],["--json"]);if(n.error!==void 0)return ee(e,r,"invalid_arguments",n.error);if(n.positionals.length>0)return ee(e,r,"invalid_arguments",`unknown argument: ${n.positionals[0]}`);let s=pf(P(n,"--receiver"));if("error"in s)return ee(e,r,"invalid_arguments",s.error);let i=hf(P(n,"--limit"));if("error"in i)return ee(e,r,"invalid_arguments",i.error);let o=await O(e,l=>{let d=s.value;if(d===null){let f=dn(e.env??process.env,l);if(f.ok)d=De(f.identity);else if(f.reason==="not-found")throw new Ee("self_identity",fr("mail pending"))}let c=d===null?"":"WHERE receiver_teamfile = ? AND receiver_alias = ?",u=d===null?[]:[d.teamfile,d.alias],m=l.db.prepare(`SELECT message_id, message_type, in_reply_to, sender_teamfile, sender_alias,
2658
+ `)),0}async function iH(t,e){if(gr(t))return e.stdout.write(GB),0;let r=Vt(t),n=Q(Tl(t,["--receiver","--limit"]),["--receiver","--limit"],["--json"]);if(n.error!==void 0)return ee(e,r,"invalid_arguments",n.error);if(n.positionals.length>0)return ee(e,r,"invalid_arguments",`unknown argument: ${n.positionals[0]}`);let s=pf(P(n,"--receiver"));if("error"in s)return ee(e,r,"invalid_arguments",s.error);let i=hf(P(n,"--limit"));if("error"in i)return ee(e,r,"invalid_arguments",i.error);let o=await O(e,l=>{let d=s.value;if(d===null){let f=cn(e.env??process.env,l);if(f.ok)d=De(f.identity);else if(f.reason==="not-found")throw new Ee("self_identity",fr("mail pending"))}let c=d===null?"":"WHERE receiver_teamfile = ? AND receiver_alias = ?",u=d===null?[]:[d.teamfile,d.alias],m=l.db.prepare(`SELECT message_id, message_type, in_reply_to, sender_teamfile, sender_alias,
2656
2659
  receiver_teamfile, receiver_alias, lifecycle_state, created_seq
2657
2660
  FROM message_pending ${c}
2658
2661
  ORDER BY created_seq ASC LIMIT ?`).all(...u,i.value);return{receiver:d,messages:m}}),a={schema_version:_r,schema:"event-log-v1",filters:{receiver:o.receiver===null?null:`${o.receiver.teamfile}:${o.receiver.alias}`,limit:i.value},messages:o.messages.map(l=>({message_id:l.message_id,message_type:l.message_type,in_reply_to:l.in_reply_to,sender:l.sender_teamfile===null?null:{teamfile:l.sender_teamfile,alias:l.sender_alias??""},receiver:{teamfile:l.receiver_teamfile,alias:l.receiver_alias},lifecycle_state:l.lifecycle_state,created_seq:l.created_seq}))};if(V(n,"--json"))re(e,a);else if(a.messages.length===0)e.stdout.write(`no pending messages
@@ -2669,9 +2672,9 @@ ${i.content}
2669
2672
  `),0}function dH(t,e){let r=t.db.prepare(`SELECT * FROM message_event
2670
2673
  WHERE stream_id = ? AND event_type IN ('CREATE', 'RESPONSE_CREATE')
2671
2674
  ORDER BY seq ASC LIMIT 1`).get(e);if(r===void 0)throw new Ee("not_found",`no such message: ${e}`);let n=wl(r),s=t.db.prepare(`SELECT message_type, lifecycle_state
2672
- FROM message_pending WHERE message_id = ?`).get(e);if(s===void 0)throw new Ee("invalid_state",`${e} is not pending`);if(s.lifecycle_state!=="queued")throw new Ee("invalid_state",`${e} is ${s.lifecycle_state}; only queued messages can be delivered`);let i=cn(n.payload.legacy)?n.payload.legacy:null,o=nk(i?.id);if(i?.table!=="agent_mailbox"||o===null||!Number.isSafeInteger(o)||o<1)throw new Ee("data_error",`${e} does not reference a deliverable agent_mailbox row`);let a=t.getMailboxMessage(o);if(a===null)throw new Ee("data_error",`${e} references missing mailbox row ${o}`);if(a.message_type!==s.message_type||a.receiver_teamfile!==n.receiver_teamfile||a.receiver_alias!==n.receiver_alias)throw new Ee("data_error",`${e} mailbox/event identity does not match`);if(a.delivered_at!==null||a.delivering_at!==null)throw new Ee("invalid_state",`${e} legacy delivery state is not queued`);if(n.receiver_teamfile===null||n.receiver_alias===null)throw new Ee("data_error",`${e} is missing receiver identity`);return{row:a,messageId:e,messageType:s.message_type,receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias},leaseSender:a.sender_teamfile===null||a.sender_alias===null?{teamfile:a.receiver_teamfile,alias:"operator"}:{teamfile:a.sender_teamfile,alias:a.sender_alias}}}async function cH(t,e,r){let n=_t(t,r.receiver.teamfile,r.receiver.alias),s=!1;if(n.busy){if(n.reason==="terminal-held")return{outcome:"skipped_terminal",providerStatus:null,message:"receiver is terminal-held"};if(!await ns(t,n,r.receiver.teamfile,r.receiver.alias))return{outcome:"skipped_busy",providerStatus:null,message:"receiver is busy"};s=!0}let i=Ne(r.receiver.teamfile,r.receiver.alias,t),o=Lt(t,{receiver_teamfile:r.receiver.teamfile,receiver_alias:r.receiver.alias,sender_teamfile:r.leaseSender.teamfile,sender_alias:r.leaseSender.alias,ttlMs:qt(),...s?{force:!0,reclaimReason:"session-idle"}:{}});if(!o.acquired)return{outcome:"skipped_busy",providerStatus:null,message:"receiver lease was acquired elsewhere"};let a={row:o.lease,leaseId:o.leaseId},l=e.env??process.env,d=Er(c=>t.heartbeatAgentInflight(a.row,a.leaseId,c),{intervalMs:gn(l)});try{let c={teamfile:r.receiver.teamfile,alias:r.receiver.alias,provider:i.provider,sessionId:i.sessionid,cwd:i.sessiondir,...i.model!==void 0?{model:i.model}:{},...i.effort!==void 0?{effort:i.effort}:{},...i.isLead!==void 0?{isLead:i.isLead}:{}};if(r.messageType==="response"){let p=await Ha({sender:r.leaseSender,receiver:c,io:e,permissionMode:"yolo",env:l,onlyMailboxId:r.row.id}),h=t.getMailboxMessage(r.row.id),_=h!==null&&h.delivered_at!==null;return p.status==="ok"&&_?{outcome:"delivered",providerStatus:"ok",message:null}:{outcome:"error",providerStatus:p.status,message:p.error??(p.status==="stalled"?"provider stalled during response delivery":"response delivery was not finalized")}}let u=await es({sender:r.leaseSender,receiver:c,io:e,permissionMode:"yolo",env:l,finalize:"caller",onlyMailboxId:r.row.id}),m=uH(u),f=0;try{f=t.markRelayRequestDeliveredAndEnqueueResponses(u.queued,m,new Date().toISOString()).marked}catch(p){return{outcome:"error",providerStatus:u.status,message:`delivery finalization failed: ${p instanceof Error?p.message:String(p)}`}}return u.status==="ok"&&f===1?{outcome:"delivered",providerStatus:"ok",message:null}:{outcome:"error",providerStatus:u.status,message:u.status==="stalled"?"provider stalled during request delivery":u.status==="error"?u.error:"request delivery was not finalized"}}catch(c){throw c instanceof Error&&/^no queued (?:response )?mail to deliver/.test(c.message)?new Ee("invalid_state",`${r.messageId} was no longer queued when delivery claimed it`):c}finally{clearInterval(d);try{t.releaseAgentInflight(a.row,a.leaseId)}catch{}}}function uH(t){return t.status==="ok"?t.receipt:t.status==="stalled"?`relay delivery error: provider stalled${t.stalledAfterMs!==void 0?` after ${t.stalledAfterMs}ms`:""}
2675
+ FROM message_pending WHERE message_id = ?`).get(e);if(s===void 0)throw new Ee("invalid_state",`${e} is not pending`);if(s.lifecycle_state!=="queued")throw new Ee("invalid_state",`${e} is ${s.lifecycle_state}; only queued messages can be delivered`);let i=un(n.payload.legacy)?n.payload.legacy:null,o=nk(i?.id);if(i?.table!=="agent_mailbox"||o===null||!Number.isSafeInteger(o)||o<1)throw new Ee("data_error",`${e} does not reference a deliverable agent_mailbox row`);let a=t.getMailboxMessage(o);if(a===null)throw new Ee("data_error",`${e} references missing mailbox row ${o}`);if(a.message_type!==s.message_type||a.receiver_teamfile!==n.receiver_teamfile||a.receiver_alias!==n.receiver_alias)throw new Ee("data_error",`${e} mailbox/event identity does not match`);if(a.delivered_at!==null||a.delivering_at!==null)throw new Ee("invalid_state",`${e} legacy delivery state is not queued`);if(n.receiver_teamfile===null||n.receiver_alias===null)throw new Ee("data_error",`${e} is missing receiver identity`);return{row:a,messageId:e,messageType:s.message_type,receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias},leaseSender:a.sender_teamfile===null||a.sender_alias===null?{teamfile:a.receiver_teamfile,alias:"operator"}:{teamfile:a.sender_teamfile,alias:a.sender_alias}}}async function cH(t,e,r){let n=_t(t,r.receiver.teamfile,r.receiver.alias),s=!1;if(n.busy){if(n.reason==="terminal-held")return{outcome:"skipped_terminal",providerStatus:null,message:"receiver is terminal-held"};if(!await ns(t,n,r.receiver.teamfile,r.receiver.alias))return{outcome:"skipped_busy",providerStatus:null,message:"receiver is busy"};s=!0}let i=Ne(r.receiver.teamfile,r.receiver.alias,t),o=Lt(t,{receiver_teamfile:r.receiver.teamfile,receiver_alias:r.receiver.alias,sender_teamfile:r.leaseSender.teamfile,sender_alias:r.leaseSender.alias,ttlMs:qt(),...s?{force:!0,reclaimReason:"session-idle"}:{}});if(!o.acquired)return{outcome:"skipped_busy",providerStatus:null,message:"receiver lease was acquired elsewhere"};let a={row:o.lease,leaseId:o.leaseId},l=e.env??process.env,d=Er(c=>t.heartbeatAgentInflight(a.row,a.leaseId,c),{intervalMs:yn(l)});try{let c={teamfile:r.receiver.teamfile,alias:r.receiver.alias,provider:i.provider,sessionId:i.sessionid,cwd:i.sessiondir,...i.model!==void 0?{model:i.model}:{},...i.effort!==void 0?{effort:i.effort}:{},...i.isLead!==void 0?{isLead:i.isLead}:{}};if(r.messageType==="response"){let p=await Ha({sender:r.leaseSender,receiver:c,io:e,permissionMode:"yolo",env:l,onlyMailboxId:r.row.id}),h=t.getMailboxMessage(r.row.id),_=h!==null&&h.delivered_at!==null;return p.status==="ok"&&_?{outcome:"delivered",providerStatus:"ok",message:null}:{outcome:"error",providerStatus:p.status,message:p.error??(p.status==="stalled"?"provider stalled during response delivery":"response delivery was not finalized")}}let u=await es({sender:r.leaseSender,receiver:c,io:e,permissionMode:"yolo",env:l,finalize:"caller",onlyMailboxId:r.row.id}),m=uH(u),f=0;try{f=t.markRelayRequestDeliveredAndEnqueueResponses(u.queued,m,new Date().toISOString()).marked}catch(p){return{outcome:"error",providerStatus:u.status,message:`delivery finalization failed: ${p instanceof Error?p.message:String(p)}`}}return u.status==="ok"&&f===1?{outcome:"delivered",providerStatus:"ok",message:null}:{outcome:"error",providerStatus:u.status,message:u.status==="stalled"?"provider stalled during request delivery":u.status==="error"?u.error:"request delivery was not finalized"}}catch(c){throw c instanceof Error&&/^no queued (?:response )?mail to deliver/.test(c.message)?new Ee("invalid_state",`${r.messageId} was no longer queued when delivery claimed it`):c}finally{clearInterval(d);try{t.releaseAgentInflight(a.row,a.leaseId)}catch{}}}function uH(t){return t.status==="ok"?t.receipt:t.status==="stalled"?`relay delivery error: provider stalled${t.stalledAfterMs!==void 0?` after ${t.stalledAfterMs}ms`:""}
2673
2676
  ${t.receipt}`:`relay delivery error: ${t.error}`}async function mH(t,e){if(gr(t))return e.stdout.write(YB),0;let r=Vt(t),n=Q(Tl(t,["--note"]),["--note"],["--terminalize-pending","--json"]);if(n.error!==void 0)return ee(e,r,"invalid_arguments",n.error);let s=cs(n.positionals,"ack");if("error"in s)return ee(e,r,"invalid_id",s.error);let i=P(n,"--note"),o=await O(e,l=>{if(l.db.prepare(`SELECT 1 FROM message_event
2674
- WHERE stream_id = ? AND event_type IN ('CREATE', 'RESPONSE_CREATE') LIMIT 1`).get(s.value)===void 0)throw new Ee("not_found",`no such message: ${s.value}`);let c=dn(e.env??process.env,l);if(!c.ok&&c.reason==="not-found")throw new Ee("self_identity",fr("mail ack"));let u=c.ok?c.identity:"operator",m=l.db.transaction(()=>{let f=s_(l.db,{messageId:s.value,ackedBy:u,...i!==void 0?{note:i}:{},holderPid:process.pid,holderHost:FB(),terminalizePending:V(n,"--terminalize-pending")});if(c.ok){let p=De(c.identity);l.clearCurrentlyHandlingMessage(p.teamfile,p.alias,s.value)}return f})();return{ackedBy:u,ack:m}}),a={schema_version:_r,schema:"event-log-v1",message_id:s.value,acked_by:o.ackedBy,appended:o.ack.appended,pending_outcome:o.ack.pending_outcome};return V(n,"--json")?re(e,a):e.stdout.write(`${a.appended?"acknowledged":"already acknowledged"} ${a.message_id} as ${a.acked_by} (${a.pending_outcome})
2677
+ WHERE stream_id = ? AND event_type IN ('CREATE', 'RESPONSE_CREATE') LIMIT 1`).get(s.value)===void 0)throw new Ee("not_found",`no such message: ${s.value}`);let c=cn(e.env??process.env,l);if(!c.ok&&c.reason==="not-found")throw new Ee("self_identity",fr("mail ack"));let u=c.ok?c.identity:"operator",m=l.db.transaction(()=>{let f=s_(l.db,{messageId:s.value,ackedBy:u,...i!==void 0?{note:i}:{},holderPid:process.pid,holderHost:FB(),terminalizePending:V(n,"--terminalize-pending")});if(c.ok){let p=De(c.identity);l.clearCurrentlyHandlingMessage(p.teamfile,p.alias,s.value)}return f})();return{ackedBy:u,ack:m}}),a={schema_version:_r,schema:"event-log-v1",message_id:s.value,acked_by:o.ackedBy,appended:o.ack.appended,pending_outcome:o.ack.pending_outcome};return V(n,"--json")?re(e,a):e.stdout.write(`${a.appended?"acknowledged":"already acknowledged"} ${a.message_id} as ${a.acked_by} (${a.pending_outcome})
2675
2678
  `),0}async function fH(t,e){if(gr(t))return e.stdout.write(zB),0;let r=Vt(t),n=Q(t,[],["--json"]);if(n.error!==void 0)return ee(e,r,"invalid_arguments",n.error);let s=cs(n.positionals,"handle");if("error"in s)return ee(e,r,"invalid_id",s.error);let i=await O(e,a=>{if(a.db.prepare(`SELECT 1 FROM message_event
2676
2679
  WHERE stream_id = ? AND event_type IN ('CREATE', 'RESPONSE_CREATE') LIMIT 1`).get(s.value)===void 0)throw new Ee("not_found",`no such message: ${s.value}`);let d=De(_f(a,e,"mail handle"));return{identity:d,handling:n_(a.db,{messageId:s.value,handlingBy:d.value,handlingTeamfile:d.teamfile,handlingAlias:d.alias})}}),o={schema_version:_r,schema:"event-log-v1",message_id:s.value,handling_by:i.identity.value,handling_at:i.handling.handling_at,appended:i.handling.appended};return V(n,"--json")?re(e,o):e.stdout.write(`${o.appended?"handling":"handling refreshed"} ${o.message_id} as ${o.handling_by} since ${o.handling_at}
2677
2680
  `),0}async function pH(t,e){if(gr(t))return e.stdout.write(eH),0;let r=Vt(t),n=Q(Tl(t,["--root","--since","--limit","--cursor"]),["--root","--since","--limit","--cursor"],["--json"]);if(n.error!==void 0)return ee(e,r,"invalid_arguments",n.error);if(n.positionals.length>0)return ee(e,r,"invalid_arguments",`unknown argument: ${n.positionals[0]}`);let s=ek(P(n,"--since"),UB);if("error"in s)return ee(e,r,"invalid_arguments",s.error);let i=pf(P(n,"--root"));if("error"in i)return ee(e,r,"invalid_arguments",i.error);let o=hf(P(n,"--limit"));if("error"in o)return ee(e,r,"invalid_arguments",o.error);let a=rk(P(n,"--cursor"),"tree");if("error"in a)return ee(e,r,"invalid_arguments",a.error);if(a.value!==null&&(P(n,"--root")!==void 0||P(n,"--since")!==void 0))return ee(e,r,"invalid_arguments","--cursor cannot be combined with --root or --since; the cursor retains the original filters");let l=await O(e,d=>{let c=a.value===null?i.value??De(_f(d,e,"mail tree")):De(a.value.root),u=a.value?.since??s.iso,m=a.value?.since_label??P(n,"--since")??"24h",f=XS(d,{root:{teamfile:c.teamfile,alias:c.alias},since:u,limit:o.value,cursorSeq:a.value?.seq??null}),p=f.next_seq===null?null:tk({v:1,kind:"tree",seq:f.next_seq,root:c.value,since:u,since_label:m});return{schema_version:_r,schema:"event-log-v1",root:{teamfile:c.teamfile,alias:c.alias},since:m,since_timestamp:u,sent:f.sent,next_cursor:p,orphan_policy:"Missing causal linkage, including a genuinely fresh or unprompted send before any inbound delivery, is surfaced as a root; no temporal fallback is used.",incomplete_capture_note:"External composition is causally linked by calling mail handle before a reactive send. A send remains an orphan root when no handle was declared or the handling pointer exceeded its one-hour TTL."}});if(V(n,"--json"))re(e,l);else{e.stdout.write(`Causal mail tree for ${l.root.teamfile}:${l.root.alias} since ${l.since_timestamp}
@@ -2688,7 +2691,7 @@ Note: ${l.orphan_policy}
2688
2691
  WHERE ${a.join(" AND ")}
2689
2692
  ORDER BY e.seq DESC
2690
2693
  LIMIT ?
2691
- `).all(...l),c=d.length>i,u=d.slice(0,i);return{messages:u.map(f=>{if(f.receiver_teamfile===null||f.receiver_alias===null)throw new Ee("data_error",`${f.stream_id} ${f.event_type} is missing receiver identity`);return{message_id:f.stream_id,receiver:{teamfile:f.receiver_teamfile,alias:f.receiver_alias},message_type:f.event_type==="RESPONSE_CREATE"?"response":"request",created_at:f.ts,lifecycle_state:hH(t,f)}}),next_seq:c?u.at(-1).seq:null}}function hH(t,e){return e.pending_message_id!==null?e.delivery_lease_id!==null||e.pending_state==="claimed"?"delivering":"queued":t.db.prepare("SELECT 1 FROM message_event WHERE stream_id = ? AND event_type = 'HANDLED' LIMIT 1").get(e.stream_id)===void 0?"delivered":"handled"}async function gH(t,e){let r=ZS(t,e),n=r.find(m=>IH(m.event_type))??r[0],s=[...r].reverse().find(m=>HB.includes(m.event_type))??null,i=[...r].reverse().find(m=>m.event_type==="HANDLED")??null,o=yH(t,e,r),a=bH(t,e),l=vi(n.payload.provider_prompt),d=TH(n.payload),c=await EH(o,{messageId:e,providerPrompt:l,legacyMailboxId:d,evidenceAt:s?.ts??i?.ts??null}),u=a===null&&c.matched_index!==null&&c.messages!==null?vH(c.messages,c.matched_index):null;return{schema_version:_r,schema:"event-log-v1",message_id:e,receiver:n.receiver_teamfile===null||n.receiver_alias===null?null:{teamfile:n.receiver_teamfile,alias:n.receiver_alias},db:{delivered:s!==null,handled:i!==null,delivered_at:s?.ts??i?.ts??null,delivered_by:s===null?null:SH(s.payload)},transcript:{checked:c.checked,found:c.matched_index!==null,seen_at:c.seen_at,session_id:o?.session_id??null,provider:o?.provider??null,reason:c.reason},answered:a!==null?{via:"db_response_event",response_message_id:a.stream_id,at:a.ts}:u===null?null:{via:"transcript_heuristic",response_message_id:null,at:u.timestamp.toISOString()}}}function ZS(t,e){let r=t.db.prepare("SELECT * FROM message_event WHERE stream_id = ? ORDER BY seq ASC").all(e);if(r.length===0)throw new Ee("not_found",`message stream not found: ${e}`);return r.map(wl)}function wl(t){try{let e=JSON.parse(t.payload);if(!cn(e))throw new Ee("data_error",`message_event seq ${t.seq} payload is not an object`);return{...t,payload:e}}catch(e){throw e instanceof Ee?e:new Ee("data_error",`message_event seq ${t.seq} payload is invalid JSON`)}}function yH(t,e,r){for(let s of[...r].reverse()){let i=zS(s.payload,null);if(i!==null)return i}let n=t.db.prepare(`
2694
+ `).all(...l),c=d.length>i,u=d.slice(0,i);return{messages:u.map(f=>{if(f.receiver_teamfile===null||f.receiver_alias===null)throw new Ee("data_error",`${f.stream_id} ${f.event_type} is missing receiver identity`);return{message_id:f.stream_id,receiver:{teamfile:f.receiver_teamfile,alias:f.receiver_alias},message_type:f.event_type==="RESPONSE_CREATE"?"response":"request",created_at:f.ts,lifecycle_state:hH(t,f)}}),next_seq:c?u.at(-1).seq:null}}function hH(t,e){return e.pending_message_id!==null?e.delivery_lease_id!==null||e.pending_state==="claimed"?"delivering":"queued":t.db.prepare("SELECT 1 FROM message_event WHERE stream_id = ? AND event_type = 'HANDLED' LIMIT 1").get(e.stream_id)===void 0?"delivered":"handled"}async function gH(t,e){let r=ZS(t,e),n=r.find(m=>IH(m.event_type))??r[0],s=[...r].reverse().find(m=>HB.includes(m.event_type))??null,i=[...r].reverse().find(m=>m.event_type==="HANDLED")??null,o=yH(t,e,r),a=bH(t,e),l=vi(n.payload.provider_prompt),d=TH(n.payload),c=await EH(o,{messageId:e,providerPrompt:l,legacyMailboxId:d,evidenceAt:s?.ts??i?.ts??null}),u=a===null&&c.matched_index!==null&&c.messages!==null?vH(c.messages,c.matched_index):null;return{schema_version:_r,schema:"event-log-v1",message_id:e,receiver:n.receiver_teamfile===null||n.receiver_alias===null?null:{teamfile:n.receiver_teamfile,alias:n.receiver_alias},db:{delivered:s!==null,handled:i!==null,delivered_at:s?.ts??i?.ts??null,delivered_by:s===null?null:SH(s.payload)},transcript:{checked:c.checked,found:c.matched_index!==null,seen_at:c.seen_at,session_id:o?.session_id??null,provider:o?.provider??null,reason:c.reason},answered:a!==null?{via:"db_response_event",response_message_id:a.stream_id,at:a.ts}:u===null?null:{via:"transcript_heuristic",response_message_id:null,at:u.timestamp.toISOString()}}}function ZS(t,e){let r=t.db.prepare("SELECT * FROM message_event WHERE stream_id = ? ORDER BY seq ASC").all(e);if(r.length===0)throw new Ee("not_found",`message stream not found: ${e}`);return r.map(wl)}function wl(t){try{let e=JSON.parse(t.payload);if(!un(e))throw new Ee("data_error",`message_event seq ${t.seq} payload is not an object`);return{...t,payload:e}}catch(e){throw e instanceof Ee?e:new Ee("data_error",`message_event seq ${t.seq} payload is invalid JSON`)}}function yH(t,e,r){for(let s of[...r].reverse()){let i=zS(s.payload,null);if(i!==null)return i}let n=t.db.prepare(`
2692
2695
  SELECT invocation_id FROM invocation_state
2693
2696
  WHERE request_message_id = ?
2694
2697
  ORDER BY started_at ASC, invocation_id ASC
@@ -2696,7 +2699,7 @@ Note: ${l.orphan_policy}
2696
2699
  SELECT * FROM message_event
2697
2700
  WHERE stream_id = ? AND event_type = 'INVOCATION_START'
2698
2701
  ORDER BY seq ASC
2699
- `).all(s.invocation_id);for(let o of i){let a=zS(wl(o).payload,s.invocation_id);if(a!==null)return a}}return null}function zS(t,e){let r=cn(t.receiver)?t.receiver:null,n=cn(t.session)?t.session:null,s=vi(r?.provider,n?.provider,t.provider),i=vi(r?.session_id,n?.session_id,t.session_id);return s===null||!NH(s)||i===null?null:{provider:s,session_id:i,invocation_id:e}}async function EH(t,e){if(t===null)return{checked:!1,matched_index:null,seen_at:null,reason:"historical-session-not-recorded",messages:null};try{let r=await Ue(t.session_id,t.provider);if(r===null)return{checked:!0,matched_index:null,seen_at:null,reason:"session-not-found",messages:null};let n=wH(r.messages,e);return{checked:!0,matched_index:n<0?null:n,seen_at:n<0?null:r.messages[n].timestamp.toISOString(),reason:n<0?"message-id-not-found":null,messages:r.messages}}catch(r){return{checked:!0,matched_index:null,seen_at:null,reason:`read-error: ${r instanceof Error?r.message:String(r)}`,messages:null}}}function wH(t,e){let r=e.evidenceAt===null?Number.NaN:Date.parse(e.evidenceAt),s=t.map((a,l)=>({message:a,index:l})).filter(({message:a})=>a.role==="user").filter(({message:a})=>!Number.isFinite(r)||a.timestamp.getTime()<=r),i=s.find(({message:a})=>AH(a.content,e.messageId));if(i!==void 0)return i.index;if(e.legacyMailboxId!==null){let a=e.legacyMailboxId,l=[...s].reverse().find(({message:d})=>xH(d.content,a));if(l!==void 0)return l.index}return e.providerPrompt===null?-1:[...s].reverse().find(({message:a})=>a.content.includes(e.providerPrompt))?.index??-1}function TH(t){let e=cn(t.legacy)?t.legacy:null;return e?.table==="agent_mailbox"&&typeof e.id=="number"&&Number.isSafeInteger(e.id)&&e.id>0?e.id:null}function vH(t,e){for(let r of t.slice(e+1)){if(r.role==="user")return null;if(r.role==="assistant"&&r.content.trim().length>0)return r}return null}function bH(t,e){let r=t.db.prepare(`
2702
+ `).all(s.invocation_id);for(let o of i){let a=zS(wl(o).payload,s.invocation_id);if(a!==null)return a}}return null}function zS(t,e){let r=un(t.receiver)?t.receiver:null,n=un(t.session)?t.session:null,s=vi(r?.provider,n?.provider,t.provider),i=vi(r?.session_id,n?.session_id,t.session_id);return s===null||!NH(s)||i===null?null:{provider:s,session_id:i,invocation_id:e}}async function EH(t,e){if(t===null)return{checked:!1,matched_index:null,seen_at:null,reason:"historical-session-not-recorded",messages:null};try{let r=await Ue(t.session_id,t.provider);if(r===null)return{checked:!0,matched_index:null,seen_at:null,reason:"session-not-found",messages:null};let n=wH(r.messages,e);return{checked:!0,matched_index:n<0?null:n,seen_at:n<0?null:r.messages[n].timestamp.toISOString(),reason:n<0?"message-id-not-found":null,messages:r.messages}}catch(r){return{checked:!0,matched_index:null,seen_at:null,reason:`read-error: ${r instanceof Error?r.message:String(r)}`,messages:null}}}function wH(t,e){let r=e.evidenceAt===null?Number.NaN:Date.parse(e.evidenceAt),s=t.map((a,l)=>({message:a,index:l})).filter(({message:a})=>a.role==="user").filter(({message:a})=>!Number.isFinite(r)||a.timestamp.getTime()<=r),i=s.find(({message:a})=>AH(a.content,e.messageId));if(i!==void 0)return i.index;if(e.legacyMailboxId!==null){let a=e.legacyMailboxId,l=[...s].reverse().find(({message:d})=>xH(d.content,a));if(l!==void 0)return l.index}return e.providerPrompt===null?-1:[...s].reverse().find(({message:a})=>a.content.includes(e.providerPrompt))?.index??-1}function TH(t){let e=un(t.legacy)?t.legacy:null;return e?.table==="agent_mailbox"&&typeof e.id=="number"&&Number.isSafeInteger(e.id)&&e.id>0?e.id:null}function vH(t,e){for(let r of t.slice(e+1)){if(r.role==="user")return null;if(r.role==="assistant"&&r.content.trim().length>0)return r}return null}function bH(t,e){let r=t.db.prepare(`
2700
2703
  SELECT response.* FROM message_event AS response
2701
2704
  WHERE response.event_type = 'RESPONSE_CREATE'
2702
2705
  AND (
@@ -2712,8 +2715,8 @@ Note: ${l.orphan_policy}
2712
2715
  )
2713
2716
  ORDER BY response.seq ASC
2714
2717
  LIMIT 1
2715
- `).get(e,e);return r===void 0?null:wl(r)}function SH(t){let e=cn(t.delivered_by)?t.delivered_by:null;return{lease_id:vi(e?.lease_id,t.lease_id),pid:nk(e?.pid,t.pid,t.holder_pid),host:vi(e?.host,t.host,t.holder_host)}}function QS(t,e,r){let n=" ".repeat(r),s=e.from===null?"operator":`${e.from.teamfile}:${e.from.alias}`;t.stdout.write(`${n}${e.message_id} ${s} -> ${e.to.teamfile}:${e.to.alias}${e.orphaned_to_root?" [root: no causal link]":""}
2716
- `);for(let i of e.children)QS(t,i,r+1)}function cs(t,e){if(t.length!==1)return{error:`usage: lmctl mail ${e} <message_id> [--json]`};let r=t[0];return qB.test(r)?{value:r}:{error:`invalid message_id: ${r}; expected msg_<id>`}}function pf(t){if(t===void 0)return{value:null};try{return{value:De(t)}}catch{return{error:`invalid agent identity: ${t}; expected <teamfile>:<alias>`}}}function Tl(t,e){let r=new Set(e),n=[];for(let s of t){let i=s.indexOf("="),o=i<0?s:s.slice(0,i);i>0&&r.has(o)?n.push(o,s.slice(i+1)):n.push(s)}return n}function kH(t){return t===void 0?{iso:null}:ek(t,null)}function ek(t,e){if(t===void 0)return e===null?{error:"missing --since value"}:{iso:new Date(Date.now()-e).toISOString()};let r=/^(\d+(?:\.\d+)?)(m|h|d)$/.exec(t);if(r!==null){let s=Number(r[1]),i=r[2]==="m"?6e4:r[2]==="h"?36e5:864e5,o=Date.now()-s*i;return!Number.isFinite(o)||s<=0?{error:`invalid --since value: ${t}`}:{iso:new Date(o).toISOString()}}let n=Date.parse(t);return Number.isFinite(n)?{iso:new Date(n).toISOString()}:{error:`invalid --since value: ${t}; use an ISO timestamp or duration such as 24h`}}function _f(t,e,r){let n=dn(e.env??process.env,t);if(n.ok)return n.identity;throw n.reason==="not-found"?new Ee("self_identity",fr(r)):new Ee("self_identity",Qm(r))}function gr(t){return t.length===1&&(t[0]==="--help"||t[0]==="-h")}function Vt(t){return t.includes("--json")}function ee(t,e,r,n){return e?(re(t,{status:"error",errorKind:r,message:n}),1):N(t,n)}function hf(t){if(t===void 0)return{value:WB};if(!/^\d+$/.test(t))return{error:`invalid --limit value: ${t}; expected an integer`};let e=Number(t);return!Number.isSafeInteger(e)||e<1||e>YS?{error:`invalid --limit value: ${t}; expected 1..${YS}`}:{value:e}}function tk(t){return Buffer.from(JSON.stringify(t),"utf8").toString("base64url")}function rk(t,e){if(t===void 0)return{value:null};try{let r=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));return!cn(r)||r.v!==1||r.kind!==e||typeof r.seq!="number"||!Number.isSafeInteger(r.seq)||r.seq<1?{error:"invalid --cursor value"}:r.kind==="sent"?typeof r.self!="string"||!ff(r.self)||!(r.to===null||typeof r.to=="string"&&ff(r.to))||!(r.since===null||typeof r.since=="string"&&Number.isFinite(Date.parse(r.since)))||!(r.status===null||r.status==="queued"||r.status==="delivered")?{error:"invalid --cursor value"}:{value:r}:typeof r.root!="string"||!ff(r.root)||typeof r.since!="string"||!Number.isFinite(Date.parse(r.since))||typeof r.since_label!="string"||r.since_label.length===0?{error:"invalid --cursor value"}:{value:r}}catch{return{error:"invalid --cursor value"}}}function ff(t){try{return De(t),!0}catch{return!1}}function IH(t){return BB.includes(t)}function NH(t){return["claude","codex","gemini","copilot","opencode","lmplayer","qwen","agy","kimi","ClaudeMock"].includes(t)}function cn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function AH(t,e){let r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(?:^|[^A-Za-z0-9_-])${r}(?:$|[^A-Za-z0-9_-])`).test(t)}function xH(t,e){return new RegExp(`(?:^|\\n)--- queued (?:message|response) [0-9]+ \\(mail #${e}(?:,|\\))`,"i").test(t)}function vi(...t){for(let e of t)if(typeof e=="string"&&e.length>0)return e;return null}function nk(...t){for(let e of t)if(typeof e=="number"&&Number.isFinite(e))return e;return null}var UB,WB,YS,_r,qB,BB,HB,hr,XB,JB,GB,KB,VB,YB,zB,ZB,QB,eH,Ee,ik=w(()=>{"use strict";li();ht();kn();Xt();VS();Me();Ja();tl();hl();gi();at();UB=24*60*60*1e3,WB=100,YS=1e3,_r=1,qB=/^msg_[A-Za-z0-9][A-Za-z0-9_-]*$/,BB=["CREATE","RESPONSE_CREATE"],HB=["DELIVERED","RESPONSE_DELIVERED"],hr=`schema_version is the output-contract version consumers must switch on.
2718
+ `).get(e,e);return r===void 0?null:wl(r)}function SH(t){let e=un(t.delivered_by)?t.delivered_by:null;return{lease_id:vi(e?.lease_id,t.lease_id),pid:nk(e?.pid,t.pid,t.holder_pid),host:vi(e?.host,t.host,t.holder_host)}}function QS(t,e,r){let n=" ".repeat(r),s=e.from===null?"operator":`${e.from.teamfile}:${e.from.alias}`;t.stdout.write(`${n}${e.message_id} ${s} -> ${e.to.teamfile}:${e.to.alias}${e.orphaned_to_root?" [root: no causal link]":""}
2719
+ `);for(let i of e.children)QS(t,i,r+1)}function cs(t,e){if(t.length!==1)return{error:`usage: lmctl mail ${e} <message_id> [--json]`};let r=t[0];return qB.test(r)?{value:r}:{error:`invalid message_id: ${r}; expected msg_<id>`}}function pf(t){if(t===void 0)return{value:null};try{return{value:De(t)}}catch{return{error:`invalid agent identity: ${t}; expected <teamfile>:<alias>`}}}function Tl(t,e){let r=new Set(e),n=[];for(let s of t){let i=s.indexOf("="),o=i<0?s:s.slice(0,i);i>0&&r.has(o)?n.push(o,s.slice(i+1)):n.push(s)}return n}function kH(t){return t===void 0?{iso:null}:ek(t,null)}function ek(t,e){if(t===void 0)return e===null?{error:"missing --since value"}:{iso:new Date(Date.now()-e).toISOString()};let r=/^(\d+(?:\.\d+)?)(m|h|d)$/.exec(t);if(r!==null){let s=Number(r[1]),i=r[2]==="m"?6e4:r[2]==="h"?36e5:864e5,o=Date.now()-s*i;return!Number.isFinite(o)||s<=0?{error:`invalid --since value: ${t}`}:{iso:new Date(o).toISOString()}}let n=Date.parse(t);return Number.isFinite(n)?{iso:new Date(n).toISOString()}:{error:`invalid --since value: ${t}; use an ISO timestamp or duration such as 24h`}}function _f(t,e,r){let n=cn(e.env??process.env,t);if(n.ok)return n.identity;throw n.reason==="not-found"?new Ee("self_identity",fr(r)):new Ee("self_identity",Qm(r))}function gr(t){return t.length===1&&(t[0]==="--help"||t[0]==="-h")}function Vt(t){return t.includes("--json")}function ee(t,e,r,n){return e?(re(t,{status:"error",errorKind:r,message:n}),1):N(t,n)}function hf(t){if(t===void 0)return{value:WB};if(!/^\d+$/.test(t))return{error:`invalid --limit value: ${t}; expected an integer`};let e=Number(t);return!Number.isSafeInteger(e)||e<1||e>YS?{error:`invalid --limit value: ${t}; expected 1..${YS}`}:{value:e}}function tk(t){return Buffer.from(JSON.stringify(t),"utf8").toString("base64url")}function rk(t,e){if(t===void 0)return{value:null};try{let r=JSON.parse(Buffer.from(t,"base64url").toString("utf8"));return!un(r)||r.v!==1||r.kind!==e||typeof r.seq!="number"||!Number.isSafeInteger(r.seq)||r.seq<1?{error:"invalid --cursor value"}:r.kind==="sent"?typeof r.self!="string"||!ff(r.self)||!(r.to===null||typeof r.to=="string"&&ff(r.to))||!(r.since===null||typeof r.since=="string"&&Number.isFinite(Date.parse(r.since)))||!(r.status===null||r.status==="queued"||r.status==="delivered")?{error:"invalid --cursor value"}:{value:r}:typeof r.root!="string"||!ff(r.root)||typeof r.since!="string"||!Number.isFinite(Date.parse(r.since))||typeof r.since_label!="string"||r.since_label.length===0?{error:"invalid --cursor value"}:{value:r}}catch{return{error:"invalid --cursor value"}}}function ff(t){try{return De(t),!0}catch{return!1}}function IH(t){return BB.includes(t)}function NH(t){return["claude","codex","gemini","copilot","opencode","lmplayer","qwen","agy","kimi","ClaudeMock"].includes(t)}function un(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function AH(t,e){let r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(?:^|[^A-Za-z0-9_-])${r}(?:$|[^A-Za-z0-9_-])`).test(t)}function xH(t,e){return new RegExp(`(?:^|\\n)--- queued (?:message|response) [0-9]+ \\(mail #${e}(?:,|\\))`,"i").test(t)}function vi(...t){for(let e of t)if(typeof e=="string"&&e.length>0)return e;return null}function nk(...t){for(let e of t)if(typeof e=="number"&&Number.isFinite(e))return e;return null}var UB,WB,YS,_r,qB,BB,HB,hr,XB,JB,GB,KB,VB,YB,zB,ZB,QB,eH,Ee,ik=w(()=>{"use strict";li();ht();kn();Xt();VS();Me();Ja();tl();hl();gi();at();UB=24*60*60*1e3,WB=100,YS=1e3,_r=1,qB=/^msg_[A-Za-z0-9][A-Za-z0-9_-]*$/,BB=["CREATE","RESPONSE_CREATE"],HB=["DELIVERED","RESPONSE_DELIVERED"],hr=`schema_version is the output-contract version consumers must switch on.
2717
2720
  schema identifies the backing event-log substrate; it is not a second output version.`,XB=`usage:
2718
2721
  lmctl mail sent [--to <teamfile:alias>] [--since <duration|ISO>] [--status queued|delivered] [--limit N] [--cursor <token>] [--json]
2719
2722
  lmctl mail history <message_id> [--json]
@@ -3022,7 +3025,7 @@ A bare <teamfile> with no alias tails that team's Lead member.
3022
3025
  `),a!==null&&t.stdout.write(` SessionLimit: LIMITED resets_at=${Vk(a)}
3023
3026
  `),t.stdout.write(` Created: ${d.createdAt}
3024
3027
  `),t.stdout.write(` Modified: ${d.modifiedAt}
3025
- `),0)}async function sX(t,e,r,n){let s=zr(e,r);if(s===null)return N(t,`health: run ${r}: not found`);let i=Pn(e,r),o=e.agentCallTokenTotals(r),a=new Map;for(let l of s.steps){let d=l.outcome===null?`${l.state_name}:pending`:`${l.state_name}:${l.outcome}`;a.set(d,(a.get(d)??0)+1)}return n?(re(t,{run_id:s.id,workflow:s.workflow?.name??null,team:s.team?.name??null,current_state:s.current_state,terminal_state:s.terminal_state,paused:i?.paused??!1,started_at:s.started_at,ended_at:s.ended_at,step_count:s.steps.length,totalInputTokens:o.totalInputTokens,totalOutputTokens:o.totalOutputTokens,agent_call_count:o.agentCallCount}),0):(t.stdout.write(`RUN: ${s.id}
3028
+ `),0)}async function sX(t,e,r,n){let s=Zr(e,r);if(s===null)return N(t,`health: run ${r}: not found`);let i=Pn(e,r),o=e.agentCallTokenTotals(r),a=new Map;for(let l of s.steps){let d=l.outcome===null?`${l.state_name}:pending`:`${l.state_name}:${l.outcome}`;a.set(d,(a.get(d)??0)+1)}return n?(re(t,{run_id:s.id,workflow:s.workflow?.name??null,team:s.team?.name??null,current_state:s.current_state,terminal_state:s.terminal_state,paused:i?.paused??!1,started_at:s.started_at,ended_at:s.ended_at,step_count:s.steps.length,totalInputTokens:o.totalInputTokens,totalOutputTokens:o.totalOutputTokens,agent_call_count:o.agentCallCount}),0):(t.stdout.write(`RUN: ${s.id}
3026
3029
  `),t.stdout.write(` Workflow: ${s.workflow?.name??"(unknown)"}
3027
3030
  `),t.stdout.write(` Team: ${s.team?.name??"(unknown)"}
3028
3031
  `),t.stdout.write(` State: ${s.current_state??"(none)"}${s.terminal_state!==null?` (terminal: ${s.terminal_state})`:""}
@@ -3067,7 +3070,7 @@ Show provider session details, team rollups, or managed run state/token totals.`
3067
3070
  [--recursive] [--all] [--format table|teamfile|json] [--json]
3068
3071
  lmctl ls --runs [--limit N] [--format table|json] [--json]
3069
3072
 
3070
- List native provider sessions in scope, or list recent managed runs with --runs.`,mX=50,tI=500});import{existsSync as fs,readFileSync as Rf}from"node:fs";import{homedir as iI}from"node:os";import{dirname as oI,resolve as qr}from"node:path";import{fileURLToPath as gX}from"node:url";function Lf(t,e={}){let r=[],n=wX(e.modelSelectionDocPath);for(let s of t){let i=s.provider.trim().toLowerCase();if(s.effort&&i!=="opencode"&&i!=="lmplayer"&&i!=="qwen"&&r.push(`[${s.alias}] effort="${s.effort}" is ignored: effort selection is only supported for opencode and lmplayer.`),i==="qwen"&&s.effort&&r.push(`[${s.alias}] effort="${s.effort}" is not a qwen CLI flag: Qwen Code does not expose reasoning-effort selection. Use a thinking/effort model id in model= instead.`),i==="copilot"){if(!s.model)continue;r.push(`[${s.alias}] model="${s.model}" is ignored: copilot does not support lmctl model selection.`);continue}if(i==="lmplayer"&&!s.model){r.push(`[${s.alias}] provider=lmplayer has no model= \u2014 lmplayer will choose its own default model, which may not be visible in the teamfile. Set model= explicitly (e.g. github-copilot/gpt-5.4).`);continue}if(i==="lmplayer")continue;if(i==="opencode"){if(s.effort&&!s.model&&r.push(`[${s.alias}] effort="${s.effort}" has no effect without model= on an opencode member.`),!s.model){r.push(`[${s.alias}] provider=opencode has no model= \u2014 opencode will choose its own default model, which may not be servable and isn't visible in the teamfile. Set model= explicitly (e.g. github-copilot/gpt-5.4).`);continue}let a=AX(e.opencodeConfigPath);if(!a.available){r.push(`[${s.alias}] model="${s.model}" cannot be verified for opencode: ${a.reason}.`);continue}if(a.models.includes(s.model)||/^github-copilot\/(gpt|gemini|o[0-9])/.test(s.model))continue;if(!s.model.includes("/")){let l=a.models.filter(d=>d.endsWith(`/${s.model}`));r.push(l.length>0?`[${s.alias}] model="${s.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model>. Your opencode.json declares it as ${l.join(" / ")}; set model=${l[0]}.`:`[${s.alias}] model="${s.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model> (e.g. github-copilot/${s.model}). Declare it in ~/.config/opencode/opencode.json (see https://lmctl.com/examples/opencode.json).`);continue}r.push(`[${s.alias}] model="${s.model}" is not declared in your opencode.json. opencode resolves github-copilot GPT/Gemini config-free, but copilot Claude and custom providers must be declared \u2014 copy https://lmctl.com/examples/opencode.json to ~/.config/opencode/opencode.json and adjust for your account.`);continue}if(i==="kimi"){if(!s.model)continue;let a=IX(e.kimiConfigPath);a.available?a.models.includes(s.model)||r.push(`[${s.alias}] model="${s.model}" is not declared in Kimi's [models] config. Valid configured models: ${sI(a.models)}`):r.push(`[${s.alias}] model="${s.model}" cannot be verified for kimi: ${a.reason}.`);continue}if(!s.model)continue;let o=n.get(i);if(!o){r.push(`[${s.alias}] model="${s.model}" cannot be verified for provider "${i}": `+(Il??"no tested models found in durable-memory/model_selection.md"));continue}o.includes(s.model)||r.push(`[${s.alias}] model="${s.model}" is not in the tested model list for provider "${i}". Valid tested models: ${sI(o)}`)}return r}function wX(t){if(!t&&Ii)return Ii;let e=new Map,r,n=t??TX();if(!fs(n))return r=`${n} not found`,t||Af(e),t||(Ii=e),t||(Il=r),e;let s;try{s=Rf(n,"utf-8")}catch(i){return r=`${n} could not be read: ${i instanceof Error?i.message:String(i)}`,t||Af(e),t||(Ii=e),t||(Il=r),e}for(let[i,o]of Object.entries(yX)){let a=SX(s,o),l=kX(a);l.length>0&&e.set(i,l)}return e.size===0&&(r=`${n} has no tested model rows`),!t&&e.size===0&&Af(e),t||(Ii=e),t||(Il=r),e}function TX(){return vX(oI(gX(import.meta.url)))}function vX(t){let e=bX(t);if(e){let n=qr(e,"durable-memory","model_selection.md");if(fs(n))return n}let r=[qr(t,"..","..","durable-memory","model_selection.md"),qr(t,"..","..","..","durable-memory","model_selection.md")];for(let n of r)if(fs(n))return n;return r[r.length-1]}function bX(t){let e=qr(t);for(;;){if(fs(qr(e,"package.json")))return e;let r=oI(e);if(r===e)return null;e=r}}function Af(t){for(let[e,r]of Object.entries(EX))t.set(e,r)}function SX(t,e){let n=new RegExp(`^## ${RX(e)}\\s*$`,"m").exec(t);if(!n)return"";let s=n.index+n[0].length,i=t.slice(s),o=/^##\s+/m.exec(i);return o?i.slice(0,o.index):i}function kX(t){let e=new Set;for(let r of t.split(/\r?\n/)){let n=r.trim();if(!n.startsWith("| `"))continue;let s=/^\|\s*`([^`]+)`\s*\|/.exec(n);if(!s)continue;let i=s[1].trim();i&&i!=="Configured `model="&&e.add(i)}return[...e]}function IX(t){let e=process.env.KIMI_CODE_HOME||qr(iI(),".kimi-code"),r=t??qr(e,"config.toml");if(!fs(r))return{available:!1,models:[],reason:`${r} not found`};let n;try{n=Rf(r,"utf-8")}catch(i){return{available:!1,models:[],reason:`${r} could not be read: ${i instanceof Error?i.message:String(i)}`}}let s=new Set;for(let i of n.split(/\r?\n/)){if(/^\s*\[/.test(i)&&!/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.test(i))return{available:!1,models:[],reason:`${r} has an invalid TOML table header`};let o=/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.exec(i);if(!o)continue;let a=NX(o[1]);if(o[1].trim().startsWith("models")&&a===null)return{available:!1,models:[],reason:`${r} has an invalid [models] table header`};a?.[0]==="models"&&a.length>=2&&s.add(a[1])}return s.size===0?{available:!1,models:[],reason:`${r} has no [models] entries`}:{available:!0,models:[...s].sort()}}function NX(t){let e=[],r=0;for(;r<t.length;){for(;/\s/.test(t[r]??"");)r++;if(r>=t.length)break;let n="",s=t[r]==='"'||t[r]==="'"?t[r++]:void 0;if(s){for(;r<t.length&&t[r]!==s;)s==='"'&&t[r]==="\\"&&r+1<t.length&&r++,n+=t[r++];if(t[r]!==s)return null;r++}else{for(;r<t.length&&t[r]!==".";)n+=t[r++];n=n.trim()}if(!n)return null;for(e.push(n);/\s/.test(t[r]??"");)r++;if(r>=t.length)break;if(t[r]!==".")return null;r++}return e.length>0?e:null}function AX(t){let e=t??qr(iI(),".config","opencode","opencode.json");if(!fs(e))return{available:!0,models:[]};let r;try{r=JSON.parse(Rf(e,"utf-8"))}catch(n){return{available:!1,models:[],reason:`${e} could not be parsed: ${n instanceof Error?n.message:String(n)}`}}return{available:!0,models:xX(r)}}function xX(t){if(!xf(t))return[];let e=kl(t.provider)??kl(t.providers);if(!e)return[];let r=new Set;for(let[n,s]of Object.entries(e)){if(!xf(s))continue;let i=kl(s.models)??kl(s.model);if(i)for(let o of Object.keys(i))r.add(o.startsWith(`${n}/`)?o:`${n}/${o}`)}return[...r].sort()}function kl(t){return xf(t)?t:null}function xf(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function sI(t){return t.length>0?t.join(", "):"(none)"}function RX(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var yX,EX,Ii,Il,aI=w(()=>{"use strict";yX={claude:"Claude",codex:"Codex",gemini:"Gemini",qwen:"Qwen",agy:"Antigravity"},EX={claude:["claude-opus-4-6","claude-opus-4-7","claude-opus-4-8","claude-opus-5","claude-sonnet-4-6","claude-sonnet-5","claude-haiku-4-5","claude-fable-5"],codex:["gpt-5.2","gpt-5.4","gpt-5.5","gpt-5.6-sol","gpt-5.4-mini","gpt-5.3-codex","gpt-5.3-codex-spark"],gemini:["gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-3.1-flash-lite-preview","gemini-2.5-flash","gemini-2.5-flash-lite"],qwen:["qwen3.5-plus","qwen3.6-plus"],agy:["Gemini 3.5 Flash (Medium)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.1 Pro (Low)","Gemini 3.1 Pro (High)","Claude Sonnet 4.6 (Thinking)","Claude Opus 4.6 (Thinking)","GPT-OSS 120B (Medium)"]},Ii=null});import{homedir as LX}from"node:os";import{basename as OX}from"node:path";function Nl(t,e){let r=new Set;return{text:t.replace($X,(s,i)=>{let o=i.trim(),a=CX[o];return a===void 0?(r.add(o),s):a(e)}),unknownNames:[...r].sort()}}function Al(t){return{workdir:t.workdir,teamfile:t.teamfile,date:MX(t.date)}}function MX(t){return t.toISOString().slice(0,10)}var CX,$X,Of=w(()=>{"use strict";CX={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>{let e=OX(t.teamfile);return e.endsWith(".lmctl")?e.slice(0,-6):e},home:()=>LX(),date:t=>t.date},$X=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var xi={};he(xi,{GEMINI_PROVIDER_NOTICE:()=>uI,_setLintOpenCodeConfigProbeForTests:()=>HX,_setLintSessiondirFsOpsForTests:()=>BX,_setTeamfileSeedForTests:()=>qX,buildRootTeamRegistrationRow:()=>gI,registerRootTeam:()=>yI,runHire:()=>QX,runLint:()=>ZX,runRefresh:()=>eJ,runSeed:()=>_I,sha256Text:()=>hI});import{createHash as DX}from"node:crypto";import{accessSync as jX,constants as lI,existsSync as PX,readFileSync as Ll,realpathSync as Mf,statSync as FX,writeFileSync as Rl}from"node:fs";import{dirname as Br,resolve as cI}from"node:path";function qX(t){mI=t??(async e=>{let{seed:r}=await Promise.resolve().then(()=>(Pt(),bc)),n=await r(e);return n.success?{sessionId:n.sessionId,warnings:n.warnings}:{error:n.error??"provider seed failed"}})}function BX(t){un=t===null?Df:{...Df,...t}}function HX(t){fI=t??Ld}async function XX(t,e,r){let n=t.filter(i=>i.teamfile===void 0&&i.provider.trim().toLowerCase()==="opencode"&&i.model!==void 0&&i.model.length>0);return(await Promise.all(n.map(async i=>({member:i,result:await fI({cwd:i.sessiondir??e,model:i.model,...i.effort!==void 0?{effort:i.effort}:{},...r!==void 0?{env:r}:{}})})))).flatMap(({member:i,result:o})=>o.status==="rejected"?[`[${i.alias}] ${o.option}="${o.value}" rejected by opencode: ${o.error}`]:[])}function JX(t,e){let r=Br(e),n=new Set,s=[];for(let i of t){if(i.teamfile!==void 0)continue;let o=i.sessiondir??r,a=cI(o);if(n.has(a))continue;let l=GX(a);l!==void 0&&(n.add(a),s.push(`${i.alias}: sessiondir ${a} is not writable (seed would fail: ${l}) \u2014 fix permissions or set a writable sessiondir`))}return s}function GX(t){try{if(un.existsSync(t)){if(!un.statSync(t).isDirectory())return"ENOTDIR";un.accessSync(t,lI.W_OK);return}let e=YX(t);if(e===void 0)return;if(!un.statSync(e).isDirectory())return"ENOTDIR";un.accessSync(e,lI.W_OK);return}catch(e){return zX(e)??"permission check failed"}}function KX(t,e){let r=[];for(let n of t)n.teamfile!==void 0||n.sessiondir===void 0||pI(n.sessiondir,e)&&r.push(`${n.alias}: sessiondir equals the teamfile directory and is redundant; lmctl seed will remove it`);return r}function VX(t,e,r,n){let s=!1;for(let i of t){if(i.teamfile!==void 0||i.sessiondir===void 0||!pI(i.sessiondir,n))continue;let o=r.get(i.alias.toLowerCase());if(o===void 0)continue;let a=EI(e[o],"sessiondir");a!==e[o]&&(e[o]=a,s=!0),i.sessiondir=void 0}return s}function pI(t,e){return dI(t)===dI(e)}function dI(t){let e=cI(t);try{return Mf(e)}catch{return e}}function YX(t){let e=t;for(;;){try{if(un.existsSync(e))return e}catch{return}let r=Br(e);if(r===e)return;e=r}}function zX(t){if(typeof t=="object"&&t!==null&&"code"in t){let e=t.code;if(typeof e=="string"&&e.length>0)return e}}async function ZX(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(UX),0;if(t.length!==1)return e.stderr.write(`usage: lmctl lint <teamfile.lmctl>
3073
+ List native provider sessions in scope, or list recent managed runs with --runs.`,mX=50,tI=500});import{existsSync as fs,readFileSync as Rf}from"node:fs";import{homedir as iI}from"node:os";import{dirname as oI,resolve as qr}from"node:path";import{fileURLToPath as gX}from"node:url";function Lf(t,e={}){let r=[],n=wX(e.modelSelectionDocPath);for(let s of t){let i=s.provider.trim().toLowerCase();if(s.effort&&i!=="opencode"&&i!=="lmplayer"&&i!=="qwen"&&r.push(`[${s.alias}] effort="${s.effort}" is ignored: effort selection is only supported for opencode and lmplayer.`),i==="qwen"&&s.effort&&r.push(`[${s.alias}] effort="${s.effort}" is not a qwen CLI flag: Qwen Code does not expose reasoning-effort selection. Use a thinking/effort model id in model= instead.`),i==="copilot"){if(!s.model)continue;r.push(`[${s.alias}] model="${s.model}" is ignored: copilot does not support lmctl model selection.`);continue}if(i==="lmplayer"&&!s.model){r.push(`[${s.alias}] provider=lmplayer has no model= \u2014 lmplayer will choose its own default model, which may not be visible in the teamfile. Set model= explicitly (e.g. github-copilot/gpt-5.4).`);continue}if(i==="lmplayer")continue;if(i==="opencode"){if(s.effort&&!s.model&&r.push(`[${s.alias}] effort="${s.effort}" has no effect without model= on an opencode member.`),!s.model){r.push(`[${s.alias}] provider=opencode has no model= \u2014 opencode will choose its own default model, which may not be servable and isn't visible in the teamfile. Set model= explicitly (e.g. github-copilot/gpt-5.4).`);continue}let a=AX(e.opencodeConfigPath);if(!a.available){r.push(`[${s.alias}] model="${s.model}" cannot be verified for opencode: ${a.reason}.`);continue}if(a.models.includes(s.model)||/^github-copilot\/(gpt|gemini|o[0-9])/.test(s.model))continue;if(!s.model.includes("/")){let l=a.models.filter(d=>d.endsWith(`/${s.model}`));r.push(l.length>0?`[${s.alias}] model="${s.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model>. Your opencode.json declares it as ${l.join(" / ")}; set model=${l[0]}.`:`[${s.alias}] model="${s.model}" has no provider prefix \u2014 opencode model ids are <provider>/<model> (e.g. github-copilot/${s.model}). Declare it in ~/.config/opencode/opencode.json (see https://lmctl.com/examples/opencode.json).`);continue}r.push(`[${s.alias}] model="${s.model}" is not declared in your opencode.json. opencode resolves github-copilot GPT/Gemini config-free, but copilot Claude and custom providers must be declared \u2014 copy https://lmctl.com/examples/opencode.json to ~/.config/opencode/opencode.json and adjust for your account.`);continue}if(i==="kimi"){if(!s.model)continue;let a=IX(e.kimiConfigPath);a.available?a.models.includes(s.model)||r.push(`[${s.alias}] model="${s.model}" is not declared in Kimi's [models] config. Valid configured models: ${sI(a.models)}`):r.push(`[${s.alias}] model="${s.model}" cannot be verified for kimi: ${a.reason}.`);continue}if(!s.model)continue;let o=n.get(i);if(!o){r.push(`[${s.alias}] model="${s.model}" cannot be verified for provider "${i}": `+(Il??"no tested models found in durable-memory/model_selection.md"));continue}o.includes(s.model)||r.push(`[${s.alias}] model="${s.model}" is not in the tested model list for provider "${i}". Valid tested models: ${sI(o)}`)}return r}function wX(t){if(!t&&Ii)return Ii;let e=new Map,r,n=t??TX();if(!fs(n))return r=`${n} not found`,t||Af(e),t||(Ii=e),t||(Il=r),e;let s;try{s=Rf(n,"utf-8")}catch(i){return r=`${n} could not be read: ${i instanceof Error?i.message:String(i)}`,t||Af(e),t||(Ii=e),t||(Il=r),e}for(let[i,o]of Object.entries(yX)){let a=SX(s,o),l=kX(a);l.length>0&&e.set(i,l)}return e.size===0&&(r=`${n} has no tested model rows`),!t&&e.size===0&&Af(e),t||(Ii=e),t||(Il=r),e}function TX(){return vX(oI(gX(import.meta.url)))}function vX(t){let e=bX(t);if(e){let n=qr(e,"durable-memory","model_selection.md");if(fs(n))return n}let r=[qr(t,"..","..","durable-memory","model_selection.md"),qr(t,"..","..","..","durable-memory","model_selection.md")];for(let n of r)if(fs(n))return n;return r[r.length-1]}function bX(t){let e=qr(t);for(;;){if(fs(qr(e,"package.json")))return e;let r=oI(e);if(r===e)return null;e=r}}function Af(t){for(let[e,r]of Object.entries(EX))t.set(e,r)}function SX(t,e){let n=new RegExp(`^## ${RX(e)}\\s*$`,"m").exec(t);if(!n)return"";let s=n.index+n[0].length,i=t.slice(s),o=/^##\s+/m.exec(i);return o?i.slice(0,o.index):i}function kX(t){let e=new Set;for(let r of t.split(/\r?\n/)){let n=r.trim();if(!n.startsWith("| `"))continue;let s=/^\|\s*`([^`]+)`\s*\|/.exec(n);if(!s)continue;let i=s[1].trim();i&&i!=="Configured `model="&&e.add(i)}return[...e]}function IX(t){let e=process.env.KIMI_CODE_HOME||qr(iI(),".kimi-code"),r=t??qr(e,"config.toml");if(!fs(r))return{available:!1,models:[],reason:`${r} not found`};let n;try{n=Rf(r,"utf-8")}catch(i){return{available:!1,models:[],reason:`${r} could not be read: ${i instanceof Error?i.message:String(i)}`}}let s=new Set;for(let i of n.split(/\r?\n/)){if(/^\s*\[/.test(i)&&!/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.test(i))return{available:!1,models:[],reason:`${r} has an invalid TOML table header`};let o=/^\s*\[\s*(.+?)\s*\]\s*(?:#.*)?$/.exec(i);if(!o)continue;let a=NX(o[1]);if(o[1].trim().startsWith("models")&&a===null)return{available:!1,models:[],reason:`${r} has an invalid [models] table header`};a?.[0]==="models"&&a.length>=2&&s.add(a[1])}return s.size===0?{available:!1,models:[],reason:`${r} has no [models] entries`}:{available:!0,models:[...s].sort()}}function NX(t){let e=[],r=0;for(;r<t.length;){for(;/\s/.test(t[r]??"");)r++;if(r>=t.length)break;let n="",s=t[r]==='"'||t[r]==="'"?t[r++]:void 0;if(s){for(;r<t.length&&t[r]!==s;)s==='"'&&t[r]==="\\"&&r+1<t.length&&r++,n+=t[r++];if(t[r]!==s)return null;r++}else{for(;r<t.length&&t[r]!==".";)n+=t[r++];n=n.trim()}if(!n)return null;for(e.push(n);/\s/.test(t[r]??"");)r++;if(r>=t.length)break;if(t[r]!==".")return null;r++}return e.length>0?e:null}function AX(t){let e=t??qr(iI(),".config","opencode","opencode.json");if(!fs(e))return{available:!0,models:[]};let r;try{r=JSON.parse(Rf(e,"utf-8"))}catch(n){return{available:!1,models:[],reason:`${e} could not be parsed: ${n instanceof Error?n.message:String(n)}`}}return{available:!0,models:xX(r)}}function xX(t){if(!xf(t))return[];let e=kl(t.provider)??kl(t.providers);if(!e)return[];let r=new Set;for(let[n,s]of Object.entries(e)){if(!xf(s))continue;let i=kl(s.models)??kl(s.model);if(i)for(let o of Object.keys(i))r.add(o.startsWith(`${n}/`)?o:`${n}/${o}`)}return[...r].sort()}function kl(t){return xf(t)?t:null}function xf(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function sI(t){return t.length>0?t.join(", "):"(none)"}function RX(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var yX,EX,Ii,Il,aI=w(()=>{"use strict";yX={claude:"Claude",codex:"Codex",gemini:"Gemini",qwen:"Qwen",agy:"Antigravity"},EX={claude:["claude-opus-4-6","claude-opus-4-7","claude-opus-4-8","claude-opus-5","claude-sonnet-4-6","claude-sonnet-5","claude-haiku-4-5","claude-fable-5"],codex:["gpt-5.2","gpt-5.4","gpt-5.5","gpt-5.6-sol","gpt-5.4-mini","gpt-5.3-codex","gpt-5.3-codex-spark"],gemini:["gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-3.1-flash-lite-preview","gemini-2.5-flash","gemini-2.5-flash-lite"],qwen:["qwen3.5-plus","qwen3.6-plus"],agy:["Gemini 3.5 Flash (Medium)","Gemini 3.5 Flash (High)","Gemini 3.5 Flash (Low)","Gemini 3.1 Pro (Low)","Gemini 3.1 Pro (High)","Claude Sonnet 4.6 (Thinking)","Claude Opus 4.6 (Thinking)","GPT-OSS 120B (Medium)"]},Ii=null});import{homedir as LX}from"node:os";import{basename as OX}from"node:path";function Nl(t,e){let r=new Set;return{text:t.replace($X,(s,i)=>{let o=i.trim(),a=CX[o];return a===void 0?(r.add(o),s):a(e)}),unknownNames:[...r].sort()}}function Al(t){return{workdir:t.workdir,teamfile:t.teamfile,date:MX(t.date)}}function MX(t){return t.toISOString().slice(0,10)}var CX,$X,Of=w(()=>{"use strict";CX={workdir:t=>t.workdir,teamfile:t=>t.teamfile,teamname:t=>{let e=OX(t.teamfile);return e.endsWith(".lmctl")?e.slice(0,-6):e},home:()=>LX(),date:t=>t.date},$X=/{{\s*([A-Za-z0-9_-]+)\s*}}/g});var xi={};he(xi,{GEMINI_PROVIDER_NOTICE:()=>uI,_setLintOpenCodeConfigProbeForTests:()=>HX,_setLintSessiondirFsOpsForTests:()=>BX,_setTeamfileSeedForTests:()=>qX,buildRootTeamRegistrationRow:()=>gI,registerRootTeam:()=>yI,runHire:()=>QX,runLint:()=>ZX,runRefresh:()=>eJ,runSeed:()=>_I,sha256Text:()=>hI});import{createHash as DX}from"node:crypto";import{accessSync as jX,constants as lI,existsSync as PX,readFileSync as Ll,realpathSync as Mf,statSync as FX,writeFileSync as Rl}from"node:fs";import{dirname as Br,resolve as cI}from"node:path";function qX(t){mI=t??(async e=>{let{seed:r}=await Promise.resolve().then(()=>(Pt(),bc)),n=await r(e);return n.success?{sessionId:n.sessionId,warnings:n.warnings}:{error:n.error??"provider seed failed"}})}function BX(t){mn=t===null?Df:{...Df,...t}}function HX(t){fI=t??Ld}async function XX(t,e,r){let n=t.filter(i=>i.teamfile===void 0&&i.provider.trim().toLowerCase()==="opencode"&&i.model!==void 0&&i.model.length>0);return(await Promise.all(n.map(async i=>({member:i,result:await fI({cwd:i.sessiondir??e,model:i.model,...i.effort!==void 0?{effort:i.effort}:{},...r!==void 0?{env:r}:{}})})))).flatMap(({member:i,result:o})=>o.status==="rejected"?[`[${i.alias}] ${o.option}="${o.value}" rejected by opencode: ${o.error}`]:[])}function JX(t,e){let r=Br(e),n=new Set,s=[];for(let i of t){if(i.teamfile!==void 0)continue;let o=i.sessiondir??r,a=cI(o);if(n.has(a))continue;let l=GX(a);l!==void 0&&(n.add(a),s.push(`${i.alias}: sessiondir ${a} is not writable (seed would fail: ${l}) \u2014 fix permissions or set a writable sessiondir`))}return s}function GX(t){try{if(mn.existsSync(t)){if(!mn.statSync(t).isDirectory())return"ENOTDIR";mn.accessSync(t,lI.W_OK);return}let e=YX(t);if(e===void 0)return;if(!mn.statSync(e).isDirectory())return"ENOTDIR";mn.accessSync(e,lI.W_OK);return}catch(e){return zX(e)??"permission check failed"}}function KX(t,e){let r=[];for(let n of t)n.teamfile!==void 0||n.sessiondir===void 0||pI(n.sessiondir,e)&&r.push(`${n.alias}: sessiondir equals the teamfile directory and is redundant; lmctl seed will remove it`);return r}function VX(t,e,r,n){let s=!1;for(let i of t){if(i.teamfile!==void 0||i.sessiondir===void 0||!pI(i.sessiondir,n))continue;let o=r.get(i.alias.toLowerCase());if(o===void 0)continue;let a=EI(e[o],"sessiondir");a!==e[o]&&(e[o]=a,s=!0),i.sessiondir=void 0}return s}function pI(t,e){return dI(t)===dI(e)}function dI(t){let e=cI(t);try{return Mf(e)}catch{return e}}function YX(t){let e=t;for(;;){try{if(mn.existsSync(e))return e}catch{return}let r=Br(e);if(r===e)return;e=r}}function zX(t){if(typeof t=="object"&&t!==null&&"code"in t){let e=t.code;if(typeof e=="string"&&e.length>0)return e}}async function ZX(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(UX),0;if(t.length!==1)return e.stderr.write(`usage: lmctl lint <teamfile.lmctl>
3071
3074
  `),2;let r=t[0],n;try{n=await O(e,d=>Se(r,d))}catch(d){return We(e,`${r}: ${d instanceof Error?d.message:String(d)}`)}let s;try{s=ot(n)}catch(d){return We(e,`${r}: ${d instanceof Error?d.message:String(d)}`)}let i=lm(s,Br(n)),o=Lf(s.members),a=Ll(n,"utf8"),l=Nl(a,Al({workdir:Br(n),teamfile:n,date:new Date})).unknownNames;l.length>0&&o.push(`unknown template placeholder${l.length===1?"":"s"}: ${l.map(d=>`{{${d}}}`).join(", ")}`),o.push(...Nd(s.members,Br(n))),o.push(...JX(s.members,n)),o.push(...KX(s.members,Br(n))),o.push(...await XX(s.members,Br(n),e.env));for(let d of i)e.stderr.write(`error: ${d.field}: ${d.message}
3072
3075
  `);for(let d of s.members)Pf([d],e),d.session!==void 0&&d.session.length<Ni&&o.push(`${d.alias}: sessionid is shorter than ${Ni} chars; run lmctl seed to refresh it`);for(let d of o)e.stderr.write(`warning: ${d}
3073
3076
  `);return i.length>0?1:(e.stdout.write(`ok
@@ -3088,7 +3091,7 @@ List native provider sessions in scope, or list recent managed runs with --runs.
3088
3091
  `),h=dJ(p,Mf(n));(h!==p||c)&&Rl(n,h,"utf8"),m===0&&e.stdout.write(`no members needed seeding
3089
3092
  `);let _=new Date().toISOString();try{await O(e,g=>{yI(g,{teamfilePath:s,name:o.name,rawText:h,now:_})})}catch(g){return We(e,g instanceof Error?g.message:String(g))}return 0}async function QX(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(xl),0;let r=Q(t,["--provider","--sessiondir"],[]);if(r.error!==void 0)return $f(e,r.error,xl);if(r.positionals.length!==2)return $f(e,"expected <teamfile.lmctl> and <alias>",xl);let[n,s]=r.positionals;if(!oJ(s))return We(e,`invalid alias "${s}"`);if(s.toLowerCase()==="lead")return We(e,"hire only applies to non-Lead members");let i=P(r,"--provider");if(i===void 0)return $f(e,"missing value for --provider",xl);if(!wI(i))return We(e,`invalid provider "${i}"`);let o;try{o=await O(e,u=>Se(n,u))}catch(u){return We(e,`${n}: ${u instanceof Error?u.message:String(u)}`)}let a;try{a=Ll(o,"utf8")}catch(u){return We(e,`${n}: ${u instanceof Error?u.message:String(u)}`)}if(iJ(a,s))return We(e,`${s}: alias already exists in ${o}`);let l=P(r,"--sessiondir"),d=[`_MEMBER_ alias=${jf(s)} provider=${i}`,...l===void 0?[]:[`sessiondir=${jf(l)}`]].join(" "),c=lJ(a,d);return Rl(o,c,"utf8"),e.stdout.write(`Hired ${s} (${i}) -> ${o}
3090
3093
  `),e.stdout.write(`Run: lmctl seed ${o}
3091
- `),0}async function eJ(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(Cf),0;let r,n;if(t.length===1){let u=an(t[0]);if(u===null)return e.stderr.write(Cf),2;r=u.teamfile,n=u.alias}else if(t.length===2)[r,n]=t;else return e.stderr.write(Cf),2;let s;try{s=await O(e,u=>Se(r,u))}catch(u){return We(e,`${r}: ${u instanceof Error?u.message:String(u)}`)}let i;try{i=Ll(s,"utf8")}catch(u){return We(e,`${r}: ${u instanceof Error?u.message:String(u)}`)}let o=i.split(`
3094
+ `),0}async function eJ(t,e={stdout:process.stdout,stderr:process.stderr}){if(t[0]==="--help"||t[0]==="-h"||t[0]==="help")return e.stdout.write(Cf),0;let r,n;if(t.length===1){let u=ln(t[0]);if(u===null)return e.stderr.write(Cf),2;r=u.teamfile,n=u.alias}else if(t.length===2)[r,n]=t;else return e.stderr.write(Cf),2;let s;try{s=await O(e,u=>Se(r,u))}catch(u){return We(e,`${r}: ${u instanceof Error?u.message:String(u)}`)}let i;try{i=Ll(s,"utf8")}catch(u){return We(e,`${r}: ${u instanceof Error?u.message:String(u)}`)}let o=i.split(`
3092
3095
  `),a=sJ(o,n);if(a===void 0)return We(e,`${n}: no active _MEMBER_ entry found`);let l=o[a];if(Ai(l,"teamfile")!==void 0)return We(e,`${n}: refresh only applies to provider-backed members, not teamfile= members`);let d=(e.env??process.env)[Rs],c=Ai(l,"sessionid");return d!==void 0&&d.length>0&&c===d?We(e,`${n}: cannot refresh its own running session \u2014 run this refresh from a different member session or a plain operator shell.`):(o[a]=EI(l,"sessionid"),a>0&&/^\s*#CreationTime:/u.test(o[a-1])&&o.splice(a-1,1),Rl(s,o.join(`
3093
3096
  `),"utf8"),_I([s],e))}function hI(t){return DX("sha256").update(t).digest("hex")}function gI(t,e){return{teamfile_path:e.teamfilePath,name:e.name,raw_text:e.rawText,raw_sha256:hI(e.rawText),registered_at:t?.registered_at??e.now,last_seeded_at:e.now}}function yI(t,e){let r=za(e.rawText,e.teamfilePath);mm(t,e.teamfilePath,r);let n=gI(t.getRootTeam(e.teamfilePath),e);return t.upsertRootTeam(n),n}function tJ(t,e,r){let n=r.filter(a=>a.alias.toLowerCase()!=="lead").map(a=>{let l=a.teamfile!==void 0?`teamfile=${a.teamfile}`:`provider=${a.provider}`;return`- ${a.alias}: ${l}`}),s=n.length>0?n.join(`
3094
3097
  `):"- (no non-Lead members)",i=r.find(a=>a.alias.toLowerCase()==="lead")?.provider??"",o=rJ(i,t);return["lmctl seed initial connection only. Create or pin this provider session, then stop.","Do not inspect files, run commands, infer a task, delegate, edit, or begin work.","",`Teamfile path: ${t}`,"You are alias Lead for this AI-managed .lmctl team.","","Delegating work:",`- Blocking command shape: lmctl chat "${t}" <alias> "your task here"`,"- SAFE INPUT \u2014 use for ANYTHING non-trivial. A prompt typed into the command line is expanded by YOUR shell first,"," so backticks, $(...), $VAR and quotes are executed or stripped out of the message before lmctl sees it."," If the text contains backticks, quotes, $, newlines, or ANY relayed/pasted/quoted content, do NOT put it in the command.",` Write it to a file with your file-writing tool (NOT echo/heredoc \u2014 those are shell too), then: lmctl chat "${t}" <alias> --prompt-file <path>`,"- lmctl is foreground/background agnostic. Use your provider or host runtime for async command handling when it supports that.","- For delegation, run the lmctl chat command above. If your runtime has a tracked background mode, it may wrap that same blocking command, but check the result with --json or lmctl status.","- Busy receiver ENQUEUES. lmctl chat exits 0 for BOTH delivered and enqueued, so exit code alone CANNOT tell you a reply arrived.",'- lmctl chat ... --json is machine-readable: status="ok" is a delivered reply (with replyText); status="enqueued" (plus path="enqueued") means it was queued, and carries id/sender/receiver.',"- lmctl status shows your identity, members with busy/idle, mail queued TO and FROM you, and why a receiver is busy. Run it when you are unsure whether a delegation landed.","- For arbitrary shell work, use your provider/runtime shell tools directly; lmctl does not execute shell commands.",o,"","Delegation is an ACTION, not a plan: to hand a member a task, run the lmctl chat command above. lmctl exposes no delegation tool you should use \u2014 delegate with lmctl chat.","","Team members:",s,"","If a member feels sluggish or starts drifting (degraded or off-track output):",` 1. Check ONE member's session health: lmctl health "${t}" <alias> (size/state \u2014 informational).`," 2. Make sure important state is captured in durable-memory/ \u2014 update it if not.",` 3. Replace its session: lmctl refresh "${t}" <alias> (re-seeds the member: drops chat history, re-reads durable-memory/). You cannot refresh your own session \u2014 run it from a different member session or a plain operator shell.`,` Optional: lmctl tail "${t}" <alias> to inspect its recent messages while troubleshooting.`,"(These health/recovery commands are shell commands. For delegation, use lmctl chat.)","","Full teamfile document at seed time:","```lmctl",e.trimEnd(),"```","","Remember this teamfile path. Do not ask the operator for it when asked to ping or delegate to members.","Reply exactly: ACK: teamfile context recorded."].join(`
@@ -3110,7 +3113,7 @@ ${t}`:`${r}
3110
3113
  `),1}function $f(t,e,r){return t.stderr.write(`error: ${e}
3111
3114
  ${r}`),2}function Pf(t,e){for(let r of t)r.teamfile!==void 0&&e.stderr.write(`warning: member "${r.alias}" uses deprecated member-level teamfile=; cross-team calls now work at runtime without _CONNECT_
3112
3115
  `),r.provider==="gemini"&&e.stderr.write(`${uI.replace("%s",r.alias)}
3113
- `)}var Ni,UX,WX,xl,Cf,uI,Df,mI,un,fI,Ri=w(()=>{"use strict";ur();aI();ro();yt();Od();Me();at();mr();Of();hi();Ni=5,UX=`usage: lmctl lint <teamfile.lmctl>
3116
+ `)}var Ni,UX,WX,xl,Cf,uI,Df,mI,mn,fI,Ri=w(()=>{"use strict";ur();aI();ro();yt();Od();Me();at();mr();Of();hi();Ni=5,UX=`usage: lmctl lint <teamfile.lmctl>
3114
3117
 
3115
3118
  Validate an lmctl teamfile and warn about stale or placeholder session ids.
3116
3119
  For opencode members with model=, lint also asks the local ACP provider to
@@ -3132,7 +3135,7 @@ Refreshing the Lead drops its chat history; it re-reads durable-memory/ on
3132
3135
  re-seed.
3133
3136
  A member cannot refresh its own running session; run the refresh from a
3134
3137
  different member session or a plain operator shell.
3135
- `,uI='notice: member "%s" uses provider=gemini \u2014 the Gemini CLI requires an API/enterprise Google account; personal Google subscriptions should use provider=agy (Antigravity).',Df={existsSync:PX,statSync:FX,accessSync:jX},mI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Pt(),bc)),r=await e(t);return r.success?{sessionId:r.sessionId,warnings:r.warnings}:{error:r.error??"provider seed failed"}},un=Df,fI=Ld});var II={};he(II,{runClone:()=>gJ});import{existsSync as Ff,mkdirSync as cJ,readFileSync as uJ,readdirSync as mJ,statSync as SI,writeFileSync as fJ}from"node:fs";import{basename as TI,dirname as pJ,extname as _J,join as kI,resolve as vI}from"node:path";async function gJ(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(hJ),0;if(t.length!==2)return e.stderr.write(`usage: lmctl clone <source> <dest>
3138
+ `,uI='notice: member "%s" uses provider=gemini \u2014 the Gemini CLI requires an API/enterprise Google account; personal Google subscriptions should use provider=agy (Antigravity).',Df={existsSync:PX,statSync:FX,accessSync:jX},mI=async t=>{let{seed:e}=await Promise.resolve().then(()=>(Pt(),bc)),r=await e(t);return r.success?{sessionId:r.sessionId,warnings:r.warnings}:{error:r.error??"provider seed failed"}},mn=Df,fI=Ld});var II={};he(II,{runClone:()=>gJ});import{existsSync as Ff,mkdirSync as cJ,readFileSync as uJ,readdirSync as mJ,statSync as SI,writeFileSync as fJ}from"node:fs";import{basename as TI,dirname as pJ,extname as _J,join as kI,resolve as vI}from"node:path";async function gJ(t,e={stdout:process.stdout,stderr:process.stderr}){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(hJ),0;if(t.length!==2)return e.stderr.write(`usage: lmctl clone <source> <dest>
3136
3139
  `),2;let[r,n]=t,s,i=r;try{if(/^http:\/\//i.test(r))throw new Error("plaintext http:// sources are not allowed; use https://");if(/^https:\/\//i.test(r))s=await EJ(r);else{let d=vI(r);if(!Ff(d))throw new Error(`source not found: ${r}`);let u=SI(d).isDirectory()?wJ(d):d;s=uJ(u,"utf8"),i=u}}catch(d){return e.stderr.write(`error: ${d instanceof Error?d.message:String(d)}
3137
3140
  `),1}let o=vI(n),a=TJ(o,i,n);if(Ff(a))return e.stderr.write(`error: ${a} already exists.
3138
3141
  `),1;let l=bJ(vJ(s));return cJ(pJ(a),{recursive:!0}),fJ(a,l,"utf8"),e.stdout.write(`Cloned ${r} -> ${a}
@@ -3268,7 +3271,7 @@ Examples:
3268
3271
  `),2;let n=r[0];try{return await O(e,s=>(e.stdout.write(rN(s,n)),0))}catch(s){return e.stderr.write(`diagnose-prompt failed: ${s instanceof Error?s.message:String(s)}
3269
3272
  `),1}}function Hf(){return["usage: lmctl diagnose-prompt <prompt_id>","",'Narrow read-only diagnostic for the WT-6 "prompt-pending-forever"',"symptom. Renders prompt + dispatch + run + project + workflows + team","state, then picks the top 1-3 likely root causes (daemon interval,","missing workflows, missing team aliases, etc).","","options:"," -h, --help show this help and exit"].join(`
3270
3273
  `)}var tN,Xf,Jf,aN=w(()=>{"use strict";hm();Me();tN=["Coder","Reviewer1","Polisher"],Xf=3e4,Jf=new Set(["attention_needed","paused","escalation"])});var RN={};he(RN,{appendIntent:()=>TN,resolveIntentLogPath:()=>wN,runStatus:()=>S4});import{appendFileSync as f4,existsSync as p4,mkdirSync as _4}from"node:fs";import{homedir as h4,hostname as lN}from"node:os";import{basename as g4,dirname as EN,isAbsolute as y4,join as E4,resolve as w4}from"node:path";function wN(){return process.env.LMCTL_INTENT_LOG??E4(h4(),".lmctl","recent-intents.log")}function TN(t){try{let e=wN();_4(EN(e),{recursive:!0});let r=JSON.stringify({ts:t.ts??new Date().toISOString(),cwd:t.cwd??process.cwd(),verb:t.verb,args:[...t.args]});f4(e,`${r}
3271
- `)}catch{}}async function S4(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(T4),0;let r=t.find(o=>o==="--project"||o.startsWith("--project=")||o==="--web");if(r!==void 0)return N(e,`unknown option ${r}; lmctl status is team/SELF scoped now`);let n=Q(t,["--since"],["--json"]);if(n.error!==void 0)return N(e,n.error);if(n.positionals.length>0)return N(e,`unknown argument: ${n.positionals[0]}`);let s=V(n,"--json"),i=rG(P(n,"--since"));if("error"in i)return N(e,i.error);try{let o=e.env??process.env;if(s){let a=await O(e,l=>fN(l,o));re(e,a)}else{let a=await O(e,async l=>W4(await fN(l,o),{sinceIso:i.iso}));e.stdout.write(a)}return TN({verb:"status",args:t}),0}catch(o){return N(e,o instanceof Error?o.message:String(o))}}async function fN(t,e){let r=dn(e,t);if(!r.ok){if(r.reason==="not-found")throw new Error(fr("status"));return await I4(t)}return await k4(t,r.identity)}async function k4(t,e){let r=De(e),n=t.getRootTeam(r.teamfile);if(n===null)throw new Error(fr("status"));let s=Ve(n.teamfile_path,t),i=Kf(Cl(t,{from:r.value})),o=Kf(Cl(t,{target_teamfile:r.teamfile,target_alias:r.alias})),a=R4([...Gf(t,{from:r.value}),...Gf(t,{target_teamfile:r.teamfile,target_alias:r.alias})]);return{scope:"self",identity:r.value,...vN(),team:{name:s.name,teamfile:n.teamfile_path},members:s.members.map(l=>A4(t,n.teamfile_path,l)),activity:{from_me:i.map(l=>Vf(l,t)),to_me:o.map(l=>Vf(l,t))},transcript_harvest:await SN(a),mailbox:{outbound:$l(L4(t,r.teamfile,r.alias),"outbound"),inbound_pending:$l(O4(t,r.teamfile,r.alias),"inbound")},waiting_on:C4(t,r.teamfile,r.alias).map(l=>bN(l,t))}}function vN(){let t=null;try{t=A_(N_())}catch{}return{db_path:ne(),site_name:t}}async function I4(t){let e=t.listRootTeams();return{scope:"db",identity:null,...vN(),teams:e.map(r=>N4(t,r)),activity:Kf(Cl(t)).map(r=>Vf(r,t)),transcript_harvest:await SN(Gf(t)),mailbox:{pending_outbound:$l(pN(t,"sender"),"outbound"),pending_inbound:$l(pN(t,"receiver"),"inbound")},waiting_on:$4(t).map(r=>bN(r,t))}}function N4(t,e){if(!p4(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 r=0;try{r=Ve(e.teamfile_path,t).members.length}catch{r=0}return{name:e.name,teamfile:e.teamfile_path,member_count:r,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at}}function A4(t,e,r){let n=r.teamfile===void 0?null:Se(y4(r.teamfile)?r.teamfile:w4(EN(e),r.teamfile),t),s=_t(t,e,r.alias),i=s.busy&&s.reason==="in-flight"?x4(t,e,r.alias,s.inFlight):null;return{alias:r.alias,provider:r.provider,model:r.model??null,teamfile:e,referenced_teamfile:n,sessionid:r.session??null,sessiondir:r.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 x4(t,e,r,n){let s=n.sender_alias==="operator"?"operator":`${n.sender_teamfile}:${n.sender_alias}`,o=t.db.prepare(`
3274
+ `)}catch{}}async function S4(t,e){if(t.includes("--help")||t.includes("-h"))return e.stdout.write(T4),0;let r=t.find(o=>o==="--project"||o.startsWith("--project=")||o==="--web");if(r!==void 0)return N(e,`unknown option ${r}; lmctl status is team/SELF scoped now`);let n=Q(t,["--since"],["--json"]);if(n.error!==void 0)return N(e,n.error);if(n.positionals.length>0)return N(e,`unknown argument: ${n.positionals[0]}`);let s=V(n,"--json"),i=rG(P(n,"--since"));if("error"in i)return N(e,i.error);try{let o=e.env??process.env;if(s){let a=await O(e,l=>fN(l,o));re(e,a)}else{let a=await O(e,async l=>W4(await fN(l,o),{sinceIso:i.iso}));e.stdout.write(a)}return TN({verb:"status",args:t}),0}catch(o){return N(e,o instanceof Error?o.message:String(o))}}async function fN(t,e){let r=cn(e,t);if(!r.ok){if(r.reason==="not-found")throw new Error(fr("status"));return await I4(t)}return await k4(t,r.identity)}async function k4(t,e){let r=De(e),n=t.getRootTeam(r.teamfile);if(n===null)throw new Error(fr("status"));let s=Ve(n.teamfile_path,t),i=Kf(Cl(t,{from:r.value})),o=Kf(Cl(t,{target_teamfile:r.teamfile,target_alias:r.alias})),a=R4([...Gf(t,{from:r.value}),...Gf(t,{target_teamfile:r.teamfile,target_alias:r.alias})]);return{scope:"self",identity:r.value,...vN(),team:{name:s.name,teamfile:n.teamfile_path},members:s.members.map(l=>A4(t,n.teamfile_path,l)),activity:{from_me:i.map(l=>Vf(l,t)),to_me:o.map(l=>Vf(l,t))},transcript_harvest:await SN(a),mailbox:{outbound:$l(L4(t,r.teamfile,r.alias),"outbound"),inbound_pending:$l(O4(t,r.teamfile,r.alias),"inbound")},waiting_on:C4(t,r.teamfile,r.alias).map(l=>bN(l,t))}}function vN(){let t=null;try{t=A_(N_())}catch{}return{db_path:ne(),site_name:t}}async function I4(t){let e=t.listRootTeams();return{scope:"db",identity:null,...vN(),teams:e.map(r=>N4(t,r)),activity:Kf(Cl(t)).map(r=>Vf(r,t)),transcript_harvest:await SN(Gf(t)),mailbox:{pending_outbound:$l(pN(t,"sender"),"outbound"),pending_inbound:$l(pN(t,"receiver"),"inbound")},waiting_on:$4(t).map(r=>bN(r,t))}}function N4(t,e){if(!p4(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 r=0;try{r=Ve(e.teamfile_path,t).members.length}catch{r=0}return{name:e.name,teamfile:e.teamfile_path,member_count:r,registered_at:e.registered_at,last_seeded_at:e.last_seeded_at}}function A4(t,e,r){let n=r.teamfile===void 0?null:Se(y4(r.teamfile)?r.teamfile:w4(EN(e),r.teamfile),t),s=_t(t,e,r.alias),i=s.busy&&s.reason==="in-flight"?x4(t,e,r.alias,s.inFlight):null;return{alias:r.alias,provider:r.provider,model:r.model??null,teamfile:e,referenced_teamfile:n,sessionid:r.session??null,sessiondir:r.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 x4(t,e,r,n){let s=n.sender_alias==="operator"?"operator":`${n.sender_teamfile}:${n.sender_alias}`,o=t.db.prepare(`
3272
3275
  SELECT * FROM tracked_invocation
3273
3276
  WHERE kind = 'chat'
3274
3277
  AND status = 'running'
@@ -3282,7 +3285,7 @@ Examples:
3282
3285
  SELECT * FROM tracked_invocation
3283
3286
  ${s}
3284
3287
  ORDER BY started_at DESC, id DESC
3285
- `).all(...n)}function Gf(t,e={}){return Cl(t,e).filter(n=>n.kind==="chat"&&n.status==="running"&&yn(n)==="dead")}function R4(t){let e=new Set,r=[];for(let n of t)e.has(n.id)||(e.add(n.id),r.push(n));return r.sort((n,s)=>{let i=Date.parse(s.started_at)-Date.parse(n.started_at);return Number.isFinite(i)&&i!==0?i:s.id-n.id})}function L4(t,e,r){return t.db.prepare(`
3288
+ `).all(...n)}function Gf(t,e={}){return Cl(t,e).filter(n=>n.kind==="chat"&&n.status==="running"&&En(n)==="dead")}function R4(t){let e=new Set,r=[];for(let n of t)e.has(n.id)||(e.add(n.id),r.push(n));return r.sort((n,s)=>{let i=Date.parse(s.started_at)-Date.parse(n.started_at);return Number.isFinite(i)&&i!==0?i:s.id-n.id})}function L4(t,e,r){return t.db.prepare(`
3286
3289
  SELECT * FROM agent_mailbox
3287
3290
  WHERE sender_teamfile = ?
3288
3291
  AND sender_alias = ?
@@ -3345,9 +3348,9 @@ Examples:
3345
3348
  ELSE delivered_at
3346
3349
  END ASC,
3347
3350
  id ASC
3348
- `).all()}function Kf(t){return t.filter(e=>yn(e)!=="dead")}function bN(t,e){let r=t.delivered_at!==null&&(t.receipt===null||t.receipt==="");return{id:t.id,state:r?"no reply":"queued",sender:t.sender_teamfile===null||t.sender_alias===null?null:`${t.sender_teamfile}:${t.sender_alias}`,receiver:`${t.receiver_teamfile}:${t.receiver_alias}`,message_type:t.message_type,payload:t.payload,payload_preview:xN(t.payload),receiver_availability:M4(_t(e,t.receiver_teamfile,t.receiver_alias)),age_basis_at:r?t.delivered_at:t.created_at,created_at:t.created_at,delivered_at:t.delivered_at}}function M4(t){if(!t.busy)return{state:"idle",reason:null,detail:"receiver idle now"};if(t.reason==="in-flight"){let s=t.inFlight.sender_alias==="operator"?"operator":`${t.inFlight.sender_teamfile}:${t.inFlight.sender_alias}`,i=t.inFlight.holder_pid===null?"":`, holder pid ${t.inFlight.holder_pid}`;return{state:"busy",reason:"in-flight",detail:`receiver busy now (in-flight: ${lt(s)} since ${t.inFlight.started_at}${i})`}}if(t.source==="terminal-lock"){let s=t.terminalLock,i=s.holder_host===lN()?"this host":s.holder_host;return{state:"busy",reason:"terminal-held",detail:`receiver busy now (terminal: holder pid ${s.holder_pid} alive on ${i})`}}let e=t.terminalInvocation,r=e.holder_host===null?"unknown host":e.holder_host===lN()?"this host":e.holder_host,n=e.holder_pid===null?"":` holder pid ${e.holder_pid}`;return{state:"busy",reason:"terminal-held",detail:`receiver busy now (terminal: invocation #${e.id}${n} alive on ${r})`}}async function SN(t){let e=[];for(let r of t)e.push(await D4(r));return e}async function D4(t){let e=t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,r={tracked_invocation_id:t.id,from_identity:t.from_identity,target:e??"(unknown)",started_at:t.started_at,tail_hint:e===null?"":`lmctl tail "${t.target_teamfile}" ${t.target_alias}`};if(e===null)return mn(r,"missing-target",null,null);if(t.request_payload===null||t.request_payload.length===0)return mn(r,"missing-request-payload",null,null);let n=j4(t.meta);if(n.provider===null||n.sessionid===null)return mn(r,"missing-session-metadata",n.provider,n.sessionid);if(!P4(n.provider))return mn(r,"unsupported-provider",n.provider,n.sessionid);let s;try{s=await Ue(n.sessionid,n.provider)}catch{return mn(r,"read-error",n.provider,n.sessionid)}if(s===null)return mn(r,"session-not-found",n.provider,n.sessionid);let i=F4(t.request_payload,s.messages);return i.state!=="completed"?mn(r,i.reason,n.provider,n.sessionid):{...r,state:"completed",reason:null,provider:n.provider,session_id:n.sessionid,result_payload:i.result,result_preview:AN(i.result),assistant_timestamp:i.assistantTimestamp,matched_user_index:i.userIndex}}function mn(t,e,r,n){return{...t,state:"unreconciled",reason:e,provider:r,session_id:n,result_payload:null,result_preview:null,assistant_timestamp:null,matched_user_index:null}}function j4(t){if(t===null||t.trim()==="")return{provider:null,sessionid:null};try{let e=JSON.parse(t);return{provider:typeof e.provider=="string"&&e.provider.length>0?e.provider:null,sessionid:typeof e.sessionid=="string"&&e.sessionid.length>0?e.sessionid:null}}catch{return{provider:null,sessionid:null}}}function P4(t){return["claude","codex","gemini","copilot","opencode","lmplayer","qwen","agy","kimi","ClaudeMock"].includes(t)}function F4(t,e){let r=e.map((i,o)=>({message:i,index:o})).filter(({message:i})=>i.role==="user"&&i.content===t);if(r.length===0)return{state:"unreconciled",reason:"request-not-found"};if(r.length>1)return{state:"unreconciled",reason:"duplicate-request"};let n=r[0].index,s=[];for(let i of e.slice(n+1)){if(i.role==="user")break;i.role==="assistant"&&i.content.trim().length>0&&s.push(i)}return s.length===0?{state:"unreconciled",reason:"no-assistant-response"}:{state:"completed",userIndex:n,result:s.map(i=>i.content).join(`
3351
+ `).all()}function Kf(t){return t.filter(e=>En(e)!=="dead")}function bN(t,e){let r=t.delivered_at!==null&&(t.receipt===null||t.receipt==="");return{id:t.id,state:r?"no reply":"queued",sender:t.sender_teamfile===null||t.sender_alias===null?null:`${t.sender_teamfile}:${t.sender_alias}`,receiver:`${t.receiver_teamfile}:${t.receiver_alias}`,message_type:t.message_type,payload:t.payload,payload_preview:xN(t.payload),receiver_availability:M4(_t(e,t.receiver_teamfile,t.receiver_alias)),age_basis_at:r?t.delivered_at:t.created_at,created_at:t.created_at,delivered_at:t.delivered_at}}function M4(t){if(!t.busy)return{state:"idle",reason:null,detail:"receiver idle now"};if(t.reason==="in-flight"){let s=t.inFlight.sender_alias==="operator"?"operator":`${t.inFlight.sender_teamfile}:${t.inFlight.sender_alias}`,i=t.inFlight.holder_pid===null?"":`, holder pid ${t.inFlight.holder_pid}`;return{state:"busy",reason:"in-flight",detail:`receiver busy now (in-flight: ${lt(s)} since ${t.inFlight.started_at}${i})`}}if(t.source==="terminal-lock"){let s=t.terminalLock,i=s.holder_host===lN()?"this host":s.holder_host;return{state:"busy",reason:"terminal-held",detail:`receiver busy now (terminal: holder pid ${s.holder_pid} alive on ${i})`}}let e=t.terminalInvocation,r=e.holder_host===null?"unknown host":e.holder_host===lN()?"this host":e.holder_host,n=e.holder_pid===null?"":` holder pid ${e.holder_pid}`;return{state:"busy",reason:"terminal-held",detail:`receiver busy now (terminal: invocation #${e.id}${n} alive on ${r})`}}async function SN(t){let e=[];for(let r of t)e.push(await D4(r));return e}async function D4(t){let e=t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,r={tracked_invocation_id:t.id,from_identity:t.from_identity,target:e??"(unknown)",started_at:t.started_at,tail_hint:e===null?"":`lmctl tail "${t.target_teamfile}" ${t.target_alias}`};if(e===null)return fn(r,"missing-target",null,null);if(t.request_payload===null||t.request_payload.length===0)return fn(r,"missing-request-payload",null,null);let n=j4(t.meta);if(n.provider===null||n.sessionid===null)return fn(r,"missing-session-metadata",n.provider,n.sessionid);if(!P4(n.provider))return fn(r,"unsupported-provider",n.provider,n.sessionid);let s;try{s=await Ue(n.sessionid,n.provider)}catch{return fn(r,"read-error",n.provider,n.sessionid)}if(s===null)return fn(r,"session-not-found",n.provider,n.sessionid);let i=F4(t.request_payload,s.messages);return i.state!=="completed"?fn(r,i.reason,n.provider,n.sessionid):{...r,state:"completed",reason:null,provider:n.provider,session_id:n.sessionid,result_payload:i.result,result_preview:AN(i.result),assistant_timestamp:i.assistantTimestamp,matched_user_index:i.userIndex}}function fn(t,e,r,n){return{...t,state:"unreconciled",reason:e,provider:r,session_id:n,result_payload:null,result_preview:null,assistant_timestamp:null,matched_user_index:null}}function j4(t){if(t===null||t.trim()==="")return{provider:null,sessionid:null};try{let e=JSON.parse(t);return{provider:typeof e.provider=="string"&&e.provider.length>0?e.provider:null,sessionid:typeof e.sessionid=="string"&&e.sessionid.length>0?e.sessionid:null}}catch{return{provider:null,sessionid:null}}}function P4(t){return["claude","codex","gemini","copilot","opencode","lmplayer","qwen","agy","kimi","ClaudeMock"].includes(t)}function F4(t,e){let r=e.map((i,o)=>({message:i,index:o})).filter(({message:i})=>i.role==="user"&&i.content===t);if(r.length===0)return{state:"unreconciled",reason:"request-not-found"};if(r.length>1)return{state:"unreconciled",reason:"duplicate-request"};let n=r[0].index,s=[];for(let i of e.slice(n+1)){if(i.role==="user")break;i.role==="assistant"&&i.content.trim().length>0&&s.push(i)}return s.length===0?{state:"unreconciled",reason:"no-assistant-response"}:{state:"completed",userIndex:n,result:s.map(i=>i.content).join(`
3349
3352
 
3350
- `),assistantTimestamp:U4(s[s.length-1]?.timestamp)}}function U4(t){if(t===void 0)return null;let e=t.getTime();return Number.isFinite(e)?t.toISOString():null}function Vf(t,e){let r={id:t.id,kind:t.kind,origin:t.origin,status:t.status,holder_liveness:yn(t),mailbox_delivery:null,from_identity:t.from_identity,target:t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,started_at:t.started_at,ended_at:t.ended_at,result:yN(t.result_summary),error:yN(t.error)};return r.mailbox_delivery=Y4(r,e),r}function $l(t,e){let r=new Map;for(let n of t){let s=n.sender_teamfile===null||n.sender_alias===null?"operator":`${n.sender_teamfile}:${n.sender_alias}`,i=`${n.receiver_teamfile}:${n.receiver_alias}`,o=e==="outbound"?`${s}\0${i}`:`${i}\0${s}`,a=r.get(o);a===void 0?r.set(o,[n]):a.push(n)}return[...r.values()].map(n=>{let s=n[0],i=n.map(o=>o.created_at).sort();return{sender:s.sender_teamfile===null||s.sender_alias===null?null:`${s.sender_teamfile}:${s.sender_alias}`,receiver:`${s.receiver_teamfile}:${s.receiver_alias}`,message_types:[...new Set(n.map(o=>o.message_type))].sort(),pending_count:n.length,oldest_created_at:i[0],newest_created_at:i[i.length-1],ids:n.map(o=>o.id)}})}function W4(t,e){return t.scope==="self"?B4(t,e):H4(t,e)}function q4(t){if(t===null)return"idle";let e=t.holder_pid!==null?`pid ${t.holder_pid}${t.holder_host!==null?` on ${t.holder_host}`:""}`:"holder",r=t.reason==="dead-pid"?"appears dead":"stale";return`idle (reclaimable lock: ${e} ${r})`}function B4(t,e){let r=[];r.push(`identity: ${t.identity}`),r.push(`team: ${t.team.name}`),r.push(`teamfile: ${t.team.teamfile}`),r.push(""),r.push("members:"),t.members.length===0&&r.push(" none");for(let n of t.members){let s=n.model===null?"":` model=${n.model}`,i=n.sessionid===null?"":` session=${n.sessionid}`,o=n.state==="idle"?q4(n.reclaimable):`busy (${n.reason})`,a=n.handling===null?"":` handling="${n.handling.request_preview}"`;r.push(` ${n.alias}: ${o} provider=${n.provider}${s}${i}${a}`)}return r.push(""),r.push("Waiting on:"),IN(r,t.waiting_on,"self"),r.push(""),r.push("transcript harvest:"),NN(r,t.transcript_harvest,"self"),r.push(""),r.push("activity from me:"),Yf(r,zf(t.activity.from_me,e.sinceIso),"from-me"),r.push(""),r.push("activity to me:"),Yf(r,zf(t.activity.to_me,e.sinceIso),"to-me"),r.push(""),r.push("mailbox outbound:"),Dl(r,t.mailbox.outbound),r.push(""),r.push("mailbox inbound pending:"),Dl(r,t.mailbox.inbound_pending),r.push(""),r.push(kN(t)),r.join(`
3353
+ `),assistantTimestamp:U4(s[s.length-1]?.timestamp)}}function U4(t){if(t===void 0)return null;let e=t.getTime();return Number.isFinite(e)?t.toISOString():null}function Vf(t,e){let r={id:t.id,kind:t.kind,origin:t.origin,status:t.status,holder_liveness:En(t),mailbox_delivery:null,from_identity:t.from_identity,target:t.target_teamfile===null||t.target_alias===null?null:`${t.target_teamfile}:${t.target_alias}`,started_at:t.started_at,ended_at:t.ended_at,result:yN(t.result_summary),error:yN(t.error)};return r.mailbox_delivery=Y4(r,e),r}function $l(t,e){let r=new Map;for(let n of t){let s=n.sender_teamfile===null||n.sender_alias===null?"operator":`${n.sender_teamfile}:${n.sender_alias}`,i=`${n.receiver_teamfile}:${n.receiver_alias}`,o=e==="outbound"?`${s}\0${i}`:`${i}\0${s}`,a=r.get(o);a===void 0?r.set(o,[n]):a.push(n)}return[...r.values()].map(n=>{let s=n[0],i=n.map(o=>o.created_at).sort();return{sender:s.sender_teamfile===null||s.sender_alias===null?null:`${s.sender_teamfile}:${s.sender_alias}`,receiver:`${s.receiver_teamfile}:${s.receiver_alias}`,message_types:[...new Set(n.map(o=>o.message_type))].sort(),pending_count:n.length,oldest_created_at:i[0],newest_created_at:i[i.length-1],ids:n.map(o=>o.id)}})}function W4(t,e){return t.scope==="self"?B4(t,e):H4(t,e)}function q4(t){if(t===null)return"idle";let e=t.holder_pid!==null?`pid ${t.holder_pid}${t.holder_host!==null?` on ${t.holder_host}`:""}`:"holder",r=t.reason==="dead-pid"?"appears dead":"stale";return`idle (reclaimable lock: ${e} ${r})`}function B4(t,e){let r=[];r.push(`identity: ${t.identity}`),r.push(`team: ${t.team.name}`),r.push(`teamfile: ${t.team.teamfile}`),r.push(""),r.push("members:"),t.members.length===0&&r.push(" none");for(let n of t.members){let s=n.model===null?"":` model=${n.model}`,i=n.sessionid===null?"":` session=${n.sessionid}`,o=n.state==="idle"?q4(n.reclaimable):`busy (${n.reason})`,a=n.handling===null?"":` handling="${n.handling.request_preview}"`;r.push(` ${n.alias}: ${o} provider=${n.provider}${s}${i}${a}`)}return r.push(""),r.push("Waiting on:"),IN(r,t.waiting_on,"self"),r.push(""),r.push("transcript harvest:"),NN(r,t.transcript_harvest,"self"),r.push(""),r.push("activity from me:"),Yf(r,zf(t.activity.from_me,e.sinceIso),"from-me"),r.push(""),r.push("activity to me:"),Yf(r,zf(t.activity.to_me,e.sinceIso),"to-me"),r.push(""),r.push("mailbox outbound:"),Dl(r,t.mailbox.outbound),r.push(""),r.push("mailbox inbound pending:"),Dl(r,t.mailbox.inbound_pending),r.push(""),r.push(kN(t)),r.join(`
3351
3354
  `)}function H4(t,e){let r=[];r.push("scope: db"),r.push("identity: none"),r.push(""),r.push("teams:"),t.teams.length===0&&r.push(" none");for(let n of t.teams){let s=n.name===null?"(unnamed)":n.name;r.push(` ${s}: ${n.teamfile} (${n.member_count} members)`)}return r.push(""),r.push("Waiting on:"),IN(r,t.waiting_on,"db"),r.push(""),r.push("transcript harvest:"),NN(r,t.transcript_harvest,"db"),r.push(""),r.push("recent activity:"),Yf(r,zf(t.activity,e.sinceIso),"db"),r.push(""),r.push("mailbox pending outbound:"),Dl(r,t.mailbox.pending_outbound),r.push(""),r.push("mailbox pending inbound:"),Dl(r,t.mailbox.pending_inbound),r.push(""),r.push(kN(t)),r.join(`
3352
3355
  `)}function kN(t){return hs(t.db_path)}function Yf(t,e,r){if(e.length===0){t.push(" none");return}let n=e.filter(gN).sort(K4),s=n.length===0?e:e.filter(i=>!gN(i));for(let i of n.slice(0,dN))hN(t,i,r);Ml(t,n.length,dN,"more open delegations");for(let i of s.slice(0,Ol))hN(t,i,r);Ml(t,s.length,Ol,"older")}function IN(t,e,r){if(e.length===0){t.push(" none");return}let n=X4(e,v4);for(let s of n){let i=r==="db"&&s.sender!==null?`${lt(s.sender)} -> ${lt(s.receiver)}`:lt(s.receiver);t.push(` ${i} - ${s.state} ${tG(s.age_basis_at)} (#${s.id}, ${s.message_type})`),t.push(` "${s.payload_preview}"`),t.push(` ${s.receiver_availability.detail}; lane key: sender+receiver, another sender's chat will not flush this queued mail`)}G4(t,e,n)}function NN(t,e,r){if(e.length===0){t.push(" none");return}for(let n of e.slice(0,Ol)){let s=r==="db"?` from ${lt(n.from_identity)} -> ${lt(n.target)}`:` -> ${lt(n.target)}`;if(n.state==="completed"){let i=n.result_preview===null?"":` "${n.result_preview}"`;t.push(` #${n.tracked_invocation_id} completed in transcript; lmctl DB not finalized${s} since ${n.started_at}${i}`)}else t.push(` #${n.tracked_invocation_id} unreconciled${s} since ${n.started_at} (${n.reason??"unknown"})`);n.tail_hint.length>0&&t.push(` inspect: ${n.tail_hint}`)}Ml(t,e.length,Ol,"more transcript harvest rows")}function X4(t,e){let r=[...t].sort(_N);if(r.length<=e)return r;let n=r.slice(0,e),s=new Set(r.map(i=>i.state));for(let i of s){if(n.some(l=>l.state===i))continue;let o=r.find(l=>l.state===i);if(o===void 0)continue;let a=J4(n);a>=0&&(n[a]=o)}return n.sort(_N)}function J4(t){let e=new Map;for(let r of t)e.set(r.state,(e.get(r.state)??0)+1);for(let r=t.length-1;r>=0;r-=1)if((e.get(t[r].state)??0)>1)return r;return-1}function G4(t,e,r){let n=new Set(r.map(l=>l.id)),s=e.filter(l=>!n.has(l.id));if(s.length===0)return;let i=s.filter(l=>l.state==="queued").length,o=s.filter(l=>l.state==="no reply").length,a=[i>0?`${i} queued`:null,o>0?`${o} no reply`:null].filter(l=>l!==null);t.push(` (+${s.length} older: ${a.join(", ")} -- use --json)`)}function _N(t,e){let r=Date.parse(t.age_basis_at),n=Date.parse(e.age_basis_at);return Number.isFinite(r)&&Number.isFinite(n)&&r!==n?r-n:Number.isFinite(r)!==Number.isFinite(n)?Number.isFinite(r)?-1:1:t.id-e.id}function zf(t,e){let r=Date.parse(e);return Number.isFinite(r)?t.filter(n=>{let s=Date.parse(n.ended_at??n.started_at);return Number.isFinite(s)&&s>=r}):t}function hN(t,e,r){let n=eG(e,r),s=e.status==="running"?`since ${e.started_at}`:`ended ${e.ended_at??e.started_at}`,i=e.error??e.result,o=i===null?"":` "${AN(i)}"`;t.push(` #${e.id} ${V4(e)} ${e.kind}${n} ${s}${o}`)}function gN(t){return t.mailbox_delivery?.state==="queued"||t.mailbox_delivery?.state==="delivering"}function K4(t,e){let r=Date.parse(t.started_at)-Date.parse(e.started_at);return Number.isFinite(r)&&r!==0?r:t.id-e.id}function V4(t){return t.status==="running"&&t.holder_liveness==="unknown"?"RUNNING_UNKNOWN":t.mailbox_delivery===null?t.status.toUpperCase():t.mailbox_delivery.state.toUpperCase()}function Y4(t,e){let r=z4(t,e);return r===null?null:{mailbox_id:r.id,state:r.delivered_at!==null?"delivered":r.delivering_at!==null?"delivering":"queued",delivered_at:r.delivered_at,delivering_at:r.delivering_at}}function z4(t,e){if(t.kind!=="chat"||t.status!=="done"||t.target===null||t.result===null)return null;let r,n;try{r=De(t.from_identity),n=De(t.target)}catch{return null}for(let s of Z4(t.result)){let i=e.getMailboxMessage(s);if(i!==null&&!(i.sender_teamfile!==r.teamfile||i.sender_alias!==r.alias)&&!(i.receiver_teamfile!==n.teamfile||i.receiver_alias!==n.alias)&&Q4(i,t))return i}return null}function Z4(t){let e=new Set,r=[];for(let n of t.matchAll(/\d+/g)){let s=Number(n[0]);!Number.isSafeInteger(s)||s<=0||e.has(s)||(e.add(s),r.push(s))}return r}function Q4(t,e){let r=Date.parse(e.started_at),n=Date.parse(e.ended_at??e.started_at),s=Date.parse(t.created_at);return!Number.isFinite(r)||!Number.isFinite(n)||!Number.isFinite(s)?!1:s>=r&&s<=n}function eG(t,e){if(e==="from-me")return t.target===null?"":` -> ${lt(t.target)}`;if(e==="to-me")return` from ${lt(t.from_identity)}`;let r=t.target===null?"":` -> ${lt(t.target)}`;return` from ${lt(t.from_identity)}${r}`}function Ml(t,e,r,n){let s=e-r;s>0&&t.push(` (+${s} ${n} -- use --json)`)}function Dl(t,e){if(e.length===0){t.push(" none");return}for(let r of e.slice(0,cN)){let n=r.sender??"operator";t.push(` ${lt(n)} -> ${lt(r.receiver)}: ${r.pending_count} pending ${r.message_types.join("+")} (oldest ${r.oldest_created_at})`)}Ml(t,e.length,cN,"more lanes")}function yN(t){return t===null||t.length===0?null:t.replace(/\s+/g," ").trim()}function AN(t){let e=t.replace(/\s+/g," ").trim();return e.length<=uN?e:`${e.slice(0,uN-3)}...`}function xN(t){let e=t.replace(/\s+/gu," ").trim();return e.length<=mN?e:`${e.slice(0,mN-3)}...`}function tG(t){let e=Date.parse(t);if(!Number.isFinite(e))return"unknown age";let r=Math.max(0,Math.floor((Date.now()-e)/1e3));if(r<60)return`${r}s`;let n=Math.floor(r/60);if(n<60)return`${n}m`;let s=Math.floor(n/60);return s<48?`${s}h`:`${Math.floor(s/24)}d`}function lt(t){if(t==="operator")return t;try{let e=De(t);return`${g4(e.teamfile)}:${e.alias}`}catch{return t}}function rG(t){if(t===void 0)return{iso:new Date(Date.now()-b4).toISOString()};let e=/^(\d+)([smhd])$/.exec(t);if(e!==null){let n=Number(e[1]),s=e[2],i=s==="s"?n:s==="m"?n*60:s==="h"?n*3600:n*86400;return{iso:new Date(Date.now()-i*1e3).toISOString()}}let r=Date.parse(t);return Number.isFinite(r)?{iso:new Date(r).toISOString()}:{error:`invalid --since value: ${t} (expected ISO8601 or duration like 24h)`}}var T4,Ol,dN,cN,v4,b4,uN,mN,LN=w(()=>{"use strict";ht();Me();hl();ze();gi();mr();md();Xt();T4=`usage: lmctl status [--json] [--since <duration|ISO8601>]
3353
3356
 
@@ -3357,7 +3360,7 @@ state. From a plain operator shell, show a DB-wide team/activity summary.
3357
3360
  Text output shows recent activity from the last 24h by default. Use --since 7d
3358
3361
  or an ISO timestamp to widen the investigation window. --json returns complete,
3359
3362
  uncapped data.
3360
- `,Ol=5,dN=5,cN=5,v4=5,b4=24*60*60*1e3,uN=72,mN=80});var CN={};he(CN,{backfillEventLog:()=>dG,rebuildProjections:()=>ON});import{createHash as nG}from"node:crypto";function fn(t,e){return t==null?null:{teamfile:t,alias:e??""}}function sG(t,e,r){return`lease_${nG("sha256").update(`${t}\0${e}\0${r}`).digest("hex").slice(0,16)}`}function jl(t,e,r,n){r.forEach((s,i)=>{Ie(t,{stream_id:e,event_type:s.event_type,payload:s.payload,observedLastSeq:i,ts:s.ts},()=>{}).appended?n.appended+=1:n.skipped+=1})}function iG(t){let e=`msg_tcl_${t.id}`,r=fn(t.sender_teamfile,t.sender_alias),n=fn(t.receiver_teamfile,t.receiver_alias),s={table:"team_chat_log",id:t.id},i={message_id:e,sender:r,receiver:n,root_teamfile:t.root_teamfile,legacy:s},o=[{event_type:oe.CREATE,ts:t.created_at,payload:{...i,message_type:"request",content:t.message,origin:t.origin,correlation_status:"legacy-unavailable"}}];return t.status!=="running"&&o.push({event_type:oe.HANDLED,ts:t.created_at,payload:{...i,outcome:t.status,receipt:t.response,error:t.error_detail,truncated:t.truncated===1}}),{streamId:e,events:o}}function oG(t){let e=`msg_mbx_${t.id}`,r=fn(t.sender_teamfile,t.sender_alias),n=fn(t.receiver_teamfile,t.receiver_alias),s={table:"agent_mailbox",id:t.id},i={message_id:e,sender:r,receiver:n,root_teamfile:t.root_teamfile,legacy:s},o=[];if(t.message_type==="response"){let a=t.request_mailbox_id!==null?`msg_mbx_${t.request_mailbox_id}`:null;return o.push({event_type:oe.RESPONSE_CREATE,ts:t.created_at,payload:{...i,message_type:"response",content:t.payload,in_reply_to_message_id:a,correlation_status:"legacy-unavailable"}}),o.push({event_type:oe.RESPONSE_ENQUEUE,ts:t.created_at,payload:{...i,message_type:"response",in_reply_to_message_id:a}}),t.delivered_at!==null&&o.push({event_type:oe.RESPONSE_DELIVERED,ts:t.delivered_at,payload:{...i,message_type:"response",receipt:t.receipt}}),{streamId:e,events:o}}return o.push({event_type:oe.CREATE,ts:t.created_at,payload:{...i,message_type:"request",content:t.payload,correlation_status:"legacy-unavailable"}}),o.push({event_type:oe.ENQUEUE,ts:t.created_at,payload:{...i,message_type:"request"}}),t.waited_at!==null&&o.push({event_type:oe.WAIT_REGISTER,ts:t.waited_at,payload:{...i,waited_by:t.waited_by}}),(t.delivering_at!==null||t.delivery_holder_pid!==null)&&o.push({event_type:oe.DELIVER_CLAIM,ts:t.delivering_at??t.created_at,payload:{...i,pid:t.delivery_holder_pid,host:t.delivery_holder_host}}),t.delivered_at!==null&&o.push({event_type:oe.DELIVERED,ts:t.delivered_at,payload:{...i,receipt:t.receipt}}),{streamId:e,events:o}}function aG(t){let e=`inv_${t.id}`,r=fn(t.target_teamfile,t.target_alias),n={table:"tracked_invocation",id:t.id},s=[{event_type:oe.INVOCATION_START,ts:t.started_at,payload:{invocation_id:e,kind:t.kind,origin:t.origin,launch_source:t.launch_source,from_identity:t.from_identity,target:r,root_teamfile:t.root_teamfile,scope_teamfile:t.scope_teamfile,cwd:t.cwd,command:t.command,request_payload:t.request_payload,started_at:t.started_at,request_message_id:t.team_chat_log_id!==null?`msg_tcl_${t.team_chat_log_id}`:null,holder_pid:t.holder_pid,holder_host:t.holder_host,legacy:n}}];return t.notified_by!==null&&s.push({event_type:oe.INVOCATION_NOTIFY_CLAIM,ts:t.notified_at??t.started_at,payload:{invocation_id:e,notified_by:t.notified_by,notified_at:t.notified_at,legacy:n}}),t.status!=="running"&&s.push({event_type:oe.INVOCATION_FINISH,ts:t.ended_at??t.started_at,payload:{invocation_id:e,status:t.status,ended_at:t.ended_at,exit_code:t.exit_code,signal:t.signal,result_summary:t.result_summary,error:t.error,legacy:n}}),{streamId:e,events:s}}function lG(t){let e=sG(t.receiver_teamfile,t.receiver_alias,t.started_at),r=fn(t.receiver_teamfile,t.receiver_alias),n=fn(t.sender_teamfile,t.sender_alias);return{streamId:e,events:[{event_type:oe.INFLIGHT_TAKE,ts:t.started_at,payload:{lease_id:e,receiver:r,sender:n,holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at,legacy:{table:"agent_inflight",receiver_teamfile:t.receiver_teamfile,receiver_alias:t.receiver_alias}}}]}}function dG(t){let e={appended:0,skipped:0},r={team_chat_log:0,agent_mailbox:0,tracked_invocation:0,agent_inflight:0};t.transaction(()=>{for(let i of t.prepare("SELECT * FROM team_chat_log ORDER BY id").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=iG(i);jl(t,a,l,e),r.team_chat_log+=e.appended+e.skipped-o}for(let i of t.prepare("SELECT * FROM agent_mailbox ORDER BY id").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=oG(i);jl(t,a,l,e),r.agent_mailbox+=e.appended+e.skipped-o}for(let i of t.prepare("SELECT * FROM tracked_invocation ORDER BY id").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=aG(i);jl(t,a,l,e),r.tracked_invocation+=e.appended+e.skipped-o}for(let i of t.prepare("SELECT * FROM agent_inflight ORDER BY receiver_teamfile, receiver_alias").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=lG(i);jl(t,a,l,e),r.agent_inflight+=e.appended+e.skipped-o}ON(t)})();let s=i=>t.prepare(`SELECT count(*) AS n FROM ${i}`).get().n;return{appended:e.appended,skipped:e.skipped,bySource:r,projections:{agent_state:s("agent_state"),message_pending:s("message_pending"),invocation_state:s("invocation_state")}}}function ON(t){t.exec("DELETE FROM agent_state"),t.exec("DELETE FROM message_pending"),t.exec("DELETE FROM invocation_state");let e=t.prepare("SELECT seq, stream_id, event_type, payload FROM message_event ORDER BY seq").all();for(let r of e){let n=JSON.parse(r.payload);cG(t,r.seq,r.stream_id,r.event_type,n)}}function Le(t,e,r){let n=t[e];return n!=null?n[r]??null:null}function cG(t,e,r,n,s){switch(n){case oe.ENQUEUE:case oe.RESPONSE_ENQUEUE:{let i=n===oe.RESPONSE_ENQUEUE;t.prepare(`INSERT INTO message_pending
3363
+ `,Ol=5,dN=5,cN=5,v4=5,b4=24*60*60*1e3,uN=72,mN=80});var CN={};he(CN,{backfillEventLog:()=>dG,rebuildProjections:()=>ON});import{createHash as nG}from"node:crypto";function pn(t,e){return t==null?null:{teamfile:t,alias:e??""}}function sG(t,e,r){return`lease_${nG("sha256").update(`${t}\0${e}\0${r}`).digest("hex").slice(0,16)}`}function jl(t,e,r,n){r.forEach((s,i)=>{Ie(t,{stream_id:e,event_type:s.event_type,payload:s.payload,observedLastSeq:i,ts:s.ts},()=>{}).appended?n.appended+=1:n.skipped+=1})}function iG(t){let e=`msg_tcl_${t.id}`,r=pn(t.sender_teamfile,t.sender_alias),n=pn(t.receiver_teamfile,t.receiver_alias),s={table:"team_chat_log",id:t.id},i={message_id:e,sender:r,receiver:n,root_teamfile:t.root_teamfile,legacy:s},o=[{event_type:oe.CREATE,ts:t.created_at,payload:{...i,message_type:"request",content:t.message,origin:t.origin,correlation_status:"legacy-unavailable"}}];return t.status!=="running"&&o.push({event_type:oe.HANDLED,ts:t.created_at,payload:{...i,outcome:t.status,receipt:t.response,error:t.error_detail,truncated:t.truncated===1}}),{streamId:e,events:o}}function oG(t){let e=`msg_mbx_${t.id}`,r=pn(t.sender_teamfile,t.sender_alias),n=pn(t.receiver_teamfile,t.receiver_alias),s={table:"agent_mailbox",id:t.id},i={message_id:e,sender:r,receiver:n,root_teamfile:t.root_teamfile,legacy:s},o=[];if(t.message_type==="response"){let a=t.request_mailbox_id!==null?`msg_mbx_${t.request_mailbox_id}`:null;return o.push({event_type:oe.RESPONSE_CREATE,ts:t.created_at,payload:{...i,message_type:"response",content:t.payload,in_reply_to_message_id:a,correlation_status:"legacy-unavailable"}}),o.push({event_type:oe.RESPONSE_ENQUEUE,ts:t.created_at,payload:{...i,message_type:"response",in_reply_to_message_id:a}}),t.delivered_at!==null&&o.push({event_type:oe.RESPONSE_DELIVERED,ts:t.delivered_at,payload:{...i,message_type:"response",receipt:t.receipt}}),{streamId:e,events:o}}return o.push({event_type:oe.CREATE,ts:t.created_at,payload:{...i,message_type:"request",content:t.payload,correlation_status:"legacy-unavailable"}}),o.push({event_type:oe.ENQUEUE,ts:t.created_at,payload:{...i,message_type:"request"}}),t.waited_at!==null&&o.push({event_type:oe.WAIT_REGISTER,ts:t.waited_at,payload:{...i,waited_by:t.waited_by}}),(t.delivering_at!==null||t.delivery_holder_pid!==null)&&o.push({event_type:oe.DELIVER_CLAIM,ts:t.delivering_at??t.created_at,payload:{...i,pid:t.delivery_holder_pid,host:t.delivery_holder_host}}),t.delivered_at!==null&&o.push({event_type:oe.DELIVERED,ts:t.delivered_at,payload:{...i,receipt:t.receipt}}),{streamId:e,events:o}}function aG(t){let e=`inv_${t.id}`,r=pn(t.target_teamfile,t.target_alias),n={table:"tracked_invocation",id:t.id},s=[{event_type:oe.INVOCATION_START,ts:t.started_at,payload:{invocation_id:e,kind:t.kind,origin:t.origin,launch_source:t.launch_source,from_identity:t.from_identity,target:r,root_teamfile:t.root_teamfile,scope_teamfile:t.scope_teamfile,cwd:t.cwd,command:t.command,request_payload:t.request_payload,started_at:t.started_at,request_message_id:t.team_chat_log_id!==null?`msg_tcl_${t.team_chat_log_id}`:null,holder_pid:t.holder_pid,holder_host:t.holder_host,legacy:n}}];return t.notified_by!==null&&s.push({event_type:oe.INVOCATION_NOTIFY_CLAIM,ts:t.notified_at??t.started_at,payload:{invocation_id:e,notified_by:t.notified_by,notified_at:t.notified_at,legacy:n}}),t.status!=="running"&&s.push({event_type:oe.INVOCATION_FINISH,ts:t.ended_at??t.started_at,payload:{invocation_id:e,status:t.status,ended_at:t.ended_at,exit_code:t.exit_code,signal:t.signal,result_summary:t.result_summary,error:t.error,legacy:n}}),{streamId:e,events:s}}function lG(t){let e=sG(t.receiver_teamfile,t.receiver_alias,t.started_at),r=pn(t.receiver_teamfile,t.receiver_alias),n=pn(t.sender_teamfile,t.sender_alias);return{streamId:e,events:[{event_type:oe.INFLIGHT_TAKE,ts:t.started_at,payload:{lease_id:e,receiver:r,sender:n,holder_pid:t.holder_pid,holder_host:null,started_at:t.started_at,legacy:{table:"agent_inflight",receiver_teamfile:t.receiver_teamfile,receiver_alias:t.receiver_alias}}}]}}function dG(t){let e={appended:0,skipped:0},r={team_chat_log:0,agent_mailbox:0,tracked_invocation:0,agent_inflight:0};t.transaction(()=>{for(let i of t.prepare("SELECT * FROM team_chat_log ORDER BY id").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=iG(i);jl(t,a,l,e),r.team_chat_log+=e.appended+e.skipped-o}for(let i of t.prepare("SELECT * FROM agent_mailbox ORDER BY id").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=oG(i);jl(t,a,l,e),r.agent_mailbox+=e.appended+e.skipped-o}for(let i of t.prepare("SELECT * FROM tracked_invocation ORDER BY id").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=aG(i);jl(t,a,l,e),r.tracked_invocation+=e.appended+e.skipped-o}for(let i of t.prepare("SELECT * FROM agent_inflight ORDER BY receiver_teamfile, receiver_alias").all()){let o=e.appended+e.skipped,{streamId:a,events:l}=lG(i);jl(t,a,l,e),r.agent_inflight+=e.appended+e.skipped-o}ON(t)})();let s=i=>t.prepare(`SELECT count(*) AS n FROM ${i}`).get().n;return{appended:e.appended,skipped:e.skipped,bySource:r,projections:{agent_state:s("agent_state"),message_pending:s("message_pending"),invocation_state:s("invocation_state")}}}function ON(t){t.exec("DELETE FROM agent_state"),t.exec("DELETE FROM message_pending"),t.exec("DELETE FROM invocation_state");let e=t.prepare("SELECT seq, stream_id, event_type, payload FROM message_event ORDER BY seq").all();for(let r of e){let n=JSON.parse(r.payload);cG(t,r.seq,r.stream_id,r.event_type,n)}}function Le(t,e,r){let n=t[e];return n!=null?n[r]??null:null}function cG(t,e,r,n,s){switch(n){case oe.ENQUEUE:case oe.RESPONSE_ENQUEUE:{let i=n===oe.RESPONSE_ENQUEUE;t.prepare(`INSERT INTO message_pending
3361
3364
  (message_id, message_type, in_reply_to, sender_teamfile, sender_alias,
3362
3365
  receiver_teamfile, receiver_alias, lifecycle_state, created_seq, last_seq)
3363
3366
  VALUES (?, ?, ?, ?, ?, ?, ?, 'queued', ?, ?)