@sleep2agi/agent-node 2.5.0-preview.154 → 2.5.0-preview.155
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -103,7 +103,7 @@ b`,ok:!1,error:"forbidden_char"},{input:"a$b",ok:!1,error:"forbidden_char"},{inp
|
|
|
103
103
|
`,"OpenCode launch owner marker");let K=lQ(Z,Z,"data","fresh OpenCode data root"),_=tQ(K);gC.get(Z).dataIdentity={dev:_.dev,ino:_.ino};let h=lQ(Z,K,"opencode","fresh OpenCode data directory"),x=lQ(Z,Z,"cache","fresh OpenCode cache root"),k=lQ(Z,Z,"state","fresh OpenCode state root"),b=lQ(Z,Z,"runtime","fresh OpenCode runtime root"),y=lQ(Z,Z,"tmp","fresh OpenCode temporary root"),T=A.persistAuth===!0&&A.credentialMode!=="probe",n=T?Vm(D):LVA(D);if(T)gC.get(Z).authPersistence={path:G,original:D,rendered:n,saved:!1};if(n!==void 0)m9(WQ(h,"auth.json"),n,"fresh OpenCode auth file");let u=B,O,v=[];if(A.unsafeTools!==!0){let MA=lQ(Z,Z,"workspace","safe OpenCode workspace");th(MA,Q,"safe workspace/node workDir boundary"),th(MA,B,"safe workspace/requested project boundary"),u=MA,V=lQ(Z,Z,"home","safe OpenCode HOME"),W=lQ(Z,Z,"config","safe OpenCode XDG config root");let f=lQ(Z,W,"opencode","safe OpenCode global config directory");m9(WQ(f,"opencode.json"),MVA($),"safe OpenCode global config"),O=lQ(Z,Z,"managed-config","empty managed-config redirect"),v=Nm(MA)}let t=gC.get(Z);t.effectiveCwd=u,t.ancestorSnapshot=v,t.managedConfigDir=O;let r=A.parentEnv??process.env,EA={};for(let MA of FVA){let f=r[MA];if(typeof f==="string")EA[MA]=f}let IA=A.unsafeTools===!0?{}:{OPENCODE_DISABLE_PROJECT_CONFIG:"true",OPENCODE_PURE:"1",OPENCODE_DISABLE_EXTERNAL_SKILLS:"1",OPENCODE_DISABLE_CLAUDE_CODE:"1",OPENCODE_DISABLE_LSP_DOWNLOAD:"1",OPENCODE_TEST_MANAGED_CONFIG_DIR:O};return{...EA,HOME:V,USERPROFILE:V,APPDATA:W,LOCALAPPDATA:K,PWD:u,TMPDIR:y,TMP:y,TEMP:y,XDG_CONFIG_HOME:W,XDG_DATA_HOME:K,XDG_CACHE_HOME:x,XDG_STATE_HOME:k,XDG_RUNTIME_DIR:b,OPENCODE_DISABLE_AUTOUPDATE:"true",...IA,OPENCODE_CONFIG_CONTENT:DVA(A.unsafeTools===!0),OPENCODE_PERMISSION:JSON.stringify($m(A.unsafeTools===!0))}}catch(L){throw dH(Z,void 0,!0),L}}var lH=".anet-opencode-launch-",Ym=".anet-opencode-launch-owner.json",Fm="anet-opencode-launch-v1",JVA=300000,Gm,YVA,gC,FVA,GVA,$VA,VVA,zVA,KVA,ig,TVA=2097152,Am;var f$=H(()=>{Gm=p9(24).toString("hex"),YVA=["opencode.jsonc","opencode.json",".opencode","AGENTS.md","CLAUDE.md","CONTEXT.md",".claude",".agents",".git"],gC=new Map,FVA=["PATH","PATHEXT","SystemRoot","SYSTEMROOT","WINDIR","ComSpec","COMSPEC","LANG","LANGUAGE","LC_ALL","LC_CTYPE","LC_MESSAGES","TZ","TERM","COLORTERM","SHELL","NO_COLOR","FORCE_COLOR","HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","SSL_CERT_FILE","SSL_CERT_DIR","NODE_EXTRA_CA_CERTS"],GVA=["bash","read","glob","grep","edit","write","list","task","skill","todowrite","apply_patch","invalid","webfetch","websearch"],$VA=["question"];VVA=new Set(["linux","darwin"]);zVA=new Int32Array(new SharedArrayBuffer(4)),KVA={listPids:()=>Cm("/proc"),ownerUid:(A)=>CVA(`/proc/${A}`).uid,read:(A,Q)=>Em(`/proc/${A}/${Q}`,"utf8"),cwd:(A)=>cB(`/proc/${A}/cwd`),sleepMs:(A)=>{Atomics.wait(zVA,0,0,A)}},ig=KVA;Am=[1,2,4,8,16,32,64,128]});import{execFileSync as vVA}from"child_process";import{createHash as bVA}from"crypto";import{closeSync as yVA,constants as Xm,existsSync as fVA,fstatSync as Mm,lstatSync as n9,openSync as hVA,readFileSync as Hm,readSync as mVA,realpathSync as LY,statSync as eH}from"fs";import{basename as Lm,delimiter as uVA,dirname as RE,isAbsolute as a9,join as zY,relative as jm,resolve as aH,sep as cVA}from"path";function Q7(A){return PQ("v1",A)}function _m(A){if(A===wE||!A7.includes(A))return null;return`opencode-ai@${A} is the previous release pin and is still accepted for now; upgrade to the vetted opencode-ai@${wE} with: anet opencode upgrade-pin ${wE}`}function Rm(A,Q){return A==="v1"?Q7(Q):PQ(A,Q)}function rH(A,Q){if(A==="v1")return pVA(Q);let B=CB(A);return Error(`unsupported opencode ${A} version ${Q}; this agent-node accepts only ${B.packageName}@${B.acceptedVersions.join(", ")||"(none)"} (${B.status})`)}function pVA(A){return Error(`unsupported opencode version ${A}; this agent-node is vetted only for opencode-ai@${wE} (transition: ${A7.join(", ")||"none"})`)}function dVA(A,Q=process.getuid?.(),B=process.getgid?.()){if(Q===void 0)return!1;if(A.uid!==Q&&A.uid!==0)return!1;let I=Q>0&&B===Q&&A.uid===Q&&A.gid===Q;return(Number(A.mode)&(I?2:18))===0}function zm(A,Q){let B=jm(A,Q);return B===""||B!==".."&&!B.startsWith(`..${cVA}`)&&!a9(B)}function nVA(A){let Q=aH(A);try{return LY(Q)}catch(B){if(B?.code==="ENOENT")return Q;throw Error(`cannot canonicalize forbidden OpenCode root ${Q}: ${B?.message||B}`)}}function sH(A){try{return n9(A),!0}catch(Q){if(Q?.code==="ENOENT")return!1;return!0}}function oVA(A){if(!sH(A))return!1;try{let Q=n9(A);if(Q.isSymbolicLink()||!Q.isFile()||(Q.mode&2)!==0||Q.size<=0||Q.size>1048576)return!0;let I=JSON.parse(Hm(A,"utf8"))?.workspaces;return Array.isArray(I)||Boolean(I&&typeof I==="object"&&Array.isArray(I.packages))}catch{return!0}}function KY(A=process.cwd()){if(!a9(A))throw Error("OpenCode project cwd must be absolute");let Q=aH(A),B;try{B=LY(Q)}catch(E){if(E?.code!=="ENOENT")throw E;let g=RE(Q);while(!sH(g)){let J=RE(g);if(J===g)break;g=J}let U=LY(g);B=aH(U,jm(g,Q))}let I=new Set([B]),C=B;while(!0){if(iVA.some((g)=>sH(zY(C,g))))I.add(C);if(oVA(zY(C,"package.json")))I.add(C);let E=RE(C);if(E===C)break;C=E}return[...I]}function tH(A,Q,B){let I=eH(A);if(!(Q==="file"?I.isFile():I.isDirectory())||!dVA(I))throw Error(`resolved opencode ${B} has unsafe ownership or mode`)}function oH(A,Q){return A.dev===Q.dev&&A.ino===Q.ino}function o9(A,Q){let B=n9(A);if(B.isSymbolicLink()||!B.isFile())throw Error(`resolved opencode ${Q} is not a canonical regular file`);let I;try{I=hVA(A,Xm.O_RDONLY|(Xm.O_NOFOLLOW||0));let C=Mm(I);if(!C.isFile()||!oH(B,C))throw Error(`resolved opencode ${Q} changed before attestation`);let E=bVA("sha256"),g=Buffer.allocUnsafe(1048576),U=0;while(!0){let F=mVA(I,g,0,g.length,null);if(F===0)break;E.update(g.subarray(0,F)),U+=F}let J=Mm(I),Y=n9(A);if(!oH(C,J)||!oH(J,Y)||Y.isSymbolicLink()||!Y.isFile()||U!==C.size||J.size!==C.size)throw Error(`resolved opencode ${Q} changed during attestation`);return{dev:String(C.dev),ino:String(C.ino),size:C.size,sha256:E.digest("hex")}}finally{if(I!==void 0)yVA(I)}}function Km(A,Q){return A.dev===Q.dev&&A.ino===Q.ino&&A.size===Q.size&&A.sha256===Q.sha256}function aVA(A){let Q=A;while(!0){tH(Q,"directory",`package directory ${Q}`);let B=RE(Q);if(B===Q)return;Q=B}}function rVA(A,Q){let B=A;for(let I of Q.split("/").reverse()){if(Lm(B)!==I)return!1;B=RE(B)}return Lm(B)==="node_modules"}function wm(A,Q,B,I="opencode-ai"){let C=RE(A),E=RE(C);if(!rVA(E,I))throw Error(`resolved opencode binary is not inside a node_modules/${I} wrapper`);let g=zY(E,"bin","opencode.exe");if(A!==g)throw Error(`resolved executable is not the canonical ${I} bin/opencode.exe entrypoint`);for(let D of B){if(!D)continue;let N=nVA(D);if(zm(N,E)||zm(E,N))throw Error(`resolved ${I} package overlaps forbidden root: ${N}`)}tH(A,"file","binary");let U=eH(A);if(process.platform!=="win32"&&(U.mode&73)===0)throw Error("resolved opencode binary has unsafe ownership or mode");let J=zY(E,"package.json"),Y;try{Y=LY(J)}catch(D){throw Error(`resolved ${I} package.json is missing: ${D?.message||D}`)}if(Y!==J)throw Error(`resolved ${I} package.json must not be a symlink`);tH(J,"file","package.json"),aVA(C);let F;try{F=JSON.parse(Hm(J,"utf8"))}catch(D){throw Error(`resolved ${I} package.json is invalid: ${D?.message||D}`)}let G=F.bin&&typeof F.bin==="object"?F.bin.opencode:void 0,$=typeof G==="string"?G.replace(/^\.\//,""):G;if(F.name!==I||F.version!==Q||$!=="bin/opencode.exe")throw Error(`resolved executable is not ${I}@${Q} with bin.opencode=bin/opencode.exe`);return A}function sVA(A,Q){let B=[];for(let I of Q.split(uVA)){if(!I)continue;let C=zY(I,A);if(!fVA(C))continue;try{let E=eH(C);if(E.isFile()&&(process.platform==="win32"||(E.mode&73)!==0)){if(!B.includes(C))B.push(C)}}catch{}}return B}function HY(A={}){let Q=A.generation??"v1";if(A.expectedVersion===void 0){let U,J=Q==="v1"?lVA:w9(Q);if(J.length===0)throw rH(Q,"(none)");for(let Y of J)try{return HY({...A,expectedVersion:Y})}catch(F){if(U===void 0)U=F}throw U}let B=A.expectedVersion;if(!Rm(Q,B))throw rH(Q,B);let I=CB(Q).packageName,C=(U)=>{let J=LY(U);wm(J,B,A.forbiddenRoots??[],I);let Y=zY(RE(RE(J)),"package.json"),F=o9(J,"binary"),G=o9(Y,"package.json"),$;try{$=vVA(J,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:5000,env:A.probeEnv,cwd:A.probeCwd}).trim()}catch(N){throw Error(`opencode version probe failed: ${N?.message||N}`)}let D=$.match(/(\d+\.\d+\.\d+)/)?.[1]??$;if(D!==B)throw Error(`expected ${I}@${B}; resolved binary reports ${D||"no version"}`);return Q==="v1"?{binary:J,packageJson:Y,expectedVersion:B,binaryFile:F,packageJsonFile:G}:{binary:J,packageJson:Y,expectedVersion:B,binaryFile:F,packageJsonFile:G,generation:Q}};if(A.requestedBinary){if(!a9(A.requestedBinary))throw Error("ANET_OPENCODE_BIN must be an absolute path");return C(A.requestedBinary)}let E=sVA("opencode",A.searchPath??"");if(E.length===0)throw Error("opencode not found on the trusted launch PATH");let g;for(let U of E)try{return C(U)}catch(J){if(g===void 0)g=J}throw g}function h$(A,Q={}){let B=Q.expectedVersion??A.expectedVersion,I=A.generation??"v1";if(!Rm(I,B))throw rH(I,B);if(A.expectedVersion!==B)throw Error("resolved opencode attestation version changed after probe");if(!a9(A.binary))throw Error("resolved opencode binary must remain absolute");let C=LY(A.binary);if(C!==A.binary)throw Error("resolved opencode binary path changed after version probe");wm(C,B,Q.forbiddenRoots??[],CB(I).packageName);let E=o9(C,"binary"),g=o9(A.packageJson,"package.json");if(!Km(A.binaryFile,E)||!Km(A.packageJsonFile,g))throw Error("resolved opencode package bytes changed after version probe");return C}var wE,A7,lVA,iVA;var O0=H(()=>{EC();wE=Wh,A7=Object.freeze(w9("v1").filter((A)=>A!==wE)),lVA=Object.freeze([wE,...A7.filter((A)=>A!==wE)]);iVA=[".git","pnpm-workspace.yaml","lerna.json","nx.json","rush.json","turbo.json"]});var Tm={};DA(Tm,{opencodeBackendFor:()=>B7,OPENCODE_V2_BACKEND:()=>r9,OPENCODE_V1_BACKEND:()=>UC});function B7(A){if(A==="v1")return UC;let Q=CB(A);if(A==="v2"&&Q.status!=="unsupported")return r9;throw Error(`OpenCode ${A} (${Q.packageName}) is ${Q.status} in this agent-node; only OpenCode v1 (${UC.packageName}) has a backend`)}var tVA,qm,UC,eVA,Om,r9;var ng=H(()=>{f$();O0();EC();tVA=Object.freeze(["OPENCODE_CONFIG_CONTENT","OPENCODE_PERMISSION","OPENCODE_DISABLE_PROJECT_CONFIG","OPENCODE_PURE","OPENCODE_DISABLE_EXTERNAL_SKILLS","OPENCODE_DISABLE_CLAUDE_CODE","OPENCODE_DISABLE_LSP_DOWNLOAD","OPENCODE_TEST_MANAGED_CONFIG_DIR","OPENCODE_DISABLE_AUTOUPDATE"]),qm=CB("v1"),UC=Object.freeze({generation:"v1",packageName:qm.packageName,support:qm,safetyEnvKeys:tVA,isSupportedVersion:(A)=>PQ("v1",A),resolveBinary:(A)=>HY(A),revalidateBinary:(A,Q)=>h$(A,Q),buildChildEnv:(A)=>nH(A),acpArgs:()=>["acp"],serveArgs:({hostname:A,port:Q})=>["serve","--hostname",A,"--port",String(Q),"--pure"],attachArgs:({url:A,sessionId:Q,cwd:B})=>["attach",A,"--session",Q,"--dir",B,"--pure"]}),eVA=Object.freeze(["OPENCODE_CONFIG_CONTENT"]),Om=CB("v2"),r9=Object.freeze({generation:"v2",packageName:Om.packageName,support:Om,safetyEnvKeys:eVA,isSupportedVersion:(A)=>PQ("v2",A),resolveBinary:(A)=>HY({...A,generation:"v2"}),revalidateBinary:(A,Q)=>{if(A.generation!=="v2")throw Error("OpenCode v2 backend refuses an attestation made for another generation");return h$(A,Q)},buildChildEnv:(A)=>{if(A.credentialMode!=="probe"){let Q=fg("v2",{unsafeTools:A.unsafeTools===!0});if(Q)throw Error(Q)}return nH(A)},acpArgs:()=>{throw Error(fg("v2",{unsafeTools:!0,mode:"headless"})??"OpenCode v2 has no ACP lane")},serveArgs:({hostname:A,port:Q})=>["serve","--hostname",A,"--port",String(Q)],attachArgs:({url:A,sessionId:Q})=>["--server",A,"--session",Q]})});var km={};DA(km,{waitForBorrowedLaunchHealth:()=>g6A,readBorrowedLaunchConfig:()=>u$,publishBorrowedLaunchHealth:()=>E6A,inspectBorrowedLaunchHealth:()=>qE,hasBorrowedV1Intent:()=>jY,BORROWED_LAUNCH_HEALTH:()=>m$});import{constants as I7,openSync as A6A,closeSync as Q6A,fstatSync as Pm,lstatSync as E7,readFileSync as g7,realpathSync as U7,writeFileSync as B6A,renameSync as I6A,rmSync as Sm}from"node:fs";import{dirname as J7,join as Y7}from"node:path";import{randomUUID as C6A}from"node:crypto";function jY(A,Q){if(Q?.opencodeBorrowedV1!==void 0)return!0;try{return E7(Y7(A,"opencode-borrowed-v1-selection.json")),!0}catch(B){return B?.code!=="ENOENT"}}function JC(){throw Error("borrowed V1 launch evidence unavailable or mismatched")}function F7(A,Q=1048576){if(process.platform!=="linux"||U7(A)!==A)JC();let B=E7(J7(A));if(!B.isDirectory()||B.uid!==process.getuid?.()||(B.mode&4095)!==448)JC();let I=A6A(A,I7.O_RDONLY|I7.O_NOFOLLOW|I7.O_NONBLOCK);try{let C=Pm(I);if(!C.isFile()||C.nlink!==1||C.uid!==process.getuid?.()||(C.mode&4095)!==384||C.size<1||C.size>Q)JC();let E=g7(I),g=E7(A),U=Pm(I),J=(Y)=>[Y.dev,Y.ino,Y.size,Y.mtimeMs,Y.ctimeMs,Y.mode,Y.uid,Y.nlink];if(g.isSymbolicLink()||JSON.stringify(J(C))!==JSON.stringify(J(g))||JSON.stringify(J(C))!==JSON.stringify(J(U))||E.length!==C.size)JC();return{value:JSON.parse(E.toString("utf8")),stamp:J(C)}}finally{Q6A(I)}}function C7(A,Q){if(!A||typeof A!=="object"||Array.isArray(A)||Object.keys(A).length!==Q.length||Q.some((B)=>!Object.hasOwn(A,B)))JC()}function u$(A,Q){let{value:B,stamp:I}=F7(A),C=B.opencodeBorrowedV1;C7(C,["schema","hostRoot","expectedHost","selectedCohortId","binding"]),C7(C.expectedHost,["hostId","instanceId","version","cohortId"]),C7(C.binding,["networkId","nodeId","serverIdentity","directory","sessionId"]);let{binding:E,expectedHost:g}=C;if(B.runtime!=="opencode-cli"||B.opencodeGeneration!=="v1"||B.opencodeMode!=="copresence"||B.flags?.opencodeUnsafeTools===!0||typeof B.token!=="string"||!B.token||typeof B.alias!=="string"||!B.alias||typeof B.model!=="string"||B.model.split("/").length!==2||B.model.split("/").some((U)=>!U)||C.schema!==1||typeof C.hostRoot!=="string"||!C.hostRoot.startsWith("/")||typeof g.version!=="string"||!/^1\.\d+\.\d+$/.test(g.version)||C.selectedCohortId!==g.cohortId||[g.hostId,g.instanceId,g.cohortId,B.node_id,B.network_id,E.directory,E.sessionId].some((U)=>typeof U!=="string"||!U)||E.nodeId!==B.node_id||E.networkId!==B.network_id||E.sessionId!==B.session||E.serverIdentity!==`${g.hostId}:${g.instanceId}`||!/^ses_[A-Za-z0-9]+$/.test(E.sessionId)||U7(E.directory)!==E.directory||Q!==void 0&&E.directory!==Q)JC();return{selection:C,alias:B.alias,model:B.model,stamp:I}}function xm(A){if(!Number.isSafeInteger(A)||A<=1)JC();let Q=g7(`/proc/${A}/stat`,"utf8").replace(/^.*\) /s,"").trim().split(/\s+/);if(["Z","X","x"].includes(Q[0])||!/^\d+$/.test(Q[19]??""))JC();return{pid:A,ticks:Q[19]}}function E6A(A,Q){if(!/^[a-f0-9-]{36}$/.test(Q))JC();let B=u$(A,process.cwd()),I=xm(process.pid),C={schema:1,mode:"borrowed-v1",nonce:Q,writtenAt:Date.now(),config:B,bridge:I},E=Y7(J7(A),m$),g=`${E}.${C6A()}.tmp`;try{B6A(g,JSON.stringify(C)+`
|
|
104
104
|
`,{flag:"wx",mode:384}),I6A(g,E)}finally{Sm(g,{force:!0})}return()=>{try{let U=F7(E,16384).value;if(U.nonce===Q&&U.bridge?.pid===I.pid&&U.bridge?.ticks===I.ticks)Sm(E)}catch{}}}function qE(A,Q,B){try{let I=u$(A),C=F7(Y7(J7(A),m$),16384).value;if(C.schema!==1||C.mode!=="borrowed-v1"||!Number.isFinite(C.writtenAt)||C.writtenAt<Q||!/^[a-f0-9-]{36}$/.test(C.nonce)||B!==void 0&&C.nonce!==B||JSON.stringify(C.config)!==JSON.stringify(I)||xm(C.bridge?.pid).ticks!==C.bridge?.ticks)JC();let E=g7(`/proc/${C.bridge.pid}/cmdline`,"utf8").split("\x00");if(!E.some((g,U)=>g==="--config"&&E[U+1]===A)||U7(`/proc/${C.bridge.pid}/cwd`)!==I.selection.binding.directory)JC();return{ok:!0,bridgePid:C.bridge.pid}}catch{return{ok:!1,reason:"borrowed V1 launch evidence unavailable or mismatched"}}}async function g6A(A,Q,B,I){let C=qE(A,Q,I);while(!C.ok&&Date.now()<B)await new Promise((E)=>setTimeout(E,Math.min(50,Math.max(0,B-Date.now())))),C=qE(A,Q,I);return C}var m$="opencode-borrowed-v1-launch.json";var c$=()=>{};import{constants as vm,openSync as U6A,closeSync as J6A,fstatSync as Y6A,readFileSync as G7,writeFileSync as F6A,renameSync as G6A,rmSync as bm}from"node:fs";import{join as l$}from"node:path";import{randomUUID as $6A}from"node:crypto";function T0(A){if(!Number.isSafeInteger(A)||A<=1)return;try{let Q=G7(`/proc/${A}/stat`,"utf8"),B=Q.slice(Q.lastIndexOf(")")+2).trim().split(/\s+/);if(!/^\d+$/.test(B[19]??"")||["Z","X","x"].includes(B[0]))return;return{pid:A,ticks:B[19],parent:Number(B[1]),state:B[0]}}catch{return}}function og(A){let Q=U6A(A,vm.O_RDONLY|vm.O_NOFOLLOW);try{let B=Y6A(Q);if(!B.isFile()||B.nlink!==1||(B.mode&18)!==0||process.getuid&&B.uid!==process.getuid()||B.size>16384)throw Error("unsafe health record");return JSON.parse(G7(Q,"utf8"))}finally{J6A(Q)}}function ym(A,Q,B){return hm(A,Q,B,!1)}function fm(A,Q,B){return hm(A,Q,B,!0)}function hm(A,Q,B,I){if(process.platform!=="linux")return()=>{};let C=T0(process.pid),E=T0(B);if(!C||!E||!I&&E.parent!==C.pid)throw Error("OpenCode launch process identity unavailable");let g={version:1,generation:Q,writtenAt:Date.now(),bridge:C,serve:E,...I?{serveOwnership:"shared"}:{}},U=l$(A,$7),J=`${U}.${$6A()}.tmp`;try{F6A(J,JSON.stringify(g),{flag:"wx",mode:384}),G6A(J,U)}finally{bm(J,{force:!0})}return()=>{try{let Y=og(U);if(Y.generation===Q&&Y.bridge?.pid===C.pid&&Y.bridge?.ticks===C.ticks)bm(U)}catch{}}}function D7(A){return A?.code===0&&A.signal===null}function N6A(A,Q,B,I,C=D6A){try{if(A?.version!==1||!Number.isFinite(A.writtenAt)||A.writtenAt<I||!/^ses_[A-Za-z0-9]+$/.test(A.generation)||Q?.gen!==A.generation)throw Error("stale or mismatched generation");let E=[A.bridge,A.serve,{pid:Q.pid,ticks:String(Q.startTicks)}];if(new Set(E.map((J)=>J.pid)).size!==3)throw Error("overlapping process identities");for(let J of E){let Y=C.process(J.pid);if(!Y||!/^\d+$/.test(J.ticks)||Y.ticks!==J.ticks)throw Error("dead or reused process identity")}if(A.serveOwnership!==void 0&&A.serveOwnership!=="shared")throw Error("unknown serve ownership");if(A.serveOwnership!=="shared"&&C.process(A.serve.pid)?.parent!==A.bridge.pid)throw Error("serve parent mismatch");let g=C.argv(A.bridge.pid);if(!g.some((J,Y)=>J==="--config"&&g[Y+1]===B))throw Error("bridge config mismatch");let U=C.argv(Q.pid);if(V6A(U,A.generation)!=="match")throw Error("TUI session mismatch");return{ok:!0,bridgePid:A.bridge.pid}}catch(E){return{ok:!1,reason:E instanceof Error?E.message:"health unavailable"}}}function V6A(A,Q){if(!Array.isArray(A))return"pre_exec";let B=!1;for(let I=0;I<A.length;I++){let C=A[I]??"";if(C==="--session"){if(B=!0,A[I+1]===Q)return"match"}else if(C.startsWith("--session="))B=!0}return B?"wrong_session":"pre_exec"}function mm(A,Q){let B=!1;try{B=jY(A,og(Q))}catch{}if(B)return{borrowed:B,alive:[]};let I=[],C=(E,g)=>{let U=Number(E?.pid),J=Number.isSafeInteger(U)&&U>1?T0(U):void 0;if(J&&J.ticks===String(E?.ticks))I.push({pid:U,role:g,ticks:J.ticks})};try{let E=og(l$(A,$7));C(E?.bridge,"bridge"),C(E?.serve,"serve");let g=og(l$(A,"opencode-attach.json"));C({pid:g?.pid,ticks:String(g?.startTicks)},"tui")}catch{}return{borrowed:B,alive:I}}function N7(A,Q,B){if(process.platform!=="linux")return{ok:!1,reason:"daemon V2 launch health requires Linux process identity"};try{if(jY(A,og(Q)))return qE(Q,B);return N6A(og(l$(A,$7)),og(l$(A,"opencode-attach.json")),Q,B)}catch{return{ok:!1,reason:"missing or unsafe launch/attach record"}}}async function s9(A,Q,B,I,C={}){let E=C.inspect??N7,g=C.now??Date.now,U=C.sleep??((Y)=>new Promise((F)=>setTimeout(F,Y))),J=E(A,Q,B);while(!J.ok&&g()<I)if(await U(Math.min(50,Math.max(0,I-g()))),J=E(A,Q,B),g()>=I)break;return J}var $7="opencode-launch-health.json",D6A;var p$=H(()=>{c$();D6A={process:T0,argv:(A)=>G7(`/proc/${A}/cmdline`,"utf8").split("\x00").filter(Boolean)}});import{readFileSync as W6A,readdirSync as Z6A,readlinkSync as X6A,statSync as M6A}from"node:fs";import{basename as L6A}from"node:path";function i$(A){return A?.code}function im(){return{platform:process.platform,readProcFile:(A)=>W6A(A,"utf8"),readDir:(A)=>Z6A(A),readLink:(A)=>X6A(A),procUid:(A)=>M6A(`/proc/${A}`).uid,liveProcess:(A)=>{let Q=T0(A);return Q?{pid:Q.pid,ticks:Q.ticks,state:Q.state}:void 0},serveArgsFor:(A,Q,B)=>B7(A).serveArgs({hostname:Q,port:B}),executableBasename:z6A}}function H6A(A){let Q=A.lastIndexOf("serve");return Q<0?[]:A.slice(Q)}function j6A(A,Q,B){let I=Q.lastIndexOf("serve");if(I<1)return"none";if(L6A(Q[I-1])!==A.executableBasename)return"none";let C=Q.slice(I),E=[];for(let g of["v1","v2"]){let U=A.serveArgsFor(g,cm,B);if(C.length===U.length&&C.every((J,Y)=>J===U[Y]))E.push(g)}if(E.length===1)return E[0];return E.length===0?"none":"ambiguous"}function _6A(A,Q){let B;try{B=A("/proc/net/tcp")}catch(E){return i$(E)==="EACCES"||i$(E)==="EPERM"?"permission_denied":[]}let I=`${pm}:${Q.toString(16).toUpperCase().padStart(4,"0")}`,C=new Set;for(let E of B.split(`
|
|
105
105
|
`).slice(1)){let g=E.trim().split(/\s+/);if(g.length<10)continue;if(g[1]!==I||g[3]!==lm)continue;if(/^\d+$/.test(g[9]))C.add(g[9])}return[...C]}function R6A(A,Q){let B;try{B=A("/proc/net/tcp")}catch{return null}let I=`${pm}:${Q.toString(16).toUpperCase().padStart(4,"0")}`;for(let C of B.split(`
|
|
106
|
-
`).slice(1)){let E=C.trim().split(/\s+/);if(E.length<10)continue;if(E[1]!==I||E[3]!==lm)continue;if(/^\d+$/.test(E[7]))return Number(E[7])}return null}function w6A(A,Q){let B=`socket:[${Q}]`,I;try{I=A.readDir("/proc")}catch{return"permission_denied"}let C=!1,E=[];for(let g of I){if(!/^\d+$/.test(g))continue;let U=Number(g);if(U<=0)continue;let J;try{J=A.readDir(`/proc/${U}/fd`)}catch(Y){if(i$(Y)!=="ENOENT")C=!0;continue}for(let Y of J)try{if(A.readLink(`/proc/${U}/fd/${Y}`)===B){if(!E.includes(U))E.push(U);break}}catch(F){if(i$(F)!=="ENOENT")C=!0}}if(C)return"permission_denied";return E}function um(A,Q){let B=_6A(A.readProcFile,Q);if(B==="permission_denied")return{ok:!1,reason:"permission_denied"};if(B.length===0)return{ok:!1,reason:"no_listener"};if(B.length>1)return{ok:!1,reason:"ambiguous_listener"};let I=B[0],C=w6A(A,I);if(C==="permission_denied")return{ok:!1,reason:"permission_denied"};if(C.length===0)return{ok:!1,reason:"socket_owner_not_found"};if(C.length>1)return{ok:!1,reason:"ambiguous_listener"};let E=C[0],g=A.procUid(E);if(g===void 0)return{ok:!1,reason:"identity_mismatch"};let U=A.liveProcess(E);if(!U)return{ok:!1,reason:"identity_mismatch"};return{ok:!0,snapshot:{inode:I,pid:E,uid:g,ticks:U.ticks}}}function t9(A,Q={}){let B={...im(),...Q};try{if(B.platform!=="linux")return{ok:!1,reason:"unsupported_platform"};let I=O6A(A);if(!I)return{ok:!1,reason:"url_not_supported"};let{port:C}=I,E=um(B,C);if(!E.ok)return E;let g=[],U=!0;try{g=B.readProcFile(`/proc/${E.snapshot.pid}/cmdline`).split("\x00").filter((D)=>D!=="")}catch(D){let N=i$(D);if(N==="EACCES"||N==="EPERM")return{ok:!1,reason:"permission_denied"};U=!1}let J=null,Y=null;try{J=B.readLink(`/proc/${E.snapshot.pid}/exe`),Y="proc_exe"}catch{if(U&&g.length>0)J=g[0],Y="argv0"}let F=um(B,C);if(!F.ok)return F;let G=E.snapshot,$=F.snapshot;if(G.inode!==$.inode||G.pid!==$.pid||G.uid!==$.uid||G.ticks!==$.ticks)return{ok:!1,reason:"identity_mismatch"};return{ok:!0,processEvidence:{url:A,host:cm,port:C,listenInode:G.inode,pid:G.pid,uid:G.uid,startTicks:Number(G.ticks),diagnostics:{executable:J,executableSource:Y,socketUid:R6A(B.readProcFile,C),argvTail:H6A(g),argvContract:U?j6A(B,g,C):"none",argvContractNote:K6A}}}}catch{return{ok:!1,reason:"identity_mismatch"}}}function O6A(A){if(typeof A!=="string")return;let Q=q6A.exec(A);if(!Q)return;let B=Number(Q[1]);if(!Number.isSafeInteger(B)||B<=0||B>65535)return;return{port:B}}function dm(A={}){let Q={...im(),...A};return(B,I)=>{if(!Number.isSafeInteger(B)||B<=1)return!1;if(typeof I!=="number"||!Number.isFinite(I))return!1;try{let C=Q.liveProcess(B);return!!C&&C.ticks===String(I)}catch{return!1}}}var cm="127.0.0.1",z6A="opencode",lm="0A",pm="0100007F",K6A,q6A;var V7=H(()=>{ng();p$();K6A="argv shape is a launch-argument diagnostic only: it cannot "+"prove a process's OpenCode generation — never promote it into one.";q6A=/^http:\/\/127\.0\.0\.1:([1-9]\d{0,4})$/});import{readFileSync as T6A,readlinkSync as P6A,statSync as nm}from"node:fs";import{basename as S6A}from"node:path";function x6A(A){if(!Number.isSafeInteger(A)||A<=0)return;try{let Q=P6A(`/proc/${A}/exe`),B=nm(`/proc/${A}/exe`,{bigint:!0});if(!B.isFile())return;return{path:Q,dev:B.dev.toString(),ino:B.ino.toString(),size:B.size.toString()}}catch(Q){let B=Q.code;return B==="EACCES"||B==="EPERM"?"permission_denied":void 0}}function k6A(A){if(!Number.isSafeInteger(A)||A<=0)return;try{let Q=T6A(`/proc/${A}/stat`,"utf8"),B=Q.slice(Q.lastIndexOf(")")+2).trim().split(/\s+/);return/^\d+$/.test(B[19]??"")?B[19]:void 0}catch{return}}function v6A(A){try{let Q=nm(A,{bigint:!0});if(!Q.isFile())return;return{dev:Q.dev.toString(),ino:Q.ino.toString(),size:Q.size.toString()}}catch{return}}function b6A(A){if(typeof A.attest!=="function"||typeof A.revalidate!=="function")throw Error("bindHostSharedServeGeneration requires attest() and revalidate()");return{platform:A.platform??process.platform,procExeIdentity:A.procExeIdentity??x6A,liveTicks:A.liveTicks??k6A,interpreterBasenames:A.interpreterBasenames??om,statBinary:A.statBinary??v6A,reobserve:A.reobserve??((Q)=>t9(Q)),attest:A.attest,revalidate:A.revalidate}}function y6A(A,Q=om){let B=S6A(A).toLowerCase();return Q.includes(B)}function am(A,Q,B){let I;try{I=b6A(B)}catch{return{ok:!1,reason:"attestation_unavailable"}}try{if(I.platform!=="linux")return{ok:!1,reason:"unsupported_platform"};if(!Number.isSafeInteger(A.pid)||A.pid<=0)return{ok:!1,reason:"exe_unreadable"};let C=I.procExeIdentity(A.pid);if(C==="permission_denied")return{ok:!1,reason:"permission_denied"};if(!C)return{ok:!1,reason:"exe_unreadable"};if(y6A(C.path,I.interpreterBasenames))return{ok:!1,reason:"interpreter_or_wrapper_exe"};let E=I.liveTicks(A.pid);if(E===void 0||E!==String(A.startTicks))return{ok:!1,reason:"observation_drift"};let g;try{g=I.attest(Q)}catch{return{ok:!1,reason:"attestation_unavailable"}}if((g.generation??"v1")!==Q||!PQ(Q,g.expectedVersion))return{ok:!1,reason:"generation_contract_mismatch"};let J=I.statBinary(g.binary);if(!J)return{ok:!1,reason:"attestation_unavailable"};let Y=g.binaryFile;if(String(Y.dev)!==J.dev||String(Y.ino)!==J.ino||String(Y.size)!==J.size)return{ok:!1,reason:"attestation_identity_imprecise"};if(J.dev!==C.dev||J.ino!==C.ino||J.size!==C.size)return{ok:!1,reason:"executable_identity_mismatch"};try{I.revalidate(g)}catch{return{ok:!1,reason:"file_changed_since_attestation"}}let F;try{let D=I.reobserve(A.url);if(!D.ok)return{ok:!1,reason:"observation_drift"};F=D.processEvidence}catch{return{ok:!1,reason:"observation_drift"}}if(F.pid!==A.pid||F.listenInode!==A.listenInode||F.uid!==A.uid||F.startTicks!==A.startTicks||F.host!==A.host||F.port!==A.port)return{ok:!1,reason:"observation_drift"};let G=I.procExeIdentity(A.pid),$=I.liveTicks(A.pid);if(G==="permission_denied")return{ok:!1,reason:"permission_denied"};if(!G||$===void 0)return{ok:!1,reason:"observation_drift"};if(G.dev!==C.dev||G.ino!==C.ino||G.size!==C.size||$!==E)return{ok:!1,reason:"observation_drift"};return{ok:!0,generation:Q,proof:{binaryPath:g.binary,dev:J.dev,ino:J.ino,size:J.size,sha256:String(Y.sha256),packageName:CB(Q).packageName,packageVersion:g.expectedVersion,pid:A.pid,startTicks:A.startTicks,listenInode:A.listenInode}}}catch{return{ok:!1,reason:"attestation_unavailable"}}}var om;var rm=H(()=>{EC();V7();om=["bun","node","nodejs","deno","tsx","ts-node","env","sh","bash"]});function sm(A){if(typeof A!=="string")return"not_loopback";let Q=f6A.exec(A);if(Q){let C=Number(Q[1]);if(Number.isSafeInteger(C)&&C>0&&C<=65535)return"supported"}if(A.startsWith("http://127.0.0.1:")||A.startsWith("http://127.0.0.1"))return"unsupported_loopback";let B;try{B=new URL(A)}catch{return"not_loopback"}return h6A.has(B.hostname)||/^127\./.test(B.hostname)?"unsupported_loopback":"not_loopback"}function m6A(A){return sm(A)==="supported"}function u6A(A){if(typeof A==="number"&&Number.isFinite(A))return A;if(typeof A==="string"&&A.trim()!==""&&Number.isFinite(Number(A)))return Number(A);return null}function tm(A){if((A.mode??"host-shared")==="off")return{decision:"fallback",reason:"host_shared_off"};let Q=A.observations.filter((C)=>!!C&&typeof C==="object");if(Q.length===0)return{decision:"fallback",reason:"no_candidate"};let B=A.probeAlive;if(typeof B!=="function")return{decision:"fallback",reason:"probe_unavailable"};let I=[];for(let C of Q){let E=c6A(A,C,B);if(typeof E==="string"){I.push(E);continue}return{decision:"admit",reason:"host_shared_live",server:E}}return{decision:"fallback",reason:I[0]??"no_candidate"}}function c6A(A,Q,B){if(!m6A(Q.url))return sm(Q.url)==="unsupported_loopback"?"host_not_127_0_0_1":"not_loopback";if(Q.generation!==A.generation)return"generation_mismatch";let I=u6A(Q.uid);if(I===null||I!==A.uid)return"foreign_uid";if(typeof Q.pid!=="number"||!Number.isFinite(Q.pid)||Q.pid<=0)return"missing_pid";let{pid:C}=Q,E=Q.startTicks;if(typeof E!=="number"||!Number.isFinite(E))return"missing_start_ticks";let g;try{g=B(C,E)}catch{return"probe_error"}if(g!==!0)return"not_live";return{url:Q.url,uid:I,pid:C,startTicks:E,generation:A.generation}}var f6A,h6A;var em=H(()=>{f6A=/^http:\/\/127\.0\.0\.1:([1-9]\d{0,4})$/,h6A=new Set(["127.0.0.1","localhost","[::1]","::1"])});function Au(A){if(A.newServer===!0)return{decision:"fallback",reason:"explicit_new_server"};if(!A.candidate)return{decision:"fallback",reason:"no_candidate"};let Q=process.getuid?.();if(Q===void 0)return{decision:"fallback",reason:"uid_unavailable"};let B=t9(A.candidate.opencodeSharedServerUrl);if(!B.ok)return{decision:"fallback",reason:`observe_${B.reason}`};let I=B.processEvidence,C=(E)=>({decision:"fallback",reason:E,pid:I.pid,port:I.port});if(I.uid!==Q)return C("foreign_uid");try{$Y(A.nodeDir);let E=[A.nodeDir,...KY(A.projectDir)],g=r9,U=g.buildChildEnv({workDir:A.nodeDir,cwd:A.projectDir,unsafeTools:!1,credentialMode:"probe",managedPolicyMode:"redirect-only",parentEnv:{PATH:A.searchPath}}),J,Y=!1;try{let G=q0(A.nodeDir,U);J=am(I,"v2",{attest:()=>g.resolveBinary({searchPath:A.searchPath,probeEnv:U,probeCwd:G,forbiddenRoots:E}),revalidate:($)=>{g.revalidateBinary($,{forbiddenRoots:E})}})}finally{Y=dg(A.nodeDir,U)}if(!Y)return C("probe_cleanup_failed");if(!J.ok)return C(`generation_${J.reason}`);let F=tm({uid:Q,generation:"v2",observations:[{...I,generation:J.generation}],probeAlive:dm()});if(F.decision!=="admit"||!F.server)return C(F.reason);return{decision:"admit",reason:F.reason,pid:F.server.pid,port:I.port,fields:{opencodeSharedServerUrl:F.server.url,opencodeSharedServerPasswordFile:A.candidate.opencodeSharedServerPasswordFile}}}catch{return C("probe_unavailable")}}var Qu=H(()=>{DY();ng();f$();O0();V7();rm();em()});import{execFileSync as l6A,spawn as SaA,spawnSync as xaA}from"node:child_process";import{mkdirSync as p6A}from"node:fs";import{dirname as i6A,join as d6A}from"node:path";function n6A(A=process.env,Q=typeof process.getuid==="function"?process.getuid():0){let B=A.ANET_TMUX_SOCKET?.trim();if(B)return{socket:B,source:"ANET_TMUX_SOCKET"};let I=A.TMUX_TMPDIR?.trim();if(I)return{socket:d6A(I,`tmux-${Q}`,"default"),source:"TMUX_TMPDIR"};return null}function o6A(A){if(!A)return null;let Q=A.indexOf(",");return(Q<0?A:A.slice(0,Q)).trim()||null}function a6A(A){return A.some((Q)=>Q.length>=8&&"kill-server".startsWith(Q))}function r6A(A,Q,B){if(a6A(A))throw new Bu(A);let I=Q??process.env,C=n6A(I,B);if(!C)return{file:"tmux",args:[...A],env:Q,isolation:null};let E={...I};if(o6A(I.TMUX)!==C.socket)delete E.TMUX,delete E.TMUX_PANE;return{file:"tmux",args:["-S",C.socket,...A],env:E,isolation:C}}function s6A(A){if(A.isolation?.source!=="TMUX_TMPDIR")return;try{p6A(i6A(A.isolation.socket),{recursive:!0,mode:448})}catch{}}function t6A(A,Q){let B=r6A(A,Q?.env);s6A(B);let I=B.env===void 0?Q:{...Q??{},env:B.env};return{inv:B,opts:I}}function eQ(A,Q){let{inv:B,opts:I}=t6A(A,Q);return l6A(B.file,B.args,I)}var Bu;var OE=H(()=>{Bu=class Bu extends Error{constructor(A){super(`refusing to run \`tmux ${A.join(" ")}\`: kill-server is never issued by anet (#505). Kill the sessions you created with \`kill-session -t =<name>\` instead.`);this.name="TmuxKillServerRefused"}}});function e6A(A){let Q=A.trim();if(!Q||Q==="."||Q===".."||Q.startsWith("=")||/[\0\n\r]/.test(Q))return;return[{name:Q,role:"tui"},{name:`${Q}-appsrv`,role:"appsrv"},{name:`${Q}-桥`,role:"bridge"}]}function Iu(A,Q,B=AWA){if(!Q)return{borrowed:!1,alive:[]};let I=e6A(A);if(!I)return{borrowed:!1,alive:[]};return{borrowed:!1,alive:I.filter((C)=>B(C.name)).map((C)=>({id:C.name,role:C.role}))}}var AWA=(A)=>{try{return eQ(["has-session","-t",`=${A}`],{stdio:"ignore",timeout:5000}),!0}catch{return!1}};var Cu=H(()=>{OE()});function d$(A){return["-u",...A]}function W7(A){return A.join("|ANETSEP|")}function P0(A,Q){return d$([...A,"-F",W7(Q)])}function pC(A,Q){let B=[];for(let I of A.split(/\r?\n/)){if(!I)continue;let C=Q===1?[I]:I.includes("|ANETSEP|")?I.split("|ANETSEP|"):I.split("\t");if(C.length!==Q)continue;B.push(C)}return B}import{existsSync as QWA,readdirSync as BWA,readFileSync as Uu}from"node:fs";import{isAbsolute as Eu,join as IWA,resolve as e9}from"node:path";function Z7(A){let Q=A.config??{},B=A.exists??QWA,I=Q.codexHome;if(typeof I==="string"&&I.trim()&&Eu(I.trim()))return{codexHome:e9(I.trim()),source:"config.codexHome"};let C=IWA(A.nodeDir,"codex-home");if(Q.codexCopresence===!0||B(C))return{codexHome:e9(C),source:"node-codex-home"};let E=Q.env,g=E&&typeof E==="object"?E.CODEX_HOME:void 0;if(typeof g==="string"&&g.trim()&&Eu(g.trim()))return{codexHome:e9(g.trim()),source:"config.env"};return{codexHome:null,source:"none"}}function EWA(A){return CWA.test(A)}function Ju(A,Q){let B=typeof A.CODEX_HOME==="string"&&A.CODEX_HOME.trim()?A.CODEX_HOME:void 0;if(Q.codexHome){A.CODEX_HOME=Q.codexHome;let I=B!==void 0&&e9(B)!==Q.codexHome?`CODEX_HOME from the environment (${B}) is not this node's; using ${Q.codexHome} (${Q.source})`:null;return{codexHome:Q.codexHome,note:I}}if(B!==void 0&&EWA(B))return delete A.CODEX_HOME,{codexHome:void 0,note:`dropped CODEX_HOME=${B} inherited from the environment — it is another anet node's codex-home; this node has none of its own, so codex uses its default`};return{codexHome:B,note:B!==void 0?`CODEX_HOME=${B} comes from the launching environment (this node has no codex-home of its own)`:null}}function X7(A){let Q=[],B=0;for(let I=0;I<=A.length;I++){if(I<A.length&&A[I]!==0)continue;if(I===A.length&&B===I)break;let C=A.subarray(B,I),E;try{E=gWA.decode(C)}catch{let g=Buffer.from(C).toString("latin1"),U=g.indexOf("=");E=U>=0?g.slice(0,U+1)+gu+g.slice(U+1):gu+g}Q.push(E),B=I+1}return Q.length===0?"":Q.join("\x00")+(A[A.length-1]===0?"\x00":"")}function _Y(A){return/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/.test(A)}function AV(A,Q){try{return X7(Uu(`/proc/${A}/${Q}`))}catch{return null}}function S0(A,Q){if(A===null)return;let B=`${Q}=`;for(let I of A.split("\x00"))if(I.startsWith(B))return I.slice(B.length);return null}function JWA(A,Q){let B=new Map;for(let[g,U]of Q){if(!B.has(U))B.set(U,[]);B.get(U).push(g)}let I=[],C=[...B.get(A)??[]],E=new Set([A]);while(C.length>0){let g=C.shift();if(E.has(g))continue;E.add(g),I.push(g),C.push(...B.get(g)??[])}return I}function QV(A){let Q=A.platform??process.platform;if(Q!=="linux")return{ok:!0,checked:[],skipped:`not linux (${Q}); /proc environ check unavailable`};if(_Y(A.expected))return{ok:!1,pid:A.rootPid,actual:null,expected:A.expected,message:`${A.label} expected CODEX_HOME is not a well-formed string; refusing`};let B=A.reader??UWA,I=S0(B.environ(A.rootPid),"CODEX_HOME");if(I===void 0)return{ok:!0,checked:[],skipped:`pid ${A.rootPid} environ unreadable`};if(I!==A.expected)return{ok:!1,pid:A.rootPid,actual:I,expected:A.expected,message:`${A.label} pid ${A.rootPid} runs with CODEX_HOME=${I??"<unset>"}, expected ${A.expected}`};let C=[A.rootPid];for(let E of JWA(A.rootPid,B.parents())){let g=S0(B.environ(E),"CODEX_HOME");if(g===void 0||g===null)continue;if(C.push(E),g!==A.expected)return{ok:!1,pid:E,actual:g,expected:A.expected,message:`${A.label} child pid ${E} (under ${A.rootPid}) runs with CODEX_HOME=${g}, expected ${A.expected}`}}return{ok:!0,checked:C}}var CWA,gu="\uDFFF",gWA,UWA;var n$=H(()=>{CWA=/[\\/]\.anet[\\/]nodes[\\/][^\\/]+[\\/]codex-home[\\/]?$/;gWA=new TextDecoder("utf-8",{fatal:!0});UWA={environ(A){return AV(A,"environ")},parents(){let A=[],Q=[];try{Q=BWA("/proc")}catch{return A}for(let B of Q){if(!/^\d+$/.test(B))continue;try{let I=Uu(`/proc/${B}/stat`,"latin1"),C=I.slice(I.lastIndexOf(")")+2).split(" "),E=Number(C[1]);if(Number.isInteger(E))A.push([Number(B),E])}catch{}}return A}}});import{lstatSync as Yu,readFileSync as wY,realpathSync as YWA}from"node:fs";import{join as RY}from"node:path";function BV(A,Q){if(!Number.isSafeInteger(A)||A<=1||!/^[A-Za-z0-9-]+$/.test(Q))return!1;let B;try{B=wY(`/proc/${A}/environ`)}catch{return!1}let I=Buffer.from(`ANET_NODE_MARKER=${Q}\x00`,"ascii");for(let C=B.indexOf(I);C>=0;C=B.indexOf(I,C+1))if(C===0||B[C-1]===0)return!0;return!1}function iC(A){if(!Number.isSafeInteger(A)||A<=1)throw Error("adopt_pid_invalid");let Q=`/proc/${A}`,B;try{B=wY(RY(Q,"stat"),"utf8")}catch(J){if(J.code==="ENOENT")return null;throw Error("adopt_proc_unreadable")}let I=B.slice(B.lastIndexOf(")")+2).split(" ");if(I[0]==="Z")return null;let C=I[19];if(!C||!/^\d+$/.test(C))throw Error("adopt_proc_invalid");let E=Object.create(null);for(let J of X7(wY(RY(Q,"environ"))).split("\x00")){if(_Y(J))throw Error("adopt_proc_invalid");let Y=J.indexOf("=");if(Y>0){let F=J.slice(0,Y);if(Object.hasOwn(E,F))throw Error("adopt_proc_invalid");E[F]=J.slice(Y+1)}}let g={pid:A,birth:C,uid:Yu(Q).uid,env:E,cwd:YWA(RY(Q,"cwd")),argv:wY(RY(Q,"cmdline"),"utf8").split("\x00").filter(Boolean)},U=wY(RY(Q,"stat"),"utf8");if(U.slice(U.lastIndexOf(")")+2).split(" ")[19]!==C)throw Error("adopt_pid_changed");return g}function o$(A){let Q=RY(A,".pid");try{let B=Yu(Q);if(!B.isFile()||B.isSymbolicLink()||B.uid!==process.getuid?.()||B.mode&18)throw Error("adopt_pidfile_unsafe");let I=wY(Q,"utf8").trim(),C=Number(I);if(!/^\d+$/.test(I)||!Number.isSafeInteger(C)||C<=1)throw Error("adopt_pid_invalid");return C}catch(B){if(B.code==="ENOENT")return null;throw B}}var a$=H(()=>{n$()});import{lstatSync as Fu,readFileSync as Gu,realpathSync as FWA}from"node:fs";import{join as $u}from"node:path";function x0(A,Q){let B=M7(A,Q);if(B.previousBoot)throw Error("adopt_codex_readopt_required");return B.scope}function M7(A,Q){let B=A.config.codexLaunchLayout;if(B!==void 0&&B!=="external-appserver")throw Error("adopt_codex_layout_unsupported");let I=$u(A.nodeDir,"copresence-identity.json"),C=Fu(I),E=$u(A.nodeDir,"codex-home"),g=Fu(E);if(!C.isFile()||C.isSymbolicLink()||C.uid!==Q||C.mode&18||!g.isDirectory()||g.isSymbolicLink()||g.uid!==Q||g.mode&63||FWA(E)!==E)throw Error("adopt_codex_marker_unsafe");let U=JSON.parse(Gu(I,"utf8"));if(!U||typeof U.marker!=="string"||!/^[a-f0-9-]{36}$/i.test(U.marker)||U.owner_uid!==Q||typeof U.boot_id!=="string"||!/^[a-f0-9-]{36}$/i.test(U.boot_id))throw Error("adopt_codex_marker_invalid");let J=U.boot_id!==Gu("/proc/sys/kernel/random/boot_id","utf8").trim(),Y=A.config.env?.ANET_TMUX_SOCKET;if(Y!==void 0&&typeof Y!=="string")throw Error("adopt_codex_socket_unproven");return{previousBoot:J,scope:{layout:B==="external-appserver"?"external-appserver":"native",alias:A.alias,socket:Y??`/tmp/tmux-${Q}/default`,marker:U.marker,codexHome:E,workdir:A.workdir,uid:Q}}}var IV=()=>{};import{lstatSync as GWA,readFileSync as $WA,readdirSync as DWA}from"node:fs";function SQ(A){if(!Number.isSafeInteger(A)||A<=1)throw Error("adopt_pid_invalid");try{let Q=$WA(`/proc/${A}/stat`,"utf8"),B=Q.slice(Q.lastIndexOf(")")+2).split(" ");if(B[0]==="Z"||B[0]==="X")return null;if(!/^\d+$/.test(B[19]??""))throw Error("adopt_proc_invalid");return{pid:A,ppid:Number(B[1]),birth:B[19],uid:GWA(`/proc/${A}`).uid}}catch(Q){if(Q.code==="ENOENT"||Q.code==="ESRCH")return null;throw Q}}function dC(A,Q){return!!Q&&Q.pid===A.pid&&Q.birth===A.birth&&Q.uid===A.uid}async function CV(A,Q=NWA){let B=new Map([[A.pid,A]]),I=[],C=(E,g)=>{let U=Q.read(E.pid);if(!U)return;if(!dC(E,U))throw Error("adopt_process_generation_changed");Q.signal(E.pid,g)};try{C(A,"SIGSTOP"),I.push(A);for(let E=0;E<32;E++){let g=0;for(let U of Q.list()){if(B.has(U))continue;let J=Q.read(U);if(!J||J.uid!==A.uid)continue;let Y=B.get(J.ppid);if(!Y||!dC(Y,Q.read(Y.pid)))continue;C(J,"SIGSTOP"),I.push(J),B.set(U,J),g++}if(!g)break;if(E===31)throw Error("adopt_process_tree_unstable")}for(let E of[...B.values()].reverse())C(E,"SIGTERM"),C(E,"SIGCONT");for(let E=0;E<40;E++){if([...B.values()].every((g)=>!dC(g,Q.read(g.pid))))return;await Q.sleep(50)}for(let E of[...B.values()].reverse())C(E,"SIGKILL");for(let E=0;E<40;E++){if([...B.values()].every((g)=>!dC(g,Q.read(g.pid))))return;await Q.sleep(50)}throw Error("adopt_process_stop_timeout")}finally{for(let E of I)try{if(dC(E,Q.read(E.pid)))Q.signal(E.pid,"SIGCONT")}catch{}}}var NWA;var qY=H(()=>{NWA={read:SQ,list:()=>DWA("/proc").filter((A)=>/^\d+$/.test(A)&&Number(A)>1).map(Number),signal:(A,Q)=>{process.kill(A,Q)},sleep:(A)=>new Promise((Q)=>setTimeout(Q,A))}});import{isAbsolute as EV,relative as VWA}from"node:path";function II(A){if(A.layout!=="native"&&A.layout!=="external-appserver")throw Error("adopt_codex_layout_unsupported");return A.layout==="external-appserver"?{bridge:A.alias,tui:`${A.alias}-tui`,appsrv:`${A.alias}-appsrv`}:{bridge:`${A.alias}-桥`,tui:A.alias,appsrv:`${A.alias}-appsrv`}}function L7(A,Q,B){let I=VWA(A.workdir,Q);return Q===A.workdir||!B&&I!==".."&&!I.startsWith("../")&&!EV(I)}function Du(A,Q,B=k0){if(!A.alias||!A.marker||!EV(A.socket)||!EV(A.codexHome)||!EV(A.workdir)||!Number.isSafeInteger(A.uid)||A.uid<0)throw Error("adopt_codex_scope_invalid");let I=II(A),C={},E=new Set,g=new Set;for(let U of B){let J=Q.filter((F)=>F.socket===A.socket&&F.sessionName===I[U]);if(J.length!==1)throw Error("adopt_codex_stage_ambiguous");let Y=J[0];if(!/^\$\d+$/.test(Y.session)||!/^%\d+$/.test(Y.pane)||E.has(Y.session)||g.has(Y.pane)||Q.some((F)=>F.socket===A.socket&&F.session===Y.session&&F!==Y))throw Error("adopt_codex_target_ambiguous");if(!Y.processes.length)throw Error("adopt_codex_stage_missing");for(let F of Y.processes){if(F.uid!==A.uid||!L7(A,F.cwd,Y.rootPid===void 0||F.pid===Y.rootPid)||F.env.ANET_NODE_MARKER!==A.marker||F.env.CODEX_HOME!==A.codexHome)throw Error("adopt_codex_identity_unproven");if(!Number.isSafeInteger(F.pid)||F.pid<=1||!/^\d+$/.test(F.birth))throw Error("adopt_codex_generation_invalid")}E.add(Y.session),g.add(Y.pane),C[U]=Y}return C}var k0;var ag=H(()=>{k0=["bridge","tui","appsrv"]});import{lstatSync as Nu,readdirSync as Zu,realpathSync as WWA}from"node:fs";import{dirname as ZWA,isAbsolute as XWA}from"node:path";import{isDeepStrictEqual as Vu}from"node:util";function MWA(A,Q){if(!XWA(A)||/[\0\r\n]/.test(A))throw Error("adopt_socket_unsafe");let B=ZWA(A),I=Nu(B),C=Nu(A);if(!I.isDirectory()||I.isSymbolicLink()||WWA(B)!==B||I.uid!==Q||I.mode&63||!C.isSocket()||C.isSymbolicLink()||C.uid!==Q)throw Error("adopt_socket_unsafe")}function z7(A){return{...process.env,ANET_TMUX_SOCKET:A,TMUX:void 0,TMUX_PANE:void 0}}function nC(A,Q=!1){for(let B=0;;B++){try{MWA(A.socket,A.uid)}catch(E){if(Q&&E.code==="ENOENT")return[];throw E}let I;try{I=eQ(P0(["list-panes","-a"],["#{session_name}","#{session_id}","#{pane_id}","#{pane_pid}","#{pane_dead}"]),{encoding:"utf8",timeout:5000,env:z7(A.socket)})}catch(E){let g=String(E.stderr??"");if(Q&&E.status===1&&(/^no server running on /m.test(g)||/^error connecting to .* \(No such file or directory\)$/m.test(g)))return[];if(Q&&E.status===1&&g.trim()==="server exited unexpectedly"&&B<2){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25);continue}throw Error("adopt_tmux_listing_failed")}let C=pC(I,5);if(C.length!==I.split(/\r?\n/).filter(Boolean).length)throw Error("adopt_tmux_listing_invalid");return C}}function Wu(A){let Q=Zu("/proc").filter((C)=>/^\d+$/.test(C)&&Number(C)>1).map((C)=>SQ(Number(C))).filter((C)=>C!==null);if(!Q.find((C)=>C.pid===A))throw Error("adopt_codex_stage_missing");let I=new Set([A]);for(let C=!0;C;){C=!1;for(let E of Q)if(I.has(E.ppid)&&!I.has(E.pid))I.add(E.pid),C=!0}return Q.filter((C)=>I.has(C.pid)).sort((C,E)=>C.pid-E.pid).map((C)=>{let E=iC(C.pid);if(!E||E.birth!==C.birth||!dC(C,SQ(C.pid)))throw Error("adopt_process_generation_changed");return E})}function LWA(A,Q){let B=new Map(Q.flatMap((I)=>I.processes).map((I)=>[I.pid,I.birth]));for(let I of Zu("/proc")){if(!/^\d+$/.test(I)||Number(I)<=1)continue;let C=Number(I),E=SQ(C);if(!E||E.uid!==A.uid)continue;if(!BV(C,A.marker))continue;let g;try{g=iC(C)}catch(U){if(!SQ(C))continue;throw U}if(g?.env.ANET_NODE_MARKER===A.marker&&B.get(C)!==g.birth)throw Error("adopt_codex_untracked_process")}}function rg(A,Q=k0,B=!1){let I=II(A),C=nC(A,B),E=new Set(Q.map((Y)=>I[Y])),g=new Set(C.filter((Y)=>E.has(Y[0])).map((Y)=>Y[1])),U=C.filter((Y)=>g.has(Y[1])&&!(B&&Y[4]==="1")).map((Y)=>{if(Y[4]!=="0"||!/^\d+$/.test(Y[3]))throw Error("adopt_codex_stage_missing");return{socket:A.socket,sessionName:Y[0],session:Y[1],pane:Y[2],rootPid:Number(Y[3]),processes:Wu(Number(Y[3]))}}),J=B?Q.filter((Y)=>U.some((F)=>F.sessionName===I[Y])):Q;Du(A,U,J);for(let Y of U)if(C.filter((F)=>F[1]===Y.session).length!==1)throw Error("adopt_codex_target_ambiguous");if(LWA(A,U),!Vu(C,nC(A,B)))throw Error("adopt_codex_topology_changed");for(let Y of U){let F=C.find((G)=>G[2]===Y.pane);if(!Vu(Y.processes,Wu(Number(F[3]))))throw Error("adopt_process_generation_changed")}return U}var OY=H(()=>{OE();qY();a$();ag()});import{createHash as zWA}from"node:crypto";import{lstatSync as Xu,realpathSync as KWA}from"node:fs";import{dirname as K7,isAbsolute as HWA}from"node:path";function TE(A){return zWA("sha256").update(JSON.stringify(A.config)).digest("hex")}function H7(A,Q){if(!HWA(A)||A.endsWith(`/tmux-${Q}/default`)||/[\r\n\0]/.test(A))throw Error("adopt_explicit_private_socket_required");let B=Xu(K7(A));if(!B.isDirectory()||B.isSymbolicLink()||KWA(K7(A))!==K7(A)||B.uid!==Q||B.mode&63)throw Error("adopt_socket_directory_unsafe");let I=Xu(A);if(!I.isSocket()||I.uid!==Q)throw Error("adopt_socket_unsafe")}function jWA(A,Q,B){if(H7(A,B),!/^%\d+$/.test(Q))throw Error("adopt_pane_invalid");let I=eQ(d$(["display-message","-p","-t",Q,W7(["#{pane_pid}","#{session_name}","#{pane_dead}"])]),{encoding:"utf8",timeout:5000,env:{...process.env,ANET_TMUX_SOCKET:A,TMUX:void 0,TMUX_PANE:void 0}}),C=pC(I,3);if(C.length!==1)throw Error("adopt_pane_unverified");let E=C[0],g=Number(E[0]);if(!Number.isSafeInteger(g)||g<=1||!E[1]||/[\r\n\0]/.test(E[1]))throw Error("adopt_pane_unverified");return{pid:g,session:E[1],dead:E[2]==="1"}}function gV(A,Q){if(!Q.env.TMUX)return{mode:"bare",config_hash:TE(A)};let B=Q.env.TMUX.split(",")[0],I=Q.env.TMUX_PANE??"",C=jWA(B,I,Q.uid),E=SQ(Q.pid),g=!1;for(let U=0;E&&U<128;U++){if(E.uid!==Q.uid)break;if(E.pid===C.pid){g=!0;break}if(E.ppid<=1)break;E=SQ(E.ppid)}if(!g||C.dead)throw Error("adopt_pane_process_mismatch");return{mode:"tmux",config_hash:TE(A),socket:B,pane:I,session:C.session}}var UV=H(()=>{OE();qY()});import{lstatSync as _WA,realpathSync as RWA}from"node:fs";import{isAbsolute as Mu,relative as wWA}from"node:path";import{isDeepStrictEqual as qWA}from"node:util";function JV(A,Q,B){let I=A.config,C=I.codexThreadId;if(typeof C!=="string"||!OWA.test(C))throw Error("adopt_codex_exact_thread_required");let E=I.codexAppServerUrl;if(typeof E!=="string"||!/^ws:\/\/(127\.0\.0\.1|\[::1\]):[1-9][0-9]{0,4}\/?$/.test(E))throw Error("adopt_codex_local_endpoint_required");let g;try{g=new URL(E)}catch{throw Error("adopt_codex_local_endpoint_required")}if(!g.port||Number(g.port)>65535)throw Error("adopt_codex_local_endpoint_required");let U=I.codexProjectDir===void 0||I.codexProjectDir===""?A.workdir:I.codexProjectDir;if(typeof U!=="string"||!Mu(U)||/[\0\r\n]/.test(U))throw Error("adopt_codex_project_unproven");let J=wWA(A.workdir,U);if(J===".."||J.startsWith("../")||Mu(J))throw Error("adopt_codex_project_unproven");let Y=_WA(U);if(!Y.isDirectory()||Y.isSymbolicLink()||RWA(U)!==U||Y.uid!==Q.uid||Y.mode&18)throw Error("adopt_codex_project_unproven");let F=I.env;if(I.codexHome!==void 0&&I.codexHome!==Q.codexHome||F?.CODEX_HOME!==void 0&&F.CODEX_HOME!==Q.codexHome)throw Error("adopt_codex_home_unproven");if(!B||!A.nodeId||Q.alias!==A.alias||Q.workdir!==A.workdir)throw Error("adopt_codex_start_inputs_invalid");return{version:1,binding_request_id:B,node_id:A.nodeId,config_hash:TE(A),scope:{...Q},node_dir:A.nodeDir,project_dir:U,thread_id:C,appserver_url:E}}function Lu(A,Q,B){try{return JV(A,Q,B)}catch{return}}function zu(A,Q,B,I){if(!A)throw Error("adopt_codex_start_evidence_missing");let C=JV(Q,B,I);if(!qWA(A,C))throw Error("adopt_codex_start_evidence_changed");return C}var OWA;var YV=H(()=>{UV();OWA=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});var ju={};DA(ju,{reproducibleEnvironment:()=>s$,handleUnadoptDoorbell:()=>kWA,handleAdoptDoorbell:()=>SWA});import{existsSync as Ku,lstatSync as _7,readFileSync as TWA,unlinkSync as PWA}from"node:fs";import{join as Hu}from"node:path";import{isDeepStrictEqual as r$}from"node:util";function s$(A,Q){let B=A.config,I=BQ({},"linux",{HOME:Q.home,LANG:Q.daemonEnv.LANG}),C={},E=Hu(A.nodeDir,".env");try{let g=_7(E);if(!g.isFile()||g.isSymbolicLink()||g.uid!==Q.uid||g.mode&63)throw Error("adopt_env_file_unsafe");let U=yX(TWA(E,"utf8"));if(U.problems.length)throw Error("adopt_env_file_invalid");Object.assign(C,U.values)}catch(g){if(g.code!=="ENOENT")throw g}if(B.env!==void 0){if(!B.env||typeof B.env!=="object"||Array.isArray(B.env))throw Error("adopt_config_env_invalid");for(let[g,U]of Object.entries(B.env))if(typeof U==="string")I[g]=U.replace(/^~/,Q.home);else if(U&&typeof U==="object"&&typeof U._envRef==="string"){let J=U._envRef;if(C[J]===void 0)throw Error(`adopt_env_not_reproducible:${g}`);I[g]=C[J]}else throw Error("adopt_config_env_invalid")}if(fN(A.nodeDir,I),Object.assign(I,{COMMHUB_ALIAS:A.alias,COMMHUB_NODE_ID:A.nodeId,COMMHUB_URL:Q.hubUrl,ANET_CONFIG_UPDATE_CAPABLE:"1"}),typeof B.token==="string")I.COMMHUB_TOKEN=B.token;return I}function SWA(A,Q){let B=`${Q.workDir}\x00${A.request_id}`,I=j7.get(B);if(I)return I;let C=xWA(A.request_id,Q).finally(()=>j7.delete(B));return j7.set(B,C),C}async function xWA(A,Q){let B=await Q.callCommHub("get_adopt_request",{request_id:A});if(!B?.ok)return;let I=!1,C="",E;try{if(process.platform!=="linux")throw Error("adopt_platform_unsupported");if(B.request_id!==A)throw Error("adopt_request_mismatch");let g=uC(B,{...Q,allowCodexV2:!0});if(C=g.alias,g.config.codexCopresence){let U=x0(g,Q.uid);rg(U);let J=uC(B,{...Q,allowCodexV2:!0});if(!r$(g,J)||!r$(U,x0(J,Q.uid)))throw Error("adopt_identity_changed");let Y=Hu(g.nodeDir,".hub-stopped");if(Ku(Y)){let F=_7(Y);if(!F.isFile()||F.isSymbolicLink()||F.uid!==Q.uid||F.mode&18)throw Error("adopt_codex_marker_unsafe");E={path:Y,ino:F.ino,mtimeMs:F.mtimeMs}}CY(Q.workDir,C,{adopted:!0,request_id:A,node_id:g.nodeId,nodeDir:g.nodeDir,workdir:g.workdir,launch_mode:"tmux",codex_v2:{version:1,layout:U.layout,socket:U.socket,marker:U.marker,config_hash:TE(g),start_inputs:Lu(g,U,A)}})}else{let U=Q.readProc??iC,J=o$(g.nodeDir),Y=J?U(J):null,F=s$(g,Q),G={uid:Q.uid,home:Q.home,defaultTmuxSocket:F.ANET_TMUX_SOCKET||`/tmp/tmux-${Q.uid}/default`,reproducibleEnv:F},$=Y?H9(g,Y,G):"tmux",D=uC(B,Q);if(!r$(g,D)||o$(g.nodeDir)!==J||!r$(F,s$(D,Q)))throw Error("adopt_identity_changed");let N=J?U(J):null;if(!r$(Y,N))throw Error("adopt_process_changed");CY(Q.workDir,C,{adopted:!0,request_id:A,node_id:g.nodeId,nodeDir:g.nodeDir,workdir:g.workdir,launch_mode:$})}I=!0}catch(g){let U=typeof g?.message==="string"&&/^(adopt_|daemon_has_|copresence_|cannot_adopt_|workdir_)[a-z_]+(:[A-Z0-9_,]+)?$/.test(g.message)?g.message:"adopt_local_verification_failed";await Q.callCommHub("ack_adopt_request",{request_id:A,status:"refused",error:U});return}if(I)try{if(!(await Q.callCommHub("ack_adopt_request",{request_id:A,status:"adopted"}))?.ok)throw W9(Q.workDir,C,A),Error("adopt_ack_rejected");let U=IB(Q.workDir,C);if(U?.request_id===A&&U.codex_v2&&E){let J=E.path;if(Ku(J)){let Y=_7(J);if(!Y.isFile()||Y.isSymbolicLink()||Y.uid!==Q.uid||Y.mode&18)throw Error("adopt_codex_marker_unsafe");if(Y.ino===E.ino&&Y.mtimeMs===E.mtimeMs)PWA(J)}}}catch(g){if(g instanceof QI&&g.appLevel)W9(Q.workDir,C,A);throw g}}async function kWA(A,Q){let B=await Q.callCommHub("list_my_children",{});if(!B?.ok||!Array.isArray(B.children))return;if(B.children.some((I)=>I.child_node_id===A.node_id&&I.managed==="adopted"))return;for(let I of Object.keys(hC(Q.workDir)))if(IB(Q.workDir,I)?.node_id===A.node_id)W9(Q.workDir,I,A.request_id)}var j7;var R7=H(()=>{AB();hN();U9();T$();a$();L0();IV();OY();UV();YV();j7=new Map});import{readFileSync as vWA,readdirSync as bWA}from"node:fs";function _u(A){let Q=new Set(Object.values(II(A)));if(nC(A,!0).some((I)=>Q.has(I[0])))throw Error("adopt_codex_readopt_required");let B=[Buffer.from(`CODEX_HOME=${A.codexHome}\x00`),Buffer.from(`ANET_NODE_MARKER=${A.marker}\x00`)];for(let I of bWA("/proc")){if(!/^\d+$/.test(I)||Number(I)<=1)continue;let C=Number(I),E=SQ(C);if(!E||E.uid!==A.uid)continue;let g;try{g=vWA(`/proc/${C}/environ`)}catch{if(!SQ(C))continue;throw Error("adopt_proc_unreadable")}for(let U of B)for(let J=g.indexOf(U);J>=0;J=g.indexOf(U,J+1))if(J===0||g[J-1]===0)throw Error("adopt_codex_readopt_required")}}var Ru=H(()=>{ag();OY();qY()});import{readdirSync as yWA}from"node:fs";async function t$(A){rg(A,k0,!0);for(let Q=0;Q<k0.length;Q++){let I=rg(A,k0,!0).find((J)=>J.sessionName===II(A)[k0[Q]]);if(!I)continue;let C=SQ(I.rootPid),E=I.processes.find((J)=>J.pid===I.rootPid);if(!C||C.birth!==E?.birth||C.uid!==A.uid||C.pid===process.pid)throw Error("adopt_process_generation_changed");let g=new Map;await CV(C,{read:(J)=>{let Y=SQ(J);if(Y)g.set(J,Y);return Y},list:wu,sleep:(J)=>new Promise((Y)=>setTimeout(Y,J)),signal:(J,Y)=>{let F=g.get(J),G=SQ(J);if(!G)return;if(!F||!dC(F,G))throw Error("adopt_process_generation_changed");if(Y==="SIGCONT"){try{process.kill(J,Y)}catch(N){if(N.code!=="ESRCH")throw N}return}let $;try{$=iC(J)}catch(N){if(!SQ(J))return;throw N}if(!$)return;if($.birth!==F.birth||J===process.pid||$.uid!==A.uid||!L7(A,$.cwd,J===C.pid)||$.env.ANET_NODE_MARKER!==A.marker||$.env.CODEX_HOME!==A.codexHome)throw Error("adopt_codex_identity_unproven");let D=SQ(J);if(!D)return;if(!dC(F,D))throw Error("adopt_process_generation_changed");try{process.kill(J,Y)}catch(N){if(N.code!=="ESRCH")throw N}}});let U=nC(A,!0).find((J)=>J[2]===I.pane);for(let J=0;U?.[4]==="0"&&J<20;J++)await new Promise((Y)=>setTimeout(Y,50)),U=nC(A,!0).find((Y)=>Y[2]===I.pane);if(U){if(U[1]!==I.session||U[4]!=="1"||Number(U[3])!==I.rootPid)throw Error("adopt_codex_topology_changed");eQ(["kill-pane","-t",I.pane],{env:z7(A.socket),timeout:5000})}}sg(A)}function sg(A){let Q=new Set(Object.values(II(A)));if(nC(A,!0).some((B)=>Q.has(B[0])&&B[4]!=="1"))throw Error("adopt_codex_stage_still_running");for(let B of wu()){let I=SQ(B);if(!I||I.uid!==A.uid)continue;if(!BV(B,A.marker))continue;let C;try{C=iC(B)}catch{if(!SQ(B))continue;throw Error("adopt_proc_unreadable")}if(C?.env.ANET_NODE_MARKER===A.marker)throw Error("adopt_codex_stage_still_running")}}var wu=()=>yWA("/proc").filter((A)=>/^\d+$/.test(A)&&Number(A)>1).map(Number);var FV=H(()=>{OE();ag();OY();qY();a$()});import{createServer as fWA}from"node:net";async function hWA(A){let Q=new URL(A);await new Promise((B,I)=>{let C=fWA();C.once("error",()=>I(Error("adopt_codex_port_unavailable"))),C.listen({host:Q.hostname.replace(/^\[|\]$/g,""),port:Number(Q.port),exclusive:!0},()=>{C.close((E)=>E?I(Error("adopt_codex_port_unavailable")):B())})})}async function qu(A,Q,B,I,C){if(I!==A.request_id)throw Error("adopt_codex_binding_generation_unproven");let E=zu(A.codex_v2?.start_inputs,Q,B,A.request_id);if(!C())throw Error("adopt_binding_revoked_during_start");sg(B);let g=new Set(Object.values(II(B)));if(nC(B,!0).some((U)=>g.has(U[0])))throw Error("adopt_codex_session_conflict");if(await hWA(E.appserver_url),!C())throw Error("adopt_binding_revoked_during_start")}var Ou=H(()=>{ag();FV();OY();YV()});import{readdirSync as mWA,readFileSync as uWA,readlinkSync as cWA}from"node:fs";function iWA(A,Q,B){let I=`${Q}:${B.toString(16).toUpperCase().padStart(4,"0")}`,C=new Set;for(let E of A.split(`
|
|
106
|
+
`).slice(1)){let E=C.trim().split(/\s+/);if(E.length<10)continue;if(E[1]!==I||E[3]!==lm)continue;if(/^\d+$/.test(E[7]))return Number(E[7])}return null}function w6A(A,Q){let B=`socket:[${Q}]`,I;try{I=A.readDir("/proc")}catch{return"permission_denied"}let C=[],E=new Set;for(let g of I){if(!/^\d+$/.test(g))continue;let U=Number(g);if(U<=0)continue;let J;try{J=A.readDir(`/proc/${U}/fd`)}catch(Y){if(i$(Y)!=="ENOENT")E.add(U);continue}for(let Y of J)try{if(A.readLink(`/proc/${U}/fd/${Y}`)===B){if(!C.includes(U))C.push(U);break}}catch(F){if(i$(F)!=="ENOENT")E.add(U)}}return{owners:C,unreadable:E.size}}function um(A,Q){let B=_6A(A.readProcFile,Q);if(B==="permission_denied")return{ok:!1,reason:"permission_denied"};if(B.length===0)return{ok:!1,reason:"no_listener"};if(B.length>1)return{ok:!1,reason:"ambiguous_listener"};let I=B[0],C=w6A(A,I);if(C==="permission_denied")return{ok:!1,reason:"permission_denied"};if(C.owners.length===0)return{ok:!1,reason:C.unreadable>0?"permission_denied":"socket_owner_not_found"};if(C.owners.length>1)return{ok:!1,reason:"ambiguous_listener"};let E=C.owners[0],g=A.procUid(E);if(g===void 0)return{ok:!1,reason:"identity_mismatch"};let U=A.liveProcess(E);if(!U)return{ok:!1,reason:"identity_mismatch"};return{ok:!0,snapshot:{inode:I,pid:E,uid:g,ticks:U.ticks}}}function t9(A,Q={}){let B={...im(),...Q};try{if(B.platform!=="linux")return{ok:!1,reason:"unsupported_platform"};let I=O6A(A);if(!I)return{ok:!1,reason:"url_not_supported"};let{port:C}=I,E=um(B,C);if(!E.ok)return E;let g=[],U=!0;try{g=B.readProcFile(`/proc/${E.snapshot.pid}/cmdline`).split("\x00").filter((D)=>D!=="")}catch(D){let N=i$(D);if(N==="EACCES"||N==="EPERM")return{ok:!1,reason:"permission_denied"};U=!1}let J=null,Y=null;try{J=B.readLink(`/proc/${E.snapshot.pid}/exe`),Y="proc_exe"}catch{if(U&&g.length>0)J=g[0],Y="argv0"}let F=um(B,C);if(!F.ok)return F;let G=E.snapshot,$=F.snapshot;if(G.inode!==$.inode||G.pid!==$.pid||G.uid!==$.uid||G.ticks!==$.ticks)return{ok:!1,reason:"identity_mismatch"};return{ok:!0,processEvidence:{url:A,host:cm,port:C,listenInode:G.inode,pid:G.pid,uid:G.uid,startTicks:Number(G.ticks),diagnostics:{executable:J,executableSource:Y,socketUid:R6A(B.readProcFile,C),argvTail:H6A(g),argvContract:U?j6A(B,g,C):"none",argvContractNote:K6A}}}}catch{return{ok:!1,reason:"identity_mismatch"}}}function O6A(A){if(typeof A!=="string")return;let Q=q6A.exec(A);if(!Q)return;let B=Number(Q[1]);if(!Number.isSafeInteger(B)||B<=0||B>65535)return;return{port:B}}function dm(A={}){let Q={...im(),...A};return(B,I)=>{if(!Number.isSafeInteger(B)||B<=1)return!1;if(typeof I!=="number"||!Number.isFinite(I))return!1;try{let C=Q.liveProcess(B);return!!C&&C.ticks===String(I)}catch{return!1}}}var cm="127.0.0.1",z6A="opencode",lm="0A",pm="0100007F",K6A,q6A;var V7=H(()=>{ng();p$();K6A="argv shape is a launch-argument diagnostic only: it cannot "+"prove a process's OpenCode generation — never promote it into one.";q6A=/^http:\/\/127\.0\.0\.1:([1-9]\d{0,4})$/});import{readFileSync as T6A,readlinkSync as P6A,statSync as nm}from"node:fs";import{basename as S6A}from"node:path";function x6A(A){if(!Number.isSafeInteger(A)||A<=0)return;try{let Q=P6A(`/proc/${A}/exe`),B=nm(`/proc/${A}/exe`,{bigint:!0});if(!B.isFile())return;return{path:Q,dev:B.dev.toString(),ino:B.ino.toString(),size:B.size.toString()}}catch(Q){let B=Q.code;return B==="EACCES"||B==="EPERM"?"permission_denied":void 0}}function k6A(A){if(!Number.isSafeInteger(A)||A<=0)return;try{let Q=T6A(`/proc/${A}/stat`,"utf8"),B=Q.slice(Q.lastIndexOf(")")+2).trim().split(/\s+/);return/^\d+$/.test(B[19]??"")?B[19]:void 0}catch{return}}function v6A(A){try{let Q=nm(A,{bigint:!0});if(!Q.isFile())return;return{dev:Q.dev.toString(),ino:Q.ino.toString(),size:Q.size.toString()}}catch{return}}function b6A(A){if(typeof A.attest!=="function"||typeof A.revalidate!=="function")throw Error("bindHostSharedServeGeneration requires attest() and revalidate()");return{platform:A.platform??process.platform,procExeIdentity:A.procExeIdentity??x6A,liveTicks:A.liveTicks??k6A,interpreterBasenames:A.interpreterBasenames??om,statBinary:A.statBinary??v6A,reobserve:A.reobserve??((Q)=>t9(Q)),attest:A.attest,revalidate:A.revalidate}}function y6A(A,Q=om){let B=S6A(A).toLowerCase();return Q.includes(B)}function am(A,Q,B){let I;try{I=b6A(B)}catch{return{ok:!1,reason:"attestation_unavailable"}}try{if(I.platform!=="linux")return{ok:!1,reason:"unsupported_platform"};if(!Number.isSafeInteger(A.pid)||A.pid<=0)return{ok:!1,reason:"exe_unreadable"};let C=I.procExeIdentity(A.pid);if(C==="permission_denied")return{ok:!1,reason:"permission_denied"};if(!C)return{ok:!1,reason:"exe_unreadable"};if(y6A(C.path,I.interpreterBasenames))return{ok:!1,reason:"interpreter_or_wrapper_exe"};let E=I.liveTicks(A.pid);if(E===void 0||E!==String(A.startTicks))return{ok:!1,reason:"observation_drift"};let g;try{g=I.attest(Q)}catch{return{ok:!1,reason:"attestation_unavailable"}}if((g.generation??"v1")!==Q||!PQ(Q,g.expectedVersion))return{ok:!1,reason:"generation_contract_mismatch"};let J=I.statBinary(g.binary);if(!J)return{ok:!1,reason:"attestation_unavailable"};let Y=g.binaryFile;if(String(Y.dev)!==J.dev||String(Y.ino)!==J.ino||String(Y.size)!==J.size)return{ok:!1,reason:"attestation_identity_imprecise"};if(J.dev!==C.dev||J.ino!==C.ino||J.size!==C.size)return{ok:!1,reason:"executable_identity_mismatch"};try{I.revalidate(g)}catch{return{ok:!1,reason:"file_changed_since_attestation"}}let F;try{let D=I.reobserve(A.url);if(!D.ok)return{ok:!1,reason:"observation_drift"};F=D.processEvidence}catch{return{ok:!1,reason:"observation_drift"}}if(F.pid!==A.pid||F.listenInode!==A.listenInode||F.uid!==A.uid||F.startTicks!==A.startTicks||F.host!==A.host||F.port!==A.port)return{ok:!1,reason:"observation_drift"};let G=I.procExeIdentity(A.pid),$=I.liveTicks(A.pid);if(G==="permission_denied")return{ok:!1,reason:"permission_denied"};if(!G||$===void 0)return{ok:!1,reason:"observation_drift"};if(G.dev!==C.dev||G.ino!==C.ino||G.size!==C.size||$!==E)return{ok:!1,reason:"observation_drift"};return{ok:!0,generation:Q,proof:{binaryPath:g.binary,dev:J.dev,ino:J.ino,size:J.size,sha256:String(Y.sha256),packageName:CB(Q).packageName,packageVersion:g.expectedVersion,pid:A.pid,startTicks:A.startTicks,listenInode:A.listenInode}}}catch{return{ok:!1,reason:"attestation_unavailable"}}}var om;var rm=H(()=>{EC();V7();om=["bun","node","nodejs","deno","tsx","ts-node","env","sh","bash"]});function sm(A){if(typeof A!=="string")return"not_loopback";let Q=f6A.exec(A);if(Q){let C=Number(Q[1]);if(Number.isSafeInteger(C)&&C>0&&C<=65535)return"supported"}if(A.startsWith("http://127.0.0.1:")||A.startsWith("http://127.0.0.1"))return"unsupported_loopback";let B;try{B=new URL(A)}catch{return"not_loopback"}return h6A.has(B.hostname)||/^127\./.test(B.hostname)?"unsupported_loopback":"not_loopback"}function m6A(A){return sm(A)==="supported"}function u6A(A){if(typeof A==="number"&&Number.isFinite(A))return A;if(typeof A==="string"&&A.trim()!==""&&Number.isFinite(Number(A)))return Number(A);return null}function tm(A){if((A.mode??"host-shared")==="off")return{decision:"fallback",reason:"host_shared_off"};let Q=A.observations.filter((C)=>!!C&&typeof C==="object");if(Q.length===0)return{decision:"fallback",reason:"no_candidate"};let B=A.probeAlive;if(typeof B!=="function")return{decision:"fallback",reason:"probe_unavailable"};let I=[];for(let C of Q){let E=c6A(A,C,B);if(typeof E==="string"){I.push(E);continue}return{decision:"admit",reason:"host_shared_live",server:E}}return{decision:"fallback",reason:I[0]??"no_candidate"}}function c6A(A,Q,B){if(!m6A(Q.url))return sm(Q.url)==="unsupported_loopback"?"host_not_127_0_0_1":"not_loopback";if(Q.generation!==A.generation)return"generation_mismatch";let I=u6A(Q.uid);if(I===null||I!==A.uid)return"foreign_uid";if(typeof Q.pid!=="number"||!Number.isFinite(Q.pid)||Q.pid<=0)return"missing_pid";let{pid:C}=Q,E=Q.startTicks;if(typeof E!=="number"||!Number.isFinite(E))return"missing_start_ticks";let g;try{g=B(C,E)}catch{return"probe_error"}if(g!==!0)return"not_live";return{url:Q.url,uid:I,pid:C,startTicks:E,generation:A.generation}}var f6A,h6A;var em=H(()=>{f6A=/^http:\/\/127\.0\.0\.1:([1-9]\d{0,4})$/,h6A=new Set(["127.0.0.1","localhost","[::1]","::1"])});function Au(A){if(A.newServer===!0)return{decision:"fallback",reason:"explicit_new_server"};if(!A.candidate)return{decision:"fallback",reason:"no_candidate"};let Q=process.getuid?.();if(Q===void 0)return{decision:"fallback",reason:"uid_unavailable"};let B=t9(A.candidate.opencodeSharedServerUrl);if(!B.ok)return{decision:"fallback",reason:`observe_${B.reason}`};let I=B.processEvidence,C=(E)=>({decision:"fallback",reason:E,pid:I.pid,port:I.port});if(I.uid!==Q)return C("foreign_uid");try{$Y(A.nodeDir);let E=[A.nodeDir,...KY(A.projectDir)],g=r9,U=g.buildChildEnv({workDir:A.nodeDir,cwd:A.projectDir,unsafeTools:!1,credentialMode:"probe",managedPolicyMode:"redirect-only",parentEnv:{PATH:A.searchPath}}),J,Y=!1;try{let G=q0(A.nodeDir,U);J=am(I,"v2",{attest:()=>g.resolveBinary({searchPath:A.searchPath,probeEnv:U,probeCwd:G,forbiddenRoots:E}),revalidate:($)=>{g.revalidateBinary($,{forbiddenRoots:E})}})}finally{Y=dg(A.nodeDir,U)}if(!Y)return C("probe_cleanup_failed");if(!J.ok)return C(`generation_${J.reason}`);let F=tm({uid:Q,generation:"v2",observations:[{...I,generation:J.generation}],probeAlive:dm()});if(F.decision!=="admit"||!F.server)return C(F.reason);return{decision:"admit",reason:F.reason,pid:F.server.pid,port:I.port,fields:{opencodeSharedServerUrl:F.server.url,opencodeSharedServerPasswordFile:A.candidate.opencodeSharedServerPasswordFile}}}catch{return C("probe_unavailable")}}var Qu=H(()=>{DY();ng();f$();O0();V7();rm();em()});import{execFileSync as l6A,spawn as SaA,spawnSync as xaA}from"node:child_process";import{mkdirSync as p6A}from"node:fs";import{dirname as i6A,join as d6A}from"node:path";function n6A(A=process.env,Q=typeof process.getuid==="function"?process.getuid():0){let B=A.ANET_TMUX_SOCKET?.trim();if(B)return{socket:B,source:"ANET_TMUX_SOCKET"};let I=A.TMUX_TMPDIR?.trim();if(I)return{socket:d6A(I,`tmux-${Q}`,"default"),source:"TMUX_TMPDIR"};return null}function o6A(A){if(!A)return null;let Q=A.indexOf(",");return(Q<0?A:A.slice(0,Q)).trim()||null}function a6A(A){return A.some((Q)=>Q.length>=8&&"kill-server".startsWith(Q))}function r6A(A,Q,B){if(a6A(A))throw new Bu(A);let I=Q??process.env,C=n6A(I,B);if(!C)return{file:"tmux",args:[...A],env:Q,isolation:null};let E={...I};if(o6A(I.TMUX)!==C.socket)delete E.TMUX,delete E.TMUX_PANE;return{file:"tmux",args:["-S",C.socket,...A],env:E,isolation:C}}function s6A(A){if(A.isolation?.source!=="TMUX_TMPDIR")return;try{p6A(i6A(A.isolation.socket),{recursive:!0,mode:448})}catch{}}function t6A(A,Q){let B=r6A(A,Q?.env);s6A(B);let I=B.env===void 0?Q:{...Q??{},env:B.env};return{inv:B,opts:I}}function eQ(A,Q){let{inv:B,opts:I}=t6A(A,Q);return l6A(B.file,B.args,I)}var Bu;var OE=H(()=>{Bu=class Bu extends Error{constructor(A){super(`refusing to run \`tmux ${A.join(" ")}\`: kill-server is never issued by anet (#505). Kill the sessions you created with \`kill-session -t =<name>\` instead.`);this.name="TmuxKillServerRefused"}}});function e6A(A){let Q=A.trim();if(!Q||Q==="."||Q===".."||Q.startsWith("=")||/[\0\n\r]/.test(Q))return;return[{name:Q,role:"tui"},{name:`${Q}-appsrv`,role:"appsrv"},{name:`${Q}-桥`,role:"bridge"}]}function Iu(A,Q,B=AWA){if(!Q)return{borrowed:!1,alive:[]};let I=e6A(A);if(!I)return{borrowed:!1,alive:[]};return{borrowed:!1,alive:I.filter((C)=>B(C.name)).map((C)=>({id:C.name,role:C.role}))}}var AWA=(A)=>{try{return eQ(["has-session","-t",`=${A}`],{stdio:"ignore",timeout:5000}),!0}catch{return!1}};var Cu=H(()=>{OE()});function d$(A){return["-u",...A]}function W7(A){return A.join("|ANETSEP|")}function P0(A,Q){return d$([...A,"-F",W7(Q)])}function pC(A,Q){let B=[];for(let I of A.split(/\r?\n/)){if(!I)continue;let C=Q===1?[I]:I.includes("|ANETSEP|")?I.split("|ANETSEP|"):I.split("\t");if(C.length!==Q)continue;B.push(C)}return B}import{existsSync as QWA,readdirSync as BWA,readFileSync as Uu}from"node:fs";import{isAbsolute as Eu,join as IWA,resolve as e9}from"node:path";function Z7(A){let Q=A.config??{},B=A.exists??QWA,I=Q.codexHome;if(typeof I==="string"&&I.trim()&&Eu(I.trim()))return{codexHome:e9(I.trim()),source:"config.codexHome"};let C=IWA(A.nodeDir,"codex-home");if(Q.codexCopresence===!0||B(C))return{codexHome:e9(C),source:"node-codex-home"};let E=Q.env,g=E&&typeof E==="object"?E.CODEX_HOME:void 0;if(typeof g==="string"&&g.trim()&&Eu(g.trim()))return{codexHome:e9(g.trim()),source:"config.env"};return{codexHome:null,source:"none"}}function EWA(A){return CWA.test(A)}function Ju(A,Q){let B=typeof A.CODEX_HOME==="string"&&A.CODEX_HOME.trim()?A.CODEX_HOME:void 0;if(Q.codexHome){A.CODEX_HOME=Q.codexHome;let I=B!==void 0&&e9(B)!==Q.codexHome?`CODEX_HOME from the environment (${B}) is not this node's; using ${Q.codexHome} (${Q.source})`:null;return{codexHome:Q.codexHome,note:I}}if(B!==void 0&&EWA(B))return delete A.CODEX_HOME,{codexHome:void 0,note:`dropped CODEX_HOME=${B} inherited from the environment — it is another anet node's codex-home; this node has none of its own, so codex uses its default`};return{codexHome:B,note:B!==void 0?`CODEX_HOME=${B} comes from the launching environment (this node has no codex-home of its own)`:null}}function X7(A){let Q=[],B=0;for(let I=0;I<=A.length;I++){if(I<A.length&&A[I]!==0)continue;if(I===A.length&&B===I)break;let C=A.subarray(B,I),E;try{E=gWA.decode(C)}catch{let g=Buffer.from(C).toString("latin1"),U=g.indexOf("=");E=U>=0?g.slice(0,U+1)+gu+g.slice(U+1):gu+g}Q.push(E),B=I+1}return Q.length===0?"":Q.join("\x00")+(A[A.length-1]===0?"\x00":"")}function _Y(A){return/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/.test(A)}function AV(A,Q){try{return X7(Uu(`/proc/${A}/${Q}`))}catch{return null}}function S0(A,Q){if(A===null)return;let B=`${Q}=`;for(let I of A.split("\x00"))if(I.startsWith(B))return I.slice(B.length);return null}function JWA(A,Q){let B=new Map;for(let[g,U]of Q){if(!B.has(U))B.set(U,[]);B.get(U).push(g)}let I=[],C=[...B.get(A)??[]],E=new Set([A]);while(C.length>0){let g=C.shift();if(E.has(g))continue;E.add(g),I.push(g),C.push(...B.get(g)??[])}return I}function QV(A){let Q=A.platform??process.platform;if(Q!=="linux")return{ok:!0,checked:[],skipped:`not linux (${Q}); /proc environ check unavailable`};if(_Y(A.expected))return{ok:!1,pid:A.rootPid,actual:null,expected:A.expected,message:`${A.label} expected CODEX_HOME is not a well-formed string; refusing`};let B=A.reader??UWA,I=S0(B.environ(A.rootPid),"CODEX_HOME");if(I===void 0)return{ok:!0,checked:[],skipped:`pid ${A.rootPid} environ unreadable`};if(I!==A.expected)return{ok:!1,pid:A.rootPid,actual:I,expected:A.expected,message:`${A.label} pid ${A.rootPid} runs with CODEX_HOME=${I??"<unset>"}, expected ${A.expected}`};let C=[A.rootPid];for(let E of JWA(A.rootPid,B.parents())){let g=S0(B.environ(E),"CODEX_HOME");if(g===void 0||g===null)continue;if(C.push(E),g!==A.expected)return{ok:!1,pid:E,actual:g,expected:A.expected,message:`${A.label} child pid ${E} (under ${A.rootPid}) runs with CODEX_HOME=${g}, expected ${A.expected}`}}return{ok:!0,checked:C}}var CWA,gu="\uDFFF",gWA,UWA;var n$=H(()=>{CWA=/[\\/]\.anet[\\/]nodes[\\/][^\\/]+[\\/]codex-home[\\/]?$/;gWA=new TextDecoder("utf-8",{fatal:!0});UWA={environ(A){return AV(A,"environ")},parents(){let A=[],Q=[];try{Q=BWA("/proc")}catch{return A}for(let B of Q){if(!/^\d+$/.test(B))continue;try{let I=Uu(`/proc/${B}/stat`,"latin1"),C=I.slice(I.lastIndexOf(")")+2).split(" "),E=Number(C[1]);if(Number.isInteger(E))A.push([Number(B),E])}catch{}}return A}}});import{lstatSync as Yu,readFileSync as wY,realpathSync as YWA}from"node:fs";import{join as RY}from"node:path";function BV(A,Q){if(!Number.isSafeInteger(A)||A<=1||!/^[A-Za-z0-9-]+$/.test(Q))return!1;let B;try{B=wY(`/proc/${A}/environ`)}catch{return!1}let I=Buffer.from(`ANET_NODE_MARKER=${Q}\x00`,"ascii");for(let C=B.indexOf(I);C>=0;C=B.indexOf(I,C+1))if(C===0||B[C-1]===0)return!0;return!1}function iC(A){if(!Number.isSafeInteger(A)||A<=1)throw Error("adopt_pid_invalid");let Q=`/proc/${A}`,B;try{B=wY(RY(Q,"stat"),"utf8")}catch(J){if(J.code==="ENOENT")return null;throw Error("adopt_proc_unreadable")}let I=B.slice(B.lastIndexOf(")")+2).split(" ");if(I[0]==="Z")return null;let C=I[19];if(!C||!/^\d+$/.test(C))throw Error("adopt_proc_invalid");let E=Object.create(null);for(let J of X7(wY(RY(Q,"environ"))).split("\x00")){if(_Y(J))throw Error("adopt_proc_invalid");let Y=J.indexOf("=");if(Y>0){let F=J.slice(0,Y);if(Object.hasOwn(E,F))throw Error("adopt_proc_invalid");E[F]=J.slice(Y+1)}}let g={pid:A,birth:C,uid:Yu(Q).uid,env:E,cwd:YWA(RY(Q,"cwd")),argv:wY(RY(Q,"cmdline"),"utf8").split("\x00").filter(Boolean)},U=wY(RY(Q,"stat"),"utf8");if(U.slice(U.lastIndexOf(")")+2).split(" ")[19]!==C)throw Error("adopt_pid_changed");return g}function o$(A){let Q=RY(A,".pid");try{let B=Yu(Q);if(!B.isFile()||B.isSymbolicLink()||B.uid!==process.getuid?.()||B.mode&18)throw Error("adopt_pidfile_unsafe");let I=wY(Q,"utf8").trim(),C=Number(I);if(!/^\d+$/.test(I)||!Number.isSafeInteger(C)||C<=1)throw Error("adopt_pid_invalid");return C}catch(B){if(B.code==="ENOENT")return null;throw B}}var a$=H(()=>{n$()});import{lstatSync as Fu,readFileSync as Gu,realpathSync as FWA}from"node:fs";import{join as $u}from"node:path";function x0(A,Q){let B=M7(A,Q);if(B.previousBoot)throw Error("adopt_codex_readopt_required");return B.scope}function M7(A,Q){let B=A.config.codexLaunchLayout;if(B!==void 0&&B!=="external-appserver")throw Error("adopt_codex_layout_unsupported");let I=$u(A.nodeDir,"copresence-identity.json"),C=Fu(I),E=$u(A.nodeDir,"codex-home"),g=Fu(E);if(!C.isFile()||C.isSymbolicLink()||C.uid!==Q||C.mode&18||!g.isDirectory()||g.isSymbolicLink()||g.uid!==Q||g.mode&63||FWA(E)!==E)throw Error("adopt_codex_marker_unsafe");let U=JSON.parse(Gu(I,"utf8"));if(!U||typeof U.marker!=="string"||!/^[a-f0-9-]{36}$/i.test(U.marker)||U.owner_uid!==Q||typeof U.boot_id!=="string"||!/^[a-f0-9-]{36}$/i.test(U.boot_id))throw Error("adopt_codex_marker_invalid");let J=U.boot_id!==Gu("/proc/sys/kernel/random/boot_id","utf8").trim(),Y=A.config.env?.ANET_TMUX_SOCKET;if(Y!==void 0&&typeof Y!=="string")throw Error("adopt_codex_socket_unproven");return{previousBoot:J,scope:{layout:B==="external-appserver"?"external-appserver":"native",alias:A.alias,socket:Y??`/tmp/tmux-${Q}/default`,marker:U.marker,codexHome:E,workdir:A.workdir,uid:Q}}}var IV=()=>{};import{lstatSync as GWA,readFileSync as $WA,readdirSync as DWA}from"node:fs";function SQ(A){if(!Number.isSafeInteger(A)||A<=1)throw Error("adopt_pid_invalid");try{let Q=$WA(`/proc/${A}/stat`,"utf8"),B=Q.slice(Q.lastIndexOf(")")+2).split(" ");if(B[0]==="Z"||B[0]==="X")return null;if(!/^\d+$/.test(B[19]??""))throw Error("adopt_proc_invalid");return{pid:A,ppid:Number(B[1]),birth:B[19],uid:GWA(`/proc/${A}`).uid}}catch(Q){if(Q.code==="ENOENT"||Q.code==="ESRCH")return null;throw Q}}function dC(A,Q){return!!Q&&Q.pid===A.pid&&Q.birth===A.birth&&Q.uid===A.uid}async function CV(A,Q=NWA){let B=new Map([[A.pid,A]]),I=[],C=(E,g)=>{let U=Q.read(E.pid);if(!U)return;if(!dC(E,U))throw Error("adopt_process_generation_changed");Q.signal(E.pid,g)};try{C(A,"SIGSTOP"),I.push(A);for(let E=0;E<32;E++){let g=0;for(let U of Q.list()){if(B.has(U))continue;let J=Q.read(U);if(!J||J.uid!==A.uid)continue;let Y=B.get(J.ppid);if(!Y||!dC(Y,Q.read(Y.pid)))continue;C(J,"SIGSTOP"),I.push(J),B.set(U,J),g++}if(!g)break;if(E===31)throw Error("adopt_process_tree_unstable")}for(let E of[...B.values()].reverse())C(E,"SIGTERM"),C(E,"SIGCONT");for(let E=0;E<40;E++){if([...B.values()].every((g)=>!dC(g,Q.read(g.pid))))return;await Q.sleep(50)}for(let E of[...B.values()].reverse())C(E,"SIGKILL");for(let E=0;E<40;E++){if([...B.values()].every((g)=>!dC(g,Q.read(g.pid))))return;await Q.sleep(50)}throw Error("adopt_process_stop_timeout")}finally{for(let E of I)try{if(dC(E,Q.read(E.pid)))Q.signal(E.pid,"SIGCONT")}catch{}}}var NWA;var qY=H(()=>{NWA={read:SQ,list:()=>DWA("/proc").filter((A)=>/^\d+$/.test(A)&&Number(A)>1).map(Number),signal:(A,Q)=>{process.kill(A,Q)},sleep:(A)=>new Promise((Q)=>setTimeout(Q,A))}});import{isAbsolute as EV,relative as VWA}from"node:path";function II(A){if(A.layout!=="native"&&A.layout!=="external-appserver")throw Error("adopt_codex_layout_unsupported");return A.layout==="external-appserver"?{bridge:A.alias,tui:`${A.alias}-tui`,appsrv:`${A.alias}-appsrv`}:{bridge:`${A.alias}-桥`,tui:A.alias,appsrv:`${A.alias}-appsrv`}}function L7(A,Q,B){let I=VWA(A.workdir,Q);return Q===A.workdir||!B&&I!==".."&&!I.startsWith("../")&&!EV(I)}function Du(A,Q,B=k0){if(!A.alias||!A.marker||!EV(A.socket)||!EV(A.codexHome)||!EV(A.workdir)||!Number.isSafeInteger(A.uid)||A.uid<0)throw Error("adopt_codex_scope_invalid");let I=II(A),C={},E=new Set,g=new Set;for(let U of B){let J=Q.filter((F)=>F.socket===A.socket&&F.sessionName===I[U]);if(J.length!==1)throw Error("adopt_codex_stage_ambiguous");let Y=J[0];if(!/^\$\d+$/.test(Y.session)||!/^%\d+$/.test(Y.pane)||E.has(Y.session)||g.has(Y.pane)||Q.some((F)=>F.socket===A.socket&&F.session===Y.session&&F!==Y))throw Error("adopt_codex_target_ambiguous");if(!Y.processes.length)throw Error("adopt_codex_stage_missing");for(let F of Y.processes){if(F.uid!==A.uid||!L7(A,F.cwd,Y.rootPid===void 0||F.pid===Y.rootPid)||F.env.ANET_NODE_MARKER!==A.marker||F.env.CODEX_HOME!==A.codexHome)throw Error("adopt_codex_identity_unproven");if(!Number.isSafeInteger(F.pid)||F.pid<=1||!/^\d+$/.test(F.birth))throw Error("adopt_codex_generation_invalid")}E.add(Y.session),g.add(Y.pane),C[U]=Y}return C}var k0;var ag=H(()=>{k0=["bridge","tui","appsrv"]});import{lstatSync as Nu,readdirSync as Zu,realpathSync as WWA}from"node:fs";import{dirname as ZWA,isAbsolute as XWA}from"node:path";import{isDeepStrictEqual as Vu}from"node:util";function MWA(A,Q){if(!XWA(A)||/[\0\r\n]/.test(A))throw Error("adopt_socket_unsafe");let B=ZWA(A),I=Nu(B),C=Nu(A);if(!I.isDirectory()||I.isSymbolicLink()||WWA(B)!==B||I.uid!==Q||I.mode&63||!C.isSocket()||C.isSymbolicLink()||C.uid!==Q)throw Error("adopt_socket_unsafe")}function z7(A){return{...process.env,ANET_TMUX_SOCKET:A,TMUX:void 0,TMUX_PANE:void 0}}function nC(A,Q=!1){for(let B=0;;B++){try{MWA(A.socket,A.uid)}catch(E){if(Q&&E.code==="ENOENT")return[];throw E}let I;try{I=eQ(P0(["list-panes","-a"],["#{session_name}","#{session_id}","#{pane_id}","#{pane_pid}","#{pane_dead}"]),{encoding:"utf8",timeout:5000,env:z7(A.socket)})}catch(E){let g=String(E.stderr??"");if(Q&&E.status===1&&(/^no server running on /m.test(g)||/^error connecting to .* \(No such file or directory\)$/m.test(g)))return[];if(Q&&E.status===1&&g.trim()==="server exited unexpectedly"&&B<2){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25);continue}throw Error("adopt_tmux_listing_failed")}let C=pC(I,5);if(C.length!==I.split(/\r?\n/).filter(Boolean).length)throw Error("adopt_tmux_listing_invalid");return C}}function Wu(A){let Q=Zu("/proc").filter((C)=>/^\d+$/.test(C)&&Number(C)>1).map((C)=>SQ(Number(C))).filter((C)=>C!==null);if(!Q.find((C)=>C.pid===A))throw Error("adopt_codex_stage_missing");let I=new Set([A]);for(let C=!0;C;){C=!1;for(let E of Q)if(I.has(E.ppid)&&!I.has(E.pid))I.add(E.pid),C=!0}return Q.filter((C)=>I.has(C.pid)).sort((C,E)=>C.pid-E.pid).map((C)=>{let E=iC(C.pid);if(!E||E.birth!==C.birth||!dC(C,SQ(C.pid)))throw Error("adopt_process_generation_changed");return E})}function LWA(A,Q){let B=new Map(Q.flatMap((I)=>I.processes).map((I)=>[I.pid,I.birth]));for(let I of Zu("/proc")){if(!/^\d+$/.test(I)||Number(I)<=1)continue;let C=Number(I),E=SQ(C);if(!E||E.uid!==A.uid)continue;if(!BV(C,A.marker))continue;let g;try{g=iC(C)}catch(U){if(!SQ(C))continue;throw U}if(g?.env.ANET_NODE_MARKER===A.marker&&B.get(C)!==g.birth)throw Error("adopt_codex_untracked_process")}}function rg(A,Q=k0,B=!1){let I=II(A),C=nC(A,B),E=new Set(Q.map((Y)=>I[Y])),g=new Set(C.filter((Y)=>E.has(Y[0])).map((Y)=>Y[1])),U=C.filter((Y)=>g.has(Y[1])&&!(B&&Y[4]==="1")).map((Y)=>{if(Y[4]!=="0"||!/^\d+$/.test(Y[3]))throw Error("adopt_codex_stage_missing");return{socket:A.socket,sessionName:Y[0],session:Y[1],pane:Y[2],rootPid:Number(Y[3]),processes:Wu(Number(Y[3]))}}),J=B?Q.filter((Y)=>U.some((F)=>F.sessionName===I[Y])):Q;Du(A,U,J);for(let Y of U)if(C.filter((F)=>F[1]===Y.session).length!==1)throw Error("adopt_codex_target_ambiguous");if(LWA(A,U),!Vu(C,nC(A,B)))throw Error("adopt_codex_topology_changed");for(let Y of U){let F=C.find((G)=>G[2]===Y.pane);if(!Vu(Y.processes,Wu(Number(F[3]))))throw Error("adopt_process_generation_changed")}return U}var OY=H(()=>{OE();qY();a$();ag()});import{createHash as zWA}from"node:crypto";import{lstatSync as Xu,realpathSync as KWA}from"node:fs";import{dirname as K7,isAbsolute as HWA}from"node:path";function TE(A){return zWA("sha256").update(JSON.stringify(A.config)).digest("hex")}function H7(A,Q){if(!HWA(A)||A.endsWith(`/tmux-${Q}/default`)||/[\r\n\0]/.test(A))throw Error("adopt_explicit_private_socket_required");let B=Xu(K7(A));if(!B.isDirectory()||B.isSymbolicLink()||KWA(K7(A))!==K7(A)||B.uid!==Q||B.mode&63)throw Error("adopt_socket_directory_unsafe");let I=Xu(A);if(!I.isSocket()||I.uid!==Q)throw Error("adopt_socket_unsafe")}function jWA(A,Q,B){if(H7(A,B),!/^%\d+$/.test(Q))throw Error("adopt_pane_invalid");let I=eQ(d$(["display-message","-p","-t",Q,W7(["#{pane_pid}","#{session_name}","#{pane_dead}"])]),{encoding:"utf8",timeout:5000,env:{...process.env,ANET_TMUX_SOCKET:A,TMUX:void 0,TMUX_PANE:void 0}}),C=pC(I,3);if(C.length!==1)throw Error("adopt_pane_unverified");let E=C[0],g=Number(E[0]);if(!Number.isSafeInteger(g)||g<=1||!E[1]||/[\r\n\0]/.test(E[1]))throw Error("adopt_pane_unverified");return{pid:g,session:E[1],dead:E[2]==="1"}}function gV(A,Q){if(!Q.env.TMUX)return{mode:"bare",config_hash:TE(A)};let B=Q.env.TMUX.split(",")[0],I=Q.env.TMUX_PANE??"",C=jWA(B,I,Q.uid),E=SQ(Q.pid),g=!1;for(let U=0;E&&U<128;U++){if(E.uid!==Q.uid)break;if(E.pid===C.pid){g=!0;break}if(E.ppid<=1)break;E=SQ(E.ppid)}if(!g||C.dead)throw Error("adopt_pane_process_mismatch");return{mode:"tmux",config_hash:TE(A),socket:B,pane:I,session:C.session}}var UV=H(()=>{OE();qY()});import{lstatSync as _WA,realpathSync as RWA}from"node:fs";import{isAbsolute as Mu,relative as wWA}from"node:path";import{isDeepStrictEqual as qWA}from"node:util";function JV(A,Q,B){let I=A.config,C=I.codexThreadId;if(typeof C!=="string"||!OWA.test(C))throw Error("adopt_codex_exact_thread_required");let E=I.codexAppServerUrl;if(typeof E!=="string"||!/^ws:\/\/(127\.0\.0\.1|\[::1\]):[1-9][0-9]{0,4}\/?$/.test(E))throw Error("adopt_codex_local_endpoint_required");let g;try{g=new URL(E)}catch{throw Error("adopt_codex_local_endpoint_required")}if(!g.port||Number(g.port)>65535)throw Error("adopt_codex_local_endpoint_required");let U=I.codexProjectDir===void 0||I.codexProjectDir===""?A.workdir:I.codexProjectDir;if(typeof U!=="string"||!Mu(U)||/[\0\r\n]/.test(U))throw Error("adopt_codex_project_unproven");let J=wWA(A.workdir,U);if(J===".."||J.startsWith("../")||Mu(J))throw Error("adopt_codex_project_unproven");let Y=_WA(U);if(!Y.isDirectory()||Y.isSymbolicLink()||RWA(U)!==U||Y.uid!==Q.uid||Y.mode&18)throw Error("adopt_codex_project_unproven");let F=I.env;if(I.codexHome!==void 0&&I.codexHome!==Q.codexHome||F?.CODEX_HOME!==void 0&&F.CODEX_HOME!==Q.codexHome)throw Error("adopt_codex_home_unproven");if(!B||!A.nodeId||Q.alias!==A.alias||Q.workdir!==A.workdir)throw Error("adopt_codex_start_inputs_invalid");return{version:1,binding_request_id:B,node_id:A.nodeId,config_hash:TE(A),scope:{...Q},node_dir:A.nodeDir,project_dir:U,thread_id:C,appserver_url:E}}function Lu(A,Q,B){try{return JV(A,Q,B)}catch{return}}function zu(A,Q,B,I){if(!A)throw Error("adopt_codex_start_evidence_missing");let C=JV(Q,B,I);if(!qWA(A,C))throw Error("adopt_codex_start_evidence_changed");return C}var OWA;var YV=H(()=>{UV();OWA=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});var ju={};DA(ju,{reproducibleEnvironment:()=>s$,handleUnadoptDoorbell:()=>kWA,handleAdoptDoorbell:()=>SWA});import{existsSync as Ku,lstatSync as _7,readFileSync as TWA,unlinkSync as PWA}from"node:fs";import{join as Hu}from"node:path";import{isDeepStrictEqual as r$}from"node:util";function s$(A,Q){let B=A.config,I=BQ({},"linux",{HOME:Q.home,LANG:Q.daemonEnv.LANG}),C={},E=Hu(A.nodeDir,".env");try{let g=_7(E);if(!g.isFile()||g.isSymbolicLink()||g.uid!==Q.uid||g.mode&63)throw Error("adopt_env_file_unsafe");let U=yX(TWA(E,"utf8"));if(U.problems.length)throw Error("adopt_env_file_invalid");Object.assign(C,U.values)}catch(g){if(g.code!=="ENOENT")throw g}if(B.env!==void 0){if(!B.env||typeof B.env!=="object"||Array.isArray(B.env))throw Error("adopt_config_env_invalid");for(let[g,U]of Object.entries(B.env))if(typeof U==="string")I[g]=U.replace(/^~/,Q.home);else if(U&&typeof U==="object"&&typeof U._envRef==="string"){let J=U._envRef;if(C[J]===void 0)throw Error(`adopt_env_not_reproducible:${g}`);I[g]=C[J]}else throw Error("adopt_config_env_invalid")}if(fN(A.nodeDir,I),Object.assign(I,{COMMHUB_ALIAS:A.alias,COMMHUB_NODE_ID:A.nodeId,COMMHUB_URL:Q.hubUrl,ANET_CONFIG_UPDATE_CAPABLE:"1"}),typeof B.token==="string")I.COMMHUB_TOKEN=B.token;return I}function SWA(A,Q){let B=`${Q.workDir}\x00${A.request_id}`,I=j7.get(B);if(I)return I;let C=xWA(A.request_id,Q).finally(()=>j7.delete(B));return j7.set(B,C),C}async function xWA(A,Q){let B=await Q.callCommHub("get_adopt_request",{request_id:A});if(!B?.ok)return;let I=!1,C="",E;try{if(process.platform!=="linux")throw Error("adopt_platform_unsupported");if(B.request_id!==A)throw Error("adopt_request_mismatch");let g=uC(B,{...Q,allowCodexV2:!0});if(C=g.alias,g.config.codexCopresence){let U=x0(g,Q.uid);rg(U);let J=uC(B,{...Q,allowCodexV2:!0});if(!r$(g,J)||!r$(U,x0(J,Q.uid)))throw Error("adopt_identity_changed");let Y=Hu(g.nodeDir,".hub-stopped");if(Ku(Y)){let F=_7(Y);if(!F.isFile()||F.isSymbolicLink()||F.uid!==Q.uid||F.mode&18)throw Error("adopt_codex_marker_unsafe");E={path:Y,ino:F.ino,mtimeMs:F.mtimeMs}}CY(Q.workDir,C,{adopted:!0,request_id:A,node_id:g.nodeId,nodeDir:g.nodeDir,workdir:g.workdir,launch_mode:"tmux",codex_v2:{version:1,layout:U.layout,socket:U.socket,marker:U.marker,config_hash:TE(g),start_inputs:Lu(g,U,A)}})}else{let U=Q.readProc??iC,J=o$(g.nodeDir),Y=J?U(J):null,F=s$(g,Q),G={uid:Q.uid,home:Q.home,defaultTmuxSocket:F.ANET_TMUX_SOCKET||`/tmp/tmux-${Q.uid}/default`,reproducibleEnv:F},$=Y?H9(g,Y,G):"tmux",D=uC(B,Q);if(!r$(g,D)||o$(g.nodeDir)!==J||!r$(F,s$(D,Q)))throw Error("adopt_identity_changed");let N=J?U(J):null;if(!r$(Y,N))throw Error("adopt_process_changed");CY(Q.workDir,C,{adopted:!0,request_id:A,node_id:g.nodeId,nodeDir:g.nodeDir,workdir:g.workdir,launch_mode:$})}I=!0}catch(g){let U=typeof g?.message==="string"&&/^(adopt_|daemon_has_|copresence_|cannot_adopt_|workdir_)[a-z_]+(:[A-Z0-9_,]+)?$/.test(g.message)?g.message:"adopt_local_verification_failed";await Q.callCommHub("ack_adopt_request",{request_id:A,status:"refused",error:U});return}if(I)try{if(!(await Q.callCommHub("ack_adopt_request",{request_id:A,status:"adopted"}))?.ok)throw W9(Q.workDir,C,A),Error("adopt_ack_rejected");let U=IB(Q.workDir,C);if(U?.request_id===A&&U.codex_v2&&E){let J=E.path;if(Ku(J)){let Y=_7(J);if(!Y.isFile()||Y.isSymbolicLink()||Y.uid!==Q.uid||Y.mode&18)throw Error("adopt_codex_marker_unsafe");if(Y.ino===E.ino&&Y.mtimeMs===E.mtimeMs)PWA(J)}}}catch(g){if(g instanceof QI&&g.appLevel)W9(Q.workDir,C,A);throw g}}async function kWA(A,Q){let B=await Q.callCommHub("list_my_children",{});if(!B?.ok||!Array.isArray(B.children))return;if(B.children.some((I)=>I.child_node_id===A.node_id&&I.managed==="adopted"))return;for(let I of Object.keys(hC(Q.workDir)))if(IB(Q.workDir,I)?.node_id===A.node_id)W9(Q.workDir,I,A.request_id)}var j7;var R7=H(()=>{AB();hN();U9();T$();a$();L0();IV();OY();UV();YV();j7=new Map});import{readFileSync as vWA,readdirSync as bWA}from"node:fs";function _u(A){let Q=new Set(Object.values(II(A)));if(nC(A,!0).some((I)=>Q.has(I[0])))throw Error("adopt_codex_readopt_required");let B=[Buffer.from(`CODEX_HOME=${A.codexHome}\x00`),Buffer.from(`ANET_NODE_MARKER=${A.marker}\x00`)];for(let I of bWA("/proc")){if(!/^\d+$/.test(I)||Number(I)<=1)continue;let C=Number(I),E=SQ(C);if(!E||E.uid!==A.uid)continue;let g;try{g=vWA(`/proc/${C}/environ`)}catch{if(!SQ(C))continue;throw Error("adopt_proc_unreadable")}for(let U of B)for(let J=g.indexOf(U);J>=0;J=g.indexOf(U,J+1))if(J===0||g[J-1]===0)throw Error("adopt_codex_readopt_required")}}var Ru=H(()=>{ag();OY();qY()});import{readdirSync as yWA}from"node:fs";async function t$(A){rg(A,k0,!0);for(let Q=0;Q<k0.length;Q++){let I=rg(A,k0,!0).find((J)=>J.sessionName===II(A)[k0[Q]]);if(!I)continue;let C=SQ(I.rootPid),E=I.processes.find((J)=>J.pid===I.rootPid);if(!C||C.birth!==E?.birth||C.uid!==A.uid||C.pid===process.pid)throw Error("adopt_process_generation_changed");let g=new Map;await CV(C,{read:(J)=>{let Y=SQ(J);if(Y)g.set(J,Y);return Y},list:wu,sleep:(J)=>new Promise((Y)=>setTimeout(Y,J)),signal:(J,Y)=>{let F=g.get(J),G=SQ(J);if(!G)return;if(!F||!dC(F,G))throw Error("adopt_process_generation_changed");if(Y==="SIGCONT"){try{process.kill(J,Y)}catch(N){if(N.code!=="ESRCH")throw N}return}let $;try{$=iC(J)}catch(N){if(!SQ(J))return;throw N}if(!$)return;if($.birth!==F.birth||J===process.pid||$.uid!==A.uid||!L7(A,$.cwd,J===C.pid)||$.env.ANET_NODE_MARKER!==A.marker||$.env.CODEX_HOME!==A.codexHome)throw Error("adopt_codex_identity_unproven");let D=SQ(J);if(!D)return;if(!dC(F,D))throw Error("adopt_process_generation_changed");try{process.kill(J,Y)}catch(N){if(N.code!=="ESRCH")throw N}}});let U=nC(A,!0).find((J)=>J[2]===I.pane);for(let J=0;U?.[4]==="0"&&J<20;J++)await new Promise((Y)=>setTimeout(Y,50)),U=nC(A,!0).find((Y)=>Y[2]===I.pane);if(U){if(U[1]!==I.session||U[4]!=="1"||Number(U[3])!==I.rootPid)throw Error("adopt_codex_topology_changed");eQ(["kill-pane","-t",I.pane],{env:z7(A.socket),timeout:5000})}}sg(A)}function sg(A){let Q=new Set(Object.values(II(A)));if(nC(A,!0).some((B)=>Q.has(B[0])&&B[4]!=="1"))throw Error("adopt_codex_stage_still_running");for(let B of wu()){let I=SQ(B);if(!I||I.uid!==A.uid)continue;if(!BV(B,A.marker))continue;let C;try{C=iC(B)}catch{if(!SQ(B))continue;throw Error("adopt_proc_unreadable")}if(C?.env.ANET_NODE_MARKER===A.marker)throw Error("adopt_codex_stage_still_running")}}var wu=()=>yWA("/proc").filter((A)=>/^\d+$/.test(A)&&Number(A)>1).map(Number);var FV=H(()=>{OE();ag();OY();qY();a$()});import{createServer as fWA}from"node:net";async function hWA(A){let Q=new URL(A);await new Promise((B,I)=>{let C=fWA();C.once("error",()=>I(Error("adopt_codex_port_unavailable"))),C.listen({host:Q.hostname.replace(/^\[|\]$/g,""),port:Number(Q.port),exclusive:!0},()=>{C.close((E)=>E?I(Error("adopt_codex_port_unavailable")):B())})})}async function qu(A,Q,B,I,C){if(I!==A.request_id)throw Error("adopt_codex_binding_generation_unproven");let E=zu(A.codex_v2?.start_inputs,Q,B,A.request_id);if(!C())throw Error("adopt_binding_revoked_during_start");sg(B);let g=new Set(Object.values(II(B)));if(nC(B,!0).some((U)=>g.has(U[0])))throw Error("adopt_codex_session_conflict");if(await hWA(E.appserver_url),!C())throw Error("adopt_binding_revoked_during_start")}var Ou=H(()=>{ag();FV();OY();YV()});import{readdirSync as mWA,readFileSync as uWA,readlinkSync as cWA}from"node:fs";function iWA(A,Q,B){let I=`${Q}:${B.toString(16).toUpperCase().padStart(4,"0")}`,C=new Set;for(let E of A.split(`
|
|
107
107
|
`).slice(1)){let g=E.trim().split(/\s+/);if(g.length>=10&&g[1]===I&&g[3]==="0A"&&g[9])C.add(g[9])}return C}function dWA(A,Q){if(!Number.isInteger(Q)||Q<1||Q>65535)throw Error("adopt_codex_port_unproven");let B=A==="127.0.0.1"?["/proc/net/tcp",lWA]:A==="::1"?["/proc/net/tcp6",pWA]:null;if(!B)throw Error("adopt_codex_port_unproven");let I;try{I=uWA(B[0],"utf8")}catch{throw Error("adopt_codex_port_unproven")}return iWA(I,B[1],Q)}function Tu(A,Q,B){let I=new URL(Q),C=dWA(I.hostname,Number(I.port));if(C.size===0)throw Error("adopt_codex_port_unproven");let E=B.find((U)=>U.sessionName===II(A).appsrv);if(!E)throw Error("adopt_codex_stage_missing");let g=new Set;for(let U of E.processes.map((J)=>J.pid)){let J;try{J=mWA(`/proc/${U}/fd`)}catch(Y){if(Y?.code==="ENOENT")continue;throw Error("adopt_codex_port_unproven")}for(let Y of J)try{let F=cWA(`/proc/${U}/fd/${Y}`).match(/^socket:\[(\d+)\]$/)?.[1];if(F&&C.has(F))g.add(F)}catch(F){if(F?.code==="ENOENT")continue;throw Error("adopt_codex_port_unproven")}}if(g.size!==C.size)throw Error("adopt_codex_port_unproven")}var lWA="0100007F",pWA="00000000000000000000000001000000";var Pu=H(()=>{ag()});import{spawn as nWA}from"node:child_process";import{createHash as oWA,randomUUID as aWA}from"node:crypto";import{chmodSync as rWA,existsSync as sWA,lstatSync as tWA,readFileSync as GV,renameSync as xu,unlinkSync as eWA,writeFileSync as ku}from"node:fs";import{join as tg}from"node:path";async function vu(A){let{req:Q,entry:B,identity:I,scope:C,deps:E,stillCurrent:g}=A,U=B.codex_v2?.start_inputs;if(!U)throw Error("adopt_codex_start_evidence_missing");let J=tg(I.nodeDir,"copresence-identity.json"),Y=GV(J),F=tg(I.nodeDir,".hub-stopped"),G=sWA(F),$=YZA(I.nodeDir,B.node_id),D=!1;try{if(!g())throw Error("adopt_binding_revoked_during_start");await Su(E,B,Q.child_alias),await CZA(Q.child_alias,I.workdir,C.socket,E,Q.request_id);let N=await EZA(I,C,B,E,U);if(!g())throw Error("adopt_binding_revoked_during_start");if(await Su(E,B,Q.child_alias),!(await E.callCommHub("get_start_request",{request_id:Q.request_id}))?.ok)throw Error("adopt_codex_start_superseded");if(w$(E.workDir,Q.child_alias,{...B,codex_v2:{version:1,layout:N.scope.layout,socket:N.scope.socket,marker:N.scope.marker,config_hash:N.inputs.config_hash,start_inputs:N.inputs}}),G){if($(),!FZA(I.nodeDir,B.node_id))throw Error("adopt_stop_receipt_changed")}return D=!0,{status:"started",child_pid:N.childPid}}catch(N){if(!D)try{await UZA(Y,C,I,E);let V=IB(E.workDir,Q.child_alias);if(V?.request_id===B.request_id&&V.codex_v2?.marker!==B.codex_v2?.marker)w$(E.workDir,Q.child_alias,B)}catch(V){throw V}throw N}}async function Su(A,Q,B){let I=await A.callCommHub("list_my_children",{});if(!I?.ok||!Array.isArray(I.children))throw Error("adopt_binding_unavailable");let C=I.children.find((E)=>E.managed==="adopted"&&E.child_node_id===Q.node_id&&E.alias===B);if(!C)throw Error("adopt_binding_revoked_during_start");if(C.binding_request_id!==Q.request_id)throw Error("adopt_codex_binding_generation_unproven")}async function CZA(A,Q,B,I,C){let E;try{E=xQ()}catch{throw Error("adopt_codex_launch_failed")}let g=BQ({},"linux",{HOME:I.home,LANG:I.daemonEnv.LANG});g.ANET_TMUX_SOCKET=B;let U=()=>{I.callCommHub("ack_start_request",{request_id:C,status:"starting"}).catch(()=>{})};U();let J=setInterval(U,QZA);J.unref?.();try{await new Promise((Y,F)=>{let G=!1,$=(V)=>{if(G)return;G=!0,clearTimeout(N),V()},D=nWA(E,["node","start",A],{cwd:Q,env:g,stdio:"ignore"}),N=setTimeout(()=>{D.kill("SIGTERM"),$(()=>F(Error("adopt_codex_launch_timeout")))},AZA);D.once("error",()=>$(()=>F(Error("adopt_codex_launch_failed")))),D.once("exit",(V,W)=>{if(V===0&&W==null)$(Y);else $(()=>F(Error("adopt_codex_launch_failed")))})})}finally{clearInterval(J)}}async function EZA(A,Q,B,I,C){let E=Date.now()+BZA;for(;;)try{return gZA(A,Q,B,I,C)}catch(g){if(!IZA.has(g?.message)||Date.now()>=E)throw g;await new Promise((U)=>setTimeout(U,50))}}function gZA(A,Q,B,I,C){let E=uC({node_id:B.node_id,alias:A.alias,network_id:I.networkId,workdir:B.workdir},{...I,allowCodexV2:!0});if(E.nodeDir!==A.nodeDir)throw Error("adopt_registry_identity_mismatch");let g=x0(E,I.uid);if(g.layout!=="native"||g.socket!==Q.socket||g.codexHome!==Q.codexHome||g.alias!==Q.alias||g.workdir!==Q.workdir||g.uid!==Q.uid)throw Error("adopt_codex_binding_changed");let U=rg(g);Tu(g,C.appserver_url,U);let J=JV(E,g,B.request_id);if(J.thread_id!==C.thread_id||J.appserver_url!==C.appserver_url||J.project_dir!==C.project_dir||J.node_id!==C.node_id)throw Error("adopt_codex_start_evidence_changed");let Y=U.find((F)=>F.sessionName===II(g).appsrv);if(!Y?.rootPid)throw Error("adopt_codex_stage_missing");return{scope:g,inputs:J,childPid:Y.rootPid}}async function UZA(A,Q,B,I){let C=null;try{C=x0(B,I.uid)}catch{C=null}if(!C)throw Error("adopt_codex_marker_unsafe");if(C.marker!==Q.marker)await t$(C);else await JZA(Q);sg(C.marker===Q.marker?Q:C),sg(Q);let E=tg(B.nodeDir,"copresence-identity.json");if(!GV(E).equals(A)){let g=`${E}.restore-${process.pid}`;ku(g,A,{mode:384,flag:"wx"}),rWA(g,384),xu(g,E)}}async function JZA(A){try{sg(A)}catch(Q){if(Q?.message!=="adopt_codex_stage_still_running")throw Q;await t$(A)}}function w7(A,Q){try{let B=tWA(A,{bigint:!0});if(!B.isFile()||B.isSymbolicLink()||B.uid!==BigInt(process.getuid?.()??-1)||B.mode&0o022n)return null;let I=GV(A,"utf8"),C=JSON.parse(I);if(!Q||C?.node_id!==Q||C.stopped!==!0)return null;return`${B.ino}:${B.ctimeNs}:${oWA("sha256").update(I).digest("hex")}`}catch(B){if(B?.code==="ENOENT"||B instanceof SyntaxError)return null;throw B}}function YZA(A,Q){let B=tg(A,".hub-stopped"),I=w7(B,Q);return()=>{if(I===null||w7(B,Q)!==I)return;let C=tg(A,".hub-resumed"),E=`${C}.${aWA()}.tmp`;try{ku(E,JSON.stringify({version:1,node_id:Q,receipt_fingerprint:I}),{mode:384,flag:"wx"}),xu(E,C)}finally{try{eWA(E)}catch(g){if(g?.code!=="ENOENT")throw g}}}}function FZA(A,Q){let B=w7(tg(A,".hub-stopped"),Q);if(!B)return!1;try{let I=JSON.parse(GV(tg(A,".hub-resumed"),"utf8"));return I?.version===1&&I.node_id===Q&&I.receipt_fingerprint===B}catch{return!1}}var AZA=600000,QZA=20000,BZA=3000,IZA;var bu=H(()=>{FV();IV();OY();Pu();YV();ag();T$();AB();L0();IZA=new Set(["adopt_codex_stage_missing","adopt_codex_identity_unproven","adopt_codex_port_unproven","adopt_codex_topology_changed","adopt_process_generation_changed","adopt_codex_stage_ambiguous","adopt_codex_target_ambiguous","adopt_tmux_listing_failed","adopt_proc_unreadable","adopt_codex_untracked_process"])});import{spawn as GZA}from"node:child_process";import{existsSync as q7,unlinkSync as $ZA,lstatSync as fu,readFileSync as DZA}from"node:fs";import{join as O7}from"node:path";async function DV(A,Q){let B=`${Q.workDir}\x00${A.child_node_id}`,C=($V.get(B)??Promise.resolve()).catch(()=>{}).then(()=>NZA(A,Q));$V.set(B,C);try{return await C}finally{if($V.get(B)===C)$V.delete(B)}}async function NZA(A,Q){let B=await Q.callCommHub("list_my_children",{});if(!B?.ok||!Array.isArray(B.children))throw Error("adopt_binding_unavailable");let I=IB(Q.workDir,A.child_alias),C=B.children.some((g)=>g.managed==="adopted"&&g.child_node_id===A.child_node_id&&g.alias===A.child_alias);if(!I&&!C)return!1;let E;try{if(!I||!C||I.node_id!==A.child_node_id)throw Error("adopt_active_binding_required");if(A.action==="delete")throw Error("adopted_node_delete_unsupported");let g=B.children.find((U)=>U.managed==="adopted"&&U.child_node_id===A.child_node_id&&U.alias===A.child_alias)?.binding_request_id;E=await VZA(A,I,Q,g)}catch(g){E={status:A.action==="start"?"start_failed":"stop_failed",error:g?.message==="adopted_node_delete_unsupported"||/^adopt_[a-z_]+$/.test(g?.message??"")?g.message:"adopt_lifecycle_verification_failed"}}return await Q.callCommHub(A.action==="start"?"ack_start_request":"ack_stop_request",{request_id:A.request_id,...E}),!0}async function VZA(A,Q,B,I){let C=uC({node_id:Q.node_id,alias:A.child_alias,network_id:B.networkId,workdir:Q.workdir},{...B,allowCodexV2:!!Q.codex_v2});if(C.nodeDir!==Q.nodeDir)throw Error("adopt_registry_identity_mismatch");if(Q.codex_v2){if(!C.config.codexCopresence||Q.codex_v2.version!==1||TE(C)!==Q.codex_v2.config_hash)throw Error("adopt_codex_binding_changed");let{scope:$,previousBoot:D}=A.action==="stop"?M7(C,B.uid):{scope:x0(C,B.uid),previousBoot:!1};if($.marker!==Q.codex_v2.marker)throw Error("adopt_codex_readopt_required");if($.socket!==Q.codex_v2.socket||$.layout!==Q.codex_v2.layout)throw Error("adopt_codex_binding_changed");if(A.action==="start"){if(await qu(Q,C,$,I,()=>IB(B.workDir,A.child_alias)?.request_id===Q.request_id),$.layout!=="native")throw Error("adopt_codex_external_start_unproven");return vu({req:A,entry:Q,identity:C,scope:$,deps:B,stillCurrent:()=>IB(B.workDir,A.child_alias)?.request_id===Q.request_id})}let N=O7(C.nodeDir,".hub-stopped"),V=yu(N,B.uid);if(q7(N)){let W=fu(N);if(!W.isFile()||W.isSymbolicLink()||W.uid!==B.uid||W.mode&18)throw Error("adopt_codex_marker_unsafe")}if(D)_u($);else await t$($);if(IB(B.workDir,A.child_alias)?.request_id!==Q.request_id)throw Error("adopt_binding_revoked_during_stop");if(yu(N,B.uid)!==V)throw Error("adopt_stop_receipt_changed");return UQ(O7(C.nodeDir,".hub-stopped"),{request_id:A.request_id,binding_request_id:Q.request_id,marker:$.marker,node_id:Q.node_id,stopped:!0}),{status:"stopped"}}let E=s$(C,B),g=()=>{let $=o$(C.nodeDir),D=$?iC($):null;if(D){if(D.pid===process.pid)throw Error("adopt_self_process_refused");H9(C,D,{uid:B.uid,home:B.home,defaultTmuxSocket:E.ANET_TMUX_SOCKET||`/tmp/tmux-${B.uid}/default`,reproducibleEnv:E})}return D},U=O7(C.nodeDir,".hub-stopped"),J=g();if(A.action==="stop"){if(!J){if(!Q.launch_evidence||!q7(U))throw Error("adopt_stop_evidence_missing");return{status:"stopped"}}let $=gV(C,J);CY(B.workDir,A.child_alias,{...Q,launch_evidence:$});let D=g();if(!D||D.pid!==J.pid||D.birth!==J.birth)throw Error("adopt_process_generation_changed");let N=SQ(J.pid);if(!N||N.birth!==J.birth||N.uid!==B.uid)throw Error("adopt_process_generation_changed");if(await CV(N),g())throw Error("adopt_process_still_running");return UQ(U,{request_id:A.request_id,node_id:Q.node_id,stopped:!0}),{status:"stopped"}}if(J)return gV(C,J),{status:"started",child_pid:J.pid};let Y=Q.launch_evidence;if(!Y||!["bare","tmux"].includes(Y.mode)||Y.config_hash!==TE(C))throw Error("adopt_start_evidence_missing");let F=xQ(),G=BQ({},"linux",{HOME:B.home,LANG:B.daemonEnv.LANG});if(Y.mode==="tmux"){if(!Y.socket||!Y.session)throw Error("adopt_start_evidence_missing");if(H7(Y.socket,B.uid),G.ANET_TMUX_SOCKET=Y.socket,pC(eQ(P0(["list-sessions"],["#{session_name}"]),{encoding:"utf8",timeout:5000,env:G}),1).map((D)=>D[0]).includes(Y.session))throw Error("adopt_tmux_session_still_exists")}if(q7(U))$ZA(U);try{if(Y.mode==="tmux"){let $=(N)=>`'${N.replace(/'/g,"'\\''")}'`,D=Object.entries(G).filter(([,N])=>N!==void 0).map(([N,V])=>`${N}=${$(V)}`).join(" ");eQ(["new-session","-d","-s",Y.session,"-c",C.workdir,`exec env -i ${D} TMUX="$TMUX" TMUX_PANE="$TMUX_PANE" ${$(F)} node start ${$(A.child_alias)}`],{env:G,timeout:5000})}else{let $=GZA(F,["node","start",A.child_alias],{cwd:C.workdir,env:G,detached:!0,stdio:"ignore"});await new Promise((D,N)=>{$.once("spawn",D),$.once("error",N)}),$.unref()}for(let $=0;$<180;$++){await new Promise((V)=>setTimeout(V,250));let D=g();if(!D)continue;let N=gV(C,D);if(N.mode!==Y.mode||N.mode==="tmux"&&(N.socket!==Y.socket||N.session!==Y.session))throw Error("adopt_launch_mode_mismatch");return w$(B.workDir,A.child_alias,{...Q,launch_evidence:N}),{status:"started",child_pid:D.pid}}throw Error("adopt_start_timeout")}catch($){if(IB(B.workDir,A.child_alias)?.request_id===Q.request_id)UQ(U,{node_id:Q.node_id,start_failed:!0});throw $}}function yu(A,Q){try{let B=fu(A);if(!B.isFile()||B.isSymbolicLink()||B.uid!==Q||B.mode&18)throw Error("adopt_codex_marker_unsafe");return`${B.dev}:${B.ino}:${B.ctimeMs}:${B.mtimeMs}:${DZA(A,"utf8")}`}catch(B){if(B.code==="ENOENT")return null;throw B}}var $V;var T7=H(()=>{OE();M0();AB();R7();L0();T$();a$();qY();UV();IV();Ru();FV();Ou();bu();$V=new Map});var lI={};DA(lI,{stopCopresenceChild:()=>du,recordSpawnedChild:()=>SE,rebuildChildrenMapOnBoot:()=>kZA,handleStopDoorbell:()=>qZA,getChildrenSnapshot:()=>k7,forgetSpawnedChildIfPid:()=>eg,forgetSpawnedChild:()=>jZA,expectedChildConfigPaths:()=>PE,copresenceTeardownFor:()=>VV,_resetChildrenMapForTest:()=>_ZA,_internals:()=>vZA});import{chmodSync as WZA,existsSync as ZZA,lstatSync as e$,mkdirSync as XZA,readFileSync as TY,realpathSync as MZA,renameSync as LZA,rmSync as zZA}from"node:fs";import{execFile as KZA}from"node:child_process";import{dirname as hu,join as YC}from"node:path";import{promisify as HZA}from"node:util";function SE(A,Q,B){v0.set(A,{pid:B,started_at:Date.now(),child_node_id:A,alias:Q})}function jZA(A){return v0.delete(A)}function eg(A,Q){let B=v0.get(A);if(!B||B.pid!==Q)return!1;return v0.delete(A)}function _ZA(){v0.clear()}function k7(){return Array.from(v0.values())}async function RZA(A){return new Promise((Q)=>setTimeout(Q,A))}function x7(A,Q){try{return Q(A,0),!0}catch(B){if(B?.code==="ESRCH")return!1;throw B}}async function mu(A,Q,B,I,C=Date.now){let E=C()+Q;while(C()<E){if(!x7(A,B))return!0;await I(200)}return!x7(A,B)}function uu(A,Q,B,I,C,E,g){try{C(B,448);try{E(B,448)}catch{}let U=YC(B,`${Date.now()}-${A}`);return g(YC(Q,A),U),E(U,448),I.log(`[stop-daemon] backed up child workdir → ${U} (chmod 700)`),U}catch(U){return I.warn(`[stop-daemon] backup mv failed for ${A}: ${U?.message||U}`),null}}function PE(A,Q){if(!Q||Q==="."||Q===".."||/[\/\0]/.test(Q))return[];let B=new Set([YC(A,Q,"config.json")]);try{B.add(YC(MZA(A),Q,"config.json"))}catch{}return[...B]}function wZA(A,Q,B){let[I]=PE(A,Q);if(!I)return!1;try{if(!e$(I).isFile())return!1}catch{return!1}try{let C=JSON.parse(TY(I,"utf8"));if(typeof C?.node_id==="string"&&C.node_id!==B)return!1}catch{}return!0}function iu(A,Q,B){let[I]=PE(A,Q);if(!I)return!1;try{if(!e$(I).isFile())return!1;let C=JSON.parse(TY(I,"utf8"));return C?.node_id===B&&C?.runtime==="opencode-cli"&&C?.opencodeMode==="copresence"}catch{return!1}}function VV(A,Q,B){if(iu(A,Q,B))return!0;let[I]=PE(A,Q);if(!I)return!1;try{if(!e$(I).isFile())return!1;let C=JSON.parse(TY(I,"utf8"));if(C?.node_id!==B)return!1;if(C?.codexCopresence!==!0)return!1}catch{return!1}try{e$(YC(A,Q,"copresence-identity.json"))}catch{return!1}return!0}function cu(A,Q=600){let B=String(A??"").trim();return B.length>Q?`…${B.slice(-Q)}`:B}async function du(A,Q){let{getAnetBinAbs:B,minimalEnv:I}=await Promise.resolve().then(() => (AB(),AU)),C;try{C=B()}catch(E){return{ok:!1,detail:`anet binary unavailable: ${E?.message||E}`}}try{let{stdout:E}=await pu(C,["node","stop",A],{cwd:Q,env:I(),timeout:120000,maxBuffer:4194304});return{ok:!0,detail:cu(E)}}catch(E){return{ok:!1,detail:`anet node stop exit=${E?.code??E?.signal??"?"}: ${cu(E?.stderr||E?.stdout||E?.message)}`}}}async function P7(A,Q,B,I){if(!A||!VV(B,A,Q))return null;let C=hu(hu(B));I.log(`[stop-daemon] co-presence child ${A}: managed local config → pinned \`anet node stop ${A}\` in ${C}`);let E=I.stopCopresenceNode??du,g;try{g=await E(A,C)}catch(U){g={ok:!1,detail:String(U?.message||U)}}if(g.ok)return I.log(`[stop-daemon] co-presence teardown OK alias=${A}: ${g.detail.split(`
|
|
108
108
|
`).slice(-1)[0]||""}`),null;return I.warn(`[stop-daemon] co-presence teardown FAILED alias=${A}: ${g.detail}`),`copresence_teardown_failed: ${g.detail}`.slice(0,1000)}async function qZA(A,Q){let{request_id:B}=A,I=Q.signalProcess??((u,O)=>{process.kill(u,O)}),C=Q.sleep??RZA,E=Q.now??Date.now,g=Q.renameDir??((u,O)=>LZA(u,O)),U=Q.ensureDir??((u,O)=>{XZA(u,{recursive:!0,mode:O})}),J=Q.chmod??((u,O)=>WZA(u,O)),Y=Q.workDir??process.cwd(),F;try{F=await Q.callCommHub("get_stop_request",{request_id:B})}catch(u){Q.warn(`[stop-daemon] get_stop_request failed: ${u?.message||u}`);return}if(!F?.ok||!F.child_node_id||!F.action){Q.warn(`[stop-daemon] get_stop_request returned error: ${F?.error||"unknown"}`);return}let{child_node_id:G,child_alias:$,action:D,delete_config:N=!0,grace_seconds:V=10}=F;if(Q.adoption&&$&&await DV({request_id:B,child_node_id:G,child_alias:$,action:D},Q.adoption))return;let W=$?mC(Y,$):Y;if($&&IB(Y,$)){await Q.callCommHub("ack_stop_request",{request_id:A.request_id,status:"stop_failed",error:"adopted_lifecycle_not_available"});return}let Z=Q.workdirRoot??YC(W,".anet","nodes"),X=Q.deletedRoot??YC(W,".anet","deleted"),L=(u)=>yg(Z,u)??u,M=$?L($):void 0,z=(u)=>{if(!u||!$)return;try{gh(Y,$)}catch(O){Q.warn(`[stop-daemon] child workdir registry cleanup failed: ${O?.message||O}`)}},K=v0.get(G);if(!K){if(Q.log(`[stop-daemon] ${D} without map entry (expected after stop / crash): ${G}`),D==="stop"&&!(M&&wZA(Z,M,G))){let v=`not_my_child: daemon has no local record of ${$||"(no alias)"} (${G}) — `+`no children-map entry and no config at ${M?YC(Z,M,"config.json"):Z}; refusing to signal processes by alias. If this node was started by hand, stop it on its machine with \`anet node stop <alias>\`.`;Q.warn(`[stop-daemon] ${v}`),await Q.callCommHub("ack_stop_request",{request_id:B,status:"stop_failed",error:v.slice(0,1000)}).catch((t)=>{Q.warn(`[stop-daemon] ack failed: ${t?.message||t}`)});return}let u=await P7(M,G,Z,Q);if(u){await Q.callCommHub("ack_stop_request",{request_id:B,status:"stop_failed",error:u}).catch((v)=>{Q.warn(`[stop-daemon] ack failed: ${v?.message||v}`)});return}if($&&D==="delete"&&N&&M)await NV($,PE(Z,M),I,Q,C,E,`${D} without map entry`);else if($)await S7($,PE(Z,M),I,Q,`${D} without map entry`);let O=D==="delete"&&N&&M?uu(M,Z,X,Q,U,J,g):null;if(z(O),O&&M)await NV($||"",PE(Z,M),I,Q,C,E,"delete after backup mv"),lu(Z,M,Q);await Q.callCommHub("ack_stop_request",{request_id:B,status:"stopped",...O?{backup_path:O}:{}}).catch((v)=>{Q.warn(`[stop-daemon] ack failed: ${v?.message||v}`)});return}let _=M??L(K.alias),h=PE(Z,_),x=(u)=>{let v=(Q.readPgid??xZA)(u);return v&&v>0?v:u},k=(u,O)=>{let v=x(u);try{I(-v,O)}catch(t){if(t?.code==="ESRCH")return;if(t?.code==="EPERM"||t?.code==="EINVAL"){try{I(u,O)}catch(r){if(r?.code!=="ESRCH")throw r}return}throw t}},b="UNKNOWN",y=iu(Z,_,G);try{if(y){let u=await P7(_,G,Z,Q);if(u){await Q.callCommHub("ack_stop_request",{request_id:B,status:"stop_failed",error:u}).catch(()=>{});return}}else if(x7(K.pid,I)){if(k(K.pid,"SIGTERM"),b="SIGTERM",Q.log(`[stop-daemon] sent SIGTERM to pgid=${x(K.pid)} (from recorded pid=${K.pid}) alias=${K.alias} grace=${V}s (covers wrapper + agent-node grandchild)`),!await mu(K.pid,V*1000,I,C,E))k(K.pid,"SIGKILL"),b="SIGKILL",Q.warn(`[stop-daemon] grace exceeded, sent SIGKILL to pgid=${K.pid} alias=${K.alias}`),await mu(K.pid,5000,I,C,E)}else b="ALREADY_DEAD",Q.log(`[stop-daemon] pid=${K.pid} alias=${K.alias} already dead before SIGTERM`),await S7(K.alias,h,I,Q,"wrapper was already dead")}catch(u){if(u?.code==="ESRCH")b="ALREADY_DEAD";else{Q.warn(`[stop-daemon] signal flow threw: ${u?.message||u}`),await Q.callCommHub("ack_stop_request",{request_id:B,status:"stop_failed",exit_signal:b,error:`signal failed: ${(u?.message||u).toString().slice(0,500)}`}).catch(()=>{});return}}let T=y?null:await P7(_,G,Z,Q);if(T){await Q.callCommHub("ack_stop_request",{request_id:B,status:"stop_failed",exit_signal:b,error:T}).catch((u)=>{Q.warn(`[stop-daemon] ack failed: ${u?.message||u}`)});return}if(D==="delete"&&N&&$&&M)await NV(K.alias,h,I,Q,C,E,"delete before backup mv");let n=D==="delete"&&N&&M?uu(M,Z,X,Q,U,J,g):null;if(z(n),Q.log(`[stop-daemon] entering residual sweep alias=${K.alias}`),await S7(K.alias,h,I,Q,"post-pgid-signal residual sweep"),Q.log(`[stop-daemon] residual sweep returned alias=${K.alias}`),n&&M)await NV(K.alias,h,I,Q,C,E,"delete after backup mv"),lu(Z,M,Q);v0.delete(G),Q.log(`[stop-daemon] dropped from children map child_node_id=${G}, sending ack action=${D}`),await Q.callCommHub("ack_stop_request",{request_id:B,status:"stopped",exit_signal:b,...n?{backup_path:n}:{}}).then(()=>{Q.log(`[stop-daemon] ack accepted request_id=${B} action=${D}`)}).catch((u)=>{Q.warn(`[stop-daemon] ack failed: ${u?.message||u}`)})}async function OZA(A,Q,B){if(Q.length===0)return[];if(B.listMatchingChildPids)return B.listMatchingChildPids(A,Q);try{let{execSync:I}=await import("node:child_process"),C=await import("node:fs"),E;try{E=I("pgrep -af 'agent-node' || true",{encoding:"utf8",timeout:1e4,maxBuffer:33554432})}catch{return[]}let g=E.split(/\r?\n/).map((J)=>parseInt(J.trim().split(/\s+/)[0]||"0",10)).filter((J)=>Number.isFinite(J)&&J>0&&J!==process.pid),U=[];for(let J of g){let Y=null;try{Y=C.readFileSync(`/proc/${J}/cmdline`,"utf8")}catch{continue}if(!b7(Y,A,Q))continue;U.push(J)}return U}catch(I){return B.warn(`[stop-daemon] orphan sweep skipped: ${I?.message||I}`),[]}}async function nu(A,Q,B,I,C,E){let g=await OZA(A,Q,I);for(let U of g){I.warn(`[stop-daemon] sweeping orphan pid=${U} alias=${A} (${E})`);try{B(U,C)}catch{}}return g.length}async function NV(A,Q,B,I,C,E,g,U=5000){if(Q.length===0){I.warn(`[stop-daemon] orphan sweep skipped (${g}): no child config path to match for alias=${A}`);return}let J=E()+U,Y="SIGTERM";while(!0){if(await nu(A,Q,B,I,Y,g)===0)return;if(E()>=J){I.warn(`[stop-daemon] child still alive after ${U}ms alias=${A} (${g})`);return}await C(200),Y="SIGKILL"}}function lu(A,Q,B){if(!Q||Q==="."||Q===".."||/[\/\0]/.test(Q))return;let I=YC(A,Q),C;try{C=e$(I)}catch(E){if(E?.code==="ENOENT")return;B.warn(`[stop-daemon] resurrected workdir stat failed for ${I}: ${E?.message||E}`);return}if(C.isSymbolicLink()||!C.isDirectory()){B.warn(`[stop-daemon] refusing to remove non-directory at ${I} after backup mv`);return}if(ZZA(YC(I,"config.json"))){B.warn(`[stop-daemon] recreated workdir ${I} has config.json; leaving it`);return}try{zZA(I,{recursive:!0,force:!0}),B.warn(`[stop-daemon] removed workdir recreated after backup mv: ${I}`)}catch(E){B.warn(`[stop-daemon] failed to remove recreated workdir ${I}: ${E?.message||E}`)}}async function S7(A,Q,B,I,C){if(Q.length===0){I.warn(`[stop-daemon] orphan sweep skipped (${C}): no child config path to match for alias=${A}`);return}await nu(A,Q,B,I,"SIGTERM",C)}async function TZA(A){let B=`agent-node.*--alias ${A.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}($|[[:space:]])`;try{let{stdout:I}=await pu("pgrep",["-f",B],{timeout:5000});return I.split(/\s+/).filter(Boolean).map((C)=>parseInt(C,10)).filter((C)=>Number.isFinite(C))}catch(I){if(I?.code===1)return[];throw I}}function PZA(A){try{return TY(`/proc/${A}/cmdline`,"utf-8")}catch{return null}}function SZA(A){try{let Q=TY(`/proc/${A}/stat`,"utf-8"),B=Q.lastIndexOf(")");if(B<0)return null;return Q.slice(B+1).trim().split(/\s+/)[0]||null}catch{return null}}function xZA(A){try{let Q=TY(`/proc/${A}/stat`,"utf-8"),B=Q.lastIndexOf(")");if(B<0)return null;let I=Q.slice(B+1).trim().split(/\s+/),C=parseInt(I[2]||"",10);return Number.isFinite(C)&&C>0?C:null}catch{return null}}function v7(A,Q){if(!A)return!1;let B=A.split("\x00").filter(Boolean);if(B.findIndex((C,E)=>C==="--alias"&&B[E+1]===Q)<0)return!1;return B.some((C)=>C==="agent-node"||C.endsWith("/agent-node")||C.endsWith("/cli.js"))}function b7(A,Q,B){if(!v7(A,Q))return!1;let I=A.split("\x00").filter(Boolean);return I.some((C,E)=>C==="--config"&&B.includes(I[E+1]??""))}async function kZA(A){let Q={total_children_from_hub:0,recovered:0,missing:[],ambiguous:[],zombies:[]},B=A.pgrepAlias??TZA,I=A.readProcCmdline??PZA,C=A.readProcStatState??SZA,E;try{let J=await A.callCommHub("list_my_children",{});if(!J?.ok||!Array.isArray(J.children))return A.warn(`[rebuild] list_my_children failed: ${J?.error||"unknown"}`),Q;E=J.children}catch(J){return A.warn(`[rebuild] list_my_children threw: ${J?.message||J}`),Q}Q.total_children_from_hub=E.length;let g=process.pid,U=A.workDir??process.cwd();for(let J of E){if(!J.alias||!J.child_node_id)continue;if(J.managed==="adopted"||IB(U,J.alias))continue;let Y=A.workdirRoot??YC(mC(U,J.alias),".anet","nodes"),F=PE(Y,yg(Y,J.alias)??J.alias);if(F.length===0){Q.missing.push(J.alias),A.warn(`[rebuild] alias=${J.alias} skipped: no child config path to match (alias is not a single path segment)`);continue}let G;try{G=await B(J.alias)}catch(D){A.warn(`[rebuild] pgrep failed for alias=${J.alias}: ${D?.message||D}`);continue}let $=[];for(let D of G){if(D===g)continue;if(C(D)==="Z"){Q.zombies.push(J.alias);continue}let V=I(D);if(!v7(V,J.alias))continue;if(!b7(V,J.alias,F)){A.warn(`[rebuild] ignoring pid=${D} alias=${J.alias}: --config is not the config this daemon wrote for the child (same-alias node from another workdir/HOME)`);continue}$.push(D)}if($.length===0){Q.missing.push(J.alias),A.warn(`[rebuild] hub-active alias=${J.alias} has no matching pid (crashed without cleanup?)`);continue}if($.length>1){Q.ambiguous.push(J.alias),A.warn(`[rebuild] alias=${J.alias} matched ${$.length} pids ${$.join(",")} after cmdline filter — skipping`);continue}SE(J.child_node_id,J.alias,$[0]),Q.recovered++,A.log(`[rebuild] recovered alias=${J.alias} → pid=${$[0]}`)}return A.log(`[rebuild] done: total=${Q.total_children_from_hub} recovered=${Q.recovered} missing=${Q.missing.length} ambiguous=${Q.ambiguous.length} zombies=${Q.zombies.length}`),Q}var pu,v0,vZA;var _B=H(()=>{z0();L0();T7();P$();pu=HZA(KZA),v0=new Map;vZA={cmdlineMatchesAlias:v7,cmdlineMatchesChild:b7}});var Ec={};DA(Ec,{resolveOnPathReal:()=>b0,requiredCliStatus:()=>PY,realReadinessDeps:()=>dZA,readinessIntervalFromEnv:()=>nZA,proxyFor:()=>Bc,probeRuntimeReadiness:()=>Qc,opencodeExplicitGenerationMismatch:()=>h7,httpHeadReal:()=>Ic,extractVersion:()=>WV,execVersionReal:()=>SY,createRuntimeReadinessMonitor:()=>oZA,codexSharedCountReal:()=>Cc,cliCandidatesOnPath:()=>Ac,STEP_TIMEOUT_MS:()=>BD,RUNTIME_DEADLINE_MS:()=>eu,READINESS_INTERVAL_MS:()=>m7,PROBED_RUNTIMES:()=>cZA});import{execFile as bZA}from"node:child_process";import{accessSync as yZA,constants as fZA,readdirSync as hZA,readFileSync as ou,statSync as ZV}from"node:fs";import{connect as mZA}from"node:net";import{join as QD,delimiter as tu}from"node:path";import{connect as uZA}from"node:tls";function WV(A){let Q=/\d+\.\d+\.\d+(?:[-+.][0-9A-Za-z.-]+)?/.exec(A);return Q?Q[0].slice(0,64):void 0}function lZA(A){try{return new URL(A).host}catch{return A}}function pZA(A,Q){return new Promise((B)=>{let I=setTimeout(()=>B(y7),Q);I.unref?.(),A.then((C)=>{clearTimeout(I),B(C)},()=>{clearTimeout(I),B(y7)})})}function Ac(A,Q){let B=Q.split(tu),I=process.platform==="win32"?[".exe",".cmd",".bat",""]:[""],C=[];for(let E of B){if(!E)continue;for(let g of I){let U=QD(E,A+g);try{let J=ZV(U);if(J.isFile()&&(process.platform==="win32"||(J.mode&73)!==0)){if(!C.includes(U))C.push(U);break}}catch{}}}return C}async function PY(A,Q,B,I,C,E){let g=f7[A];if(!g?.cli)return{cli:"not_required"};let U=g.cli;if(!E){let F=I.resolveOnPath(U,Q);if(!F)return{cli:"missing",command:U};let G=await I.execVersion(F,B,C);if(G.kind==="ok")return{cli:"found",command:U,version:WV(G.stdout)};if(G.kind==="error")return{cli:"missing",command:U};return{cli:"unknown",command:U}}let J=(I.candidatesOnPath??Ac)(U,Q);if(J.length===0)return{cli:"missing",command:U};let Y;for(let F of J){let G=await I.execVersion(F,B,C),$=G.kind==="ok"?WV(G.stdout):void 0;if(G.kind==="ok"&&E($))return{cli:"found",command:U,version:$};if(Y??={kind:G.kind,version:$},G.kind==="timeout")break}if(Y?.kind==="error")return{cli:"missing",command:U};if(Y?.kind==="timeout")return{cli:"unknown",command:U};return{cli:"found",command:U,version:Y?.version}}function h7(A,Q){if(A!=="v1"&&A!=="v2")return null;if(Q.cli!=="found")return null;if(Q.version&&PQ(A,Q.version))return null;let B=CB(A),I=B.pin??"none",C=B.acceptedVersions.join(", ")||"none";return`opencode_generation_mismatch: installed opencode ${Q.version??"(unparsed)"} is not an accepted ${A} of ${B.packageName}@${I} (accepted: ${C}). Provider and model stay in OpenCode's own config; this check does not apply an anet provider preset.`}async function iZA(A,Q,B){let I=new Date(Q.now()).toISOString(),C=f7[A];if(!C)return{ok:!1,state:"unknown",reason:`这个 daemon 不认识运行时 ${A.slice(0,64)},无法自检;请升级 agent-node`,checked_at:I};let E={ok:!1,state:"unknown",reason:"",checked_at:I},g=Q.childEnv.PATH??"",U=!1;if(C.cli){let D=await PY(A,g,Q.childEnv,Q,B);if(D.cli==="found"){if(E.cli="found",D.version)E.version=D.version}else if(D.cli==="missing")E.cli="missing";else E.cli="unknown",U=!0}else if(E.cli="bundled",C.optionalCli){let D=Q.resolveOnPath(C.optionalCli,g);if(D){let N=await Q.execVersion(D,Q.childEnv,B);if(N.kind==="ok"){let V=WV(N.stdout);if(V)E.version=V}}}if(A==="opencode-cli"&&E.cli==="found"&&/^2\./.test(E.version??"")){E.auth="unknown",E.network="skipped",E.generation="v2";let D=CB("v2"),N=!!E.version&&PQ("v2",E.version);return E.accepted=N,E.reason=N?"检测到 OpenCode V2;provider、模型和登录取决于目标节点配置,不能用 opencode.ai 的连通性确认。创建时仍需校验准确版本、显式工具授权和启动结果":`检测到 OpenCode 2.x(${E.version??"未解析"}),不是本发行接受的 ${D.packageName}@${D.pin};显式创建 v2 会被拒绝。provider 与模型仍用 OpenCode 自己的配置,本检查不套用 anet provider 预设`,E}let J=C.authFiles.some((D)=>Q.fileExists(QD(Q.home,D))),Y=C.authEnvKeys.some((D)=>typeof Q.childEnv[D]==="string"&&Q.childEnv[D]!==""),F=C.authEnvKeys.filter((D)=>typeof Q.daemonEnv[D]==="string"&&Q.daemonEnv[D]!==""&&!(typeof Q.childEnv[D]==="string"&&Q.childEnv[D]!=="")),G=!1;if(J||Y)E.auth="present";else if(C.authOptional)E.auth="not_required";else if(Q.platform==="darwin"&&C.authFiles.some((D)=>D.startsWith(".claude/")))E.auth="unknown",G=!0;else E.auth="absent";if(C.codexShared&&J)try{let D=Q.codexSharedCount(Q.home);if(typeof D==="number"&&Number.isFinite(D)&&D>=0)E.shared_login_count=D}catch{}if(E.cli==="missing"||E.auth==="absent")E.network="skipped";else{let D;try{D=await Q.httpHead(C.endpoint,B,Q.daemonEnv)}catch{D="unreachable"}E.network=D}let $=lZA(C.endpoint);if(E.cli==="missing")E.state="missing_cli",E.reason=`新节点的 PATH 上找不到可用的 ${C.cli} 命令(或 \`${C.cli} --version\` 运行失败)。修法:${C.installHint}`;else if(E.auth==="absent"){E.state="not_logged_in";let D=`这台机器上没有 ${A} 需要的登录。修法:${C.loginHint}`;if(F.length>0)D+=`。注意:daemon 进程环境里有 ${F.join("/")},但它不会传给 daemon 创建的节点`;E.reason=D}else if(E.network==="unreachable")E.state="no_network",E.reason=`这台机器连不上 ${$}(连接被拒或 ${Math.round(B/1000)} 秒内无响应)。修法:检查这台机器的出网;需要代理时在 daemon 的环境里设置 HTTPS_PROXY`;else if(U)E.state="unknown",E.reason=`\`${C.cli} --version\` 在 ${Math.round(B/1000)} 秒内没有返回,无法确认 CLI 可用;下一轮自检会重试`;else if(G)E.state="unknown",E.reason="macOS 上 Claude Code 的登录可能存在钥匙串里,无法只凭文件确认;如果建出来的节点报未登录,在这台机器上运行 `claude` 并执行 /login";else{E.state="ready",E.ok=!0;let D=[];if(E.cli==="bundled")D.push("使用 runtime 自带的 CLI");if(E.auth==="not_required")D.push("免费模型无需登录;用付费 provider 时需另行登录");if(typeof E.shared_login_count==="number"&&E.shared_login_count>0)D.push(`本机已有 ${E.shared_login_count} 个节点共用这个 codex 登录,新节点会加入同一条刷新链,其中一个刷新后其余可能被顶掉登录;建好后可用 \`anet node codex login-status\` 查看,并为新节点单独执行 codex login`);E.reason=D.length>0?`可以创建。${D.join(";")}`:"可以创建"}if(A==="opencode-cli"&&E.cli==="found"&&E.version&&PQ("v1",E.version))E.generation="v1",E.accepted=!0;return E}async function Qc(A,Q,B={}){let I=B.stepTimeoutMs??BD,C=B.runtimeDeadlineMs??eu,E=[...new Set(A.filter((U)=>typeof U==="string"&&U.length>0))].slice(0,16),g=await Promise.all(E.map(async(U)=>{let J=await pZA(iZA(U,Q,I),C);if(J===y7){let Y={ok:!1,state:"unknown",reason:`自检在 ${Math.round(C/1000)} 秒内没有完成,无法确认能否创建;下一轮自检会重试`,checked_at:new Date(Q.now()).toISOString()};return[U,Y]}return[U,J]}));return Object.fromEntries(g)}function b0(A,Q,B=process.platform){let I=B==="win32"?[".exe",".cmd",".bat",""]:[""],C=Q.split(B==="win32"?";":tu);for(let E of C){if(!E)continue;for(let g of I){let U=QD(E,A+g);try{if(!ZV(U).isFile())continue;if(B!=="win32")yZA(U,fZA.X_OK);return U}catch{}}}return null}function SY(A,Q,B){return new Promise((I)=>{let C=process.platform==="win32"&&/\.(cmd|bat)$/i.test(A);try{bZA(A,["--version"],{env:Q,timeout:B,killSignal:"SIGKILL",windowsHide:!0,maxBuffer:65536,shell:C},(E,g)=>{if(E){I(E.killed||E.signal==="SIGKILL"||E.code==="ETIMEDOUT"?{kind:"timeout"}:{kind:"error"});return}I({kind:"ok",stdout:String(g??"")})})}catch{I({kind:"error"})}})}function Bc(A,Q){let B=(Q.NO_PROXY??Q.no_proxy??"").split(",").map((E)=>E.trim().toLowerCase()).filter(Boolean),I=A.toLowerCase();for(let E of B){if(E==="*")return;let g=E.replace(/^\./,"").replace(/:\d+$/,"");if(I===g||I.endsWith("."+g))return}let C=Q.HTTPS_PROXY??Q.https_proxy??Q.ALL_PROXY??Q.all_proxy;return C&&C.trim()?C.trim():void 0}function Ic(A,Q,B){return new Promise((I)=>{let C=!1,E=[],g=(N)=>{if(C)return;C=!0,clearTimeout(U);for(let V of E)try{V.destroy()}catch{}I(N)},U=setTimeout(()=>g("unreachable"),Q);U.unref?.();let J;try{J=new URL(A)}catch{g("unreachable");return}let Y=J.hostname,F=Number(J.port||443),G=(N)=>{let V="";N.on("data",(W)=>{if(V+=W.toString("latin1"),/^HTTP\/\d(\.\d)? \d{3}/.test(V))g("reachable");else if(V.length>16)g("unreachable")}),N.on("error",()=>g("unreachable")),N.on("close",()=>g("unreachable")),N.write(`HEAD / HTTP/1.1\r
|
|
109
109
|
Host: ${Y}\r
|
|
@@ -319,7 +319,7 @@ ${A}`}function Yy(A,Q,B,I,C){let{interactiveDashboardTask:E,messageType:g}=B,U=r
|
|
|
319
319
|
`,"config.json",B.stat),!0}function lc(A,Q){return typeof A.opencodeConfiguredModelAtLastOpen==="string"&&A.opencodeConfiguredModelAtLastOpen!==Q}O0();EC();async function pc(A,Q){let B=!1,I;for(let C of A)try{await Q(C)}catch(E){if(!B)I=E;B=!0}if(B)throw I}function Ij(A,Q){let B=Promise.resolve(),I=new Map,C=async(E)=>{let g=Q?.initialDelayMs??0;while(!0)try{await E();return}catch(U){if(A(U),!Q)return;await new Promise((J)=>{setTimeout(J,g).unref?.()}),g=Math.min(g*2,Q.maxDelayMs)}};return{schedule(E){let g=I.get(E);if(g){g.dirty=!0;return}let U={dirty:!1};I.set(E,U);let J=async()=>{try{do U.dirty=!1,await C(E);while(U.dirty)}finally{I.delete(E)}};B=B.then(J,J)},idle(){return B}}}var yXA=new Set(["replied","failed","cancelled","expired"]);function fXA(A){return typeof A==="string"&&yXA.has(A)}async function ic(A,Q){if(!Q)return{skip:!1,status:null,reason:"no-task-id"};let B;try{B=await A(Q)}catch{return{skip:!1,status:null,reason:"lookup-failed"}}if(!B||B.ok===!1||!B.task)return{skip:!1,status:null,reason:"not-found"};let I=typeof B.task.status==="string"?B.task.status:null;return fXA(I)?{skip:!0,status:I,reason:"terminal"}:{skip:!1,status:I,reason:"open"}}function dc(A){if(A.meta&&typeof A.meta==="object"&&!Array.isArray(A.meta))return A.meta;if(typeof A.meta_json!=="string"||A.meta_json.length===0)return null;try{let Q=JSON.parse(A.meta_json);return Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{return null}}function RV(A){let Q=A.type??"task";if(Q!=="task"&&Q!=="broadcast")return!1;let B=dc(A);if(!B||B.source!=="dashboard-chat")return!1;if(typeof B.client_request_id!=="string"||!/^dreq_[a-f0-9]{32}$/.test(B.client_request_id))return!1;return B.auth_origin==="user"}function nc(A){if(!RV(A))return null;let Q=dc(A)?.client_request_id;return typeof Q==="string"?Q:null}async function oc(A,Q){for(let B of A)await Q(B)}function ac(A){if(!Number.isInteger(A.maxConcurrent)||A.maxConcurrent<1)throw Error("maxConcurrent must be a positive integer");let Q=new Set,B=new Set,I=A.reservedPrioritySlots??0;if(!Number.isInteger(I)||I<0||I>=A.maxConcurrent)throw Error("reservedPrioritySlots out of range");let C=new Set,E=[],g=()=>{while(Q.size<A.maxConcurrent&&E.length>0){if(!E[0].priority&&B.size>=A.maxConcurrent-I)break;let U=E.shift(),J=A.key(U.message);if(C.delete(J),Q.add(J),!U.priority)B.add(J);let Y;try{Y=U.handler(U.message)}catch(F){Y=Promise.reject(F)}Y.catch(A.onError).finally(()=>{Q.delete(J),B.delete(J);try{A.onSettled?.()}catch(F){A.onError(F)}finally{g()}})}};return{submit(U,J){let Y=0,F=0;for(let G of U){let $=A.key(G);if(Q.has($)||C.has($)){F++;continue}C.add($);let D=A.prioritize?.(G)===!0||A.prioritizeRecovery?.(G)===!0,N=D?E.findIndex((W)=>!W.priority):-1,V={message:G,handler:J,priority:D};if(N<0)E.push(V);else E.splice(N,0,V);Y++}return g(),{active:Q.size,queued:E.length,accepted:Y,deduplicated:F}},stats(){return{active:Q.size,queued:E.length}}}}function rc(A,Q){return A!=="codex-app-server"||Q===0}var hXA={self:"sender alias equals node alias; reply-loop guard","own-prefix":"message carries this node's own reply prefix; reply-loop guard",cooldown:"sender cooldown is active","low-value-inbound":"non-task message matched the low-value filter"};function sc(A){let Q=hXA[A.reason]||"inbound filter rejected the message";return`skipped inbound ${A.messageType} ${A.taskId} from ${A.sender}: ${A.reason} (${Q}); acknowledged without model delivery`}function tc(A){let Q=A||"task";return Q==="task"||Q==="broadcast"}function ec(A){let{alias:Q,from:B,content:I,msgType:C}=A;if(B===Q&&!A.imBridge)return"self";if(I.startsWith(`[${Q}]`))return"own-prefix";let E=C==="task"||C==="broadcast"||C==="reply";if(!E&&B!=="hub"&&B!=="api"){if(A.lastReplyAt&&A.now-A.lastReplyAt<A.cooldownMs)return"cooldown"}if(!E&&A.isLowValue(I))return"low-value-inbound";return null}var mXA="skipped by agent-node: self-sent task (sender is this node; reply-loop guard), no turn ran. To wake a node later, use a Hub scheduled task or /aloop instead of send_task to yourself. (#519)",uXA="skipped by agent-node: task text starts with this node's own reply prefix (echo of its own reply; reply-loop guard), no turn ran. (#519)";function cXA(A){if(A==="self")return mXA;if(A==="own-prefix")return uXA;return null}async function Al(A,Q){let B=cXA(Q.reason);if(!B)return{kind:"not-applicable",detail:`reason ${Q.reason} does not close a task`};if(!tc(Q.msgType))return{kind:"not-applicable",detail:`type ${Q.msgType} carries no task`};if(!Q.taskId)return{kind:"not-applicable",detail:"no task id"};try{let I=await A("cancel_task",{task_id:Q.taskId,reason:B});if(I&&typeof I==="object"&&I.ok===!0)return{kind:"closed",tool:"cancel_task"};return{kind:"not-closed",tool:"cancel_task",detail:JSON.stringify(I??null).slice(0,200)}}catch(I){return{kind:"error",tool:"cancel_task",detail:String(I?.message??I).slice(0,200)}}}async function Ql(A,Q){if(!tc(Q.msgType))return{kind:"not-applicable",detail:`type ${Q.msgType} carries no task`};if(!Q.taskId)return{kind:"not-applicable",detail:"no task id"};let I=`${Q.result.trim()||"(empty reply)"} [low-value reply withheld from sender by agent-node (#519)]`.slice(0,4000);try{return await A("report_completion",{alias:Q.alias,task:Q.taskId,result:I}),{kind:"closed",tool:"report_completion"}}catch(C){return{kind:"error",tool:"report_completion",detail:String(C?.message??C).slice(0,200)}}}function YD(A,Q){switch(Q.kind){case"closed":return`closed task ${A} via ${Q.tool} (#519)`;case"not-closed":return`task ${A} not closed by ${Q.tool} (already terminal?): ${Q.detail}`;case"not-applicable":return`task ${A} left as-is: ${Q.detail}`;case"error":return`failed to close task ${A} via ${Q.tool}: ${Q.detail}`}}function wV(){let A=null;return{run(Q){if(A)return A;let B=Promise.resolve().then(Q);return A=B,B.finally(()=>{if(A===B)A=null}).catch(()=>{}),B},pending(){return A}}}function Bl(){let A=null,Q=wV();return{async getOrOpen(B){if(A?.isRunning)return A;return Q.run(async()=>{if(A?.isRunning)return A;A=null;let I=await B();if(!I.isRunning)throw Error("codex app-server session stopped while opening");return A=I,I})},invalidate(B){if(!B||A===B)A=null},current(){return A},pending(){return Q.pending()}}}FD();A4();import{closeSync as GD,constants as xE,existsSync as oXA,fchmodSync as OV,fstatSync as Cl,fsyncSync as aXA,ftruncateSync as rXA,lstatSync as sXA,mkdirSync as tXA,openSync as Jj,readdirSync as eXA,readFileSync as AMA,realpathSync as Uj,writeSync as QMA}from"node:fs";import{join as El,resolve as Yj}from"node:path";function gl(){return process.platform==="linux"&&oXA("/proc/self/fd")}function Ul(A,Q){return gl()?`/proc/self/fd/${A}`:Q}function Jl(A,Q){let B=Cl(A),I=process.getuid?.();if(!B.isFile()||B.nlink!==1||I!==void 0&&B.uid!==I)throw Error(`private log is not a single owner-controlled file: ${Q}`);OV(A,384)}function Yl(A){let Q=Yj(A);if(Uj(Q)!==Q)throw Error(`private log directory is not canonical: ${Q}`);let B=Jj(Q,xE.O_RDONLY|(xE.O_DIRECTORY||0)|(xE.O_NOFOLLOW||0));try{let I=Cl(B),C=process.getuid?.();if(!I.isDirectory()||C!==void 0&&I.uid!==C)throw Error(`private log directory is not owner-controlled: ${Q}`);if(gl()&&Uj(`/proc/self/fd/${B}`)!==Q)throw Error(`private log directory changed during validation: ${Q}`);if(process.platform!=="win32")OV(B,448);return B}catch(I){throw GD(B),I}}function Fl(A,Q,B){let I=0;while(I<Q.length){let C=QMA(A,Q,I,Q.length-I,B===null?null:B+I);if(C<=0)throw Error("private log write made no progress");I+=C}}function BMA(A,Q){let B=Jj(A,xE.O_RDWR|(xE.O_NOFOLLOW||0));try{Jl(B,A);let I=Buffer.from(Q.redactText(AMA(B,"utf8")).text,"utf8");if(rXA(B,0),I.length>0)Fl(B,I,0);aXA(B),OV(B,384)}finally{GD(B)}}function Gl(A,Q){let B=Yj(A);tXA(B,{recursive:!0,mode:448});let I=sXA(B),C=process.getuid?.();if(I.isSymbolicLink()||!I.isDirectory()||Uj(B)!==B||C!==void 0&&I.uid!==C)throw Error(`private log directory is not owner-controlled: ${B}`);let E=Yl(B);try{let g=Ul(E,B);for(let U of eXA(g)){if(!U.endsWith(".log"))continue;BMA(El(g,U),Q)}}finally{GD(E)}return B}function Fj(A,Q,B,I){if(!/^\d{4}-\d{2}-\d{2}\.log$/.test(Q))throw Error("private log filename is not a canonical daily log name");let C=Yl(A),E=El(Ul(C,Yj(A)),Q),g;try{g=Jj(E,xE.O_WRONLY|xE.O_CREAT|xE.O_APPEND|(xE.O_NOFOLLOW||0),384),Jl(g,E);let U=Buffer.from(I.redactText(B).text,"utf8");if(U.length>0)Fl(g,U,null);OV(g,384)}finally{if(g!==void 0)GD(g);GD(C)}}function Gj(A){return JSON.stringify(A)}function $l(A){let Q=A.configNodeId||"",B=A.envNodeId||"";if(Q){if(B&&B!==Q)A.warn?.(`COMMHUB_NODE_ID mismatch: env=${Gj(B)} config=${Gj(Q)} config_path=${Gj(A.configPath||"config.json")}; ignoring env COMMHUB_NODE_ID, using config node_id`);return{value:Q,source:"config"}}if(B)return{value:B,source:"env"};return{value:"",source:"none"}}function IMA(A){let Q=A?.task_id||A?.message_id||A?.id;if(Q)return String(Q);let B=A?.content?.[0]?.text;if(typeof B!=="string")return null;try{let I=JSON.parse(B);return I?.task_id||I?.message_id||I?.id||null}catch{return null}}function yY(A,Q,B,I={}){let C=i1({from_alias:A.fromAlias,to_alias:A.toAlias,task_id:B,parent_task_id:A.parentTaskId,network_id:A.networkId,transport:"mcp_http",status:Q,duration_ms:Date.now()-A.startedAt,lifecycle_tracking:"tracked",...I.errorCode?{error_code:I.errorCode}:{},...I.errorMessage?{error_message:l1(I.errorMessage)}:{}});if(I.event)C.event=I.event;A.log(p1(C))}async function Dl(A,Q,B){let I=B.now??Date.now,C=B.sleep??((V)=>new Promise((W)=>setTimeout(W,V))),E=B.timeoutMs??120000,g=B.pollIntervalMs??2000,U=B.stale30Ms??30000,J=B.stale60Ms??60000,Y=B.emit,F=I()+E,G=null,$=new Set,D=!1,N=!1;while(I()<F){G=await B.getTask(A);let V=G?.task||G,W=V?.status;if((W==="acked"||W==="running"||W==="processing")&&!$.has(W))$.add(W),Y(W==="acked"?"acked":"started",A);if(W==="replied"||W==="failed"||W==="cancelled")return Y(W==="replied"?"replied":"failed",A,{...W==="replied"?{}:{errorCode:`task_${W}`,event:"task.failed"}}),{kind:"terminal",status:W,latest:G,row:V};let Z=I()-Q;if(!D&&Z>=U&&W==="delivered")D=!0,Y("delivered",A,{event:"task.warning.delivered_stale_30s"});if(!N&&Z>=J&&W==="delivered")N=!0,Y("delivered",A,{event:"task.warning.delivered_stale_60s"});await C(g)}return Y("expired",A,{errorCode:"lifecycle_timeout"}),{kind:"expired",latest:G}}async function Nl(A,Q,B){yY(Q,"sending",null);try{let I=await B({alias:A.alias,task:A.task,priority:A.priority||"normal",from_session:Q.fromAlias,parent_task_id:Q.parentTaskId||void 0}),C=IMA(I);if(!C)yY(Q,"failed",null,{errorCode:"missing_task_id",errorMessage:"CommHub response omitted task_id"});else yY(Q,"delivered",C);return I}catch(I){throw yY(Q,"failed",null,{errorCode:"send_failed",errorMessage:I}),I}}function Vl(A){let Q=A||"task";if(Q==="task"||Q==="broadcast")return{deliverToRuntime:!0,replyExpected:!0};if(Q==="reply")return{deliverToRuntime:!0,replyExpected:!1};return{deliverToRuntime:!1,replyExpected:!1}}async function Wl(A,Q,B){let I=await B.deliverToRuntime(A);if(Q)return{kind:"request",result:I};return await B.acknowledge(A.id),{kind:"terminal_peer_reply",result:I}}function Zl(A,Q){if(A.type!=="new_reply")return!1;return Q(),!0}U9();function $j(){return{hubSupportsTool:null}}function CMA(A){if(!(A instanceof QI))return!1;if(A.code===-32601)return!0;let Q=String(A.message||"");return A.code===-32602&&/(?:unknown|not found|does not exist).{0,80}send_peer_reply|send_peer_reply.{0,80}(?:unknown|not found|does not exist)/i.test(Q)}function EMA(A){if(!(A instanceof QI))return!1;return A.code==="peer_reply_unsupported"||A.code==="peer_reply_origin_not_node"||A.code==="reply_task_not_owned"||A.code==="peer_reply_node_token_required"||CMA(A)}async function Xl(A,Q,B=$j()){try{let I=await Q.sendAtomic(A);return B.hubSupportsTool=!0,{route:"atomic",payload:I}}catch(I){if(!EMA(I))throw I;return{route:"legacy-reply",payload:await Q.sendLegacyReply(A)}}}import{chmodSync as Ml,closeSync as Dj,existsSync as gMA,fchmodSync as UMA,fsyncSync as JMA,openSync as Ll,readFileSync as YMA,renameSync as FMA,unlinkSync as zl,writeFileSync as GMA}from"node:fs";import{randomBytes as $MA}from"node:crypto";var Kl=15000,DMA=2500,_l=300000,$D=2000,NMA=new Set(["replied","failed","cancelled","expired"]);function Vj(A){if(A===void 0||A===null||String(A).trim()==="")return Kl;let Q=Number(A);if(!Number.isSafeInteger(Q))return Kl;return Math.min(_l,Math.max(DMA,Q))}function Nj(){return{version:3,consumed_task_ids:[],consumed_client_request_ids:[],surfaced_outbound_terminal_ids:[],outbound_deliveries:[],outbound_terminal_watermark:0,inbound_lifecycle:[],last_success_at:null}}function f0(A){if(!Array.isArray(A))return[];return[...new Set(A.filter((Q)=>typeof Q==="string"&&Q.length>0&&Q.length<=512))].slice(-$D)}function VMA(A){if(!A||typeof A!=="object")return Nj();let Q=A;return{version:3,consumed_task_ids:f0(Q.consumed_task_ids),consumed_client_request_ids:f0(Q.consumed_client_request_ids),surfaced_outbound_terminal_ids:f0(Q.surfaced_outbound_terminal_ids),outbound_deliveries:Array.isArray(Q.outbound_deliveries)?Q.outbound_deliveries.filter((B)=>!!B&&typeof B.task_id==="string"&&typeof B.idempotency_key==="string"&&["pending","delivering","delivered"].includes(B.state)).slice(-$D):f0(Q.surfaced_outbound_terminal_ids).map((B)=>({task_id:B,idempotency_key:`commhub-terminal:${B}`,state:"delivered"})),outbound_terminal_watermark:Number.isSafeInteger(Q.outbound_terminal_watermark)&&Number(Q.outbound_terminal_watermark)>=0?Number(Q.outbound_terminal_watermark):0,inbound_lifecycle:Array.isArray(Q.inbound_lifecycle)?Q.inbound_lifecycle.filter((B)=>!!B&&typeof B.task_id==="string"&&["delivered","submitted","consumed","completed"].includes(B.state)).slice(-$D):f0(Q.consumed_task_ids).map((B)=>({task_id:B,state:"consumed"})),last_success_at:typeof Q.last_success_at==="string"?Q.last_success_at:null}}function Hl(A){return nc(A)}function jl(A){return typeof A.task_id==="string"&&A.task_id?A.task_id:A.id}function WMA(A){let Q=A,B=String(Q?.message??A??"");return Q?.code===-32601||Q?.code===-32602||/unknown tool|tool .+ not found|method not found|-3260[12]/i.test(B)}var ZMA=new Set(["from_node_id_identity_mismatch","node_token_required"]);function XMA(A){let Q=A;return Q?.appLevel===!0&&typeof Q.code==="string"&&ZMA.has(Q.code)}class Rl{path;state;constructor(A){this.path=A;this.state=this.read()}snapshot(){return this.state=this.read(),this.state}update(A){this.withLock(()=>{let Q=this.read();A(Q),Q.consumed_task_ids=f0(Q.consumed_task_ids),Q.consumed_client_request_ids=f0(Q.consumed_client_request_ids),Q.surfaced_outbound_terminal_ids=f0(Q.surfaced_outbound_terminal_ids),Q.outbound_deliveries=Q.outbound_deliveries.filter((B)=>B.state!=="delivered").slice(-$D),Q.inbound_lifecycle=Q.inbound_lifecycle.slice(-$D),this.write(Q),this.state=Q})}claimOutbound(A,Q,B,I){return this.withLock(()=>{let C=this.read(),E=C.outbound_deliveries.find((g)=>g.task_id===A);if(E?.state==="delivered"||E?.state==="delivering"&&(E.lease_until??0)>B)return!1;if(E)E.state="delivering",E.lease_until=B+I;else C.outbound_deliveries.push({task_id:A,idempotency_key:Q,state:"delivering",lease_until:B+I});return this.write(C),this.state=C,!0},!1)}withLock(A,Q){let B=`${this.path}.lock`,I;try{I=Ll(B,"wx",384)}catch{if(arguments.length>1)return Q;throw Error("compensation cursor is locked")}try{return A()}finally{Dj(I);try{zl(B)}catch{}}}read(){if(!gMA(this.path))return Nj();try{let A=VMA(JSON.parse(YMA(this.path,"utf8")));return Ml(this.path,384),A}catch{return Nj()}}write(A){let Q=`${this.path}.tmp-${process.pid}-${$MA(6).toString("hex")}`,B=null;try{B=Ll(Q,"wx",384),UMA(B,384),GMA(B,`${JSON.stringify(A)}
|
|
320
320
|
`,"utf8"),JMA(B),Dj(B),B=null,FMA(Q,this.path),Ml(this.path,384)}finally{if(B!==null)Dj(B);try{zl(Q)}catch{}}}}function wl(A){let Q=Vj(A.intervalMs),B=A.adapters,I=new Rl(A.cursorPath),C="probing",E=null,g=!1,U=!1,J=null,Y=0,F=!1,G=!1,$=B.now??Date.now,D=Math.max(30000,Q*2),N=B.setTimer??((_,h)=>{let x=setTimeout(_,h);return x.unref?.(),x}),V=B.clearTimer??((_)=>clearTimeout(_)),W=(_)=>{let h=I.snapshot(),x=jl(_),k=Hl(_);return h.consumed_task_ids.includes(x)||!!k&&h.consumed_client_request_ids.includes(k)},Z=(_)=>{let h=jl(_),x=Hl(_);I.update((k)=>{if(k.consumed_task_ids.push(h),x)k.consumed_client_request_ids.push(x);let b=k.inbound_lifecycle.find((y)=>y.task_id===h);if(b)b.state="completed";else k.inbound_lifecycle.push({task_id:h,state:"completed"})})},X={delivered:0,submitted:1,consumed:2,completed:3},L=(_,h)=>{if(!_)return;I.update((x)=>{let k=x.inbound_lifecycle.find((b)=>b.task_id===_);if(!k)x.inbound_lifecycle.push({task_id:_,state:h});else if(X[h]>X[k.state])k.state=h;if(X[h]>=X.consumed)x.consumed_task_ids.push(_)})},M=(_)=>{if(U||C==="realtime-only")return;if(J!==null)V(J);J=N(()=>{J=null,K("timer")},_)},z=async(_)=>{try{let h=I.snapshot().outbound_terminal_watermark,[x,k]=await Promise.all([B.getInbox(),G?Promise.resolve({tasks:[],hasMore:!1}):B.listOutbound(h).catch((y)=>{if(!XMA(y))throw y;return G=!0,B.warn(`[commhub-compensation] outbound reconciliation disabled: this node's token is not bound to its node_id (${y.code}); inbox compensation continues. Re-issue a node-bound token to restore lost-reply reconciliation.`),{tasks:[],hasMore:!1}})]),b=k.tasks;if(C==="probing")C="active",B.log(`[commhub-compensation] active (${Q}ms; SSE remains primary)`);if(x.some((y)=>!W(y)))B.scheduleInboxDrain();for(let y of b){if(!y?.task_id||!NMA.has(y.status))continue;if(!Number.isSafeInteger(y.terminal_seq)||Number(y.terminal_seq)<=0)throw Object.assign(Error("Hub terminal sequence missing"),{code:-32602});let T=Number(y.terminal_seq),n=I.snapshot();if(T<=n.outbound_terminal_watermark)continue;let u=I.snapshot().outbound_deliveries.find((v)=>v.task_id===y.task_id);if(u?.state==="delivered"){I.update((v)=>{v.outbound_terminal_watermark=Math.max(v.outbound_terminal_watermark,T)});continue}let O=u?.idempotency_key??`commhub-terminal:${y.task_id}`;if(!I.claimOutbound(y.task_id,O,$(),D))break;try{await B.onOutboundTerminal(y,O)}catch(v){throw I.update((t)=>{let r=t.outbound_deliveries.find((EA)=>EA.task_id===y.task_id);if(r)r.state="pending",r.lease_until=0}),v}I.update((v)=>{let t=v.outbound_deliveries.find((r)=>r.task_id===y.task_id);if(t)t.state="delivered",t.lease_until=0;v.outbound_terminal_watermark=Math.max(v.outbound_terminal_watermark,T)})}if(I.update((y)=>{y.last_success_at=new Date($()).toISOString()}),k.hasMore)g=!0;Y=0,B.log(`[commhub-compensation] ${_} poll ok; inbox=${x.length} outbound=${b.length}`),M(Q)}catch(h){if(WMA(h)){if(C="realtime-only",!F)F=!0,B.warn("[commhub-compensation] Hub lacks durable inbox/outbox polling capability; realtime-only mode (SSE/turn-steer only)");return}Y++;let x=Math.min(_l,Q*2**Math.min(Y,5));B.warn(`[commhub-compensation] poll failed; retry in ${x}ms: ${h instanceof Error?h.message:String(h)}`),M(x)}},K=(_)=>{if(U||C==="realtime-only")return;if(E){g=!0;return}E=(async()=>{let h=_;do g=!1,await z(h),h="idle";while(g&&!U&&C!=="realtime-only")})().finally(()=>{E=null})};return{get mode(){return C},get outboundDisabled(){return G},trigger:K,recordConsumed:Z,recordLifecycle:L,wasConsumed:W,async idle(){await E},stop(){if(U=!0,J!==null)V(J);J=null}}}import{appendFileSync as vgA,mkdirSync as oZ,statSync as bgA}from"fs";import{appendFileSync as MMA,mkdirSync as LMA,writeSync as zMA}from"node:fs";import{join as KMA}from"node:path";function ql(A){if(A instanceof Error)return`${A.name}: ${A.message}`.replace(/[\r\n]+/g," ");return String(A).replace(/[\r\n]+/g," ")}function HMA(A){if(A instanceof Error)return A.stack||`${A.name}: ${A.message}`;return String(A)}function Ol(A){let Q=A.stdout??process.stdout,B=A.stderr??process.stderr,I=A.now??(()=>new Date),C=A.redact??((W)=>W),E=A.exit??((W)=>process.exit(W)),g=A.alias??"agent-node",U=!1,J=!1,Y=!1,F="normal",G=!1,$=(W,Z,X)=>{return`[${I().toISOString().slice(11,19)}] [${W.padEnd(5)}] [${g}] [${Z}] ${X}`},D=(W)=>{try{let Z=I().toISOString().slice(0,10),X=C(W);if(A.appendLine)A.appendLine(Z,X);else LMA(A.logDir,{recursive:!0,mode:448}),MMA(KMA(A.logDir,`${Z}.log`),X+`
|
|
321
321
|
`,{mode:384})}catch{}},N=(W)=>(Z)=>{if(Z?.code==="EPIPE"){if(W==="stdout")U=!0;else J=!0;if(!Y)Y=!0,D($("WARN","stream",`${W} EPIPE; terminal output disabled, file logging continues`));return}if(F=`${W} error: ${ql(Z)}`,!G)G=!0,E(1)};Q.on("error",N("stdout")),B.on("error",N("stderr"));let V=(W,Z)=>{if(G)return;G=!0,F=`${W}: ${ql(Z)}`;let X=HMA(Z);if(D($("ERROR","fatal",`${W}: ${X}`)),!J)try{zMA(2,`${X}
|
|
322
|
-
`)}catch(L){if(L?.code==="EPIPE")J=!0}E(1)};return process.on("uncaughtException",(W)=>V("uncaughtException",W)),process.on("unhandledRejection",(W)=>V("unhandledRejection",W)),process.on("exit",(W)=>D($(W===0?"INFO":"ERROR","exit",`code=${W} reason=${F}`))),{outputBroken:()=>U||J}}var Tl={name:"@sleep2agi/agent-node",version:"2.5.0-preview.
|
|
322
|
+
`)}catch(L){if(L?.code==="EPIPE")J=!0}E(1)};return process.on("uncaughtException",(W)=>V("uncaughtException",W)),process.on("unhandledRejection",(W)=>V("unhandledRejection",W)),process.on("exit",(W)=>D($(W===0?"INFO":"ERROR","exit",`code=${W} reason=${F}`))),{outputBroken:()=>U||J}}var Tl={name:"@sleep2agi/agent-node",version:"2.5.0-preview.155",description:"AI Agent runtime for CommHub networks. Supports Claude Code CLI, Claude Agent SDK, Codex SDK, Codex app-server, Grok Build ACP, and OpenCode CLI.",bin:{"agent-node":"dist/cli.js"},type:"module",files:["dist","README.md"],scripts:{build:"bun build src/cli.ts --outdir dist --entry-naming cli.js --target node --minify --external @anthropic-ai/claude-agent-sdk --external '@anthropic-ai/claude-agent-sdk-*' --external @openai/codex-sdk --external node-pty && bun build src/upload-file-mcp-stdio.ts --outdir dist --entry-naming upload-file-mcp-stdio.js --target node --minify",prepublishOnly:"npm run build"},keywords:["agent","ai","commhub","claude","claude-code","codex","gpt5","grok","xai","grok-build-cli","copresence","acp","sdk","minimax","mimo","runtime","node","anthropic"],author:"sleep2agi",license:"Apache-2.0",homepage:"https://anet.sh",repository:{type:"git",url:"git+https://github.com/sleep2agi/agent-network.git",directory:"agent-node"},publishConfig:{access:"public",tag:"preview"},bugs:{url:"https://github.com/sleep2agi/agent-network/issues"},engines:{node:">=18.17.0"},dependencies:{"@anthropic-ai/claude-agent-sdk":"0.3.289",undici:"^6.27.0",ws:"^8.22.0",zod:"^4.4.3"},optionalDependencies:{"@openai/codex":"^0.133.0","@openai/codex-sdk":"^0.133.0","node-pty":"^1.1.0"},devDependencies:{"@types/ws":"^8.18.2"}};n$();H$();import{chmodSync as _MA,existsSync as RMA,mkdirSync as wMA,readFileSync as qMA,writeFileSync as OMA}from"node:fs";import{join as TMA}from"node:path";var Pl="model_reasoning_effort";function Wj(A){return z$(A)}function PMA(A,Q){let B=A.includes(`\r
|
|
323
323
|
`)?`\r
|
|
324
324
|
`:`
|
|
325
325
|
`,I=A.endsWith(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sleep2agi/agent-node",
|
|
3
|
-
"version": "2.5.0-preview.
|
|
3
|
+
"version": "2.5.0-preview.155",
|
|
4
4
|
"description": "AI Agent runtime for CommHub networks. Supports Claude Code CLI, Claude Agent SDK, Codex SDK, Codex app-server, Grok Build ACP, and OpenCode CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agent-node": "dist/cli.js"
|