@linzumi/cli 1.0.250 → 1.0.252

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.
@@ -1566,7 +1566,7 @@ To kick the agent off:
1566
1566
  `,F=Buffer.byteLength(T,"utf8");if(F>a)return l("runner_diagnostics.spool_entry_dropped",{reason:"entry_too_large",entry_bytes:F,max_entry_bytes:a}),!1;nUe(n,{recursive:!0}),f(u)+F>i&&g(),m(F);let E=b()?`
1567
1567
  `:"";return Xze(u,`${E}${T}`,"utf8"),!0}catch(P){return l("runner_diagnostics.spool_failed",{error:P instanceof Error?P.message:String(P)}),!1}},v=C=>{let P=[],T=rUe(C,"utf8");for(let F of T.split(`
1568
1568
  `))if(F.trim()!=="")try{let E=JSON.parse(F);E!==null&&typeof E=="object"&&P.push({parsed:E,raw:F})}catch{}return P};return{append:w,drain:async C=>{if(c)return{uploadedBatches:0,uploadedEntries:0,remainingBatches:p().length,skipped:!0};c=!0;let P=0,T=0;try{g(),m(0);let F=s()-o;for(let E of p()){let A;try{A=v(E)}catch(ne){l("runner_diagnostics.spool_batch_unreadable",{file:E,error:ne instanceof Error?ne.message:String(ne)}),_(E,"unreadable");continue}let K=A.filter(ne=>{let N=xUe(ne.parsed);return N===void 0||N>=F});if(K.length===0){_(E,"empty_or_expired");continue}let B=WO(E,".jsonl"),H=K.map(ne=>ne.raw).join(`
1569
- `),oe=K.map(ne=>ne.parsed.spooled_at).filter(ne=>typeof ne=="string"),ie={bundle_name:"runner-diagnostics-spool",exported_at:new Date(s()).toISOString(),idempotency_key:B,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:B,entry_count:K.length,...oe.length===0?{}:{first_spooled_at:oe[0],last_spooled_at:oe[oe.length-1]}},telemetry_ndjson:H};try{await C(ie)}catch(ne){l("runner_diagnostics.spool_upload_failed",{file:E,remaining_batches:p().length,error:ne instanceof Error?ne.message:String(ne)});break}P+=1,T+=K.length;try{Mne(E)}catch(ne){l("runner_diagnostics.spool_delete_failed",{file:E,error:ne instanceof Error?ne.message:String(ne)})}}}catch(F){l("runner_diagnostics.spool_drain_failed",{error:F instanceof Error?F.message:String(F)})}finally{c=!1}return{uploadedBatches:P,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var uUe,cUe,lUe,pUe,fUe,Dne,hUe,gUe,qne=V(()=>{"use strict";AS();uUe=32*1024*1024,cUe=10080*60*1e3,lUe=4*1024*1024,pUe=1024*1024,fUe="spool.jsonl",Dne=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;hUe=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,gUe=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var nr,GO,qu=V(()=>{"use strict";nr="1.0.250",GO=`linzumi ${nr}`});import{closeSync as Fne,existsSync as ZO,mkdirSync as vUe,openSync as Lne,readFileSync as jne,renameSync as wUe,unlinkSync as Cl,writeFileSync as SUe,writeSync as Nne}from"node:fs";import{dirname as zne,join as kUe}from"node:path";function QO(e){return e instanceof Cd||e instanceof Error&&e.name===Bne&&"lockPath"in e&&"heldBy"in e}function XO(e,n=Et(),t){let r=t===void 0?encodeURIComponent(e):il(t);return kUe(zne(n),"runners",`${r}.lock`)}function bC(e){let n=XO(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??Zne,r=e.now??(()=>new Date),o=e.killPid??FUe,i=r().toISOString(),a={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:xt(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},...e.processGroupLeader===!0?{processGroupLeader:!0}:{},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??nr,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};PUe(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),RUe(n,a,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let s=()=>Jne(n,a,r),d=setInterval(s,Une);return d.unref(),{path:n,record:a,heartbeat:s,release:()=>{clearInterval(d),Gne(n,a)}}}function Jne(e,n,t){try{let r=vC(e);if(r===void 0||r.machineId!==n.machineId||r.runnerId!==n.runnerId||r.pid!==n.pid||r.startedAt!==n.startedAt)return;let o={...r,heartbeatAt:t().toISOString()},i=`${e}.tmp`;SUe(i,`${JSON.stringify(o,null,2)}
1569
+ `),oe=K.map(ne=>ne.parsed.spooled_at).filter(ne=>typeof ne=="string"),ie={bundle_name:"runner-diagnostics-spool",exported_at:new Date(s()).toISOString(),idempotency_key:B,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:B,entry_count:K.length,...oe.length===0?{}:{first_spooled_at:oe[0],last_spooled_at:oe[oe.length-1]}},telemetry_ndjson:H};try{await C(ie)}catch(ne){l("runner_diagnostics.spool_upload_failed",{file:E,remaining_batches:p().length,error:ne instanceof Error?ne.message:String(ne)});break}P+=1,T+=K.length;try{Mne(E)}catch(ne){l("runner_diagnostics.spool_delete_failed",{file:E,error:ne instanceof Error?ne.message:String(ne)})}}}catch(F){l("runner_diagnostics.spool_drain_failed",{error:F instanceof Error?F.message:String(F)})}finally{c=!1}return{uploadedBatches:P,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var uUe,cUe,lUe,pUe,fUe,Dne,hUe,gUe,qne=V(()=>{"use strict";AS();uUe=32*1024*1024,cUe=10080*60*1e3,lUe=4*1024*1024,pUe=1024*1024,fUe="spool.jsonl",Dne=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;hUe=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,gUe=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var nr,GO,qu=V(()=>{"use strict";nr="1.0.252",GO=`linzumi ${nr}`});import{closeSync as Fne,existsSync as ZO,mkdirSync as vUe,openSync as Lne,readFileSync as jne,renameSync as wUe,unlinkSync as Cl,writeFileSync as SUe,writeSync as Nne}from"node:fs";import{dirname as zne,join as kUe}from"node:path";function QO(e){return e instanceof Cd||e instanceof Error&&e.name===Bne&&"lockPath"in e&&"heldBy"in e}function XO(e,n=Et(),t){let r=t===void 0?encodeURIComponent(e):il(t);return kUe(zne(n),"runners",`${r}.lock`)}function bC(e){let n=XO(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??Zne,r=e.now??(()=>new Date),o=e.killPid??FUe,i=r().toISOString(),a={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:xt(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},...e.processGroupLeader===!0?{processGroupLeader:!0}:{},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??nr,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};PUe(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),RUe(n,a,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let s=()=>Jne(n,a,r),d=setInterval(s,Une);return d.unref(),{path:n,record:a,heartbeat:s,release:()=>{clearInterval(d),Gne(n,a)}}}function Jne(e,n,t){try{let r=vC(e);if(r===void 0||r.machineId!==n.machineId||r.runnerId!==n.runnerId||r.pid!==n.pid||r.startedAt!==n.startedAt)return;let o={...r,heartbeatAt:t().toISOString()},i=`${e}.tmp`;SUe(i,`${JSON.stringify(o,null,2)}
1570
1570
  `,"utf8"),wUe(i,e)}catch{}}function Tl(e,n,t){if(!n(e.pid))return{state:"dead"};let r=e.heartbeatAt??e.startedAt,o=Date.parse(r);return Number.isNaN(o)||t().getTime()-o>CUe?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function Kne(e,n,t,r){return t!==xC||e.launchSource!==xC?!1:r.state!=="live"?!0:TUe(n,e.cliVersion)>0}function TUe(e,n){let t=$ne(e),r=$ne(n);for(let o=0;o<3;o++){let i=t.core[o],a=r.core[o];if(i===void 0||a===void 0)throw new Error(`compareCliVersions: unexpected undefined at core index ${o}`);if(i!==a)return i>a?1:-1}return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:IUe(t.prerelease,r.prerelease)}function $ne(e){let n=e.trim().replace(/^v/i,"").split("+",1)[0]??"",t=n.indexOf("-"),r=t===-1?n:n.slice(0,t),o=t===-1?"":n.slice(t+1),i=r.split("."),a=[HO(i[0]),HO(i[1]),HO(i[2])],s=o===""?[]:o.split(".").filter(d=>d!=="");return{core:a,prerelease:s}}function HO(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function IUe(e,n){let t=Math.max(e.length,n.length);for(let r=0;r<t;r++){let o=e[r],i=n[r];if(o===void 0)return-1;if(i===void 0)return 1;let a=Number.parseInt(o,10),s=Number.parseInt(i,10),d=a.toString()===o,u=s.toString()===i;if(d&&u){if(a!==s)return a>s?1:-1}else{if(d!==u)return d?-1:1;if(o!==i)return o>i?1:-1}}return 0}function Wne(e,n,t,r,o){try{r(n.pid)}catch(i){let a=i!==null&&typeof i=="object"&&"code"in i?i.code:void 0;if(a!=="ESRCH")throw a==="EPERM"||a==="EACCES"?new Error(`Cannot take over the runner lock at ${e}: its holder process (pid ${n.pid}) is owned by another user and cannot be stopped. Stop that process, or remove the lock file, then retry.`):i}o?.({lockPath:e,holderPid:n.pid,holderRunnerId:n.runnerId,reason:t})}function PUe(e,n,t,r,o,i,a){if(t===void 0||go(t)!==go(Lr))return;let s=XO(e,n),d=vC(s);if(d!==void 0){if(Tl(d,r,o).state==="live")throw new Cd(s,d);Vne(s,r,()=>{let u=ZO(s)?YO(s):void 0;if(u===void 0)return;let c=Tl(u,r,o);if(c.state==="live")throw new Cd(s,u);c.state==="wedged"&&Wne(s,u,c.reason,i,a),Cl(s)})}}function RUe(e,n,t,r,o,i,a,s){if(_C(e,n))return;a?.();let d=vC(e);if(d===void 0){if(_C(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Tl(d,t,r).state==="live")throw new Cd(e,d);s?.(),Vne(e,t,()=>{let u=ZO(e)?YO(e):void 0;if(u!==void 0){let c=Tl(u,t,r);if(c.state==="live")throw new Cd(e,u);c.state==="wedged"&&Wne(e,u,c.reason,o,i),Cl(e)}if(!_C(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function _C(e,n){vUe(zne(e),{recursive:!0});try{let t=Lne(e,"wx");try{Nne(t,`${JSON.stringify(n,null,2)}
