@lmctl-ai/lmctl 0.1.146 → 0.1.147

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -2041,7 +2041,7 @@ ${i.text}`;return await Zo(e.io,r.map(l=>l.id),a),{status:"stalled",receipt:a,pr
2041
2041
  Either drop the second arg, or pass <teamfile>.lmctl as the first arg.`}:{mode:"error",message:`lmctl ${e.name}: can't infer target type from "${r}".
2042
2042
  Expected one of: <path>.lmctl, <path>.lmctl:<alias>, <sessionid>.`}}if(s.session!==void 0){if(!e.supportsRaw)return{mode:"error",message:`lmctl ${e.name}: --session (raw mode) is not supported by ${e.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 ${e.name}: a target is required.
2043
2043
  Use: <path>.lmctl[:<alias>] | <path>.lmctl <alias> | <sessionid> | --run <id>`}}var ge,MD,jD,sa,Lt=T(()=>{"use strict";zt();Rt();ge=class extends Error{constructor(t){super(t),this.name="ChatTargetError"}},MD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,jD=/^ses_[A-Za-z0-9_-]+$/,sa=/^[A-Za-z][A-Za-z0-9_-]*$/});function PD(e=process.env){let t=e.LMCTL_DAEMON_MAILBOX_RELAY_MAX_BATCHES;if(t===void 0||t.trim()==="")return xE;let r=Number(t);return!Number.isFinite(r)||r<=0?xE:Math.max(1,Math.trunc(r))}async function RE(e){let t=e.env??process.env,r=e.maxBatches??PD(t),n=JD(e.dal),s={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};HD(e.dal,t);let i=new Set;for(;s.scanned<r;){let o=e.dal.listRelayMailboxLanes(r).find(l=>!i.has(AE(l)));if(o===void 0)break;i.add(AE(o)),s.scanned+=1;let a=await FD(e.dal,n,t,o);s.delivered+=a.delivered,s.skipped_busy+=a.skipped_busy,s.skipped_terminal+=a.skipped_terminal,s.errors+=a.errors}return s}function AE(e){return JSON.stringify([e.sender_teamfile,e.sender_alias,e.receiver_teamfile,e.receiver_alias])}async function FD(e,t,r,n){let s={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},i=Pr(e,n.receiver_teamfile,n.receiver_alias);if(i.busy)return i.reason==="terminal-held"?{...s,skipped_terminal:1}:{...s,skipped_busy:1};let o=null;try{let a=He(n.receiver_teamfile,n.receiver_alias,e),l=hr(e,{receiver_teamfile:n.receiver_teamfile,receiver_alias:n.receiver_alias,sender_teamfile:n.sender_teamfile,sender_alias:n.sender_alias,ttlMs:gr()});if(!l.acquired)return{...s,skipped_busy:1};if(o=l.lease,n.message_type==="response"){let d=await iE({sender:{teamfile:n.sender_teamfile,alias:n.sender_alias},receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias,provider:a.provider,sessionId:a.sessionid,cwd:a.sessiondir,...a.model!==void 0?{model:a.model}:{},...a.effort!==void 0?{effort:a.effort}:{},...a.isLead!==void 0?{isLead:a.isLead}:{}},io:t,permissionMode:"yolo",env:r});return BD(d)}let c=await Qo({sender:{teamfile:n.sender_teamfile,alias:n.sender_alias},receiver:{teamfile:n.receiver_teamfile,alias:n.receiver_alias,provider:a.provider,sessionId:a.sessionid,cwd:a.sessiondir,...a.model!==void 0?{model:a.model}:{},...a.effort!==void 0?{effort:a.effort}:{},...a.isLead!==void 0?{isLead:a.isLead}:{}},io:t,permissionMode:"yolo",env:r,finalize:"caller"});return WD(e,c)}catch(a){return UD(e,n,`relay delivery error: ${a instanceof Error?a.message:String(a)}`)}finally{if(o!==null)try{e.releaseAgentInflight(o)}catch{}}}function UD(e,t,r){let n={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0};try{let s=t.message_type==="response"?e.listEnqueuedResponseMailFromSender(t.sender_teamfile,t.sender_alias,t.receiver_teamfile,t.receiver_alias):e.listEnqueuedRequestMailFromSender(t.sender_teamfile,t.sender_alias,t.receiver_teamfile,t.receiver_alias),i=t.message_type==="response"?e.markMailDelivered(s.map(o=>o.id),r,new Date().toISOString()):e.markRelayRequestDeliveredAndEnqueueResponses(s,r,new Date().toISOString()).marked;return{...n,delivered:i,errors:1}}catch{return{...n,errors:1}}}function WD(e,t){let r={scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},n=qD(t),s=new Date().toISOString(),{marked:i}=e.markRelayRequestDeliveredAndEnqueueResponses(t.queued,n,s);return{...r,delivered:i,errors:t.status==="ok"?0:1}}function BD(e){return{...{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0},delivered:e.deliveredIds.length,errors:e.status==="ok"?0:1}}function qD(e){return e.status==="ok"?e.receipt:e.status==="stalled"?`relay delivery error: provider stalled${e.stalledAfterMs!==void 0?` after ${e.stalledAfterMs}ms`:""}
2044
- ${e.receipt}`:`relay delivery error: ${e.error}`}function HD(e,t){let r=t.LMCTL_MAILBOX_DELIVERY_STALE_MS,n=r===void 0||r.trim()===""?NaN:Number(r),s=Number.isFinite(n)&&n>0?n:8*60*60*1e3;e.reclaimStaleMailboxDeliveries(new Date(Date.now()-s).toISOString())}function JD(e){return{stdout:{write:()=>{}},stderr:{write:()=>{}},dal:e}}var xE,LE=T(()=>{"use strict";Fr();Hd();ea();Lt();xE=10});function ks(){let e=process.env.LMCTL_DAEMON_INTERVAL_MS;if(e===void 0||e.trim().length===0)return 5e3;let t=Number(e);return Number.isFinite(t)&&t>0?t:5e3}function GD(e=process.env){let t=e.LMCTL_DAEMON_FEATURES;if(t===void 0||t.trim()==="")return new Set;let r=new Set;for(let n of t.split(",")){let s=n.trim();if(s!==""){if(s==="all")return new Set(OE);XD.has(s)&&r.add(s)}}return r}function $E(e){let t=e.intervalMs??ks(),r=e.runOnceFn??jr,n=new Set(e.features??GD()),s={running:e.autoStart!==!1,in_flight:!1,interval_ms:t,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,c=null;n.has("rollup-updater")&&e.startRollupUpdaterFn!==!1&&(c=(e.startRollupUpdaterFn??Hw)(e.dal));let d=m=>{s.running&&(i=setTimeout(()=>{f.runCycle().finally(()=>d(t))},m))},u=m=>{s.running&&(o=setTimeout(()=>{l===null&&(l=CE(e.dal,n,e.monitorSessionActivityFn??yc,t,s).finally(()=>{l=null})),l.finally(()=>u(wc(e.dal,t)))},m))},f={state:s,runCycle:async()=>(a!==null||(a=VD(e.dal,r,e.collectSessionSizesFn??f_,e.scanIntakeFn??lo,e.monitorSessionActivityFn??yc,e.mailboxRelayFn??RE,e.worker_id??"daemon",t,n,s).finally(()=>{a=null})),a),stop:async()=>{s.running=!1,i!==null&&clearTimeout(i),o!==null&&clearTimeout(o),c?.stop(),a!==null&&await a.catch(()=>{}),l!==null&&await l.catch(()=>{})}};if(s.running){let m=e.firstDelayMs??5e3;d(m),n.has("session-monitor")&&u(m)}return f}async function VD(e,t,r,n,s,i,o,a,l,c){c.in_flight=!0,c.last_started_at=new Date().toISOString(),c.last_error=null;let d=[],u=0,f=0,m=[],p=null,_=KD();try{if(l.has("durable-memory-policies")&&Ey({dal:e}),l.has("drift-detectors")&&Gw({dal:e}),l.has("intake")&&(m=await n(e)),l.has("job-worker"))for(;;){let g=await t({dal:e,worker_id:o,lease_ms:6e5});if(g===null)break;d.push(g)}if(l.has("mailbox-relay")&&(_=await i({dal:e})),l.has("session-size")){let g=await r(e);u=g.recorded,f=g.failed}l.has("session-monitor")&&(p=await CE(e,l,s,a,c))}catch(g){c.last_error=g instanceof Error?g.message:String(g);try{e.raiseAttention({kind:"daemon_worker_failed",severity:"error",payload:JSON.stringify({error:c.last_error})})}catch{}}finally{c.in_flight=!1,c.cycles+=1,c.last_jobs_processed=d.length,c.last_session_sizes_recorded=u,c.last_session_size_failures=f,c.last_intake_scanned=m.reduce((g,h)=>g+h.scanned,0),c.last_intake_new_jobs=m.reduce((g,h)=>g+h.new_jobs,0),c.last_intake_failures=m.filter(g=>g.error!==void 0).length,c.last_session_hung_detected=p?.hung_detected??0,c.last_mailbox_relay_scanned=_.scanned,c.last_mailbox_relay_delivered=_.delivered,c.last_mailbox_relay_errors=_.errors,c.jobs_processed+=d.length,c.last_finished_at=new Date().toISOString()}return{jobs_processed:d.length,outcomes:d,session_sizes_recorded:u,session_size_failures:f,intake:m,session_monitor:p,mailbox_relay:_}}function KD(){return{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0}}async function CE(e,t,r,n,s){if(!t.has("session-monitor"))return null;let i=wc(e,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:e,nowMs:o})}catch(a){s.last_session_monitor_error=a instanceof Error?a.message:String(a);try{e.raiseAttention({kind:"daemon_session_monitor_failed",severity:"error",payload:JSON.stringify({error:s.last_session_monitor_error})})}catch{}return null}}var OE,XD,Yd=T(()=>{"use strict";qc();Lo();Ed();Mi();Jw();Vw();Ec();LE();OE=["durable-memory-policies","drift-detectors","intake","job-worker","mailbox-relay","session-size","session-monitor","rollup-updater"],XD=new Set(OE)});function ME(e){let t=e.listMembersInState("in_chat");for(let r of t)e.setMemberState(r.id,"attention_needed","daemon_restarted_mid_chat");return t.length}var jE=T(()=>{"use strict"});import{mkdirSync as YD,readFileSync as zD,readdirSync as ZD,statSync as QD,writeFileSync as eP}from"node:fs";import{dirname as tP,join as PE,sep as DE}from"node:path";function ia(e){return{s3:{async send(n){let s=n;switch(s._localfsTag){case FE:return rP(e,s.input);case UE:return nP(e,s.input);case WE:return sP(e,s.input);default:throw new Error("createLocalFsS3Client: unknown command")}}},commands:{ListObjectsV2Command:Qd,GetObjectCommand:Zd,PutObjectCommand:zd}}}function rP(e,t){let r=BE(e,t.Key);return YD(tP(r),{recursive:!0}),eP(r,t.Body),{}}function nP(e,t){let r=BE(e,t.Key),n;try{n=zD(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 sP(e,t){let r=t.Prefix??"";qE(r);let s=iP(e).sort((d,u)=>d.key<u.key?-1:d.key>u.key?1:0).filter(d=>d.key.startsWith(r)),i=t.ContinuationToken;i!==void 0&&i!==""&&(s=s.filter(d=>d.key>i));let o=typeof t.MaxKeys=="number"&&Number.isFinite(t.MaxKeys)&&t.MaxKeys>0?Math.floor(t.MaxKeys):void 0,a=s,l=!1;o!==void 0&&s.length>o&&(a=s.slice(0,o),l=!0);let c={Contents:a.map(d=>({Key:d.key,LastModified:d.lastModified})),IsTruncated:l};return l&&(c.NextContinuationToken=a[a.length-1].key),c}function BE(e,t){return qE(t),PE(e,t)}function qE(e){if(e.split("/").includes(".."))throw new Error(`localfs-s3-client: refusing key/prefix with '..': ${e}`)}function iP(e){let t=[],r=(n,s)=>{let i;try{i=ZD(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=PE(n,o.name);if(o.isDirectory())r(l,a);else if(o.isFile()){let c=DE==="/"?a:a.split(DE).join("/");t.push({key:c,lastModified:QD(l).mtime})}}};return r(e,""),t}var FE,UE,WE,zd,Zd,Qd,eu=T(()=>{"use strict";FE="localfs-put",UE="localfs-get",WE="localfs-list",zd=class{input;_localfsTag=FE;constructor(t){this.input=t}},Zd=class{input;_localfsTag=UE;constructor(t){this.input=t}},Qd=class{input;_localfsTag=WE;constructor(t){this.input=t}}});function HE(){return{put:0,get:0,list:0}}function tu(e,t=oP){return e.put*t.putUsd+e.get*t.getUsd+e.list*t.listUsd}function ru(e){let t=new Date(e),r=t.getUTCFullYear(),n=String(t.getUTCMonth()+1).padStart(2,"0");return`${r}-${n}`}var oP,oa,nu=T(()=>{"use strict";oP={putUsd:5e-6,getUsd:40000000000000003e-23,listUsd:5e-6};oa=class{counts=HE();record(t,r=1){this.counts[t]+=r}peek(){return{...this.counts}}drain(){let t={...this.counts};return this.counts=HE(),t}estimateCostUsd(t){return tu(this.counts,t)}}});function JE(e){let t=e.now??Date.now,r=e.timers??aP,n=null,s=null;async function i(){let l=t(),c=ru(l),d=e.meter.drain();(d.put>0||d.get>0||d.list>0)&&e.store.addUsage({user_id:e.userId,device_id:e.deviceId,period:c,put:d.put,get:d.get,list:d.list,updated_at:new Date(l).toISOString()});let u=e.store.loadUsage(e.userId,e.deviceId,c),f=u?{put:u.put_count,get:u.get_count,list:u.list_count}:{put:0,get:0,list:0};if(e.publishOwnRollup!==void 0)try{await e.publishOwnRollup(c,f)}catch(_){e.log?.(`[usage] publish rollup failed: ${_ instanceof Error?_.message:String(_)}`)}let m=f;if(e.readUserTotal!==void 0)try{m=await e.readUserTotal(c)}catch(_){e.log?.(`[usage] read user total failed: ${_ instanceof Error?_.message:String(_)}`),m=f}let p=tu(m);if(n!==c&&p>=e.ceilingUsd){n=c,e.log?.(`[usage] quota exceeded period=${c} cost=$${p.toFixed(4)} >= ceiling $${e.ceilingUsd}`);try{e.onQuotaExceeded({period:c,costUsd:p,ceilingUsd:e.ceilingUsd})}catch(_){e.log?.(`[usage] onQuotaExceeded threw: ${_ instanceof Error?_.message:String(_)}`)}}}function o(){return s=(s??Promise.resolve()).then(()=>i()).catch(()=>{}),s}let a=r.setInterval(()=>{o()},e.intervalMs);return{stop(){r.clearInterval(a)},flushNow(){return o()},isOverQuota(){return n!==null&&n===ru(t())}}}var aP,XE=T(()=>{"use strict";nu();aP={setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)}});var su=T(()=>{"use strict";jo();Po();Po()});function lP(e){if(typeof e!="object"||e===null||Array.isArray(e))return null;let t=e;if(typeof t.message_id!="string"||t.message_id==="")return null;if(typeof t.reply_to=="string"&&t.reply_to!==""){let s=t.response;if(typeof s!="object"||s===null)return null;let i=s;return typeof i.status!="number"?null:{message_id:t.message_id,reply_to:t.reply_to,response:i}}let r=t.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:t.message_id,request:n}}function cP(e){return e.reply_to!==void 0&&e.response!==void 0}function dP(e){if(typeof e!="object"||e===null)return;let t=e.conversation_id;return typeof t=="string"?t:void 0}function GE(e){let t=e.reason;if(t!==void 0)return t;try{return new DOMException("Aborted","AbortError")}catch{let r=new Error("Aborted");return r.name="AbortError",r}}var aa,Is,VE=T(()=>{"use strict";su();aa=class extends Error{name="MailboxFetchStoppedError";code="mailbox_fetch_stopped";constructor(t="MailboxFetchClient stopped before a response arrived"){super(t)}},Is=class{client;log;now;random;pending=new Map;requestHandler=null;stopped=!1;constructor(t){this.client=t.client,this.log=t.log??(()=>{}),this.now=t.now??Date.now,this.random=t.random??Math.random}onRequest(t){if(this.requestHandler!==null)throw new Error("MailboxFetchClient: onRequest handler already registered");this.requestHandler=t}async fetch(t,r){if(this.stopped)throw new aa("MailboxFetchClient.fetch after stop()");if(typeof t.path!="string"||t.path==="")throw new Error("MailboxFetchClient.fetch: request.path is required");let n=t.method;if(typeof n!="string"||n==="")throw new Error("MailboxFetchClient.fetch: request.method is required");let s=Yt(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:t};return new Promise((a,l)=>{let c=r?.abortSignal,d;if(c!==void 0){if(c.aborted){l(GE(c));return}d=()=>{this.pending.has(s)&&(this.pending.delete(s),l(GE(c)))},c.addEventListener("abort",d,{once:!0})}this.pending.set(s,{resolve:a,reject:l,...d!==void 0?{abortListener:d}:{},...c!==void 0?{abortSignal:c}:{}}),this.client.putMessage({conversation_id:i,payload:o}).catch(u=>{let f=this.pending.get(s);f!==void 0&&(this.pending.delete(s),f.abortListener!==void 0&&f.abortSignal!==void 0&&f.abortSignal.removeEventListener("abort",f.abortListener),f.reject(u))})})}async stop(){if(this.stopped)return;this.stopped=!0;let t=Array.from(this.pending.values());this.pending.clear();let r=new aa;for(let n of t){n.abortListener!==void 0&&n.abortSignal!==void 0&&n.abortSignal.removeEventListener("abort",n.abortListener);try{n.reject(r)}catch{}}}async handleIncoming(t,r){let n=lP(t);if(n===null){this.log("MailboxFetchClient: dropping non-envelope inbound payload");return}if(cP(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??dP(t)??n.message_id,i;try{i=await this.requestHandler(n.request)}catch(l){let c=l instanceof Error?l.message:String(l),d=typeof l.code=="string"?l.code:"INTERNAL_ERROR";i={status:500,headers:{"content-type":"application/json"},body:{error:d,message:c}}}let a={message_id:Yt(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 iu(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;return!(t.kind!=="terminal"||typeof t.session_id!="string"||t.session_id===""||t.direction!=="agent_to_user"&&t.direction!=="user_to_agent"||typeof t.data!="string"||typeof t.ts!="number")}var KE=T(()=>{"use strict"});function ou(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if(t.kind!=="provider"||typeof t.session_id!="string"||t.session_id===""||t.direction!=="agent_to_user"&&t.direction!=="user_to_agent"||typeof t.ts!="number")return!1;if(t.direction==="agent_to_user"){if(!Array.isArray(t.events))return!1;for(let r of t.events)if(typeof r!="object"||r===null||Array.isArray(r)||typeof r.event_type!="string")return!1}else if(typeof t.user_input!="string")return!1;return!0}var YE=T(()=>{"use strict"});function lu(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if(t.kind!=="daemon_event"||typeof t.event!="string"||t.event===""||typeof t.ts!="number")return!1;if(t.event==="workflows"){if(!Array.isArray(t.workflows))return!1;for(let r of t.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(t.event==="chat_log"){if(typeof t.entry!="object"||t.entry===null||Array.isArray(t.entry))return!1;let r=t.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 au,zE=T(()=>{"use strict";au="daemon:events"});function QE(e){return{kind:"prompt",prompt_id:e.prompt_id??Yt(e.now?.()??Date.now(),e.random??Math.random),root_teamfile:e.root_teamfile,text:e.text}}function cu(e){if(e===null||typeof e!="object")return!1;let t=e;return t.kind==="prompt"&&typeof t.prompt_id=="string"&&t.prompt_id.length>0&&typeof t.root_teamfile=="string"&&t.root_teamfile.length>0&&typeof t.text=="string"}var ZE,du=T(()=>{"use strict";su();ZE="prompt:root"});function Ns(e){let t=e.split(".");if(t.length<2||t[1]===void 0||t[1]==="")return null;try{let r=JSON.parse(tT(t[1]));return typeof r.sub=="string"&&r.sub!==""?r.sub:null}catch{return null}}function uP(e){let t=e.split(".");if(t.length<2||t[1]===void 0||t[1]==="")return null;try{let r=JSON.parse(tT(t[1]));return typeof r.exp=="number"&&Number.isFinite(r.exp)?r.exp:null}catch{return null}}function eT(e,t=60){if(typeof e!="string"||e==="")return!0;let r=uP(e);return r===null?!0:Date.now()/1e3>=r-t}function tT(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.padEnd(Math.ceil(t.length/4)*4,"="),n=globalThis.Buffer;return n!==void 0?n.from(r,"base64").toString("utf8"):atob(r)}var uu=T(()=>{"use strict"});async function la(e){let t=e.fetchImpl??fetch,r=`https://cognito-idp.${e.region}.amazonaws.com/`,n=await t(r,{method:"POST",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":fP},body:JSON.stringify({AuthFlow:"REFRESH_TOKEN_AUTH",ClientId:e.clientId,AuthParameters:{REFRESH_TOKEN:e.refreshToken}})}),s=await n.text();if(!n.ok){let l=s;try{let c=JSON.parse(s);l=c.message??c.__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 fP,fu=T(()=>{"use strict";fP="AWSCognitoIdentityProviderService.InitiateAuth"});import{chmodSync as rT,mkdirSync as nT,readFileSync as sT,writeFileSync as iT}from"node:fs";import{homedir as oT}from"node:os";import{dirname as aT,join as lT}from"node:path";function xs(){return process.env.LMCTL_DEVICE_AUTH_PATH??lT(oT(),".lmctl","device-auth.json")}function cT(){return process.env.LMCTL_TOKEN_PATH??lT(oT(),".lmctl","cli-tokens.json")}function mu(e=xs()){try{let t=JSON.parse(sT(e,"utf8"));return typeof t.userId!="string"||t.userId===""||typeof t.refreshToken!="string"||t.refreshToken===""?null:{userId:t.userId,refreshToken:t.refreshToken}}catch{return null}}function dT(e,t=xs()){nT(aT(t),{recursive:!0,mode:448}),iT(t,JSON.stringify(e,null,2));try{rT(t,384)}catch{}}function pu(e,t=cT()){let r={};try{r=JSON.parse(sT(t,"utf8"))}catch{}let n={...r.cognito??{}};n.idToken=e.idToken,e.accessToken!==void 0&&(n.accessToken=e.accessToken),e.refreshToken!==void 0&&(n.refreshToken=e.refreshToken),e.expiresAt!==void 0&&(n.expiresAt=e.expiresAt);let s={...r,cognito:n};nT(aT(t),{recursive:!0,mode:448}),iT(t,JSON.stringify(s,null,2));try{rT(t,384)}catch{}}async function uT(e){let t=e.deviceAuthPath??xs(),r=mu(t);if(r===null)throw new Error("device_auth_not_found: no ~/.lmctl/device-auth.json; run `lmctl device login` first");let n=await la({region:e.region,clientId:e.clientId,refreshToken:r.refreshToken,...e.fetchImpl!==void 0?{fetchImpl:e.fetchImpl}:{}});return pu({idToken:n.idToken,...n.accessToken!==void 0?{accessToken:n.accessToken}:{},refreshToken:r.refreshToken,...n.expiresAt!==void 0?{expiresAt:n.expiresAt}:{}},e.cliTokensPath??cT()),{idToken:n.idToken,userId:r.userId}}var _u=T(()=>{"use strict";fu()});import{existsSync as mP,realpathSync as pP}from"node:fs";import{dirname as _P}from"node:path";function hu(e){hP(e).catch(t=>{e.log?.(`[mailbox] prompt trigger failed: ${t instanceof Error?t.message:String(t)}`)})}async function hP(e){let t=e.payload.root_teamfile;try{t=pP(e.payload.root_teamfile)}catch(s){let i=`prompt root missing/unreadable: ${e.payload.root_teamfile}: ${s instanceof Error?s.message:String(s)}`;return await Sn(e.store,{rootTeamfile:e.payload.root_teamfile,receiverTeamfile:e.payload.root_teamfile,receiverAlias:"Lead",message:e.payload.text,response:null,status:"error",error_detail:i,log:e.log}),e.log?.(`[mailbox] ${i}`),{status:"error",response:null,error_detail:i}}if(e.store.getRootTeam(t)===null){let s=`prompt root is not registered: ${t}`;return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:"Lead",message:e.payload.text,response:null,status:"error",error_detail:s,log:e.log}),e.log?.(`[mailbox] ${s}`),{status:"error",response:null,error_detail:s}}let r=gP(t);if("error"in r)return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:"Lead",message:e.payload.text,response:null,status:"error",error_detail:r.error,log:e.log}),e.log?.(`[mailbox] ${r.error}`),{status:"error",response:null,error_detail:r.error};let n=hr(e.store,{receiver_teamfile:t,receiver_alias:r.alias,sender_teamfile:`prompt:${e.payload.prompt_id}`,sender_alias:"operator",ttlMs:EP(e.env??process.env)});if(!n.acquired){let s=wP(r.alias,n.current);return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:r.alias,message:e.payload.text,response:null,status:"error",error_detail:s,log:e.log}),e.log?.(`[mailbox] prompt rejected: ${s}`),{status:"error",response:null,error_detail:s}}try{let i=await(e.chat??St)({provider:r.provider,sessionId:r.sessionid,cwd:r.sessiondir,prompt:e.payload.text,env:e.env??process.env,alias:r.alias,permissionMode:"yolo",...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{}}),o=i.status==="stalled",a=!o&&i.text.trim()==="",l=o?`provider stalled${i.stalledAfterMs!==void 0?` after ${i.stalledAfterMs}ms`:""}`:a?"provider returned empty response":null,c=o||a?"error":"ok";return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:r.alias,message:e.payload.text,response:c==="error"?null:i.text,status:c,error_detail:l,log:e.log}),{status:c,response:c==="error"?null:i.text,error_detail:l}}catch(s){let i=s instanceof Error?s.message:String(s);return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:r.alias,message:e.payload.text,response:null,status:"error",error_detail:i,log:e.log}),e.log?.(`[mailbox] prompt provider error: ${i}`),{status:"error",response:null,error_detail:i}}finally{try{e.store.releaseAgentInflight(n.lease)}catch(s){e.log?.(`[mailbox] failed to release prompt in-flight slot: ${s instanceof Error?s.message:String(s)}`)}}}function gP(e){if(!mP(e))return{error:`prompt root missing/unreadable: ${e}`};let t=De(e);if(t.parseErrors.length>0)return{error:`prompt root parse error: ${t.parseErrors.join("; ")}`};let r=At(t);return r===void 0?{error:`prompt root has no Lead: ${e}`}:r.session===void 0||r.session.trim()===""?{error:`prompt root Lead is unseeded: ${e}`}:{alias:r.alias,provider:r.provider,sessionid:r.session,sessiondir:r.sessiondir??_P(e)}}async function Sn(e,t){let r=pT(t.message),n=t.response===null?null:pT(t.response);try{e.insertTeamChatLog({root_teamfile:t.rootTeamfile,sender_teamfile:t.rootTeamfile,sender_alias:"operator",receiver_teamfile:t.receiverTeamfile,receiver_alias:t.receiverAlias,message:r.text,response:n?.text??null,origin:"unknown",status:t.status,error_detail:t.error_detail,truncated:r.truncated||n?.truncated?1:0,created_at:new Date().toISOString()})}catch(s){t.log?.(`[mailbox] warning: failed to record prompt chat log: ${s instanceof Error?s.message:String(s)}`)}}function pT(e){return e.length<=fT?{text:e,truncated:!1}:{text:e.slice(0,fT),truncated:!0}}function yP(e,t){return`${e} is servicing ${t.sender_alias} (${t.sender_teamfile}) since ${t.started_at}`}function wP(e,t){return t.sender_teamfile.startsWith("prompt:")?`${e} is busy servicing another prompt since ${t.started_at}`:yP(e,t)}function EP(e=process.env){let t=e.LMCTL_INFLIGHT_TTL_MS;if(t===void 0||t.trim()==="")return mT;let r=Number(t);return!Number.isFinite(r)||r<=0?mT:r}var fT,mT,_T=T(()=>{"use strict";vt();zt();Fr();fT=256*1024,mT=30*60*1e3});import{chmodSync as TT,existsSync as TP,mkdirSync as bT,readFileSync as fa,writeFileSync as ST}from"node:fs";import{dirname as gu,resolve as ca,join as vT}from"node:path";import{fileURLToPath as bP}from"node:url";import{homedir as kT}from"node:os";import{CognitoIdentityClient as SP,GetIdCommand as vP}from"@aws-sdk/client-cognito-identity";import{fromCognitoIdentity as hT}from"@aws-sdk/credential-provider-cognito-identity";import{GetObjectCommand as kP,ListObjectsV2Command as IP,PutObjectCommand as NP,S3Client as gT}from"@aws-sdk/client-s3";function Rs(e={}){let t=e.env??process.env,r=e.tfstatePath!==void 0?[e.tfstatePath]:OP(e.selfUrl),n={},s;for(let I of r)if(TP(I)){n=LP(I),s=I;break}let i=(...I)=>{for(let x of I)if(typeof x=="string"&&x!=="")return x},o=i(t.LMCTL_NEXT_IDENTITY_POOL_ID,n.LMCTL_NEXT_IDENTITY_POOL_ID)??xP,a=i(t.LMCTL_NEXT_COGNITO_USER_POOL_ID,n.LMCTL_NEXT_COGNITO_USER_POOL_ID)??AP,l=i(t.LMCTL_NEXT_MAILBOX_BUCKET,t.LMCTL_NEXT_POLICY_BUCKET,n.LMCTL_NEXT_MAILBOX_BUCKET,n.LMCTL_NEXT_POLICY_BUCKET)??RP,c=i(t.AWS_REGION,t.AWS_DEFAULT_REGION)??"us-east-1",d=i(t.LMCTL_NEXT_COGNITO_CLIENT_ID,n.LMCTL_NEXT_COGNITO_CLIENT_ID)??ma,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 f={missing:u,tfstateCandidatesChecked:r,...s!==void 0?{tfstatePathUsed:s}:{}};if(u.length>0)return f;let m=t.LMCTL_MAILBOX_POLL_MS,p=m!==void 0&&m.length>0?Number(m):void 0,_=ua(t.LMCTL_MAILBOX_READ_INTERVAL_SECONDS),g=ua(t.LMCTL_MAILBOX_HEARTBEAT_IDLE_SECONDS),h=ua(t.LMCTL_MAILBOX_BACKOFF_READ_INTERVAL_SECONDS),S=ua(t.LMCTL_MAILBOX_CHATLOG_POLL_SECONDS),y=i(t.LMCTL_MAILBOX_KEY),w=i(t.LMCTL_TOKEN_PATH);return f.config={identityPoolId:o,cognitoUserPoolId:a,cognitoClientId:d,region:c,mailboxBucket:l,...typeof p=="number"&&Number.isFinite(p)&&p>=100?{pollIntervalMs:p}:{},..._!==void 0?{readIntervalMs:_}:{},...g!==void 0?{heartbeatIdleMs:g}:{},...h!==void 0?{backoffReadIntervalMs:h}:{},...S!==void 0?{chatLogPollIntervalMs:S}:{},...y!==void 0?{mailboxKey:y}:{},...w!==void 0?{tokenPath:w}:{}},f}function LP(e){try{let t=fa(e,"utf8"),n=JSON.parse(t).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 OP(e){let t=gu(bP(e??import.meta.url));return[ca(t,"..","..","..","..","infra","terraform","terraform.tfstate"),ca(t,"..","..","..","..","..","infra","terraform","terraform.tfstate"),ca(t,"..","..","..","infra","terraform","terraform.tfstate"),ca(t,"..","..","infra","terraform","terraform.tfstate")]}function ua(e){if(e===void 0||e==="")return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t*1e3}function $P(e){let t=CP(e.intervalMs)??IT,r=Math.max(1,Math.trunc(e.limit??500)),n=e.now??Date.now,s=e.cursorKey!==void 0&&e.store.loadTeamChatLogCursor!==void 0&&e.store.saveTeamChatLogCursor!==void 0?{key:e.cursorKey,load:e.store.loadTeamChatLogCursor.bind(e.store),save:e.store.saveTeamChatLogCursor.bind(e.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=e.store.getMaxTeamChatLogId(),s!==null&&s.save({cursor_key:s.key,last_pushed_id:i,updated_at:new Date(n()).toISOString()}),!0}catch(u){return e.log?.(`[mailbox] daemon_event chat_log seed failed: ${u instanceof Error?u.message:String(u)}`),!1}};l();let c=async()=>{if(!(a||o)){o=!0;try{if(i===void 0&&!l())return;let u=e.store.listTeamChatLogSinceId(i,r);for(let f of u){let m={kind:"daemon_event",event:"chat_log",ts:n(),entry:{id:f.id,root_teamfile:f.root_teamfile,sender_teamfile:f.sender_teamfile,sender_alias:f.sender_alias,receiver_teamfile:f.receiver_teamfile,receiver_alias:f.receiver_alias,message:f.message,response:f.response,status:f.status,created_at:f.created_at}};await e.publishDaemonEvent(m),s!==null&&s.save({cursor_key:s.key,last_pushed_id:f.id,updated_at:new Date(n()).toISOString()}),i=Math.max(i,f.id)}}catch(u){e.log?.(`[mailbox] daemon_event chat_log tail failed: ${u instanceof Error?u.message:String(u)}`)}finally{o=!1}}},d=setInterval(()=>{c()},t);return typeof d.unref=="function"&&d.unref(),{pollNow:c,stop(){a=!0,clearInterval(d)}}}function CP(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0}async function NT(e){let t=e.tokenPath??vT(kT(),".lmctl","cli-tokens.json"),r=wT(e.tokenPath);if(eT(r.cognito?.idToken)&&mu()!==null)try{await uT({region:e.region,clientId:e.cognitoClientId??ma,cliTokensPath:t}),r=wT(e.tokenPath),e.log?.("[mx-mailbox] refreshed IdToken from device-auth refresh token")}catch(A){let Q=A instanceof Error?A.message:String(A);e.log?.(`[mx-mailbox] device-auth refresh failed: ${Q}`)}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.${e.region}.amazonaws.com/${e.cognitoUserPoolId}`,i=r.cognito.identityId,o=!1;i===void 0||i===""?i=await ET({tokenPath:t,region:e.region,identityPoolId:e.identityPoolId,idpProvider:s,idToken:n,log:e.log}):(o=!0,e.log?.(`[mx-mailbox] using cached identityId from cli-tokens (skipping GetId) for ${i}`));let a=hT({identityId:i,logins:{[s]:n},clientConfig:{region:e.region}}),l=new gT({region:e.region,credentials:a}),c={ListObjectsV2Command:IP,GetObjectCommand:kP,PutObjectCommand:NP},d=Ns(n),u=d??i,f=e.deviceId,m=gn({identityId:i,userId:d,deviceId:f,mailboxKey:e.mailboxKey}),p=e.cursorStore,_;if(p!==void 0){let A=p.loadMailboxCursor(u,m);if(A!==null)_=A.last_processed_seq??void 0,e.log?.(`[mx-mailbox] resumed seq cursor=${_??"(sentinel)"} for user_id=${u}`);else{let Q=!1,B=0;for(;!Q&&B<2;){B+=1;try{let k=Co(m,"web"),N=0,L;do{let F=await l.send(new c.ListObjectsV2Command({Bucket:e.mailboxBucket,Prefix:k,MaxKeys:1e3,...L!==void 0?{ContinuationToken:L}:{}}));for(let j of F.Contents??[]){let C=Mo(j.Key??"",m,"web");C!==void 0&&C>N&&(N=C)}L=F.IsTruncated===!0?F.NextContinuationToken:void 0}while(L!==void 0);_=N,e.log?.(`[mx-mailbox] cold start: seeded seq cursor=${N} for user_id=${u}`),Q=!0}catch(k){let N=k instanceof Error?k.message:String(k);if(o&&B===1&&DP(k)){e.log?.(`[mx-mailbox] cached identityId rejected by cognito (${N}); clearing + refreshing`),jP(t),o=!1,i=await ET({tokenPath:t,region:e.region,identityPoolId:e.identityPoolId,idpProvider:s,idToken:n,log:e.log}),a=hT({identityId:i,logins:{[s]:n},clientConfig:{region:e.region}}),l=new gT({region:e.region,credentials:a}),m=gn({identityId:i,userId:d,deviceId:f,mailboxKey:e.mailboxKey});continue}e.log?.(`[mx-mailbox] cold start seq probe failed: ${N}`);break}}p.saveMailboxCursor({user_id:u,mailbox_key:m,last_processed_version_id:null,last_processed_seq:_??null,last_processed_at:new Date().toISOString()})}}let g=null,h=e.terminalSessionManager,S=e.persistentSessionManager,y=e.promptTriggerStore,w=new oa,I=new Dr({bucket:e.mailboxBucket,identityId:i,...d!==null?{userId:d}:{},...f!==void 0?{deviceId:f}:{},...e.mailboxKey!==void 0?{mailboxKey:e.mailboxKey}:{},s3:l,commands:c,selfRole:"agent",onS3Op:A=>w.record(A),onMessage:async A=>{if(h!==void 0&&iu(A.payload)){h.onInbound(A.payload);return}if(S!==void 0&&ou(A.payload)){await S.onInbound(A.payload);return}if(!lu(A.payload)){if(y!==void 0&&cu(A.payload)){hu({store:y,payload:A.payload,log:e.log});return}g!==null&&await g.handleIncoming(A.payload,A)}},...p!==void 0?{onCursorAdvance:A=>{p.saveMailboxCursor({user_id:u,mailbox_key:m,last_processed_version_id:null,last_processed_seq:A,last_processed_at:new Date().toISOString()})}}:{},..._!==void 0?{cursor:_}:{},...e.pollIntervalMs!==void 0?{pollIntervalMs:e.pollIntervalMs}:{},...e.readIntervalMs!==void 0?{readIntervalMs:e.readIntervalMs}:{},...e.heartbeatIdleMs!==void 0?{heartbeatIdleMs:e.heartbeatIdleMs}:{},...e.backoffReadIntervalMs!==void 0?{backoffReadIntervalMs:e.backoffReadIntervalMs}:{}});g=new Is({client:I,...e.log!==void 0?{log:e.log}:{}}),h!==void 0&&h.setPublish(async A=>I.putMessage({conversation_id:`terminal:${A.session_id}`,payload:A})),S!==void 0&&S.setPublish(async A=>I.putMessage({conversation_id:`provider:${A.session_id}`,payload:A}));let x=A=>I.putMessage({conversation_id:au,payload:A});I.start();let U=e.chatLogTailStore===void 0?void 0:$P({store:e.chatLogTailStore,publishDaemonEvent:x,cursorKey:m,intervalMs:e.chatLogPollIntervalMs??e.readIntervalMs??e.pollIntervalMs??IT,log:e.log});e.log?.(`[mx-mailbox] agent polling ${m} (bucket=${e.mailboxBucket})`);let ue=e.deviceId??i,W=`${u}/usage/`,M;return M=e.usageStore===void 0?void 0:JE({meter:w,store:e.usageStore,userId:u,deviceId:ue,ceilingUsd:e.usageQuotaUsd??1/0,onQuotaExceeded:({period:A,costUsd:Q,ceilingUsd:B})=>{e.log?.(`[usage] month ${A} cost $${Q.toFixed(4)} >= ceiling $${B} \u2014 blocking mailbox`),I.stop().catch(()=>{}),M?.stop()},publishOwnRollup:async(A,Q)=>{await l.send(new c.PutObjectCommand({Bucket:e.mailboxBucket,Key:`${W}${ue}-${A}.json`,Body:JSON.stringify({...Q,updated_at:new Date().toISOString()}),ContentType:"application/json"}))},readUserTotal:async A=>{let Q={put:0,get:0,list:0},B;do{let k=await l.send(new c.ListObjectsV2Command({Bucket:e.mailboxBucket,Prefix:W,MaxKeys:1e3,...B!==void 0?{ContinuationToken:B}:{}}));for(let N of k.Contents??[]){let L=N.Key??"";if(L.endsWith(`-${A}.json`))try{let F=await l.send(new c.GetObjectCommand({Bucket:e.mailboxBucket,Key:L}));if(F.Body===void 0)continue;let j=JSON.parse(await F.Body.transformToString("utf-8"));Q.put+=j.put??0,Q.get+=j.get??0,Q.list+=j.list??0}catch{}}B=k.IsTruncated===!0?k.NextContinuationToken:void 0}while(B!==void 0);return Q},intervalMs:e.usageFlushIntervalMs??36e5,...e.log!==void 0?{log:e.log}:{}}),{identityId:i,mailbox:I,fetchClient:g,publishDaemonEvent:x,async stop(){U?.stop(),M!==void 0&&(await M.flushNow().catch(()=>{}),M.stop()),await g.stop().catch(()=>{}),await I.stop().catch(()=>{})}}}async function xT(e){let t=e.s3!==void 0&&e.commands!==void 0?{s3:e.s3,commands:e.commands}:ia(e.rootDir),r=gn({identityId:As,userId:As,deviceId:yT}),n=null,s=e.terminalSessionManager,i=e.persistentSessionManager,o=e.promptTriggerStore,a=new Dr({bucket:"local",identityId:As,userId:As,deviceId:yT,s3:t.s3,commands:t.commands,selfRole:"agent",onMessage:async c=>{if(s!==void 0&&iu(c.payload)){s.onInbound(c.payload);return}if(i!==void 0&&ou(c.payload)){await i.onInbound(c.payload);return}if(!lu(c.payload)){if(o!==void 0&&cu(c.payload)){hu({store:o,payload:c.payload,log:e.log});return}n!==null&&await n.handleIncoming(c.payload,c)}},pollIntervalMs:e.pollIntervalMs??da,readIntervalMs:e.readIntervalMs??da,heartbeatIdleMs:e.heartbeatIdleMs??da,backoffReadIntervalMs:e.backoffReadIntervalMs??da});n=new Is({client:a,...e.log!==void 0?{log:e.log}:{}}),s!==void 0&&s.setPublish(async c=>a.putMessage({conversation_id:`terminal:${c.session_id}`,payload:c})),i!==void 0&&i.setPublish(async c=>a.putMessage({conversation_id:`provider:${c.session_id}`,payload:c}));let l=c=>a.putMessage({conversation_id:au,payload:c});return a.start(),e.log?.(`[local-webui] agent polling ${r} (local-fs ${e.rootDir})`),{identityId:As,mailbox:a,fetchClient:n,publishDaemonEvent:l,async stop(){await n.stop().catch(()=>{}),await a.stop().catch(()=>{})}}}function wT(e){let t=e??vT(kT(),".lmctl","cli-tokens.json");try{let r=fa(t,"utf8");return JSON.parse(r)}catch{return{}}}function MP(e,t){if(t===void 0||t==="")return;let r={};try{let s=fa(e,"utf8");r=JSON.parse(s)}catch{}if(r.cognito===void 0)return;let n={...r,cognito:{...r.cognito,identityId:t}};bT(gu(e),{recursive:!0,mode:448}),ST(e,JSON.stringify(n,null,2));try{TT(e,384)}catch{}}function jP(e){let t={};try{let n=fa(e,"utf8");t=JSON.parse(n)}catch{return}if(t.cognito===void 0)return;let r={...t,cognito:{...t.cognito}};delete r.cognito.identityId,bT(gu(e),{recursive:!0,mode:448}),ST(e,JSON.stringify(r,null,2));try{TT(e,384)}catch{}}async function ET(e){e.log?.("[mx-mailbox] cli-tokens has no identityId; calling GetId");let r=await new SP({region:e.region}).send(new vP({IdentityPoolId:e.identityPoolId,Logins:{[e.idpProvider]:e.idToken}}));if(r.IdentityId===void 0||r.IdentityId==="")throw new Error("cognito_getid_no_identity_id");try{MP(e.tokenPath,r.IdentityId),e.log?.(`[mx-mailbox] persisted identityId=${r.IdentityId} to ${e.tokenPath}`)}catch(n){let s=n instanceof Error?n.message:String(n);e.log?.(`[mx-mailbox] WARNING: identityId persist failed (${s}); will redo GetId on next restart`)}return r.IdentityId}function DP(e){if(e===null||typeof e!="object")return!1;let t=e,r=[typeof t.name=="string"?t.name:void 0,typeof t.Code=="string"?t.Code:void 0,typeof t.__type=="string"?t.__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 t.message=="string"?t.message:"";return!!(n.includes("NotAuthorizedException")||n.includes("Invalid identity pool configuration")||n.includes("Identity")&&n.includes("not found"))}var IT,da,ma,xP,AP,RP,As,yT,yu=T(()=>{"use strict";Fo();eu();nu();XE();VE();KE();YE();zE();du();jo();uu();_u();_T();IT=3e3,da=1e3,ma="79u5jhkk46qofog661c9i0bdcs",xP="us-east-1:69636ff0-e008-4cbc-853d-180e5526a198",AP="us-east-1_4iUdFggDn",RP="lmctl-next-preview-mailbox-254332045686";As="local",yT="local"});import{spawn as bu}from"node:child_process";import{createInterface as AT}from"node:readline";var wu,Eu,Tu,RT,LT=T(()=>{"use strict";mi();we();wu=class{child;ctx;rl;nextRpcId=1;pending=new Map;threadId;nextLocalTurnId=1;closed=!1;setResumeThreadId(t){this.threadId=t}async start(t,r){this.ctx=r;let n=bu(t.command,t.args,{cwd:t.cwd??process.cwd(),env:t.env??process.env,stdio:["pipe","pipe","pipe"]});if(this.child=n,this.rl=AT({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:t.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:t.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(t){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:t}]})).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 t of this.pending.values())t.reject(new Error("codex_session_stopping"));this.pending.clear()}async rpc(t,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:t,params:r});try{this.child.stdin.write(o+`
2044
+ ${e.receipt}`:`relay delivery error: ${e.error}`}function HD(e,t){let r=t.LMCTL_MAILBOX_DELIVERY_STALE_MS,n=r===void 0||r.trim()===""?NaN:Number(r),s=Number.isFinite(n)&&n>0?n:8*60*60*1e3;e.reclaimStaleMailboxDeliveries(new Date(Date.now()-s).toISOString())}function JD(e){return{stdout:{write:()=>{}},stderr:{write:()=>{}},dal:e}}var xE,LE=T(()=>{"use strict";Fr();Hd();ea();Lt();xE=10});function ks(){let e=process.env.LMCTL_DAEMON_INTERVAL_MS;if(e===void 0||e.trim().length===0)return 5e3;let t=Number(e);return Number.isFinite(t)&&t>0?t:5e3}function GD(e=process.env){let t=e.LMCTL_DAEMON_FEATURES;if(t===void 0||t.trim()==="")return new Set;let r=new Set;for(let n of t.split(",")){let s=n.trim();if(s!==""){if(s==="all")return new Set(OE);XD.has(s)&&r.add(s)}}return r}function $E(e){let t=e.intervalMs??ks(),r=e.runOnceFn??jr,n=new Set(e.features??GD()),s={running:e.autoStart!==!1,in_flight:!1,interval_ms:t,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,c=null;n.has("rollup-updater")&&e.startRollupUpdaterFn!==!1&&(c=(e.startRollupUpdaterFn??Hw)(e.dal));let d=m=>{s.running&&(i=setTimeout(()=>{f.runCycle().finally(()=>d(t))},m))},u=m=>{s.running&&(o=setTimeout(()=>{l===null&&(l=CE(e.dal,n,e.monitorSessionActivityFn??yc,t,s).finally(()=>{l=null})),l.finally(()=>u(wc(e.dal,t)))},m))},f={state:s,runCycle:async()=>(a!==null||(a=VD(e.dal,r,e.collectSessionSizesFn??f_,e.scanIntakeFn??lo,e.monitorSessionActivityFn??yc,e.mailboxRelayFn??RE,e.worker_id??"daemon",t,n,s).finally(()=>{a=null})),a),stop:async()=>{s.running=!1,i!==null&&clearTimeout(i),o!==null&&clearTimeout(o),c?.stop(),a!==null&&await a.catch(()=>{}),l!==null&&await l.catch(()=>{})}};if(s.running){let m=e.firstDelayMs??5e3;d(m),n.has("session-monitor")&&u(m)}return f}async function VD(e,t,r,n,s,i,o,a,l,c){c.in_flight=!0,c.last_started_at=new Date().toISOString(),c.last_error=null;let d=[],u=0,f=0,m=[],p=null,_=KD();try{if(l.has("durable-memory-policies")&&Ey({dal:e}),l.has("drift-detectors")&&Gw({dal:e}),l.has("intake")&&(m=await n(e)),l.has("job-worker"))for(;;){let g=await t({dal:e,worker_id:o,lease_ms:6e5});if(g===null)break;d.push(g)}if(l.has("mailbox-relay")&&(_=await i({dal:e})),l.has("session-size")){let g=await r(e);u=g.recorded,f=g.failed}l.has("session-monitor")&&(p=await CE(e,l,s,a,c))}catch(g){c.last_error=g instanceof Error?g.message:String(g);try{e.raiseAttention({kind:"daemon_worker_failed",severity:"error",payload:JSON.stringify({error:c.last_error})})}catch{}}finally{c.in_flight=!1,c.cycles+=1,c.last_jobs_processed=d.length,c.last_session_sizes_recorded=u,c.last_session_size_failures=f,c.last_intake_scanned=m.reduce((g,h)=>g+h.scanned,0),c.last_intake_new_jobs=m.reduce((g,h)=>g+h.new_jobs,0),c.last_intake_failures=m.filter(g=>g.error!==void 0).length,c.last_session_hung_detected=p?.hung_detected??0,c.last_mailbox_relay_scanned=_.scanned,c.last_mailbox_relay_delivered=_.delivered,c.last_mailbox_relay_errors=_.errors,c.jobs_processed+=d.length,c.last_finished_at=new Date().toISOString()}return{jobs_processed:d.length,outcomes:d,session_sizes_recorded:u,session_size_failures:f,intake:m,session_monitor:p,mailbox_relay:_}}function KD(){return{scanned:0,delivered:0,skipped_busy:0,skipped_terminal:0,errors:0}}async function CE(e,t,r,n,s){if(!t.has("session-monitor"))return null;let i=wc(e,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:e,nowMs:o})}catch(a){s.last_session_monitor_error=a instanceof Error?a.message:String(a);try{e.raiseAttention({kind:"daemon_session_monitor_failed",severity:"error",payload:JSON.stringify({error:s.last_session_monitor_error})})}catch{}return null}}var OE,XD,Yd=T(()=>{"use strict";qc();Lo();Ed();Mi();Jw();Vw();Ec();LE();OE=["durable-memory-policies","drift-detectors","intake","job-worker","mailbox-relay","session-size","session-monitor","rollup-updater"],XD=new Set(OE)});function ME(e){let t=e.listMembersInState("in_chat");for(let r of t)e.setMemberState(r.id,"attention_needed","daemon_restarted_mid_chat");return t.length}var jE=T(()=>{"use strict"});import{mkdirSync as YD,readFileSync as zD,readdirSync as ZD,statSync as QD,writeFileSync as eP}from"node:fs";import{dirname as tP,join as PE,sep as DE}from"node:path";function ia(e){return{s3:{async send(n){let s=n;switch(s._localfsTag){case FE:return rP(e,s.input);case UE:return nP(e,s.input);case WE:return sP(e,s.input);default:throw new Error("createLocalFsS3Client: unknown command")}}},commands:{ListObjectsV2Command:Qd,GetObjectCommand:Zd,PutObjectCommand:zd}}}function rP(e,t){let r=BE(e,t.Key);return YD(tP(r),{recursive:!0}),eP(r,t.Body),{}}function nP(e,t){let r=BE(e,t.Key),n;try{n=zD(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 sP(e,t){let r=t.Prefix??"";qE(r);let s=iP(e).sort((d,u)=>d.key<u.key?-1:d.key>u.key?1:0).filter(d=>d.key.startsWith(r)),i=t.ContinuationToken;i!==void 0&&i!==""&&(s=s.filter(d=>d.key>i));let o=typeof t.MaxKeys=="number"&&Number.isFinite(t.MaxKeys)&&t.MaxKeys>0?Math.floor(t.MaxKeys):void 0,a=s,l=!1;o!==void 0&&s.length>o&&(a=s.slice(0,o),l=!0);let c={Contents:a.map(d=>({Key:d.key,LastModified:d.lastModified})),IsTruncated:l};return l&&(c.NextContinuationToken=a[a.length-1].key),c}function BE(e,t){return qE(t),PE(e,t)}function qE(e){if(e.split("/").includes(".."))throw new Error(`localfs-s3-client: refusing key/prefix with '..': ${e}`)}function iP(e){let t=[],r=(n,s)=>{let i;try{i=ZD(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=PE(n,o.name);if(o.isDirectory())r(l,a);else if(o.isFile()){let c=DE==="/"?a:a.split(DE).join("/");t.push({key:c,lastModified:QD(l).mtime})}}};return r(e,""),t}var FE,UE,WE,zd,Zd,Qd,eu=T(()=>{"use strict";FE="localfs-put",UE="localfs-get",WE="localfs-list",zd=class{input;_localfsTag=FE;constructor(t){this.input=t}},Zd=class{input;_localfsTag=UE;constructor(t){this.input=t}},Qd=class{input;_localfsTag=WE;constructor(t){this.input=t}}});function HE(){return{put:0,get:0,list:0}}function tu(e,t=oP){return e.put*t.putUsd+e.get*t.getUsd+e.list*t.listUsd}function ru(e){let t=new Date(e),r=t.getUTCFullYear(),n=String(t.getUTCMonth()+1).padStart(2,"0");return`${r}-${n}`}var oP,oa,nu=T(()=>{"use strict";oP={putUsd:5e-6,getUsd:40000000000000003e-23,listUsd:5e-6};oa=class{counts=HE();record(t,r=1){this.counts[t]+=r}peek(){return{...this.counts}}drain(){let t={...this.counts};return this.counts=HE(),t}estimateCostUsd(t){return tu(this.counts,t)}}});function JE(e){let t=e.now??Date.now,r=e.timers??aP,n=null,s=null;async function i(){let l=t(),c=ru(l),d=e.meter.drain();(d.put>0||d.get>0||d.list>0)&&e.store.addUsage({user_id:e.userId,device_id:e.deviceId,period:c,put:d.put,get:d.get,list:d.list,updated_at:new Date(l).toISOString()});let u=e.store.loadUsage(e.userId,e.deviceId,c),f=u?{put:u.put_count,get:u.get_count,list:u.list_count}:{put:0,get:0,list:0};if(e.publishOwnRollup!==void 0)try{await e.publishOwnRollup(c,f)}catch(_){e.log?.(`[usage] publish rollup failed: ${_ instanceof Error?_.message:String(_)}`)}let m=f;if(e.readUserTotal!==void 0)try{m=await e.readUserTotal(c)}catch(_){e.log?.(`[usage] read user total failed: ${_ instanceof Error?_.message:String(_)}`),m=f}let p=tu(m);if(n!==c&&p>=e.ceilingUsd){n=c,e.log?.(`[usage] quota exceeded period=${c} cost=$${p.toFixed(4)} >= ceiling $${e.ceilingUsd}`);try{e.onQuotaExceeded({period:c,costUsd:p,ceilingUsd:e.ceilingUsd})}catch(_){e.log?.(`[usage] onQuotaExceeded threw: ${_ instanceof Error?_.message:String(_)}`)}}}function o(){return s=(s??Promise.resolve()).then(()=>i()).catch(()=>{}),s}let a=r.setInterval(()=>{o()},e.intervalMs);return{stop(){r.clearInterval(a)},flushNow(){return o()},isOverQuota(){return n!==null&&n===ru(t())}}}var aP,XE=T(()=>{"use strict";nu();aP={setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)}});var su=T(()=>{"use strict";jo();Po();Po()});function lP(e){if(typeof e!="object"||e===null||Array.isArray(e))return null;let t=e;if(typeof t.message_id!="string"||t.message_id==="")return null;if(typeof t.reply_to=="string"&&t.reply_to!==""){let s=t.response;if(typeof s!="object"||s===null)return null;let i=s;return typeof i.status!="number"?null:{message_id:t.message_id,reply_to:t.reply_to,response:i}}let r=t.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:t.message_id,request:n}}function cP(e){return e.reply_to!==void 0&&e.response!==void 0}function dP(e){if(typeof e!="object"||e===null)return;let t=e.conversation_id;return typeof t=="string"?t:void 0}function GE(e){let t=e.reason;if(t!==void 0)return t;try{return new DOMException("Aborted","AbortError")}catch{let r=new Error("Aborted");return r.name="AbortError",r}}var aa,Is,VE=T(()=>{"use strict";su();aa=class extends Error{name="MailboxFetchStoppedError";code="mailbox_fetch_stopped";constructor(t="MailboxFetchClient stopped before a response arrived"){super(t)}},Is=class{client;log;now;random;pending=new Map;requestHandler=null;stopped=!1;constructor(t){this.client=t.client,this.log=t.log??(()=>{}),this.now=t.now??Date.now,this.random=t.random??Math.random}onRequest(t){if(this.requestHandler!==null)throw new Error("MailboxFetchClient: onRequest handler already registered");this.requestHandler=t}async fetch(t,r){if(this.stopped)throw new aa("MailboxFetchClient.fetch after stop()");if(typeof t.path!="string"||t.path==="")throw new Error("MailboxFetchClient.fetch: request.path is required");let n=t.method;if(typeof n!="string"||n==="")throw new Error("MailboxFetchClient.fetch: request.method is required");let s=Yt(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:t};return new Promise((a,l)=>{let c=r?.abortSignal,d;if(c!==void 0){if(c.aborted){l(GE(c));return}d=()=>{this.pending.has(s)&&(this.pending.delete(s),l(GE(c)))},c.addEventListener("abort",d,{once:!0})}this.pending.set(s,{resolve:a,reject:l,...d!==void 0?{abortListener:d}:{},...c!==void 0?{abortSignal:c}:{}}),this.client.putMessage({conversation_id:i,payload:o}).catch(u=>{let f=this.pending.get(s);f!==void 0&&(this.pending.delete(s),f.abortListener!==void 0&&f.abortSignal!==void 0&&f.abortSignal.removeEventListener("abort",f.abortListener),f.reject(u))})})}async stop(){if(this.stopped)return;this.stopped=!0;let t=Array.from(this.pending.values());this.pending.clear();let r=new aa;for(let n of t){n.abortListener!==void 0&&n.abortSignal!==void 0&&n.abortSignal.removeEventListener("abort",n.abortListener);try{n.reject(r)}catch{}}}async handleIncoming(t,r){let n=lP(t);if(n===null){this.log("MailboxFetchClient: dropping non-envelope inbound payload");return}if(cP(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??dP(t)??n.message_id,i;try{i=await this.requestHandler(n.request)}catch(l){let c=l instanceof Error?l.message:String(l),d=typeof l.code=="string"?l.code:"INTERNAL_ERROR";i={status:500,headers:{"content-type":"application/json"},body:{error:d,message:c}}}let a={message_id:Yt(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 iu(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;return!(t.kind!=="terminal"||typeof t.session_id!="string"||t.session_id===""||t.direction!=="agent_to_user"&&t.direction!=="user_to_agent"||typeof t.data!="string"||typeof t.ts!="number")}var KE=T(()=>{"use strict"});function ou(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if(t.kind!=="provider"||typeof t.session_id!="string"||t.session_id===""||t.direction!=="agent_to_user"&&t.direction!=="user_to_agent"||typeof t.ts!="number")return!1;if(t.direction==="agent_to_user"){if(!Array.isArray(t.events))return!1;for(let r of t.events)if(typeof r!="object"||r===null||Array.isArray(r)||typeof r.event_type!="string")return!1}else if(typeof t.user_input!="string")return!1;return!0}var YE=T(()=>{"use strict"});function lu(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if(t.kind!=="daemon_event"||typeof t.event!="string"||t.event===""||typeof t.ts!="number")return!1;if(t.event==="workflows"){if(!Array.isArray(t.workflows))return!1;for(let r of t.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(t.event==="chat_log"){if(typeof t.entry!="object"||t.entry===null||Array.isArray(t.entry))return!1;let r=t.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 au,zE=T(()=>{"use strict";au="daemon:events"});function QE(e){return{kind:"prompt",prompt_id:e.prompt_id??Yt(e.now?.()??Date.now(),e.random??Math.random),root_teamfile:e.root_teamfile,text:e.text}}function cu(e){if(e===null||typeof e!="object")return!1;let t=e;return t.kind==="prompt"&&typeof t.prompt_id=="string"&&t.prompt_id.length>0&&typeof t.root_teamfile=="string"&&t.root_teamfile.length>0&&typeof t.text=="string"}var ZE,du=T(()=>{"use strict";su();ZE="prompt:root"});function Ns(e){let t=e.split(".");if(t.length<2||t[1]===void 0||t[1]==="")return null;try{let r=JSON.parse(tT(t[1]));return typeof r.sub=="string"&&r.sub!==""?r.sub:null}catch{return null}}function uP(e){let t=e.split(".");if(t.length<2||t[1]===void 0||t[1]==="")return null;try{let r=JSON.parse(tT(t[1]));return typeof r.exp=="number"&&Number.isFinite(r.exp)?r.exp:null}catch{return null}}function eT(e,t=60){if(typeof e!="string"||e==="")return!0;let r=uP(e);return r===null?!0:Date.now()/1e3>=r-t}function tT(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.padEnd(Math.ceil(t.length/4)*4,"="),n=globalThis.Buffer;return n!==void 0?n.from(r,"base64").toString("utf8"):atob(r)}var uu=T(()=>{"use strict"});async function la(e){let t=e.fetchImpl??fetch,r=`https://cognito-idp.${e.region}.amazonaws.com/`,n=await t(r,{method:"POST",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":fP},body:JSON.stringify({AuthFlow:"REFRESH_TOKEN_AUTH",ClientId:e.clientId,AuthParameters:{REFRESH_TOKEN:e.refreshToken}})}),s=await n.text();if(!n.ok){let l=s;try{let c=JSON.parse(s);l=c.message??c.__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 fP,fu=T(()=>{"use strict";fP="AWSCognitoIdentityProviderService.InitiateAuth"});import{chmodSync as rT,mkdirSync as nT,readFileSync as sT,writeFileSync as iT}from"node:fs";import{homedir as oT}from"node:os";import{dirname as aT,join as lT}from"node:path";function xs(){return process.env.LMCTL_DEVICE_AUTH_PATH??lT(oT(),".lmctl","device-auth.json")}function cT(){return process.env.LMCTL_TOKEN_PATH??lT(oT(),".lmctl","cli-tokens.json")}function mu(e=xs()){try{let t=JSON.parse(sT(e,"utf8"));return typeof t.userId!="string"||t.userId===""||typeof t.refreshToken!="string"||t.refreshToken===""?null:{userId:t.userId,refreshToken:t.refreshToken}}catch{return null}}function dT(e,t=xs()){nT(aT(t),{recursive:!0,mode:448}),iT(t,JSON.stringify(e,null,2));try{rT(t,384)}catch{}}function pu(e,t=cT()){let r={};try{r=JSON.parse(sT(t,"utf8"))}catch{}let n={...r.cognito??{}};n.idToken=e.idToken,e.accessToken!==void 0&&(n.accessToken=e.accessToken),e.refreshToken!==void 0&&(n.refreshToken=e.refreshToken),e.expiresAt!==void 0&&(n.expiresAt=e.expiresAt);let s={...r,cognito:n};nT(aT(t),{recursive:!0,mode:448}),iT(t,JSON.stringify(s,null,2));try{rT(t,384)}catch{}}async function uT(e){let t=e.deviceAuthPath??xs(),r=mu(t);if(r===null)throw new Error("device_auth_not_found: no ~/.lmctl/device-auth.json; run `lmctl device login` first");let n=await la({region:e.region,clientId:e.clientId,refreshToken:r.refreshToken,...e.fetchImpl!==void 0?{fetchImpl:e.fetchImpl}:{}});return pu({idToken:n.idToken,...n.accessToken!==void 0?{accessToken:n.accessToken}:{},refreshToken:r.refreshToken,...n.expiresAt!==void 0?{expiresAt:n.expiresAt}:{}},e.cliTokensPath??cT()),{idToken:n.idToken,userId:r.userId}}var _u=T(()=>{"use strict";fu()});import{existsSync as mP,realpathSync as pP}from"node:fs";import{dirname as _P}from"node:path";function hu(e){hP(e).catch(t=>{e.log?.(`[mailbox] prompt trigger failed: ${t instanceof Error?t.message:String(t)}`)})}async function hP(e){let t=e.payload.root_teamfile;try{t=pP(e.payload.root_teamfile)}catch(s){let i=`prompt root missing/unreadable: ${e.payload.root_teamfile}: ${s instanceof Error?s.message:String(s)}`;return await Sn(e.store,{rootTeamfile:e.payload.root_teamfile,receiverTeamfile:e.payload.root_teamfile,receiverAlias:"Lead",message:e.payload.text,response:null,status:"error",error_detail:i,log:e.log}),e.log?.(`[mailbox] ${i}`),{status:"error",response:null,error_detail:i}}if(e.store.getRootTeam(t)===null){let s=`prompt root is not registered: ${t}`;return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:"Lead",message:e.payload.text,response:null,status:"error",error_detail:s,log:e.log}),e.log?.(`[mailbox] ${s}`),{status:"error",response:null,error_detail:s}}let r=gP(t);if("error"in r)return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:"Lead",message:e.payload.text,response:null,status:"error",error_detail:r.error,log:e.log}),e.log?.(`[mailbox] ${r.error}`),{status:"error",response:null,error_detail:r.error};let n=hr(e.store,{receiver_teamfile:t,receiver_alias:r.alias,sender_teamfile:`prompt:${e.payload.prompt_id}`,sender_alias:"operator",ttlMs:EP(e.env??process.env)});if(!n.acquired){let s=wP(r.alias,n.current);return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:r.alias,message:e.payload.text,response:null,status:"error",error_detail:s,log:e.log}),e.log?.(`[mailbox] prompt rejected: ${s}`),{status:"error",response:null,error_detail:s}}try{let i=await(e.chat??St)({provider:r.provider,sessionId:r.sessionid,cwd:r.sessiondir,prompt:e.payload.text,env:e.env??process.env,alias:r.alias,permissionMode:"yolo",...e.timeoutMs!==void 0?{timeoutMs:e.timeoutMs}:{}}),o=i.status==="stalled",a=!o&&i.text.trim()==="",l=o?`provider stalled${i.stalledAfterMs!==void 0?` after ${i.stalledAfterMs}ms`:""}`:a?"provider returned empty response":null,c=o||a?"error":"ok";return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:r.alias,message:e.payload.text,response:c==="error"?null:i.text,status:c,error_detail:l,log:e.log}),{status:c,response:c==="error"?null:i.text,error_detail:l}}catch(s){let i=s instanceof Error?s.message:String(s);return await Sn(e.store,{rootTeamfile:t,receiverTeamfile:t,receiverAlias:r.alias,message:e.payload.text,response:null,status:"error",error_detail:i,log:e.log}),e.log?.(`[mailbox] prompt provider error: ${i}`),{status:"error",response:null,error_detail:i}}finally{try{e.store.releaseAgentInflight(n.lease)}catch(s){e.log?.(`[mailbox] failed to release prompt in-flight slot: ${s instanceof Error?s.message:String(s)}`)}}}function gP(e){if(!mP(e))return{error:`prompt root missing/unreadable: ${e}`};let t=De(e);if(t.parseErrors.length>0)return{error:`prompt root parse error: ${t.parseErrors.join("; ")}`};let r=At(t);return r===void 0?{error:`prompt root has no Lead: ${e}`}:r.session===void 0||r.session.trim()===""?{error:`prompt root Lead is unseeded: ${e}`}:{alias:r.alias,provider:r.provider,sessionid:r.session,sessiondir:r.sessiondir??_P(e)}}async function Sn(e,t){let r=pT(t.message),n=t.response===null?null:pT(t.response);try{e.insertTeamChatLog({root_teamfile:t.rootTeamfile,sender_teamfile:t.rootTeamfile,sender_alias:"operator",receiver_teamfile:t.receiverTeamfile,receiver_alias:t.receiverAlias,message:r.text,response:n?.text??null,origin:"unknown",status:t.status,error_detail:t.error_detail,truncated:r.truncated||n?.truncated?1:0,created_at:new Date().toISOString()})}catch(s){t.log?.(`[mailbox] warning: failed to record prompt chat log: ${s instanceof Error?s.message:String(s)}`)}}function pT(e){return e.length<=fT?{text:e,truncated:!1}:{text:e.slice(0,fT),truncated:!0}}function yP(e,t){return`${e} is servicing ${t.sender_alias} (${t.sender_teamfile}) since ${t.started_at}`}function wP(e,t){return t.sender_teamfile.startsWith("prompt:")?`${e} is busy servicing another prompt since ${t.started_at}`:yP(e,t)}function EP(e=process.env){let t=e.LMCTL_INFLIGHT_TTL_MS;if(t===void 0||t.trim()==="")return mT;let r=Number(t);return!Number.isFinite(r)||r<=0?mT:r}var fT,mT,_T=T(()=>{"use strict";vt();zt();Fr();fT=256*1024,mT=30*60*1e3});import{chmodSync as TT,existsSync as TP,mkdirSync as bT,readFileSync as fa,writeFileSync as ST}from"node:fs";import{dirname as gu,resolve as ca,join as vT}from"node:path";import{fileURLToPath as bP}from"node:url";import{homedir as kT}from"node:os";import{CognitoIdentityClient as SP,GetIdCommand as vP}from"@aws-sdk/client-cognito-identity";import{fromCognitoIdentity as hT}from"@aws-sdk/credential-provider-cognito-identity";import{GetObjectCommand as kP,ListObjectsV2Command as IP,PutObjectCommand as NP,S3Client as gT}from"@aws-sdk/client-s3";function Rs(e={}){let t=e.env??process.env,r=e.tfstatePath!==void 0?[e.tfstatePath]:OP(e.selfUrl),n={},s;for(let I of r)if(TP(I)){n=LP(I),s=I;break}let i=(...I)=>{for(let x of I)if(typeof x=="string"&&x!=="")return x},o=i(t.LMCTL_NEXT_IDENTITY_POOL_ID,n.LMCTL_NEXT_IDENTITY_POOL_ID)??xP,a=i(t.LMCTL_NEXT_COGNITO_USER_POOL_ID,n.LMCTL_NEXT_COGNITO_USER_POOL_ID)??AP,l=i(t.LMCTL_NEXT_MAILBOX_BUCKET,t.LMCTL_NEXT_POLICY_BUCKET,n.LMCTL_NEXT_MAILBOX_BUCKET,n.LMCTL_NEXT_POLICY_BUCKET)??RP,c=i(t.AWS_REGION,t.AWS_DEFAULT_REGION)??"us-east-1",d=i(t.LMCTL_NEXT_COGNITO_CLIENT_ID,n.LMCTL_NEXT_COGNITO_CLIENT_ID)??ma,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 f={missing:u,tfstateCandidatesChecked:r,...s!==void 0?{tfstatePathUsed:s}:{}};if(u.length>0)return f;let m=t.LMCTL_MAILBOX_POLL_MS,p=m!==void 0&&m.length>0?Number(m):void 0,_=ua(t.LMCTL_MAILBOX_READ_INTERVAL_SECONDS),g=ua(t.LMCTL_MAILBOX_HEARTBEAT_IDLE_SECONDS),h=ua(t.LMCTL_MAILBOX_BACKOFF_READ_INTERVAL_SECONDS),S=ua(t.LMCTL_MAILBOX_CHATLOG_POLL_SECONDS),y=i(t.LMCTL_MAILBOX_KEY),w=i(t.LMCTL_TOKEN_PATH);return f.config={identityPoolId:o,cognitoUserPoolId:a,cognitoClientId:d,region:c,mailboxBucket:l,...typeof p=="number"&&Number.isFinite(p)&&p>=100?{pollIntervalMs:p}:{},..._!==void 0?{readIntervalMs:_}:{},...g!==void 0?{heartbeatIdleMs:g}:{},...h!==void 0?{backoffReadIntervalMs:h}:{},...S!==void 0?{chatLogPollIntervalMs:S}:{},...y!==void 0?{mailboxKey:y}:{},...w!==void 0?{tokenPath:w}:{}},f}function LP(e){try{let t=fa(e,"utf8"),n=JSON.parse(t).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 OP(e){let t=gu(bP(e??import.meta.url));return[ca(t,"..","..","..","..","infra","terraform","terraform.tfstate"),ca(t,"..","..","..","..","..","infra","terraform","terraform.tfstate"),ca(t,"..","..","..","infra","terraform","terraform.tfstate"),ca(t,"..","..","infra","terraform","terraform.tfstate")]}function ua(e){if(e===void 0||e==="")return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t*1e3}function $P(e){let t=CP(e.intervalMs)??IT,r=Math.max(1,Math.trunc(e.limit??500)),n=e.now??Date.now,s=e.cursorKey!==void 0&&e.store.loadTeamChatLogCursor!==void 0&&e.store.saveTeamChatLogCursor!==void 0?{key:e.cursorKey,load:e.store.loadTeamChatLogCursor.bind(e.store),save:e.store.saveTeamChatLogCursor.bind(e.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=e.store.getMaxTeamChatLogId(),s!==null&&s.save({cursor_key:s.key,last_pushed_id:i,updated_at:new Date(n()).toISOString()}),!0}catch(u){return e.log?.(`[mailbox] daemon_event chat_log seed failed: ${u instanceof Error?u.message:String(u)}`),!1}};l();let c=async()=>{if(!(a||o)){o=!0;try{if(i===void 0&&!l())return;let u=e.store.listTeamChatLogSinceId(i,r);for(let f of u){let m={kind:"daemon_event",event:"chat_log",ts:n(),entry:{id:f.id,root_teamfile:f.root_teamfile,sender_teamfile:f.sender_teamfile,sender_alias:f.sender_alias,receiver_teamfile:f.receiver_teamfile,receiver_alias:f.receiver_alias,message:f.message,response:f.response,status:f.status,created_at:f.created_at}};await e.publishDaemonEvent(m),s!==null&&s.save({cursor_key:s.key,last_pushed_id:f.id,updated_at:new Date(n()).toISOString()}),i=Math.max(i,f.id)}}catch(u){e.log?.(`[mailbox] daemon_event chat_log tail failed: ${u instanceof Error?u.message:String(u)}`)}finally{o=!1}}},d=setInterval(()=>{c()},t);return typeof d.unref=="function"&&d.unref(),{pollNow:c,stop(){a=!0,clearInterval(d)}}}function CP(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0}async function NT(e){let t=e.tokenPath??vT(kT(),".lmctl","cli-tokens.json"),r=wT(e.tokenPath);if(eT(r.cognito?.idToken)&&mu()!==null)try{await uT({region:e.region,clientId:e.cognitoClientId??ma,cliTokensPath:t}),r=wT(e.tokenPath),e.log?.("[mx-mailbox] refreshed IdToken from device-auth refresh token")}catch(A){let Q=A instanceof Error?A.message:String(A);e.log?.(`[mx-mailbox] device-auth refresh failed: ${Q}`)}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.${e.region}.amazonaws.com/${e.cognitoUserPoolId}`,i=r.cognito.identityId,o=!1;i===void 0||i===""?i=await ET({tokenPath:t,region:e.region,identityPoolId:e.identityPoolId,idpProvider:s,idToken:n,log:e.log}):(o=!0,e.log?.(`[mx-mailbox] using cached identityId from cli-tokens (skipping GetId) for ${i}`));let a=hT({identityId:i,logins:{[s]:n},clientConfig:{region:e.region}}),l=new gT({region:e.region,credentials:a}),c={ListObjectsV2Command:IP,GetObjectCommand:kP,PutObjectCommand:NP},d=Ns(n),u=d??i,f=e.deviceId,m=gn({identityId:i,userId:d,deviceId:f,mailboxKey:e.mailboxKey}),p=e.cursorStore,_;if(p!==void 0){let A=p.loadMailboxCursor(u,m);if(A!==null)_=A.last_processed_seq??void 0,e.log?.(`[mx-mailbox] resumed seq cursor=${_??"(sentinel)"} for user_id=${u}`);else{let Q=!1,B=0;for(;!Q&&B<2;){B+=1;try{let k=Co(m,"web"),N=0,L;do{let F=await l.send(new c.ListObjectsV2Command({Bucket:e.mailboxBucket,Prefix:k,MaxKeys:1e3,...L!==void 0?{ContinuationToken:L}:{}}));for(let j of F.Contents??[]){let C=Mo(j.Key??"",m,"web");C!==void 0&&C>N&&(N=C)}L=F.IsTruncated===!0?F.NextContinuationToken:void 0}while(L!==void 0);_=N,e.log?.(`[mx-mailbox] cold start: seeded seq cursor=${N} for user_id=${u}`),Q=!0}catch(k){let N=k instanceof Error?k.message:String(k);if(o&&B===1&&DP(k)){e.log?.(`[mx-mailbox] cached identityId rejected by cognito (${N}); clearing + refreshing`),jP(t),o=!1,i=await ET({tokenPath:t,region:e.region,identityPoolId:e.identityPoolId,idpProvider:s,idToken:n,log:e.log}),a=hT({identityId:i,logins:{[s]:n},clientConfig:{region:e.region}}),l=new gT({region:e.region,credentials:a}),m=gn({identityId:i,userId:d,deviceId:f,mailboxKey:e.mailboxKey});continue}e.log?.(`[mx-mailbox] cold start seq probe failed: ${N}`);break}}p.saveMailboxCursor({user_id:u,mailbox_key:m,last_processed_version_id:null,last_processed_seq:_??null,last_processed_at:new Date().toISOString()})}}let g=null,h=e.terminalSessionManager,S=e.persistentSessionManager,y=e.promptTriggerStore,w=new oa,I=new Dr({bucket:e.mailboxBucket,identityId:i,...d!==null?{userId:d}:{},...f!==void 0?{deviceId:f}:{},...e.mailboxKey!==void 0?{mailboxKey:e.mailboxKey}:{},s3:l,commands:c,selfRole:"agent",onS3Op:A=>w.record(A),onMessage:async A=>{if(h!==void 0&&iu(A.payload)){h.onInbound(A.payload);return}if(S!==void 0&&ou(A.payload)){await S.onInbound(A.payload);return}if(!lu(A.payload)){if(y!==void 0&&cu(A.payload)){hu({store:y,payload:A.payload,log:e.log});return}g!==null&&await g.handleIncoming(A.payload,A)}},...p!==void 0?{onCursorAdvance:A=>{p.saveMailboxCursor({user_id:u,mailbox_key:m,last_processed_version_id:null,last_processed_seq:A,last_processed_at:new Date().toISOString()})}}:{},..._!==void 0?{cursor:_}:{},...e.pollIntervalMs!==void 0?{pollIntervalMs:e.pollIntervalMs}:{},...e.readIntervalMs!==void 0?{readIntervalMs:e.readIntervalMs}:{},...e.heartbeatIdleMs!==void 0?{heartbeatIdleMs:e.heartbeatIdleMs}:{},...e.backoffReadIntervalMs!==void 0?{backoffReadIntervalMs:e.backoffReadIntervalMs}:{}});g=new Is({client:I,...e.log!==void 0?{log:e.log}:{}}),h!==void 0&&h.setPublish(async A=>I.putMessage({conversation_id:`terminal:${A.session_id}`,payload:A})),S!==void 0&&S.setPublish(async A=>I.putMessage({conversation_id:`provider:${A.session_id}`,payload:A}));let x=A=>I.putMessage({conversation_id:au,payload:A});I.start();let U=e.chatLogTailStore===void 0?void 0:$P({store:e.chatLogTailStore,publishDaemonEvent:x,cursorKey:m,intervalMs:e.chatLogPollIntervalMs??e.readIntervalMs??e.pollIntervalMs??IT,log:e.log});e.log?.(`[mx-mailbox] agent polling ${m} (bucket=${e.mailboxBucket})`);let ue=e.deviceId??i,W=`${u}/usage/`,M;return M=e.usageStore===void 0?void 0:JE({meter:w,store:e.usageStore,userId:u,deviceId:ue,ceilingUsd:e.usageQuotaUsd??1/0,onQuotaExceeded:({period:A,costUsd:Q,ceilingUsd:B})=>{e.log?.(`[usage] month ${A} cost $${Q.toFixed(4)} >= ceiling $${B} \u2014 blocking mailbox`),I.stop().catch(()=>{}),M?.stop()},publishOwnRollup:async(A,Q)=>{await l.send(new c.PutObjectCommand({Bucket:e.mailboxBucket,Key:`${W}${ue}-${A}.json`,Body:JSON.stringify({...Q,updated_at:new Date().toISOString()}),ContentType:"application/json"}))},readUserTotal:async A=>{let Q={put:0,get:0,list:0},B;do{let k=await l.send(new c.ListObjectsV2Command({Bucket:e.mailboxBucket,Prefix:W,MaxKeys:1e3,...B!==void 0?{ContinuationToken:B}:{}}));for(let N of k.Contents??[]){let L=N.Key??"";if(L.endsWith(`-${A}.json`))try{let F=await l.send(new c.GetObjectCommand({Bucket:e.mailboxBucket,Key:L}));if(F.Body===void 0)continue;let j=JSON.parse(await F.Body.transformToString("utf-8"));Q.put+=j.put??0,Q.get+=j.get??0,Q.list+=j.list??0}catch{}}B=k.IsTruncated===!0?k.NextContinuationToken:void 0}while(B!==void 0);return Q},intervalMs:e.usageFlushIntervalMs??36e5,...e.log!==void 0?{log:e.log}:{}}),{identityId:i,mailbox:I,fetchClient:g,publishDaemonEvent:x,async stop(){U?.stop(),M!==void 0&&(await M.flushNow().catch(()=>{}),M.stop()),await g.stop().catch(()=>{}),await I.stop().catch(()=>{})}}}async function xT(e){let t=e.s3!==void 0&&e.commands!==void 0?{s3:e.s3,commands:e.commands}:ia(e.rootDir),r=gn({identityId:As,userId:As,deviceId:yT}),n=null,s=e.terminalSessionManager,i=e.persistentSessionManager,o=e.promptTriggerStore,a=new Dr({bucket:"local",identityId:As,userId:As,deviceId:yT,s3:t.s3,commands:t.commands,selfRole:"agent",onMessage:async c=>{if(s!==void 0&&iu(c.payload)){s.onInbound(c.payload);return}if(i!==void 0&&ou(c.payload)){await i.onInbound(c.payload);return}if(!lu(c.payload)){if(o!==void 0&&cu(c.payload)){hu({store:o,payload:c.payload,log:e.log});return}n!==null&&await n.handleIncoming(c.payload,c)}},pollIntervalMs:e.pollIntervalMs??da,readIntervalMs:e.readIntervalMs??da,heartbeatIdleMs:e.heartbeatIdleMs??da,backoffReadIntervalMs:e.backoffReadIntervalMs??da});n=new Is({client:a,...e.log!==void 0?{log:e.log}:{}}),s!==void 0&&s.setPublish(async c=>a.putMessage({conversation_id:`terminal:${c.session_id}`,payload:c})),i!==void 0&&i.setPublish(async c=>a.putMessage({conversation_id:`provider:${c.session_id}`,payload:c}));let l=c=>a.putMessage({conversation_id:au,payload:c});return a.start(),e.log?.(`[local-webui] agent polling ${r} (local-fs ${e.rootDir})`),{identityId:As,mailbox:a,fetchClient:n,publishDaemonEvent:l,async stop(){await n.stop().catch(()=>{}),await a.stop().catch(()=>{})}}}function wT(e){let t=e??vT(kT(),".lmctl","cli-tokens.json");try{let r=fa(t,"utf8");return JSON.parse(r)}catch{return{}}}function MP(e,t){if(t===void 0||t==="")return;let r={};try{let s=fa(e,"utf8");r=JSON.parse(s)}catch{}if(r.cognito===void 0)return;let n={...r,cognito:{...r.cognito,identityId:t}};bT(gu(e),{recursive:!0,mode:448}),ST(e,JSON.stringify(n,null,2));try{TT(e,384)}catch{}}function jP(e){let t={};try{let n=fa(e,"utf8");t=JSON.parse(n)}catch{return}if(t.cognito===void 0)return;let r={...t,cognito:{...t.cognito}};delete r.cognito.identityId,bT(gu(e),{recursive:!0,mode:448}),ST(e,JSON.stringify(r,null,2));try{TT(e,384)}catch{}}async function ET(e){e.log?.("[mx-mailbox] cli-tokens has no identityId; calling GetId");let r=await new SP({region:e.region}).send(new vP({IdentityPoolId:e.identityPoolId,Logins:{[e.idpProvider]:e.idToken}}));if(r.IdentityId===void 0||r.IdentityId==="")throw new Error("cognito_getid_no_identity_id");try{MP(e.tokenPath,r.IdentityId),e.log?.(`[mx-mailbox] persisted identityId=${r.IdentityId} to ${e.tokenPath}`)}catch(n){let s=n instanceof Error?n.message:String(n);e.log?.(`[mx-mailbox] WARNING: identityId persist failed (${s}); will redo GetId on next restart`)}return r.IdentityId}function DP(e){if(e===null||typeof e!="object")return!1;let t=e,r=[typeof t.name=="string"?t.name:void 0,typeof t.Code=="string"?t.Code:void 0,typeof t.__type=="string"?t.__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 t.message=="string"?t.message:"";return!!(n.includes("NotAuthorizedException")||n.includes("Invalid identity pool configuration")||n.includes("Identity")&&n.includes("not found"))}var IT,da,ma,xP,AP,RP,As,yT,yu=T(()=>{"use strict";Fo();eu();nu();XE();VE();KE();YE();zE();du();jo();uu();_u();_T();IT=3e3,da=1e3,ma="79u5jhkk46qofog661c9i0bdcs",xP="us-east-1:69636ff0-e008-4cbc-853d-180e5526a198",AP="us-east-1_4iUdFggDn",RP="lmctl-next-preview-mailbox-254332045686";As="local",yT="local"});import{spawn as bu}from"node:child_process";import{createInterface as AT}from"node:readline";var wu,Eu,Tu,RT,LT=T(()=>{"use strict";mi();we();wu=class{child;ctx;rl;nextRpcId=1;pending=new Map;threadId;nextLocalTurnId=1;closed=!1;setResumeThreadId(t){this.threadId=t}async start(t,r){this.ctx=r;let n=bu(t.command,t.args,{cwd:t.cwd??process.cwd(),env:t.env??process.env,stdio:["pipe","pipe","pipe"]});if(this.child=n,this.rl=AT({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:t.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:t.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(t){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:t}]})).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 t of this.pending.values())t.reject(new Error("codex_session_stopping"));this.pending.clear()}async rpc(t,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:t,params:r});try{this.child.stdin.write(o+`
2045
2045
  `)}catch(a){this.pending.delete(i),s(a instanceof Error?a:new Error(String(a)))}})}notify(t,r){if(this.child?.stdin===null||this.child===void 0)return;let n=JSON.stringify({jsonrpc:"2.0",method:t,params:r});try{this.child.stdin.write(n+`
2046
2046
  `)}catch{}}handleLine(t){if(t.trim()==="")return;let r;try{r=JSON.parse(t)}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(t,r){if(t==="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(t==="turn/started")return{event_type:"turn_started",payload:{turn_id:r.turn?.id,thread_id:this.threadId}};if(t==="item/agentMessage/delta")return{event_type:"assistant_message_delta",payload:{text:typeof r.delta=="string"?r.delta:""}};if(t==="item/started"||t==="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:t==="item/started"?"started":"completed",item:n}}:{event_type:"notification",payload:{method:t,params:r}}}if(t==="turn/completed"){let n=r.turn;return typeof n?.id=="string"&&this.ctx?.turnMap.delete(n.id),{event_type:"turn_complete",payload:r}}if(t==="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:t,params:r}}}},Eu=class{child;ctx;buffer="";sessionIdSeen;closed=!1;async start(t,r){this.ctx=r;let n=bu(t.command,t.args,{cwd:t.cwd??process.cwd(),env:t.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(`
2047
2047
  `);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(t){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:t}});try{this.child.stdin.write(n+`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lmctl-ai/lmctl",
3
- "version": "0.1.146",
3
+ "version": "0.1.147",
4
4
  "description": "A provider-agnostic control plane for teams of AI coding agents — across providers, with independent review and durable memory.",
5
5
  "type": "module",
6
6
  "homepage": "https://lmctl.com",