@linzumi/cli 1.0.119 → 1.0.120
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/README.md +1 -1
- package/dist/index.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1473,7 +1473,7 @@ To kick the agent off:
|
|
|
1473
1473
|
`,O=Buffer.byteLength(T,"utf8");if(O>s)return l("runner_diagnostics.spool_entry_dropped",{reason:"entry_too_large",entry_bytes:O,max_entry_bytes:s}),!1;rke(n,{recursive:!0}),m(u)+O>i&&f(),_(O);let E=b()?`
|
|
1474
1474
|
`:"";return eke(u,`${E}${T}`,"utf8"),!0}catch(R){return l("runner_diagnostics.spool_failed",{error:R instanceof Error?R.message:String(R)}),!1}},v=k=>{let R=[],T=ike(k,"utf8");for(let O of T.split(`
|
|
1475
1475
|
`))if(O.trim()!=="")try{let E=JSON.parse(O);E!==null&&typeof E=="object"&&R.push({parsed:E,raw:O})}catch{}return R};return{append:S,drain:async k=>{if(c)return{uploadedBatches:0,uploadedEntries:0,remainingBatches:p().length,skipped:!0};c=!0;let R=0,T=0;try{f(),_(0);let O=a()-o;for(let E of p()){let j;try{j=v(E)}catch(H){l("runner_diagnostics.spool_batch_unreadable",{file:E,error:H instanceof Error?H.message:String(H)}),y(E,"unreadable");continue}let z=j.filter(H=>{let ce=vke(H.parsed);return ce===void 0||ce>=O});if(z.length===0){y(E,"empty_or_expired");continue}let D=TP(E,".jsonl"),U=z.map(H=>H.raw).join(`
|
|
1476
|
-
`),J=z.map(H=>H.parsed.spooled_at).filter(H=>typeof H=="string"),Z={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:D,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:D,entry_count:z.length,...J.length===0?{}:{first_spooled_at:J[0],last_spooled_at:J[J.length-1]}},telemetry_ndjson:U};try{await k(Z)}catch(H){l("runner_diagnostics.spool_upload_failed",{file:E,remaining_batches:p().length,error:H instanceof Error?H.message:String(H)});break}R+=1,T+=z.length;try{e3(E)}catch(H){l("runner_diagnostics.spool_delete_failed",{file:E,error:H instanceof Error?H.message:String(H)})}}}catch(O){l("runner_diagnostics.spool_drain_failed",{error:O instanceof Error?O.message:String(O)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var lke,pke,fke,mke,hke,n3,yke,xke,r3=F(()=>{"use strict";fx();lke=32*1024*1024,pke=10080*60*1e3,fke=4*1024*1024,mke=1024*1024,hke="spool.jsonl",n3=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;yke=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,xke=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Ut,IP,ia=F(()=>{"use strict";Ut="1.0.
|
|
1476
|
+
`),J=z.map(H=>H.parsed.spooled_at).filter(H=>typeof H=="string"),Z={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:D,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:D,entry_count:z.length,...J.length===0?{}:{first_spooled_at:J[0],last_spooled_at:J[J.length-1]}},telemetry_ndjson:U};try{await k(Z)}catch(H){l("runner_diagnostics.spool_upload_failed",{file:E,remaining_batches:p().length,error:H instanceof Error?H.message:String(H)});break}R+=1,T+=z.length;try{e3(E)}catch(H){l("runner_diagnostics.spool_delete_failed",{file:E,error:H instanceof Error?H.message:String(H)})}}}catch(O){l("runner_diagnostics.spool_drain_failed",{error:O instanceof Error?O.message:String(O)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var lke,pke,fke,mke,hke,n3,yke,xke,r3=F(()=>{"use strict";fx();lke=32*1024*1024,pke=10080*60*1e3,fke=4*1024*1024,mke=1024*1024,hke="spool.jsonl",n3=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;yke=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,xke=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Ut,IP,ia=F(()=>{"use strict";Ut="1.0.120",IP=`linzumi ${Ut}`});import{closeSync as i3,existsSync as EP,mkdirSync as Ske,openSync as s3,readFileSync as a3,renameSync as kke,unlinkSync as Cd,writeFileSync as Cke,writeSync as d3}from"node:fs";import{dirname as u3,join as Tke}from"node:path";function DP(e){return e instanceof _s||e instanceof Error&&e.name===l3&&"lockPath"in e&&"heldBy"in e}function MP(e,n=Hn(),t){let r=t===void 0?encodeURIComponent(e):yd(t);return Tke(u3(n),"runners",`${r}.lock`)}function k_(e){let n=MP(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??x3,r=e.now??(()=>new Date),o=e.killPid??zke,i=r().toISOString(),s={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:zn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??Ut,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};Eke(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Dke(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>p3(n,s,r),d=setInterval(a,c3);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),g3(n,s)}}}function p3(e,n,t){try{let r=T_(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`;Cke(i,`${JSON.stringify(o,null,2)}
|
|
1477
1477
|
`,"utf8"),kke(i,e)}catch{}}function Td(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>Pke?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function f3(e,n,t,r){return t!==C_||e.launchSource!==C_?!1:r.state!=="live"?!0:Ike(n,e.cliVersion)>0}function Ike(e,n){let t=o3(e),r=o3(n);for(let o=0;o<3;o++){let i=t.core[o],s=r.core[o];if(i===void 0||s===void 0)throw new Error(`compareCliVersions: unexpected undefined at core index ${o}`);if(i!==s)return i>s?1:-1}return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:Rke(t.prerelease,r.prerelease)}function o3(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("."),s=[RP(i[0]),RP(i[1]),RP(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function RP(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function Rke(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 s=Number.parseInt(o,10),a=Number.parseInt(i,10),d=s.toString()===o,u=a.toString()===i;if(d&&u){if(s!==a)return s>a?1:-1}else{if(d!==u)return d?-1:1;if(o!==i)return o>i?1:-1}}return 0}function m3(e,n,t,r,o){try{r(n.pid)}catch(i){let s=i!==null&&typeof i=="object"&&"code"in i?i.code:void 0;if(s!=="ESRCH")throw s==="EPERM"||s==="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 Eke(e,n,t,r,o,i,s){if(t===void 0||_r(t)!==_r(Vt))return;let a=MP(e,n),d=T_(a);if(d!==void 0){if(Td(d,r,o).state==="live")throw new _s(a,d);h3(a,r,()=>{let u=EP(a)?AP(a):void 0;if(u===void 0)return;let c=Td(u,r,o);if(c.state==="live")throw new _s(a,u);c.state==="wedged"&&m3(a,u,c.reason,i,s),Cd(a)})}}function Dke(e,n,t,r,o,i,s,a){if(S_(e,n))return;s?.();let d=T_(e);if(d===void 0){if(S_(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Td(d,t,r).state==="live")throw new _s(e,d);a?.(),h3(e,t,()=>{let u=EP(e)?AP(e):void 0;if(u!==void 0){let c=Td(u,t,r);if(c.state==="live")throw new _s(e,u);c.state==="wedged"&&m3(e,u,c.reason,o,i),Cd(e)}if(!S_(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function S_(e,n){Ske(u3(e),{recursive:!0});try{let t=s3(e,"wx");try{d3(t,`${JSON.stringify(n,null,2)}
|
|
1478
1478
|
`)}finally{i3(t)}return!0}catch(t){if(Qc(t,"EEXIST"))return!1;throw t}}function h3(e,n,t){let r=`${e}.replace`;for(;;)try{let o=s3(r,"wx");try{d3(o,`${process.pid}
|
|
1479
1479
|
`),t()}finally{i3(o),Cd(r)}return}catch(o){if(Qc(o,"EEXIST")){let i=Mke(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(`
|
|
@@ -1512,13 +1512,13 @@ ${t}`:i}).join(`
|
|
|
1512
1512
|
`);return["(version 1)","(deny default)","(allow process*)","(allow signal (target self))","(allow sysctl-read)","(allow file-read-metadata)",'(allow file-read-data (literal "/"))','(allow file-read* (literal "/dev/null"))','(allow file-read* (literal "/dev/random"))','(allow file-read* (literal "/dev/urandom"))',r,o,i].join(`
|
|
1513
1513
|
`)}function pB(){let e=0,n="",t=!1;return{append:r=>{let o=Buffer.isBuffer(r)?r.toString("utf8"):r,i=lB-e;if(i<=0){t=!0;return}let s=Buffer.from(o,"utf8");if(s.byteLength<=i){e+=s.byteLength,n+=o;return}e=lB,n+=s.subarray(0,i).toString("utf8"),t=!0},value:()=>n,truncated:()=>t}}function BPe(e){switch(e){case void 0:case"":return;case"bubblewrap":case"macos-seatbelt":return e;default:throw new Error(`unsupported remote Codex sandbox: ${e}`)}}function JPe(e,n){let t=n.LINZUMI_REMOTE_CODEX_SANDBOX_BIN;if(t===void 0||t.trim()==="")throw new Error(`LINZUMI_REMOTE_CODEX_SANDBOX_BIN is required for ${e}`);if(!xI(t))throw new Error("LINZUMI_REMOTE_CODEX_SANDBOX_BIN must be absolute");return t}function KPe(e){let t=e.split("/").filter(r=>r!=="").slice(0,-1);return t.map((r,o)=>`/${t.slice(0,o+1).join("/")}`)}function _I(e){return Array.from(new Set(e))}function VPe(e){return _I([e,$Pe(e)])}function lm(e){return JSON.stringify(e)}var lB,OPe,LPe,jPe,hB=F(()=>{"use strict";lB=512*1024,OPe=["/bin","/etc/pki","/etc/ssl","/lib","/lib64","/nix/store","/usr","/usr/local"],LPe=["/System","/Library","/etc","/private/etc","/usr","/bin","/sbin","/opt/homebrew","/nix/store"],jPe=["/tmp","/private/tmp"]});import{closeSync as bI,fsyncSync as gB,mkdirSync as yB,openSync as wI,readFileSync as WPe,renameSync as HPe,writeSync as xB}from"node:fs";import{createHash as GPe}from"node:crypto";import{dirname as vI,join as bB}from"node:path";import{homedir as ZPe}from"node:os";function wB(e){let n=4294967295;for(let t=0;t<e.length;t+=1){n^=e[t];for(let r=0;r<8;r+=1){let o=-(n&1);n=n>>>1^3988292384&o}}return((n^4294967295)>>>0).toString(16).padStart(8,"0")}function _B(e){let n=JSON.stringify(e),t=Buffer.from(n,"utf8");return`${t.length}:${wB(t)}:${n}
|
|
1514
1514
|
`}function QPe(e){let n=e.indexOf(":"),t=e.indexOf(":",n+1);if(n<=0||t<=n)return;let r=Number.parseInt(e.slice(0,n),10),o=e.slice(n+1,t),i=e.slice(t+1);if(!Number.isInteger(r)||r<=0)return;let s=Buffer.from(i,"utf8");if(s.length!==r||wB(s)!==o)return;let a;try{a=JSON.parse(i)}catch{return}if(Q(a))return XPe(a)}function XPe(e){let n=e.op,t=e.sourceSeq;if(!(typeof t!="number"||!Number.isInteger(t))){if(n==="ack")return{op:"ack",sourceSeq:t};if(n==="dead")return{op:"dead",sourceSeq:t};if(n==="attempt"){let r=e.attempts;return typeof r!="number"||!Number.isInteger(r)?void 0:{op:"attempt",sourceSeq:t,attempts:r}}if(n==="enqueue"){let r=e.kind==="replay"?"replay":"live",o=Q(e.payload)?e.payload:void 0,i=typeof e.enqueuedAtMs=="number"&&Number.isFinite(e.enqueuedAtMs)?e.enqueuedAtMs:void 0;return o===void 0||i===void 0?void 0:{op:"enqueue",sourceSeq:t,kind:r,payload:o,enqueuedAtMs:i}}}}function YPe(e){let n=new Map,t=new Map,r=new Set,o,i=!1;for(let d=0;d<e.length;d+=1){let u=e[d];if(u==="")continue;let c=QPe(u);if(c===void 0){i=!0;break}switch(c.op){case"enqueue":{if(o=o===void 0?c.sourceSeq:Math.max(o,c.sourceSeq),r.has(c.sourceSeq))break;n.set(c.sourceSeq,{sourceSeq:c.sourceSeq,kind:c.kind,payload:c.payload,enqueuedAtMs:c.enqueuedAtMs,attempts:0});break}case"ack":{let l=n.get(c.sourceSeq);l!==void 0&&t.set(c.sourceSeq,l),n.delete(c.sourceSeq),o=o===void 0?c.sourceSeq:Math.max(o,c.sourceSeq);break}case"dead":{n.delete(c.sourceSeq),t.delete(c.sourceSeq),r.add(c.sourceSeq),o=o===void 0?c.sourceSeq:Math.max(o,c.sourceSeq);break}case"attempt":{let l=n.get(c.sourceSeq);l!==void 0&&n.set(c.sourceSeq,{...l,attempts:c.attempts});break}}}let s=[...n.values()].sort((d,u)=>d.sourceSeq-u.sourceSeq),a=[...t.values()].sort((d,u)=>d.sourceSeq-u.sourceSeq);return{entries:s,ackedEntries:a,highWaterSourceSeq:o,tornTail:i}}function SB(e,n,t){return n.maxAttempts>0&&e.attempts>=n.maxAttempts||n.maxAgeMs>0&&t-e.enqueuedAtMs>=n.maxAgeMs}function SI(e,n,t={}){let r=t.fsyncFd??(p=>gB(p)),o=t.fsyncDirFd??(p=>gB(p)),i=eIe(e,n),s=new Map;for(let p of i.entries)s.set(p.sourceSeq,p);let a=new Map;for(let p of i.ackedEntries)a.set(p.sourceSeq,p);let d=i.highWaterSourceSeq,u=i.tornTail,c=p=>{try{yB(vI(e),{recursive:!0});let m=wI(e,"a");try{xB(m,_B(p),null,"utf8"),r(m)}finally{bI(m)}}catch(m){n("inbound_queue.append_failed",{path:e,op:p.op,sourceSeq:p.sourceSeq,message:m instanceof Error?m.message:String(m)})}},l=()=>{try{let p=wI(vI(e),"r");try{o(p)}finally{bI(p)}}catch{}};return{enqueue:(p,m,f,y)=>{if(d!==void 0&&p<=d)return{accepted:!1,reason:"already_seen"};let _={sourceSeq:p,kind:m,payload:f,enqueuedAtMs:y,attempts:0};return c({op:"enqueue",sourceSeq:p,kind:m,payload:f,enqueuedAtMs:y}),s.set(p,_),d=p,{accepted:!0,entry:_}},entries:()=>[...s.values()].sort((p,m)=>p.sourceSeq-m.sourceSeq),ackedEntries:()=>[...a.values()].sort((p,m)=>p.sourceSeq-m.sourceSeq),head:()=>{let p;for(let m of s.values())(p===void 0||m.sourceSeq<p.sourceSeq)&&(p=m);return p},recordAttempt:p=>{let m=s.get(p);if(m===void 0)return 0;let f=m.attempts+1;return s.set(p,{...m,attempts:f}),c({op:"attempt",sourceSeq:p,attempts:f}),f},ack:p=>{let m=s.get(p);m!==void 0&&(c({op:"ack",sourceSeq:p}),a.set(p,m),s.delete(p))},deadLetter:p=>{let m=s.get(p);if(m!==void 0)return c({op:"dead",sourceSeq:p}),s.delete(p),a.delete(p),n("inbound_queue.dead_lettered",{path:e,sourceSeq:p,attempts:m.attempts,ageMs:Date.now()-m.enqueuedAtMs}),m},highWaterSourceSeq:()=>d,tornTail:()=>u,reconciledTornTail:()=>{u=!1},compact:()=>{let p=[...s.values()].sort((m,f)=>m.sourceSeq-f.sourceSeq).flatMap(m=>{let f=[{op:"enqueue",sourceSeq:m.sourceSeq,kind:m.kind,payload:m.payload,enqueuedAtMs:m.enqueuedAtMs}];return m.attempts>0&&f.push({op:"attempt",sourceSeq:m.sourceSeq,attempts:m.attempts}),f});d!==void 0&&!s.has(d)&&p.push({op:"ack",sourceSeq:d});try{yB(vI(e),{recursive:!0});let m=`${e}.tmp`,f=wI(m,"w");try{xB(f,p.map(_B).join(""),null,"utf8"),r(f)}finally{bI(f)}HPe(m,e),l(),a.clear()}catch(m){n("inbound_queue.compact_failed",{path:e,message:m instanceof Error?m.message:String(m)})}}}}function eIe(e,n){let t;try{t=WPe(e,"utf8")}catch(o){return o?.code==="ENOENT"?{entries:[],ackedEntries:[],highWaterSourceSeq:void 0,tornTail:!1}:(n("inbound_queue.read_failed",{path:e,message:o instanceof Error?o.message:String(o)}),{entries:[],ackedEntries:[],highWaterSourceSeq:void 0,tornTail:!1})}let r=YPe(t.split(`
|
|
1515
|
-
`));return r.tornTail&&n("inbound_queue.torn_tail_detected",{path:e,liveEntries:r.entries.length,highWaterSourceSeq:r.highWaterSourceSeq??null}),r}function kI(){let e=process.env.LINZUMI_INBOUND_QUEUE_DIR?.trim();return e!==void 0&&e!==""?e:bB(ZPe(),".linzumi","inbound-queue")}function CI(e,n,t){let r=`${e}:${n}:${t}`,o=r.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),i=GPe("sha256").update(r).digest("hex").slice(0,12),s=o===""?"thread":o;return bB(kI(),`${s}.${i}.log`)}var vB,TI=F(()=>{"use strict";Mn();vB={maxAttempts:8,maxAgeMs:1800*1e3}});function ws(e,n,t){return`${e} ${n} ${t}`}function pm(e,n){return e===void 0||n>e}function U_(e,n,t){e.onAdvance(n,t),e.flush()}function kB(){let e=new Map;return{mark:(n,t)=>{let r=e.get(n);r===void 0?e.set(n,new Set([t])):r.add(t)},has:(n,t)=>e.get(n)?.has(t)??!1,clearSeq:(n,t)=>{let r=e.get(n);r!==void 0&&(r.delete(t),r.size===0&&e.delete(n))},clearThread:n=>{e.delete(n)}}}function CB(e,n,t,r){return!pm(e,r)||n.has(t,r)}function nIe(e){let n;for(let t of e)(t.status==="processed"||t.status==="failed")&&(n=n===void 0?t.sourceSeq:Math.max(n,t.sourceSeq));return n}function fm(e,n){let t=nIe(n);return e===void 0?t:t===void 0?e:Math.max(e,t)}function TB(e){if(!Array.isArray(e))return[];let n=[];for(let t of e){if(!Q(t))continue;let r=t.threadId;if(typeof r!="string")continue;let o=t.channelId,i=typeof o=="string"?o:typeof o=="number"?String(o):"",s=t.highestProcessedSourceSeq,a=t.leaseEpoch;n.push({channelId:i,threadId:r,highestProcessedSourceSeq:typeof s=="number"&&Number.isInteger(s)?s:void 0,leaseEpoch:typeof a=="number"&&Number.isInteger(a)?a:void 0})}return n}function PB(e){return e.highestProcessedSourceSeq===void 0?[]:[{sourceSeq:e.highestProcessedSourceSeq,status:"processed"}]}var PI=F(()=>{"use strict";Mn()});function B_(e){return typeof e=="number"&&Number.isInteger(e)?e:void 0}function oIe(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function RB(e){let n=new Map,t=new Map,r=(o,i)=>{let s=n.get(o),a=i.atMs===void 0?s?.newestAtMs:s?.newestAtMs===void 0?i.atMs:Math.max(s.newestAtMs,i.atMs);n.set(o,{sourceSeq:o,sawActivity:(s?.sawActivity??!1)||(i.activity??!1),lastMessageStateStatus:i.stateStatus??s?.lastMessageStateStatus,newestAtMs:a})};for(let o of e.split(`
|
|
1515
|
+
`));return r.tornTail&&n("inbound_queue.torn_tail_detected",{path:e,liveEntries:r.entries.length,highWaterSourceSeq:r.highWaterSourceSeq??null}),r}function kI(){let e=process.env.LINZUMI_INBOUND_QUEUE_DIR?.trim();return e!==void 0&&e!==""?e:bB(ZPe(),".linzumi","inbound-queue")}function CI(e,n,t){let r=`${e}:${n}:${t}`,o=r.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),i=GPe("sha256").update(r).digest("hex").slice(0,12),s=o===""?"thread":o;return bB(kI(),`${s}.${i}.log`)}var vB,TI=F(()=>{"use strict";Mn();vB={maxAttempts:8,maxAgeMs:1800*1e3}});function ws(e,n,t){return`${e} ${n} ${t}`}function pm(e,n){return e===void 0||n>e}function U_(e,n,t,r){if(r!==void 0){let o=e.initial(n);o!==void 0&&t<=o&&r("commander.invariant_violation",{invariant:"watermark_regression",thread_id:null,harness:null,detail:`watermark_key=${n} committed_source_seq=${t} durable_floor=${o}`})}e.onAdvance(n,t),e.flush()}function kB(){let e=new Map;return{mark:(n,t)=>{let r=e.get(n);r===void 0?e.set(n,new Set([t])):r.add(t)},has:(n,t)=>e.get(n)?.has(t)??!1,clearSeq:(n,t)=>{let r=e.get(n);r!==void 0&&(r.delete(t),r.size===0&&e.delete(n))},clearThread:n=>{e.delete(n)}}}function CB(e,n,t,r){return!pm(e,r)||n.has(t,r)}function nIe(e){let n;for(let t of e)(t.status==="processed"||t.status==="failed")&&(n=n===void 0?t.sourceSeq:Math.max(n,t.sourceSeq));return n}function fm(e,n){let t=nIe(n);return e===void 0?t:t===void 0?e:Math.max(e,t)}function TB(e){if(!Array.isArray(e))return[];let n=[];for(let t of e){if(!Q(t))continue;let r=t.threadId;if(typeof r!="string")continue;let o=t.channelId,i=typeof o=="string"?o:typeof o=="number"?String(o):"",s=t.highestProcessedSourceSeq,a=t.leaseEpoch;n.push({channelId:i,threadId:r,highestProcessedSourceSeq:typeof s=="number"&&Number.isInteger(s)?s:void 0,leaseEpoch:typeof a=="number"&&Number.isInteger(a)?a:void 0})}return n}function PB(e){return e.highestProcessedSourceSeq===void 0?[]:[{sourceSeq:e.highestProcessedSourceSeq,status:"processed"}]}var PI=F(()=>{"use strict";Mn()});function B_(e){return typeof e=="number"&&Number.isInteger(e)?e:void 0}function oIe(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function RB(e){let n=new Map,t=new Map,r=(o,i)=>{let s=n.get(o),a=i.atMs===void 0?s?.newestAtMs:s?.newestAtMs===void 0?i.atMs:Math.max(s.newestAtMs,i.atMs);n.set(o,{sourceSeq:o,sawActivity:(s?.sawActivity??!1)||(i.activity??!1),lastMessageStateStatus:i.stateStatus??s?.lastMessageStateStatus,newestAtMs:a})};for(let o of e.split(`
|
|
1516
1516
|
`)){if(o.trim()==="")continue;let i;try{i=JSON.parse(o)}catch{continue}if(!Q(i))continue;let s=i.t;if(s==="enqueue"||s==="pending"){let a=typeof i.kind=="string"?i.kind:void 0,d=Q(i.data)?i.data:void 0,u=oIe(i.atMs);if(a===void 0||d===void 0)continue;if(a===tIe){let c=B_(d.seq),l=typeof d.status=="string"?d.status:void 0,p=B_(i.seq);if(c===void 0||l===void 0)continue;p!==void 0&&t.set(p,c),r(c,{stateStatus:l,atMs:u})}else if(rIe.has(a)){let c=B_(d.source_seq);if(c===void 0)continue;r(c,{activity:!0,atMs:u})}continue}if(s==="coalesce"){let a=B_(i.seq),d=Q(i.data)?i.data:void 0;if(a===void 0||d===void 0)continue;let u=t.get(a),c=typeof d.status=="string"?d.status:void 0;u!==void 0&&c!==void 0&&r(u,{stateStatus:c})}}return n}function II(e,n){let t=n.maxSignalAgeMs??iIe,r=e.appliedFloorSeq,o=p=>r===void 0||p>r,i=p=>p===void 0?!0:n.nowMs-p<=t,s=[],a=new Set;for(let p of e.pendingInboundSeqs)a.add(p),o(p)&&s.push({sourceSeq:p,shape:"queued_never_run"});for(let p of e.outboxTurnSignals.values()){if(!o(p.sourceSeq)||a.has(p.sourceSeq)||!i(p.newestAtMs))continue;let m=p.lastMessageStateStatus;m!==void 0&&IB.has(m)||(p.sawActivity||m!==void 0)&&s.push({sourceSeq:p.sourceSeq,shape:"killed_mid_turn"})}for(let p of e.ackedInboundSeqs){if(!o(p)||a.has(p))continue;let m=e.outboxTurnSignals.get(p),f=m?.lastMessageStateStatus;f!==void 0&&IB.has(f)||m?.sawActivity===!0||f!==void 0||s.push({sourceSeq:p,shape:"accepted_never_framed"})}s.sort((p,m)=>p.sourceSeq-m.sourceSeq);let d=e.pendingInboundSeqs.length>0,u=s.filter(p=>p.shape!=="queued_never_run").map(p=>p.sourceSeq),c=d||s.length>0,l=!c&&e.inboundHighWaterSeq!==void 0&&o(e.inboundHighWaterSeq);return{unfinished:c,seqs:s,hasPendingInbound:d,loudTerminalSeqs:u,watermarkGapOnly:l}}async function EB(e){let n=e.nowMs??Date.now(),t=e.sleep??cIe,r=Math.max(1,e.concurrency??sIe),o=e.staggerMs??aIe,i=e.retryBackoffMs??dIe,s=e.respawnRetryBackoffMs??uIe,a=[],d=0,u=0;for(let w of e.records){let k;try{k=II(e.inspect(w),{nowMs:n,maxSignalAgeMs:e.maxSignalAgeMs})}catch(R){u+=1,e.log("runner.resume_scan_inspect_failed",{thread_id:e.threadId(w),message:R instanceof Error?R.message:String(R)});continue}k.unfinished?a.push({record:w,threadId:e.threadId(w),work:k}):k.watermarkGapOnly&&(d+=1)}e.log("runner.resume_scan",{threads_scanned:e.records.length,unfinished_found:a.length,pending_inbound_threads:a.filter(w=>w.work.hasPendingInbound).length,loud_terminal_threads:a.filter(w=>w.work.loudTerminalSeqs.length>0).length,watermark_gap_only_threads:d,inspect_failed:u,concurrency:r,stagger_ms:o});let c={threadsScanned:e.records.length,unfinishedFound:a.length,resumed:0,failed:0,abortedShutdown:!1};if(a.length===0)return c;let l=0,p=0,m=0,f=!1,y=0,_=Promise.resolve(),b=()=>{let w=_;return _=_.then(()=>o>0?t(o):void 0),w},S=async w=>{let{record:k,threadId:R,work:T}=w;e.log("runner.resume_respawn",{thread_id:R,reason:T.seqs.map(E=>E.shape).join(","),seqs:T.seqs.map(E=>E.sourceSeq),pending_inbound:T.hasPendingInbound});let O=!0;if(T.hasPendingInbound){let E=!1;for(let j=0;j<=i.length;j+=1){if(e.shuttingDown()){f=!0,y+=1;return}let z;try{z=await e.resumePendingInbound(k)}catch(U){z="retry",e.log("runner.resume_drain_attempt_failed",{thread_id:R,attempt:j+1,message:U instanceof Error?U.message:String(U)})}if(z==="clear"){E=!0;break}let D=i[j];if(D===void 0)break;e.log("runner.resume_retry_scheduled",{thread_id:R,attempt:j+1,backoff_ms:D}),await t(D)}E||(O=!1,e.log("runner.resume_failed",{thread_id:R,phase:"inbound_drain",retries:i.length}))}if(T.loudTerminalSeqs.length>0){if(e.shuttingDown()){f=!0,y+=1;return}let E=!1;for(let j=0;j<=s.length;j+=1){try{E=await e.respawnWorker(k)}catch(D){E=!1,e.log("runner.resume_respawn_attempt_failed",{thread_id:R,attempt:j+1,message:D instanceof Error?D.message:String(D)})}if(E)break;let z=s[j];if(z===void 0||e.shuttingDown())break;await t(z)}for(let j of T.loudTerminalSeqs){if(e.seqInFlight?.(k,j)===!0){e.log("runner.resume_terminal_skipped_in_flight",{thread_id:R,seq:j});continue}let z=T.seqs.find(D=>D.sourceSeq===j)?.shape??"killed_mid_turn";try{await e.publishInterruptedTurnState(k,j,z)}catch(D){O=!1,e.log("runner.resume_terminal_publish_failed",{thread_id:R,seq:j,message:D instanceof Error?D.message:String(D)})}}E||(O=!1,e.log("runner.resume_failed",{thread_id:R,phase:"respawn",retries:s.length}))}O?(p+=1,e.log("runner.resume_completed",{thread_id:R,seqs:T.seqs.map(E=>E.sourceSeq)})):m+=1},v=async()=>{for(;;){if(f||e.shuttingDown()){f=!0;return}let w=l;if(w>=a.length)return;if(l+=1,await b(),f||e.shuttingDown()){f=!0;return}let k=a[w];if(k===void 0)return;try{await S(k)}catch(R){m+=1,e.log("runner.resume_failed",{thread_id:k.threadId,phase:"unexpected",message:R instanceof Error?R.message:String(R)})}}};return await Promise.all(Array.from({length:Math.min(r,a.length)},()=>v())),f&&e.log("runner.resume_scan_aborted_shutdown",{completed:p+m,aborted_in_flight:y,remaining:a.length-(p+m)-y}),{...c,resumed:p,failed:m,abortedShutdown:f}}var IB,tIe,rIe,iIe,sIe,aIe,dIe,uIe,cIe,DB=F(()=>{"use strict";Mn();IB=new Set(["processed","failed","ignored","interrupted","stop_failed"]),tIe="pipeline.message_state",rIe=new Set(["pipeline.post_streamed_row","pipeline.stream_snapshot","pipeline.finalize_row","pipeline.post_completed_row"]);iIe=1440*60*1e3;sIe=3,aIe=750,dIe=[2e3,5e3,1e4,2e4,4e4,6e4,9e4],uIe=[2e3,1e4],cIe=e=>new Promise(n=>setTimeout(n,e))});function MB(e){let n=e?.now??Date.now,t=new Map,r=new Map,o=new Map;return{runExclusive:(s,a,d)=>{let u=t.get(s)??Promise.resolve();r.set(s,(r.get(s)??0)+1);let c=n(),l={started:!1,cancelled:!1,settled:!1},p,m,f=()=>{p!==void 0&&(clearTimeout(p),p=void 0),m!==void 0&&(clearTimeout(m),m=void 0)},y,_=u.catch(()=>{}).then(()=>{if(!l.cancelled)return l.started=!0,o.set(s,n()),p!==void 0&&(clearTimeout(p),p=void 0),d!==void 0&&d>0&&(m=setTimeout(()=>{y?.(new Dd(s,d))},d),m.unref?.()),a()}),b;d===void 0||d<=0?b=_:b=new Promise((v,w)=>{y=k=>{l.settled||(l.settled=!0,f(),w(k))},p=setTimeout(()=>{if(l.started)return;l.cancelled=!0;let k=o.get(s);y?.(new il({threadId:s,timeoutMs:d,queuedForMs:n()-c,blockedSectionAgeMs:k===void 0?void 0:n()-k}))},d),p.unref?.(),_.then(k=>{l.settled||(l.settled=!0,f(),v(k))},k=>{l.settled||(l.settled=!0,f(),w(k))})});let S=_.then(()=>{},()=>{});return t.set(s,S),S.then(()=>{l.started&&o.delete(s),f();let v=(r.get(s)??1)-1;v<=0?(r.delete(s),t.get(s)===S&&t.delete(s)):r.set(s,v)}),b},isBusy:s=>(r.get(s)??0)>0,status:s=>{let a=r.get(s)??0,d=o.get(s),u=d!==void 0;return{busy:a>0,queuedCount:Math.max(0,a-(u?1:0)),runningSectionAgeMs:u?n()-d:void 0}},activeThreadCount:()=>t.size}}var Dd,il,RI=F(()=>{"use strict";Dd=class extends Error{threadId;timeoutMs;constructor(n,t,r){super(r??`reconciler section for thread ${n} exceeded ${t}ms`),this.name="ReconcilerLockTimeoutError",this.threadId=n,this.timeoutMs=t}},il=class extends Dd{queuedForMs;blockedSectionAgeMs;constructor(n){super(n.threadId,n.timeoutMs,`reconciler section for thread ${n.threadId} never started within ${n.timeoutMs}ms (queued ${n.queuedForMs}ms behind an unsettled prior section${n.blockedSectionAgeMs===void 0?"":` running for ${n.blockedSectionAgeMs}ms`}); the section was cancelled and will not run`),this.name="ReconcilerLockQueuedTimeoutError",this.queuedForMs=n.queuedForMs,this.blockedSectionAgeMs=n.blockedSectionAgeMs}}});async function lIe(e,n,t){let r=!1,o=new Promise(a=>{setTimeout(()=>a("timeout"),n).unref?.()}),i=(async()=>(await e.stopAccepting(),await e.interruptInFlightTurns?.(),await e.checkpointCurrentTurn(),await e.flushInboundQueues(),await e.flushOutbox(),"done"))(),s=await Promise.race([i.then(()=>"done"),o]);return s==="timeout"?(r=!0,t("runner.drain_timed_out",{deadlineMs:n})):t("runner.drain_complete",{}),{drained:s==="done",timedOut:r}}function AB(e){let n=e.exit??((a,d)=>process.exit(a)),t=e.forceExit??(a=>process.exit(a)),r=e.signals??["SIGTERM","SIGINT"],o=!1,i=a=>{if(o){e.log("runner.drain_signal_ignored",{signal:a});return}o=!0,e.log("runner.drain_started",{signal:a}),lIe(e.steps,e.deadlineMs,e.log).catch(d=>(e.log("runner.drain_failed",{message:d instanceof Error?d.message:String(d)}),{drained:!1,timedOut:!1})).finally(()=>{try{n(0,a)}catch(d){e.log("runner.drain_exit_threw",{signal:a,message:d instanceof Error?d.message:String(d)});try{t(0)}catch{}}})},s=r.map(a=>{let d=()=>i(a);return process.on(a,d),{signal:a,handler:d}});return{uninstall:()=>{for(let{signal:a,handler:d}of s)process.off(a,d)},trigger:a=>i(a)}}function mm(e,n){if(e===void 0||e.trim()==="")return n;let t=Number(e.trim());return!Number.isFinite(t)||t<=0?n:Math.max(Math.floor(t),1e3)}function J_(e=process.env){return mm(e.LINZUMI_UPDATE_RESTART_DRAIN_MAX_WAIT_MS,fIe)}function $B(e=process.env,n=J_(e),t=!1){let r=t?mm(e.LINZUMI_UPDATE_RESTART_DRAIN_OVERLAP_HARD_CAP_MS,hIe):mm(e.LINZUMI_UPDATE_RESTART_DRAIN_HARD_CAP_MS,mIe);return Math.max(r,n)}function OB(e=process.env){return mm(e.LINZUMI_UPDATE_RESTART_DRAIN_ACTIVITY_IDLE_MS,EI)}function MI(e){return(e instanceof Error?e.message:String(e??"")).startsWith(LB)}function zB(e=process.env){return mm(e.LINZUMI_UPDATE_DRAIN_HELD_TURN_MAX_WAIT_MS,xIe)}function qB(e){return e.controlType!=="reconnect_thread"?{hold:!1,refuse:"not_reconnect_thread"}:e.channel===void 0||e.threadId===void 0||e.sourceSeq===void 0||e.workDescription===void 0||e.workDescription===""?{hold:!1,refuse:"missing_turn_payload"}:e.hasRegistryRecord?{hold:!0}:e.workspace===void 0||e.codexThreadId===void 0||e.cwd===void 0||e.agentProvider==="claude-code"?{hold:!1,refuse:"no_resumable_session_identity"}:{hold:!0}}function JB(e){return e.supervised&&e.platform!=="win32"}function _Ie(e){if(e.waitedMs>=e.hardCapMs)return{force:!0,cause:"absolute_cap",idleMs:e.lastActivityAtMs===void 0?void 0:Math.max(0,e.nowMs-e.lastActivityAtMs)};if(e.waitedMs<e.maxWaitMs)return{force:!1};if(e.lastActivityAtMs===void 0)return{force:!0,cause:"no_liveness_signal"};let n=e.nowMs-e.lastActivityAtMs;return n>=(e.activityIdleMs??EI)?{force:!0,cause:"silence",idleMs:n}:{force:!1}}function bIe(e){let n=e.scheduler??{setInterval:(p,m)=>setInterval(p,m),clearInterval:p=>clearInterval(p)},t=e.now??(()=>Date.now()),r=e.pollMs??gIe,o=Math.max(e.hardCapMs??e.maxWaitMs,e.maxWaitMs),i=e.waitingLogIntervalMs??yIe,s=!1,a=!1,d,u=()=>{d!==void 0&&(n.clearInterval(d),d=void 0)},c=()=>e.hooks.inFlightTurns?.()??[],l=p=>`${p.engine}:${p.threadId}:${p.turnId??""}`;return{requestDrain:p=>{if(s){e.log("runner.update_restart_drain_request_ignored",{trigger:p});return}s=!0;let m=t(),f=e.hooks.isWaitEligible?.()??!0;e.log("runner.update_restart_drain_started",{trigger:p,maxWaitMs:e.maxWaitMs,hardCapMs:o,activityIdleMs:e.activityIdleMs??EI,waitEligible:f}),e.hooks.beginDraining();let y=v=>{a=!0,u();let w=t()-m;v||e.log("runner.drain_completed",{duration_ms:w}),e.hooks.exitViaDrain({forced:v,waitedMs:w})},_=(v,w)=>{a=!0,u();let k=c();e.log("runner.drain_timeout_forced_kill",{waited_ms:v,max_wait_ms:e.maxWaitMs,hard_cap_ms:o,cause:w.cause,idle_ms:w.idleMs??null,turn_ids:k.map(T=>T.turnId??null),thread_ids:k.map(T=>T.threadId)}),e.log("runner.update_restart_drain_max_wait_forced",{maxWaitMs:e.maxWaitMs,waitedMs:v}),(async()=>await e.hooks.publishForcedKillTerminalStates?.(k))().catch(T=>{e.log("runner.drain_forced_kill_state_publish_failed",{message:T instanceof Error?T.message:String(T)})}).finally(()=>{e.hooks.exitViaDrain({forced:!0,waitedMs:v})})};if(!f||e.hooks.isQuiescent()){y(!1);return}let b=c(),S=m;e.log("runner.drain_waiting",{in_flight_turn_count:b.length,thread_ids:b.map(v=>v.threadId),waited_ms:0}),d=n.setInterval(()=>{let v=t()-m,w=c(),k=new Set(w.map(l));for(let T of b)k.has(l(T))||(e.log("runner.drain_turn_completed",{thread_id:T.threadId,turn_id:T.turnId??null,engine:T.engine,remaining:w.length,waited_ms:v}),e.hooks.onTurnCompleted?.(T));if(b=w,e.hooks.isQuiescent()){e.log("runner.update_restart_drain_quiesced",{waitedMs:v}),y(!1);return}let R=_Ie({waitedMs:v,maxWaitMs:e.maxWaitMs,hardCapMs:o,nowMs:t(),lastActivityAtMs:e.hooks.lastActivityAtMs?.(),activityIdleMs:e.activityIdleMs});if(R.force){_(v,R);return}t()-S>=i&&(S=t(),e.log("runner.drain_waiting",{in_flight_turn_count:w.length,thread_ids:w.map(T=>T.threadId),waited_ms:v,past_soft_cap:v>=e.maxWaitMs}))},r)},cancelDrain:p=>!s||a?!1:(u(),s=!1,e.log("runner.update_restart_drain_cancelled",{reason:p}),!0),stop:()=>{u()}}}function KB(e){let n=e.signals??[e.signal??pIe],t=bIe(e),r=n.map(o=>{let i=()=>t.requestDrain(o);return process.on(o,i),{signal:o,handler:i}});return{uninstall:()=>{for(let{signal:o,handler:i}of r)process.off(o,i);t.stop()},requestDrain:o=>t.requestDrain(o),cancelDrain:o=>t.cancelDrain(o)}}var pIe,fIe,mIe,hIe,EI,gIe,yIe,LB,DI,jB,xIe,FB,NB,UB,BB,VB=F(()=>{"use strict";pIe="SIGUSR2",fIe=15*6e4,mIe=120*6e4,hIe=1440*6e4,EI=2*6e4,gIe=2e3,yIe=3e4;LB="this computer is updating its Linzumi runner",DI=`${LB} to a new version - nothing was started. Retry in a few minutes once the update finishes.`;jB="queued while this computer updates its Linzumi runner - it will start automatically when the update finishes.",xIe=15*6e4,FB=3e4;NB="this computer restarted its Linzumi runner for an update",UB=`${NB} after waiting for this job past the drain timeout - the job was interrupted. Send your message again to continue.`,BB=`${NB} while this job was waiting on your approval - the approval prompt was interrupted. Send your message again and answer the approval prompt to continue.`});var uJ={};_o(uJ,{acquireSupervisorLock:()=>rJ,createSupervisor:()=>iJ,createSupervisorConsoleLogger:()=>aJ,defaultSupervisorReexecStatePath:()=>sJ,defaultSupervisorTiming:()=>oJ,hasSuperviseFlag:()=>CIe,installSupervisorSignalHandlers:()=>dJ,isSupervisedChild:()=>$I,runSuperviseLoop:()=>TIe,supervisedChildEnvKey:()=>K_,supervisorCodeFingerprint:()=>eJ,supervisorLockKey:()=>nJ,supervisorLockPath:()=>tJ,withoutSuperviseFlags:()=>YB});import{spawn as WB}from"node:child_process";import{createHash as GB}from"node:crypto";import{closeSync as wIe,mkdirSync as vIe,openSync as SIe,readFileSync as ZB,unlinkSync as HB,writeSync as kIe}from"node:fs";import{homedir as QB}from"node:os";import{dirname as XB,join as AI}from"node:path";function $I(e=process.env){return e[K_]==="1"}function YB(e){return e.filter(n=>n!=="--supervise"&&n!=="--keep-alive")}function CIe(e){return e.includes("--supervise")||e.includes("--keep-alive")}function eJ(e,n=t=>{try{return ZB(t,"utf8")}catch{return}}){let t=n(e);if(t===void 0)return;let r=AI(XB(e),"..","dist","index.js"),o=n(r),i=s=>GB("sha256").update(s).digest("hex");return`entry:${i(t)}|bundle:${o===void 0?"unreadable":i(o)}`}function nJ(e){let n=GB("sha256").update(`${e.linzumiUrl}::${e.workspace}`).digest("hex").slice(0,12),t=e.workspace.replaceAll(/[^0-9A-Za-z._-]/g,"-").slice(0,32);return t===""?n:`${t}-${n}`}function tJ(e,n=QB()){return AI(n,".linzumi","supervisor",`${nJ(e)}.lock`)}function rJ(e){let n=e.pid??process.pid,t=e.isPidAlive??(a=>{try{return process.kill(a,0),!0}catch(d){return d.code==="EPERM"}});vIe(XB(e.path),{recursive:!0});let r=`${JSON.stringify({pid:n,workspace:e.workspace,linzumiUrl:e.linzumiUrl,startedAt:new Date().toISOString()})}
|
|
1517
1517
|
`,o=()=>{let a;try{a=SIe(e.path,"wx")}catch{let d;try{let u=JSON.parse(ZB(e.path,"utf8"));d=typeof u.pid=="number"?u.pid:void 0}catch{d=void 0}if(d!==void 0&&d!==n&&t(d))return{ok:!1,holderPid:d};try{HB(e.path)}catch{}return"stale_removed"}try{kIe(a,r)}finally{wIe(a)}return{ok:!0,release:()=>{try{HB(e.path)}catch{}}}},i=o();if(i!=="stale_removed")return i;let s=o();return s==="stale_removed"?{ok:!1,holderPid:void 0}:s}function iJ(e){let n={...oJ,...e.timing},t=!1,r,o=0,i=e.initialEntryPath,s=e.initialVersion,a,d=!1,u,c,l,p=!1,m=0,f=[],y=e.generationOverlap?.enabled===!0,_=e.generationOverlap?.stillbornWindowMs??0,b=1,S,v=8,w=new Map,k=I=>{let L=(w.get(I)??0)+1;for(w.delete(I),w.set(I,L);w.size>v;){let K=w.keys().next().value;if(K===void 0)break;w.delete(K)}return L},R,T=new Promise(I=>{R=I}),O=I=>{I!==void 0&&e.scheduler.clearTimeout(I)},E=I=>{t||r!==void 0||(a!==void 0&&(i=a.entryPath,s=a.version,a=void 0),o=e.now(),r=e.spawnChild({entryPath:i,childArgs:e.childArgs,onExit:L=>pe(L),...y?{generation:{epoch:b,onMessage:L=>J(L)}}:{}}),e.log(I==="initial"?"supervisor.child_spawned":"supervisor.child_respawned",{pid:r.pid??null,version:s,entryPath:i,reason:I}))},j=()=>{let I=a;if(I===void 0||e.ownEntryPath===void 0)return!1;let L=e.readEntryBytes(e.ownEntryPath),K=e.readEntryBytes(I.entryPath);if(L===void 0||K===void 0||L===K)return!1;let oe=e.reexecAttemptStore.load();return oe!==void 0&&oe.fromVersion===e.initialVersion&&oe.targetVersion===I.version?(e.log("supervisor.self_reexec_loop_guarded",{fromVersion:e.initialVersion,targetVersion:I.version,previousAttemptAt:oe.attemptedAt}),!1):(e.reexecAttemptStore.save({fromVersion:e.initialVersion,targetVersion:I.version,spec:"stable-version-mirror",attemptedAt:new Date(e.now()).toISOString()}),e.log("supervisor.self_reexec",{fromVersion:e.initialVersion,toVersion:I.version,entryPath:I.entryPath}),t=!0,O(l),O(c),e.reexecSelf({entryPath:I.entryPath}),R(),!0)},z=I=>{if(r===void 0||d)return;d=!0;let L=process.platform==="win32"?"SIGTERM":"SIGUSR2";e.log("supervisor.child_drain_requested",{pid:r.pid??null,fromVersion:s,toVersion:I,signal:L}),r.kill(L),u=e.scheduler.setTimeout(()=>{u=void 0,e.log("supervisor.child_drain_deadline_exceeded",{pid:r?.pid??null,waitedMs:n.drainDeadlineMs,action:"keep_waiting_never_kill"})},n.drainDeadlineMs)},D=(I,L)=>{if(I?.send===void 0)return!1;try{return I.send(L)}catch{return!1}},U=()=>{if(S===void 0)return;D(S.incoming,Xc({type:"generation_pins_update",threadIds:[...S.pins]}))||e.log("supervisor.generation_pin_relay_failed",{pinCount:S.pins.size})},J=I=>{let L=jP(I);if(L!==void 0){if(L.type==="generation_ready"){ce(L.epoch);return}if(S!==void 0){if(L.type==="generation_pin_snapshot"&&L.epoch===b){S.pins=new Set(L.threadIds),e.log("supervisor.generation_pin_snapshot",{epoch:L.epoch,pinCount:S.pins.size}),U();return}L.type==="generation_pin_released"&&L.epoch===b&&S.pins.delete(L.threadId)&&(e.log("supervisor.generation_pin_released",{epoch:L.epoch,threadId:L.threadId,remaining:S.pins.size}),U())}}},Z=()=>{if(S===void 0)return;let I=S;S=void 0,O(I.stillbornTimer),O(u),u=void 0,r=I.incoming,o=e.now();let L=b;if(b=I.incomingEpoch,i=I.entryPath,s=I.version,a=void 0,w.delete(I.version),D(r,Xc({type:"generation_promote"})),e.log("supervisor.generation_handoff_complete",{fromEpoch:L,toEpoch:I.incomingEpoch,version:I.version,pid:r.pid??null}),e.ownEntryPath!==void 0){let K=e.readEntryBytes(e.ownEntryPath),oe=e.readEntryBytes(i);K!==void 0&&oe!==void 0&&K!==oe&&e.log("supervisor.generation_self_reexec_deferred",{version:I.version})}},H=(I,L={})=>{if(S===void 0)return;let K=S;S=void 0,O(K.stillbornTimer);let oe=k(K.version);e.log("supervisor.generation_stillborn",{version:K.version,epoch:K.incomingEpoch,reason:I,attempts:oe,oldChildUntouched:!K.oldExited,retryMs:n.updateCheckIntervalMs,...L}),I==="ready_timeout"&&K.incoming.kill("SIGTERM"),a=void 0,K.oldExited&&r===void 0&&!t&&(e.log("supervisor.generation_both_down_respawn",{version:s}),c=e.scheduler.setTimeout(()=>{c=void 0,E("respawn_after_exit")},n.backoffBaseMs))},ce=I=>{if(S===void 0||I!==S.incomingEpoch||S.ready)return;if(S.ready=!0,O(S.stillbornTimer),S.stillbornTimer=void 0,e.log("supervisor.generation_ready",{epoch:S.incomingEpoch,version:S.version,pid:S.incoming.pid??null}),S.oldExited||r===void 0){Z();return}if(!D(r,Xc({type:"generation_overlap_drain",incomingEpoch:S.incomingEpoch}))){e.log("supervisor.generation_overlap_unsupported_old_child",{oldPid:r.pid??null});let K=S;S=void 0,O(K.stillbornTimer),K.incoming.kill("SIGTERM"),z(K.version);return}e.log("supervisor.generation_old_drain_requested",{oldPid:r.pid??null,incomingEpoch:S.incomingEpoch}),u=e.scheduler.setTimeout(()=>{u=void 0,e.log("supervisor.child_drain_deadline_exceeded",{pid:r?.pid??null,waitedMs:n.drainDeadlineMs,action:"keep_waiting_never_kill"})},n.drainDeadlineMs)},ye=(I,L)=>{if(I!==void 0&&I===r){pe(L);return}if(S===void 0||S.incoming!==I){e.log("supervisor.generation_incoming_exit_ignored",{code:L.code,signal:L.signal}),t&&r===void 0&&S===void 0&&R();return}if(e.log("supervisor.generation_incoming_exited",{code:L.code,signal:L.signal,ready:S.ready,epoch:S.incomingEpoch}),t){S=void 0,r===void 0&&R();return}if(!S.ready){H("exited_before_ready",{code:L.code,signal:L.signal});return}let K=S;S=void 0,O(K.stillbornTimer),O(u),u=void 0,a=void 0;let oe=k(K.version);e.log("supervisor.generation_incoming_died_midoverlap",{version:K.version,epoch:K.incomingEpoch,attempts:oe,retryMs:n.updateCheckIntervalMs}),r!==void 0&&(D(r,Xc({type:"generation_overlap_abort"}))||e.log("supervisor.generation_overlap_abort_send_failed",{oldPid:r.pid??null}))},ue=(I,L)=>{if(t||S!==void 0||r===void 0)return;let K=b+1,oe=r.pid,he;he=e.spawnChild({entryPath:L,childArgs:e.childArgs,onExit:X=>ye(he,X),generation:{epoch:K,handoffFromPid:oe,onMessage:X=>J(X)}}),S={incoming:he,incomingEpoch:K,version:I,entryPath:L,ready:!1,oldExited:!1,stillbornTimer:void 0,pins:new Set},e.log("supervisor.generation_incoming_spawned",{epoch:K,version:I,pid:he.pid??null,oldPid:oe??null,stillbornWindowMs:_}),S.stillbornTimer=e.scheduler.setTimeout(()=>{S!==void 0&&(S.stillbornTimer=void 0),H("ready_timeout",{waitedMs:_})},_)},pe=I=>{let L=r;r=void 0;let K=e.now()-o;if(O(u),u=void 0,e.log("supervisor.child_exited",{pid:L?.pid??null,code:I.code,signal:I.signal,uptimeMs:K,drainRequested:d}),t){S===void 0&&R();return}if(S!==void 0){if(S.ready){e.log("supervisor.generation_old_drained",{drainMs:K,toVersion:S.version}),Z();return}S.oldExited=!0,e.log("supervisor.generation_old_exited_before_incoming_ready",{code:I.code,signal:I.signal,uptimeMs:K});return}if(d){if(d=!1,e.log("supervisor.child_drained",{fromVersion:s,toVersion:a?.version??null,drainMs:K}),j())return;E("respawn_after_update");return}for(K>=n.healthyRunMs&&(m=0),m+=1,f.push(e.now());f.length>0&&(f[0]??0)<e.now()-n.crashLoopWindowMs;)f.shift();let oe;f.length>=n.crashLoopThreshold?(oe=n.crashLoopCadenceMs,e.log("supervisor.crash_loop",{exitsInWindow:f.length,windowMs:n.crashLoopWindowMs,cadenceMs:n.crashLoopCadenceMs})):oe=Math.min(n.backoffBaseMs*2**(m-1),n.backoffCapMs),e.log("supervisor.backoff",{delayMs:oe,consecutiveCrashExits:m,exitsInWindow:f.length}),Te("child_exit"),c=e.scheduler.setTimeout(()=>{c=void 0,!j()&&E("respawn_after_exit")},oe)},Te=async I=>{if(!(t||p||a!==void 0||d)){p=!0;try{let L;try{L=await e.probeLatestVersion()}catch(oe){e.log("supervisor.update_probe_failed",{message:oe instanceof Error?oe.message:String(oe),trigger:I});return}if(t||L===void 0||!F_(L,s))return;e.log("supervisor.update_detected",{latestVersion:L,currentVersion:s,trigger:I});let K;try{K=await e.installVersion(L)}catch(oe){e.log("supervisor.update_install_failed",{latestVersion:L,currentVersion:s,message:oe instanceof Error?oe.message:String(oe)});return}if(t)return;a={version:L,entryPath:K.entryPath},r!==void 0&&!d&&(y?ue(L,K.entryPath):z(L))}finally{p=!1}}},Pe=()=>{t||(l=e.scheduler.setTimeout(()=>{l=void 0,Te("interval").finally(Pe)},n.updateCheckIntervalMs))};return{start:()=>{e.log("supervisor.started",{version:e.initialVersion,entryPath:e.initialEntryPath,updateCheckIntervalMs:n.updateCheckIntervalMs}),E("initial"),Pe()},requestStop:I=>{if(!t){if(t=!0,O(c),O(l),O(u),S!==void 0&&(O(S.stillbornTimer),S.stillbornTimer=void 0),e.log("supervisor.stopping",{hasChild:r!==void 0,hasOverlapIncoming:S!==void 0,forwardSignal:I?.forwardSignal??null}),r===void 0&&S===void 0){R();return}I?.forwardSignal!==void 0&&(r?.kill(I.forwardSignal),S?.incoming.kill(I.forwardSignal))}},done:T,childActive:()=>r!==void 0||S!==void 0}}function sJ(e=process.env){let n=e.LINZUMI_SUPERVISOR_REEXEC_STATE_FILE?.trim();return n!==void 0&&n!==""?n:AI(QB(),".linzumi","supervisor-reexec-attempt.json")}function aJ(e={}){let n=e.writeStderr??(o=>process.stderr.write(o)),t=e.audit??ge,r=e.now??(()=>new Date);return(o,i={})=>{try{n(`${JSON.stringify({ts:r().toISOString(),event:o,...i})}
|
|
1518
|
-
`)}catch{}try{t(o,i)}catch{}}}function dJ(e,n,t=process){t.once("SIGINT",()=>e.requestStop()),t.once("SIGTERM",()=>e.requestStop({forwardSignal:"SIGTERM"})),t.on("SIGHUP",()=>{n("supervisor.sighup_survived",{note:"controlling terminal lost; supervision continues headless"})})}async function TIe(e){let n=YB(e),t=tl(n,["--workspace"])??"",r=tl(n,["--linzumi-url","--api-url"])??Wt;Cg("supervisor_console");let o=aJ(),i=tJ({workspace:t,linzumiUrl:r}),s=rJ({path:i,workspace:t,linzumiUrl:r});if(!s.ok)throw new Error(`another \`linzumi connect --supervise\` is already running for ${t===""?"this identity":`workspace ${t}`}${s.holderPid===void 0?"":` (pid ${s.holderPid})`}; stop it first, or run this one without --supervise (lock: ${i})`);let d=cm({argv1:process.argv[1],cwd:process.cwd(),onEvent:(c,l)=>o(`supervisor.${c}`,l)})?.entryPath??process.argv[1];if(d===void 0||d.trim()==="")throw s.release(),new Error("connect --supervise cannot resolve its own CLI entry script (empty argv[1])");let u=iJ({childArgs:n,initialEntryPath:d,initialVersion:Ut,ownEntryPath:d,spawnChild:({entryPath:c,childArgs:l,onExit:p,generation:m})=>{let f=WB(process.execPath,[c,"connect",...l],m===void 0?{stdio:"inherit",env:{...process.env,[K_]:"1"}}:{stdio:["inherit","inherit","inherit","ipc"],env:{...process.env,[K_]:"1",[$P]:String(m.epoch),...m.handoffFromPid===void 0?{}:{[OP]:String(m.handoffFromPid)}}}),y=!1,_=b=>{y||(y=!0,p(b))};if(f.on("exit",(b,S)=>_({code:b,signal:S})),f.on("error",b=>{o("supervisor.child_spawn_error",{message:b instanceof Error?b.message:String(b)}),_({code:null,signal:null})}),m?.onMessage!==void 0){let b=m.onMessage;f.on("message",S=>b(S))}return{pid:f.pid,kill:b=>{try{f.kill(b)}catch{}},...m===void 0?{}:{send:b=>{try{return f.send(b)}catch{return!1}}}}},probeLatestVersion:()=>sI("latest"),installVersion:async c=>({entryPath:(await G7({version:c,onEvent:(p,m)=>o(`supervisor.${p}`,m)})).entryPath}),readEntryBytes:c=>eJ(c),reexecSelf:({entryPath:c})=>{s.release(),WB(process.execPath,[c,"connect","--supervise",...n],{detached:!0,stdio:"inherit",env:{...process.env}}).unref(),process.exit(0)},reexecAttemptStore:z_(sJ(process.env)),...LP(process.env)?{generationOverlap:{enabled:!0,stillbornWindowMs:v3(process.env)}}:{},log:o,scheduler:{setTimeout:(c,l)=>setTimeout(c,l),clearTimeout:c=>clearTimeout(c)},now:()=>Date.now()});dJ(u,o);try{u.start(),await u.done}finally{s.release()}}var K_,oJ,OI=F(()=>{"use strict";Di();FP();q_();aI();ia();mI();Ft();Ju();K_="LINZUMI_SUPERVISED";oJ={backoffBaseMs:1e3,backoffCapMs:6e4,crashLoopWindowMs:5*6e4,crashLoopThreshold:5,crashLoopCadenceMs:5*6e4,healthyRunMs:5*6e4,updateCheckIntervalMs:15*6e4,drainDeadlineMs:15*6e4}});function cJ(){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 lJ(e,n){return n===void 0||e===void 0?!1:n<e}function pJ(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 LI=F(()=>{"use strict"});function mJ(e){let n=e.store.initial(e.watermarkKey);return pm(n,e.sourceSeq)?(U_(e.store,e.watermarkKey,e.sourceSeq),!0):!1}async function PIe(e){let n=e.policy??vB,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=IIe(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}let r=e.queue.recordAttempt(e.sourceSeq),o=e.queue.entries().find(i=>i.sourceSeq===e.sourceSeq);o!==void 0&&SB(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 IIe(e,n){return e.entries().find(t=>t.sourceSeq===n)?.attempts??0}function V_(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 hJ(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 s=e.store.initial(e.watermarkKey);if(!pm(s,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 a=await e.dispatch(i.sourceSeq,i.payload);if(await PIe({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,sourceSeq:i.sourceSeq,threadId:e.threadId,outcome:a,log:e.log,policy:e.policy,nowMs:e.nowMs,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),r||(t=a,r=!0),a==="dispatched"&&n.push(i.sourceSeq),a==="transient_failed")break}return{dispatched:n,headOutcome:t}}async function gJ(e){e.queue.enqueue(e.sourceSeq,e.kind,e.payload,e.nowMs??Date.now());let n=e.leases.current(e.threadId);if(lJ(n,e.leaseEpoch))return e.log("resume_keystone.fenced",{threadId:e.threadId,heldLeaseEpoch:n??null,controlLeaseEpoch:e.leaseEpoch??null,sourceSeq: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),s=fm(i,t);s!==void 0&&s!==i&&(U_(e.store,e.watermarkKey,s),e.log("resume_keystone.live_miss_reconciled",{threadId:e.threadId,reconciledWatermark:s,sourceSeq:e.sourceSeq}))}let r=e.store.initial(e.watermarkKey);if(!pm(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??fJ;try{return(await e.lock.runExclusive(e.threadId,()=>hJ({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 il)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,...V_(e.queue,e.nowMs??Date.now())}),"transient_failed";if(i instanceof Dd)return e.log("resume_keystone.spawn_deadline_exceeded",{threadId:e.threadId,sourceSeq:e.sourceSeq,deadlineMs:o,...V_(e.queue,e.nowMs??Date.now())}),"transient_failed";throw i}}async function yJ(e){let n=[],t=e.serverRows??[],r=e.reconcilerDeadlineMs??fJ,o=async()=>{let i=e.store.initial(e.watermarkKey),s=fm(i,t);s!==void 0&&s!==i&&U_(e.store,e.watermarkKey,s),e.queue.tornTail()&&(t.length>0?(e.log("resume_keystone.torn_tail",{threadId:e.threadId,reconciledWatermark:s??null,recovery:"server_reconcile"}),e.queue.reconciledTornTail()):(e.log("resume_keystone.torn_tail_unrecoverable",{threadId:e.threadId,reconciledWatermark:s??null}),e.onTornTailUnrecoverable!==void 0&&await e.onTornTailUnrecoverable(e.threadId),e.queue.reconciledTornTail())),n=(await hJ({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 il)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,...V_(e.queue,e.nowMs??Date.now())}),n;if(i instanceof Dd)return e.log("resume_keystone.drain_deadline_exceeded",{threadId:e.threadId,deadlineMs:r,...V_(e.queue,e.nowMs??Date.now())}),n;throw i}return n}var fJ,xJ=F(()=>{"use strict";TI();PI();LI();RI();fJ=12e4});import{spawn as r0,spawnSync as Z_}from"node:child_process";import{createHash as $d,randomUUID as jI}from"node:crypto";import{chmodSync as bJ,closeSync as wJ,existsSync as cl,fsyncSync as vJ,lstatSync as RIe,mkdirSync as ll,mkdtempSync as EIe,openSync as SJ,readdirSync as eK,readFileSync as Od,realpathSync as pl,renameSync as eR,rmSync as rR,statSync as o0,writeFileSync as Q_}from"node:fs";import{readFile as DIe}from"node:fs/promises";import{createServer as MIe}from"node:http";import{homedir as oR,hostname as AIe,tmpdir as nK}from"node:os";import{createInterface as $Ie}from"node:readline";import{basename as iR,dirname as Ld,extname as OIe,isAbsolute as LIe,join as vt,resolve as jd}from"node:path";import{fileURLToPath as jIe}from"node:url";async function KIe(e,n){if(e.agentReplay===void 0)return;let t=await C4({...e.agentReplay,onPlaybackError:r=>{let o=T4(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}
|
|
1518
|
+
`)}catch{}try{t(o,i)}catch{}}}function dJ(e,n,t=process){t.once("SIGINT",()=>e.requestStop()),t.once("SIGTERM",()=>e.requestStop({forwardSignal:"SIGTERM"})),t.on("SIGHUP",()=>{n("supervisor.sighup_survived",{note:"controlling terminal lost; supervision continues headless"})})}async function TIe(e){let n=YB(e),t=tl(n,["--workspace"])??"",r=tl(n,["--linzumi-url","--api-url"])??Wt;Cg("supervisor_console");let o=aJ(),i=tJ({workspace:t,linzumiUrl:r}),s=rJ({path:i,workspace:t,linzumiUrl:r});if(!s.ok)throw new Error(`another \`linzumi connect --supervise\` is already running for ${t===""?"this identity":`workspace ${t}`}${s.holderPid===void 0?"":` (pid ${s.holderPid})`}; stop it first, or run this one without --supervise (lock: ${i})`);let d=cm({argv1:process.argv[1],cwd:process.cwd(),onEvent:(c,l)=>o(`supervisor.${c}`,l)})?.entryPath??process.argv[1];if(d===void 0||d.trim()==="")throw s.release(),new Error("connect --supervise cannot resolve its own CLI entry script (empty argv[1])");let u=iJ({childArgs:n,initialEntryPath:d,initialVersion:Ut,ownEntryPath:d,spawnChild:({entryPath:c,childArgs:l,onExit:p,generation:m})=>{let f=WB(process.execPath,[c,"connect",...l],m===void 0?{stdio:"inherit",env:{...process.env,[K_]:"1"}}:{stdio:["inherit","inherit","inherit","ipc"],env:{...process.env,[K_]:"1",[$P]:String(m.epoch),...m.handoffFromPid===void 0?{}:{[OP]:String(m.handoffFromPid)}}}),y=!1,_=b=>{y||(y=!0,p(b))};if(f.on("exit",(b,S)=>_({code:b,signal:S})),f.on("error",b=>{o("supervisor.child_spawn_error",{message:b instanceof Error?b.message:String(b)}),_({code:null,signal:null})}),m?.onMessage!==void 0){let b=m.onMessage;f.on("message",S=>b(S))}return{pid:f.pid,kill:b=>{try{f.kill(b)}catch{}},...m===void 0?{}:{send:b=>{try{return f.send(b)}catch{return!1}}}}},probeLatestVersion:()=>sI("latest"),installVersion:async c=>({entryPath:(await G7({version:c,onEvent:(p,m)=>o(`supervisor.${p}`,m)})).entryPath}),readEntryBytes:c=>eJ(c),reexecSelf:({entryPath:c})=>{s.release(),WB(process.execPath,[c,"connect","--supervise",...n],{detached:!0,stdio:"inherit",env:{...process.env}}).unref(),process.exit(0)},reexecAttemptStore:z_(sJ(process.env)),...LP(process.env)?{generationOverlap:{enabled:!0,stillbornWindowMs:v3(process.env)}}:{},log:o,scheduler:{setTimeout:(c,l)=>setTimeout(c,l),clearTimeout:c=>clearTimeout(c)},now:()=>Date.now()});dJ(u,o);try{u.start(),await u.done}finally{s.release()}}var K_,oJ,OI=F(()=>{"use strict";Di();FP();q_();aI();ia();mI();Ft();Ju();K_="LINZUMI_SUPERVISED";oJ={backoffBaseMs:1e3,backoffCapMs:6e4,crashLoopWindowMs:5*6e4,crashLoopThreshold:5,crashLoopCadenceMs:5*6e4,healthyRunMs:5*6e4,updateCheckIntervalMs:15*6e4,drainDeadlineMs:15*6e4}});function cJ(){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 lJ(e,n){return n===void 0||e===void 0?!1:n<e}function pJ(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 LI=F(()=>{"use strict"});function mJ(e){let n=e.store.initial(e.watermarkKey);return pm(n,e.sourceSeq)?(U_(e.store,e.watermarkKey,e.sourceSeq,e.log),!0):!1}async function PIe(e){let n=e.policy??vB,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=IIe(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}let r=e.queue.recordAttempt(e.sourceSeq),o=e.queue.entries().find(i=>i.sourceSeq===e.sourceSeq);o!==void 0&&SB(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 IIe(e,n){return e.entries().find(t=>t.sourceSeq===n)?.attempts??0}function V_(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 hJ(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 s=e.store.initial(e.watermarkKey);if(!pm(s,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 a=await e.dispatch(i.sourceSeq,i.payload);if(await PIe({queue:e.queue,store:e.store,watermarkKey:e.watermarkKey,sourceSeq:i.sourceSeq,threadId:e.threadId,outcome:a,log:e.log,policy:e.policy,nowMs:e.nowMs,onDeadLetter:e.onDeadLetter,inFlightGuard:e.inFlightGuard}),r||(t=a,r=!0),a==="dispatched"&&n.push(i.sourceSeq),a==="transient_failed")break}return{dispatched:n,headOutcome:t}}async function gJ(e){e.queue.enqueue(e.sourceSeq,e.kind,e.payload,e.nowMs??Date.now());let n=e.leases.current(e.threadId);if(lJ(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),s=fm(i,t);s!==void 0&&s!==i&&(U_(e.store,e.watermarkKey,s,e.log),e.log("resume_keystone.live_miss_reconciled",{threadId:e.threadId,reconciledWatermark:s,sourceSeq:e.sourceSeq}))}let r=e.store.initial(e.watermarkKey);if(!pm(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??fJ;try{return(await e.lock.runExclusive(e.threadId,()=>hJ({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 il)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,...V_(e.queue,e.nowMs??Date.now())}),"transient_failed";if(i instanceof Dd)return e.log("resume_keystone.spawn_deadline_exceeded",{threadId:e.threadId,sourceSeq:e.sourceSeq,deadlineMs:o,...V_(e.queue,e.nowMs??Date.now())}),"transient_failed";throw i}}async function yJ(e){let n=[],t=e.serverRows??[],r=e.reconcilerDeadlineMs??fJ,o=async()=>{let i=e.store.initial(e.watermarkKey),s=fm(i,t);s!==void 0&&s!==i&&U_(e.store,e.watermarkKey,s,e.log),e.queue.tornTail()&&(t.length>0?(e.log("resume_keystone.torn_tail",{threadId:e.threadId,reconciledWatermark:s??null,recovery:"server_reconcile"}),e.queue.reconciledTornTail()):(e.log("resume_keystone.torn_tail_unrecoverable",{threadId:e.threadId,reconciledWatermark:s??null}),e.onTornTailUnrecoverable!==void 0&&await e.onTornTailUnrecoverable(e.threadId),e.queue.reconciledTornTail())),n=(await hJ({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 il)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,...V_(e.queue,e.nowMs??Date.now())}),n;if(i instanceof Dd)return e.log("resume_keystone.drain_deadline_exceeded",{threadId:e.threadId,deadlineMs:r,...V_(e.queue,e.nowMs??Date.now())}),n;throw i}return n}var fJ,xJ=F(()=>{"use strict";TI();PI();LI();RI();fJ=12e4});import{spawn as r0,spawnSync as Z_}from"node:child_process";import{createHash as $d,randomUUID as jI}from"node:crypto";import{chmodSync as bJ,closeSync as wJ,existsSync as cl,fsyncSync as vJ,lstatSync as RIe,mkdirSync as ll,mkdtempSync as EIe,openSync as SJ,readdirSync as eK,readFileSync as Od,realpathSync as pl,renameSync as eR,rmSync as rR,statSync as o0,writeFileSync as Q_}from"node:fs";import{readFile as DIe}from"node:fs/promises";import{createServer as MIe}from"node:http";import{homedir as oR,hostname as AIe,tmpdir as nK}from"node:os";import{createInterface as $Ie}from"node:readline";import{basename as iR,dirname as Ld,extname as OIe,isAbsolute as LIe,join as vt,resolve as jd}from"node:path";import{fileURLToPath as jIe}from"node:url";async function KIe(e,n){if(e.agentReplay===void 0)return;let t=await C4({...e.agentReplay,onPlaybackError:r=>{let o=T4(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}
|
|
1519
1519
|
`)}});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 VIe(e){return{...e,CLAUDE_CODE_ENABLE_TASKS:"0"}}async function hl(e){let n=aR(e),t=URe(e),r=await KIe(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={actions:[()=>n.close(),...t===void 0?[]:[()=>t.close()]],closePromise:void 0,removeHandlers:void 0},s=()=>jRe(i),a={stopAccepting:()=>{},flushInboundQueues:()=>{},interruptInFlightTurns:()=>Promise.resolve()},d={beginDraining:()=>{},isQuiescent:()=>!0,isWaitEligible:()=>!0,inFlightTurns:()=>[],lastActivityAtMs:()=>{},publishForcedKillTerminalStates:()=>Promise.resolve(),onTurnCompleted:()=>{}},u=o.threadProcess?.role==="thread"?void 0:S3({log:(p,m)=>n(p,m)});if(u!==void 0){let p=m=>u.handleIpcMessage(m);process.on("message",p),i.actions.push(()=>{process.off("message",p)}),n("runner.generation_overlap_enabled",{epoch:u.epoch,handoffFromPid:u.handoffFromPid??null})}let c=JB({supervised:$I(process.env),platform:process.platform}),l=VRe(s,a,n,{signals:c?["SIGINT","SIGHUP"]:["SIGTERM","SIGINT","SIGHUP"]});if(i.removeHandlers=l.uninstall,process.platform!=="win32"){let p=KB({hooks:{beginDraining:()=>d.beginDraining(),isQuiescent:()=>d.isQuiescent(),isWaitEligible:()=>d.isWaitEligible(),inFlightTurns:()=>d.inFlightTurns(),lastActivityAtMs:()=>d.lastActivityAtMs(),publishForcedKillTerminalStates:m=>d.publishForcedKillTerminalStates(m),onTurnCompleted:m=>d.onTurnCompleted(m),exitViaDrain:()=>{l.triggerFastExitDrain("SIGTERM")}},maxWaitMs:J_(process.env),hardCapMs:$B(process.env,J_(process.env),u!==void 0),activityIdleMs:OB(process.env),signals:c?["SIGUSR2","SIGTERM"]:["SIGUSR2"],log:n});i.actions.push(p.uninstall),u!==void 0&&(u.requestUpdateDrain=m=>p.requestDrain(m),u.cancelUpdateDrain=m=>p.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}),c2e(),Vj({snapshotsRoot:Gp()}).then(p=>{p.removedSnapshotDirs.length>0&&n("runner.git_safety_snapshots_pruned",{removed_snapshots:p.removedSnapshotDirs.length,removed_refs:p.removedRefs.length})}).catch(p=>{n("runner.git_safety_snapshots_prune_failed",{message:p instanceof Error?p.message:String(p)})});try{if(o.machineId!==void 0){let p=o.machineId,m=()=>k_({machineId:p,runnerId:o.runnerId,cwd:o.cwd,workspace:Vr(o)??null,linzumiUrl:o.kandanUrl,launchSource:o.launchSource,configPath:o.runnerLockConfigPath,gracefulUpdateDrain:process.platform!=="win32",onTakeover:y=>{n("runner.lock_takeover",{runnerId:o.runnerId,holderRunnerId:y.holderRunnerId,holderPid:y.holderPid,reason:y.reason,lockPath:y.lockPath})}}),f=u?.handoffFromPid;if(u!==void 0&&f!==void 0){let y=y3({machineId:p,runnerId:o.runnerId,cwd:o.cwd,workspace:Vr(o)??null,linzumiUrl:o.kandanUrl,launchSource:o.launchSource,configPath:o.runnerLockConfigPath,gracefulUpdateDrain:process.platform!=="win32",handoffHolderPid:f,onTakeover:S=>{n("runner.lock_takeover",{runnerId:o.runnerId,holderRunnerId:S.holderRunnerId,holderPid:S.holderPid,reason:S.reason,lockPath:S.lockPath})}});i.actions.push(()=>y.release()),u.promoteRunnerLock=()=>y.promote(),n("runner.generation_incoming_lock_acquired",{path:y.path,machineId:o.machineId,runnerId:o.runnerId,handoffHolderPid:f,alreadyPromoted:y.promoted()});let _=S=>{try{return process.kill(S,0),!0}catch(v){return v.code==="EPERM"}},b=setInterval(()=>{if(u.currentRole()!=="incoming"){clearInterval(b);return}_(f)||(n("runner.generation_self_promote_on_peer_death",{handoffHolderPid:f}),u.handleIpcMessage({type:"generation_promote"}),clearInterval(b))},3e4);b.unref(),i.actions.push(()=>clearInterval(b))}else{let y=await WRe(m,o,n);i.actions.push(()=>y.release()),n("runner.lock_acquired",{path:y.path,machineId:o.machineId,runnerId:o.runnerId})}}return await GIe(o,n,i,s,a,d,r,t,u)}catch(p){throw await s().catch(()=>{}),p}}async function tK(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=aR(e),t=r2e(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}
|
|
1520
1520
|
`),n.close(),process.exitCode=1;return}let r=await vK(e),o=await Ff(r.url),i=e.threadProcess.kandanThreadId,s=a0(()=>{o.close(),r.stop(),n.close()});Y7(o),o.onClose?.(a=>{if(n("runner.thread_codex_worker_session_closed",{kandanThreadId:i,reason:a.message}),process.send!==void 0&&process.connected!==!1)try{process.send({type:"linzumi_thread_codex_worker_session_closed",kandanThreadId:i,reason:a.message})}catch{}s()}),process.send({type:"linzumi_thread_codex_worker_ready",kandanThreadId:i,commanderManagedPorts:i1e(r)}),await x2e(r.process),s()}function WIe(e,n,t){let r=`${n}
|
|
1521
|
-
${t}`.toLowerCase();return r.includes("not logged in")||r.includes("not authenticated")||r.includes("login required")||r.includes("please log in")?"not_logged_in":e===0?"logged_in":"probe_failed"}function qI(e,n){let t=e==="logged_in"&&n.status==="probe_failed"&&n.transient;return{status:t?e:n.status,downgradeSkipped:t}}function HIe(e,n){return e==="ENOENT"?n?{status:"binary_missing",transient:!1}:{status:"probe_failed",transient:!0}:{status:"probe_failed",transient:kP(e)}}function CJ(e,n){return new Promise(t=>{let r=[],o=[],i=!1,s,a=u=>{i||(i=!0,s!==void 0&&clearTimeout(s),t(u))},d=r0(e,["login","status"],{cwd:n,env:process.env,stdio:["ignore","pipe","pipe"]});s=setTimeout(()=>{d.kill("SIGTERM"),a({status:"probe_failed",transient:!0})},qIe),d.stdout?.on("data",u=>{r.push(u)}),d.stderr?.on("data",u=>{o.push(u)}),d.once("error",u=>{a(HIe(u.code,cl(n)))}),d.once("exit",u=>{a({status:WIe(u,Buffer.concat(r).toString("utf8"),Buffer.concat(o).toString("utf8")),transient:u===null})})})}async function GIe(e,n,t,r,o,i,s,a,d){let u=hEe(e),c={value:e.dependencyStatus},l={value:(await CJ(e.codexBin,e.cwd)).status},p={value:e.claudeCodeAuthStatus??(LJ(e).includes("claude-code")?"logged_in":"not_logged_in")};(p.value==="probe_failed"||p.value==="binary_missing")&&n("runner.claude_code_auth_startup_probe_failure",{runnerId:e.runnerId,claude_code_auth_status:p.value,probe_detail:e.claudeCodeAuthProbeDetail??null});let m=()=>LJ(e,p.value),f={value:bx()};n("runner.codex_auth_status_probed",{runnerId:e.runnerId,codex_auth_status:l.value,has_valid_openai_auth:f.value.hasValidOpenAiAuth,openai_auth_mode:f.value.authMode});let y=async()=>{let g=c.value;if(g!==void 0)try{let x=await ra({cwd:e.cwd,codexBin:e.codexBin,codeServerBin:e.codeServerBin,editorRuntime:g.editorRuntime}),C=H9(g,x);c.value=C.status,C.codexDowngradeSkipped&&n("runner.dependency_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,codex_probe_failure:x.codex.failure??null,probe_detail:x.codex.failureDetail??null}),n("runner.dependency_status_reprobed",{runnerId:e.runnerId,codex_available:C.status.codex.available,codex_available_changed:g.codex.available!==C.status.codex.available,probe_detail:x.codex.failureDetail??null})}catch(x){n("runner.dependency_status_reprobe_failed",{runnerId:e.runnerId,message:x instanceof Error?x.message:String(x)})}},_=async()=>{try{let g=await CJ(e.codexBin,e.cwd),x=l.value,C=qI(x,g);l.value=C.status;let P=f.value.hasValidOpenAiAuth;f.value=bx(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobed",{runnerId:e.runnerId,codex_auth_status:C.status,codex_auth_status_changed:x!==C.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth,has_valid_openai_auth_changed:P!==f.value.hasValidOpenAiAuth})}catch(g){let x=l.value,C=qI(x,{status:"probe_failed",transient:!0});l.value=C.status,f.value=bx(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:"probe_failed",message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth})}},b={value:MC(process.env,{cwd:e.cwd})},S={value:!1},v=async()=>{if(!(e.claudeCodeRunner!==void 0||e.agentReplay!==void 0))try{let g=await Tc({cwd:e.cwd,claudeBin:e.claudeCodeBin}),x=p.value,C=qI(x,g);p.value=C.status,C.downgradeSkipped&&n("runner.claude_code_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,probe_detail:g.detail??null}),n("runner.claude_code_auth_status_reprobed",{runnerId:e.runnerId,claude_code_auth_status:C.status,claude_code_auth_status_changed:x!==C.status,probe_detail:g.detail??null})}catch(g){n("runner.claude_code_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g)})}},w=g=>{if(S.value)return;let x=MC(process.env,{cwd:e.cwd});x!==b.value&&(b.value=x,S.value=!0,n("runner.claude_code_auth_hint_changed",{runnerId:e.runnerId,claude_code_auth_status:p.value}),v().then(()=>{g()}).finally(()=>{S.value=!1}))},k=e.allowedForwardPorts??[],R=new Set(k),T=new Set,O=nR(e.kandanUrl),E=()=>eEe(O,T),j=VJ(e)?await VEe(n):void 0;j!==void 0&&t.actions.push(()=>j.close());let z=new Map,D=(g,x)=>{z.set(g,{kandanThreadId:x.kandanThreadId??null,codexThreadId:x.codexThreadId??null,channelSlug:x.channelSlug??null,processName:x.processName??null,processIconKey:x.processIconKey??null,localEditor:x.localEditor===!0,agentProvider:x.agentProvider??null,linzumiCliManaged:x.linzumiCliManaged===!0})},U=g=>{z.delete(g)},J=(g,x={})=>{R.add(g),T.add(g),D(g,{processName:x.processName??null,processIconKey:x.processIconKey??null,agentProvider:x.agentProvider??null,linzumiCliManaged:!0})},Z=g=>{T.delete(g),U(g),k.includes(g)||R.delete(g)},H=()=>Array.from(R).sort((g,x)=>g-x).map(g=>{let x=z.get(g);return{port:g,kandanThreadId:x?.kandanThreadId??null,codexThreadId:x?.codexThreadId??null,channelSlug:x?.channelSlug??null,processName:x?.processName??null,processIconKey:x?.processIconKey??null,localEditor:x?.localEditor===!0,agentProvider:x?.agentProvider??null,linzumiCliManaged:x?.linzumiCliManaged===!0||T.has(g)}}),ce=g=>{let{advertisable:x,rejected:C}=cC(g);for(let P of C)n("runner.non_advertisable_cwd_root_dropped",{root:P.root,reason:P.reason}),dm({severity:"warning",key:`runner.non_advertisable_cwd_root:${P.root}`,message:`not advertising ${JSON.stringify(P.root)} as an allowed working-directory root (${P.reason==="home_root"?"it is your home directory":"it is a filesystem root"}). A catch-all root would let the server route any coding job to this machine. Register explicit project folders instead (connect from a project directory or pass --allowed-cwd).`});return x},ye=ce(Ht(e.allowedCwds)),ue={value:[...ye]},pe=e.remoteCodexSandboxRunner??mB({env:process.env,platform:process.platform}),Te=new Map,Pe={value:Ht(e.missingAllowedCwds??[])},I={value:!1},L={value:null},K=(g,x)=>{let C=L.value;if(g.configVersion!==null&&C!==null&&g.configVersion<C){n("runner.config_sync_stale_skipped",{source:x.source,configVersion:g.configVersion,appliedConfigVersion:C});return}let P=xU(g.allowedCwds,e.kandanUrl),$=mR(P,{createMissing:!0});I.value=I.value||K2e($.allowedCwds,[e.cwd,...ye]),ue.value=ce(Ht([...x.includeStartupAllowedCwds?ye:[],...$.allowedCwds])),Pe.value=$.missingAllowedCwds,g.configVersion!==null&&(L.value=g.configVersion),n("runner.config_updated",{source:x.source,configVersion:g.configVersion,allowedCwdCount:ue.value.length,missingAllowedCwdCount:Pe.value.length})},oe=(g,x={})=>{let C=c1e(ue.value,Pe.value);if(!C.changed)return!1;if(ue.value=C.advertised,Pe.value=C.missing,C.dropped.length>0){n("runner.stale_allowed_cwd_roots_deadvertised",{trigger:g,pruned_roots:C.dropped,advertised_root_count:C.advertised.length,...x});for(let P of C.dropped)dm({severity:"warning",key:`runner.allowed_cwd_root_missing:${P}`,message:`allowed working-directory root ${JSON.stringify(P)} no longer exists (deleted, or its disk/volume is unmounted). Not offering it for coding jobs until it is back; remount the volume or restore the folder to resume.`})}if(C.restored.length>0){n("runner.allowed_cwd_roots_readvertised",{trigger:g,restored_roots:C.restored,advertised_root_count:C.advertised.length,...x});for(let P of C.restored)dm({severity:"info",key:`runner.allowed_cwd_root_restored:${P}`,message:`allowed working-directory root ${JSON.stringify(P)} is back; offering it for coding jobs again.`})}return!0},he={value:{status:"disabled"}},X={value:0},re={watcher:void 0,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};t.actions.push(()=>{for(let g of Te.values())g.abort(new Error("local runner stopped"));Te.clear(),he.value.status==="running"&&(he.value.process.kill("SIGINT"),he.value.collaboration?.process.kill("SIGINT")),re.watcher?.close()});let De=()=>Array.from(re.pendingRequests.values()).sort((g,x)=>g.port-x.port).map(g=>{let x=Pi(g.command),C=x?.appName??mf(gr(g));return{requestId:g.requestId,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},summary:`Make ${C} on port ${g.port} accessible on Linzumi?`,reason:$y(gr(g)),...x?.appName===void 0?{}:{processName:x.appName},...x?.iconKey===void 0?{}:{processIconKey:x.iconKey}}}),se,Re,nt=()=>(Re===void 0&&(Re=(e.localVmReadinessProbe??(()=>W8({workspaceLocalVmExecutionFlag:e.vmExecution===!0})))().then(x=>(se=x,x)).catch(x=>{n("vm.local_vm_readiness_probe_failed",{error:x instanceof Error?x.message:String(x)})})),Re),Kn=()=>(nt(),se),Ot=()=>({...d===void 0?{}:{generationOverlap:!0},codexAppServer:u,codexRemoteTui:u,client_message_ids:!0,commander_pipeline:"pipeline",agentProviders:m(),modelProviders:[...dx],codexAuthStatus:l.value,claudeCodeAuthStatus:p.value,hasValidOpenaiAuth:f.value.hasValidOpenAiAuth,openaiAuthMode:f.value.authMode,waferAvailable:!0,defaultAgentProvider:"codex",startInstance:ue.value.length>0,durableClaudeSessionStore:!0,agentSlashCommandCatalog:!0,cloneRepository:!0,managedDevServices:!0,claudeCodeCheckpointRewind:!1,steerTurn:!0,appliedConfigVersion:L.value,allowedCwds:ue.value,missingAllowedCwds:Pe.value,allowedCwdSuggestions:l1e(e.cwd,ue.value),allowedCwdProjects:p1e(ue.value),onboardingSelectedFolderScan:!0,portForwarding:R.size>0,tcpForwarding:!0,linzumiMcp:!0,localVmExecution:e.vmExecution===!0,...(()=>{let g=Kn();return g===void 0?{}:{localVmReadiness:g}})(),remoteCodexExecution:pe!==void 0&&ue.value.length>0,remoteCodexExecutionStatus:pe===void 0?"sandbox_unavailable":ue.value.length>0?"ready":"cwd_unavailable",allowedPorts:Array.from(R).sort((g,x)=>g-x),forwardedPortAttributions:H(),pendingEditorForwardPortRequests:De(),toolStatus:c.value===void 0?null:CP(c.value),editorRuntime:c.value?.editorRuntime===void 0?null:CP(c.value).editorRuntime,...C9(e.editorRuntime,ue.value,he.value)}),V=()=>(oe("capabilities_payload"),Ot()),fe=UI(QIe(e.runnerId),n),Le=d===void 0?fe:C3(fe,()=>d.outgoingDrainActive());t.actions.push(()=>Le.flush());let bn=hN(e.runnerId),hn=gN(bn,g=>n("runner.cwd_stillbirth_state_write_failed",{message:g,statePath:bn}),g=>n("runner.cwd_stillbirth_state_read_failed",{message:g,statePath:bn}));if(e.threadProcess?.role!=="thread"){let g=vN(hn);g.length>0&&n("runner.cwd_stillbirth_counters_reset_on_restart",{cwds:g})}let Je=UI(XIe(e.runnerId),n,{discardSeqsOnFirstEpochAdoption:!0});t.actions.push(()=>Je.flush());let Ye=yq(gq(e.runnerId),n);if(e.threadProcess?.role!=="thread"){let g=id(e.runnerId);OF(g,n),AF({scopeDir:g,ownerPid:process.pid,log:n}).catch(C=>{n("dev_services.reconcile_failed",{message:C instanceof Error?C.message:String(C)})});let x=$F({scopeDir:g,ownerPid:process.pid,log:n});t.actions.push(()=>x.stop())}let Lt=UI(nRe(e.runnerId),n,{fsyncOnWrite:!0});t.actions.push(()=>Lt.flush());let Lr={initial:g=>Lt.initial(g),onAdvance:(g,x)=>Lt.onAdvance(g,x),flush:()=>Lt.flush()},Ho=kB(),yo=g=>{if(g.sourceSeq===void 0)return;let x=ws(tt(),g.channel,g.threadId);mJ({store:Lr,watermarkKey:x,sourceSeq:g.sourceSeq})&&n("runner.live_worker_source_seq_committed",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:g.sourceSeq}),zs.delete(Go(g.channel,g.threadId,g.sourceSeq))},q=g=>{Ho.clearSeq(ws(tt(),g.channel,g.threadId),g.sourceSeq)},ne=g=>{if(g.sourceSeq===void 0)return!1;let x=ws(tt(),g.channel,g.threadId),C=Lr.initial(x);return CB(C,Ho,x,g.sourceSeq)},ie=MB(),le=cJ(),be=new Map,Ee=new Map,an=!0,Qn=!1,Rt=!1,Xt=()=>an&&!Qn,tt=()=>Vr(e)??"default",jr=()=>e.channelSession?.channelSlug??Ye.list()[0]?.channel,jt=(g,x)=>{let C=tt(),P=`${C}:${g}:${x}`,$=be.get(P);if($!==void 0)return $;let B=SI(CI(C,g,x),n);return be.set(P,B),B},zs=new Map,Go=(g,x,C)=>`${tt()}:${g}:${x}:${C}`,ja=(g,x,C)=>{zs.set(Go(g,x,C.seq),C)},Fa=g=>{let x=jt(g.channel,g.threadId);for(let C of g.sourceSeqs){let P=Go(g.channel,g.threadId,C),$=zs.get(P);if($===void 0){n("runner.live_follow_up_recapture_missing",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C});continue}let B=x.enqueue(C,"replay",Ku($),Date.now());n("runner.live_follow_up_re_enqueued_on_close",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C,enqueued:B.accepted}),zs.delete(P)}};o.stopAccepting=()=>{an=!1},o.flushInboundQueues=()=>{for(let g of be.values())g.compact()};let eg=hRe(Le,Je,n,e),gp=Z7({initialToken:e.token,tokenExpiresAt:e.tokenExpiresAt,deps:{renew:async g=>{let x=await uU({kandanUrl:e.kandanUrl,accessToken:g});return x.kind==="renewed"?{kind:"renewed",accessToken:x.token.accessToken,expiresInSeconds:x.token.expiresInSeconds}:{kind:x.kind}},persist:e.tokenExpiresAt===void 0?void 0:({accessToken:g,expiresInSeconds:x})=>{uo({kandanUrl:e.kandanUrl,accessToken:g,expiresInSeconds:x,authFilePath:e.authFilePath})},log:n}}),ve=await Qg(e.kandanUrl,()=>gp.currentToken(),e.socketFactory,{controlCursorStore:Le,controlEpochStore:eg,onOperatorNotice:g=>dm({severity:"warning",audience:"operator",message:g})});gp.start(),t.actions.push(()=>gp.stop()),t.actions.push(()=>ve.close());let ng=fRe(n,Date.now,iK,{onReconnectNeeded:({staleForMs:g,attempt:x})=>{let C=ve.forceReconnect?.("connection_stale_forced_reconnect");return n("kandan.connection_force_reconnect_dispatched",{staleForMs:g,attempt:x,initiated:C??!1}),C??!1},onHardResetNeeded:()=>ve.hardReset?.("connection_stale_hard_reset")??!1,onUnrecoverable:({staleForMs:g})=>{console.error(`Connection to Linzumi was lost and did not recover for ${Math.round(g/6e4)} minutes; exiting so a fresh runner can reconnect. Run \`linzumi connect\` to reconnect.`),process.exit(75)}}),Ie=`local_runner:${e.runnerId}`,za=e.clientId??e.machineId??e.runnerId,yp=AIe(),xp=t3({log:n}),Ou=()=>{xp.drain(g=>ve.pushIfConnected(Ie,"diagnostics:upload",g))},xo=zN({upload:g=>ve.pushIfConnected(Ie,"diagnostics:upload",g),runnerLogFile:e.logFile??vg(),log:n,spool:xp});xo.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),Ou(),ve.onDisconnect?.(g=>{xo.recordLifecycle({event:"disconnect",atIso:new Date().toISOString(),closeCode:g.closeCode,closeReason:g.closeReason,previousSessionDurationMs:g.previousSessionDurationMs,reconnectCount:g.reconnectCount}),xo.flushNow()}),ve.onReconnect(()=>{xo.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),xo.flushNow(),Ou()}),t.actions.push(async()=>{xo.stop(),xo.flushNow()});let _p=()=>({clientName:"kandan-local-codex-runner",clientId:za,machineFingerprint:e.machineFingerprint??null,...u$(e.machineFingerprintV2),runnerPid:process.pid,version:Ut,hostname:yp,cwd:e.cwd,workspace:Vr(e)??null,channel:e.channelSession?.channelSlug??null,capabilities:V(),...d===void 0?{}:{generation:{epoch:d.epoch,overlap:!0}}}),bp=[],tg=0,N=0,ze={value:void 0};ve.onControl((g,x)=>{ng.recordServerAck();let C=ze.value;if(C===void 0){bp.push({control:g,ack:x});return}C(g,x)});let te=await ve.join(Ie,_p(),{rejoinPayload:_p});if(d!==void 0){let g=d.sendToSupervisor({type:"generation_ready",epoch:d.epoch});n("runner.generation_ready_sent",{epoch:d.epoch,delivered:g})}let Se=RJ(A(te)?.runner_config);switch(Se.type){case"missing":break;case"invalid":throw n("runner.config_join_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:Se.reason}),new Error(`invalid runner_config in Kandan join response: ${Se.reason}`);case"ok":K(Se.config,{includeStartupAllowedCwds:!1,source:"join"});break}let dn=A(A(te)?.compute_node);dn!==void 0&&n("runner.compute_node",{id:h(dn.id),name:h(dn.name),identityQuality:h(dn.identity_quality),resetGeneration:Y(dn.reset_generation)});let Fr=(g,x)=>{let C=qRe(g);C!==void 0&&n("kandan.roster_seeded",{source:x,thread_count:C.threads.length,truncated:C.truncated,skipped_entries:C.skippedEntries,threads:C.threads.map(P=>({kandan_thread_id:P.kandanThreadId,provider_session_key:P.providerSessionKey,channel_id:P.channelId,last_activity_at_ms:P.lastActivityAtMs}))})};Fr(te,"join");let rg=(g,x)=>{let C=A(g)?.fleet_breaker;if(C===void 0)return;let P=WS(C);if(P===void 0){n("runner.fleet_breaker_seed_invalid",{source:x});return}n("runner.fleet_breaker_state",{source:x,outcome:HS(P),state:P.state,fate:P.fate,version:P.version})};rg(te,"join"),ve.onReconnect(g=>{Fr(g.get(Ie),"rejoin"),rg(g.get(Ie),"rejoin");let x=RJ(g.get(Ie)?.runner_config);switch(x.type){case"missing":return;case"invalid":n("runner.config_rejoin_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:x.reason});return;case"ok":K(x.config,{includeStartupAllowedCwds:!1,source:"rejoin"});return}});let og=zRe(A(te)?.replaced_runners),zr=s===void 0&&e.codexUrl===void 0&&u?await vK(e):void 0;zr!==void 0&&t.actions.push(()=>{zr.stop()});let Et=e.codexUrl??zr?.url;if(zr!==void 0){let g=nR(zr.url);g!==void 0&&J(g,{processName:"Codex app-server",processIconKey:"codex",agentProvider:"codex"})}let Ke=`codex-${jI()}`,Ste=g=>{ve.push(Ie,"local_editor_status",g).catch(x=>{n("kandan.local_editor_status_push_failed",{message:x instanceof Error?x.message:String(x)})})},qa=(g,x)=>{ve.push(Ie,g,x).catch(C=>{n(`kandan.${g}_push_failed`,{message:C instanceof Error?C.message:String(C)})})},kte=VJ(e)?ZEe({log:n,instanceId:Ke,markCommanderManagedForwardPort:J,clearCommanderManagedForwardPort:Z,managedForwardPorts:T,capabilitiesPayload:V,pushForwardPortEvent:qa}):void 0;t.actions.push(()=>kte?.close());let Qw=(g,x)=>{let C=re.approvedTargets.get(g);re.approvedPorts.delete(g),re.approvedTargets.delete(g),R.delete(g),U(g),qa("forward_port_revoked",{instanceId:Ke,port:g,...C===void 0?{}:{pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd}},reason:x,capabilities:Ws(V(),g)})},D6=g=>{re.watcher?.close(),re.watcher=void 0,re.pendingRequests.clear(),re.queuedCandidates.clear();let x=Array.from(re.approvedPorts);for(let C of x)Qw(C,g);return re.dismissedTargets.clear(),x},ig=()=>{if(re.pendingRequests.size>0||re.queuedCandidates.size===0)return;let g=Array.from(re.queuedCandidates.values()).sort((x,C)=>x.port-C.port)[0];g!==void 0&&(re.queuedCandidates.delete(g.port),M6(g),re.pendingRequests.size===0&&ig())},Xw=g=>{let x=pc({requestId:`editor-port-forward-auto-${jI()}`,sourceSeq:0,candidate:g});re.approvedPorts.add(x.port),re.approvedTargets.set(x.port,gr(x)),R.add(x.port);let C=Pi(x.command);D(x.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:x.portKind==="commander_bound"}),qa("forward_port_resolved",{instanceId:Ke,requestId:x.requestId,source:"local_editor",port:x.port,pid:x.pid,command:x.command,...x.cwd===void 0?{}:{cwd:x.cwd},decision:"approve",capabilities:V()})},M6=g=>{let x=ff({candidate:g,threadBound:!0,suppressedPorts:new Set(E()),approvedPorts:re.approvedPorts,approvedTargets:re.approvedTargets,dismissedTargets:re.dismissedTargets,pendingRequests:Array.from(re.pendingRequests.values())});switch(x.type){case"skip":return;case"remember_approved_target":re.approvedTargets.set(x.target.port,x.target);return;case"revoke_and_prompt":Qw(x.revoked.port,x.reason),Xw(g);return;case"replace_pending":re.pendingRequests.delete(x.expired.port),qa("forward_port_resolved",{instanceId:Ke,requestId:x.expired.requestId,source:"local_editor",port:x.expired.port,pid:x.expired.pid,command:x.expired.command,...x.expired.cwd===void 0?{}:{cwd:x.expired.cwd},decision:"expired",reason:x.reason,capabilities:V()}),Xw(x.candidate);return;case"prompt":Xw(g);return}},Cte=g=>{let x=re.queuedCandidates.get(g.port);if(x!==void 0&&Br(x,g)){re.queuedCandidates.delete(g.port);return}let C=re.pendingRequests.get(g.port);if(C!==void 0&&Br(gr(C),g)){re.pendingRequests.delete(g.port),qa("forward_port_revoked",{instanceId:Ke,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},reason:"listener_exited",capabilities:Ws(V(),g.port)}),ig();return}re.approvedPorts.has(g.port)&&Qw(g.port,"listener_exited")},Tte=g=>{let x=Array.from(re.pendingRequests.values()).find(P=>P.requestId===g.requestId);if(x===void 0)return;if(re.pendingRequests.delete(x.port),g.decision==="deny")return re.dismissedTargets.set(x.port,gr(x)),qa("forward_port_resolved",{instanceId:Ke,requestId:x.requestId,source:"local_editor",port:x.port,pid:x.pid,command:x.command,...x.cwd===void 0?{}:{cwd:x.cwd},decision:"deny",capabilities:V()}),ig(),{instanceId:Ke,ok:!0};re.approvedPorts.add(x.port),re.approvedTargets.set(x.port,gr(x)),R.add(x.port);let C=Pi(x.command);return D(x.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:x.portKind==="commander_bound"}),qa("forward_port_resolved",{instanceId:Ke,requestId:x.requestId,source:"local_editor",port:x.port,pid:x.pid,command:x.command,...x.cwd===void 0?{}:{cwd:x.cwd},decision:"approve",capabilities:V()}),ig(),{instanceId:Ke,ok:!0,port:x.port}},Pte=g=>{if(g.process.pid===void 0){n("port_forward.local_editor_watch_skipped",{reason:"editor_pid_missing"});return}re.watcher?.close(),re.watcher=lc({rootPid:g.process.pid,onCandidate:M6,onCandidateLost:Cte,onError:x=>{n("port_forward.local_editor_watch_failed",{message:x.message})}})},Yw=g=>{if(g.pendingRequests.size>0||g.queuedCandidates.size===0)return;let x=Array.from(g.queuedCandidates.values()).sort((C,P)=>C.port-P.port)[0];x!==void 0&&(g.queuedCandidates.delete(x.port),A6(g,x).catch(C=>{n("port_forward.claude_code_prompt_failed",{message:C instanceof Error?C.message:String(C)})}))},sg=async(g,x,C,P="wait_for_connection")=>{let $=g.approvedTargets.get(x);g.approvedPorts.delete(x),g.approvedTargets.delete(x),R.delete(x),U(x),await(P==="connected_only"?ve.pushIfConnected:ve.push)(Ie,"forward_port_revoked",{instanceId:Ke,port:x,...$===void 0?{}:{pid:$.pid,command:$.command,...$.cwd===void 0?{}:{cwd:$.cwd}},reason:C,agentProvider:"claude-code",capabilities:Ws(V(),x)})},ev=async(g,x)=>{let C=g.currentSourceSeq()??g.rootSeq;if(C===void 0){n("port_forward.claude_code_auto_approval_skipped",{reason:"source_seq_missing",port:x.port,pid:x.pid});return}let P=pc({requestId:`claude-port-forward-auto-${jI()}`,sourceSeq:C,candidate:x});g.approvedPorts.add(P.port),g.approvedTargets.set(P.port,gr(P)),R.add(P.port);let $=Pi(P.command);D(P.port,{kandanThreadId:g.threadId,codexThreadId:g.sessionId,channelSlug:g.channel,processName:$?.appName??null,processIconKey:$?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:P.portKind==="commander_bound"}),await ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:P.requestId,port:P.port,pid:P.pid,command:P.command,...P.cwd===void 0?{}:{cwd:P.cwd},sourceSeq:P.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:V()})},A6=async(g,x)=>{let C=ff({candidate:x,threadBound:!0,suppressedPorts:new Set(E()),approvedPorts:g.approvedPorts,approvedTargets:g.approvedTargets,dismissedTargets:g.dismissedTargets,pendingRequests:Array.from(g.pendingRequests.values())});switch(C.type){case"skip":return;case"remember_approved_target":g.approvedTargets.set(C.target.port,C.target);return;case"revoke_and_prompt":await sg(g,C.revoked.port,C.reason),await ev(g,x);return;case"replace_pending":g.pendingRequests.delete(C.expired.requestId),await ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:C.expired.requestId,port:C.expired.port,pid:C.expired.pid,command:C.expired.command,...C.expired.cwd===void 0?{}:{cwd:C.expired.cwd},sourceSeq:C.expired.sourceSeq,decision:"expired",reason:C.reason,agentProvider:"claude-code",capabilities:V()}),await si(ve,Ie,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:C.expired.sourceSeq,status:"failed",reason:"port_forward_listener_changed",sessionId:g.sessionId}),await ev(g,C.candidate);return;case"prompt":await ev(g,x);return}},Ite=(g,x)=>{let C=g.queuedCandidates.get(x.port);if(C!==void 0&&Br(C,x)){g.queuedCandidates.delete(x.port),g.approvedPorts.has(x.port)&&sg(g,x.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})});return}let P=Array.from(g.pendingRequests.values()).find($=>Br(gr($),x));if(P!==void 0){g.pendingRequests.delete(P.requestId),ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:P.requestId,port:P.port,pid:P.pid,command:P.command,...P.cwd===void 0?{}:{cwd:P.cwd},sourceSeq:P.sourceSeq,decision:"expired",reason:"listener_exited",agentProvider:"claude-code",capabilities:V()}).then(()=>si(ve,Ie,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:P.sourceSeq,status:"failed",reason:"port_forward_listener_exited",sessionId:g.sessionId})).then(()=>Yw(g)).catch($=>{n("port_forward.claude_code_expire_failed",{message:$ instanceof Error?$.message:String($)})});return}g.approvedPorts.has(x.port)&&sg(g,x.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})})},Rte=g=>{for(let x of zu.values()){let C=x.pendingRequests.get(g.requestId);if(C===void 0)continue;if(x.pendingRequests.delete(g.requestId),g.decision==="deny")return x.dismissedTargets.set(C.port,gr(C)),Promise.all([ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"deny",agentProvider:"claude-code",capabilities:V()}),si(ve,Ie,{workspace:x.workspace,channel:x.channel,threadId:x.threadId,sourceSeq:C.sourceSeq,status:"failed",reason:"port_forward_denied",sessionId:x.sessionId})]).then(()=>Yw(x)).catch($=>{n("port_forward.claude_code_deny_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ke,ok:!0,agentProvider:"claude-code"};x.approvedPorts.add(C.port),x.approvedTargets.set(C.port,gr(C)),R.add(C.port);let P=Pi(C.command);return D(C.port,{kandanThreadId:x.threadId,codexThreadId:x.sessionId,channelSlug:x.channel,processName:P?.appName??null,processIconKey:P?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:C.portKind==="commander_bound"}),Promise.all([ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:V()}),si(ve,Ie,{workspace:x.workspace,channel:x.channel,threadId:x.threadId,sourceSeq:C.sourceSeq,status:"processed",reason:"Claude Code preview port approved",sessionId:x.sessionId})]).then(()=>Yw(x)).catch($=>{n("port_forward.claude_code_approve_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ke,ok:!0,agentProvider:"claude-code",port:C.port}}},nv=g=>{if(zu.has(g.sessionId))return;let x=e.portForwardWatcher??(B=>lc({rootPid:process.pid,commanderBoundPids:[process.pid],commanderBoundPorts:Array.from(T),watchPorts:k,extraWatchPorts:Dy(id(e.runnerId)),...B})),C={value:void 0},P;try{P=x({onCandidate:B=>C.value===void 0?void 0:A6(C.value,B),onCandidateLost:B=>C.value===void 0?void 0:Ite(C.value,B),onListenersObserved:B=>yg(`claude-session:${g.sessionId}`,B.filter(ke=>ke.portKind!=="commander_bound")),onError:B=>{n("port_forward.claude_code_watch_failed",{message:B.message,claude_session_id:g.sessionId})}})}catch(B){n("port_forward.claude_code_watch_skipped",{reason:"watch_start_failed",message:B instanceof Error?B.message:String(B),claude_session_id:g.sessionId});return}n("port_forward.claude_code_watch_started",{claude_session_id:g.sessionId,root_pid:e.portForwardWatcher===void 0?process.pid:null,injected:e.portForwardWatcher!==void 0});let $={...g,watcher:P,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};C.value=$,zu.set(g.sessionId,$)},ag=async(g,x="wait_for_connection")=>{let C=zu.get(g);if(C===void 0)return;let P=Array.from(C.pendingRequests.values()),$=Array.from(C.approvedPorts);C.watcher.close(),C.pendingRequests.clear(),C.queuedCandidates.clear(),C.dismissedTargets.clear(),zu.delete(g),await Promise.all([...P.map(async B=>{try{let ke=x==="connected_only"?ve.pushIfConnected:ve.push;await Promise.all([ke(Ie,"forward_port_resolved",{instanceId:Ke,requestId:B.requestId,port:B.port,pid:B.pid,command:B.command,...B.cwd===void 0?{}:{cwd:B.cwd},sourceSeq:B.sourceSeq,decision:"expired",reason:"session_ended",agentProvider:"claude-code",capabilities:V()}),si(ve,Ie,{workspace:C.workspace,channel:C.channel,threadId:C.threadId,sourceSeq:B.sourceSeq,status:"failed",reason:"port_forward_session_ended",sessionId:C.sessionId,publishMode:x})])}catch(ke){n("port_forward.claude_code_dispose_prompt_failed",{message:ke instanceof Error?ke.message:String(ke)})}}),...$.map(async B=>{try{await sg(C,B,"session_ended",x)}catch(ke){n("port_forward.claude_code_dispose_revoke_failed",{message:ke instanceof Error?ke.message:String(ke)})}})])},Ete=(g,x,C)=>{let P=()=>{if(X.value!==x||he.value.status!=="running"||he.value.process!==g.process)return;he.value={status:"disabled"};let B=D6("editor_exited");R.delete(g.port),T.delete(g.port),g.collaboration!==void 0&&(R.delete(g.collaboration.serverPort),T.delete(g.collaboration.serverPort)),Ste({instanceId:Ke,ok:!0,cwd:g.cwd,capabilities:{...V(),revokedPorts:g.collaboration===void 0?[g.port,...B]:[g.port,g.collaboration.serverPort,...B]}})},$=()=>{C.then(P).catch(B=>{n("kandan.local_editor_initial_status_failed",{message:B instanceof Error?B.message:String(B)})})};g.exited.then($)},Yt=s?.codex??(Et===void 0?void 0:await Ff(Et));if(Yt!==void 0&&t.actions.push(()=>Yt.close()),e.channelSession!==void 0&&Yt===void 0)throw new Error("channel session requires a Codex app-server connection");let $6=IRe({codexUrl:e.codexUrl,threadProcessRole:e.threadProcess?.role,ownsStartedAppServer:zr!==void 0}),tv={value:0},O6={value:[]},Lu=Sm(e),Dte={instanceId:Ke,clientId:za,...Et===void 0?{}:{codexUrl:Et},tuiLaunched:e.launchTui,cwd:e.cwd,hostname:yp,codexThreads:O6.value,workspace:Vr(e)??null,channel:e.channelSession?.channelSlug??null,model:Lu.model??null,reasoningEffort:Lu.reasoningEffort??null,allowPortForwardingByDefault:Lu.allowPortForwardingByDefault??null,fast:e.fast??!1};await ve.push(Ie,"instance_started",Dte),n("runner.instance_started",{runnerId:e.runnerId,hostname:yp,workspace:Vr(e)??null,version:Ut,instanceId:Ke,codexUrl:Et??null,replacedRunners:og});let L6=Vr(e),j6={...L6===void 0?{}:{workspace:L6},launch_source:e.launchSource??"cli"};rl({name:"commander.connected",attributes:j6},{apiUrl:e.kandanUrl}),t.actions.push(()=>rl({name:"commander.exited",attributes:j6},{apiUrl:e.kandanUrl}));let er=e.channelSession===void 0||Yt===void 0?void 0:await vf({kandan:ve,codex:Yt,topic:Ie,instanceId:Ke,leaseEpochFor:g=>le.current(g),escalateEngineHalt:zr===void 0?void 0:()=>{zr.stop()},options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:e.cwd,codexBin:e.codexBin,fetch:e.fetch,fast:e.fast,launchTui:e.launchTui,pipelinePersistDir:hm(),enablePortForwardWatch:!0,initialForwardPorts:k,portForwardWatcher:KJ({rootPid:zr?.process.pid,start:e.portForwardWatcher}),suppressedForwardPorts:E,onForwardPortApproved:(g,x)=>(R.add(g),D(g,{...x,agentProvider:"codex"}),V()),onForwardPortRevoked:g=>(R.delete(g),U(g),V()),onUnroutedThreadMessage:g=>K6(g),onLiveSourceSeqAccepted:yo,onLiveSourceSeqSettled:q,channelSession:e.channelSession},log:n});er!==void 0&&(t.actions.push(()=>er.close()),ve.onReconnect(()=>er.handleKandanReconnect()));let nr=new Map,wp=new Map,Na=new Map,Mte=(g,x)=>{let C=Na.get(g);if(C!==void 0){Na.delete(g);for(let P of C)P.resolve(x)}},dg=(g,x)=>{let C=Na.get(g);if(C!==void 0){Na.delete(g);for(let P of C)P.reject(x)}},is=Cq(),Ate=new Set(["kandan.reconnect_thread_resume_failed","kandan.reconnect_thread_rehydrate_forced","kandan.reconnect_thread_rehydration_ir_emitted","kandan.reconnect_thread_rehydration_failed","kandan.reconnect_thread_rehydrated","kandan.reconnect_thread_unarchive_started","kandan.reconnect_thread_unarchive_resumed","kandan.reconnect_thread_unarchive_failed"]),$te=(g,x)=>{if(!Ate.has(g))return;let C=x.codex_thread_id;typeof C=="string"&&C!==""&&is.note(C,g)},Ote=g=>()=>Tq(zC(),g),rv=Object.assign((g,x)=>{$te(g,x),n(g,x)},{close:()=>n.close()}),ov=g=>Pq({method:"thread/attach",codexThreadId:g.codexThreadId,kandanThreadId:g.kandanThreadId,wait:g.wait,tracker:is,log:n,rolloutBytes:Ote(g.codexThreadId),noProgressTimeoutMs:Ky()}),ss=new Map,ju=new Map,F6=[],iv=g=>{let x=ju.get(g);if(x!==void 0)return x;let C=$Re({sessions:()=>[...g===Yt&&er!==void 0?[er]:[],...Array.from(nr.entries()).filter(([P])=>ss.get(P)===g).map(([,P])=>P)],log:n,onActiveThreadsFailed:$6?P=>{for(let $ of P)F6.push(ve.push(Ie,"session:app_server_lost",{codex_thread_id:$}).then(()=>{},B=>{n("kandan.session_app_server_lost_push_failed",{codex_thread_id:$,message:B instanceof Error?B.message:String(B)})}))}:void 0});return ju.set(g,C),C},qr=new Map,sv=new Map,z6={record:(g,x)=>{let C=sv.get(g),P={approvalPolicy:x.approvalPolicy??C?.approvalPolicy,sandbox:x.sandbox??C?.sandbox};P.approvalPolicy===void 0&&P.sandbox===void 0||sv.set(g,P)},resolve:g=>sv.get(g)},vp=new Map,Fu=new Map,zu=new Map;ve.onReconnect(()=>QRe(nr.values())),ve.onDisconnect?.(()=>{for(let g of qr.values())g.pauseOutbox()}),ve.onReconnect(()=>{for(let[g,x]of qr)n("claude_code.outbox_resumed_on_reconnect",{claude_session_id:g,linzumi_thread_id:x.threadId}),x.resumeOutbox()}),o.interruptInFlightTurns=async()=>{let g=[...qr.entries()].flatMap(([C,P])=>{let $=P.currentSourceSeq();return $===void 0?[]:[{sessionId:C,session:P,sourceSeq:$}]});if(g.length===0)return;let x=new Promise(C=>{setTimeout(C,KRe).unref?.()});await Promise.race([Promise.all(g.map(async({sessionId:C,session:P,sourceSeq:$})=>{n("runner.drain_turn_interrupted_state",{claude_session_id:C,linzumi_thread_id:P.threadId,source_seq:$});try{await si(ve,Ie,{workspace:P.workspace,channel:P.channel,threadId:P.threadId,sourceSeq:$,status:"interrupted",reason:JRe,sessionId:C})}catch(B){n("runner.drain_turn_interrupted_state_push_failed",{linzumi_thread_id:P.threadId,source_seq:$,message:B instanceof Error?B.message:String(B)})}})).then(()=>{}),x])};let q6=async()=>{let g=_q(Ye.list(),Date.now());if(g.length!==0)try{await ve.push(Ie,"session:reannounce_threads",{threads:g.map(x=>({...x}))}),n("kandan.thread_sessions_reannounced",{count:g.length})}catch(x){n("kandan.thread_sessions_reannounce_failed",{count:g.length,message:x instanceof Error?x.message:String(x)})}};ve.onReconnect(()=>q6()),q6(),t.actions.push(async()=>{await Promise.all(Array.from(nr.values(),x=>x.close())),nr.clear(),ss.clear(),Na.clear();let g=[...qr.values()];for(let x of g)try{x.closeInput()}catch(C){n("claude_code.session_input_close_failed",{linzumi_thread_id:x.threadId,message:C instanceof Error?C.message:String(C)})}await Promise.race([Promise.allSettled(g.flatMap(x=>{let C=x.sessionWork();return C===void 0?[]:[C]})),new Promise(x=>{setTimeout(x,1e4).unref?.()})]);for(let x of g)x.abortController.abort(new Error("local runner stopped"));qr.clear();for(let x of vp.values())x.resolve({type:"deny",message:"Claude Code approval cancelled because the runner stopped"});vp.clear();for(let x of Fu.values())x.resolve({type:"deny",message:"Claude Code question cancelled because the runner stopped"});Fu.clear(),await Promise.all(Array.from(zu.keys(),x=>ag(x,"connected_only")))});let gt=new Map;t.actions.push(async()=>{await Promise.all(Array.from(gt.values(),XI)),gt.clear()});let Lte=()=>{for(let[g,x]of Array.from(gt.entries()))W_(x)==="dead"&>.get(g)===x&&(gt.delete(g),n("runner.thread_process_stale_entry_reaped",{kandanThreadId:g,pid:x.kind==="running"?x.handle.processPid??null:null,prior_kind:x.kind}),XI(x).catch(()=>{}))};if(ym(e)){let g=e.threadRunnerReaperIntervalMs??zIe,x=setInterval(Lte,g);x.unref?.(),t.actions.push(()=>clearInterval(x))}let av=new Map,jte=D7(),dv=async(g,x)=>{let C=nr.get(g),P=ss.get(g);if(C===void 0||x!==void 0&&P!==x||P?.isClosed?.()!==!0)return!1;nr.delete(g),ss.delete(g),wp.delete(g),n("runner.thread_session_evicted_dead_worker",{codex_thread_id:g,kandan_thread_id:C.currentKandanThreadId()??null});try{await C.close()}catch($){n("runner.thread_session_evict_close_failed",{codex_thread_id:g,message:$ instanceof Error?$.message:String($)})}return!0},uv=async(g,x={})=>{let C=nr.get(g);if(C!==void 0)return C;let P=wp.get(g);if(P!==void 0){let B=await P;if(B!==void 0)return B}let $=nr.get(g);return $!==void 0||x.waitForSiblingSpawn!==!0?$:await new Promise((B,ke)=>{let tn=Na.get(g)??[];tn.push({resolve:B,reject:ke}),Na.set(g,tn)})},N6=async g=>{let{control:x,cwd:C,codexThreadId:P,sessionCodex:$}=g,B=g.portForwardWatcherRootPid,ke=fn(x,"workspace"),tn=fn(x,"channel"),nn=fn(x,"threadId");if(ke===void 0||tn===void 0||nn===void 0)return;let Cn=nr.get(P);if(Cn!==void 0){let rt=Cn.currentKandanThreadId();if(rt!==void 0&&rt!==nn)throw new cd({codexThreadId:P,ownerKandanThreadId:rt,requestingKandanThreadId:nn});if(!await dv(P))return Cn}let pr=Ye.list().find(rt=>rt.codexThreadId===P&&rt.kandanThreadId!==nn);if(pr!==void 0)throw new cd({codexThreadId:P,ownerKandanThreadId:pr.kandanThreadId,requestingKandanThreadId:nn});let Dn=wp.get(P);if(Dn!==void 0)return await Dn;let _i=(async()=>{is.note(P,"attach_started");let rt=e.channelSession?.listenUser??wo(e.token).actorUsername;if(rt===void 0)throw new Error("missing listen user for Commander-started Codex session");let jn=ml(e,x),tr=ym(e)?async qe=>jte.run(qe.kandanThreadId,async()=>{await dv(qe.codexThreadId);let $n=!1,ot=av.get(qe.kandanThreadId)??(x.modelProvider!==void 0||x.llmProxy!==void 0||x.linzumiAgent!==void 0?{...x.modelProvider===void 0?{}:{modelProvider:x.modelProvider},...x.llmProxy===void 0?{}:{llmProxy:x.llmProxy},...x.linzumiAgent===void 0?{}:{linzumiAgent:x.linzumiAgent}}:void 0),Zo=Y(x.rootSeq);for(let yt of qe.pendingMessages){let qu={type:"reconnect_thread",workspace:ke,channel:tn,threadId:qe.kandanThreadId,codexThreadId:qe.codexThreadId,cwd:C,...x.linzumiContext===void 0?{}:{linzumiContext:x.linzumiContext},...x.type==="reconnect_thread"&&x.sessionRehydrate===!0?{sessionRehydrate:!0}:{},...Zo===void 0?{}:{rootSeq:Zo},...ot?.modelProvider===void 0?{}:{modelProvider:ot.modelProvider},...ot?.llmProxy===void 0?{}:{llmProxy:ot.llmProxy},...ot?.linzumiAgent===void 0?{}:{linzumiAgent:ot.linzumiAgent},sourceSeq:yt.seq,workDescription:yt.body,...jn.model===void 0?{}:{model:jn.model},...jn.reasoningEffort===void 0?{}:{reasoningEffort:jn.reasoningEffort},...jn.sandbox===void 0?{}:{sandbox:jn.sandbox},...jn.approvalPolicy===void 0?{}:{approvalPolicy:jn.approvalPolicy},...jn.fast===void 0?{}:{fast:jn.fast}},o$=async Ja=>{let i$=await ov({codexThreadId:qe.codexThreadId,kandanThreadId:qe.kandanThreadId,wait:uv(qe.codexThreadId,{waitForSiblingSpawn:Ja.waitForSiblingSpawn})});if(i$===void 0)throw new Error(`dead-worker rebuild could not resolve a live session for codex thread ${qe.codexThreadId}`);await i$.startThreadMessageTurn({seq:yt.seq,body:yt.body,actorSlug:yt.actorSlug,actorUserId:yt.actorUserId,boundStartTimeout:!0})};try{if($n)await o$({waitForSiblingSpawn:!1});else{let Ja=await lv(qu,C);BI(Ja)&&(n("runner.thread_dead_worker_rebuild_replay_on_sibling",{codex_thread_id:qe.codexThreadId,kandan_thread_id:qe.kandanThreadId,seq:yt.seq}),await o$({waitForSiblingSpawn:!0}))}$n=!0}catch(Ja){return n("runner.thread_dead_worker_rebuild_failed",{codex_thread_id:qe.codexThreadId,kandan_thread_id:qe.kandanThreadId,seq:yt.seq,message:Ja instanceof Error?Ja.message:String(Ja)}),!1}}return $n}):void 0,Fn=ef()&&m().includes("claude-code")?{targetHarness:"claude_code",execute:async qe=>{let $n;try{$n=await import(new URL("./crossHarnessFailover.mjs",import.meta.url).href)}catch(yt){return{ok:!1,failure:`failover transpiler bridge unavailable: ${yt instanceof Error?yt.message:String(yt)}`}}let ot=await $n.transpileAndSeedClaudeSession({activity:qe.activity,codexThreadId:qe.codexThreadId??"unknown-codex-session",kandanThreadId:qe.kandanThreadId,cwd:C});if(!ot.ok)return{ok:!1,failure:ot.failure};n("runner.cross_harness_failover_seeded",{kandan_thread_id:qe.kandanThreadId,source_session_id:qe.codexThreadId??null,target_session_id:ot.targetSessionId,session_file:ot.sessionFile,transpiled_item_count:ot.transpiledItemCount,redacted_reasoning_count:ot.redactedReasoningCount});let Zo={type:"reconnect_thread",agentProvider:"claude-code",workspace:ke,channel:tn,threadId:qe.kandanThreadId,codexThreadId:ot.targetSessionId,cwd:C,sourceSeq:qe.message.seq,workDescription:qe.message.body,...qe.model===void 0?{}:{model:qe.model}};try{let yt=await KI(void 0,ve,Ie,Ke,e,m(),ue,pe,Te,qr,vp,Fu,nv,ag,Zo,rv,a,void 0,void 0,void 0,qu=>le.current(qu),yo,ja,Fa,void 0,Z6,z6);if(yt.ok===!1)return{ok:!1,failure:`claude dispatch refused: ${JSON.stringify(yt).slice(0,300)}`}}catch(yt){return{ok:!1,failure:`claude dispatch failed: ${yt instanceof Error?yt.message:String(yt)}`}}return{ok:!0,transpiledItemCount:ot.transpiledItemCount,redactedReasoningCount:ot.redactedReasoningCount,targetSessionId:ot.targetSessionId}}}:void 0,fr=x.linzumiAgent?.mcpToken??e.linzumiAgentMcpToken,bi=Y_(x),mr=bi.type==="provider"?bi.runtime:void 0,as=yEe({env:process.env,kandanUrl:e.kandanUrl,workspaceSlug:ke,linzumiAgentMcpToken:fr,ownerUsername:s0(e),modelProviderRuntime:mr}),Ba=await vf({kandan:ve,codex:$,topic:Ie,instanceId:Ke,leaseEpochFor:qe=>le.current(qe),options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:C,codexBin:e.codexBin,mcpAvailable:!ca(e)||lR(e),devServicesAvailable:!ca(e),fetch:e.fetch,fast:x.fast??e.fast,launchTui:!1,rebuildOnDeadCodexWorker:tr,crossHarnessFailover:Fn,onUnroutedThreadMessage:qe=>K6(qe),onCodexThreadRebound:({kandanThreadId:qe,oldCodexThreadId:$n,newCodexThreadId:ot})=>{if($n!==void 0&&$n!==ot){let yt=nr.get($n),qu=ss.get($n);yt!==void 0&&(nr.delete($n),nr.set(ot,yt)),qu!==void 0&&(ss.delete($n),ss.set(ot,qu)),is.clear($n)}let Zo=Ye.rebindCodexThread(qe,ot);n("runner.codex_thread_rebind_propagated",{kandan_thread_id:qe,old_codex_thread_id:$n??null,new_codex_thread_id:ot,registry_outcome:Zo.outcome})},onLiveSourceSeqAccepted:yo,onLiveSourceSeqSettled:q,...as===void 0?{}:{cloudAgentTurn:as},pipelinePersistDir:hm(),enablePortForwardWatch:!0,initialForwardPorts:k,portForwardWatcher:KJ({rootPid:B,start:e.portForwardWatcher,commanderBoundPids:g.commanderBoundPids,commanderBoundPorts:g.commanderBoundPorts}),suppressedForwardPorts:E,onForwardPortApproved:(qe,$n)=>(R.add(qe),D(qe,{...$n,agentProvider:"codex"}),V()),onForwardPortRevoked:qe=>(R.delete(qe),U(qe),V()),channelSession:{workspaceSlug:ke,channelSlug:tn,kandanThreadId:nn,rootSeq:Y(x.rootSeq),codexThreadId:P,linzumiContext:x.linzumiContext,listenUser:rt,linzumiAgentSession:x.linzumiAgent!==void 0||e.threadProcess?.role==="thread"&&e.linzumiAgentMcpToken!==void 0,modelProvider:jn.modelProvider,model:jn.model,reasoningEffort:jn.reasoningEffort,sandbox:jn.sandbox,approvalPolicy:jn.approvalPolicy,sandboxedApprovalNeverDefault:jn.sandboxedApprovalNeverDefault,allowPortForwardingByDefault:jn.allowPortForwardingByDefault}},log:n});return nr.set(P,Ba),ss.set(P,$),is.note(P,"attached"),Mte(P,Ba),Ye.upsert({workspace:ke,channel:tn,kandanThreadId:nn,codexThreadId:P,cwd:C,agentProvider:"codex",control:mK({workspaceSlug:ke,channelSlug:tn,kandanThreadId:nn,codexThreadId:P,cwd:C,rootSeq:Y(x.rootSeq),runtimeSettings:jn}),updatedAtMs:Date.now()}),$!==Yt&&$.onNotification(qe=>{tv.value+=1;let $n=qe.params??{};n("codex.notification",lP(qe.method,$n)),iv($).observeNotification(qe.method,$n),G_(Ba,qe.method,$n,n)}),Ba})();wp.set(P,_i);try{let rt=await _i;return rt===void 0&&dg(P,new Error(`attach for codex thread ${P} resolved without a live session`)),rt}catch(rt){let jn=rt instanceof Error?rt.message:String(rt);throw is.fail(P,jn),dg(P,rt instanceof Error?rt:new Error(jn)),rt}finally{wp.delete(P)}},cv=async(g,x,C)=>{if(Yt===void 0)throw new Error("cannot attach a thread session without a codex app-server connection");return await N6({control:g,cwd:x,codexThreadId:C,sessionCodex:Yt,portForwardWatcherRootPid:zr?.process.pid})},U6=g=>{let x=jt(g.channel,g.kandanThreadId),C=ws(tt(),g.channel,g.kandanThreadId),P=Lr.initial(C),$=Ee.get(g.kandanThreadId)??[],B=fm(P,$)??P,ke="";try{ke=Od(nc(hm(),Sf({workspaceSlug:g.workspace,channelSlug:g.channel},g.kandanThreadId,Ke)),"utf8")}catch{}return{pendingInboundSeqs:x.entries().map(tn=>tn.sourceSeq),ackedInboundSeqs:x.ackedEntries().map(tn=>tn.sourceSeq),inboundHighWaterSeq:x.highWaterSourceSeq(),appliedFloorSeq:B,outboxTurnSignals:RB(ke)}},Fte=g=>{try{return II(U6(g),{nowMs:Date.now()}).unfinished}catch(x){return n("runner.resume_scan_inspect_failed",{thread_id:g.kandanThreadId,phase:"rehydration_retire_guard",message:x instanceof Error?x.message:String(x)}),!0}},B6=(async()=>{let g=Ye.list();if(g.length===0)return;let x=await xq({records:g,nowMs:Date.now(),maxAgeMs:Vk,pendingDurableRowCount:C=>Yg(nc(hm(),Sf({workspaceSlug:C.workspace,channelSlug:C.channel},C.kandanThreadId,Ke)),n).pendingEntries.length,hasUnfinishedWork:Fte,attach:async C=>{if(t.closePromise!==void 0)return n("session_registry.rehydrate_aborted_shutdown",{thread_id:C.kandanThreadId}),"failed";let P=Jr(C.cwd,ue.value);return P.ok?await cv(sl(C),P.cwd,C.codexThreadId)!==void 0?"attached":"failed":(n("session_registry.rehydrate_cwd_rejected",{thread_id:C.kandanThreadId,cwd:C.cwd,reason:P.reason}),"retire")},retire:C=>Ye.remove(C.kandanThreadId),log:n});n("session_registry.rehydrate_complete",{records:g.length,rehydrated:x.rehydrated,retired_drained:x.retiredDrained,retired_stale:x.retiredStale,retired_unattachable:x.retiredUnattachable,kept_unfinished:x.keptUnfinished,failed:x.failed})})().catch(g=>{n("session_registry.rehydrate_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>B6);let lv=async(g,x)=>{if(e.threadProcess?.role==="thread")return;let C=_m(g);if(C.type!=="ok"||C.provider!=="codex")return;let P=fn(g,"workspace"),$=fn(g,"channel"),B=fn(g,"threadId");if(P===void 0||$===void 0||B===void 0)return;let ke=Y_(g);(g.modelProvider!==void 0||g.llmProxy!==void 0||g.linzumiAgent!==void 0)&&av.set(B,{...g.modelProvider===void 0?{}:{modelProvider:g.modelProvider},...g.llmProxy===void 0?{}:{llmProxy:g.llmProxy},...g.linzumiAgent===void 0?{}:{linzumiAgent:g.linzumiAgent}});let tn=dK(ke);if(tn!==void 0)return{instanceId:Ke,controlType:g.type,ok:!1,error:tn,kandanThreadId:B,cwd:x};let nn=gt.get(B);if(nn!==void 0){if(W_(nn)!=="dead")return{instanceId:Ke,controlType:g.type,ok:!0,delegated:!0,threadProcess:"already_started",kandanThreadId:B,cwd:x};n("runner.thread_process_stale_entry_evicted",{kandanThreadId:B,codex_thread_id:g.type==="reconnect_thread"?h(g.codexThreadId)??null:null,prior_kind:nn.kind,pid:nn.kind==="running"?nn.handle.processPid??null:null,control_type:g.type}),gt.get(B)===nn&>.delete(B),XI(nn).catch(()=>{})}let Cn=kK(e.allowedCwds);Cn.missing.length>0&&n("runner.stale_allowed_cwd_roots_pruned",{kandanThreadId:B,control_type:g.type,pruned_roots:Cn.missing,remaining_root_count:Cn.existing.length}),oe("thread_process_spawn",{kandanThreadId:B})&&Ns();let pr=_N(hn,x);if(pr!==void 0)throw n("runner.cwd_stillbirth_circuit_open_start_refused",{kandanThreadId:B,cwd:x,control_type:g.type,consecutive_stillbirths:pr.count,last_stillbirth_at:pr.lastAt}),new Error(kN(x,pr));let Dn=e.spawnThreadRunner??p2e,_i=_K(e);n("runner.thread_process_starting",{kandanThreadId:B,cwd:x,readyTimeoutMs:_i});let rt=XEe({options:Cn.missing.length>0?{...e,allowedCwds:Cn.existing}:e,control:g,cwd:x,workspaceSlug:P,channelSlug:$,kandanThreadId:B});if(ca(rt)){let Fn=await nt(),fr=YIe(e.runnerId),bi=await e1e({dependencyStatusRef:c,connectTimeStatus:e.dependencyStatus,machineVmUnready:Fn!==void 0&&!Fn.ready,cwd:x});bi.confirmation!=="not_needed"&&n("runner.vm_preflight_host_codex_reverified",{kandanThreadId:B,confirmed_available:bi.hostCodexAvailable,probe_failure:bi.probedCodex?.failure??null,probe_detail:bi.probedCodex?.failureDetail??null});let mr=X2e({vmRouted:!0,readiness:Fn,hostCodexAvailable:bi.hostCodexAvailable,hostCodexProbeDetail:bi.probedCodex?.failureDetail,explicitLocalVmOptIn:rt.executionMode==="local_vm",freshStart:g.type==="start_instance",lastNoticedReadinessFingerprint:eRe(fr,n)});if(mr.route==="vm"&&Fn?.ready===!0&&TJ(fr,void 0,n),mr.route==="host_fallback"){if(rt={...rt,executionMode:"raw"},n("runner.local_vm_unready_host_fallback",{kandanThreadId:B,control_type:g.type,blockers:[...mr.blockers],notice_posted:mr.postThreadNotice,readiness_fingerprint:mr.readinessFingerprint}),mr.postThreadNotice)try{await ve.push(Ie,"session:post_thread_message",{workspace:P,channel:$,thread_id:B,body:mr.notice,client_message_id:`local-vm-host-fallback-${B}`,payload:{metadata:{local_codex_runner:{event_type:"local_vm_host_fallback_notice"}}}}),TJ(fr,mr.readinessFingerprint,n)}catch(as){n("runner.local_vm_unready_notice_post_failed",{kandanThreadId:B,message:as instanceof Error?as.message:String(as)})}}else if(mr.route==="fail_loud")throw n("runner.local_vm_unready_start_refused",{kandanThreadId:B,control_type:g.type,blockers:[...mr.blockers]}),new Error(mr.reason)}let jn={kind:"starting",promise:_2e(Dn(rt),{kandanThreadId:B,timeoutMs:_i})};gt.set(B,jn);let tr;try{tr=await jn.promise}catch(Fn){if(gt.get(B)===jn&>.delete(B),n("runner.thread_process_start_failed",{kandanThreadId:B,cwd:x,message:Fn instanceof Error?Fn.message:String(Fn)}),oe("thread_process_start_failed",{kandanThreadId:B})&&Ns(),HJ(Fn)){let fr=yN(hn,x,Fn,Date.now());n("runner.cwd_stillbirth_recorded",{kandanThreadId:B,cwd:x,consecutive_stillbirths:fr.count,circuit_open:fr.tripped})}throw Fn}xN(hn,x)&&n("runner.cwd_stillbirth_counter_cleared",{kandanThreadId:B,cwd:x});for(let Fn of tr.commanderManagedPorts??[])J(Fn.port,{processName:Fn.processName,processIconKey:Fn.processIconKey,agentProvider:Fn.agentProvider});try{let Fn=tr.codex,fr=a0(()=>Fn.close());tr.onExit?.(fr),tr.onExit?.(()=>{t.closePromise===void 0&&iv(Fn).failActiveTurns("codex thread worker exited")}),tr.onExit?.(()=>{Ho.clearThread(ws(tt(),$,B))});let mr={kind:"running",handle:{...tr,close:async()=>{fr(),await tr.close()}}};gt.get(B)===jn&>.set(B,mr),tr.onExit?.(()=>{gt.get(B)===mr&>.delete(B)}),tr.onExit?.(()=>{if(t.closePromise===void 0)for(let[qe,$n]of Array.from(ss.entries()))$n===Fn&&dv(qe,Fn)}),n("runner.thread_process_started",{kandanThreadId:B,cwd:x});let as=(qe,$n,ot)=>N6({control:qe,cwd:$n,codexThreadId:ot,sessionCodex:Fn,portForwardWatcherRootPid:tr.processPid,commanderBoundPids:(tr.commanderManagedPorts??[]).flatMap(Zo=>Zo.pid===void 0?[]:[Zo.pid]),commanderBoundPorts:(tr.commanderManagedPorts??[]).map(Zo=>Zo.port)}),Ba=async qe=>{if(qe!==void 0&&qe.ok!==!1)return qe;let $n=gt.get(B);return($n===jn||$n?.kind==="running")&>.delete(B),await($n?.kind==="running"?$n.handle.close():tr.close()).catch(()=>{}),qe};switch(g.type){case"start_instance":{let qe=await cK({codex:Fn,kandan:ve,topic:Ie,control:g,options:e,instanceId:Ke,cwd:x,matchedRoot:x,onStartedThread:as,setStartupStage:()=>{},setStartedCodexThreadId:()=>{}});return await Ba(qe.controlResponse)}case"reconnect_thread":return await Ba(await KI(Fn,ve,Ie,Ke,e,m(),ue,pe,Te,qr,vp,Fu,nv,ag,g,rv,a,as,void 0,void 0,qe=>le.current(qe),yo,ja,Fa,ne))}}catch(Fn){let fr=gt.get(B);throw(fr===jn||fr?.kind==="running")&>.delete(B),await(fr?.kind==="running"?fr.handle.close():tr.close()).catch(()=>{}),Fn}},Sp=new Map,pv=new Map,J6=async(g,x,C)=>{try{n("runner.spawn_on_miss_replay_on_sibling",{kandanThreadId:g.threadId??null,codex_thread_id:x.codexThreadId,seq:g.seq});let P=await ov({codexThreadId:x.codexThreadId,kandanThreadId:g.threadId,wait:uv(x.codexThreadId,{waitForSiblingSpawn:!0})});if(P===void 0)throw new Error(`spawn-on-miss could not resolve a live session for codex thread ${x.codexThreadId}`);let $=P.currentKandanThreadId();if(g.threadId!==void 0&&$!==void 0&&$!==g.threadId)throw new cd({codexThreadId:x.codexThreadId,ownerKandanThreadId:$,requestingKandanThreadId:g.threadId});return await P.startThreadMessageTurn({seq:g.seq,body:g.body,actorSlug:g.actorSlug,actorUserId:g.actorUserId,attachments:g.attachments,boundStartTimeout:!0}),"dispatched"}catch(P){return n("runner.spawn_on_miss_failed",{kandanThreadId:g.threadId??null,codex_thread_id:x.codexThreadId,seq:g.seq,message:P instanceof Error?P.message:String(P)}),await qs(C,"failed",`could not resume the thread's coding session: ${P instanceof Error?P.message:String(P)}`,x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}},K6=async g=>{let x=g.threadId;if(!ym(e)||x===void 0)return"ignored";let C=`${x}:${g.seq}`,P=pv.get(C);if(P!==void 0){let B=await P;return B==="spawned"?"spawned_deduped":B}let $=zte(g,x);pv.set(C,$);try{return await $}finally{pv.delete(C)}},zte=async(g,x)=>{let C=gt.get(x);if((C===void 0?void 0:W_(C))==="live")return"ignored";let $=Ye.list().find(Cn=>Cn.kandanThreadId===x);if($===void 0){let Cn=jr();if(Cn===void 0||!Xt())return"ignored";let Dn=jt(Cn,x).enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Ku(g),Date.now());return n("runner.spawn_on_miss_enqueued_without_local_record",{kandanThreadId:x,channel:Cn,seq:g.seq,enqueued:Dn.accepted}),await Wte(Cn,g),"spawned"}let B=$.channel,ke=ws(tt(),B,x),tn=jt(B,x);if(!Xt()){let Cn=tn.enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Ku(g),Date.now());return n("runner.spawn_on_miss_drain_in_progress",{kandanThreadId:x,seq:g.seq,enqueued:Cn.accepted}),"spawned"}return await gJ({queue:tn,store:Lr,lock:ie,leases:le,threadId:x,watermarkKey:ke,sourceSeq:g.seq,kind:g.localRunnerEventType===void 0?"live":"replay",payload:Ku(g),leaseEpoch:pJ(g),dispatch:async(Cn,pr)=>{let Dn=Kv(pr);return Dn===void 0?(n("runner.spawn_on_miss_bad_payload",{kandanThreadId:x,seq:Cn}),"permanent_failed"):await Q6(Dn,$)},serverRows:Ee.get(x)??[],onDeadLetter:Y6($),inFlightGuard:Ho,log:n})==="ignored"?"ignored":"spawned"},ug=async(g,x=[])=>{if(!Xt())return;let C=g.kandanThreadId,P=g.channel,$=ws(tt(),P,C),B=jt(P,C);await yJ({queue:B,store:Lr,lock:ie,threadId:C,watermarkKey:$,serverRows:x,log:n,onlyDispatchUnattempted:x.length===0,onDeadLetter:Y6(g),inFlightGuard:Ho,onTornTailUnrecoverable:async ke=>{let tn=sl(g);await qs(tn,"failed","a message may have been lost during an unexpected shutdown (power loss). Please resend your last message to continue this job.",g.codexThreadId,{failureClass:"resume_torn_tail"}),n("runner.inbound_torn_tail_resend_published",{kandanThreadId:ke})},dispatch:async(ke,tn)=>{let nn=Kv(tn);return nn===void 0?(n("runner.inbound_drain_bad_payload",{kandanThreadId:C,seq:ke}),"permanent_failed"):await Q6(nn,g)}})},qte=async(g,x)=>{if(x!==void 0&&x.ok===!1||!Xt())return;let C=Ye.list().find($=>$.kandanThreadId===g);if(C===void 0)return;let P=jt(C.channel,g);P.entries().length!==0&&(n("runner.inbound_drain_after_spawn",{kandanThreadId:g,channel:C.channel,pending:P.entries().length}),await ug(C,Ee.get(g)??[]).catch($=>{n("runner.inbound_drain_after_spawn_failed",{kandanThreadId:g,message:$ instanceof Error?$.message:String($)})}))},Nte=async(g,x)=>{let C=await lv(g,x),P=fn(g,"threadId");return P!==void 0&&await qte(P,C),g.type==="reconnect_thread"&&BI(C)&&C!==void 0?await Ute(g,C):C},Ute=async(g,x)=>{let C=co(g.workDescription),P=Y(g.sourceSeq)??Y(g.rootSeq),$=fn(g,"threadId"),B=fn(g,"channel"),ke=h(g.codexThreadId);if(C===void 0||P===void 0||$===void 0||ke===void 0)return x;if(B===void 0)n("runner.reconnect_follow_up_missing_channel",{kandanThreadId:$,codex_thread_id:ke,source_seq:P});else if(ne({channel:B,threadId:$,sourceSeq:P}))return n("runner.reconnect_follow_up_already_applied",{kandanThreadId:$,codex_thread_id:ke,source_seq:P}),{...x,followUp:"duplicate",sourceSeq:P};try{let tn=await ov({codexThreadId:ke,kandanThreadId:$,wait:uv(ke,{waitForSiblingSpawn:!0})});if(tn===void 0)throw new Error(`no live session attached for codex thread ${ke}`);let nn=tn.currentKandanThreadId();if(nn!==void 0&&nn!==$)throw new cd({codexThreadId:ke,ownerKandanThreadId:nn,requestingKandanThreadId:$});let Cn=wo(e.token),pr=await tn.startThreadMessageTurn({seq:P,body:C,actorSlug:Cn.actorUsername,actorUserId:Cn.actorUserId,attachments:Qo(Ne(g.attachments)??[]),boundStartTimeout:!0,dedupBySeq:!0});return n("runner.reconnect_follow_up_routed_to_live_worker",{kandanThreadId:$,codex_thread_id:ke,source_seq:P,outcome:pr}),{...x,followUp:pr,sourceSeq:P}}catch(tn){let nn=tn instanceof Error?tn.message:String(tn);return n("runner.reconnect_follow_up_route_failed",{kandanThreadId:$,codex_thread_id:ke,source_seq:P,message:nn}),{...x,followUp:"route_failed",followUpError:nn,sourceSeq:P}}},V6=g=>{let x=new Map,C=TB(g);for(let P of C){P.leaseEpoch!==void 0&&le.adopt(P.threadId,P.leaseEpoch)&&n("runner.resume_reconcile_lease_adopted",{kandanThreadId:P.threadId,leaseEpoch:P.leaseEpoch});let $=PB(P);x.set(P.threadId,$),Ee.set(P.threadId,$)}return C.length>0&&n("runner.resume_reconcile_consumed",{threadCount:C.length}),x},W6=async()=>{let g=kI(),x;try{x=eK(g).filter($=>$.endsWith(".log"))}catch($){if($?.code==="ENOENT")return;n("runner.inbound_orphan_scan_failed",{message:$ instanceof Error?$.message:String($)});return}let C=tt(),P=new Set(Ye.list().map($=>CI(C,$.channel,$.kandanThreadId)));for(let $ of x){let B=vt(g,$);if(!P.has(B))try{let ke=SI(B,n),tn=ke.entries();if(tn.length===0)continue;for(let nn of tn)ke.deadLetter(nn.sourceSeq);ke.compact(),n("runner.inbound_orphan_dead_lettered",{path:B,strandedCount:tn.length,strandedSeqs:tn.map(nn=>nn.sourceSeq)})}catch(ke){n("runner.inbound_orphan_drain_failed",{path:B,message:ke instanceof Error?ke.message:String(ke)})}}},H6=async g=>{if(!Xt())return;let x=Ye.list();await Promise.all(x.map(C=>ug(C,g?.get(C.kandanThreadId)??[]).catch(P=>{n("runner.inbound_drain_failed",{kandanThreadId:C.kandanThreadId,message:P instanceof Error?P.message:String(P)})}))),await W6()},Bte=g=>g==="accepted_never_framed"?"this message was accepted but a runner restart killed it before it ran. Resend it (or press retry) to run it now.":"interrupted by a runner restart before it finished. Resend your last message (or press retry) to continue this job.",Jte=async g=>{let x=Date.now()+g;for(;;){if(t.closePromise!==void 0)return;let C=x-Date.now();if(C<=0)return;await new Promise(P=>setTimeout(P,Math.min(500,C)))}},Kte=async()=>{!Xt()||t.closePromise!==void 0||(await EB({records:Ye.list(),threadId:g=>g.kandanThreadId,inspect:U6,resumePendingInbound:async g=>(await ug(g,Ee.get(g.kandanThreadId)??[]),jt(g.channel,g.kandanThreadId).entries().length===0?"clear":"retry"),respawnWorker:async g=>{if(t.closePromise!==void 0)return!1;let x=Jr(g.cwd,ue.value);return x.ok?await cv(sl(g),x.cwd,g.codexThreadId)!==void 0:(n("runner.resume_respawn_cwd_rejected",{thread_id:g.kandanThreadId,cwd:g.cwd,reason:x.reason}),!1)},seqInFlight:(g,x)=>Ho.has(ws(tt(),g.channel,g.kandanThreadId),x),publishInterruptedTurnState:async(g,x,C)=>{await qs({...sl(g),sourceSeq:x},"failed",Bte(C),g.codexThreadId,{failureClass:"resurrection_interrupted"})},shuttingDown:()=>t.closePromise!==void 0||!Xt(),sleep:Jte,log:n}),await W6())};V6(A(te)?.resume_reconcile);let Vte=B6.then(()=>Kte()).catch(g=>{n("runner.inbound_boot_drain_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>Vte),ve.onReconnect(g=>{let x=g.get(Ie),C=V6(x===void 0?void 0:x.resume_reconcile);H6(C).catch(P=>{n("runner.inbound_rejoin_drain_failed",{message:P instanceof Error?P.message:String(P)})})});let Ua=new Map,G6=(g,x)=>`${g}:${x}`,Z6={windowMs:Of(process.env),recordWedge:(g,x)=>{let C=G6(g,x),P=(Ua.get(C)??0)+1;if(Ua.delete(C),Ua.size>=256){let $=Ua.keys().next().value;$!==void 0&&Ua.delete($)}return Ua.set(C,P),P},clear:(g,x)=>{Ua.delete(G6(g,x))},killAndRespawn:async({threadId:g,claudeSessionId:x,reason:C})=>{let P=vs(qr,[x],[g]);if(P!==void 0){n("claude_code.dispatch_supervisor_killing_session",{linzumi_thread_id:g,claude_session_id:x,reason:C}),P.abortController.abort(new Error(C));let B=P.sessionWork();B!==void 0&&await Promise.race([B.catch(()=>{}),new Promise(ke=>{setTimeout(ke,1e4).unref?.()})])}let $=Ye.list().find(B=>B.kandanThreadId===g);return $===void 0?(n("claude_code.dispatch_supervisor_no_registry_record",{linzumi_thread_id:g,claude_session_id:x}),"no_replay_path"):(await ug($,Ee.get(g)??[]),"respawn_dispatched")}},Q6=async(g,x)=>{let C=x.kandanThreadId,P=sl(x),$=av.get(C),B={...P,sourceSeq:g.seq,workDescription:g.body,...g.attachments.length===0?{}:{attachments:Eg(g.attachments)},...$?.modelProvider===void 0?{}:{modelProvider:$.modelProvider},...$?.llmProxy===void 0?{}:{llmProxy:$.llmProxy},...$?.linzumiAgent===void 0?{}:{linzumiAgent:$.linzumiAgent}},ke=Jr(x.cwd,ue.value);if(!ke.ok)return n("runner.spawn_on_miss_cwd_rejected",{kandanThreadId:C,cwd:x.cwd,reason:ke.reason,seq:g.seq}),await qs(B,"failed",`could not resume the thread's coding session: working directory ${x.cwd} is not an allowed root (${ke.reason})`,x.codexThreadId,{failureClass:"resume_cwd_not_allowed"}),"permanent_failed";let tn=ke.cwd,nn=Sp.get(C);if(nn!==void 0)return n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:x.codexThreadId,provider_session_key:x.codexThreadId,seq:g.seq,decision:"await_in_flight_spawn"}),await nn==="no_session"?(await qs(B,"failed","could not resume the thread's coding session: no live session after spawn",x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"):await J6(g,x,B);n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:x.codexThreadId,provider_session_key:x.codexThreadId,seq:g.seq,decision:"spawned_resume"}),is.note(x.codexThreadId,"spawn_requested");let Cn=()=>{},pr=new Promise(Dn=>{Cn=Dn});Sp.set(C,pr);try{let Dn=await lv(B,tn);if(BI(Dn))return Cn("spawned"),await J6(g,x,B);if(Dn===void 0||Dn.ok===!1){Cn("no_session");let _i=Dn!==void 0&&typeof Dn.error=="string"?Dn.error:"the thread could not be resumed (no resumable codex session)";return is.fail(x.codexThreadId,_i),dg(x.codexThreadId,new Error(_i)),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:x.codexThreadId,seq:g.seq,message:_i}),await qs(B,"failed",`could not resume the thread's coding session: ${_i}`,x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}return Cn("spawned"),"dispatched"}catch(Dn){return Cn("no_session"),is.fail(x.codexThreadId,Dn instanceof Error?Dn.message:String(Dn)),dg(x.codexThreadId,Dn instanceof Error?Dn:new Error(String(Dn))),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:x.codexThreadId,seq:g.seq,message:Dn instanceof Error?Dn.message:String(Dn)}),await qs(B,"failed",`could not resume the thread's coding session: ${Dn instanceof Error?Dn.message:String(Dn)}`,x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}finally{Cn("spawned"),Sp.get(C)===pr&&Sp.delete(C)}},qs=async(g,x,C,P,$={})=>{let B=ua(g,x,C,{instanceId:Ke,codexThreadId:P,...Xu($.failureClass)});if(B!==void 0)try{await ve.push(Ie,"message_state",B)}catch(ke){n("runner.spawn_on_miss_state_push_failed",{thread_id:fn(g,"threadId")??null,status:x,message:ke instanceof Error?ke.message:String(ke)})}},X6=async(g,x)=>{let{reason:C,failureClass:P}=s2e(x),$=ua(g,"failed",C,{instanceId:Ke,...Xu(P)});if($===void 0){n("runner.stillborn_worker_failed_state_unpublishable",{thread_id:fn(g,"threadId")??null,control_type:g.type,reason:C,cause:"missing_source_seq"});return}try{await ve.push(Ie,"message_state",$),n("runner.stillborn_worker_failed_state_published",{thread_id:fn(g,"threadId")??null,control_type:g.type,reason:C})}catch(B){n("runner.stillborn_worker_failed_state_push_failed",{thread_id:fn(g,"threadId")??null,control_type:g.type,message:B instanceof Error?B.message:String(B)})}},Wte=async(g,x)=>{if(x.threadId===void 0)return;let C={workspace:tt(),channel:g,thread_id:x.threadId,instance_id:Ke,seq:x.seq,status:"queued",reason:"queued for durable resume"};try{await ve.push(Ie,"message_state",C)}catch(P){n("runner.spawn_on_miss_state_push_failed",{thread_id:x.threadId,status:"queued",message:P instanceof Error?P.message:String(P)})}},cg=[],fv=zB(process.env),Hte=async g=>{try{let x=fn(g,"threadId"),C=JEe({control:g,hasRegistryRecord:x!==void 0&&Ye.list().some(B=>B.kandanThreadId===x),runtimeSettings:ml(e,g),identity:wo(e.token),nowMs:Date.now()});if(C===void 0)return!1;let P=ua(g,"queued",jB,{instanceId:Ke,...C.codexThreadId===void 0?{}:{codexThreadId:C.codexThreadId}}),$=await KEe({plan:C,queuedStatePayload:P,queue:jt(C.channel,C.threadId),upsertRegistryRecord:B=>Ye.upsert(B),pushQueuedState:async B=>{await ve.push(Ie,"message_state",B)},trackHeld:B=>{cg.push({control:g,...B})},log:n,nowMs:Date.now()});return $.held?(n("runner.update_restart_drain_start_held",{control_type:g.type,thread_id:C.threadId,source_seq:C.sourceSeq,enqueued:$.enqueuedFresh,registry_record_synthesized:C.registryRecord!==void 0,max_wait_ms:fv}),!0):!1}catch(x){return n("runner.update_restart_drain_hold_failed",{control_type:g.type,thread_id:fn(g,"threadId")??null,message:x instanceof Error?x.message:String(x)}),!1}},Gte=async()=>{let g=Date.now();for(let x of[...cg]){if(g-x.heldAtMs<fv)continue;let C=cg.indexOf(x);C!==-1&&cg.splice(C,1);let P=jt(x.channel,x.threadId);P.entries().find(B=>B.sourceSeq===x.sourceSeq)!==void 0&&(P.deadLetter(x.sourceSeq),n("runner.update_restart_drain_held_turn_expired",{thread_id:x.threadId,source_seq:x.sourceSeq,held_for_ms:g-x.heldAtMs,max_wait_ms:fv}),await X6(x.control,new Error(DI)))}},kp,Zte=()=>{kp===void 0&&(kp=setInterval(()=>{Gte().catch(g=>{n("runner.update_restart_drain_held_sweep_failed",{message:g instanceof Error?g.message:String(g)})})},FB))};t.actions.push(()=>{kp!==void 0&&(clearInterval(kp),kp=void 0)});let Y6=g=>async({sourceSeq:x,reason:C,attempts:P,alreadyPublished:$})=>{n("runner.inbound_dead_lettered",{kandanThreadId:g.kandanThreadId,seq:x,reason:C,attempts:P,alreadyPublished:$}),!$&&await qs(sl(g),"failed",UEe(C),g.codexThreadId,{failureClass:BEe(C)})},mv=()=>{if(er!==void 0)return!1;for(let g of ju.values())if(g.activeTurnCount()>0)return!1;for(let g of qr.values())if(g.hasActiveTurn())return!1;for(let g of gt.values())if(g.kind==="starting")return!1;return!(Sp.size>0||Te.size>0)},Qte=()=>{if(!mv())return!1;for(let g of be.values())if(g.entries().length>0)return!1;return!0},e$=R7(process.env),hv=E7({currentVersion:Ut,strategy:T7({env:process.env,entrypointPath:process.argv[1]}),isIdle:Qte,...e$===void 0?{}:{drain:{timing:e$,hooks:{begin:()=>{Qn=!0},end:({redispatchHeldWork:g})=>{Qn=!1,g&&H6().catch(x=>{n("runner.update_drain_requeue_failed",{message:x instanceof Error?x.message:String(x)})})},isQuiescent:mv,isEligible:()=>er===void 0}}},performRestart:I7({currentVersion:Ut,argv:process.argv.slice(2),cwd:e.cwd,close:r,exit:g=>process.exit(g),log:n}),log:n,restartAttemptStore:z_(P7())});t.actions.push(()=>hv.stop()),i.beginDraining=()=>{if(d?.outgoingDrainActive()===!0){n("runner.generation_outgoing_gate_open",{pinned:d.outgoingPins.size()});return}Rt=!0,Qn=!0,Zte()},i.onTurnCompleted=g=>{if(!(d===void 0||!d.outgoingDrainActive())&&d.outgoingPins.release(g.threadId)){let x=d.sendToSupervisor({type:"generation_pin_released",epoch:d.epoch,threadId:g.threadId});n("runner.generation_pin_released_sent",{threadId:g.threadId,remaining:d.outgoingPins.size(),delivered:x})}},i.isQuiescent=mv,i.isWaitEligible=()=>er===void 0,i.inFlightTurns=()=>[...Array.from(ju.values()).flatMap(g=>g.activeTurns().map(x=>({threadId:x.threadId,turnId:x.turnId,engine:"codex"}))),...Array.from(qr.values()).filter(g=>g.hasActiveTurn()).map(g=>({threadId:g.threadId,engine:"claude_code"}))],i.lastActivityAtMs=()=>{let g;for(let x of ju.values()){let C=x.lastActivityAtMs();C!==void 0&&(g===void 0||C>g)&&(g=C)}for(let x of qr.values()){let C=x.lastSdkActivityMs();C>0&&(g===void 0||C>g)&&(g=C)}return g},i.publishForcedKillTerminalStates=g=>{n("runner.drain_forced_kill_states_publishing",{turn_count:g.length,thread_ids:g.map(P=>P.threadId)});let x=new Set(g.filter(P=>P.engine==="codex").map(P=>P.threadId)),C=new Set([er,...nr.values()].filter(P=>P!==void 0).flatMap(P=>P.pendingApprovalTurnIds()));for(let P of ju.values())P.activeTurns().some($=>x.has($.threadId))&&P.failActiveTurns($=>C.has($.turnId)?BB:UB);return Promise.resolve()};let Xte=()=>({instanceId:Ke,clientId:za,...Et===void 0?{}:{codexUrl:Et},cwd:e.cwd,hostname:yp,workspace:Vr(e)??null,channel:e.channelSession?.channelSlug??null,threadId:er?.currentKandanThreadId()??null,codexThreadId:er?.currentCodexThreadId()??null,codexThreads:O6.value,model:Lu.model??null,reasoningEffort:Lu.reasoningEffort??null,allowPortForwardingByDefault:Lu.allowPortForwardingByDefault??null,fast:e.fast??!1,capabilities:V(),updateNudge:hv.status()??null}),Ns=()=>ve.push(Ie,"heartbeat",Xte()).then(()=>{ng.recordServerAck();for(let g of qr.values())g.resumeOutbox()}).catch(g=>{n("kandan.heartbeat_push_failed",{message:g instanceof Error?g.message:String(g)})}),Yte=setInterval(()=>{ng.check(),w(()=>{Ns()}),Ns()},15e3);if(t.actions.push(()=>clearInterval(Yte)),ve.onReconnect(()=>Ns().then(()=>{})),Ns(),e.threadProcess?.role!=="thread"&&Px()){let g=L8(j8({kandanUrl:e.kandanUrl,token:e.token,computeKey:Hx(e.kandanUrl),query:LT({kandanUrl:e.kandanUrl,token:e.token}),log:x=>n("vm.golden_gc",{line:x})}));t.actions.push(g)}let n$=x9(ve,Ie,()=>Array.from(R));t.actions.push(()=>n$.close());let gv=er?.currentCodexThreadId();if(e.launchTui&&Yt===void 0)throw new Error("Codex TUI requires a Codex app-server connection");e.launchTui&&Yt!==void 0&&gv!==void 0&&await tEe(Yt,gv);let t$=e.launchTui&&Et!==void 0?ZRe(e.codexBin,Et,e.cwd,gv,e.channelSession,e.fast):void 0;t$!==void 0&&t.actions.push(()=>{t$.kill("SIGINT")});let yv=Yt===void 0?void 0:iv(Yt);if(Yt?.onNotification(g=>{tv.value+=1;let x=g.params??{},C=lP(g.method,x);er===void 0&&ve.push(Ie,"codex_notification",{instanceId:Ke,seq:tv.value,method:g.method,params:x,metadata:C.metadata,receivedAt:new Date().toISOString()}).catch(P=>{n("kandan.codex_notification_push_failed",{message:P instanceof Error?P.message:String(P)})}),n("codex.notification",C),yv?.observeNotification(g.method,x),G_(er,g.method,x,n);for(let P of nr.values())G_(P,g.method,x,n)}),yv!==void 0){let g={handled:!1},x=C=>{if(t.closePromise===void 0&&(n("codex.app_server_connection_lost",{cause:C}),yv.failActiveTurns(C),zr?.stop(),$6&&!g.handled)){g.handled=!0;let P=ARe(DRe(IJ(e.runnerId),nn=>{n("runner.app_server_exit_loop_stamp_write_failed",{message:nn,statePath:IJ(e.runnerId)}),console.error(`Warning: could not persist the app-server crash-loop stamp (${nn}); the exit-code-${JI} give-up bound cannot take effect across restarts until the state path is writable.`)}),Date.now()),$=P.crashLoop?JI:75,B=MRe(e.cwd),ke=B===void 0?"":` Likely trigger: ${B}.`;if(P.crashLoop){let nn=e.logFile??vg();n("runner.app_server_crash_loop_gave_up",{cause:C,exitsInWindow:P.count,windowMs:aK,exitCode:$,cwd_missing_diagnosis:B??null}),console.error(`The Codex app-server has died ${P.count} times in rapid succession (latest cause: ${C}).${ke} Restarting the runner is not fixing it, so this exit uses code ${JI} (instead of the restart-requesting 75) to stop the crash loop. Diagnose before reconnecting: the runner log is at ${nn} and the CLI audit log at ${Uv()} (look for the app-server's exit reason/stderr). Once resolved, run \`linzumi connect\` to reconnect.`)}else console.error(`Codex app-server connection was lost (${C}); exiting so a fresh runner can relaunch it.${ke} Run \`linzumi connect\` to reconnect.`);let tn=[...er!==void 0?[er]:[],...nr.values()].map(nn=>nn.close().catch(Cn=>{n("codex.app_server_lost_session_drain_failed",{message:Cn instanceof Error?Cn.message:String(Cn)})}));RRe({pushes:[...F6,...tn],exit:()=>process.exit($),safetyCapMs:5e3})}};Yt?.onClose?.(C=>x(C.message)),zr?.process.once("exit",(C,P)=>x(`codex app-server process exited (${C??P??"unknown"})`))}let ere=g=>{let x=Hx(e.kandanUrl),C=g.cwd!==void 0&&g.cwd.trim()!==""?g.cwd:e.cwd;if(G2e(C)){let $=`cwd_dangerous: golden build refused - resolved build cwd ${JSON.stringify(C)} is not a safe project directory (empty, filesystem root, or non-absolute). Re-run from the project's repository checkout.`;return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:x,cwdDangerous:!0,failureReason:$}),ve.push(Ie,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:x,failure_reason:$})}n("vm.golden_build_started",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:x,sourceThreadId:g.sourceThreadId??null,cwd:C});try{t5($T({projectPublicId:g.projectPublicId??void 0,computeKey:x,cwd:C}))}catch($){n("vm.golden_build_register_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)})}let P=g.sourceThreadId===void 0?void 0:{threadId:g.sourceThreadId,sourceMachineName:Ix({cwd:C,kandanThreadId:g.sourceThreadId})};return VU({cwd:C,projectPublicId:g.projectPublicId??void 0,computeKey:x,name:g.name,...P===void 0?{}:{sourceThread:P},log:$=>n("vm.golden_build",{line:$})}).then($=>(n("vm.golden_build_ready",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,checksum:$.checksum,sizeBytes:$.sizeBytes,artifactRef:$.artifactRef,artifactKind:$.artifactKind,snapshotFallbackReason:$.snapshotFallbackReason??null}),ve.push(Ie,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"ready",checksum:$.checksum,size_bytes:$.sizeBytes,artifact_ref:$.artifactRef,artifact_kind:$.artifactKind,source_commits:$.sourceCommits,lockfile_hashes:$.lockfileHashes,toolchain_versions:$.toolchainVersions,compute_key:x,failure_reason:null,metadata:$.snapshotFallbackReason===void 0?{}:{snapshot_fallback_reason:$.snapshotFallbackReason}}))).catch($=>{let B=$ instanceof qc||$ instanceof Error?$.message:String($);return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,captureUnavailable:$ instanceof qc,failureReason:B}),ve.push(Ie,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:x,failure_reason:B})}).catch($=>{throw n("vm.golden_build_result_push_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)}),$})},nre=g=>{if(n("kandan.control",{control:g}),a?.record("kandan","control.received",{controlType:g.type,control:g}),!vRe(e,g)&&!SRe(e,g,Fu)){let P=ii(g)??null,$=e.threadProcess?.kandanThreadId??null;n("kandan.control_ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:P,threadProcessId:$}),a?.record("kandan","control.ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:P,threadProcessId:$});return}if(g.type==="replace_runner"){n("runner.replaced",{runnerId:e.runnerId,reason:g.reason,replacementRunnerId:g.replacementRunnerId,replacementVersion:g.replacementVersion}),r().catch(P=>{n("runner.replace_close_failed",{message:P instanceof Error?P.message:String(P)})});return}if(g.type==="update_available"){hv.handleUpdateAvailable(g);return}let x=CRe(g);if(x!==void 0)return ere(x);if(!xRe(g,Ke)){n("kandan.control_ignored",{reason:"instance_id_mismatch",instanceId:Ke,controlInstanceId:_Re(g),controlType:g.type});return}if(g9(g)){h9(g,Array.from(R)).then(P=>(n("kandan.forward_response",{requestId:g.requestId,port:g.port,path:g.path,status:P.status,ok:P.ok,location:XRe(P.headers,"location")}),ve.push(Ie,"forward:http_response",P))).catch(P=>ve.push(Ie,"forward:http_response",{requestId:g.requestId,ok:!1,error:P instanceof Error?P.message:String(P)})).catch(P=>{n("kandan.forward_response_push_failed",{message:P instanceof Error?P.message:String(P)})});return}if(y9(g)){n$.handle(g);return}if(k9(g)){T9(g,{codeServerBin:e.codeServerBin,editorRuntime:e.editorRuntime,allowedCwds:ue.value,currentState:he.value,browserBaseUrl:g.browserBaseUrl??process.env.KANDAN_LOCAL_RUNNER_PUBLIC_BASE_URL,runnerId:e.runnerId,platform:e.localEditorPlatform}).then(P=>{if(P.ok){X.value+=1;let $=X.value,B=he.value.status==="running"?[he.value.port,...he.value.collaboration===void 0?[]:[he.value.collaboration.serverPort],...D6("editor_restarted")]:[];he.value.status==="running"&&(R.delete(he.value.port),T.delete(he.value.port),he.value.collaboration!==void 0&&(R.delete(he.value.collaboration.serverPort),T.delete(he.value.collaboration.serverPort))),he.value=P.state,R.add(P.event.port),T.add(P.event.port),P.event.collaboration!==void 0&&(R.add(P.event.collaboration.serverPort),T.add(P.event.collaboration.serverPort));let ke=ve.push(Ie,"local_editor_status",{instanceId:Ke,requestId:g.requestId,ok:!0,capabilities:{...V(),...B.length===0?{}:{revokedPorts:B}},...P.event});return P.state.status==="running"&&(Pte(P.state),Ete(P.state,$,ke)),ke}return he.value=P.state,ve.push(Ie,"local_editor_status",{instanceId:Ke,requestId:g.requestId,ok:!1,reason:P.reason,capabilities:V()})}).catch(P=>ve.push(Ie,"local_editor_status",{instanceId:Ke,requestId:g.requestId,ok:!1,reason:hf(P),capabilities:V()})).catch(P=>{n("kandan.local_editor_status_push_failed",{message:P instanceof Error?P.message:String(P)})});return}if(s1e(g)){K({allowedCwds:g.allowedCwds,configVersion:g.configVersion??null},{includeStartupAllowedCwds:!0,source:"control"}),Ns();return}if(a1e(g)){let P=rF(g);n("runner.fleet_breaker_state",{source:"control",outcome:P.outcome,state:P.snapshot?.state??null,fate:P.snapshot?.fate??null,version:P.snapshot?.version??null});return}if(u1e(g)){let P=Tte(g);if(P!==void 0){ve.push(Ie,"codex_response",P).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}let $=Rte(g);if($!==void 0){ve.push(Ie,"codex_response",$).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}}if(d1e(g)){switch(g.enabled){case!0:R.add(g.port);break;case!1:R.delete(g.port),T.delete(g.port),U(g.port),re.approvedPorts.delete(g.port),re.approvedTargets.delete(g.port),ve.push(Ie,"forward_port_revoked",{instanceId:Ke,port:g.port,reason:"user_disabled",capabilities:Ws(V(),g.port)}).catch(P=>{n("kandan.forward_port_revoked_push_failed",{message:P instanceof Error?P.message:String(P)})});break}Ns();return}if(g.type==="import_onboarding_conversations")return C2e(e,n,g).catch(P=>{throw n("onboarding.conversation_import_failed",{runnerId:e.runnerId,message:P instanceof Error?P.message:String(P)}),P});if(g.type==="scan_onboarding_projects"){let P=R2e(g.paths);return wK(e,n,{workspaceSlug:h(g.workspace),selectedScanRoots:P,sourceRoots:P,workerId:"projects-selected-folders",workerLabel:"Selected folders",startingMessage:"Checking selected folders",emptyMessage:"No Git projects found in selected folders",foundMessage:"Selected folder projects found",failedMessage:"Selected folder project scan failed",currentPlace:P[0]??e.cwd,requireTerminalStatusWrite:!0,includeRuntimeCwdHint:!1}).catch($=>{throw n("onboarding.project_scan_failed",{runnerId:e.runnerId,message:$ instanceof Error?$.message:String($)}),$})}if(g.type==="start_instance"){if(oRe(g,$=>Ye.list().some(B=>B.kandanThreadId===$)))return N+=1,n("kandan.start_instance_skipped_known_session",{threadId:ii(g)??null,controlSeq:g.control_seq??null,issuedAt:gm(g)??null,reason:"thread_already_has_known_session",skippedStaleStartInstances:N}),ve.push(Ie,"codex_response",{instanceId:Ke,controlType:g.type,threadId:ii(g)??null,ok:!1,skipped:!0,error:"start_instance_thread_already_has_session",issuedAt:gm(g)??null}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})});let P=rRe(g,Date.now());if(P!==void 0)return N+=1,n("kandan.start_instance_stale_skipped",{threadId:ii(g)??null,controlSeq:g.control_seq??null,issuedAt:gm(g)??null,ageMs:P,staleWindowMs:rK,skippedStaleStartInstances:N}),ve.push(Ie,"codex_response",{instanceId:Ke,controlType:g.type,threadId:ii(g)??null,ok:!1,skipped:!0,error:"stale_start_instance",issuedAt:gm(g)??null,ageMs:P}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})})}let C;if(g.type==="start_turn"){let P=g.control_seq;if(P!==void 0){let $=tRe(Ie,g.threadId),B=Je.initial($);if(iRe(B,P))return tg+=1,n("kandan.start_turn_replay_skipped",{controlType:g.type,threadId:g.threadId,controlSeq:P,appliedControlSeq:B,skippedReplayedStartTurns:tg}),{instanceId:Ke,controlType:g.type,threadId:g.threadId,skipped:!0};C=()=>sRe(Je,$,P)}}return aRe(()=>{if(Rt&&(g.type==="start_instance"||g.type==="reconnect_thread")){let P=fn(g,"threadId"),$=g.type==="reconnect_thread"?co(g.codexThreadId):void 0,B=P!==void 0?gt.get(P):void 0,ke=g.type==="reconnect_thread"&&($!==void 0&&qr.has($)||B!==void 0&&W_(B)!=="dead");if(g.type==="start_instance"||g.type==="reconnect_thread"&&!ke)return Hte(g).then(nn=>{if(nn)return{instanceId:Ke,controlType:g.type,threadId:P??null,held:!0,reason:"runner_updating_queued"};throw n("runner.update_restart_drain_start_refused",{control_type:g.type,thread_id:P??null}),new Error(DI)})}return TRe(er,nr,g).then(P=>P!==void 0?P:KI(Yt,ve,Ie,Ke,e,m(),ue,pe,Te,qr,vp,Fu,nv,ag,g,rv,a,cv,ym(e)?Nte:void 0,s?.playCodex,$=>le.current($),yo,ja,Fa,ne,Z6,z6))},C).then(P=>ve.push(Ie,"codex_response",P)).catch(async P=>((g.type==="start_instance"||g.type==="reconnect_thread")&&(HJ(P)||mC(P)||MI(P))&&await X6(g,P),ve.push(Ie,"codex_error",{instanceId:Ke,message:hf(P)}))).catch(P=>{n("kandan.control_response_push_failed",{message:P instanceof Error?P.message:String(P)})})},tre=iN({store:oN(tN(fl(),e.runnerId),g=>n("runner.control_quarantine_state_write_failed",{message:g})),quarantineFilePath:rN(fl(),e.runnerId),currentEpoch:()=>eg.current(Ie),log:n,emitRunnerEvent:g=>{ve.push(Ie,"runner.control_quarantined",g).catch(x=>{n("runner.control_quarantined_event_push_failed",{message:x instanceof Error?x.message:String(x)})})}}),r$=(g,x)=>{uRe(g.type,()=>nre(g),x,n,C=>tre.onControlRejected(g,C))},lg=d===void 0?void 0:k3({runtime:d,threadIdOf:g=>ii(g),controlTypeOf:g=>g.type,dispatch:r$,log:n});return d!==void 0&&lg!==void 0&&(d.hooks.onOverlapDrain=g=>{let x=[...new Set(i.inFlightTurns().map(P=>P.threadId).filter(P=>P!==""))];d.beginOutgoingDrain(x);let C=d.sendToSupervisor({type:"generation_pin_snapshot",epoch:d.epoch,threadIds:x});n("runner.generation_outgoing_drain_started",{incomingEpoch:g,pinned:x.length,threadIds:x,snapshotDelivered:C}),d.requestUpdateDrain("generation_overlap")},d.hooks.onOverlapAbort=()=>{let g=d.cancelUpdateDrain("generation_overlap_abort"),x=lg.redispatchDeferredToIncoming();n("runner.generation_overlap_abort_applied",{drainCancelled:g,redispatched:x})},d.hooks.onPinsReleased=()=>{lg.dispatchUnpinned()},d.hooks.onPromote=()=>{let C;t.actions.push(()=>{C!==void 0&&(clearTimeout(C),C=void 0)});let P=$=>{if(C=void 0,d.promoteRunnerLock()){n("runner.generation_lock_promoted",{attempt:$});return}if($>=10){n("runner.generation_lock_promote_gave_up",{attempts:$});return}C=setTimeout(()=>P($+1),5e3),C.unref()};P(1)}),ZIe(J2e(e,ue.value,Pe.value,I.value),n,bp,ze,lg?.dispatch??r$,async()=>{await y(),await _(),p.value==="probe_failed"&&await v()}),{instanceId:Ke,codexUrl:Et,close:r}}function ZIe(e,n,t,r,o,i){r.value=o,t.splice(0).forEach(({control:s,ack:a})=>o(s,a)),v2e(e,n,i)}function hm(){let e=process.env.LINZUMI_COMMANDER_OUTBOX_DIR?.trim();return e!==void 0&&e!==""?e:vt(oR(),".linzumi","commander-outbox")}function fl(){let e=process.env.LINZUMI_CONTROL_CURSOR_DIR?.trim();return e!==void 0&&e!==""?e:vt(oR(),".linzumi","control-cursors")}function QIe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.json`)}function XIe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.start-turn.json`)}function YIe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.vm-fallback-notice.json`)}function eRe(e,n){let t;try{if(!cl(e))return;t=Od(e,"utf8")}catch(r){n("vm_fallback_notice_store.read_failed",{path:e,message:r instanceof Error?r.message:String(r)});return}try{let r=JSON.parse(t);if(typeof r=="object"&&r!==null){let o=r.readinessFingerprint;if(typeof o=="string"&&o!=="")return o}}catch{}}function TJ(e,n,t){try{if(n===void 0){rR(e,{force:!0});return}ll(Ld(e),{recursive:!0});let r=`${e}.tmp`;Q_(r,`${JSON.stringify({readinessFingerprint:n})}
|
|
1521
|
+
${t}`.toLowerCase();return r.includes("not logged in")||r.includes("not authenticated")||r.includes("login required")||r.includes("please log in")?"not_logged_in":e===0?"logged_in":"probe_failed"}function qI(e,n){let t=e==="logged_in"&&n.status==="probe_failed"&&n.transient;return{status:t?e:n.status,downgradeSkipped:t}}function HIe(e,n){return e==="ENOENT"?n?{status:"binary_missing",transient:!1}:{status:"probe_failed",transient:!0}:{status:"probe_failed",transient:kP(e)}}function CJ(e,n){return new Promise(t=>{let r=[],o=[],i=!1,s,a=u=>{i||(i=!0,s!==void 0&&clearTimeout(s),t(u))},d=r0(e,["login","status"],{cwd:n,env:process.env,stdio:["ignore","pipe","pipe"]});s=setTimeout(()=>{d.kill("SIGTERM"),a({status:"probe_failed",transient:!0})},qIe),d.stdout?.on("data",u=>{r.push(u)}),d.stderr?.on("data",u=>{o.push(u)}),d.once("error",u=>{a(HIe(u.code,cl(n)))}),d.once("exit",u=>{a({status:WIe(u,Buffer.concat(r).toString("utf8"),Buffer.concat(o).toString("utf8")),transient:u===null})})})}async function GIe(e,n,t,r,o,i,s,a,d){let u=hEe(e),c={value:e.dependencyStatus},l={value:(await CJ(e.codexBin,e.cwd)).status},p={value:e.claudeCodeAuthStatus??(LJ(e).includes("claude-code")?"logged_in":"not_logged_in")};(p.value==="probe_failed"||p.value==="binary_missing")&&n("runner.claude_code_auth_startup_probe_failure",{runnerId:e.runnerId,claude_code_auth_status:p.value,probe_detail:e.claudeCodeAuthProbeDetail??null});let m=()=>LJ(e,p.value),f={value:bx()};n("runner.codex_auth_status_probed",{runnerId:e.runnerId,codex_auth_status:l.value,has_valid_openai_auth:f.value.hasValidOpenAiAuth,openai_auth_mode:f.value.authMode});let y=async()=>{let g=c.value;if(g!==void 0)try{let x=await ra({cwd:e.cwd,codexBin:e.codexBin,codeServerBin:e.codeServerBin,editorRuntime:g.editorRuntime}),C=H9(g,x);c.value=C.status,C.codexDowngradeSkipped&&n("runner.dependency_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,codex_probe_failure:x.codex.failure??null,probe_detail:x.codex.failureDetail??null}),n("runner.dependency_status_reprobed",{runnerId:e.runnerId,codex_available:C.status.codex.available,codex_available_changed:g.codex.available!==C.status.codex.available,probe_detail:x.codex.failureDetail??null})}catch(x){n("runner.dependency_status_reprobe_failed",{runnerId:e.runnerId,message:x instanceof Error?x.message:String(x)})}},_=async()=>{try{let g=await CJ(e.codexBin,e.cwd),x=l.value,C=qI(x,g);l.value=C.status;let P=f.value.hasValidOpenAiAuth;f.value=bx(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobed",{runnerId:e.runnerId,codex_auth_status:C.status,codex_auth_status_changed:x!==C.status,has_valid_openai_auth:f.value.hasValidOpenAiAuth,has_valid_openai_auth_changed:P!==f.value.hasValidOpenAiAuth})}catch(g){let x=l.value,C=qI(x,{status:"probe_failed",transient:!0});l.value=C.status,f.value=bx(),C.downgradeSkipped&&n("runner.codex_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:"probe_failed",message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth}),n("runner.codex_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g),has_valid_openai_auth:f.value.hasValidOpenAiAuth})}},b={value:MC(process.env,{cwd:e.cwd})},S={value:!1},v=async()=>{if(!(e.claudeCodeRunner!==void 0||e.agentReplay!==void 0))try{let g=await Tc({cwd:e.cwd,claudeBin:e.claudeCodeBin}),x=p.value,C=qI(x,g);p.value=C.status,C.downgradeSkipped&&n("runner.claude_code_auth_status_reprobe_downgrade_skipped",{runnerId:e.runnerId,reprobed_status:g.status,probe_detail:g.detail??null}),n("runner.claude_code_auth_status_reprobed",{runnerId:e.runnerId,claude_code_auth_status:C.status,claude_code_auth_status_changed:x!==C.status,probe_detail:g.detail??null})}catch(g){n("runner.claude_code_auth_status_reprobe_failed",{runnerId:e.runnerId,message:g instanceof Error?g.message:String(g)})}},w=g=>{if(S.value)return;let x=MC(process.env,{cwd:e.cwd});x!==b.value&&(b.value=x,S.value=!0,n("runner.claude_code_auth_hint_changed",{runnerId:e.runnerId,claude_code_auth_status:p.value}),v().then(()=>{g()}).finally(()=>{S.value=!1}))},k=e.allowedForwardPorts??[],R=new Set(k),T=new Set,O=nR(e.kandanUrl),E=()=>eEe(O,T),j=VJ(e)?await VEe(n):void 0;j!==void 0&&t.actions.push(()=>j.close());let z=new Map,D=(g,x)=>{z.set(g,{kandanThreadId:x.kandanThreadId??null,codexThreadId:x.codexThreadId??null,channelSlug:x.channelSlug??null,processName:x.processName??null,processIconKey:x.processIconKey??null,localEditor:x.localEditor===!0,agentProvider:x.agentProvider??null,linzumiCliManaged:x.linzumiCliManaged===!0})},U=g=>{z.delete(g)},J=(g,x={})=>{R.add(g),T.add(g),D(g,{processName:x.processName??null,processIconKey:x.processIconKey??null,agentProvider:x.agentProvider??null,linzumiCliManaged:!0})},Z=g=>{T.delete(g),U(g),k.includes(g)||R.delete(g)},H=()=>Array.from(R).sort((g,x)=>g-x).map(g=>{let x=z.get(g);return{port:g,kandanThreadId:x?.kandanThreadId??null,codexThreadId:x?.codexThreadId??null,channelSlug:x?.channelSlug??null,processName:x?.processName??null,processIconKey:x?.processIconKey??null,localEditor:x?.localEditor===!0,agentProvider:x?.agentProvider??null,linzumiCliManaged:x?.linzumiCliManaged===!0||T.has(g)}}),ce=g=>{let{advertisable:x,rejected:C}=cC(g);for(let P of C)n("runner.non_advertisable_cwd_root_dropped",{root:P.root,reason:P.reason}),dm({severity:"warning",key:`runner.non_advertisable_cwd_root:${P.root}`,message:`not advertising ${JSON.stringify(P.root)} as an allowed working-directory root (${P.reason==="home_root"?"it is your home directory":"it is a filesystem root"}). A catch-all root would let the server route any coding job to this machine. Register explicit project folders instead (connect from a project directory or pass --allowed-cwd).`});return x},ye=ce(Ht(e.allowedCwds)),ue={value:[...ye]},pe=e.remoteCodexSandboxRunner??mB({env:process.env,platform:process.platform}),Te=new Map,Pe={value:Ht(e.missingAllowedCwds??[])},I={value:!1},L={value:null},K=(g,x)=>{let C=L.value;if(g.configVersion!==null&&C!==null&&g.configVersion<C){n("runner.config_sync_stale_skipped",{source:x.source,configVersion:g.configVersion,appliedConfigVersion:C});return}let P=xU(g.allowedCwds,e.kandanUrl),$=mR(P,{createMissing:!0});I.value=I.value||K2e($.allowedCwds,[e.cwd,...ye]),ue.value=ce(Ht([...x.includeStartupAllowedCwds?ye:[],...$.allowedCwds])),Pe.value=$.missingAllowedCwds,g.configVersion!==null&&(L.value=g.configVersion),n("runner.config_updated",{source:x.source,configVersion:g.configVersion,allowedCwdCount:ue.value.length,missingAllowedCwdCount:Pe.value.length})},oe=(g,x={})=>{let C=c1e(ue.value,Pe.value);if(!C.changed)return!1;if(ue.value=C.advertised,Pe.value=C.missing,C.dropped.length>0){n("runner.stale_allowed_cwd_roots_deadvertised",{trigger:g,pruned_roots:C.dropped,advertised_root_count:C.advertised.length,...x});for(let P of C.dropped)dm({severity:"warning",key:`runner.allowed_cwd_root_missing:${P}`,message:`allowed working-directory root ${JSON.stringify(P)} no longer exists (deleted, or its disk/volume is unmounted). Not offering it for coding jobs until it is back; remount the volume or restore the folder to resume.`})}if(C.restored.length>0){n("runner.allowed_cwd_roots_readvertised",{trigger:g,restored_roots:C.restored,advertised_root_count:C.advertised.length,...x});for(let P of C.restored)dm({severity:"info",key:`runner.allowed_cwd_root_restored:${P}`,message:`allowed working-directory root ${JSON.stringify(P)} is back; offering it for coding jobs again.`})}return!0},he={value:{status:"disabled"}},X={value:0},re={watcher:void 0,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};t.actions.push(()=>{for(let g of Te.values())g.abort(new Error("local runner stopped"));Te.clear(),he.value.status==="running"&&(he.value.process.kill("SIGINT"),he.value.collaboration?.process.kill("SIGINT")),re.watcher?.close()});let De=()=>Array.from(re.pendingRequests.values()).sort((g,x)=>g.port-x.port).map(g=>{let x=Pi(g.command),C=x?.appName??mf(gr(g));return{requestId:g.requestId,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},summary:`Make ${C} on port ${g.port} accessible on Linzumi?`,reason:$y(gr(g)),...x?.appName===void 0?{}:{processName:x.appName},...x?.iconKey===void 0?{}:{processIconKey:x.iconKey}}}),se,Re,nt=()=>(Re===void 0&&(Re=(e.localVmReadinessProbe??(()=>W8({workspaceLocalVmExecutionFlag:e.vmExecution===!0})))().then(x=>(se=x,x)).catch(x=>{n("vm.local_vm_readiness_probe_failed",{error:x instanceof Error?x.message:String(x)})})),Re),Kn=()=>(nt(),se),Ot=()=>({...d===void 0?{}:{generationOverlap:!0},codexAppServer:u,codexRemoteTui:u,client_message_ids:!0,commander_pipeline:"pipeline",agentProviders:m(),modelProviders:[...dx],codexAuthStatus:l.value,claudeCodeAuthStatus:p.value,hasValidOpenaiAuth:f.value.hasValidOpenAiAuth,openaiAuthMode:f.value.authMode,waferAvailable:!0,defaultAgentProvider:"codex",startInstance:ue.value.length>0,durableClaudeSessionStore:!0,agentSlashCommandCatalog:!0,cloneRepository:!0,managedDevServices:!0,claudeCodeCheckpointRewind:!1,steerTurn:!0,appliedConfigVersion:L.value,allowedCwds:ue.value,missingAllowedCwds:Pe.value,allowedCwdSuggestions:l1e(e.cwd,ue.value),allowedCwdProjects:p1e(ue.value),onboardingSelectedFolderScan:!0,portForwarding:R.size>0,tcpForwarding:!0,linzumiMcp:!0,localVmExecution:e.vmExecution===!0,...(()=>{let g=Kn();return g===void 0?{}:{localVmReadiness:g}})(),remoteCodexExecution:pe!==void 0&&ue.value.length>0,remoteCodexExecutionStatus:pe===void 0?"sandbox_unavailable":ue.value.length>0?"ready":"cwd_unavailable",allowedPorts:Array.from(R).sort((g,x)=>g-x),forwardedPortAttributions:H(),pendingEditorForwardPortRequests:De(),toolStatus:c.value===void 0?null:CP(c.value),editorRuntime:c.value?.editorRuntime===void 0?null:CP(c.value).editorRuntime,...C9(e.editorRuntime,ue.value,he.value)}),V=()=>(oe("capabilities_payload"),Ot()),fe=UI(QIe(e.runnerId),n),Le=d===void 0?fe:C3(fe,()=>d.outgoingDrainActive());t.actions.push(()=>Le.flush());let bn=hN(e.runnerId),hn=gN(bn,g=>n("runner.cwd_stillbirth_state_write_failed",{message:g,statePath:bn}),g=>n("runner.cwd_stillbirth_state_read_failed",{message:g,statePath:bn}));if(e.threadProcess?.role!=="thread"){let g=vN(hn);g.length>0&&n("runner.cwd_stillbirth_counters_reset_on_restart",{cwds:g})}let Je=UI(XIe(e.runnerId),n,{discardSeqsOnFirstEpochAdoption:!0});t.actions.push(()=>Je.flush());let Ye=yq(gq(e.runnerId),n);if(e.threadProcess?.role!=="thread"){let g=id(e.runnerId);OF(g,n),AF({scopeDir:g,ownerPid:process.pid,log:n}).catch(C=>{n("dev_services.reconcile_failed",{message:C instanceof Error?C.message:String(C)})});let x=$F({scopeDir:g,ownerPid:process.pid,log:n});t.actions.push(()=>x.stop())}let Lt=UI(nRe(e.runnerId),n,{fsyncOnWrite:!0});t.actions.push(()=>Lt.flush());let Lr={initial:g=>Lt.initial(g),onAdvance:(g,x)=>Lt.onAdvance(g,x),flush:()=>Lt.flush()},Ho=kB(),yo=g=>{if(g.sourceSeq===void 0)return;let x=ws(tt(),g.channel,g.threadId);mJ({store:Lr,watermarkKey:x,sourceSeq:g.sourceSeq,log:n})&&n("runner.live_worker_source_seq_committed",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:g.sourceSeq}),zs.delete(Go(g.channel,g.threadId,g.sourceSeq))},q=g=>{Ho.clearSeq(ws(tt(),g.channel,g.threadId),g.sourceSeq)},ne=g=>{if(g.sourceSeq===void 0)return!1;let x=ws(tt(),g.channel,g.threadId),C=Lr.initial(x);return CB(C,Ho,x,g.sourceSeq)},ie=MB(),le=cJ(),be=new Map,Ee=new Map,an=!0,Qn=!1,Rt=!1,Xt=()=>an&&!Qn,tt=()=>Vr(e)??"default",jr=()=>e.channelSession?.channelSlug??Ye.list()[0]?.channel,jt=(g,x)=>{let C=tt(),P=`${C}:${g}:${x}`,$=be.get(P);if($!==void 0)return $;let B=SI(CI(C,g,x),n);return be.set(P,B),B},zs=new Map,Go=(g,x,C)=>`${tt()}:${g}:${x}:${C}`,ja=(g,x,C)=>{zs.set(Go(g,x,C.seq),C)},Fa=g=>{let x=jt(g.channel,g.threadId);for(let C of g.sourceSeqs){let P=Go(g.channel,g.threadId,C),$=zs.get(P);if($===void 0){n("runner.live_follow_up_recapture_missing",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C});continue}let B=x.enqueue(C,"replay",Ku($),Date.now());n("runner.live_follow_up_re_enqueued_on_close",{kandanThreadId:g.threadId,channel:g.channel,sourceSeq:C,enqueued:B.accepted}),zs.delete(P)}};o.stopAccepting=()=>{an=!1},o.flushInboundQueues=()=>{for(let g of be.values())g.compact()};let eg=hRe(Le,Je,n,e),gp=Z7({initialToken:e.token,tokenExpiresAt:e.tokenExpiresAt,deps:{renew:async g=>{let x=await uU({kandanUrl:e.kandanUrl,accessToken:g});return x.kind==="renewed"?{kind:"renewed",accessToken:x.token.accessToken,expiresInSeconds:x.token.expiresInSeconds}:{kind:x.kind}},persist:e.tokenExpiresAt===void 0?void 0:({accessToken:g,expiresInSeconds:x})=>{uo({kandanUrl:e.kandanUrl,accessToken:g,expiresInSeconds:x,authFilePath:e.authFilePath})},log:n}}),ve=await Qg(e.kandanUrl,()=>gp.currentToken(),e.socketFactory,{controlCursorStore:Le,controlEpochStore:eg,onOperatorNotice:g=>dm({severity:"warning",audience:"operator",message:g})});gp.start(),t.actions.push(()=>gp.stop()),t.actions.push(()=>ve.close());let ng=fRe(n,Date.now,iK,{onReconnectNeeded:({staleForMs:g,attempt:x})=>{let C=ve.forceReconnect?.("connection_stale_forced_reconnect");return n("kandan.connection_force_reconnect_dispatched",{staleForMs:g,attempt:x,initiated:C??!1}),C??!1},onHardResetNeeded:()=>ve.hardReset?.("connection_stale_hard_reset")??!1,onUnrecoverable:({staleForMs:g})=>{console.error(`Connection to Linzumi was lost and did not recover for ${Math.round(g/6e4)} minutes; exiting so a fresh runner can reconnect. Run \`linzumi connect\` to reconnect.`),process.exit(75)}}),Ie=`local_runner:${e.runnerId}`,za=e.clientId??e.machineId??e.runnerId,yp=AIe(),xp=t3({log:n}),Ou=()=>{xp.drain(g=>ve.pushIfConnected(Ie,"diagnostics:upload",g))},xo=zN({upload:g=>ve.pushIfConnected(Ie,"diagnostics:upload",g),runnerLogFile:e.logFile??vg(),log:n,spool:xp});xo.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),Ou(),ve.onDisconnect?.(g=>{xo.recordLifecycle({event:"disconnect",atIso:new Date().toISOString(),closeCode:g.closeCode,closeReason:g.closeReason,previousSessionDurationMs:g.previousSessionDurationMs,reconnectCount:g.reconnectCount}),xo.flushNow()}),ve.onReconnect(()=>{xo.recordLifecycle({event:"connect",atIso:new Date().toISOString()}),xo.flushNow(),Ou()}),t.actions.push(async()=>{xo.stop(),xo.flushNow()});let _p=()=>({clientName:"kandan-local-codex-runner",clientId:za,machineFingerprint:e.machineFingerprint??null,...u$(e.machineFingerprintV2),runnerPid:process.pid,version:Ut,hostname:yp,cwd:e.cwd,workspace:Vr(e)??null,channel:e.channelSession?.channelSlug??null,capabilities:V(),...d===void 0?{}:{generation:{epoch:d.epoch,overlap:!0}},commander_impl:"ts"}),bp=[],tg=0,N=0,ze={value:void 0};ve.onControl((g,x)=>{ng.recordServerAck();let C=ze.value;if(C===void 0){bp.push({control:g,ack:x});return}C(g,x)});let te=await ve.join(Ie,_p(),{rejoinPayload:_p});if(d!==void 0){let g=d.sendToSupervisor({type:"generation_ready",epoch:d.epoch});n("runner.generation_ready_sent",{epoch:d.epoch,delivered:g})}let Se=RJ(A(te)?.runner_config);switch(Se.type){case"missing":break;case"invalid":throw n("runner.config_join_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:Se.reason}),new Error(`invalid runner_config in Kandan join response: ${Se.reason}`);case"ok":K(Se.config,{includeStartupAllowedCwds:!1,source:"join"});break}let dn=A(A(te)?.compute_node);dn!==void 0&&n("runner.compute_node",{id:h(dn.id),name:h(dn.name),identityQuality:h(dn.identity_quality),resetGeneration:Y(dn.reset_generation)});let Fr=(g,x)=>{let C=qRe(g);C!==void 0&&n("kandan.roster_seeded",{source:x,thread_count:C.threads.length,truncated:C.truncated,skipped_entries:C.skippedEntries,threads:C.threads.map(P=>({kandan_thread_id:P.kandanThreadId,provider_session_key:P.providerSessionKey,channel_id:P.channelId,last_activity_at_ms:P.lastActivityAtMs}))})};Fr(te,"join");let rg=(g,x)=>{let C=A(g)?.fleet_breaker;if(C===void 0)return;let P=WS(C);if(P===void 0){n("runner.fleet_breaker_seed_invalid",{source:x});return}n("runner.fleet_breaker_state",{source:x,outcome:HS(P),state:P.state,fate:P.fate,version:P.version})};rg(te,"join"),ve.onReconnect(g=>{Fr(g.get(Ie),"rejoin"),rg(g.get(Ie),"rejoin");let x=RJ(g.get(Ie)?.runner_config);switch(x.type){case"missing":return;case"invalid":n("runner.config_rejoin_invalid",{runnerId:e.runnerId,kandanUrl:e.kandanUrl,reason:x.reason});return;case"ok":K(x.config,{includeStartupAllowedCwds:!1,source:"rejoin"});return}});let og=zRe(A(te)?.replaced_runners),zr=s===void 0&&e.codexUrl===void 0&&u?await vK(e):void 0;zr!==void 0&&t.actions.push(()=>{zr.stop()});let Et=e.codexUrl??zr?.url;if(zr!==void 0){let g=nR(zr.url);g!==void 0&&J(g,{processName:"Codex app-server",processIconKey:"codex",agentProvider:"codex"})}let Ke=`codex-${jI()}`,Ste=g=>{ve.push(Ie,"local_editor_status",g).catch(x=>{n("kandan.local_editor_status_push_failed",{message:x instanceof Error?x.message:String(x)})})},qa=(g,x)=>{ve.push(Ie,g,x).catch(C=>{n(`kandan.${g}_push_failed`,{message:C instanceof Error?C.message:String(C)})})},kte=VJ(e)?ZEe({log:n,instanceId:Ke,markCommanderManagedForwardPort:J,clearCommanderManagedForwardPort:Z,managedForwardPorts:T,capabilitiesPayload:V,pushForwardPortEvent:qa}):void 0;t.actions.push(()=>kte?.close());let Qw=(g,x)=>{let C=re.approvedTargets.get(g);re.approvedPorts.delete(g),re.approvedTargets.delete(g),R.delete(g),U(g),qa("forward_port_revoked",{instanceId:Ke,port:g,...C===void 0?{}:{pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd}},reason:x,capabilities:Ws(V(),g)})},D6=g=>{re.watcher?.close(),re.watcher=void 0,re.pendingRequests.clear(),re.queuedCandidates.clear();let x=Array.from(re.approvedPorts);for(let C of x)Qw(C,g);return re.dismissedTargets.clear(),x},ig=()=>{if(re.pendingRequests.size>0||re.queuedCandidates.size===0)return;let g=Array.from(re.queuedCandidates.values()).sort((x,C)=>x.port-C.port)[0];g!==void 0&&(re.queuedCandidates.delete(g.port),M6(g),re.pendingRequests.size===0&&ig())},Xw=g=>{let x=pc({requestId:`editor-port-forward-auto-${jI()}`,sourceSeq:0,candidate:g});re.approvedPorts.add(x.port),re.approvedTargets.set(x.port,gr(x)),R.add(x.port);let C=Pi(x.command);D(x.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:x.portKind==="commander_bound"}),qa("forward_port_resolved",{instanceId:Ke,requestId:x.requestId,source:"local_editor",port:x.port,pid:x.pid,command:x.command,...x.cwd===void 0?{}:{cwd:x.cwd},decision:"approve",capabilities:V()})},M6=g=>{let x=ff({candidate:g,threadBound:!0,suppressedPorts:new Set(E()),approvedPorts:re.approvedPorts,approvedTargets:re.approvedTargets,dismissedTargets:re.dismissedTargets,pendingRequests:Array.from(re.pendingRequests.values())});switch(x.type){case"skip":return;case"remember_approved_target":re.approvedTargets.set(x.target.port,x.target);return;case"revoke_and_prompt":Qw(x.revoked.port,x.reason),Xw(g);return;case"replace_pending":re.pendingRequests.delete(x.expired.port),qa("forward_port_resolved",{instanceId:Ke,requestId:x.expired.requestId,source:"local_editor",port:x.expired.port,pid:x.expired.pid,command:x.expired.command,...x.expired.cwd===void 0?{}:{cwd:x.expired.cwd},decision:"expired",reason:x.reason,capabilities:V()}),Xw(x.candidate);return;case"prompt":Xw(g);return}},Cte=g=>{let x=re.queuedCandidates.get(g.port);if(x!==void 0&&Br(x,g)){re.queuedCandidates.delete(g.port);return}let C=re.pendingRequests.get(g.port);if(C!==void 0&&Br(gr(C),g)){re.pendingRequests.delete(g.port),qa("forward_port_revoked",{instanceId:Ke,port:g.port,pid:g.pid,command:g.command,...g.cwd===void 0?{}:{cwd:g.cwd},reason:"listener_exited",capabilities:Ws(V(),g.port)}),ig();return}re.approvedPorts.has(g.port)&&Qw(g.port,"listener_exited")},Tte=g=>{let x=Array.from(re.pendingRequests.values()).find(P=>P.requestId===g.requestId);if(x===void 0)return;if(re.pendingRequests.delete(x.port),g.decision==="deny")return re.dismissedTargets.set(x.port,gr(x)),qa("forward_port_resolved",{instanceId:Ke,requestId:x.requestId,source:"local_editor",port:x.port,pid:x.pid,command:x.command,...x.cwd===void 0?{}:{cwd:x.cwd},decision:"deny",capabilities:V()}),ig(),{instanceId:Ke,ok:!0};re.approvedPorts.add(x.port),re.approvedTargets.set(x.port,gr(x)),R.add(x.port);let C=Pi(x.command);return D(x.port,{localEditor:!0,processName:C?.appName??null,processIconKey:C?.iconKey??null,linzumiCliManaged:x.portKind==="commander_bound"}),qa("forward_port_resolved",{instanceId:Ke,requestId:x.requestId,source:"local_editor",port:x.port,pid:x.pid,command:x.command,...x.cwd===void 0?{}:{cwd:x.cwd},decision:"approve",capabilities:V()}),ig(),{instanceId:Ke,ok:!0,port:x.port}},Pte=g=>{if(g.process.pid===void 0){n("port_forward.local_editor_watch_skipped",{reason:"editor_pid_missing"});return}re.watcher?.close(),re.watcher=lc({rootPid:g.process.pid,onCandidate:M6,onCandidateLost:Cte,onError:x=>{n("port_forward.local_editor_watch_failed",{message:x.message})}})},Yw=g=>{if(g.pendingRequests.size>0||g.queuedCandidates.size===0)return;let x=Array.from(g.queuedCandidates.values()).sort((C,P)=>C.port-P.port)[0];x!==void 0&&(g.queuedCandidates.delete(x.port),A6(g,x).catch(C=>{n("port_forward.claude_code_prompt_failed",{message:C instanceof Error?C.message:String(C)})}))},sg=async(g,x,C,P="wait_for_connection")=>{let $=g.approvedTargets.get(x);g.approvedPorts.delete(x),g.approvedTargets.delete(x),R.delete(x),U(x),await(P==="connected_only"?ve.pushIfConnected:ve.push)(Ie,"forward_port_revoked",{instanceId:Ke,port:x,...$===void 0?{}:{pid:$.pid,command:$.command,...$.cwd===void 0?{}:{cwd:$.cwd}},reason:C,agentProvider:"claude-code",capabilities:Ws(V(),x)})},ev=async(g,x)=>{let C=g.currentSourceSeq()??g.rootSeq;if(C===void 0){n("port_forward.claude_code_auto_approval_skipped",{reason:"source_seq_missing",port:x.port,pid:x.pid});return}let P=pc({requestId:`claude-port-forward-auto-${jI()}`,sourceSeq:C,candidate:x});g.approvedPorts.add(P.port),g.approvedTargets.set(P.port,gr(P)),R.add(P.port);let $=Pi(P.command);D(P.port,{kandanThreadId:g.threadId,codexThreadId:g.sessionId,channelSlug:g.channel,processName:$?.appName??null,processIconKey:$?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:P.portKind==="commander_bound"}),await ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:P.requestId,port:P.port,pid:P.pid,command:P.command,...P.cwd===void 0?{}:{cwd:P.cwd},sourceSeq:P.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:V()})},A6=async(g,x)=>{let C=ff({candidate:x,threadBound:!0,suppressedPorts:new Set(E()),approvedPorts:g.approvedPorts,approvedTargets:g.approvedTargets,dismissedTargets:g.dismissedTargets,pendingRequests:Array.from(g.pendingRequests.values())});switch(C.type){case"skip":return;case"remember_approved_target":g.approvedTargets.set(C.target.port,C.target);return;case"revoke_and_prompt":await sg(g,C.revoked.port,C.reason),await ev(g,x);return;case"replace_pending":g.pendingRequests.delete(C.expired.requestId),await ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:C.expired.requestId,port:C.expired.port,pid:C.expired.pid,command:C.expired.command,...C.expired.cwd===void 0?{}:{cwd:C.expired.cwd},sourceSeq:C.expired.sourceSeq,decision:"expired",reason:C.reason,agentProvider:"claude-code",capabilities:V()}),await si(ve,Ie,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:C.expired.sourceSeq,status:"failed",reason:"port_forward_listener_changed",sessionId:g.sessionId}),await ev(g,C.candidate);return;case"prompt":await ev(g,x);return}},Ite=(g,x)=>{let C=g.queuedCandidates.get(x.port);if(C!==void 0&&Br(C,x)){g.queuedCandidates.delete(x.port),g.approvedPorts.has(x.port)&&sg(g,x.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})});return}let P=Array.from(g.pendingRequests.values()).find($=>Br(gr($),x));if(P!==void 0){g.pendingRequests.delete(P.requestId),ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:P.requestId,port:P.port,pid:P.pid,command:P.command,...P.cwd===void 0?{}:{cwd:P.cwd},sourceSeq:P.sourceSeq,decision:"expired",reason:"listener_exited",agentProvider:"claude-code",capabilities:V()}).then(()=>si(ve,Ie,{workspace:g.workspace,channel:g.channel,threadId:g.threadId,sourceSeq:P.sourceSeq,status:"failed",reason:"port_forward_listener_exited",sessionId:g.sessionId})).then(()=>Yw(g)).catch($=>{n("port_forward.claude_code_expire_failed",{message:$ instanceof Error?$.message:String($)})});return}g.approvedPorts.has(x.port)&&sg(g,x.port,"listener_exited").catch($=>{n("port_forward.claude_code_revoke_failed",{message:$ instanceof Error?$.message:String($)})})},Rte=g=>{for(let x of zu.values()){let C=x.pendingRequests.get(g.requestId);if(C===void 0)continue;if(x.pendingRequests.delete(g.requestId),g.decision==="deny")return x.dismissedTargets.set(C.port,gr(C)),Promise.all([ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"deny",agentProvider:"claude-code",capabilities:V()}),si(ve,Ie,{workspace:x.workspace,channel:x.channel,threadId:x.threadId,sourceSeq:C.sourceSeq,status:"failed",reason:"port_forward_denied",sessionId:x.sessionId})]).then(()=>Yw(x)).catch($=>{n("port_forward.claude_code_deny_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ke,ok:!0,agentProvider:"claude-code"};x.approvedPorts.add(C.port),x.approvedTargets.set(C.port,gr(C)),R.add(C.port);let P=Pi(C.command);return D(C.port,{kandanThreadId:x.threadId,codexThreadId:x.sessionId,channelSlug:x.channel,processName:P?.appName??null,processIconKey:P?.iconKey??null,agentProvider:"claude-code",linzumiCliManaged:C.portKind==="commander_bound"}),Promise.all([ve.push(Ie,"forward_port_resolved",{instanceId:Ke,requestId:C.requestId,port:C.port,pid:C.pid,command:C.command,...C.cwd===void 0?{}:{cwd:C.cwd},sourceSeq:C.sourceSeq,decision:"approve",agentProvider:"claude-code",capabilities:V()}),si(ve,Ie,{workspace:x.workspace,channel:x.channel,threadId:x.threadId,sourceSeq:C.sourceSeq,status:"processed",reason:"Claude Code preview port approved",sessionId:x.sessionId})]).then(()=>Yw(x)).catch($=>{n("port_forward.claude_code_approve_failed",{message:$ instanceof Error?$.message:String($)})}),{instanceId:Ke,ok:!0,agentProvider:"claude-code",port:C.port}}},nv=g=>{if(zu.has(g.sessionId))return;let x=e.portForwardWatcher??(B=>lc({rootPid:process.pid,commanderBoundPids:[process.pid],commanderBoundPorts:Array.from(T),watchPorts:k,extraWatchPorts:Dy(id(e.runnerId)),...B})),C={value:void 0},P;try{P=x({onCandidate:B=>C.value===void 0?void 0:A6(C.value,B),onCandidateLost:B=>C.value===void 0?void 0:Ite(C.value,B),onListenersObserved:B=>yg(`claude-session:${g.sessionId}`,B.filter(ke=>ke.portKind!=="commander_bound")),onError:B=>{n("port_forward.claude_code_watch_failed",{message:B.message,claude_session_id:g.sessionId})}})}catch(B){n("port_forward.claude_code_watch_skipped",{reason:"watch_start_failed",message:B instanceof Error?B.message:String(B),claude_session_id:g.sessionId});return}n("port_forward.claude_code_watch_started",{claude_session_id:g.sessionId,root_pid:e.portForwardWatcher===void 0?process.pid:null,injected:e.portForwardWatcher!==void 0});let $={...g,watcher:P,approvedPorts:new Set,approvedTargets:new Map,dismissedTargets:new Map,pendingRequests:new Map,queuedCandidates:new Map};C.value=$,zu.set(g.sessionId,$)},ag=async(g,x="wait_for_connection")=>{let C=zu.get(g);if(C===void 0)return;let P=Array.from(C.pendingRequests.values()),$=Array.from(C.approvedPorts);C.watcher.close(),C.pendingRequests.clear(),C.queuedCandidates.clear(),C.dismissedTargets.clear(),zu.delete(g),await Promise.all([...P.map(async B=>{try{let ke=x==="connected_only"?ve.pushIfConnected:ve.push;await Promise.all([ke(Ie,"forward_port_resolved",{instanceId:Ke,requestId:B.requestId,port:B.port,pid:B.pid,command:B.command,...B.cwd===void 0?{}:{cwd:B.cwd},sourceSeq:B.sourceSeq,decision:"expired",reason:"session_ended",agentProvider:"claude-code",capabilities:V()}),si(ve,Ie,{workspace:C.workspace,channel:C.channel,threadId:C.threadId,sourceSeq:B.sourceSeq,status:"failed",reason:"port_forward_session_ended",sessionId:C.sessionId,publishMode:x})])}catch(ke){n("port_forward.claude_code_dispose_prompt_failed",{message:ke instanceof Error?ke.message:String(ke)})}}),...$.map(async B=>{try{await sg(C,B,"session_ended",x)}catch(ke){n("port_forward.claude_code_dispose_revoke_failed",{message:ke instanceof Error?ke.message:String(ke)})}})])},Ete=(g,x,C)=>{let P=()=>{if(X.value!==x||he.value.status!=="running"||he.value.process!==g.process)return;he.value={status:"disabled"};let B=D6("editor_exited");R.delete(g.port),T.delete(g.port),g.collaboration!==void 0&&(R.delete(g.collaboration.serverPort),T.delete(g.collaboration.serverPort)),Ste({instanceId:Ke,ok:!0,cwd:g.cwd,capabilities:{...V(),revokedPorts:g.collaboration===void 0?[g.port,...B]:[g.port,g.collaboration.serverPort,...B]}})},$=()=>{C.then(P).catch(B=>{n("kandan.local_editor_initial_status_failed",{message:B instanceof Error?B.message:String(B)})})};g.exited.then($)},Yt=s?.codex??(Et===void 0?void 0:await Ff(Et));if(Yt!==void 0&&t.actions.push(()=>Yt.close()),e.channelSession!==void 0&&Yt===void 0)throw new Error("channel session requires a Codex app-server connection");let $6=IRe({codexUrl:e.codexUrl,threadProcessRole:e.threadProcess?.role,ownsStartedAppServer:zr!==void 0}),tv={value:0},O6={value:[]},Lu=Sm(e),Dte={instanceId:Ke,clientId:za,...Et===void 0?{}:{codexUrl:Et},tuiLaunched:e.launchTui,cwd:e.cwd,hostname:yp,codexThreads:O6.value,workspace:Vr(e)??null,channel:e.channelSession?.channelSlug??null,model:Lu.model??null,reasoningEffort:Lu.reasoningEffort??null,allowPortForwardingByDefault:Lu.allowPortForwardingByDefault??null,fast:e.fast??!1};await ve.push(Ie,"instance_started",Dte),n("runner.instance_started",{runnerId:e.runnerId,hostname:yp,workspace:Vr(e)??null,version:Ut,instanceId:Ke,codexUrl:Et??null,replacedRunners:og});let L6=Vr(e),j6={...L6===void 0?{}:{workspace:L6},launch_source:e.launchSource??"cli"};rl({name:"commander.connected",attributes:j6},{apiUrl:e.kandanUrl}),t.actions.push(()=>rl({name:"commander.exited",attributes:j6},{apiUrl:e.kandanUrl}));let er=e.channelSession===void 0||Yt===void 0?void 0:await vf({kandan:ve,codex:Yt,topic:Ie,instanceId:Ke,leaseEpochFor:g=>le.current(g),escalateEngineHalt:zr===void 0?void 0:()=>{zr.stop()},options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:e.cwd,codexBin:e.codexBin,fetch:e.fetch,fast:e.fast,launchTui:e.launchTui,pipelinePersistDir:hm(),enablePortForwardWatch:!0,initialForwardPorts:k,portForwardWatcher:KJ({rootPid:zr?.process.pid,start:e.portForwardWatcher}),suppressedForwardPorts:E,onForwardPortApproved:(g,x)=>(R.add(g),D(g,{...x,agentProvider:"codex"}),V()),onForwardPortRevoked:g=>(R.delete(g),U(g),V()),onUnroutedThreadMessage:g=>K6(g),onLiveSourceSeqAccepted:yo,onLiveSourceSeqSettled:q,channelSession:e.channelSession},log:n});er!==void 0&&(t.actions.push(()=>er.close()),ve.onReconnect(()=>er.handleKandanReconnect()));let nr=new Map,wp=new Map,Na=new Map,Mte=(g,x)=>{let C=Na.get(g);if(C!==void 0){Na.delete(g);for(let P of C)P.resolve(x)}},dg=(g,x)=>{let C=Na.get(g);if(C!==void 0){Na.delete(g);for(let P of C)P.reject(x)}},is=Cq(),Ate=new Set(["kandan.reconnect_thread_resume_failed","kandan.reconnect_thread_rehydrate_forced","kandan.reconnect_thread_rehydration_ir_emitted","kandan.reconnect_thread_rehydration_failed","kandan.reconnect_thread_rehydrated","kandan.reconnect_thread_unarchive_started","kandan.reconnect_thread_unarchive_resumed","kandan.reconnect_thread_unarchive_failed"]),$te=(g,x)=>{if(!Ate.has(g))return;let C=x.codex_thread_id;typeof C=="string"&&C!==""&&is.note(C,g)},Ote=g=>()=>Tq(zC(),g),rv=Object.assign((g,x)=>{$te(g,x),n(g,x)},{close:()=>n.close()}),ov=g=>Pq({method:"thread/attach",codexThreadId:g.codexThreadId,kandanThreadId:g.kandanThreadId,wait:g.wait,tracker:is,log:n,rolloutBytes:Ote(g.codexThreadId),noProgressTimeoutMs:Ky()}),ss=new Map,ju=new Map,F6=[],iv=g=>{let x=ju.get(g);if(x!==void 0)return x;let C=$Re({sessions:()=>[...g===Yt&&er!==void 0?[er]:[],...Array.from(nr.entries()).filter(([P])=>ss.get(P)===g).map(([,P])=>P)],log:n,onActiveThreadsFailed:$6?P=>{for(let $ of P)F6.push(ve.push(Ie,"session:app_server_lost",{codex_thread_id:$}).then(()=>{},B=>{n("kandan.session_app_server_lost_push_failed",{codex_thread_id:$,message:B instanceof Error?B.message:String(B)})}))}:void 0});return ju.set(g,C),C},qr=new Map,sv=new Map,z6={record:(g,x)=>{let C=sv.get(g),P={approvalPolicy:x.approvalPolicy??C?.approvalPolicy,sandbox:x.sandbox??C?.sandbox};P.approvalPolicy===void 0&&P.sandbox===void 0||sv.set(g,P)},resolve:g=>sv.get(g)},vp=new Map,Fu=new Map,zu=new Map;ve.onReconnect(()=>QRe(nr.values())),ve.onDisconnect?.(()=>{for(let g of qr.values())g.pauseOutbox()}),ve.onReconnect(()=>{for(let[g,x]of qr)n("claude_code.outbox_resumed_on_reconnect",{claude_session_id:g,linzumi_thread_id:x.threadId}),x.resumeOutbox()}),o.interruptInFlightTurns=async()=>{let g=[...qr.entries()].flatMap(([C,P])=>{let $=P.currentSourceSeq();return $===void 0?[]:[{sessionId:C,session:P,sourceSeq:$}]});if(g.length===0)return;let x=new Promise(C=>{setTimeout(C,KRe).unref?.()});await Promise.race([Promise.all(g.map(async({sessionId:C,session:P,sourceSeq:$})=>{n("runner.drain_turn_interrupted_state",{claude_session_id:C,linzumi_thread_id:P.threadId,source_seq:$});try{await si(ve,Ie,{workspace:P.workspace,channel:P.channel,threadId:P.threadId,sourceSeq:$,status:"interrupted",reason:JRe,sessionId:C})}catch(B){n("runner.drain_turn_interrupted_state_push_failed",{linzumi_thread_id:P.threadId,source_seq:$,message:B instanceof Error?B.message:String(B)})}})).then(()=>{}),x])};let q6=async()=>{let g=_q(Ye.list(),Date.now());if(g.length!==0)try{await ve.push(Ie,"session:reannounce_threads",{threads:g.map(x=>({...x}))}),n("kandan.thread_sessions_reannounced",{count:g.length})}catch(x){n("kandan.thread_sessions_reannounce_failed",{count:g.length,message:x instanceof Error?x.message:String(x)})}};ve.onReconnect(()=>q6()),q6(),t.actions.push(async()=>{await Promise.all(Array.from(nr.values(),x=>x.close())),nr.clear(),ss.clear(),Na.clear();let g=[...qr.values()];for(let x of g)try{x.closeInput()}catch(C){n("claude_code.session_input_close_failed",{linzumi_thread_id:x.threadId,message:C instanceof Error?C.message:String(C)})}await Promise.race([Promise.allSettled(g.flatMap(x=>{let C=x.sessionWork();return C===void 0?[]:[C]})),new Promise(x=>{setTimeout(x,1e4).unref?.()})]);for(let x of g)x.abortController.abort(new Error("local runner stopped"));qr.clear();for(let x of vp.values())x.resolve({type:"deny",message:"Claude Code approval cancelled because the runner stopped"});vp.clear();for(let x of Fu.values())x.resolve({type:"deny",message:"Claude Code question cancelled because the runner stopped"});Fu.clear(),await Promise.all(Array.from(zu.keys(),x=>ag(x,"connected_only")))});let gt=new Map;t.actions.push(async()=>{await Promise.all(Array.from(gt.values(),XI)),gt.clear()});let Lte=()=>{for(let[g,x]of Array.from(gt.entries()))W_(x)==="dead"&>.get(g)===x&&(gt.delete(g),n("runner.thread_process_stale_entry_reaped",{kandanThreadId:g,pid:x.kind==="running"?x.handle.processPid??null:null,prior_kind:x.kind}),XI(x).catch(()=>{}))};if(ym(e)){let g=e.threadRunnerReaperIntervalMs??zIe,x=setInterval(Lte,g);x.unref?.(),t.actions.push(()=>clearInterval(x))}let av=new Map,jte=D7(),dv=async(g,x)=>{let C=nr.get(g),P=ss.get(g);if(C===void 0||x!==void 0&&P!==x||P?.isClosed?.()!==!0)return!1;nr.delete(g),ss.delete(g),wp.delete(g),n("runner.thread_session_evicted_dead_worker",{codex_thread_id:g,kandan_thread_id:C.currentKandanThreadId()??null});try{await C.close()}catch($){n("runner.thread_session_evict_close_failed",{codex_thread_id:g,message:$ instanceof Error?$.message:String($)})}return!0},uv=async(g,x={})=>{let C=nr.get(g);if(C!==void 0)return C;let P=wp.get(g);if(P!==void 0){let B=await P;if(B!==void 0)return B}let $=nr.get(g);return $!==void 0||x.waitForSiblingSpawn!==!0?$:await new Promise((B,ke)=>{let tn=Na.get(g)??[];tn.push({resolve:B,reject:ke}),Na.set(g,tn)})},N6=async g=>{let{control:x,cwd:C,codexThreadId:P,sessionCodex:$}=g,B=g.portForwardWatcherRootPid,ke=fn(x,"workspace"),tn=fn(x,"channel"),nn=fn(x,"threadId");if(ke===void 0||tn===void 0||nn===void 0)return;let Cn=nr.get(P);if(Cn!==void 0){let rt=Cn.currentKandanThreadId();if(rt!==void 0&&rt!==nn)throw new cd({codexThreadId:P,ownerKandanThreadId:rt,requestingKandanThreadId:nn});if(!await dv(P))return Cn}let pr=Ye.list().find(rt=>rt.codexThreadId===P&&rt.kandanThreadId!==nn);if(pr!==void 0)throw new cd({codexThreadId:P,ownerKandanThreadId:pr.kandanThreadId,requestingKandanThreadId:nn});let Dn=wp.get(P);if(Dn!==void 0)return await Dn;let _i=(async()=>{is.note(P,"attach_started");let rt=e.channelSession?.listenUser??wo(e.token).actorUsername;if(rt===void 0)throw new Error("missing listen user for Commander-started Codex session");let jn=ml(e,x),tr=ym(e)?async qe=>jte.run(qe.kandanThreadId,async()=>{await dv(qe.codexThreadId);let $n=!1,ot=av.get(qe.kandanThreadId)??(x.modelProvider!==void 0||x.llmProxy!==void 0||x.linzumiAgent!==void 0?{...x.modelProvider===void 0?{}:{modelProvider:x.modelProvider},...x.llmProxy===void 0?{}:{llmProxy:x.llmProxy},...x.linzumiAgent===void 0?{}:{linzumiAgent:x.linzumiAgent}}:void 0),Zo=Y(x.rootSeq);for(let yt of qe.pendingMessages){let qu={type:"reconnect_thread",workspace:ke,channel:tn,threadId:qe.kandanThreadId,codexThreadId:qe.codexThreadId,cwd:C,...x.linzumiContext===void 0?{}:{linzumiContext:x.linzumiContext},...x.type==="reconnect_thread"&&x.sessionRehydrate===!0?{sessionRehydrate:!0}:{},...Zo===void 0?{}:{rootSeq:Zo},...ot?.modelProvider===void 0?{}:{modelProvider:ot.modelProvider},...ot?.llmProxy===void 0?{}:{llmProxy:ot.llmProxy},...ot?.linzumiAgent===void 0?{}:{linzumiAgent:ot.linzumiAgent},sourceSeq:yt.seq,workDescription:yt.body,...jn.model===void 0?{}:{model:jn.model},...jn.reasoningEffort===void 0?{}:{reasoningEffort:jn.reasoningEffort},...jn.sandbox===void 0?{}:{sandbox:jn.sandbox},...jn.approvalPolicy===void 0?{}:{approvalPolicy:jn.approvalPolicy},...jn.fast===void 0?{}:{fast:jn.fast}},o$=async Ja=>{let i$=await ov({codexThreadId:qe.codexThreadId,kandanThreadId:qe.kandanThreadId,wait:uv(qe.codexThreadId,{waitForSiblingSpawn:Ja.waitForSiblingSpawn})});if(i$===void 0)throw new Error(`dead-worker rebuild could not resolve a live session for codex thread ${qe.codexThreadId}`);await i$.startThreadMessageTurn({seq:yt.seq,body:yt.body,actorSlug:yt.actorSlug,actorUserId:yt.actorUserId,boundStartTimeout:!0})};try{if($n)await o$({waitForSiblingSpawn:!1});else{let Ja=await lv(qu,C);BI(Ja)&&(n("runner.thread_dead_worker_rebuild_replay_on_sibling",{codex_thread_id:qe.codexThreadId,kandan_thread_id:qe.kandanThreadId,seq:yt.seq}),await o$({waitForSiblingSpawn:!0}))}$n=!0}catch(Ja){return n("runner.thread_dead_worker_rebuild_failed",{codex_thread_id:qe.codexThreadId,kandan_thread_id:qe.kandanThreadId,seq:yt.seq,message:Ja instanceof Error?Ja.message:String(Ja)}),!1}}return $n}):void 0,Fn=ef()&&m().includes("claude-code")?{targetHarness:"claude_code",execute:async qe=>{let $n;try{$n=await import(new URL("./crossHarnessFailover.mjs",import.meta.url).href)}catch(yt){return{ok:!1,failure:`failover transpiler bridge unavailable: ${yt instanceof Error?yt.message:String(yt)}`}}let ot=await $n.transpileAndSeedClaudeSession({activity:qe.activity,codexThreadId:qe.codexThreadId??"unknown-codex-session",kandanThreadId:qe.kandanThreadId,cwd:C});if(!ot.ok)return{ok:!1,failure:ot.failure};n("runner.cross_harness_failover_seeded",{kandan_thread_id:qe.kandanThreadId,source_session_id:qe.codexThreadId??null,target_session_id:ot.targetSessionId,session_file:ot.sessionFile,transpiled_item_count:ot.transpiledItemCount,redacted_reasoning_count:ot.redactedReasoningCount});let Zo={type:"reconnect_thread",agentProvider:"claude-code",workspace:ke,channel:tn,threadId:qe.kandanThreadId,codexThreadId:ot.targetSessionId,cwd:C,sourceSeq:qe.message.seq,workDescription:qe.message.body,...qe.model===void 0?{}:{model:qe.model}};try{let yt=await KI(void 0,ve,Ie,Ke,e,m(),ue,pe,Te,qr,vp,Fu,nv,ag,Zo,rv,a,void 0,void 0,void 0,qu=>le.current(qu),yo,ja,Fa,void 0,Z6,z6);if(yt.ok===!1)return{ok:!1,failure:`claude dispatch refused: ${JSON.stringify(yt).slice(0,300)}`}}catch(yt){return{ok:!1,failure:`claude dispatch failed: ${yt instanceof Error?yt.message:String(yt)}`}}return{ok:!0,transpiledItemCount:ot.transpiledItemCount,redactedReasoningCount:ot.redactedReasoningCount,targetSessionId:ot.targetSessionId}}}:void 0,fr=x.linzumiAgent?.mcpToken??e.linzumiAgentMcpToken,bi=Y_(x),mr=bi.type==="provider"?bi.runtime:void 0,as=yEe({env:process.env,kandanUrl:e.kandanUrl,workspaceSlug:ke,linzumiAgentMcpToken:fr,ownerUsername:s0(e),modelProviderRuntime:mr}),Ba=await vf({kandan:ve,codex:$,topic:Ie,instanceId:Ke,leaseEpochFor:qe=>le.current(qe),options:{kandanUrl:e.kandanUrl,token:e.token,runnerId:e.runnerId,cwd:C,codexBin:e.codexBin,mcpAvailable:!ca(e)||lR(e),devServicesAvailable:!ca(e),fetch:e.fetch,fast:x.fast??e.fast,launchTui:!1,rebuildOnDeadCodexWorker:tr,crossHarnessFailover:Fn,onUnroutedThreadMessage:qe=>K6(qe),onCodexThreadRebound:({kandanThreadId:qe,oldCodexThreadId:$n,newCodexThreadId:ot})=>{if($n!==void 0&&$n!==ot){let yt=nr.get($n),qu=ss.get($n);yt!==void 0&&(nr.delete($n),nr.set(ot,yt)),qu!==void 0&&(ss.delete($n),ss.set(ot,qu)),is.clear($n)}let Zo=Ye.rebindCodexThread(qe,ot);n("runner.codex_thread_rebind_propagated",{kandan_thread_id:qe,old_codex_thread_id:$n??null,new_codex_thread_id:ot,registry_outcome:Zo.outcome})},onLiveSourceSeqAccepted:yo,onLiveSourceSeqSettled:q,...as===void 0?{}:{cloudAgentTurn:as},pipelinePersistDir:hm(),enablePortForwardWatch:!0,initialForwardPorts:k,portForwardWatcher:KJ({rootPid:B,start:e.portForwardWatcher,commanderBoundPids:g.commanderBoundPids,commanderBoundPorts:g.commanderBoundPorts}),suppressedForwardPorts:E,onForwardPortApproved:(qe,$n)=>(R.add(qe),D(qe,{...$n,agentProvider:"codex"}),V()),onForwardPortRevoked:qe=>(R.delete(qe),U(qe),V()),channelSession:{workspaceSlug:ke,channelSlug:tn,kandanThreadId:nn,rootSeq:Y(x.rootSeq),codexThreadId:P,linzumiContext:x.linzumiContext,listenUser:rt,linzumiAgentSession:x.linzumiAgent!==void 0||e.threadProcess?.role==="thread"&&e.linzumiAgentMcpToken!==void 0,modelProvider:jn.modelProvider,model:jn.model,reasoningEffort:jn.reasoningEffort,sandbox:jn.sandbox,approvalPolicy:jn.approvalPolicy,sandboxedApprovalNeverDefault:jn.sandboxedApprovalNeverDefault,allowPortForwardingByDefault:jn.allowPortForwardingByDefault}},log:n});return nr.set(P,Ba),ss.set(P,$),is.note(P,"attached"),Mte(P,Ba),Ye.upsert({workspace:ke,channel:tn,kandanThreadId:nn,codexThreadId:P,cwd:C,agentProvider:"codex",control:mK({workspaceSlug:ke,channelSlug:tn,kandanThreadId:nn,codexThreadId:P,cwd:C,rootSeq:Y(x.rootSeq),runtimeSettings:jn}),updatedAtMs:Date.now()}),$!==Yt&&$.onNotification(qe=>{tv.value+=1;let $n=qe.params??{};n("codex.notification",lP(qe.method,$n)),iv($).observeNotification(qe.method,$n),G_(Ba,qe.method,$n,n)}),Ba})();wp.set(P,_i);try{let rt=await _i;return rt===void 0&&dg(P,new Error(`attach for codex thread ${P} resolved without a live session`)),rt}catch(rt){let jn=rt instanceof Error?rt.message:String(rt);throw is.fail(P,jn),dg(P,rt instanceof Error?rt:new Error(jn)),rt}finally{wp.delete(P)}},cv=async(g,x,C)=>{if(Yt===void 0)throw new Error("cannot attach a thread session without a codex app-server connection");return await N6({control:g,cwd:x,codexThreadId:C,sessionCodex:Yt,portForwardWatcherRootPid:zr?.process.pid})},U6=g=>{let x=jt(g.channel,g.kandanThreadId),C=ws(tt(),g.channel,g.kandanThreadId),P=Lr.initial(C),$=Ee.get(g.kandanThreadId)??[],B=fm(P,$)??P,ke="";try{ke=Od(nc(hm(),Sf({workspaceSlug:g.workspace,channelSlug:g.channel},g.kandanThreadId,Ke)),"utf8")}catch{}return{pendingInboundSeqs:x.entries().map(tn=>tn.sourceSeq),ackedInboundSeqs:x.ackedEntries().map(tn=>tn.sourceSeq),inboundHighWaterSeq:x.highWaterSourceSeq(),appliedFloorSeq:B,outboxTurnSignals:RB(ke)}},Fte=g=>{try{return II(U6(g),{nowMs:Date.now()}).unfinished}catch(x){return n("runner.resume_scan_inspect_failed",{thread_id:g.kandanThreadId,phase:"rehydration_retire_guard",message:x instanceof Error?x.message:String(x)}),!0}},B6=(async()=>{let g=Ye.list();if(g.length===0)return;let x=await xq({records:g,nowMs:Date.now(),maxAgeMs:Vk,pendingDurableRowCount:C=>Yg(nc(hm(),Sf({workspaceSlug:C.workspace,channelSlug:C.channel},C.kandanThreadId,Ke)),n).pendingEntries.length,hasUnfinishedWork:Fte,attach:async C=>{if(t.closePromise!==void 0)return n("session_registry.rehydrate_aborted_shutdown",{thread_id:C.kandanThreadId}),"failed";let P=Jr(C.cwd,ue.value);return P.ok?await cv(sl(C),P.cwd,C.codexThreadId)!==void 0?"attached":"failed":(n("session_registry.rehydrate_cwd_rejected",{thread_id:C.kandanThreadId,cwd:C.cwd,reason:P.reason}),"retire")},retire:C=>Ye.remove(C.kandanThreadId),log:n});n("session_registry.rehydrate_complete",{records:g.length,rehydrated:x.rehydrated,retired_drained:x.retiredDrained,retired_stale:x.retiredStale,retired_unattachable:x.retiredUnattachable,kept_unfinished:x.keptUnfinished,failed:x.failed})})().catch(g=>{n("session_registry.rehydrate_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>B6);let lv=async(g,x)=>{if(e.threadProcess?.role==="thread")return;let C=_m(g);if(C.type!=="ok"||C.provider!=="codex")return;let P=fn(g,"workspace"),$=fn(g,"channel"),B=fn(g,"threadId");if(P===void 0||$===void 0||B===void 0)return;let ke=Y_(g);(g.modelProvider!==void 0||g.llmProxy!==void 0||g.linzumiAgent!==void 0)&&av.set(B,{...g.modelProvider===void 0?{}:{modelProvider:g.modelProvider},...g.llmProxy===void 0?{}:{llmProxy:g.llmProxy},...g.linzumiAgent===void 0?{}:{linzumiAgent:g.linzumiAgent}});let tn=dK(ke);if(tn!==void 0)return{instanceId:Ke,controlType:g.type,ok:!1,error:tn,kandanThreadId:B,cwd:x};let nn=gt.get(B);if(nn!==void 0){if(W_(nn)!=="dead")return{instanceId:Ke,controlType:g.type,ok:!0,delegated:!0,threadProcess:"already_started",kandanThreadId:B,cwd:x};n("runner.thread_process_stale_entry_evicted",{kandanThreadId:B,codex_thread_id:g.type==="reconnect_thread"?h(g.codexThreadId)??null:null,prior_kind:nn.kind,pid:nn.kind==="running"?nn.handle.processPid??null:null,control_type:g.type}),gt.get(B)===nn&>.delete(B),XI(nn).catch(()=>{})}let Cn=kK(e.allowedCwds);Cn.missing.length>0&&n("runner.stale_allowed_cwd_roots_pruned",{kandanThreadId:B,control_type:g.type,pruned_roots:Cn.missing,remaining_root_count:Cn.existing.length}),oe("thread_process_spawn",{kandanThreadId:B})&&Ns();let pr=_N(hn,x);if(pr!==void 0)throw n("runner.cwd_stillbirth_circuit_open_start_refused",{kandanThreadId:B,cwd:x,control_type:g.type,consecutive_stillbirths:pr.count,last_stillbirth_at:pr.lastAt}),new Error(kN(x,pr));let Dn=e.spawnThreadRunner??p2e,_i=_K(e);n("runner.thread_process_starting",{kandanThreadId:B,cwd:x,readyTimeoutMs:_i});let rt=XEe({options:Cn.missing.length>0?{...e,allowedCwds:Cn.existing}:e,control:g,cwd:x,workspaceSlug:P,channelSlug:$,kandanThreadId:B});if(ca(rt)){let Fn=await nt(),fr=YIe(e.runnerId),bi=await e1e({dependencyStatusRef:c,connectTimeStatus:e.dependencyStatus,machineVmUnready:Fn!==void 0&&!Fn.ready,cwd:x});bi.confirmation!=="not_needed"&&n("runner.vm_preflight_host_codex_reverified",{kandanThreadId:B,confirmed_available:bi.hostCodexAvailable,probe_failure:bi.probedCodex?.failure??null,probe_detail:bi.probedCodex?.failureDetail??null});let mr=X2e({vmRouted:!0,readiness:Fn,hostCodexAvailable:bi.hostCodexAvailable,hostCodexProbeDetail:bi.probedCodex?.failureDetail,explicitLocalVmOptIn:rt.executionMode==="local_vm",freshStart:g.type==="start_instance",lastNoticedReadinessFingerprint:eRe(fr,n)});if(mr.route==="vm"&&Fn?.ready===!0&&TJ(fr,void 0,n),mr.route==="host_fallback"){if(rt={...rt,executionMode:"raw"},n("runner.local_vm_unready_host_fallback",{kandanThreadId:B,control_type:g.type,blockers:[...mr.blockers],notice_posted:mr.postThreadNotice,readiness_fingerprint:mr.readinessFingerprint}),mr.postThreadNotice)try{await ve.push(Ie,"session:post_thread_message",{workspace:P,channel:$,thread_id:B,body:mr.notice,client_message_id:`local-vm-host-fallback-${B}`,payload:{metadata:{local_codex_runner:{event_type:"local_vm_host_fallback_notice"}}}}),TJ(fr,mr.readinessFingerprint,n)}catch(as){n("runner.local_vm_unready_notice_post_failed",{kandanThreadId:B,message:as instanceof Error?as.message:String(as)})}}else if(mr.route==="fail_loud")throw n("runner.local_vm_unready_start_refused",{kandanThreadId:B,control_type:g.type,blockers:[...mr.blockers]}),new Error(mr.reason)}let jn={kind:"starting",promise:_2e(Dn(rt),{kandanThreadId:B,timeoutMs:_i})};gt.set(B,jn);let tr;try{tr=await jn.promise}catch(Fn){if(gt.get(B)===jn&>.delete(B),n("runner.thread_process_start_failed",{kandanThreadId:B,cwd:x,message:Fn instanceof Error?Fn.message:String(Fn)}),oe("thread_process_start_failed",{kandanThreadId:B})&&Ns(),HJ(Fn)){let fr=yN(hn,x,Fn,Date.now());n("runner.cwd_stillbirth_recorded",{kandanThreadId:B,cwd:x,consecutive_stillbirths:fr.count,circuit_open:fr.tripped})}throw Fn}xN(hn,x)&&n("runner.cwd_stillbirth_counter_cleared",{kandanThreadId:B,cwd:x});for(let Fn of tr.commanderManagedPorts??[])J(Fn.port,{processName:Fn.processName,processIconKey:Fn.processIconKey,agentProvider:Fn.agentProvider});try{let Fn=tr.codex,fr=a0(()=>Fn.close());tr.onExit?.(fr),tr.onExit?.(()=>{t.closePromise===void 0&&iv(Fn).failActiveTurns("codex thread worker exited")}),tr.onExit?.(()=>{Ho.clearThread(ws(tt(),$,B))});let mr={kind:"running",handle:{...tr,close:async()=>{fr(),await tr.close()}}};gt.get(B)===jn&>.set(B,mr),tr.onExit?.(()=>{gt.get(B)===mr&>.delete(B)}),tr.onExit?.(()=>{if(t.closePromise===void 0)for(let[qe,$n]of Array.from(ss.entries()))$n===Fn&&dv(qe,Fn)}),n("runner.thread_process_started",{kandanThreadId:B,cwd:x});let as=(qe,$n,ot)=>N6({control:qe,cwd:$n,codexThreadId:ot,sessionCodex:Fn,portForwardWatcherRootPid:tr.processPid,commanderBoundPids:(tr.commanderManagedPorts??[]).flatMap(Zo=>Zo.pid===void 0?[]:[Zo.pid]),commanderBoundPorts:(tr.commanderManagedPorts??[]).map(Zo=>Zo.port)}),Ba=async qe=>{if(qe!==void 0&&qe.ok!==!1)return qe;let $n=gt.get(B);return($n===jn||$n?.kind==="running")&>.delete(B),await($n?.kind==="running"?$n.handle.close():tr.close()).catch(()=>{}),qe};switch(g.type){case"start_instance":{let qe=await cK({codex:Fn,kandan:ve,topic:Ie,control:g,options:e,instanceId:Ke,cwd:x,matchedRoot:x,onStartedThread:as,setStartupStage:()=>{},setStartedCodexThreadId:()=>{}});return await Ba(qe.controlResponse)}case"reconnect_thread":return await Ba(await KI(Fn,ve,Ie,Ke,e,m(),ue,pe,Te,qr,vp,Fu,nv,ag,g,rv,a,as,void 0,void 0,qe=>le.current(qe),yo,ja,Fa,ne))}}catch(Fn){let fr=gt.get(B);throw(fr===jn||fr?.kind==="running")&>.delete(B),await(fr?.kind==="running"?fr.handle.close():tr.close()).catch(()=>{}),Fn}},Sp=new Map,pv=new Map,J6=async(g,x,C)=>{try{n("runner.spawn_on_miss_replay_on_sibling",{kandanThreadId:g.threadId??null,codex_thread_id:x.codexThreadId,seq:g.seq});let P=await ov({codexThreadId:x.codexThreadId,kandanThreadId:g.threadId,wait:uv(x.codexThreadId,{waitForSiblingSpawn:!0})});if(P===void 0)throw new Error(`spawn-on-miss could not resolve a live session for codex thread ${x.codexThreadId}`);let $=P.currentKandanThreadId();if(g.threadId!==void 0&&$!==void 0&&$!==g.threadId)throw new cd({codexThreadId:x.codexThreadId,ownerKandanThreadId:$,requestingKandanThreadId:g.threadId});return await P.startThreadMessageTurn({seq:g.seq,body:g.body,actorSlug:g.actorSlug,actorUserId:g.actorUserId,attachments:g.attachments,boundStartTimeout:!0}),"dispatched"}catch(P){return n("runner.spawn_on_miss_failed",{kandanThreadId:g.threadId??null,codex_thread_id:x.codexThreadId,seq:g.seq,message:P instanceof Error?P.message:String(P)}),await qs(C,"failed",`could not resume the thread's coding session: ${P instanceof Error?P.message:String(P)}`,x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}},K6=async g=>{let x=g.threadId;if(!ym(e)||x===void 0)return"ignored";let C=`${x}:${g.seq}`,P=pv.get(C);if(P!==void 0){let B=await P;return B==="spawned"?"spawned_deduped":B}let $=zte(g,x);pv.set(C,$);try{return await $}finally{pv.delete(C)}},zte=async(g,x)=>{let C=gt.get(x);if((C===void 0?void 0:W_(C))==="live")return"ignored";let $=Ye.list().find(Cn=>Cn.kandanThreadId===x);if($===void 0){let Cn=jr();if(Cn===void 0||!Xt())return"ignored";let Dn=jt(Cn,x).enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Ku(g),Date.now());return n("runner.spawn_on_miss_enqueued_without_local_record",{kandanThreadId:x,channel:Cn,seq:g.seq,enqueued:Dn.accepted}),await Wte(Cn,g),"spawned"}let B=$.channel,ke=ws(tt(),B,x),tn=jt(B,x);if(!Xt()){let Cn=tn.enqueue(g.seq,g.localRunnerEventType===void 0?"live":"replay",Ku(g),Date.now());return n("runner.spawn_on_miss_drain_in_progress",{kandanThreadId:x,seq:g.seq,enqueued:Cn.accepted}),"spawned"}return await gJ({queue:tn,store:Lr,lock:ie,leases:le,threadId:x,watermarkKey:ke,sourceSeq:g.seq,kind:g.localRunnerEventType===void 0?"live":"replay",payload:Ku(g),leaseEpoch:pJ(g),dispatch:async(Cn,pr)=>{let Dn=Kv(pr);return Dn===void 0?(n("runner.spawn_on_miss_bad_payload",{kandanThreadId:x,seq:Cn}),"permanent_failed"):await Q6(Dn,$)},serverRows:Ee.get(x)??[],onDeadLetter:Y6($),inFlightGuard:Ho,log:n})==="ignored"?"ignored":"spawned"},ug=async(g,x=[])=>{if(!Xt())return;let C=g.kandanThreadId,P=g.channel,$=ws(tt(),P,C),B=jt(P,C);await yJ({queue:B,store:Lr,lock:ie,threadId:C,watermarkKey:$,serverRows:x,log:n,onlyDispatchUnattempted:x.length===0,onDeadLetter:Y6(g),inFlightGuard:Ho,onTornTailUnrecoverable:async ke=>{let tn=sl(g);await qs(tn,"failed","a message may have been lost during an unexpected shutdown (power loss). Please resend your last message to continue this job.",g.codexThreadId,{failureClass:"resume_torn_tail"}),n("runner.inbound_torn_tail_resend_published",{kandanThreadId:ke})},dispatch:async(ke,tn)=>{let nn=Kv(tn);return nn===void 0?(n("runner.inbound_drain_bad_payload",{kandanThreadId:C,seq:ke}),"permanent_failed"):await Q6(nn,g)}})},qte=async(g,x)=>{if(x!==void 0&&x.ok===!1||!Xt())return;let C=Ye.list().find($=>$.kandanThreadId===g);if(C===void 0)return;let P=jt(C.channel,g);P.entries().length!==0&&(n("runner.inbound_drain_after_spawn",{kandanThreadId:g,channel:C.channel,pending:P.entries().length}),await ug(C,Ee.get(g)??[]).catch($=>{n("runner.inbound_drain_after_spawn_failed",{kandanThreadId:g,message:$ instanceof Error?$.message:String($)})}))},Nte=async(g,x)=>{let C=await lv(g,x),P=fn(g,"threadId");return P!==void 0&&await qte(P,C),g.type==="reconnect_thread"&&BI(C)&&C!==void 0?await Ute(g,C):C},Ute=async(g,x)=>{let C=co(g.workDescription),P=Y(g.sourceSeq)??Y(g.rootSeq),$=fn(g,"threadId"),B=fn(g,"channel"),ke=h(g.codexThreadId);if(C===void 0||P===void 0||$===void 0||ke===void 0)return x;if(B===void 0)n("runner.reconnect_follow_up_missing_channel",{kandanThreadId:$,codex_thread_id:ke,source_seq:P});else if(ne({channel:B,threadId:$,sourceSeq:P}))return n("runner.reconnect_follow_up_already_applied",{kandanThreadId:$,codex_thread_id:ke,source_seq:P}),{...x,followUp:"duplicate",sourceSeq:P};try{let tn=await ov({codexThreadId:ke,kandanThreadId:$,wait:uv(ke,{waitForSiblingSpawn:!0})});if(tn===void 0)throw new Error(`no live session attached for codex thread ${ke}`);let nn=tn.currentKandanThreadId();if(nn!==void 0&&nn!==$)throw new cd({codexThreadId:ke,ownerKandanThreadId:nn,requestingKandanThreadId:$});let Cn=wo(e.token),pr=await tn.startThreadMessageTurn({seq:P,body:C,actorSlug:Cn.actorUsername,actorUserId:Cn.actorUserId,attachments:Qo(Ne(g.attachments)??[]),boundStartTimeout:!0,dedupBySeq:!0});return n("runner.reconnect_follow_up_routed_to_live_worker",{kandanThreadId:$,codex_thread_id:ke,source_seq:P,outcome:pr}),{...x,followUp:pr,sourceSeq:P}}catch(tn){let nn=tn instanceof Error?tn.message:String(tn);return n("runner.reconnect_follow_up_route_failed",{kandanThreadId:$,codex_thread_id:ke,source_seq:P,message:nn}),{...x,followUp:"route_failed",followUpError:nn,sourceSeq:P}}},V6=g=>{let x=new Map,C=TB(g);for(let P of C){P.leaseEpoch!==void 0&&le.adopt(P.threadId,P.leaseEpoch)&&n("runner.resume_reconcile_lease_adopted",{kandanThreadId:P.threadId,leaseEpoch:P.leaseEpoch});let $=PB(P);x.set(P.threadId,$),Ee.set(P.threadId,$)}return C.length>0&&n("runner.resume_reconcile_consumed",{threadCount:C.length}),x},W6=async()=>{let g=kI(),x;try{x=eK(g).filter($=>$.endsWith(".log"))}catch($){if($?.code==="ENOENT")return;n("runner.inbound_orphan_scan_failed",{message:$ instanceof Error?$.message:String($)});return}let C=tt(),P=new Set(Ye.list().map($=>CI(C,$.channel,$.kandanThreadId)));for(let $ of x){let B=vt(g,$);if(!P.has(B))try{let ke=SI(B,n),tn=ke.entries();if(tn.length===0)continue;for(let nn of tn)ke.deadLetter(nn.sourceSeq);ke.compact(),n("runner.inbound_orphan_dead_lettered",{path:B,strandedCount:tn.length,strandedSeqs:tn.map(nn=>nn.sourceSeq)})}catch(ke){n("runner.inbound_orphan_drain_failed",{path:B,message:ke instanceof Error?ke.message:String(ke)})}}},H6=async g=>{if(!Xt())return;let x=Ye.list();await Promise.all(x.map(C=>ug(C,g?.get(C.kandanThreadId)??[]).catch(P=>{n("runner.inbound_drain_failed",{kandanThreadId:C.kandanThreadId,message:P instanceof Error?P.message:String(P)})}))),await W6()},Bte=g=>g==="accepted_never_framed"?"this message was accepted but a runner restart killed it before it ran. Resend it (or press retry) to run it now.":"interrupted by a runner restart before it finished. Resend your last message (or press retry) to continue this job.",Jte=async g=>{let x=Date.now()+g;for(;;){if(t.closePromise!==void 0)return;let C=x-Date.now();if(C<=0)return;await new Promise(P=>setTimeout(P,Math.min(500,C)))}},Kte=async()=>{!Xt()||t.closePromise!==void 0||(await EB({records:Ye.list(),threadId:g=>g.kandanThreadId,inspect:U6,resumePendingInbound:async g=>(await ug(g,Ee.get(g.kandanThreadId)??[]),jt(g.channel,g.kandanThreadId).entries().length===0?"clear":"retry"),respawnWorker:async g=>{if(t.closePromise!==void 0)return!1;let x=Jr(g.cwd,ue.value);return x.ok?await cv(sl(g),x.cwd,g.codexThreadId)!==void 0:(n("runner.resume_respawn_cwd_rejected",{thread_id:g.kandanThreadId,cwd:g.cwd,reason:x.reason}),!1)},seqInFlight:(g,x)=>Ho.has(ws(tt(),g.channel,g.kandanThreadId),x),publishInterruptedTurnState:async(g,x,C)=>{await qs({...sl(g),sourceSeq:x},"failed",Bte(C),g.codexThreadId,{failureClass:"resurrection_interrupted"})},shuttingDown:()=>t.closePromise!==void 0||!Xt(),sleep:Jte,log:n}),await W6())};V6(A(te)?.resume_reconcile);let Vte=B6.then(()=>Kte()).catch(g=>{n("runner.inbound_boot_drain_failed",{message:g instanceof Error?g.message:String(g)})});t.actions.push(()=>Vte),ve.onReconnect(g=>{let x=g.get(Ie),C=V6(x===void 0?void 0:x.resume_reconcile);H6(C).catch(P=>{n("runner.inbound_rejoin_drain_failed",{message:P instanceof Error?P.message:String(P)})})});let Ua=new Map,G6=(g,x)=>`${g}:${x}`,Z6={windowMs:Of(process.env),recordWedge:(g,x)=>{let C=G6(g,x),P=(Ua.get(C)??0)+1;if(Ua.delete(C),Ua.size>=256){let $=Ua.keys().next().value;$!==void 0&&Ua.delete($)}return Ua.set(C,P),P},clear:(g,x)=>{Ua.delete(G6(g,x))},killAndRespawn:async({threadId:g,claudeSessionId:x,reason:C})=>{let P=vs(qr,[x],[g]);if(P!==void 0){n("claude_code.dispatch_supervisor_killing_session",{linzumi_thread_id:g,claude_session_id:x,reason:C}),P.abortController.abort(new Error(C));let B=P.sessionWork();B!==void 0&&await Promise.race([B.catch(()=>{}),new Promise(ke=>{setTimeout(ke,1e4).unref?.()})])}let $=Ye.list().find(B=>B.kandanThreadId===g);return $===void 0?(n("claude_code.dispatch_supervisor_no_registry_record",{linzumi_thread_id:g,claude_session_id:x}),"no_replay_path"):(await ug($,Ee.get(g)??[]),"respawn_dispatched")}},Q6=async(g,x)=>{let C=x.kandanThreadId,P=sl(x),$=av.get(C),B={...P,sourceSeq:g.seq,workDescription:g.body,...g.attachments.length===0?{}:{attachments:Eg(g.attachments)},...$?.modelProvider===void 0?{}:{modelProvider:$.modelProvider},...$?.llmProxy===void 0?{}:{llmProxy:$.llmProxy},...$?.linzumiAgent===void 0?{}:{linzumiAgent:$.linzumiAgent}},ke=Jr(x.cwd,ue.value);if(!ke.ok)return n("runner.spawn_on_miss_cwd_rejected",{kandanThreadId:C,cwd:x.cwd,reason:ke.reason,seq:g.seq}),await qs(B,"failed",`could not resume the thread's coding session: working directory ${x.cwd} is not an allowed root (${ke.reason})`,x.codexThreadId,{failureClass:"resume_cwd_not_allowed"}),"permanent_failed";let tn=ke.cwd,nn=Sp.get(C);if(nn!==void 0)return n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:x.codexThreadId,provider_session_key:x.codexThreadId,seq:g.seq,decision:"await_in_flight_spawn"}),await nn==="no_session"?(await qs(B,"failed","could not resume the thread's coding session: no live session after spawn",x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"):await J6(g,x,B);n("runner.spawn_on_miss_resuming",{kandanThreadId:C,codex_thread_id:x.codexThreadId,provider_session_key:x.codexThreadId,seq:g.seq,decision:"spawned_resume"}),is.note(x.codexThreadId,"spawn_requested");let Cn=()=>{},pr=new Promise(Dn=>{Cn=Dn});Sp.set(C,pr);try{let Dn=await lv(B,tn);if(BI(Dn))return Cn("spawned"),await J6(g,x,B);if(Dn===void 0||Dn.ok===!1){Cn("no_session");let _i=Dn!==void 0&&typeof Dn.error=="string"?Dn.error:"the thread could not be resumed (no resumable codex session)";return is.fail(x.codexThreadId,_i),dg(x.codexThreadId,new Error(_i)),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:x.codexThreadId,seq:g.seq,message:_i}),await qs(B,"failed",`could not resume the thread's coding session: ${_i}`,x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}return Cn("spawned"),"dispatched"}catch(Dn){return Cn("no_session"),is.fail(x.codexThreadId,Dn instanceof Error?Dn.message:String(Dn)),dg(x.codexThreadId,Dn instanceof Error?Dn:new Error(String(Dn))),n("runner.spawn_on_miss_failed",{kandanThreadId:C,codex_thread_id:x.codexThreadId,seq:g.seq,message:Dn instanceof Error?Dn.message:String(Dn)}),await qs(B,"failed",`could not resume the thread's coding session: ${Dn instanceof Error?Dn.message:String(Dn)}`,x.codexThreadId,{failureClass:"resume_transient"}),"transient_failed"}finally{Cn("spawned"),Sp.get(C)===pr&&Sp.delete(C)}},qs=async(g,x,C,P,$={})=>{let B=ua(g,x,C,{instanceId:Ke,codexThreadId:P,...Xu($.failureClass)});if(B!==void 0)try{await ve.push(Ie,"message_state",B)}catch(ke){n("runner.spawn_on_miss_state_push_failed",{thread_id:fn(g,"threadId")??null,status:x,message:ke instanceof Error?ke.message:String(ke)})}},X6=async(g,x)=>{let{reason:C,failureClass:P}=s2e(x),$=ua(g,"failed",C,{instanceId:Ke,...Xu(P)});if($===void 0){n("runner.stillborn_worker_failed_state_unpublishable",{thread_id:fn(g,"threadId")??null,control_type:g.type,reason:C,cause:"missing_source_seq"});return}try{await ve.push(Ie,"message_state",$),n("runner.stillborn_worker_failed_state_published",{thread_id:fn(g,"threadId")??null,control_type:g.type,reason:C})}catch(B){n("runner.stillborn_worker_failed_state_push_failed",{thread_id:fn(g,"threadId")??null,control_type:g.type,message:B instanceof Error?B.message:String(B)})}},Wte=async(g,x)=>{if(x.threadId===void 0)return;let C={workspace:tt(),channel:g,thread_id:x.threadId,instance_id:Ke,seq:x.seq,status:"queued",reason:"queued for durable resume"};try{await ve.push(Ie,"message_state",C)}catch(P){n("runner.spawn_on_miss_state_push_failed",{thread_id:x.threadId,status:"queued",message:P instanceof Error?P.message:String(P)})}},cg=[],fv=zB(process.env),Hte=async g=>{try{let x=fn(g,"threadId"),C=JEe({control:g,hasRegistryRecord:x!==void 0&&Ye.list().some(B=>B.kandanThreadId===x),runtimeSettings:ml(e,g),identity:wo(e.token),nowMs:Date.now()});if(C===void 0)return!1;let P=ua(g,"queued",jB,{instanceId:Ke,...C.codexThreadId===void 0?{}:{codexThreadId:C.codexThreadId}}),$=await KEe({plan:C,queuedStatePayload:P,queue:jt(C.channel,C.threadId),upsertRegistryRecord:B=>Ye.upsert(B),pushQueuedState:async B=>{await ve.push(Ie,"message_state",B)},trackHeld:B=>{cg.push({control:g,...B})},log:n,nowMs:Date.now()});return $.held?(n("runner.update_restart_drain_start_held",{control_type:g.type,thread_id:C.threadId,source_seq:C.sourceSeq,enqueued:$.enqueuedFresh,registry_record_synthesized:C.registryRecord!==void 0,max_wait_ms:fv}),!0):!1}catch(x){return n("runner.update_restart_drain_hold_failed",{control_type:g.type,thread_id:fn(g,"threadId")??null,message:x instanceof Error?x.message:String(x)}),!1}},Gte=async()=>{let g=Date.now();for(let x of[...cg]){if(g-x.heldAtMs<fv)continue;let C=cg.indexOf(x);C!==-1&&cg.splice(C,1);let P=jt(x.channel,x.threadId);P.entries().find(B=>B.sourceSeq===x.sourceSeq)!==void 0&&(P.deadLetter(x.sourceSeq),n("runner.update_restart_drain_held_turn_expired",{thread_id:x.threadId,source_seq:x.sourceSeq,held_for_ms:g-x.heldAtMs,max_wait_ms:fv}),await X6(x.control,new Error(DI)))}},kp,Zte=()=>{kp===void 0&&(kp=setInterval(()=>{Gte().catch(g=>{n("runner.update_restart_drain_held_sweep_failed",{message:g instanceof Error?g.message:String(g)})})},FB))};t.actions.push(()=>{kp!==void 0&&(clearInterval(kp),kp=void 0)});let Y6=g=>async({sourceSeq:x,reason:C,attempts:P,alreadyPublished:$})=>{n("runner.inbound_dead_lettered",{kandanThreadId:g.kandanThreadId,seq:x,reason:C,attempts:P,alreadyPublished:$}),!$&&await qs(sl(g),"failed",UEe(C),g.codexThreadId,{failureClass:BEe(C)})},mv=()=>{if(er!==void 0)return!1;for(let g of ju.values())if(g.activeTurnCount()>0)return!1;for(let g of qr.values())if(g.hasActiveTurn())return!1;for(let g of gt.values())if(g.kind==="starting")return!1;return!(Sp.size>0||Te.size>0)},Qte=()=>{if(!mv())return!1;for(let g of be.values())if(g.entries().length>0)return!1;return!0},e$=R7(process.env),hv=E7({currentVersion:Ut,strategy:T7({env:process.env,entrypointPath:process.argv[1]}),isIdle:Qte,...e$===void 0?{}:{drain:{timing:e$,hooks:{begin:()=>{Qn=!0},end:({redispatchHeldWork:g})=>{Qn=!1,g&&H6().catch(x=>{n("runner.update_drain_requeue_failed",{message:x instanceof Error?x.message:String(x)})})},isQuiescent:mv,isEligible:()=>er===void 0}}},performRestart:I7({currentVersion:Ut,argv:process.argv.slice(2),cwd:e.cwd,close:r,exit:g=>process.exit(g),log:n}),log:n,restartAttemptStore:z_(P7())});t.actions.push(()=>hv.stop()),i.beginDraining=()=>{if(d?.outgoingDrainActive()===!0){n("runner.generation_outgoing_gate_open",{pinned:d.outgoingPins.size()});return}Rt=!0,Qn=!0,Zte()},i.onTurnCompleted=g=>{if(!(d===void 0||!d.outgoingDrainActive())&&d.outgoingPins.release(g.threadId)){let x=d.sendToSupervisor({type:"generation_pin_released",epoch:d.epoch,threadId:g.threadId});n("runner.generation_pin_released_sent",{threadId:g.threadId,remaining:d.outgoingPins.size(),delivered:x})}},i.isQuiescent=mv,i.isWaitEligible=()=>er===void 0,i.inFlightTurns=()=>[...Array.from(ju.values()).flatMap(g=>g.activeTurns().map(x=>({threadId:x.threadId,turnId:x.turnId,engine:"codex"}))),...Array.from(qr.values()).filter(g=>g.hasActiveTurn()).map(g=>({threadId:g.threadId,engine:"claude_code"}))],i.lastActivityAtMs=()=>{let g;for(let x of ju.values()){let C=x.lastActivityAtMs();C!==void 0&&(g===void 0||C>g)&&(g=C)}for(let x of qr.values()){let C=x.lastSdkActivityMs();C>0&&(g===void 0||C>g)&&(g=C)}return g},i.publishForcedKillTerminalStates=g=>{n("runner.drain_forced_kill_states_publishing",{turn_count:g.length,thread_ids:g.map(P=>P.threadId)});let x=new Set(g.filter(P=>P.engine==="codex").map(P=>P.threadId)),C=new Set([er,...nr.values()].filter(P=>P!==void 0).flatMap(P=>P.pendingApprovalTurnIds()));for(let P of ju.values())P.activeTurns().some($=>x.has($.threadId))&&P.failActiveTurns($=>C.has($.turnId)?BB:UB);return Promise.resolve()};let Xte=()=>({instanceId:Ke,clientId:za,...Et===void 0?{}:{codexUrl:Et},cwd:e.cwd,hostname:yp,workspace:Vr(e)??null,channel:e.channelSession?.channelSlug??null,threadId:er?.currentKandanThreadId()??null,codexThreadId:er?.currentCodexThreadId()??null,codexThreads:O6.value,model:Lu.model??null,reasoningEffort:Lu.reasoningEffort??null,allowPortForwardingByDefault:Lu.allowPortForwardingByDefault??null,fast:e.fast??!1,capabilities:V(),updateNudge:hv.status()??null}),Ns=()=>ve.push(Ie,"heartbeat",Xte()).then(()=>{ng.recordServerAck();for(let g of qr.values())g.resumeOutbox()}).catch(g=>{n("kandan.heartbeat_push_failed",{message:g instanceof Error?g.message:String(g)})}),Yte=setInterval(()=>{ng.check(),w(()=>{Ns()}),Ns()},15e3);if(t.actions.push(()=>clearInterval(Yte)),ve.onReconnect(()=>Ns().then(()=>{})),Ns(),e.threadProcess?.role!=="thread"&&Px()){let g=L8(j8({kandanUrl:e.kandanUrl,token:e.token,computeKey:Hx(e.kandanUrl),query:LT({kandanUrl:e.kandanUrl,token:e.token}),log:x=>n("vm.golden_gc",{line:x})}));t.actions.push(g)}let n$=x9(ve,Ie,()=>Array.from(R));t.actions.push(()=>n$.close());let gv=er?.currentCodexThreadId();if(e.launchTui&&Yt===void 0)throw new Error("Codex TUI requires a Codex app-server connection");e.launchTui&&Yt!==void 0&&gv!==void 0&&await tEe(Yt,gv);let t$=e.launchTui&&Et!==void 0?ZRe(e.codexBin,Et,e.cwd,gv,e.channelSession,e.fast):void 0;t$!==void 0&&t.actions.push(()=>{t$.kill("SIGINT")});let yv=Yt===void 0?void 0:iv(Yt);if(Yt?.onNotification(g=>{tv.value+=1;let x=g.params??{},C=lP(g.method,x);er===void 0&&ve.push(Ie,"codex_notification",{instanceId:Ke,seq:tv.value,method:g.method,params:x,metadata:C.metadata,receivedAt:new Date().toISOString()}).catch(P=>{n("kandan.codex_notification_push_failed",{message:P instanceof Error?P.message:String(P)})}),n("codex.notification",C),yv?.observeNotification(g.method,x),G_(er,g.method,x,n);for(let P of nr.values())G_(P,g.method,x,n)}),yv!==void 0){let g={handled:!1},x=C=>{if(t.closePromise===void 0&&(n("codex.app_server_connection_lost",{cause:C}),yv.failActiveTurns(C),zr?.stop(),$6&&!g.handled)){g.handled=!0;let P=ARe(DRe(IJ(e.runnerId),nn=>{n("runner.app_server_exit_loop_stamp_write_failed",{message:nn,statePath:IJ(e.runnerId)}),console.error(`Warning: could not persist the app-server crash-loop stamp (${nn}); the exit-code-${JI} give-up bound cannot take effect across restarts until the state path is writable.`)}),Date.now()),$=P.crashLoop?JI:75,B=MRe(e.cwd),ke=B===void 0?"":` Likely trigger: ${B}.`;if(P.crashLoop){let nn=e.logFile??vg();n("runner.app_server_crash_loop_gave_up",{cause:C,exitsInWindow:P.count,windowMs:aK,exitCode:$,cwd_missing_diagnosis:B??null}),console.error(`The Codex app-server has died ${P.count} times in rapid succession (latest cause: ${C}).${ke} Restarting the runner is not fixing it, so this exit uses code ${JI} (instead of the restart-requesting 75) to stop the crash loop. Diagnose before reconnecting: the runner log is at ${nn} and the CLI audit log at ${Uv()} (look for the app-server's exit reason/stderr). Once resolved, run \`linzumi connect\` to reconnect.`)}else console.error(`Codex app-server connection was lost (${C}); exiting so a fresh runner can relaunch it.${ke} Run \`linzumi connect\` to reconnect.`);let tn=[...er!==void 0?[er]:[],...nr.values()].map(nn=>nn.close().catch(Cn=>{n("codex.app_server_lost_session_drain_failed",{message:Cn instanceof Error?Cn.message:String(Cn)})}));RRe({pushes:[...F6,...tn],exit:()=>process.exit($),safetyCapMs:5e3})}};Yt?.onClose?.(C=>x(C.message)),zr?.process.once("exit",(C,P)=>x(`codex app-server process exited (${C??P??"unknown"})`))}let ere=g=>{let x=Hx(e.kandanUrl),C=g.cwd!==void 0&&g.cwd.trim()!==""?g.cwd:e.cwd;if(G2e(C)){let $=`cwd_dangerous: golden build refused - resolved build cwd ${JSON.stringify(C)} is not a safe project directory (empty, filesystem root, or non-absolute). Re-run from the project's repository checkout.`;return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:x,cwdDangerous:!0,failureReason:$}),ve.push(Ie,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:x,failure_reason:$})}n("vm.golden_build_started",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,projectPublicId:g.projectPublicId??null,computeKey:x,sourceThreadId:g.sourceThreadId??null,cwd:C});try{t5($T({projectPublicId:g.projectPublicId??void 0,computeKey:x,cwd:C}))}catch($){n("vm.golden_build_register_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)})}let P=g.sourceThreadId===void 0?void 0:{threadId:g.sourceThreadId,sourceMachineName:Ix({cwd:C,kandanThreadId:g.sourceThreadId})};return VU({cwd:C,projectPublicId:g.projectPublicId??void 0,computeKey:x,name:g.name,...P===void 0?{}:{sourceThread:P},log:$=>n("vm.golden_build",{line:$})}).then($=>(n("vm.golden_build_ready",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,checksum:$.checksum,sizeBytes:$.sizeBytes,artifactRef:$.artifactRef,artifactKind:$.artifactKind,snapshotFallbackReason:$.snapshotFallbackReason??null}),ve.push(Ie,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"ready",checksum:$.checksum,size_bytes:$.sizeBytes,artifact_ref:$.artifactRef,artifact_kind:$.artifactKind,source_commits:$.sourceCommits,lockfile_hashes:$.lockfileHashes,toolchain_versions:$.toolchainVersions,compute_key:x,failure_reason:null,metadata:$.snapshotFallbackReason===void 0?{}:{snapshot_fallback_reason:$.snapshotFallbackReason}}))).catch($=>{let B=$ instanceof qc||$ instanceof Error?$.message:String($);return n("vm.golden_build_failed",{runnerId:e.runnerId,goldenImagePublicId:g.goldenImagePublicId,captureUnavailable:$ instanceof qc,failureReason:B}),ve.push(Ie,"golden_image_build_result",{golden_image_public_id:g.goldenImagePublicId,build_claim_token:g.buildClaimToken,project_public_id:g.projectPublicId??null,status:"failed",checksum:null,size_bytes:null,artifact_ref:null,source_commits:{},lockfile_hashes:{},toolchain_versions:{},compute_key:x,failure_reason:B})}).catch($=>{throw n("vm.golden_build_result_push_failed",{goldenImagePublicId:g.goldenImagePublicId,message:$ instanceof Error?$.message:String($)}),$})},nre=g=>{if(n("kandan.control",{control:g}),a?.record("kandan","control.received",{controlType:g.type,control:g}),!vRe(e,g)&&!SRe(e,g,Fu)){let P=ii(g)??null,$=e.threadProcess?.kandanThreadId??null;n("kandan.control_ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:P,threadProcessId:$}),a?.record("kandan","control.ignored",{reason:"thread_process_mismatch",controlType:g.type,controlThreadId:P,threadProcessId:$});return}if(g.type==="replace_runner"){n("runner.replaced",{runnerId:e.runnerId,reason:g.reason,replacementRunnerId:g.replacementRunnerId,replacementVersion:g.replacementVersion}),r().catch(P=>{n("runner.replace_close_failed",{message:P instanceof Error?P.message:String(P)})});return}if(g.type==="update_available"){hv.handleUpdateAvailable(g);return}let x=CRe(g);if(x!==void 0)return ere(x);if(!xRe(g,Ke)){n("kandan.control_ignored",{reason:"instance_id_mismatch",instanceId:Ke,controlInstanceId:_Re(g),controlType:g.type});return}if(g9(g)){h9(g,Array.from(R)).then(P=>(n("kandan.forward_response",{requestId:g.requestId,port:g.port,path:g.path,status:P.status,ok:P.ok,location:XRe(P.headers,"location")}),ve.push(Ie,"forward:http_response",P))).catch(P=>ve.push(Ie,"forward:http_response",{requestId:g.requestId,ok:!1,error:P instanceof Error?P.message:String(P)})).catch(P=>{n("kandan.forward_response_push_failed",{message:P instanceof Error?P.message:String(P)})});return}if(y9(g)){n$.handle(g);return}if(k9(g)){T9(g,{codeServerBin:e.codeServerBin,editorRuntime:e.editorRuntime,allowedCwds:ue.value,currentState:he.value,browserBaseUrl:g.browserBaseUrl??process.env.KANDAN_LOCAL_RUNNER_PUBLIC_BASE_URL,runnerId:e.runnerId,platform:e.localEditorPlatform}).then(P=>{if(P.ok){X.value+=1;let $=X.value,B=he.value.status==="running"?[he.value.port,...he.value.collaboration===void 0?[]:[he.value.collaboration.serverPort],...D6("editor_restarted")]:[];he.value.status==="running"&&(R.delete(he.value.port),T.delete(he.value.port),he.value.collaboration!==void 0&&(R.delete(he.value.collaboration.serverPort),T.delete(he.value.collaboration.serverPort))),he.value=P.state,R.add(P.event.port),T.add(P.event.port),P.event.collaboration!==void 0&&(R.add(P.event.collaboration.serverPort),T.add(P.event.collaboration.serverPort));let ke=ve.push(Ie,"local_editor_status",{instanceId:Ke,requestId:g.requestId,ok:!0,capabilities:{...V(),...B.length===0?{}:{revokedPorts:B}},...P.event});return P.state.status==="running"&&(Pte(P.state),Ete(P.state,$,ke)),ke}return he.value=P.state,ve.push(Ie,"local_editor_status",{instanceId:Ke,requestId:g.requestId,ok:!1,reason:P.reason,capabilities:V()})}).catch(P=>ve.push(Ie,"local_editor_status",{instanceId:Ke,requestId:g.requestId,ok:!1,reason:hf(P),capabilities:V()})).catch(P=>{n("kandan.local_editor_status_push_failed",{message:P instanceof Error?P.message:String(P)})});return}if(s1e(g)){K({allowedCwds:g.allowedCwds,configVersion:g.configVersion??null},{includeStartupAllowedCwds:!0,source:"control"}),Ns();return}if(a1e(g)){let P=rF(g);n("runner.fleet_breaker_state",{source:"control",outcome:P.outcome,state:P.snapshot?.state??null,fate:P.snapshot?.fate??null,version:P.snapshot?.version??null});return}if(u1e(g)){let P=Tte(g);if(P!==void 0){ve.push(Ie,"codex_response",P).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}let $=Rte(g);if($!==void 0){ve.push(Ie,"codex_response",$).catch(B=>{n("kandan.control_response_push_failed",{message:B instanceof Error?B.message:String(B)})});return}}if(d1e(g)){switch(g.enabled){case!0:R.add(g.port);break;case!1:R.delete(g.port),T.delete(g.port),U(g.port),re.approvedPorts.delete(g.port),re.approvedTargets.delete(g.port),ve.push(Ie,"forward_port_revoked",{instanceId:Ke,port:g.port,reason:"user_disabled",capabilities:Ws(V(),g.port)}).catch(P=>{n("kandan.forward_port_revoked_push_failed",{message:P instanceof Error?P.message:String(P)})});break}Ns();return}if(g.type==="import_onboarding_conversations")return C2e(e,n,g).catch(P=>{throw n("onboarding.conversation_import_failed",{runnerId:e.runnerId,message:P instanceof Error?P.message:String(P)}),P});if(g.type==="scan_onboarding_projects"){let P=R2e(g.paths);return wK(e,n,{workspaceSlug:h(g.workspace),selectedScanRoots:P,sourceRoots:P,workerId:"projects-selected-folders",workerLabel:"Selected folders",startingMessage:"Checking selected folders",emptyMessage:"No Git projects found in selected folders",foundMessage:"Selected folder projects found",failedMessage:"Selected folder project scan failed",currentPlace:P[0]??e.cwd,requireTerminalStatusWrite:!0,includeRuntimeCwdHint:!1}).catch($=>{throw n("onboarding.project_scan_failed",{runnerId:e.runnerId,message:$ instanceof Error?$.message:String($)}),$})}if(g.type==="start_instance"){if(oRe(g,$=>Ye.list().some(B=>B.kandanThreadId===$)))return N+=1,n("kandan.start_instance_skipped_known_session",{threadId:ii(g)??null,controlSeq:g.control_seq??null,issuedAt:gm(g)??null,reason:"thread_already_has_known_session",skippedStaleStartInstances:N}),ve.push(Ie,"codex_response",{instanceId:Ke,controlType:g.type,threadId:ii(g)??null,ok:!1,skipped:!0,error:"start_instance_thread_already_has_session",issuedAt:gm(g)??null}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})});let P=rRe(g,Date.now());if(P!==void 0)return N+=1,n("kandan.start_instance_stale_skipped",{threadId:ii(g)??null,controlSeq:g.control_seq??null,issuedAt:gm(g)??null,ageMs:P,staleWindowMs:rK,skippedStaleStartInstances:N}),ve.push(Ie,"codex_response",{instanceId:Ke,controlType:g.type,threadId:ii(g)??null,ok:!1,skipped:!0,error:"stale_start_instance",issuedAt:gm(g)??null,ageMs:P}).catch($=>{n("kandan.control_response_push_failed",{message:$ instanceof Error?$.message:String($)})})}let C;if(g.type==="start_turn"){let P=g.control_seq;if(P!==void 0){let $=tRe(Ie,g.threadId),B=Je.initial($);if(iRe(B,P))return tg+=1,n("kandan.start_turn_replay_skipped",{controlType:g.type,threadId:g.threadId,controlSeq:P,appliedControlSeq:B,skippedReplayedStartTurns:tg}),{instanceId:Ke,controlType:g.type,threadId:g.threadId,skipped:!0};C=()=>sRe(Je,$,P)}}return aRe(()=>{if(Rt&&(g.type==="start_instance"||g.type==="reconnect_thread")){let P=fn(g,"threadId"),$=g.type==="reconnect_thread"?co(g.codexThreadId):void 0,B=P!==void 0?gt.get(P):void 0,ke=g.type==="reconnect_thread"&&($!==void 0&&qr.has($)||B!==void 0&&W_(B)!=="dead");if(g.type==="start_instance"||g.type==="reconnect_thread"&&!ke)return Hte(g).then(nn=>{if(nn)return{instanceId:Ke,controlType:g.type,threadId:P??null,held:!0,reason:"runner_updating_queued"};throw n("runner.update_restart_drain_start_refused",{control_type:g.type,thread_id:P??null}),new Error(DI)})}return TRe(er,nr,g).then(P=>P!==void 0?P:KI(Yt,ve,Ie,Ke,e,m(),ue,pe,Te,qr,vp,Fu,nv,ag,g,rv,a,cv,ym(e)?Nte:void 0,s?.playCodex,$=>le.current($),yo,ja,Fa,ne,Z6,z6))},C).then(P=>ve.push(Ie,"codex_response",P)).catch(async P=>((g.type==="start_instance"||g.type==="reconnect_thread")&&(HJ(P)||mC(P)||MI(P))&&await X6(g,P),ve.push(Ie,"codex_error",{instanceId:Ke,message:hf(P)}))).catch(P=>{n("kandan.control_response_push_failed",{message:P instanceof Error?P.message:String(P)})})},tre=iN({store:oN(tN(fl(),e.runnerId),g=>n("runner.control_quarantine_state_write_failed",{message:g})),quarantineFilePath:rN(fl(),e.runnerId),currentEpoch:()=>eg.current(Ie),log:n,emitRunnerEvent:g=>{ve.push(Ie,"runner.control_quarantined",g).catch(x=>{n("runner.control_quarantined_event_push_failed",{message:x instanceof Error?x.message:String(x)})})}}),r$=(g,x)=>{uRe(g.type,()=>nre(g),x,n,C=>tre.onControlRejected(g,C))},lg=d===void 0?void 0:k3({runtime:d,threadIdOf:g=>ii(g),controlTypeOf:g=>g.type,dispatch:r$,log:n});return d!==void 0&&lg!==void 0&&(d.hooks.onOverlapDrain=g=>{let x=[...new Set(i.inFlightTurns().map(P=>P.threadId).filter(P=>P!==""))];d.beginOutgoingDrain(x);let C=d.sendToSupervisor({type:"generation_pin_snapshot",epoch:d.epoch,threadIds:x});n("runner.generation_outgoing_drain_started",{incomingEpoch:g,pinned:x.length,threadIds:x,snapshotDelivered:C}),d.requestUpdateDrain("generation_overlap")},d.hooks.onOverlapAbort=()=>{let g=d.cancelUpdateDrain("generation_overlap_abort"),x=lg.redispatchDeferredToIncoming();n("runner.generation_overlap_abort_applied",{drainCancelled:g,redispatched:x})},d.hooks.onPinsReleased=()=>{lg.dispatchUnpinned()},d.hooks.onPromote=()=>{let C;t.actions.push(()=>{C!==void 0&&(clearTimeout(C),C=void 0)});let P=$=>{if(C=void 0,d.promoteRunnerLock()){n("runner.generation_lock_promoted",{attempt:$});return}if($>=10){n("runner.generation_lock_promote_gave_up",{attempts:$});return}C=setTimeout(()=>P($+1),5e3),C.unref()};P(1)}),ZIe(J2e(e,ue.value,Pe.value,I.value),n,bp,ze,lg?.dispatch??r$,async()=>{await y(),await _(),p.value==="probe_failed"&&await v()}),{instanceId:Ke,codexUrl:Et,close:r}}function ZIe(e,n,t,r,o,i){r.value=o,t.splice(0).forEach(({control:s,ack:a})=>o(s,a)),v2e(e,n,i)}function hm(){let e=process.env.LINZUMI_COMMANDER_OUTBOX_DIR?.trim();return e!==void 0&&e!==""?e:vt(oR(),".linzumi","commander-outbox")}function fl(){let e=process.env.LINZUMI_CONTROL_CURSOR_DIR?.trim();return e!==void 0&&e!==""?e:vt(oR(),".linzumi","control-cursors")}function QIe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.json`)}function XIe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.start-turn.json`)}function YIe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.vm-fallback-notice.json`)}function eRe(e,n){let t;try{if(!cl(e))return;t=Od(e,"utf8")}catch(r){n("vm_fallback_notice_store.read_failed",{path:e,message:r instanceof Error?r.message:String(r)});return}try{let r=JSON.parse(t);if(typeof r=="object"&&r!==null){let o=r.readinessFingerprint;if(typeof o=="string"&&o!=="")return o}}catch{}}function TJ(e,n,t){try{if(n===void 0){rR(e,{force:!0});return}ll(Ld(e),{recursive:!0});let r=`${e}.tmp`;Q_(r,`${JSON.stringify({readinessFingerprint:n})}
|
|
1522
1522
|
`,"utf8"),eR(r,e)}catch(r){t("vm_fallback_notice_store.write_failed",{path:e,message:r instanceof Error?r.message:String(r)})}}function nRe(e){let n=e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,80),t=$d("sha256").update(e).digest("hex").slice(0,8),r=n===""?"runner":n;return vt(fl(),`${r}.${t}.source-seq.json`)}function tRe(e,n){return`${e} ${n}`}function gm(e){let n=e.issued_at;return typeof n=="string"&&n!==""?n:void 0}function oK(e){return e.replayed===!0}function rRe(e,n){if(!oK(e))return;let t=gm(e);if(t===void 0)return;let r=Date.parse(t);if(Number.isNaN(r))return;let o=n-r;return o>rK?o:void 0}function oRe(e,n){if(e.type!=="start_instance"||!oK(e))return!1;let t=ii(e);return t===void 0?!1:n(t)}function iRe(e,n){return e!==void 0&&n<=e}function sRe(e,n,t){e.onAdvance(n,t),e.flush()}function aRe(e,n){return e().then(t=>(n?.(),t))}function dRe(e){return"then"in e&&typeof e.then=="function"}function uRe(e,n,t,r,o){let i;try{i=n()}catch(s){r("kandan.control_handler_threw",{controlType:e,message:s instanceof Error?s.message:String(s)}),t();return}if(i===void 0||!dRe(i)){t();return}i.then(t,s=>{if(o?.(s)==="quarantine"){t();return}r("kandan.control_ack_withheld_on_failure",{controlType:e,message:s instanceof Error?s.message:String(s)})})}function fRe(e,n=Date.now,t=iK,r){let o=r?.afterMs??pRe,i=r?.forcedReconnectAfterMs??cRe,s=r?.forcedReconnectRetryMs??lRe,a=n(),d=!1,u,c=!1,l=0,p,m=0,f=0;return{recordServerAck:()=>{a=n(),u=void 0,c=!1,l=0,p=void 0,m=0,f=0,d&&(d=!1,e("kandan.connection_recovered",{staleThresholdMs:t}))},check:()=>{let y=n(),_=y-a;!d&&_>t&&(d=!0,u=y,e("kandan.connection_stale",{lastServerAckAgoMs:_,staleThresholdMs:t}));let b=u===void 0?0:y-u;if(d&&r?.onReconnectNeeded!==void 0&&u!==void 0&&b>=i&&(p===void 0||y-p>=s)&&(l+=1,p=y,e("kandan.connection_force_reconnect",{staleForMs:b,lastServerAckAgoMs:_,attempt:l,forcedReconnectAfterMs:i}),r.onReconnectNeeded({staleForMs:b,lastServerAckAgoMs:_,attempt:l})===!1?m+=1:m=0,r.onHardResetNeeded!==void 0&&m>=NI)){if(m=0,f>=PJ)c||(c=!0,e("kandan.connection_hard_reset_exhausted",{staleForMs:b,lastServerAckAgoMs:_,attempt:l,hardResets:f,hardResetFailureLimit:PJ}),r.onUnrecoverable({staleForMs:b,lastServerAckAgoMs:_}));else if(b<o){f+=1;let v=r.onHardResetNeeded({staleForMs:b,lastServerAckAgoMs:_,attempt:l,uninitiatedDispatches:NI,hardResets:f});e("kandan.connection_hard_reset",{staleForMs:b,lastServerAckAgoMs:_,attempt:l,uninitiatedDispatches:NI,hardResets:f,initiated:v!==!1})}}d&&!c&&r!==void 0&&u!==void 0&&b>=o&&(c=!0,e("kandan.connection_unrecoverable",{staleForMs:b,lastServerAckAgoMs:_,escalateAfterMs:o}),r.onUnrecoverable({staleForMs:b,lastServerAckAgoMs:_}))},isStale:()=>d}}function UI(e,n,t){let r=t?.discardSeqsOnFirstEpochAdoption===!0,o=t?.fsyncOnWrite===!0,{cursors:i,epoch:s}=yRe(e,n),a=s,d=!1,u,c=()=>{if(d){d=!1;try{ll(Ld(e),{recursive:!0});let m=`${e}.tmp`,f=`${JSON.stringify({...a===void 0?{}:{[sK]:a},...Object.fromEntries(i)})}
|
|
1523
1523
|
`;if(o){let y=SJ(m,"w");try{Q_(y,f,"utf8"),vJ(y)}finally{wJ(y)}eR(m,e);let _=SJ(Ld(e),"r");try{vJ(_)}finally{wJ(_)}}else Q_(m,f,"utf8"),eR(m,e)}catch(m){n("control_cursor_store.write_failed",{path:e,message:m instanceof Error?m.message:String(m)})}}},l=()=>{d=!0,u===void 0&&(u=setTimeout(()=>{u=void 0,c()},mRe),u.unref?.())},p=()=>{u!==void 0&&(clearTimeout(u),u=void 0),c()};return{initial:m=>i.get(m),onAdvance:(m,f)=>{let y=i.get(m);y!==void 0&&f<=y||(i.set(m,f),l())},reset:(m,f)=>{i.get(m)!==f&&(i.set(m,f),l())},flush:p,epoch:()=>a,adoptEpoch:m=>{if(a===m)return!1;let f=a!==void 0,y=!f&&r&&i.size>0;return a=m,(f||y)&&(y&&n("control_cursor_store.pre_epoch_seqs_discarded",{path:e,epoch:m,discardedSeqs:i.size}),i.clear()),l(),(f||y)&&p(),f}}}function hRe(e,n,t,r){return{current:()=>e.epoch(),adopt:(o,i)=>{let s=e.epoch(),a=e.adoptEpoch(i),d=n.adoptEpoch(i),u=a||d;return u&&t("kandan.control_epoch_changed",{runnerId:r.runnerId,kandanUrl:r.kandanUrl,topic:o,previousEpoch:s??null,epoch:i,controlCursorCleared:a,startTurnWatermarksCleared:d}),u}}}function gRe(e,n){return typeof e=="object"&&e!==null&&e.code===n}function yRe(e,n){let t=new Map,r;try{r=Od(e,"utf8")}catch(s){return gRe(s,"ENOENT")||n("control_cursor_store.read_failed",{path:e,message:s instanceof Error?s.message:String(s)}),{cursors:t,epoch:void 0}}let o;try{o=JSON.parse(r)}catch{o=void 0}if(o===null||typeof o!="object"||Array.isArray(o))return n("control_cursor_store.corrupt_ignored",{path:e}),{cursors:t,epoch:void 0};let i;for(let[s,a]of Object.entries(o)){if(s===sK){typeof a=="string"&&a!==""&&(i=a);continue}typeof a=="number"&&Number.isInteger(a)&&a>=0&&t.set(s,a)}return{cursors:t,epoch:i}}function xRe(e,n){return e.type==="replace_runner"?!0:!("instanceId"in e)||e.instanceId===void 0||e.instanceId===n}function _Re(e){return"instanceId"in e?e.instanceId:void 0}function bRe(e,n){let t=new URL(n);if(t.protocol!=="https:"&&t.protocol!=="http:")throw new Error("workspace viewport URL must use http or https");let r=new URL(zn(e)).origin;if(t.origin!==r)throw new Error("workspace viewport URL must stay on the configured Linzumi origin")}function wRe(e,n){bRe(e,n)}function BI(e){return e!==void 0&&e.delegated===!0&&e.threadProcess==="already_started"}function ym(e){return e.threadProcess?.role==="thread"||e.agentReplay!==void 0?!1:e.spawnThreadRunner!==void 0||e.codexUrl===void 0}function vRe(e,n){let t=e.threadProcess,r=ii(n);return t?.role!=="thread"?!(ym(e)&&r!==void 0&&kRe(n)):r!==void 0?r===t.kandanThreadId:"instanceId"in n&&n.instanceId!==void 0&&n.instanceId!==""||n.type==="replace_runner"}function SRe(e,n,t){switch(e.threadProcess?.role){case"thread":return!1;default:switch(n.type){case"resolve_claude_user_input_request":case"deny_claude_user_input_request":return t.has(n.requestId);default:return!1}}}function kRe(e){switch(e.type){case"forward_http_request":case"forward_tcp_open":case"forward_tcp_send":case"forward_tcp_close":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":return!0;default:return!1}}function CRe(e){let n=e;if(n.kind!=="build_golden_image"&&n.type!=="build_golden_image")return;let t=Md(n.golden_image_public_id),r=Md(n.build_claim_token);if(!(t===void 0||r===void 0))return{goldenImagePublicId:t,buildClaimToken:r,projectPublicId:Md(n.project_public_id),computeKey:Md(n.compute_key),name:Md(n.name),sourceThreadId:Md(n.source_thread_id),cwd:Md(n.cwd)}}function Md(e){return typeof e=="string"&&e!==""?e:void 0}function ii(e){switch(e.type){case"start_instance":case"reconnect_thread":case"forward_http_request":case"forward_tcp_open":case"forward_tcp_send":case"forward_tcp_close":case"remote_codex_exec":case"remote_codex_exec_cancel":case"stop_turn":case"steer_turn":case"list_agent_slash_commands":case"resolve_claude_user_input_request":case"deny_claude_user_input_request":case"update_thread_interaction_access":{let n=h(e.threadId)?.trim();return n===void 0||n===""?void 0:n}default:return}}async function TRe(e,n,t){let r=ii(t);if(r!==void 0){let i=n.get(r),s=Array.from(new Set([...i===void 0?[]:[i],...Array.from(n.values()).filter(d=>d.currentKandanThreadId()===r)])),a=[...e?.currentKandanThreadId()===r?[e]:[],...s.filter(d=>d!==e)].filter(d=>d!==void 0);if(t.type==="update_thread_interaction_access"){let d,u;for(let c of a){let l=await c.handleControl(t);l!==void 0&&(d??=l,l.ok===!0&&(u??=l))}return u??d}for(let d of a){let u=await d.handleControl(t);if(u!==void 0)return u}return}let o=await(e?.handleControl(t)??Promise.resolve(void 0));if(o!==void 0)return o;for(let i of n.values()){let s=await i.handleControl(t);if(s!==void 0)return s}}function IRe(e){return e.codexUrl===void 0&&e.threadProcessRole!=="thread"&&e.ownsStartedAppServer}async function RRe(e){let n=e.setTimeoutFn??setTimeout,t=Promise.allSettled(e.pushes).then(()=>{}),r=new Promise(o=>{n(()=>o(),e.safetyCapMs)?.unref?.()});await Promise.race([t,r]),e.exit()}function IJ(e,n=process.env){let t=n.LINZUMI_APP_SERVER_EXIT_LOOP_STATE_FILE?.trim();return t!==void 0&&t!==""?t:vt(oR(),".linzumi","app-server-exit-loop",`${Sc(e)}.json`)}function DRe(e,n){return{load:()=>{try{let t=JSON.parse(Od(e,"utf8"));return typeof t.count=="number"&&Number.isFinite(t.count)&&typeof t.lastExitAt=="string"?{count:t.count,lastExitAt:t.lastExitAt}:void 0}catch{return}},save:t=>{try{ll(Ld(e),{recursive:!0}),Q_(e,`${JSON.stringify(t,null,2)}
|
|
1524
1524
|
`)}catch(r){n?.(r instanceof Error?r.message:String(r))}}}}function MRe(e,n=cl){try{if(n(e))return}catch{return}return`the runner's working directory ${e} no longer exists (deleted, or its disk/volume is unmounted); remount the volume or reconnect from an existing folder`}function ARe(e,n,t=aK,r=ERe){let o=e.load(),i=o===void 0?Number.NaN:Date.parse(o.lastExitAt),s=n-i,d=o!==void 0&&Number.isFinite(i)&&s>=0&&s<=t?o.count+1:1;return e.save({count:d,lastExitAt:new Date(n).toISOString()}),{count:d,crashLoop:d>=r}}function $Re(e){let n=new Map,t={failed:!1},r;return{observeNotification:(o,i)=>{if(t.failed)return;let s=ORe(i);if(s===void 0)return;r=Date.now();let a=LRe(i);if(PRe.has(o)){for(let[d,u]of n)u===s&&(a===void 0||a===d)&&n.delete(d);return}a!==void 0&&n.set(a,s)},failActiveTurns:o=>{if(t.failed)return;t.failed=!0;let i=Array.from(n);if(n.clear(),i.length===0)return;e.onActiveThreadsFailed?.(i.map(([d])=>d));let s=Array.from(e.sessions()),a=typeof o=="function"?o:d=>o;for(let[d,u]of i){let c=a({threadId:d,turnId:u});e.log("codex.active_turn_failed_on_connection_loss",{thread_id:d,turn_id:u,cause:c});for(let l of s)G_(l,"turn/failed",{threadId:d,turnId:u,reason:c,...Xu("infra_turn_kill")},e.log)}},activeTurnCount:()=>n.size,activeTurns:()=>Array.from(n,([o,i])=>({threadId:o,turnId:i})),lastActivityAtMs:()=>r}}function ORe(e){let n=A(e.turn),t=A(e.item),r=A(t?.turn);return h(n?.id)??h(e.turnId)??h(e.turn_id)??h(t?.turnId)??h(t?.turn_id)??h(r?.id)}function LRe(e){let n=A(e.thread),t=A(e.turn);return h(e.threadId)??h(e.thread_id)??h(n?.id)??h(t?.threadId)??h(t?.thread_id)}function G_(e,n,t,r){if(e!==void 0)try{e.handleCodexNotification(n,t)}catch(o){r("codex.notification_session_dispatch_failed",{method:n,message:o instanceof Error?o.message:String(o)})}}async function jRe(e){return e.closePromise!==void 0||(e.closePromise=(async()=>{let n=[];e.removeHandlers?.(),e.removeHandlers=void 0;for(let t of[...e.actions].reverse())try{await t()}catch(r){n.push(r instanceof Error?r:new Error(String(r)))}if(e.actions.splice(0),n[0]!==void 0)throw n[0]})()),e.closePromise}function FRe(e){if("error"in e)throw new Error(`thread/start failed: ${e.error.message}`);return h(A(A(e.result)?.thread)?.id)}function co(e){let n=e?.trim();return n===void 0||n===""?void 0:n}function sR(e){let n=co(e.projectSharedInstructions),t=co(e.projectPersonalInstructions),r=co(e.projectMemory);return{projectBound:e.projectId!==void 0||e.projectPublicId!==void 0||n!==void 0||t!==void 0||r!==void 0,projectSharedInstructions:n,projectPersonalInstructions:t,projectMemory:r}}function zRe(e){return(Ne(e)??[]).flatMap(t=>{let r=A(t),o=h(r?.runnerId);return o===void 0?[]:[{runnerId:o,version:h(r?.version)??null}]})}function RJ(e){if(e===void 0)return{type:"missing"};let n=A(e);if(n===void 0)return{type:"invalid",reason:"runner_config_not_object"};let t=Ne(n.allowedCwds);if(t===void 0)return{type:"invalid",reason:"allowed_cwds_not_array"};let r=[];for(let[s,a]of t.entries()){let d=h(a);if(d===void 0)return{type:"invalid",reason:`allowed_cwd_${s}_not_string`};r.push(d)}let o=n.configVersion,i=o==null?null:Y(o);return i===void 0?{type:"invalid",reason:"config_version_not_integer"}:{type:"ok",config:{allowedCwds:r,configVersion:i}}}function qRe(e){let n=A(e);if(A(n?.runner_config)?.rosterEnabled!==!0)return;let r=A(n?.roster),o=r===void 0?void 0:Ne(r.threads);if(o===void 0)return;let i=[],s=0;for(let a of o){let d=A(a),u=h(d?.kandan_thread_id);if(u===void 0){s+=1;continue}let c=h(d?.last_activity_at),l=c===void 0?Number.NaN:Date.parse(c),p=d?.channel_id,m=Y(p),f=h(p)??(m===void 0?null:String(m));i.push({kandanThreadId:u,providerSessionKey:h(d?.provider_session_key)??null,channelId:f,lastActivityAtMs:Number.isNaN(l)?null:l})}return{threads:i,truncated:r?.truncated===!0,skippedEntries:s}}function NRe(e){return e.appliedModel!==void 0||e.appliedApprovalPolicy!==void 0||e.appliedReasoningEffort!==void 0||e.controlSandbox!==void 0}function URe(e){if(e.debugTrace===void 0)return;let n=new Date().toISOString();return Y$({dir:e.debugTrace.dir,contentMode:e.debugTrace.contentMode,runId:[n,"pid",String(process.pid),"runner",e.runnerId].join("-"),manifest:{pid:process.pid,argv:nO(process.argv),runnerId:e.runnerId,cwd:e.cwd,kandanUrl:e.kandanUrl,workspaceSlug:e.workspaceSlug??null,threadProcess:e.threadProcess??null,fast:e.fast===!0,startedAt:n}})}function aR(e){let n=e.launchTui&&e.consoleReporter===void 0?void 0:(r,o)=>{e.launchTui||M_(r,o),e.consoleReporter?.(r,o)},t=e.logFile??vg();return PO(t),Cg("runner_process"),xO(t,n)}function VRe(e,n,t,r){let o=AB({steps:{stopAccepting:()=>{n.stopAccepting()},interruptInFlightTurns:()=>n.interruptInFlightTurns().catch(s=>{t("runner.drain_interrupt_states_failed",{message:s instanceof Error?s.message:String(s)})}),checkpointCurrentTurn:()=>{},flushInboundQueues:()=>{n.flushInboundQueues()},flushOutbox:()=>e().catch(()=>{})},deadlineMs:BRe,log:(s,a)=>t(s,a),exit:(s,a)=>{let d=kO(a),u={log:(c,l)=>t(c,l)};D_({trigger:d},u),TO(s,{trigger:d,stdinWasTty:process.stdin.isTTY===!0,stdoutWasTty:process.stdout.isTTY===!0},{sinks:u})},signals:r?.signals??["SIGTERM","SIGINT","SIGHUP"]}),i=()=>{e().catch(()=>{})};return process.once("exit",i),{uninstall:()=>{o.uninstall(),process.off("exit",i)},triggerFastExitDrain:s=>o.trigger(s)}}async function WRe(e,n,t){try{return e()}catch(r){if(!DP(r))throw r;t("runner.lock_held_by_live_process",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath});let o=n.lockTakeover,i=DJ(r.lockPath,o?.takeover,t),s=Td(r.heldBy,i.isPidAlive,()=>new Date(i.now()));if(f3(r.heldBy,Ut,n.launchSource,s)){t("runner.lock_auto_takeover_for_update",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath,fromVersion:r.heldBy.cliVersion,toVersion:Ut,launchSource:C_,holderState:s.state});let c=o?.prompt??EJ(o);return await zP({holder:r.heldBy,lockPath:r.lockPath,baseMessage:r.message,takeOverWithoutPrompt:!0,prompt:c,takeover:i}),e()}if(!A3(o))throw r;let a=o.prompt??EJ(o),d=DJ(r.lockPath,o.takeover,t);if((await zP({holder:r.heldBy,lockPath:r.lockPath,baseMessage:r.message,takeOverWithoutPrompt:o.takeOverWithoutPrompt===!0,prompt:a,takeover:d})).outcome==="declined")throw new tm;return t("runner.lock_takeover_interactive",{runnerId:n.runnerId,heldByRunnerId:r.heldBy.runnerId,heldByPid:r.heldBy.pid,lockPath:r.lockPath}),e()}}function EJ(e){return{isInteractive:()=>e?.forceNonInteractive!==!0&&process.stdin.isTTY===!0&&process.stderr.isTTY===!0,writeReport:n=>{process.stderr.write(`${n}
|
package/package.json
CHANGED