1571
1571
  `)}finally{Fne(t)}return!0}catch(t){if(jm(t,"EEXIST"))return!1;throw t}}function Vne(e,n,t){let r=`${e}.replace`;for(;;)try{let o=Lne(r,"wx");try{Nne(o,`${process.pid}
1572
1572
  `),t()}finally{Fne(o),Cl(r)}return}catch(o){if(jm(o,"EEXIST")){let i=EUe(r);if(i===void 0)continue;if(n(i))throw new Error(["another Linzumi runner is already replacing a stale runner lock",`lock: ${e}`,"Wait for that startup to finish, then retry."].join(`
@@ -1669,7 +1669,7 @@ To stop a service-managed supervisor, use systemctl (Ctrl+C on a foreground
1669
1669
  Linux/systemd only. On macOS, run \`linzumi connect --supervise\` in a login
1670
1670
  session instead; on Linux without systemd the supervisor already deprioritizes
1671
1671
  itself for the kernel OOM killer at runtime (no unit needed for that part).
1672
- `});function hie(){let e=new Map;return{current:n=>e.get(n),adopt:(n,t)=>{if(!Number.isInteger(t))return!1;let r=e.get(n);return r!==void 0&&t<r||r===t?!1:(e.set(n,t),!0)},release:n=>{e.delete(n)},snapshot:()=>[...e.entries()].map(([n,t])=>({threadId:n,leaseEpoch:t}))}}function gie(e,n){return n===void 0||e===void 0?!1:n<e}function yie(e){if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e.lease_epoch;return typeof n=="number"&&Number.isInteger(n)?n:void 0}var u$=V(()=>{"use strict"});function bie(e){let n=e.store.initial(e.watermarkKey);return El(n,e.sourceSeq)?($C(e.store,e.watermarkKey,e.sourceSeq,e.log),!0):!1}async function PBe(e){let n=e.policy??toe,t=e.nowMs??Date.now();if(e.outcome==="dispatched"){e.inFlightGuard?.mark(e.watermarkKey,e.sourceSeq),e.queue.ack(e.sourceSeq);return}if(e.outcome==="ignored"){e.queue.ack(e.sourceSeq);return}if(e.outcome==="permanent_failed"){let i=RBe(e.queue,e.sourceSeq);e.queue.deadLetter(e.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:e.sourceSeq,reason:"permanent",attempts:i,alreadyPublished:!0});return}if(e.outcome==="deferred")return;let r=e.queue.recordAttempt(e.sourceSeq),o=e.queue.entries().find(i=>i.sourceSeq===e.sourceSeq);o!==void 0&&roe(o,n,t)&&(e.log("resume_keystone.dead_lettered",{threadId:e.threadId,sourceSeq:e.sourceSeq,attempts:r}),e.queue.deadLetter(e.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:e.sourceSeq,reason:"exhausted",attempts:r,alreadyPublished:!1}))}function RBe(e,n){return e.entries().find(t=>t.sourceSeq===n)?.attempts??0}function JC(e,n){let t=e.entries(),r;for(let o of t)(r===void 0||o.enqueuedAtMs<r)&&(r=o.enqueuedAtMs);return{pending_count:t.length,oldest_age_ms:r===void 0?null:Math.max(0,n-r)}}async function xie(e){let n=[],t="ignored",r=!1,o=e.queue.entries().length+1;for(;o>0;){o-=1;let i=e.queue.head();if(i===void 0)break;let a=e.store.initial(e.watermarkKey);if(!El(a,i.sourceSeq)){e.queue.ack(i.sourceSeq);continue}if(e.onlyDispatchUnattempted&&e.serverRows.length===0&&i.attempts>0){e.log("resume_keystone.attempted_entry_withheld",{threadId:e.threadId,sourceSeq:i.sourceSeq,attempts:i.attempts}),e.queue.deadLetter(i.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:i.sourceSeq,reason:"withheld",attempts:i.attempts,alreadyPublished:!1});continue}let s=await e.dispatch(i.sourceSeq,i.payload);if(await PBe({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,sourceSeq:i.sourceSeq,threadId:e.threadId,outcome:s,log:e.log,policy:e.policy,nowMs:e.nowMs,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),r||(t=s,r=!0),s==="dispatched"&&n.push(i.sourceSeq),s==="transient_failed"||s==="deferred")break}return{dispatched:n,headOutcome:t}}async function vie(e){e.queue.enqueue(e.sourceSeq,e.kind,e.payload,e.nowMs??Date.now());let n=e.leases.current(e.threadId);if(gie(n,e.leaseEpoch))return e.log("resume_keystone.fenced",{threadId:e.threadId,heldLeaseEpoch:n??null,controlLeaseEpoch:e.leaseEpoch??null,sourceSeq:e.sourceSeq}),e.log("commander.invariant_violation",{invariant:"lease_fence_violation",thread_id:e.threadId,harness:null,detail:`held_lease_epoch=${n??"none"} control_lease_epoch=${e.leaseEpoch??"none"} source_seq=${e.sourceSeq}`}),e.queue.ack(e.sourceSeq),"ignored";e.leaseEpoch!==void 0&&e.leases.adopt(e.threadId,e.leaseEpoch);let t=e.serverRows??[];if(t.length>0){let i=e.store.initial(e.watermarkKey),a=fb(i,t);a!==void 0&&a!==i&&($C(e.store,e.watermarkKey,a,e.log),e.log("resume_keystone.live_miss_reconciled",{threadId:e.threadId,reconciledWatermark:a,sourceSeq:e.sourceSeq}))}let r=e.store.initial(e.watermarkKey);if(!El(r,e.sourceSeq))return e.log("resume_keystone.already_applied",{threadId:e.threadId,sourceSeq:e.sourceSeq,appliedSourceSeq:r??null}),e.queue.ack(e.sourceSeq),"ignored";let o=e.reconcilerDeadlineMs??_ie;try{return(await e.lock.runExclusive(e.threadId,()=>xie({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,threadId:e.threadId,serverRows:t,dispatch:e.dispatch,log:e.log,nowMs:e.nowMs,policy:e.policy,onlyDispatchUnattempted:e.onlyDispatchUnattempted??!1,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),o)).headOutcome}catch(i){if(i instanceof Wm)return e.log("resume_keystone.drain_waiting",{threadId:e.threadId,on:"thread_reconciler_lock",phase:"receive",sourceSeq:e.sourceSeq,deadlineMs:o,queued_for_ms:i.queuedForMs,blocked_section_age_ms:i.blockedSectionAgeMs??null,...JC(e.queue,e.nowMs??Date.now())}),"transient_failed";if(i instanceof Al)return e.log("resume_keystone.spawn_deadline_exceeded",{threadId:e.threadId,sourceSeq:e.sourceSeq,deadlineMs:o,...JC(e.queue,e.nowMs??Date.now())}),"transient_failed";throw i}}async function wie(e){let n=[],t=e.serverRows??[],r=e.reconcilerDeadlineMs??_ie,o=async()=>{let i=e.store.initial(e.watermarkKey),a=fb(i,t);a!==void 0&&a!==i&&$C(e.store,e.watermarkKey,a,e.log),e.queue.tornTail()&&(t.length>0?(e.log("resume_keystone.torn_tail",{threadId:e.threadId,reconciledWatermark:a??null,recovery:"server_reconcile"}),e.queue.reconciledTornTail()):(e.log("resume_keystone.torn_tail_unrecoverable",{threadId:e.threadId,reconciledWatermark:a??null}),e.onTornTailUnrecoverable!==void 0&&await e.onTornTailUnrecoverable(e.threadId),e.queue.reconciledTornTail())),n=(await xie({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,threadId:e.threadId,serverRows:t,dispatch:e.dispatch,log:e.log,nowMs:e.nowMs,policy:e.policy,onlyDispatchUnattempted:e.onlyDispatchUnattempted??!1,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard})).dispatched};try{await e.lock.runExclusive(e.threadId,o,r)}catch(i){if(i instanceof Wm)return e.log("resume_keystone.drain_waiting",{threadId:e.threadId,on:"thread_reconciler_lock",phase:"drain",deadlineMs:r,queued_for_ms:i.queuedForMs,blocked_section_age_ms:i.blockedSectionAgeMs??null,...JC(e.queue,e.nowMs??Date.now())}),n;if(i instanceof Al)return e.log("resume_keystone.drain_deadline_exceeded",{threadId:e.threadId,deadlineMs:r,...JC(e.queue,e.nowMs??Date.now())}),n;throw i}return n}var _ie,Sie=V(()=>{"use strict";Jq();Kq();u$();Vq();_ie=12e4});import{spawn as Ym,spawnSync as nT}from"node:child_process";import{createHash as Bu,randomUUID as ja}from"node:crypto";import{chmodSync as Ib,closeSync as tT,existsSync as Ps,fsyncSync as rT,lstatSync as ABe,mkdirSync as Ad,mkdtempSync as dT,openSync as oT,readdirSync as pae,readFileSync as na,realpathSync as Zm,renameSync as Pb,rmSync as ea,statSync as uT,writeFileSync as Ju}from"node:fs";import{readFile as MBe}from"node:fs/promises";import{createServer as DBe}from"node:http";import{homedir as eh,hostname as OBe,tmpdir as Db}from"node:os";import{createInterface as qBe}from"node:readline";import{createRequire as $Be}from"node:module";import{basename as j$,dirname as Rs,extname as FBe,isAbsolute as LBe,join as _t,resolve as $l}from"node:path";import{fileURLToPath as jBe}from"node:url";function mae(e){let n=e?.trim();return n===void 0||n===""?"default":n}function hae(e){let n=e?.trim();return n===void 0||n===""||n==="default"?void 0:n}function Tb(e,n){switch(e){case"codex":return n==="default"||n.startsWith("gpt-");case"claude-code":return n==="default"||n==="fable-5"||n==="opus"||n==="opusplan"||n==="sonnet"||n==="haiku"||n.startsWith("claude-")}}function NBe(e,n,t){let[,r,o]=n,i=e.agentProvider==="codex"?"this computer's native Codex account":"this computer's Claude Code account";switch(t){case"account_unavailable":return`${o} can't run because ${i} is not logged in with a usable account. Log in or switch the model or provider.`;case"model_harness_mismatch":return`${o} can't run because it is incompatible with the selected ${e.agentProvider} harness. Switch the model or coding harness.`;case"model_transport_mismatch":return`${o} can't run on ${i} because the required Wafer transport is not selected. Switch the model or connect the required Wafer/API-key provider.`;case"model_transport_model_unavailable":return`${o} can't run because the selected Wafer transport no longer offers that model. Switch the model or connect a transport that explicitly offers it.`;case"model_transport_unavailable":return`${o} can't run because this computer does not advertise the selected ${r??"native"} model transport. Connect that provider or switch the model.`;case"harness_unavailable":return`${o} can't run because this computer does not advertise the selected ${e.agentProvider} harness. Connect or log in to that harness, or switch the model or coding harness.`}}function zBe(e){return[e.agentProvider,hae(e.modelProvider),mae(e.model)]}function A$(e){if(e===void 0)return"absent";let n=O(e),t=y(n?.baseUrl)?.trim(),r=y(n?.token)?.trim();return t!==void 0&&t!==""&&r!==void 0&&r!==""?"usable":"unusable"}function M$(e,n){let t=e.modelTransportCatalogStatus,r=y(t);switch(r){case"catalog_unavailable":case"offered":case"unverified":case"delisted":return r;default:{let o=mae(y(e.model)),i=hae(y(e.modelProvider)),a=Tb("codex",o)||Tb("claude-code",o);(fae.has(o)||E$.has(o)||i==="wafer"&&!a)&&n("linzumi.model_transport_catalog_status_invalid",{field:"modelTransportCatalogStatus",raw_value:t??null});return}}}function HC(e,n,t){let r=zBe(e),[,o,i]=r,a=e.nativeModelCatalog,s=o===void 0&&a!==void 0?a.agentProvider===e.agentProvider&&a.status==="ready"&&a.models.some(k=>k.id===(i==="default"?a.defaultModel:i)):void 0,d=s??(Tb("codex",i)||Tb("claude-code",i)),u=s===!0?void 0:fae.has(i)||E$.has(i)||o==="wafer"&&!d?"wafer":void 0,c=!E$.has(i)&&e.modelTransportCatalogStatus!=="delisted",l=u!=="wafer"||e.modelTransportCatalogStatus==="offered"||e.modelTransportCatalogStatus==="catalog_unavailable",p=o===void 0||n.includes(o),f=e.agentProvider==="claude-code"&&u==="wafer"&&(o===void 0||o===u)&&e.llmProxyBinding==="usable",g=f||u===o,_=f||o!==void 0&&e.agentProvider==="codex"||(s??Tb(e.agentProvider,i)),m=e.agentProvider==="claude-code"||o!==void 0||e.hasNativeCodexAuth,b=t.includes(e.agentProvider),v=e.llmProxyBinding==="unusable"||o==="wafer"&&e.llmProxyBinding!=="usable"?"model_transport_mismatch":g?c?!l||!p?"model_transport_unavailable":b?_?m?void 0:"account_unavailable":"model_harness_mismatch":"harness_unavailable":"model_transport_model_unavailable":"model_transport_mismatch";return v===void 0?{type:"runnable",identity:r}:{type:"blocked",code:"model_account_incompatible",identity:r,reason:v,message:NBe(e,r,v)}}function JBe(e){return BBe.filter(n=>e[n]===!0)}function KBe(e){if(e===void 0)return UBe;if("disabled"in e&&e.disabled===!0)return"disabled";if("idleWindowMs"in e){let n=e.idleWindowMs;if(!Number.isFinite(n)||n<=0)throw new Error(`idleSpinDown: invalid idleWindowMs=${String(n)} - must be a positive finite number of milliseconds (NO FALLBACKS)`);return n}throw new Error(`idleSpinDown: unrecognized workspace setting shape ${JSON.stringify(e)}`)}function WBe(e){let n={kind:"running",handle:{codex:{isClosed:()=>!1},sessionClosed:()=>!0,processPid:process.pid}};return e(n)==="dead"}function VBe(e){if(!e.reconcilePresent)return{kind:"inert_no_reconcile"};if(e.windowMs==="disabled")return{kind:"disabled"};if(e.alreadyDormant)return{kind:"already_dormant"};let n=JBe(e.signals);if(n.length>0)return{kind:"keep_alive",nextLastActivityMs:e.nowMs,present:n};let t=e.nowMs-e.lastActivityMs;return t>=e.windowMs?{kind:"spin_down",idleForMs:t}:{kind:"waiting",remainingMs:e.windowMs-t}}function GBe(e){let n=new Map;return{register:(d,u)=>{n.set(d,{lastActivityMs:u??e.now(),dormant:!1})},noteActivity:(d,u)=>{let c=n.get(d),l=u??e.now();if(c===void 0){n.set(d,{lastActivityMs:l,dormant:!1});return}c.lastActivityMs=l,c.dormant=!1},tick:async d=>{let u=d??e.now(),c=e.reconcilePresent(),l=new Map;for(let[p,f]of n){let g=VBe({lastActivityMs:f.lastActivityMs,nowMs:u,windowMs:e.resolveWindowMs(p),signals:e.probeSignals(p),reconcilePresent:c,alreadyDormant:f.dormant});switch(l.set(p,g),g.kind){case"keep_alive":f.lastActivityMs=g.nextLastActivityMs;break;case"spin_down":f.dormant=!0,e.log?.("idle_spin_down.fire",{kandanThreadId:p,idleForMs:g.idleForMs});try{await e.onSpinDown(p)}catch(_){throw f.dormant=!1,f.lastActivityMs=u,e.log?.("idle_spin_down.fire_failed",{kandanThreadId:p,message:_ instanceof Error?_.message:String(_)}),_}break;default:break}}return l},unregister:d=>{n.delete(d)},isDormant:d=>n.get(d)?.dormant===!0,trackedThreads:()=>[...n.keys()]}}function QBe(e){let n=s=>{let d=e.sessionIdleSignalsFor(s);return d===void 0?HBe:{pendingInboundQueue:d.pendingInboundQueue,openLocalExec:d.openLocalExec,keepAliveClaudeSession:e.hasClaudeKeepAlive(s),protectedListeners:d.protectedListeners,pendingApproval:d.pendingApproval,heldTurnSlot:d.heldTurnSlot}},t=()=>WBe(e.threadRunnerEntryLiveness),r=GBe({now:e.now,probeSignals:n,resolveWindowMs:e.resolveWindowMs,reconcilePresent:t,onSpinDown:e.onSpinDownToDormant,...e.log!==void 0?{log:e.log}:{}}),o=new Set,i=async()=>{let s=e.now(),d=new Set(e.listActiveThreadIds());for(let u of d)o.has(u)||(r.register(u,s),o.add(u));for(let u of[...o])d.has(u)||(r.unregister(u),o.delete(u));return await r.tick(s)},a=e.scheduler??ZBe();return a.start(()=>{i().catch(s=>{e.log?.("idle_spin_down.tick_failed",{message:s instanceof Error?s.message:String(s)})})},e.intervalMs),{tickOnce:i,reconcilePresent:t,probeSignals:n,trackedThreads:()=>[...o],stop:()=>a.stop()}}function xb(e,n,t,r){if(e.generation!==n||e.status!=="pending"||!t)return{state:e,accepted:!1};switch(r.type){case"ready":return{accepted:!0,state:{agentProvider:e.agentProvider,generation:n,status:"ready",defaultModel:r.catalog.defaultModel,models:r.catalog.models}};case"empty":return{accepted:!0,state:{agentProvider:e.agentProvider,generation:n,status:"empty",models:[]}};case"failed":return{accepted:!0,state:{agentProvider:e.agentProvider,generation:n,status:"failed",failureCode:r.failureCode}}}}function Iie(e){let n={agentProvider:e.agentProvider,generation:e.generation,status:e.status};switch(e.status){case"pending":return n;case"ready":return{...n,defaultModel:e.defaultModel,models:e.models.map(t=>({id:t.id,displayName:t.displayName,reasoningEfforts:t.reasoningEfforts,...t.defaultReasoningEffort===void 0?{}:{defaultReasoningEffort:t.defaultReasoningEffort}}))};case"empty":return{...n,models:[]};case"failed":return{...n,failureCode:e.failureCode}}}function KC(e,n){return e===void 0?n:void 0}async function iJe(e,n){if(e.agentReplay===void 0)return;let t=await eH({...e.agentReplay,onPlaybackError:r=>{let o=nH(r);n("agent_replay.codex_play_failed",{fixture_path:e.agentReplay?.fixturePath??null,message:o}),process.stderr.write(`[linzumi] agent replay Codex playback failed: ${o}
1672
+ `});function hie(){let e=new Map;return{current:n=>e.get(n),adopt:(n,t)=>{if(!Number.isInteger(t))return!1;let r=e.get(n);return r!==void 0&&t<r||r===t?!1:(e.set(n,t),!0)},release:n=>{e.delete(n)},snapshot:()=>[...e.entries()].map(([n,t])=>({threadId:n,leaseEpoch:t}))}}function gie(e,n){return n===void 0||e===void 0?!1:n<e}function yie(e){if(e===null||typeof e!="object"||Array.isArray(e))return;let n=e.lease_epoch;return typeof n=="number"&&Number.isInteger(n)?n:void 0}var u$=V(()=>{"use strict"});function bie(e){let n=e.store.initial(e.watermarkKey);return El(n,e.sourceSeq)?($C(e.store,e.watermarkKey,e.sourceSeq,e.log),!0):!1}async function PBe(e){let n=e.policy??toe,t=e.nowMs??Date.now();if(e.outcome==="dispatched"){e.inFlightGuard?.mark(e.watermarkKey,e.sourceSeq),e.queue.ack(e.sourceSeq);return}if(e.outcome==="ignored"){e.queue.ack(e.sourceSeq);return}if(e.outcome==="permanent_failed"){let i=RBe(e.queue,e.sourceSeq);e.queue.deadLetter(e.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:e.sourceSeq,reason:"permanent",attempts:i,alreadyPublished:!0});return}if(e.outcome==="deferred")return;let r=e.queue.recordAttempt(e.sourceSeq),o=e.queue.entries().find(i=>i.sourceSeq===e.sourceSeq);o!==void 0&&roe(o,n,t)&&(e.log("resume_keystone.dead_lettered",{threadId:e.threadId,sourceSeq:e.sourceSeq,attempts:r}),e.queue.deadLetter(e.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:e.sourceSeq,reason:"exhausted",attempts:r,alreadyPublished:!1}))}function RBe(e,n){return e.entries().find(t=>t.sourceSeq===n)?.attempts??0}function JC(e,n){let t=e.entries(),r;for(let o of t)(r===void 0||o.enqueuedAtMs<r)&&(r=o.enqueuedAtMs);return{pending_count:t.length,oldest_age_ms:r===void 0?null:Math.max(0,n-r)}}async function xie(e){let n=[],t="ignored",r=!1,o=e.queue.entries().length+1;for(;o>0;){o-=1;let i=e.queue.head();if(i===void 0)break;let a=e.store.initial(e.watermarkKey);if(!El(a,i.sourceSeq)){e.queue.ack(i.sourceSeq);continue}if(e.onlyDispatchUnattempted&&e.serverRows.length===0&&i.attempts>0){e.log("resume_keystone.attempted_entry_withheld",{threadId:e.threadId,sourceSeq:i.sourceSeq,attempts:i.attempts}),e.queue.deadLetter(i.sourceSeq),await e.onDeadLetter?.({threadId:e.threadId,sourceSeq:i.sourceSeq,reason:"withheld",attempts:i.attempts,alreadyPublished:!1});continue}let s=await e.dispatch(i.sourceSeq,i.payload);if(await PBe({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,sourceSeq:i.sourceSeq,threadId:e.threadId,outcome:s,log:e.log,policy:e.policy,nowMs:e.nowMs,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),r||(t=s,r=!0),s==="dispatched"&&n.push(i.sourceSeq),s==="transient_failed"||s==="deferred")break}return{dispatched:n,headOutcome:t}}async function vie(e){e.queue.enqueue(e.sourceSeq,e.kind,e.payload,e.nowMs??Date.now());let n=e.leases.current(e.threadId);if(gie(n,e.leaseEpoch))return e.log("resume_keystone.fenced",{threadId:e.threadId,heldLeaseEpoch:n??null,controlLeaseEpoch:e.leaseEpoch??null,sourceSeq:e.sourceSeq}),e.log("commander.invariant_violation",{invariant:"lease_fence_violation",thread_id:e.threadId,harness:null,detail:`held_lease_epoch=${n??"none"} control_lease_epoch=${e.leaseEpoch??"none"} source_seq=${e.sourceSeq}`}),e.queue.ack(e.sourceSeq),"ignored";e.leaseEpoch!==void 0&&e.leases.adopt(e.threadId,e.leaseEpoch);let t=e.serverRows??[];if(t.length>0){let i=e.store.initial(e.watermarkKey),a=fb(i,t);a!==void 0&&a!==i&&($C(e.store,e.watermarkKey,a,e.log),e.log("resume_keystone.live_miss_reconciled",{threadId:e.threadId,reconciledWatermark:a,sourceSeq:e.sourceSeq}))}let r=e.store.initial(e.watermarkKey);if(!El(r,e.sourceSeq))return e.log("resume_keystone.already_applied",{threadId:e.threadId,sourceSeq:e.sourceSeq,appliedSourceSeq:r??null}),e.queue.ack(e.sourceSeq),"ignored";let o=e.reconcilerDeadlineMs??_ie;try{return(await e.lock.runExclusive(e.threadId,()=>xie({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,threadId:e.threadId,serverRows:t,dispatch:e.dispatch,log:e.log,nowMs:e.nowMs,policy:e.policy,onlyDispatchUnattempted:e.onlyDispatchUnattempted??!1,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),o)).headOutcome}catch(i){if(i instanceof Wm)return e.log("resume_keystone.drain_waiting",{threadId:e.threadId,on:"thread_reconciler_lock",phase:"receive",sourceSeq:e.sourceSeq,deadlineMs:o,queued_for_ms:i.queuedForMs,blocked_section_age_ms:i.blockedSectionAgeMs??null,...JC(e.queue,e.nowMs??Date.now())}),"transient_failed";if(i instanceof Al)return e.log("resume_keystone.spawn_deadline_exceeded",{threadId:e.threadId,sourceSeq:e.sourceSeq,deadlineMs:o,...JC(e.queue,e.nowMs??Date.now())}),"transient_failed";throw i}}async function wie(e){let n=[],t=e.serverRows??[],r=e.reconcilerDeadlineMs??_ie,o=async()=>{let i=e.store.initial(e.watermarkKey),a=fb(i,t);a!==void 0&&a!==i&&$C(e.store,e.watermarkKey,a,e.log),e.queue.tornTail()&&(t.length>0?(e.log("resume_keystone.torn_tail",{threadId:e.threadId,reconciledWatermark:a??null,recovery:"server_reconcile"}),e.queue.reconciledTornTail()):(e.log("resume_keystone.torn_tail_unrecoverable",{threadId:e.threadId,reconciledWatermark:a??null}),e.onTornTailUnrecoverable!==void 0&&await e.onTornTailUnrecoverable(e.threadId),e.queue.reconciledTornTail())),n=(await xie({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,threadId:e.threadId,serverRows:t,dispatch:e.dispatch,log:e.log,nowMs:e.nowMs,policy:e.policy,onlyDispatchUnattempted:e.onlyDispatchUnattempted??!1,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard})).dispatched};try{await e.lock.runExclusive(e.threadId,o,r)}catch(i){if(i instanceof Wm)return e.log("resume_keystone.drain_waiting",{threadId:e.threadId,on:"thread_reconciler_lock",phase:"drain",deadlineMs:r,queued_for_ms:i.queuedForMs,blocked_section_age_ms:i.blockedSectionAgeMs??null,...JC(e.queue,e.nowMs??Date.now())}),n;if(i instanceof Al)return e.log("resume_keystone.drain_deadline_exceeded",{threadId:e.threadId,deadlineMs:r,...JC(e.queue,e.nowMs??Date.now())}),n;throw i}return n}var _ie,Sie=V(()=>{"use strict";Jq();Kq();u$();Vq();_ie=12e4});import{spawn as Ym,spawnSync as nT}from"node:child_process";import{createHash as Bu,randomUUID as ja}from"node:crypto";import{chmodSync as Ib,closeSync as tT,existsSync as Ps,fsyncSync as rT,lstatSync as ABe,mkdirSync as Ad,mkdtempSync as dT,openSync as oT,readdirSync as pae,readFileSync as na,realpathSync as Zm,renameSync as Pb,rmSync as ea,statSync as uT,writeFileSync as Ju}from"node:fs";import{readFile as MBe}from"node:fs/promises";import{createServer as DBe}from"node:http";import{homedir as eh,hostname as OBe,tmpdir as Db}from"node:os";import{createInterface as qBe}from"node:readline";import{createRequire as $Be}from"node:module";import{basename as j$,dirname as Rs,extname as FBe,isAbsolute as LBe,join as _t,resolve as $l}from"node:path";import{fileURLToPath as jBe}from"node:url";function mae(e){let n=e?.trim();return n===void 0||n===""?"default":n}function hae(e){let n=e?.trim();return n===void 0||n===""||n==="default"?void 0:n}function Tb(e,n){switch(e){case"codex":return n==="default"||n.startsWith("gpt-");case"claude-code":return n==="default"||n==="fable-5"||n==="opus"||n==="opusplan"||n==="sonnet"||n==="haiku"||n.startsWith("claude-")}}function NBe(e,n,t,r){let[,o,i]=n,a=e.agentProvider==="codex"?"this computer's native Codex account":"this computer's Claude Code account";switch(t){case"account_unavailable":return`${i} can't run because ${a} is not logged in with a usable account. Log in or switch the model or provider.`;case"model_harness_mismatch":return`${i} can't run because it is incompatible with the selected ${e.agentProvider} harness. Switch the model or coding harness.`;case"model_transport_mismatch":return`${i} can't run on ${a} because the required Wafer transport is not selected. Switch the model or connect the required Wafer/API-key provider.`;case"model_transport_model_unavailable":return`${i} can't run because the selected Wafer transport no longer offers that model. Switch the model or connect a transport that explicitly offers it.`;case"model_transport_unavailable":if(r&&e.nativeModelCatalog!==void 0){let s=e.nativeModelCatalog;switch(s.status){case"pending":case"failed":{let d=s.status==="failed"?` (${s.failureCode})`:"";return`${i} can't run because this computer's ${e.agentProvider} model catalog is ${s.status}${d}; availability cannot be verified. Refresh the model catalog or choose a model from a ready catalog.`}case"ready":case"empty":break}}return`${i} can't run because this computer does not advertise the selected ${o??"native"} model transport. Connect that provider or switch the model.`;case"harness_unavailable":return`${i} can't run because this computer does not advertise the selected ${e.agentProvider} harness. Connect or log in to that harness, or switch the model or coding harness.`}}function zBe(e){return[e.agentProvider,hae(e.modelProvider),mae(e.model)]}function A$(e){if(e===void 0)return"absent";let n=O(e),t=y(n?.baseUrl)?.trim(),r=y(n?.token)?.trim();return t!==void 0&&t!==""&&r!==void 0&&r!==""?"usable":"unusable"}function M$(e,n){let t=e.modelTransportCatalogStatus,r=y(t);switch(r){case"catalog_unavailable":case"offered":case"unverified":case"delisted":return r;default:{let o=mae(y(e.model)),i=hae(y(e.modelProvider)),a=Tb("codex",o)||Tb("claude-code",o);(fae.has(o)||E$.has(o)||i==="wafer"&&!a)&&n("linzumi.model_transport_catalog_status_invalid",{field:"modelTransportCatalogStatus",raw_value:t??null});return}}}function HC(e,n,t){let r=zBe(e),[,o,i]=r,a=e.nativeModelCatalog,s=o===void 0&&a!==void 0?a.agentProvider===e.agentProvider&&a.status==="ready"&&a.models.some(C=>C.id===(i==="default"?a.defaultModel:i)):void 0,d=s??(Tb("codex",i)||Tb("claude-code",i)),u=s===!0?void 0:fae.has(i)||E$.has(i)||o==="wafer"&&!d?"wafer":void 0,c=!E$.has(i)&&e.modelTransportCatalogStatus!=="delisted",l=u!=="wafer"||e.modelTransportCatalogStatus==="offered"||e.modelTransportCatalogStatus==="catalog_unavailable",p=o===void 0&&u===void 0&&t.includes(e.agentProvider)&&(a?.status==="pending"||a?.status==="failed"),f=o===void 0||n.includes(o),g=e.agentProvider==="claude-code"&&u==="wafer"&&(o===void 0||o===u)&&e.llmProxyBinding==="usable",_=g||u===o,m=g||o!==void 0&&e.agentProvider==="codex"||(s??Tb(e.agentProvider,i)),b=e.agentProvider==="claude-code"||o!==void 0||e.hasNativeCodexAuth,w=t.includes(e.agentProvider),k=e.llmProxyBinding==="unusable"||o==="wafer"&&e.llmProxyBinding!=="usable"?"model_transport_mismatch":_?c?!l||!f||p?"model_transport_unavailable":w?m?b?void 0:"account_unavailable":"model_harness_mismatch":"harness_unavailable":"model_transport_model_unavailable":"model_transport_mismatch";return k===void 0?{type:"runnable",identity:r}:{type:"blocked",code:"model_account_incompatible",identity:r,reason:k,message:NBe(e,r,k,p)}}function JBe(e){return BBe.filter(n=>e[n]===!0)}function KBe(e){if(e===void 0)return UBe;if("disabled"in e&&e.disabled===!0)return"disabled";if("idleWindowMs"in e){let n=e.idleWindowMs;if(!Number.isFinite(n)||n<=0)throw new Error(`idleSpinDown: invalid idleWindowMs=${String(n)} - must be a positive finite number of milliseconds (NO FALLBACKS)`);return n}throw new Error(`idleSpinDown: unrecognized workspace setting shape ${JSON.stringify(e)}`)}function WBe(e){let n={kind:"running",handle:{codex:{isClosed:()=>!1},sessionClosed:()=>!0,processPid:process.pid}};return e(n)==="dead"}function VBe(e){if(!e.reconcilePresent)return{kind:"inert_no_reconcile"};if(e.windowMs==="disabled")return{kind:"disabled"};if(e.alreadyDormant)return{kind:"already_dormant"};let n=JBe(e.signals);if(n.length>0)return{kind:"keep_alive",nextLastActivityMs:e.nowMs,present:n};let t=e.nowMs-e.lastActivityMs;return t>=e.windowMs?{kind:"spin_down",idleForMs:t}:{kind:"waiting",remainingMs:e.windowMs-t}}function GBe(e){let n=new Map;return{register:(d,u)=>{n.set(d,{lastActivityMs:u??e.now(),dormant:!1})},noteActivity:(d,u)=>{let c=n.get(d),l=u??e.now();if(c===void 0){n.set(d,{lastActivityMs:l,dormant:!1});return}c.lastActivityMs=l,c.dormant=!1},tick:async d=>{let u=d??e.now(),c=e.reconcilePresent(),l=new Map;for(let[p,f]of n){let g=VBe({lastActivityMs:f.lastActivityMs,nowMs:u,windowMs:e.resolveWindowMs(p),signals:e.probeSignals(p),reconcilePresent:c,alreadyDormant:f.dormant});switch(l.set(p,g),g.kind){case"keep_alive":f.lastActivityMs=g.nextLastActivityMs;break;case"spin_down":f.dormant=!0,e.log?.("idle_spin_down.fire",{kandanThreadId:p,idleForMs:g.idleForMs});try{await e.onSpinDown(p)}catch(_){throw f.dormant=!1,f.lastActivityMs=u,e.log?.("idle_spin_down.fire_failed",{kandanThreadId:p,message:_ instanceof Error?_.message:String(_)}),_}break;default:break}}return l},unregister:d=>{n.delete(d)},isDormant:d=>n.get(d)?.dormant===!0,trackedThreads:()=>[...n.keys()]}}function QBe(e){let n=s=>{let d=e.sessionIdleSignalsFor(s);return d===void 0?HBe:{pendingInboundQueue:d.pendingInboundQueue,openLocalExec:d.openLocalExec,keepAliveClaudeSession:e.hasClaudeKeepAlive(s),protectedListeners:d.protectedListeners,pendingApproval:d.pendingApproval,heldTurnSlot:d.heldTurnSlot}},t=()=>WBe(e.threadRunnerEntryLiveness),r=GBe({now:e.now,probeSignals:n,resolveWindowMs:e.resolveWindowMs,reconcilePresent:t,onSpinDown:e.onSpinDownToDormant,...e.log!==void 0?{log:e.log}:{}}),o=new Set,i=async()=>{let s=e.now(),d=new Set(e.listActiveThreadIds());for(let u of d)o.has(u)||(r.register(u,s),o.add(u));for(let u of[...o])d.has(u)||(r.unregister(u),o.delete(u));return await r.tick(s)},a=e.scheduler??ZBe();return a.start(()=>{i().catch(s=>{e.log?.("idle_spin_down.tick_failed",{message:s instanceof Error?s.message:String(s)})})},e.intervalMs),{tickOnce:i,reconcilePresent:t,probeSignals:n,trackedThreads:()=>[...o],stop:()=>a.stop()}}function xb(e,n,t,r){if(e.generation!==n||e.status!=="pending"||!t)return{state:e,accepted:!1};switch(r.type){case"ready":return{accepted:!0,state:{agentProvider:e.agentProvider,generation:n,status:"ready",defaultModel:r.catalog.defaultModel,models:r.catalog.models}};case"empty":return{accepted:!0,state:{agentProvider:e.agentProvider,generation:n,status:"empty",models:[]}};case"failed":return{accepted:!0,state:{agentProvider:e.agentProvider,generation:n,status:"failed",failureCode:r.failureCode}}}}function Iie(e){let n={agentProvider:e.agentProvider,generation:e.generation,status:e.status};switch(e.status){case"pending":return n;case"ready":return{...n,defaultModel:e.defaultModel,models:e.models.map(t=>({id:t.id,displayName:t.displayName,reasoningEfforts:t.reasoningEfforts,...t.defaultReasoningEffort===void 0?{}:{defaultReasoningEffort:t.defaultReasoningEffort}}))};case"empty":return{...n,models:[]};case"failed":return{...n,failureCode:e.failureCode}}}function KC(e,n){return e===void 0?n:void 0}async function iJe(e,n){if(e.agentReplay===void 0)return;let t=await eH({...e.agentReplay,onPlaybackError:r=>{let o=nH(r);n("agent_replay.codex_play_failed",{fixture_path:e.agentReplay?.fixturePath??null,message:o}),process.stderr.write(`[linzumi] agent replay Codex playback failed: ${o}
1673
1673
  `)}});switch(t.type){case"ok":return n("agent_replay.runtime_started",{fixture_path:t.runtime.fixture.path,provider:t.runtime.provider,record_count:t.runtime.fixture.records.length}),t.runtime;case"error":throw new Error(t.message)}}function aJe(e){return{...e,CLAUDE_CODE_ENABLE_TASKS:"0"}}function sJe(e,n){return e.recoveryAttemptId===n.recoveryAttemptId&&e.runnerKey===n.runnerKey&&e.threadId===n.threadId&&e.sourceSeq===n.sourceSeq&&e.leaseEpoch===n.leaseEpoch&&e.quarantinedWorkerGeneration===n.quarantinedWorkerGeneration&&e.quarantinedRunnerBootId===n.quarantinedRunnerBootId&&e.redispatchCount===n.redispatchCount}function dJe(e){return e.runnerBootId===e.quarantinedRunnerBootId}function uJe(e){return{...e}}function cJe(e){return e===void 0?"session_bound":"worker_ready"}function lJe(e){let n=e.currentGeneration!==e.failedGeneration?{type:"preserve"}:e.failedGeneration<=1?{type:"delete"}:{type:"restore",workerGeneration:e.failedGeneration-1};return{removeOwnedEntry:e.currentEntryIsOwned,generation:n}}function pJe(e){let n=e.presentedLeaseEpoch;if(n===void 0)return{type:"absent"};if(!Number.isInteger(n)||n<=0)return{type:"invalid"};let t=e.heldLeaseEpoch;return t===void 0||n>t?{type:"adopt",leaseEpoch:n}:n===t?{type:"current",leaseEpoch:t}:{type:"stale",heldLeaseEpoch:t,presentedLeaseEpoch:n}}async function cT(e){let n=B$(e),t=L9e(e),r=await iJe(e,n),o=r===void 0?e:{...e,agentReplay:{...e.agentReplay,fixturePath:e.agentReplay?.fixturePath??r.fixture.path,provider:r.provider,clockMode:e.agentReplay?.clockMode??{type:"immediate"}},claudeCodeAvailable:r.provider==="claude-code",claudeCodeRunner:r.claudeCodeRunner},i=A9({maxInFlight:R9(),maxLivePressureAgeMs:E9(),onPressureShed:({event:_,...m})=>n(_,m)}),a={actions:[()=>n.close(),...t===void 0?[]:[()=>t.close()]],closePromise:void 0,removeHandlers:void 0},s=()=>E9e(a),d={stopAccepting:()=>{},flushInboundQueues:()=>{},interruptInFlightTurns:()=>Promise.resolve()},u={beginDraining:()=>{},isQuiescent:()=>!0,isWaitEligible:()=>!0,inFlightTurns:()=>[],lastActivityAtMs:()=>{},publishForcedKillTerminalStates:()=>Promise.resolve(),onTurnCompleted:()=>{}},c=o.threadProcess?.role==="thread"?void 0:nte({log:(_,m)=>n(_,m)});if(c!==void 0){let _=m=>c.handleIpcMessage(m);process.on("message",_),a.actions.push(()=>{process.off("message",_)}),n("runner.generation_overlap_enabled",{epoch:c.epoch,handoffFromPid:c.handoffFromPid??null})}let l=LH({flagRaw:o.streamIdleTimeoutMsFlag}),p=Coe({supervised:_b(process.env),platform:process.platform}),f=o$({optedIn:o.stopSupervisorOnSigint===!0,threadRole:o.threadProcess?.role,supervised:_b(process.env),launchSource:o.launchSource,platform:process.platform})?i$({serverUrl:o.kandanUrl,log:(_,m)=>n(_,m??{})}):void 0;f!==void 0&&a.actions.push(a$(f));let g=U9e(s,d,n,{signals:p?["SIGINT","SIGHUP"]:["SIGTERM","SIGINT","SIGHUP"],supervisorStop:f});if(a.removeHandlers=g.uninstall,process.platform!=="win32"){let _=Poe({hooks:{beginDraining:()=>u.beginDraining(),isQuiescent:()=>u.isQuiescent(),isWaitEligible:()=>u.isWaitEligible(),inFlightTurns:()=>u.inFlightTurns(),lastActivityAtMs:()=>u.lastActivityAtMs(),publishForcedKillTerminalStates:m=>u.publishForcedKillTerminalStates(m),onTurnCompleted:m=>u.onTurnCompleted(m),exitViaDrain:()=>{g.triggerFastExitDrain("SIGTERM")}},maxWaitMs:LC(process.env),hardCapMs:hoe(process.env,LC(process.env),c!==void 0),activityIdleMs:goe(process.env),signals:p?["SIGUSR2","SIGTERM"]:["SIGUSR2"],log:n});a.actions.push(_.uninstall),c!==void 0&&(c.requestUpdateDrain=m=>_.requestDrain(m),c.cancelUpdateDrain=m=>_.cancelDrain(m))}n("runner.starting",{runnerId:o.runnerId,cwd:o.cwd,kandanUrl:o.kandanUrl,debugTraceDir:t?.runDir??null,codex_bin_path:o.codexBin,codex_bin_source:o.dependencyStatus?.codex.source??null,codex_version:o.dependencyStatus?.codex.version??null}),x7e(),U9({snapshotsRoot:Yg()}).then(_=>{_.removedSnapshotDirs.length>0&&n("runner.git_safety_snapshots_pruned",{removed_snapshots:_.removedSnapshotDirs.length,removed_refs:_.removedRefs.length})}).catch(_=>{n("runner.git_safety_snapshots_prune_failed",{message:_ instanceof Error?_.message:String(_)})});try{if(o.machineId!==void 0){let w=o.machineId,v=()=>bC({machineId:w,runnerId:o.runnerId,cwd:o.cwd,workspace:st(o)??null,linzumiUrl:o.kandanUrl,launchSource:o.launchSource,processGroupLeader:process.platform!=="win32"&&process.env.LINZUMI_RUNNER_PROCESS_GROUP_LEADER==="1",configPath:o.runnerLockConfigPath,gracefulUpdateDrain:process.platform!=="win32",onTakeover:C=>{n("runner.lock_takeover",{runnerId:o.runnerId,holderRunnerId:C.holderRunnerId,holderPid:C.holderPid,reason:C.reason,lockPath:C.lockPath})}}),k=c?.handoffFromPid;if(c!==void 0&&k!==void 0){let C=Hne({machineId:w,runnerId:o.runnerId,cwd:o.cwd,workspace:st(o)??null,linzumiUrl:o.kandanUrl,launchSource:o.launchSource,processGroupLeader:process.platform!=="win32"&&process.env.LINZUMI_RUNNER_PROCESS_GROUP_LEADER==="1",configPath:o.runnerLockConfigPath,gracefulUpdateDrain:process.platform!=="win32",handoffHolderPid:k,onTakeover:F=>{n("runner.lock_takeover",{runnerId:o.runnerId,holderRunnerId:F.holderRunnerId,holderPid:F.holderPid,reason:F.reason,lockPath:F.lockPath})}});a.actions.push(()=>C.release()),c.promoteRunnerLock=()=>C.promote(),n("runner.generation_incoming_lock_acquired",{path:C.path,machineId:o.machineId,runnerId:o.runnerId,handoffHolderPid:k,alreadyPromoted:C.promoted()});let P=F=>{try{return process.kill(F,0),!0}catch(E){return E.code==="EPERM"}},T=setInterval(()=>{if(c.currentRole()!=="incoming"){clearInterval(T);return}P(k)||(n("runner.generation_self_promote_on_peer_death",{handoffHolderPid:k}),c.handleIpcMessage({type:"generation_promote"}),clearInterval(T))},3e4);T.unref(),a.actions.push(()=>clearInterval(T))}else{let C=await B9e(v,o,n);a.actions.push(()=>C.release()),n("runner.lock_acquired",{path:C.path,machineId:o.machineId,runnerId:o.runnerId})}}let _,m=new Promise((w,v)=>{_=v}),b=bJe(o,n,a,s,d,u,r,t,c,l,i,w=>_?.(w));return await Promise.race([b,m])}catch(_){try{await s()}catch(m){let b=_ instanceof Error?_.message:String(_),w=m instanceof Error?m.message:String(m);throw Me("runner.startup_cleanup_failed",{startup_message:b,cleanup_message:w}),process.stderr.write(`Runner startup failed and teardown also failed: ${w}
1674
1674
  `),new AggregateError([_,m],`runner startup failed (${b}) and teardown failed (${w})`)}throw _}}async function yae(e){if(e.threadProcess?.role!=="thread")throw new Error("thread Codex worker requires thread process options");if(process.send===void 0)throw new Error("thread Codex worker requires an IPC channel");let n=B$(e),t=f7e(e);if(t!==void 0){n("runner.thread_worker_preflight_failed",{kandanThreadId:e.threadProcess.kandanThreadId,cwd:e.cwd,reason:t.reason,message:t.message}),process.stderr.write(`${t.message}
1675
1675
  `),n.close(),process.exitCode=1;return}let r,o,i=e,a=e.codexModelProvider;if(a!==void 0&&!Ed(e)&&process.send!==void 0){let l=e.threadProcess.kandanThreadId;try{let p=Ere(),f=await fD({upstreamBaseUrl:a.llmProxyBaseUrl,initialToken:a.llmProxyToken,log:(g,_)=>n(g,{kandanThreadId:l,..._}),dispatcher:Vi()?.dispatcher,onUpstreamUnauthorized:()=>{o?.refreshNow()}});r=f,o=mD({relay:f,mint:()=>p(f.currentToken()),log:(g,_)=>n(g,{kandanThreadId:l,..._})}),i={...e,codexModelProvider:{...a,llmProxyBaseUrl:f.baseUrl}}}catch(p){n("llm_proxy_relay.worker_start_failed_fallback_to_env_token",{kandanThreadId:l,message:p instanceof Error?p.message:String(p)}),o?.stop(),o=void 0,r?.close(),r=void 0,i=e}}let s=await Qae(i),d=await xu(s.url),u=e.threadProcess.kandanThreadId,c=fT(()=>{o?.stop(),r?.close(),d.close(),s.stop(),n.close()});Mre(d),d.onClose?.(l=>{if(n("runner.thread_codex_worker_session_closed",{kandanThreadId:u,reason:l.message}),process.send!==void 0&&process.connected!==!1)try{process.send({type:"linzumi_thread_codex_worker_session_closed",kandanThreadId:u,reason:l.message})}catch{}c()}),process.send({type:"linzumi_thread_codex_worker_ready",kandanThreadId:u,commanderManagedPorts:hKe(s)}),await P7e(s.process,{log:(l,p)=>n(l,{kandanThreadId:u,...p})}),c()}function fJe(e,n,t){let r=`${n}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linzumi/cli",
3
- "version": "1.0.250",
3
+ "version": "1.0.252",
4
4
  "description": "Linzumi CLI \u2014 point a Codex agent at the real code on your laptop, with your team watching and steering from shared threads.",
5
5
  "type": "module",
6
6
  "bin": {