@kynver-app/runtime 0.2.118 → 0.2.127

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.
@@ -1,16 +1,80 @@
1
- var m=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as Vt}from"node:os";import zt from"node:path";function Js(e){return e==="~"?Vt():e.startsWith("~/")||e.startsWith("~\\")?zt.join(Vt(),e.slice(2)):e}function G(e){return zt.resolve(Js(e))}var ee=m(()=>{"use strict"});var Jt=m(()=>{"use strict"});import{existsSync as Xs,mkdirSync as qs,readFileSync as Xt,readdirSync as Ml,renameSync as Zs,rmSync as Qs,statSync as qt,writeFileSync as ei}from"node:fs";import{randomBytes as ri}from"node:crypto";import ti from"node:path";function Xe(e){console.error(e),process.exit(1)}function zr(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function qe(e){try{return JSON.parse(e)}catch{return null}}function v(e,r){try{return JSON.parse(Xt(e,"utf8"))}catch(t){if(arguments.length>1)return r;Xe(`failed to read ${e}: ${t.message}`)}}function Jr(e,r){qs(ti.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${ri(4).toString("hex")}.tmp`;try{ei(t,`${JSON.stringify(r,null,2)}
2
- `),Zs(t,e)}catch(n){try{Qs(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Ze(e){try{return qt(e).size}catch{return 0}}function Qe(e){try{return qt(e).mtime.toISOString()}catch{return null}}function Zt(e,r){return Xs(e)?Xt(e,"utf8").split(`
1
+ var m=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{homedir as on}from"node:os";import sn from"node:path";function gi(e){return e==="~"?on():e.startsWith("~/")||e.startsWith("~\\")?sn.join(on(),e.slice(2)):e}function z(e){return sn.resolve(gi(e))}var oe=m(()=>{"use strict"});var an=m(()=>{"use strict"});import{existsSync as hi,mkdirSync as ki,readFileSync as un,readdirSync as Sc,renameSync as yi,rmSync as Ri,statSync as ln,writeFileSync as bi}from"node:fs";import{randomBytes as Si}from"node:crypto";import xi from"node:path";function Qe(e){console.error(e),process.exit(1)}function et(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function er(e){try{return JSON.parse(e)}catch{return null}}function _(e,r){try{return JSON.parse(un(e,"utf8"))}catch(t){if(arguments.length>1)return r;Qe(`failed to read ${e}: ${t.message}`)}}function rt(e,r){ki(xi.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${Si(4).toString("hex")}.tmp`;try{bi(t,`${JSON.stringify(r,null,2)}
2
+ `),yi(t,e)}catch(n){try{Ri(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function rr(e){try{return ln(e).size}catch{return 0}}function tr(e){try{return ln(e).mtime.toISOString()}catch{return null}}function nr(e,r){return hi(e)?un(e,"utf8").split(`
3
3
  `).slice(-r).join(`
4
- `):""}function re(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Qt(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function Xr(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var b=m(()=>{"use strict";Jt()});var ni,Hl,oi,Ll,en=m(()=>{"use strict";ni=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],Hl=new Set(ni),oi=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Ll=new Set(oi)});import{spawnSync as tn}from"node:child_process";function Se(e,r,t={}){let n=tn("git",r,zr({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=si(e,r,n);if(t.throwError)throw new Error(o);Xe(o)}return n.stdout||""}function si(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function De(e){return Se(e,["status","--short"],{allowFailure:!0}).split(`
5
- `).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=tn("git",r,zr({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function rn(e,r,t){let n=w(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function er(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return qr(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return qr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=w(e,["rev-parse",n]);if(p.status!==0)return qr(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=rn(e,i,a),l=rn(e,a,i),c=u.error||l.error||void 0;if(u.isAncestor==null||l.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:l.isAncestor,relation:"unknown",...c?{error:c}:{}};let d=u.isAncestor?"ahead":l.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:l.isAncestor,relation:d,...c?{error:c}:{}}}function qr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var U=m(()=>{"use strict";ee();b();en()});var Zr=m(()=>{"use strict";U()});var rr=m(()=>{"use strict";U();ee();Zr()});var Qr=m(()=>{"use strict";b()});function ie(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function tr(e,r){return e[r]?.trim()||null}function nn(e){let r=e?.split(":")[0]?.trim();return r?ie(r):null}function xe(e=process.env,r={}){let t=[],n=nn(r.boxId),o=nn(tr(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ie(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ie(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=tr(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ie(i)&&t.push(`KYNVER_BOX_ID=${tr(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ie(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=tr(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}var ae=m(()=>{"use strict"});function et(e,r){return e==="forge"?4:Math.max(1,r)}function nr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var or=m(()=>{"use strict"});var on=m(()=>{"use strict"});import{existsSync as ii,readFileSync as ai,statfsSync as ui}from"node:fs";function rt(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!ii(e))continue;let r=ai(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function sn(e={}){if(!(e.forceWsl===void 0?rt():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ve,n=e.wslHostFreeWarnBytes??li,o=e.wslHostFreeCriticalBytes??ci,s=e.statfs??ui,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<n,d=a<o,p=!c&&!d,g=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${g} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${di()}`),{ok:p,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function di(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var li,ci,ve,tt=m(()=>{"use strict";li=25*1024*1024*1024,ci=12*1024*1024*1024,ve="/mnt/c"});import{execFileSync as an}from"node:child_process";import{existsSync as ir,readFileSync as un,readdirSync as pi,statSync as fi}from"node:fs";import nt from"node:path";function sr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function ln(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=an("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ve;return r&&ir(nt.join(t,"Users",r))?r:null}function yi(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ve,n=e.windowsUser??ln();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Ri(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function bi(){try{if(ir("/proc/sys/kernel/core_pattern"))return un("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return an("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Si(e){return!!(e&&/wsl-capture-crash/i.test(e))}function xi(e,r=ve){let t=nt.join(r,"Users",e,".wslconfig");if(!ir(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=un(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let u=a.indexOf("=");if(u<0)continue;let l=a.slice(0,u).trim().toLowerCase(),c=a.slice(u+1).trim();if(l==="maxcrashdumpcount"){let d=Number(c);o=Number.isFinite(d)?d:null}else l==="crashdumpfolder"&&(s=c.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function vi(e){if(!ir(e))return[];let r=pi(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=nt.join(e,n.name);try{let s=fi(o),i=Ri(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function _e(e={}){if(!(e.forceWsl===void 0?rt():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ve,n=e.windowsUser??ln(),o=e.warnBelowBytes??sr("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",mi),s=e.criticalBelowBytes??sr("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",gi),i=e.warnCount??sr("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",hi),a=e.criticalCount??sr("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",ki),u=(e.readCorePattern??bi)(),l=Si(u),c=null;n&&(c=(e.readWslConfig??xi)(n,t));let d=c?.maxCrashDumpCount??null,p=d===-1,g=yi({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!g)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??vi)(g)}catch(P){return{ok:!1,path:g,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${g}: ${P.message}`,probeError:P.message}}let y=f.reduce((P,h)=>P+h.bytes,0),S=f.length,R=[...new Set(f.map(P=>P.executableHint).filter(P=>!!P))],A=y>=s,L=y>=o,B=S>=a,Ve=S>=i,oe=!(A||B||L||Ve),se=null;if(!oe){let P=A||B?"critical":"warning",h=(y/1024**3).toFixed(1),Z=R.length>0?R.join(", "):"unknown";se=`WSL crash dumps ${P}: ${S} file(s), ${h} GiB at ${g} (executables: ${Z}). `+_i({wslCaptureEnabled:l,dumpsDisabledInWslConfig:p})}return{ok:oe,path:g,windowsUser:n,dumpCount:S,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:R,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:se,probeError:null}}function _i(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var mi,gi,hi,ki,ar=m(()=>{"use strict";tt();mi=5*1024*1024*1024,gi=10*1024*1024*1024,hi=2,ki=4});import{statfsSync as Ci}from"node:fs";function ur(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Ei,n=e.diskFreeCriticalBytes??wi,o=e.diskMaxUsedPercent??Ai,s=e.diskHardMaxUsedPercent??Pi,i=Ci(r),a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<t,d=a<n,p=a<t*2,g=p&&l>o,f=p&&l>s,y=!c&&!d&&!g&&!f,S=e.skipWslHostCheck?null:sn(e.wslHost),R=e.skipWslCrashDumpCheck?null:_e(e.wslCrashDumps),A=y&&(S?S.ok:!0)&&(R?R.ok:!0),L=null;return A||(L=[d?`free space below critical ${n} bytes`:null,c?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,g?`used percent above cap ${o}%`:null,S&&!S.ok?S.reason:null,R&&!R.ok?R.reason:null].filter(Boolean).join("; ")),Ii({ok:A,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:L,wslHost:S,wslCrashDumps:R?{ok:R.ok,path:R.path,dumpCount:R.dumpCount,totalBytes:R.totalBytes,executables:R.executables,wslCaptureEnabled:R.wslCaptureEnabled,dumpsDisabledInWslConfig:R.dumpsDisabledInWslConfig,reason:R.reason,probeError:R.probeError}:null})}function Ii(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var Ei,wi,Ai,Pi,lr=m(()=>{"use strict";ar();tt();Ei=30*1024*1024*1024,wi=15*1024*1024*1024,Ai=80,Pi=90});import{existsSync as Oi,readdirSync as Ni,statSync as Di}from"node:fs";import ot from"node:path";function cr(){return dn()}function st(){let{runsDir:e}=cr();return cn(e)}function dr(e){return cn(Y(e))}function Wi(e){try{return Di(e).isDirectory()}catch{return!1}}function cn(e){if(!Oi(e))return[];let r=[];for(let t of Ni(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=ot.join(e,t.name);if(!Wi(n))continue;let o=v(ot.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function it(e){let{runsDir:r}=cr();Jr(ot.join(at(r,e.id),"run.json"),e)}function We(e){let{harnessRoot:r}=cr();return Te(r,e)}function Te(e,r){return at(Y(e),x(r))}var ue=m(()=>{"use strict";V();b()});import{existsSync as Ti,readdirSync as Mi}from"node:fs";import Ki from"node:path";function ut(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=Ki.join(We(e.id),"workers");if(!Ti(t))return[...r];for(let n of Mi(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var lt=m(()=>{"use strict";ue();b()});function ct(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function pn(e){let r=e.trim();if(!r)return null;let t=ct(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ct(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ct(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function fn(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?pn(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=pn(t);return n||t}var mn=m(()=>{"use strict"});import{existsSync as Ui,readFileSync as Bi}from"node:fs";function gn(e){return e==="complete"}function hn(e){return gn(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Ce(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Ui(e))return r;let t=Date.now()+Fi,n=new Date(t).toISOString(),o=Bi(e,"utf8").split(`
6
- `).filter(Boolean);for(let s of o){let i=qe(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),l=Date.parse(u);Number.isFinite(l)&&l>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:n}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),gn(r.lastHeartbeatPhase)&&(r.terminalFinalResult=fn(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var Fi,pr=m(()=>{"use strict";mn();b();Fi=6e4});function yn(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function fr(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function Rn(e){let r=yn(e[0]);return!!(r&&Hi.has(r))}function $i(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function ji(e){if(!e||e.includes("*"))return null;let r=$i(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function bn(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function dt(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Gi(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Yi(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;kn.has(n)&&(t+=1);continue}r.push(n)}}return r}function Vi(e){let r=!1,t=e.map((o,s)=>{let i=Gi(o),a=e[s-1];return a&&kn.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Yi(t);if(n.length===2){let[o,s]=n;if(dt(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=ji(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function Sn(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function mr(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=fr(r);if(!t.length)return{command:r,wrapped:!1};let n=yn(t[0]);if(!n||!Li.has(n))return{command:r,wrapped:!1};let o=Sn(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function zi(e,r){let t=e.trim(),n=fr(t),o=Sn(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function Ji(e){let r=e.trim(),t=mr(r),n=fr(t.command);if(!n.length||!Rn(n))return{segment:r,changed:!1};let o=Vi(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:zi(r,s),changed:!0}:{segment:s,changed:!0}}function pt(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=Ji(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function xn(e){let r=mr(e).command,t=fr(r.trim());return t.length&&Rn(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function vn(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function Xi(e){let{pattern:r,target:t}=vn(e);return r?dt(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:bn(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function qi(e){let{pattern:r,target:t}=vn(e);if(!r)return null;if(dt(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&bn(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Zi(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function Qi(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function ft(e){let r=e.meta?.trim()||(e.command?Qi(e.command):null)||null;if(r){let t=Xi(r),n=Zi(t);if(n)return n;let o=qi(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=pt(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var Hi,Li,kn,_n=m(()=>{"use strict";Hi=new Set(["rg","ripgrep","grep"]),Li=new Set(["bash","sh","dash","zsh"]),kn=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Me(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function ta(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function Ke(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function na(e){let r=e.metadata;if(!Ke(r))return null;let t=r.vulnerabilities;if(!Ke(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function oa(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function sa(e,r){let t=e.error;if(Ke(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?Me(o.split(`
7
- `).find(Boolean)??o,160):"npm audit failed"}function ia(e){let r=`${e.stdout}
8
- ${e.stderr}`.trim(),t=ta(r);if(!t||!Ke(t)){let o=Me(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Ke(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${sa(t,e.stderr)}`};let n=na(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:oa(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function aa(e){return ea.test(e)}function ua(e){let r=mr(e).command;return Cn.test(e)||Cn.test(r)||xn(e)}function la(e){let r=ft({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&ra.test(n)){let i=Me(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=pt(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Me(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function En(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(aa(e.command)){let i=r.trim()||n.trim()||t.trim();return ia({exitCode:e.exitCode,stdout:i,stderr:t})}if(ua(e.command))return la({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ft({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=Me(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var ea,Cn,ra,wn=m(()=>{"use strict";_n();ea=/\bnpm\s+audit\b/i,Cn=/\b(rg|ripgrep)\b/i,ra=/\b(error|invalid|unknown|panic|not found)\b/i});function Ue(e){return typeof e=="string"&&ca.test(e.trim())}function gr(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var ca,hr=m(()=>{"use strict";ca=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function mt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function da(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function An(e){if(e.event==="step_update"&&mt(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!mt(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=mt(r.usage)?da(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var Pn=m(()=>{"use strict"});function gt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function In(){return{assistantText:""}}function pa(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function fa(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(gt(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function ma(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function On(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return pa(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!ma(e))return null;let t=gt(e.stats)?fa(e.stats):void 0;if(e.status==="error"){let o=gt(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var Nn=m(()=>{"use strict"});import{existsSync as ga,readFileSync as ha}from"node:fs";function ka(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function ya(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Ra(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",gr(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ee(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function ba(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Sa(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function xa(e,r){let t=ba(r);if(!t)return;let n=Ee(t.input_tokens)??Ee(t.inputTokens)??Ee(t.prompt_tokens),o=Ee(t.output_tokens)??Ee(t.outputTokens)??Ee(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Sa(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function va(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let u=a,l=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:l,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function _a(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Dn(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!ga(e))return r;let t=ha(e,"utf8").split(`
9
- `).filter(Boolean),n=null,o=In();for(let s of t){let i=qe(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let g=p;g.type==="agent_message"&&typeof g.text=="string"&&g.text.trim()&&(n=g.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=ka(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let g=p.find(f=>f?.type==="tool_use");g&&(r.currentTool=String(g.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,g=ya(p);g&&(r.currentTool=g)}let u=va(i);u&&_a(r,En({command:u.command,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,interleavedOutput:u.interleaved}));let l=An(i),c=l?null:On(i,o),d=l??c;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&Ra(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}xa(r,i)}return r}var Wn=m(()=>{"use strict";wn();b();hr();Pn();Nn()});function Tn(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function ht(e){let r=(e??"").trim();if(!r)return null;if(Ue(r))return{blocked:!0,reason:`provider authentication failed: ${Tn(r)}`};for(let t of Ca)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Tn(r)}`};return null}var Ca,Mn=m(()=>{"use strict";hr();Ca=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Kn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ea(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function wa(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Kn(e.head)}function Aa(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Un(e){if(e.alive||Ea(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Kn(e.headCommit)??wa(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:Aa(s,r,t)}}var Bn=m(()=>{"use strict"});function Be(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Pa(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Ia(e){if(Be(e.headCommit)||Be(e.prUrl)||Be(e.artifactBundlePath)||Be(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Be(r.head))}function we(e){return Pa(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Ia(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function Fn(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var kr=m(()=>{"use strict"});function kt(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function Hn(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function yr(e){let r=e.trim();if(!r)return null;let t=kt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=kt(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=kt(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=Hn(u);for(let c of n){let d=Hn(c);d>l&&(u=c,l=d)}return u}var yt=m(()=>{"use strict"});function Ln(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function $n(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Oa(e){return new Set(e.map(r=>$n(Ln(r)??r)).filter(Boolean))}function jn(e,r,t){let n=Ln(e)??e;if(!n)return"unrelated";let o=$n(n);return Oa(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Gn=m(()=>{"use strict"});function Ae(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Na(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function le(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ae(e)}function Rr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Yn(e){let r=null;if(typeof e=="string"){let o=yr(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=le(String(s.prUrl??s.pr_url??"")),a=Ae(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ae(s.mergeCommit??s.merge_commit),reason:Ae(s.reason)})}return n}function Vn(e,r){let t=[],n=le(Ae(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=le(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function zn(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Na(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?le(Ae(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?le(r.targetPrUrls[0]):null):null;if(s){let d=Vn(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=Yn(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Yn(n),a=new Map(i.map(d=>[Rr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>Rr(le(d)??d)).filter(Boolean)),l=Vn(t,n);if(r.landingOnly)for(let d of l){let p=a.get(Rr(d)),g=jn(d,r.targetPrUrls,p);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let p=Rr(le(d)??d),g=a.get(p);if(!g){c.push(p);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(p)}return c.length>0?{blocked:!0,reason:c.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${c.join(", ")}`}:{blocked:!1}}function Jn(e){if(e.blocked)return e.detail??e.reason}var Xn=m(()=>{"use strict";yt();Gn()});function Ta(e){let r=Date.now();if(e.providerTerminalError||gr(e.finalResult)||e.finalResult&&e.error?.trim()||Ue(e.error)||Ue(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:ht(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!qn(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Ka(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=we(o);if(s.blocked){let i=Fn(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=zn({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Jn(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Ma(e))return{state:"done",reason:"empty abandoned worker record"};let o=ht(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Un({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Da)return{state:"needs_attention",reason:`no first stream event ${Xr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Wa?{state:"stale",reason:`no log/event/heartbeat activity for ${Xr(n)}s`}:{state:"ok",reason:"recent activity"}}function qn(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Ma(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Ka(e){let r=null;if(typeof e=="string"?r=yr(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Ua(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??hn(t))}function Fe(e,r={}){let t=Dn(e.stdoutPath),n=Ce(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Ua(e,t.finalResult,n),i=o?!1:re(e.pid),a=Ze(e.stdoutPath),u=Ze(e.stderrPath),l=Ze(e.heartbeatPath),c=De(e.worktreePath),d=er(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),p=Qt([t.lastEventAt,n.lastHeartbeatAt,Qe(e.stdoutPath),Qe(e.stderrPath),Qe(e.heartbeatPath)]),g=t.error||!i&&!s&&Zt(e.stderrPath,10).trim()||void 0,f=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=qn(f)?null:f,S=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,R=Ta({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,completionBlocker:y,landingContract:S,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),A=y||R.state==="blocked"?"blocked":o||R.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:A,attention:R,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:g,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function ce(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Zn(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Da,Wa,de=m(()=>{"use strict";pr();Wn();hr();Mn();Bn();U();kr();Xn();yt();b();Da=18e4,Wa=6e5});var Qn=m(()=>{"use strict";de()});function eo(e,r={}){let t=r.perWorkerMemBytes??Rt,n=r.memReserveBytes??bt,o=r.memUtilization??St,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,br)}var Rt,bt,St,br,ro=m(()=>{"use strict";on();fe();ae();or();Sr();lr();ue();lt();Qn();b();Rt=500*1024*1024,bt=4*1024*1024*1024,St=.85,br=64});function He(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function xt(e){let r=e.config??{},t=e.env??process.env,n=He(r.perWorkerMemBytes,Rt),o=He(r.memReserveBytes,bt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):St)),i=eo(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:He(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=He(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,br),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&He(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,br),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Sr=m(()=>{"use strict";ro()});import{homedir as Ba}from"node:os";import Fa from"node:path";var to,vt=m(()=>{"use strict";to=Fa.join(Ba(),".kynver",".env")});var no=m(()=>{"use strict"});var oo=m(()=>{"use strict";no()});var so=m(()=>{"use strict"});var io=m(()=>{"use strict";b()});var _t=m(()=>{"use strict";oo();so();io()});var ao=m(()=>{"use strict"});var uo=m(()=>{"use strict";ao()});var xr=m(()=>{"use strict";vt();ee();fe();_t();uo()});var po=m(()=>{"use strict";ae();ae()});var fo=m(()=>{"use strict";vt();_t();xr()});var Ct=m(()=>{"use strict"});import{existsSync as z,mkdirSync as La,readdirSync as vr,renameSync as mo,statSync as $a}from"node:fs";import J from"node:path";function ho(e){try{return $a(e).isDirectory()}catch{return!1}}function ja(e){if(!z(e))return!0;for(let r of go){let t=J.join(e,r);if(z(t)&&(!ho(t)||vr(t).length>0))return!1}return!0}function Ga(e){let r=J.join(e,"runs");if(!z(r)||!ho(r))return!1;for(let t of vr(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=J.join(r,t.name,"run.json");if(v(n,void 0)?.id)return!0}return!1}function Ya(e){let r=J.join(e,"runs");if(!z(r))return!1;for(let t of vr(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(v(J.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Va(e){let r=J.join(e,"ghost");return z(r)?!z(J.join(r,"runs")):Ya(e)}function ko(e){return Ga(e.sharedRoot)?ja(e.forgeRoot)?Va(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function yo(e,r){La(r,{recursive:!0});for(let t of go){let n=J.join(e,t),o=J.join(r,t);if(z(n)){if(z(o)&&vr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(z(o)){mo(n,o);continue}mo(n,o)}}}var go,Ro=m(()=>{"use strict";b();go=["runs","worktrees"]});import{existsSync as E}from"node:fs";import{homedir as za}from"node:os";import C from"node:path";function Et(e=process.env){return e.HOME?.trim()||za()}function wt(e=process.env){return C.join(Et(e),".kynver","harness")}function _r(e){let r=C.resolve(G(e.trim()));for(;Ja.has(C.basename(r));)r=C.dirname(r);return r}function Xa(e,r=process.env){return C.join(wt(r),e)}function qa(e=process.env){let r=wt(e);if(E(C.join(r,"runs")))return!0;if(E(r)&&!E(C.join(r,"ghost"))&&!E(C.join(r,"forge")))return E(r);let t=C.join(Et(e),bo);return E(t)}function Cr(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:_r(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:_r(n),source:"config"};let o=Xa(e.boxKind,r);if(E(C.join(o,"runs"))||E(o)&&!Za(o))return{harnessRoot:o,source:"box_scoped"};let i=wt(r);if(e.boxKind==="forge"){let a=ko({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&yo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&qa(r)){if(E(C.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(E(i)&&!E(C.join(i,"ghost"))&&!E(C.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let u=C.join(Et(r),bo);if(E(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Za(e){if(!E(e))return!0;for(let r of["runs","worktrees"]){let t=C.join(e,r);if(E(t))return!1}return!0}var bo,Ja,At=m(()=>{"use strict";ee();Ro();bo=C.join(".openclaw","harness");Ja=new Set(["runs","worktrees"])});import So from"node:os";function Er(e){return e?.trim()?e.trim():null}function Qa(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function eu(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function wr(e=pe(),r=process.env,t={}){let n=xe(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Er(r.KYNVER_BOX_KIND)),a=t.strict===!0||eu(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let u=Er(e.runnerId),l=Er(r.KYNVER_RUNTIME_ID)??Er(r.OPENCLAW_RUNTIME_ID),c=u??l??Qa(n.boxKind,So.hostname()),d=u?"config":l?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${c}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=xt({config:e,env:r,totalMemBytes:So.totalmem()}),g=nr(n.boxKind,p.configuredMaxWorkers??et(n.boxKind,p.autoCap)),f=Cr({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:c,runnerIdSource:d,maxConcurrentWorkers:g,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Ar=m(()=>{"use strict";fe();ae();or();Sr();At()});var vo=m(()=>{"use strict";rr();ae();po();fe();xr();fo();Qr();Ct();Ar()});var ou,tf,_o=m(()=>{"use strict";ou=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],tf=ou.join("|")});var Co=m(()=>{"use strict";ee()});var Eo=m(()=>{"use strict";Co()});var wo=m(()=>{"use strict"});var Ao=m(()=>{"use strict";wo()});import{existsSync as iu,mkdirSync as If,readFileSync as au,writeFileSync as Of}from"node:fs";import{homedir as uu,totalmem as Df}from"node:os";import Pt from"node:path";function lu(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:G(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:G(e.defaultRepo.trim())}:{}}}function pe(){if(!iu(Po))return{};try{return lu(JSON.parse(au(Po,"utf8")))}catch{return{}}}var Io,Po,Jf,Xf,qf,fe=m(()=>{"use strict";rr();ee();Qr();ae();or();Sr();lr();xr();vo();_o();Ar();Eo();Ct();Ao();Io=Pt.join(uu(),".kynver"),Po=Pt.join(Io,"config.json"),Jf=Pt.join(Io,"credentials");Xf=500*1024*1024,qf=4*1024*1024*1024});import It from"node:path";function O(e){return _r(e)}function te(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return O(e);let r=pe(),t=r.harnessRoot?.trim();if(t)return O(t);let n=wr(r,process.env);return n.identity?n.identity.harnessRoot:Cr({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function Y(e){return It.join(O(e),"runs")}function Pe(e){return It.join(O(e),"worktrees")}function dn(){let e=te();return{harnessRoot:e,runsDir:Y(e),worktreesDir:Pe(e)}}function at(e,r){return It.join(e,x(r))}var V=m(()=>{"use strict";fe();At();Ar();b()});V();import T from"node:path";kr();import Or from"node:path";U();de();var Ot=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Oo(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Ot)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function N(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!Oo(n)})}function me(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Le(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?N(e.changedFiles).length>0:!!(me(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function $e(e){return e.status||(e.status=Fe(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Nt(e,r){if(e.status)return N(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):De(e.worktreePath);return N(t).length>0}function cu(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Dt(e,r){if(e.status)return e.status;let t=e.worker,n=typeof t.completionReportedAt=="string"&&t.completionReportedAt.trim().length>0,o=!!(t.status&&["done","exited","blocked","failed","abandoned"].includes(t.status))||n,s=cu(e);if(o&&!re(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):De(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",l=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:er(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),c={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:l,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??me(s)};return e.status=c,c}return $e(e)}de();ue();lt();de();b();import du from"node:path";var pu=new Set(["running","dispatching","pending","queued","needs_attention"]),ge=new Set(["completed","failed","cancelled","done"]);function he(e){let r=ut(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=v(du.join(We(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let u=Fe(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Zn(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function No(){let e=[];for(let r of st()){if(!pu.has(r.status))continue;let t=he(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,it(r),e.push({runId:r.id,from:n,to:t})}return e}de();pr();import{existsSync as Pr,mkdirSync as Mm,readdirSync as To,renameSync as Km,statSync as fu}from"node:fs";import ke from"node:path";fe();rr();ee();Zr();U();pr();V();ue();V();b();import ne from"node:path";var Om=`${ne.sep}runs${ne.sep}runs${ne.sep}`;function Do(e){return{workerJsonPath:ne.join(e,"worker.json"),stdoutPath:ne.join(e,"stdout.jsonl"),stderrPath:ne.join(e,"stderr.log"),heartbeatPath:ne.join(e,"heartbeat.jsonl"),lastStatusPath:ne.join(e,"last-status.json")}}b();var je=900*1e3,Ym=3600*1e3;function Mo(e,r){let t=ke.resolve(e),n=ke.resolve(Y(r)),o=ke.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ke.isAbsolute(o)}function mu(e){if(!Pr(e))return[];try{return To(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function gu(e){let r=ke.join(e,"workers");if(!Pr(r))return[];try{return To(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Wo(e,r,t){if(!Pr(e))return!1;try{let n=r-fu(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function hu(e,r=Date.now(),t=je){if(!Pr(e))return!1;let n=Do(e),o=v(n.workerJsonPath,void 0);if(o?.status==="running"&&re(o.pid))return!0;let s=Ce(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Wo(n.stdoutPath,r,t)||Wo(n.heartbeatPath,r,t))}function ku(e,r=Date.now(),t=je){for(let n of gu(e))if(hu(ke.join(e,"workers",n),r,t))return!0;return!1}function Ko(e,r=Date.now()){let t=new Set,n=Y(e);for(let o of mu(n)){let s=ke.join(n,o);ku(s,r)&&t.add(`${e}\0${o}`)}return t}b();function yu(e,r=Date.now(),t=je){let n=Ce(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Ie(e,r=Date.now(),t=je){return re(e.pid)?!0:yu(e,r,t)}function Ru(e,r){return r?r.runTerminalCache.derive(e.run):he(e.run)}function X(e,r=Date.now()){return Ie(e.worker,r)}function Wt(e,r){return ge.has(e.run.status)?!1:Ru(e,r)!==null}function Uo(e,r,t=Date.now()){if(X(e,t))return!0;if(ge.has(e.run.status)||Wt(e,r))return!1;let n=$e(e);return ce(n)?!1:!!X(e,t)}kr();de();function Bo(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(X(e))return!0;let n=r??$e(e);return!!(!ce(n)||Le(n)||N(n.changedFiles).length>0||we({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:me(n.finalResult)}).blocked)}U();b();import{existsSync as Ho,mkdirSync as bu,writeFileSync as Fo}from"node:fs";import Ir from"node:path";function Lo(e,r,t){return Ir.join(e,"salvage",x(r),x(t))}function $o(e){return Ho(Ir.join(Lo(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function jo(e){let r=Lo(e.harnessRoot,e.indexed.runId,e.indexed.workerName);bu(r,{recursive:!0});let t=Ir.join(r,"salvage.patch"),n=!1;if(Ho(e.indexed.worktreePath)){let s=w(e.indexed.worktreePath,["diff","HEAD"]),i=w(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
10
- `);a.trim()&&(Fo(t,a.endsWith(`
4
+ `):""}function J(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function cn(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function tt(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var b=m(()=>{"use strict";an()});var _i,Cc,vi,wc,dn=m(()=>{"use strict";_i=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],Cc=new Set(_i),vi=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],wc=new Set(vi)});import{spawnSync as fn}from"node:child_process";function Ee(e,r,t={}){let n=fn("git",r,et({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=Ei(e,r,n);if(t.throwError)throw new Error(o);Qe(o)}return n.stdout||""}function Ei(e,r,t){let n=typeof t.stderr=="string"&&t.stderr.trim()||typeof t.stdout=="string"&&t.stdout.trim()||t.error?.message||`exit ${t.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${n}`}function Ue(e){return Ee(e,["status","--short"],{allowFailure:!0}).split(`
5
+ `).map(r=>r.trim()).filter(Boolean)}function P(e,r){try{let t=fn("git",r,et({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function pn(e,r,t){let n=P(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function or(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return ve(n,"missing worktree path");let s=P(e,["rev-parse","HEAD"]);if(s.status!==0)return ve(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let p=P(e,["rev-parse",n]);if(p.status!==0)return ve(n,p.error||p.stderr||p.stdout||`failed to resolve ${n}`,s.stdout.trim());i=p.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=pn(e,i,a),l=pn(e,a,i),c=u.error||l.error||void 0;if(u.isAncestor==null||l.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:l.isAncestor,relation:"unknown",...c?{error:c}:{}};let d=u.isAncestor?"ahead":l.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:l.isAncestor,relation:d,...c?{error:c}:{}}}function ve(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var H=m(()=>{"use strict";oe();b();dn()});var nt=m(()=>{"use strict";H()});var sr=m(()=>{"use strict";H();oe();nt()});var ot=m(()=>{"use strict";b()});function ce(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"||r==="box"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"box"}function ir(e,r){return e[r]?.trim()||null}function mn(e){let r=e?.split(":")[0]?.trim();return r?ce(r):null}function Ce(e=process.env,r={}){let t=[],n=mn(r.boxId),o=mn(ir(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ce(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ce(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=ir(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ce(i)&&t.push(`KYNVER_BOX_ID=${ir(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ce(i),source:"env",slugInferenceBlocked:!1,warnings:t};if(n)return{boxKind:n,source:"config",slugInferenceBlocked:!1,warnings:t};if(o)return{boxKind:o,source:"env",slugInferenceBlocked:!1,warnings:t};let a=ir(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 operators set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND; customers default to box`),{boxKind:"box",source:"default",slugInferenceBlocked:!!a,warnings:t}}var de=m(()=>{"use strict"});function st(e,r){return e==="forge"?4:Math.max(1,r)}function ar(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var ur=m(()=>{"use strict"});var gn=m(()=>{"use strict"});import{existsSync as Ci,readFileSync as wi,statfsSync as Ai}from"node:fs";function it(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Ci(e))continue;let r=wi(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function hn(e={}){if(!(e.forceWsl===void 0?it():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||we,n=e.wslHostFreeWarnBytes??Pi,o=e.wslHostFreeCriticalBytes??Oi,s=e.statfs??Ai,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<n,d=a<o,p=!c&&!d,g=(a/(1024*1024*1024)).toFixed(1),f=null;return p||(f=`Windows host disk ${t} at ${d?"critical":"warning"}: ${g} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Ii()}`),{ok:p,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:f,probeError:null}}function Ii(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP% and %LOCALAPPDATA%\\Temp\\wsl-crashes); 2) shut down WSL (`wsl --shutdown`) then compact the VHDX (`Optimize-VHD` or `diskpart compact vdisk`); 3) clear local node_modules / .next / harness worktrees before restarting workers; 4) disable recurring dumps via `%USERPROFILE%/.wslconfig` (`maxCrashDumpCount=-1`) or `kynver wsl-crashes --execute`. More help: https://www.kynver.com/help."}var Pi,Oi,we,at=m(()=>{"use strict";Pi=25*1024*1024*1024,Oi=12*1024*1024*1024,we="/mnt/c"});import{execFileSync as kn}from"node:child_process";import{existsSync as cr,readFileSync as yn,readdirSync as Ni,statSync as Wi}from"node:fs";import ut from"node:path";function lr(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Rn(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=kn("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||we;return r&&cr(ut.join(t,"Users",r))?r:null}function Ui(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||we,n=e.windowsUser??Rn();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Bi(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),n=r[2]??"",o=Number(r[3]),s=n.split("_").filter(Boolean);return{executableHint:s.length>0?s[s.length-1]:null,signal:Number.isFinite(o)?o:null,pid:Number.isFinite(t)?t:null}}function Fi(){try{if(cr("/proc/sys/kernel/core_pattern"))return yn("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return kn("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Li(e){return!!(e&&/wsl-capture-crash/i.test(e))}function Hi(e,r=we){let t=ut.join(r,"Users",e,".wslconfig");if(!cr(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=yn(t,"utf8")}catch{return null}let o=null,s=null;for(let i of n.split(/\r?\n/)){let a=i.replace(/#.*$/,"").trim();if(!a||a.startsWith("["))continue;let u=a.indexOf("=");if(u<0)continue;let l=a.slice(0,u).trim().toLowerCase(),c=a.slice(u+1).trim();if(l==="maxcrashdumpcount"){let d=Number(c);o=Number.isFinite(d)?d:null}else l==="crashdumpfolder"&&(s=c.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:o,crashDumpFolder:s}}function $i(e){if(!cr(e))return[];let r=Ni(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=ut.join(e,n.name);try{let s=Wi(o),i=Bi(n.name);t.push({name:n.name,path:o,bytes:s.size,mtimeMs:s.mtimeMs,executableHint:i.executableHint,signal:i.signal,pid:i.pid})}catch{}}return t.sort((n,o)=>o.mtimeMs-n.mtimeMs),t}function Ae(e={}){if(!(e.forceWsl===void 0?it():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||we,n=e.windowsUser??Rn(),o=e.warnBelowBytes??lr("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Di),s=e.criticalBelowBytes??lr("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",Ti),i=e.warnCount??lr("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Mi),a=e.criticalCount??lr("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Ki),u=(e.readCorePattern??Fi)(),l=Li(u),c=null;n&&(c=(e.readWslConfig??Hi)(n,t));let d=c?.maxCrashDumpCount??null,p=d===-1,g=Ui({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!g)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:null,probeError:"windows_user_unresolved"};let f;try{f=(e.listDumps??$i)(g)}catch(A){return{ok:!1,path:g,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:`WSL crash dump probe failed at ${g}: ${A.message}`,probeError:A.message}}let y=f.reduce((A,h)=>A+h.bytes,0),S=f.length,R=[...new Set(f.map(A=>A.executableHint).filter(A=>!!A))],O=y>=s,B=y>=o,C=S>=a,xe=S>=i,Y=!(O||C||B||xe),N=null;if(!Y){let A=O||C?"critical":"warning",h=(y/1024**3).toFixed(1),te=R.length>0?R.join(", "):"unknown";N=`WSL crash dumps ${A}: ${S} file(s), ${h} GiB at ${g} (executables: ${te}). `+ji({wslCaptureEnabled:l,dumpsDisabledInWslConfig:p})}return{ok:Y,path:g,windowsUser:n,dumpCount:S,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:f,executables:R,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:N,probeError:null}}function ji(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure);"),r.push("More help: https://www.kynver.com/help."),r.join(" ")}var Di,Ti,Mi,Ki,dr=m(()=>{"use strict";at();Di=5*1024*1024*1024,Ti=10*1024*1024*1024,Mi=2,Ki=4});import{statfsSync as Gi}from"node:fs";function pr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Yi,n=e.diskFreeCriticalBytes??Vi,o=e.diskMaxUsedPercent??zi,s=e.diskHardMaxUsedPercent??Ji,i=Gi(r),a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<t,d=a<n,p=a<t*2,g=p&&l>o,f=p&&l>s,y=!c&&!d&&!g&&!f,S=e.skipWslHostCheck?null:hn(e.wslHost),R=e.skipWslCrashDumpCheck?null:Ae(e.wslCrashDumps),O=y&&(S?S.ok:!0)&&(R?R.ok:!0),B=null;return O||(B=[d?`free space below critical ${n} bytes`:null,c?`free space below warning ${t} bytes`:null,f?`used percent above hard cap ${s}%`:null,g?`used percent above cap ${o}%`:null,S&&!S.ok?S.reason:null,R&&!R.ok?R.reason:null].filter(Boolean).join("; ")),Xi({ok:O,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:B,wslHost:S,wslCrashDumps:R?{ok:R.ok,path:R.path,dumpCount:R.dumpCount,totalBytes:R.totalBytes,executables:R.executables,wslCaptureEnabled:R.wslCaptureEnabled,dumpsDisabledInWslConfig:R.dumpsDisabledInWslConfig,reason:R.reason,probeError:R.probeError}:null})}function Xi(e){let r=process.env.KYNVER_DISPATCH_DISK_GATE_FORCE?.trim().toLowerCase();return r?r==="ok"||r==="open"||r==="none"?e.ok?e:{...e,ok:!0,reason:`disk gate forced open by KYNVER_DISPATCH_DISK_GATE_FORCE (suppressed: ${e.reason??"no reason"})`}:r==="block"||r==="pressured"?{...e,ok:!1,reason:`disk gate forced closed by KYNVER_DISPATCH_DISK_GATE_FORCE${e.reason?` (underlying: ${e.reason})`:""}`}:e:e}var Yi,Vi,zi,Ji,fr=m(()=>{"use strict";dr();at();Yi=30*1024*1024*1024,Vi=15*1024*1024*1024,zi=80,Ji=90});import{existsSync as qi,readdirSync as Zi,statSync as Qi}from"node:fs";import lt from"node:path";function mr(){return Sn()}function ct(){let{runsDir:e}=mr();return bn(e)}function gr(e){return bn(X(e))}function ea(e){try{return Qi(e).isDirectory()}catch{return!1}}function bn(e){if(!qi(e))return[];let r=[];for(let t of Zi(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=lt.join(e,t.name);if(!ea(n))continue;let o=_(lt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function dt(e){let{runsDir:r}=mr();rt(lt.join(pt(r,e.id),"run.json"),e)}function Pe(e){let{harnessRoot:r}=mr();return Be(r,e)}function Be(e,r){return pt(X(e),x(r))}var se=m(()=>{"use strict";q();b()});import{existsSync as ra,readdirSync as ta}from"node:fs";import na from"node:path";function ft(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=na.join(Pe(e.id),"workers");if(!ra(t))return[...r];for(let n of ta(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var mt=m(()=>{"use strict";se();b()});function gt(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function xn(e){let r=e.trim();if(!r)return null;let t=gt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=gt(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=gt(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function _n(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?xn(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=xn(t);return n||t}var vn=m(()=>{"use strict"});import{existsSync as oa,readFileSync as sa}from"node:fs";function En(e){return e==="complete"}function Cn(e){return En(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Oe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!oa(e))return r;let t=Date.now()+ia,n=new Date(t).toISOString(),o=sa(e,"utf8").split(`
6
+ `).filter(Boolean);for(let s of o){let i=er(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),l=Date.parse(u);Number.isFinite(l)&&l>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:n}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),En(r.lastHeartbeatPhase)&&(r.terminalFinalResult=_n(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var ia,hr=m(()=>{"use strict";vn();b();ia=6e4});function An(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function kr(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function Pn(e){let r=An(e[0]);return!!(r&&aa.has(r))}function la(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function ca(e){if(!e||e.includes("*"))return null;let r=la(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function On(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ht(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function da(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function pa(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;wn.has(n)&&(t+=1);continue}r.push(n)}}return r}function fa(e){let r=!1,t=e.map((o,s)=>{let i=da(o),a=e[s-1];return a&&wn.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=pa(t);if(n.length===2){let[o,s]=n;if(ht(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=ca(s);if(i)return{argv:[t[0]??"rg","-g",i,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function In(e){for(let r=1;r<e.length;r+=1){let t=e[r];if(t&&(t==="-c"||t==="-lc"||t==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(t)))return r+1}return-1}function yr(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=kr(r);if(!t.length)return{command:r,wrapped:!1};let n=An(t[0]);if(!n||!ua.has(n))return{command:r,wrapped:!1};let o=In(t);if(o<0||o>=t.length)return{command:r,wrapped:!1};let s=t.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function ma(e,r){let t=e.trim(),n=kr(t),o=In(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function ga(e){let r=e.trim(),t=yr(r),n=kr(t.command);if(!n.length||!Pn(n))return{segment:r,changed:!1};let o=fa(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:ma(r,s),changed:!0}:{segment:s,changed:!0}}function kt(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=ga(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Nn(e){let r=yr(e).command,t=kr(r.trim());return t.length&&Pn(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Wn(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function ha(e){let{pattern:r,target:t}=Wn(e);return r?ht(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:On(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function ka(e){let{pattern:r,target:t}=Wn(e);if(!r)return null;if(ht(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&On(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function ya(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function Ra(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function yt(e){let r=e.meta?.trim()||(e.command?Ra(e.command):null)||null;if(r){let t=ha(r),n=ya(t);if(n)return n;let o=ka(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=kt(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var aa,ua,wn,Dn=m(()=>{"use strict";aa=new Set(["rg","ripgrep","grep"]),ua=new Set(["bash","sh","dash","zsh"]),wn=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Fe(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function xa(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function Le(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function _a(e){let r=e.metadata;if(!Le(r))return null;let t=r.vulnerabilities;if(!Le(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function va(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function Ea(e,r){let t=e.error;if(Le(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?Fe(o.split(`
7
+ `).find(Boolean)??o,160):"npm audit failed"}function Ca(e){let r=`${e.stdout}
8
+ ${e.stderr}`.trim(),t=xa(r);if(!t||!Le(t)){let o=Fe(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(Le(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Ea(t,e.stderr)}`};let n=_a(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:va(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function wa(e){return ba.test(e)}function Aa(e){let r=yr(e).command;return Tn.test(e)||Tn.test(r)||Nn(e)}function Pa(e){let r=yt({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&Sa.test(n)){let i=Fe(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=kt(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=Fe(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function Mn(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(wa(e.command)){let i=r.trim()||n.trim()||t.trim();return Ca({exitCode:e.exitCode,stdout:i,stderr:t})}if(Aa(e.command))return Pa({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=yt({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=Fe(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var ba,Tn,Sa,Kn=m(()=>{"use strict";Dn();ba=/\bnpm\s+audit\b/i,Tn=/\b(rg|ripgrep)\b/i,Sa=/\b(error|invalid|unknown|panic|not found)\b/i});function He(e){return typeof e=="string"&&Oa.test(e.trim())}function Rr(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return r.is_error===!0||r.providerTerminalError===!0||typeof r.subtype=="string"&&/^error(?:_|$)/.test(r.subtype)}var Oa,br=m(()=>{"use strict";Oa=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function Rt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ia(e){if(!e)return;let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0;if(!((r===void 0||r<0)&&(t===void 0||t<0)))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{}}}function Un(e){if(e.event==="step_update"&&Rt(e.step_update)){let s=e.step_update,i=s.step_type==="tool"&&typeof s.tool_name=="string"&&s.tool_name.trim()?s.tool_name.trim():void 0,a=typeof s.text_delta=="string"?s.text_delta:void 0;return!i&&a===void 0?null:{...i?{currentTool:i}:{},...a!==void 0?{textDelta:a}:{}}}if(e.event!=="result"||!Rt(e.result))return null;let r=e.result,t=typeof r.status=="string"?r.status.toUpperCase():"";if(t!=="SUCCESS"&&t!=="ERROR")return null;let n=Rt(r.usage)?Ia(r.usage):void 0;if(t==="ERROR"){let s=typeof r.error=="string"&&r.error.trim()?r.error.trim():"antigravity cli result error";return{...n?{usage:n}:{},terminal:{ok:!1,finalResult:null,error:s}}}let o=typeof r.response=="string"?r.response.trim():"";return{...n?{usage:n}:{},terminal:{ok:!0,finalResult:o||"completed",error:null}}}var Bn=m(()=>{"use strict"});function bt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Fn(){return{assistantText:""}}function Na(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function Wa(e){let r=typeof e.input_tokens=="number"?e.input_tokens:void 0,t=typeof e.output_tokens=="number"?e.output_tokens:void 0,o=(bt(e.models)?Object.keys(e.models):[]).find(s=>s.trim())?.trim();if(!(r===void 0&&t===void 0&&!o))return{...r!==void 0&&r>=0?{inputTokens:r}:{},...t!==void 0&&t>=0?{outputTokens:t}:{},...o?{model:o}:{}}}function Da(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function Ln(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Na(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!Da(e))return null;let t=bt(e.stats)?Wa(e.stats):void 0;if(e.status==="error"){let o=bt(e.error)&&typeof e.error.message=="string"?e.error.message:"gemini cli result error";return{...t?{usage:t}:{},terminal:{ok:!1,finalResult:null,error:o}}}let n=r.assistantText.trim();return{...t?{usage:t}:{},terminal:{ok:!0,finalResult:n||"completed",error:null}}}var Hn=m(()=>{"use strict"});import{existsSync as Ta,readFileSync as Ma}from"node:fs";function Ka(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Ua(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Ba(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",Rr(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ie(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Fa(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function La(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let t=Object.keys(r)[0];if(t?.trim())return t.trim()}}function Ha(e,r){let t=Fa(r);if(!t)return;let n=Ie(t.input_tokens)??Ie(t.inputTokens)??Ie(t.prompt_tokens),o=Ie(t.output_tokens)??Ie(t.outputTokens)??Ie(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=La(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function $a(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let u=a,l=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:l,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function ja(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function $n(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!Ta(e))return r;let t=Ma(e,"utf8").split(`
9
+ `).filter(Boolean),n=null,o=Fn();for(let s of t){let i=er(s);if(!i||typeof i!="object"||Array.isArray(i))continue;if(i.type==="turn.started"&&(n=null,r.finalResult=null),i.type==="item.completed"){let p=i.item;if(p&&typeof p=="object"&&!Array.isArray(p)){let g=p;g.type==="agent_message"&&typeof g.text=="string"&&g.text.trim()&&(n=g.text)}}i.type==="turn.completed"&&n&&!r.providerTerminalError&&(r.finalResult=n,n=null);let a=Ka(i);if(a&&(r.firstEventAt||=a,r.lastEventAt=a),i.type==="stream_event"&&i.event&&typeof i.event=="object"&&i.event.type==="content_block_start"){let p=i.event.content_block;p?.type==="tool_use"&&(r.currentTool=String(p.name||"tool"))}if(i.type==="assistant"&&i.message&&typeof i.message=="object"){let p=i.message.content;if(Array.isArray(p)){let g=p.find(f=>f?.type==="tool_use");g&&(r.currentTool=String(g.name||r.currentTool))}}if(i.type==="tool_call"&&i.subtype==="started"){let p=i.tool_call&&typeof i.tool_call=="object"&&!Array.isArray(i.tool_call)?i.tool_call:void 0,g=Ua(p);g&&(r.currentTool=g)}let u=$a(i);u&&ja(r,Mn({command:u.command,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,interleavedOutput:u.interleaved}));let l=Un(i),c=l?null:Ln(i,o),d=l??c;if(d?.currentTool&&(r.currentTool=d.currentTool),d?.usage&&(r.usage={...r.usage??{},...d.usage}),d?.terminal?d.terminal.ok?r.finalResult=d.terminal.finalResult:(r.finalResult=null,r.providerTerminalError=!0,r.error=d.terminal.error):i.type==="result"&&Ba(r,i),i.type==="turn.failed"){n=null,r.finalResult=null,r.providerTerminalError=!0;let p=i.error;r.error=typeof p?.message=="string"?p.message:"provider turn failed"}Ha(r,i)}return r}var jn=m(()=>{"use strict";Kn();b();br();Bn();Hn()});import{accessSync as Ud,constants as Bd,existsSync as Ga,readFileSync as Ya}from"node:fs";import Va from"node:path";function Ja(e){return Va.join(e,za)}function Xa(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function St(e){if(!e)return null;let r=Ja(e);if(!Ga(r))return null;try{let t=JSON.parse(Ya(r,"utf8")),n=t.oomEvidence;return{exitCode:Xa(t.exitCode),signal:typeof t.signal=="string"&&t.signal?t.signal:null,...typeof t.startedAt=="string"?{startedAt:t.startedAt}:{},...typeof t.endedAt=="string"?{endedAt:t.endedAt}:{},...typeof t.childPid=="number"?{childPid:t.childPid}:{},...typeof t.spawnError=="string"?{spawnError:t.spawnError}:{},oomEvidence:n&&(n.source==="cgroup"||n.source==="kernel_log")?{source:n.source,detail:String(n.detail??"").slice(0,300)}:null}}catch{return null}}function Gn(e){if(!e)return null;let r=e.oomEvidence?" (kernel out-of-memory kill)":"";return e.spawnError?`could not start: ${e.spawnError}`:e.signal?`killed by ${e.signal}${r}`:e.exitCode===null?null:`exited with code ${e.exitCode}${r}`}var za,Ld,xt=m(()=>{"use strict";za="exit.json";Ld=String.raw`"use strict";
10
+ const cp = require("child_process"), fs = require("fs");
11
+ const argv = process.argv.slice(1);
12
+ const exitFile = argv[0], cmd = argv[1], args = argv.slice(2);
13
+ const startedMs = Date.now();
14
+ function cgroupOomKills() {
15
+ try {
16
+ const line = fs.readFileSync("/proc/self/cgroup", "utf8").split("\n").find((l) => l.startsWith("0::"));
17
+ if (!line) return null;
18
+ const file = "/sys/fs/cgroup" + line.slice(3).trim().replace(/\/$/, "") + "/memory.events";
19
+ const m = /(?:^|\n)oom_kill (\d+)/.exec(fs.readFileSync(file, "utf8"));
20
+ return m ? Number(m[1]) : null;
21
+ } catch { return null; }
22
+ }
23
+ function kernelLog() {
24
+ const override = process.env.KYNVER_EXIT_CAPTURE_KERNEL_LOG_FILE;
25
+ if (override) { try { return fs.readFileSync(override, "utf8"); } catch { return ""; } }
26
+ const run = (bin, a) => {
27
+ try {
28
+ const r = cp.spawnSync(bin, a, { encoding: "utf8", timeout: 3000, maxBuffer: 8 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
29
+ return r.status === 0 ? String(r.stdout || "") : "";
30
+ } catch { return ""; }
31
+ };
32
+ return run("journalctl", ["-k", "-q", "--no-pager", "--since", "@" + Math.floor(startedMs / 1000)]) || run("dmesg", []);
33
+ }
34
+ const oomBefore = cgroupOomKills();
35
+ let child, finished = false;
36
+ function write(rec) {
37
+ try { fs.writeFileSync(exitFile, JSON.stringify(rec, null, 2) + "\n"); } catch {}
38
+ }
39
+ function finish(code, signal, spawnError) {
40
+ if (finished) return;
41
+ finished = true;
42
+ const rec = { exitCode: code, signal: signal || null, startedAt: new Date(startedMs).toISOString(), endedAt: new Date().toISOString(), childPid: child && child.pid };
43
+ if (spawnError) rec.spawnError = spawnError;
44
+ if (signal === "SIGKILL" || code === 137 || (code !== 0 && code !== null)) {
45
+ const oomAfter = cgroupOomKills();
46
+ if (oomBefore !== null && oomAfter !== null && oomAfter > oomBefore) {
47
+ rec.oomEvidence = { source: "cgroup", detail: "memory.events oom_kill " + oomBefore + " -> " + oomAfter };
48
+ } else if (signal === "SIGKILL" || code === 137) {
49
+ const pid = child && child.pid;
50
+ const hit = kernelLog().split("\n").find((l) => pid && new RegExp("(?:Killed process|oom-kill:.*pid=|Memory cgroup out of memory: Killed process) ?" + pid + "\\b").test(l));
51
+ if (hit) rec.oomEvidence = { source: "kernel_log", detail: hit.trim().slice(0, 300) };
52
+ }
53
+ }
54
+ write(rec);
55
+ if (signal) {
56
+ const n = (require("os").constants.signals || {})[signal];
57
+ process.exit(128 + (n || 9));
58
+ }
59
+ process.exit(code === null ? 1 : code);
60
+ }
61
+ try {
62
+ child = cp.spawn(cmd, args, { stdio: "inherit" });
63
+ } catch (e) {
64
+ process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
65
+ finish(127, null, String(e && e.message));
66
+ }
67
+ for (const s of ["SIGTERM", "SIGINT", "SIGHUP"]) process.on(s, () => { try { child.kill(s); } catch {} });
68
+ child.on("error", (e) => {
69
+ process.stderr.write("failed to spawn worker process: " + (e && e.message) + "\n");
70
+ if (!child.pid) finish(127, null, String(e && e.message));
71
+ });
72
+ child.on("exit", (code, signal) => finish(code, signal));
73
+ `});function _t(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&Qa.has(r)}function vt(e){return!!(e&&Za.test(e))}function Vn(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!_t(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||vt(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":Yn.test(r)||Yn.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function zn(e){let r=[eu(e.stopClass)],t=Gn(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function eu(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}var Za,Yn,Qa,Jn=m(()=>{"use strict";se();b();xt();Za=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,Yn=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,Qa=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"])});function Xn(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Et(e){let r=(e??"").trim();if(!r)return null;if(He(r))return{blocked:!0,reason:`provider authentication failed: ${Xn(r)}`};for(let t of ru)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Xn(r)}`};return null}var ru,qn=m(()=>{"use strict";br();ru=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function Zn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function tu(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function nu(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Zn(e.head)}function ou(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function Qn(e){if(e.alive||tu(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Zn(e.headCommit)??nu(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:ou(s,r,t)}}var eo=m(()=>{"use strict"});import{existsSync as su,readFileSync as iu,statSync as no}from"node:fs";import Sr from"node:path";function cu(e,r=process.env){let t=e?uu:au,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function du(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function Ct(e){try{return no(e).mtimeMs}catch{return-1}}function pu(e){let r=Sr.join(e,".git");try{if(no(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(iu(r,"utf8"));return t?Sr.resolve(e,t[1].trim()):null}catch{return null}}function ro(e){let r=pu(e);return[Ct(e),r?Ct(Sr.join(r,"HEAD")):-2,r?Ct(Sr.join(r,"index")):-2].join(":")}function to(e,r){return{changedFiles:Ue(e),gitAncestry:or(e,{base:r.base,baseCommit:r.baseCommit})}}function fu(e,r){for(ie.delete(e),ie.set(e,r);ie.size>lu;){let t=ie.keys().next().value;if(t===void 0)break;ie.delete(t)}}function oo(e,r,t){let n=du(r);if(!e||!e.trim())return $e.missingWorktree++,{changedFiles:[],gitAncestry:ve(n,"missing worktree path")};let o=`${e}\0${n}`;if(!su(e))return ie.delete(o),$e.missingWorktree++,{changedFiles:[],gitAncestry:ve(n,`worktree no longer exists: ${e}`)};if(t.alive)return ie.delete(o),$e.liveProbes++,to(e,r);let s=t.ttlMs??cu(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=ro(e),u=ie.get(o);if(s>0&&u&&u.fingerprint===a&&i<u.expiresAt)return $e.hits++,u.probe;$e.misses++;let l=to(e,r);if(s>0){let c=.8+.4*(t.random??Math.random)();fu(o,{fingerprint:ro(e),expiresAt:i+Math.round(s*c),probe:l})}return l}var au,uu,lu,ie,$e,so=m(()=>{"use strict";H();au=10*6e4,uu=60*6e4,lu=2048,ie=new Map,$e={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function je(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function mu(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function gu(e){if(je(e.headCommit)||je(e.prUrl)||je(e.artifactBundlePath)||je(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&je(r.head))}function Ne(e){return mu(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:gu(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function io(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var xr=m(()=>{"use strict"});function wt(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function ao(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function _r(e){let r=e.trim();if(!r)return null;let t=wt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=wt(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=wt(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=ao(u);for(let c of n){let d=ao(c);d>l&&(u=c,l=d)}return u}var At=m(()=>{"use strict"});function uo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function lo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function hu(e){return new Set(e.map(r=>lo(uo(r)??r)).filter(Boolean))}function co(e,r,t){let n=uo(e)??e;if(!n)return"unrelated";let o=lo(n);return hu(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var po=m(()=>{"use strict"});function We(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ku(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function pe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:We(e)}function vr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function fo(e){let r=null;if(typeof e=="string"){let o=_r(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=pe(String(s.prUrl??s.pr_url??"")),a=We(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:We(s.mergeCommit??s.merge_commit),reason:We(s.reason)})}return n}function mo(e,r){let t=[],n=pe(We(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=pe(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function go(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!ku(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?pe(We(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?pe(r.targetPrUrls[0]):null):null;if(s){let d=mo(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=fo(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=fo(n),a=new Map(i.map(d=>[vr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>vr(pe(d)??d)).filter(Boolean)),l=mo(t,n);if(r.landingOnly)for(let d of l){let p=a.get(vr(d)),g=co(d,r.targetPrUrls,p);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let p=vr(pe(d)??d),g=a.get(p);if(!g){c.push(p);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(p)}return c.length>0?{blocked:!0,reason:c.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${c.join(", ")}`}:{blocked:!1}}function ho(e){if(e.blocked)return e.detail??e.reason}var ko=m(()=>{"use strict";At();po()});function bu(e){let r=Date.now();if(e.providerTerminalError||Rr(e.finalResult)||e.finalResult&&e.error?.trim()||He(e.error)||He(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Et(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!yo(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&xu(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ne(o);if(s.blocked){let i=io(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=go({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=ho(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Su(e))return{state:"done",reason:"empty abandoned worker record"};let o=Et(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Qn({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let u=e.error?.trim();return{state:"needs_attention",reason:u?`${s.attentionReason} (${u})`:s.attentionReason}}let i=e.error?.trim(),a=vt(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>yu)return{state:"needs_attention",reason:`no first stream event ${tt(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Ru?{state:"stale",reason:`no log/event/heartbeat activity for ${tt(n)}s`}:{state:"ok",reason:"recent activity"}}function yo(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Su(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function xu(e){let r=null;if(typeof e=="string"?r=_r(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function _u(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Cn(t))}function Er(e,r={}){let t=$n(e.stdoutPath),n=Oe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=_u(e,t.finalResult,n),i=o?!1:J(e.pid),a=rr(e.stdoutPath),u=rr(e.stderrPath),l=rr(e.heartbeatPath),{changedFiles:c,gitAncestry:d}=oo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=cn([t.lastEventAt,n.lastHeartbeatAt,tr(e.stdoutPath),tr(e.stderrPath),tr(e.heartbeatPath)]),g=i?null:St(e.workerDir),f=s&&!_t(s)?s:null,y=t.error||!i&&!s&&nr(e.stderrPath,10).trim()||void 0,S=y||!i&&s&&!f&&nr(e.stderrPath,10).trim()||void 0,R=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,O=yo(R)?null:R,B=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,C=bu({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,completionBlocker:O,landingContract:B,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),xe=O||C.state==="blocked"?"blocked":o||C.state==="done"?"done":s?"exited":i?"running":"exited",I=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,Y=Vn({alive:i,finalResult:s,error:S??null,stale:C.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:g}),N=I&&!i&&!f?I:Y,A=N==="running"||N==="finished"?null:(I===N?e.stopReason:void 0)??zn({stopClass:N,exit:g,error:S??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:xe,stopClass:N,stopReason:A,exit:g,attention:C,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function fe(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Ro(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var yu,Ru,me=m(()=>{"use strict";hr();jn();Jn();xt();br();qn();eo();so();xr();ko();At();b();yu=18e4,Ru=6e5});var bo=m(()=>{"use strict";me();b()});function So(e,r={}){let t=r.perWorkerMemBytes??Pt,n=r.memReserveBytes??Ot,o=r.memUtilization??It,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Cr)}var Pt,Ot,It,Cr,xo=m(()=>{"use strict";gn();ae();de();ur();wr();fr();se();mt();bo();b();Pt=500*1024*1024,Ot=4*1024*1024*1024,It=.85,Cr=64});function Ge(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Nt(e){let r=e.config??{},t=e.env??process.env,n=Ge(r.perWorkerMemBytes,Pt),o=Ge(r.memReserveBytes,Ot),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):It)),i=So(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ge(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=Ge(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,Cr),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Ge(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,Cr),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var wr=m(()=>{"use strict";xo()});import{homedir as vu}from"node:os";import Eu from"node:path";var _o,Wt=m(()=>{"use strict";_o=Eu.join(vu(),".kynver",".env")});var vo=m(()=>{"use strict"});var Eo=m(()=>{"use strict";vo()});var Co=m(()=>{"use strict"});var wo=m(()=>{"use strict";b()});var Dt=m(()=>{"use strict";Eo();Co();wo()});var Ao=m(()=>{"use strict"});var Po=m(()=>{"use strict";Ao()});var Ar=m(()=>{"use strict";Wt();oe();ae();Dt();Po()});var No=m(()=>{"use strict";de();de()});var Wo=m(()=>{"use strict";Wt();Dt();Ar()});var Tt=m(()=>{"use strict"});import{existsSync as Z,mkdirSync as wu,readdirSync as Pr,renameSync as Do,statSync as Au}from"node:fs";import Q from"node:path";function Mo(e){try{return Au(e).isDirectory()}catch{return!1}}function Pu(e){if(!Z(e))return!0;for(let r of To){let t=Q.join(e,r);if(Z(t)&&(!Mo(t)||Pr(t).length>0))return!1}return!0}function Ou(e){let r=Q.join(e,"runs");if(!Z(r)||!Mo(r))return!1;for(let t of Pr(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Q.join(r,t.name,"run.json");if(_(n,void 0)?.id)return!0}return!1}function Iu(e){let r=Q.join(e,"runs");if(!Z(r))return!1;for(let t of Pr(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(_(Q.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Nu(e){let r=Q.join(e,"ghost");return Z(r)?!Z(Q.join(r,"runs")):Iu(e)}function Ko(e){return Ou(e.sharedRoot)?Pu(e.forgeRoot)?Nu(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function Uo(e,r){wu(r,{recursive:!0});for(let t of To){let n=Q.join(e,t),o=Q.join(r,t);if(Z(n)){if(Z(o)&&Pr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Z(o)){Do(n,o);continue}Do(n,o)}}}var To,Bo=m(()=>{"use strict";b();To=["runs","worktrees"]});import{existsSync as w}from"node:fs";import{homedir as Wu}from"node:os";import E from"node:path";function Mt(e=process.env){return e.HOME?.trim()||Wu()}function Kt(e=process.env){return E.join(Mt(e),".kynver","harness")}function Or(e){let r=E.resolve(z(e.trim()));for(;Du.has(E.basename(r));)r=E.dirname(r);return r}function Tu(e,r=process.env){return E.join(Kt(r),e)}function Mu(e=process.env){let r=Kt(e);if(w(E.join(r,"runs")))return!0;if(w(r)&&!w(E.join(r,"ghost"))&&!w(E.join(r,"forge")))return w(r);let t=E.join(Mt(e),Fo);return w(t)}function Ir(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Or(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Or(n),source:"config"};let o=Tu(e.boxKind,r);if(w(E.join(o,"runs"))||w(o)&&!Ku(o))return{harnessRoot:o,source:"box_scoped"};let i=Kt(r);if(e.boxKind==="forge"){let a=Ko({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&Uo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Mu(r)){if(w(E.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(w(i)&&!w(E.join(i,"ghost"))&&!w(E.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let u=E.join(Mt(r),Fo);if(w(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Ku(e){if(!w(e))return!0;for(let r of["runs","worktrees"]){let t=E.join(e,r);if(w(t))return!1}return!0}var Fo,Du,Ut=m(()=>{"use strict";oe();Bo();Fo=E.join(".openclaw","harness");Du=new Set(["runs","worktrees"])});import Lo from"node:os";function Nr(e){return e?.trim()?e.trim():null}function Uu(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Bu(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Wr(e=ge(),r=process.env,t={}){let n=Ce(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Nr(r.KYNVER_BOX_KIND)),a=t.strict===!0||Bu(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let u=Nr(e.runnerId),l=Nr(r.KYNVER_RUNTIME_ID)??Nr(r.OPENCLAW_RUNTIME_ID),c=u??l??Uu(n.boxKind,Lo.hostname()),d=u?"config":l?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${c}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=Nt({config:e,env:r,totalMemBytes:Lo.totalmem()}),g=ar(n.boxKind,p.configuredMaxWorkers??st(n.boxKind,p.autoCap)),f=Ir({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:c,runnerIdSource:d,maxConcurrentWorkers:g,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Dr=m(()=>{"use strict";ae();de();ur();wr();Ut()});var $o=m(()=>{"use strict";sr();de();No();ae();Ar();Wo();ot();Tt();Dr()});var $u,sm,jo=m(()=>{"use strict";$u=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],sm=$u.join("|")});var Go=m(()=>{"use strict";oe()});var Yo=m(()=>{"use strict";Go()});var Vo=m(()=>{"use strict"});var zo=m(()=>{"use strict";Vo()});import{existsSync as Gu,mkdirSync as Nm,readFileSync as Yu,writeFileSync as Wm}from"node:fs";import{homedir as Vu,totalmem as Tm}from"node:os";import Bt from"node:path";function zu(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:z(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:z(e.defaultRepo.trim())}:{}}}function ge(){if(!Gu(Jo))return{};try{return zu(JSON.parse(Yu(Jo,"utf8")))}catch{return{}}}var Xo,Jo,qm,Zm,Qm,ae=m(()=>{"use strict";sr();oe();ot();de();ur();wr();fr();Ar();$o();jo();Dr();Yo();Tt();zo();Xo=Bt.join(Vu(),".kynver"),Jo=Bt.join(Xo,"config.json"),qm=Bt.join(Xo,"credentials");Zm=500*1024*1024,Qm=4*1024*1024*1024});import Ft from"node:path";function D(e){return Or(e)}function ue(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return D(e);let r=ge(),t=r.harnessRoot?.trim();if(t)return D(t);let n=Wr(r,process.env);return n.identity?n.identity.harnessRoot:Ir({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function X(e){return Ft.join(D(e),"runs")}function De(e){return Ft.join(D(e),"worktrees")}function Sn(){let e=ue();return{harnessRoot:e,runsDir:X(e),worktreesDir:De(e)}}function pt(e,r){return Ft.join(e,x(r))}var q=m(()=>{"use strict";ae();Ut();Dr();b()});q();import U from"node:path";xr();import Kr from"node:path";H();me();var Lt=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function qo(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Lt)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function T(e){return e.filter(r=>{let t=r.trim(),n=t.startsWith("??")?t.slice(2).trim():t.length>3?t.slice(3).trim():t;return!qo(n)})}function he(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function Ye(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?T(e.changedFiles).length>0:!!(he(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Ve(e){return e.status||(e.status=Er(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Ht(e,r){if(e.status)return T(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Ue(e.worktreePath);return T(t).length>0}function Ju(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function $t(e,r){if(e.status)return e.status;let t=e.worker,n=typeof t.completionReportedAt=="string"&&t.completionReportedAt.trim().length>0,o=!!(t.status&&["done","exited","blocked","failed","abandoned"].includes(t.status))||n,s=Ju(e);if(o&&!J(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Ue(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",l=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:or(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),c={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:l,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??he(s)};return e.status=c,c}return Ve(e)}me();se();mt();me();b();import Xu from"node:path";var qu=new Set(["running","dispatching","pending","queued","needs_attention"]),ke=new Set(["completed","failed","cancelled","done"]);function ye(e){let r=ft(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(Xu.join(Pe(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let u=Er(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Ro(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Zo(){let e=[];for(let r of ct()){if(!qu.has(r.status))continue;let t=ye(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,dt(r),e.push({runId:r.id,from:n,to:t})}return e}me();hr();import{existsSync as Tr,mkdirSync as Gg,readdirSync as rs,renameSync as Yg,statSync as Zu}from"node:fs";import Re from"node:path";ae();sr();oe();nt();H();hr();q();se();q();b();import le from"node:path";var Wg=`${le.sep}runs${le.sep}runs${le.sep}`;function Qo(e){return{workerJsonPath:le.join(e,"worker.json"),stdoutPath:le.join(e,"stdout.jsonl"),stderrPath:le.join(e,"stderr.log"),heartbeatPath:le.join(e,"heartbeat.jsonl"),lastStatusPath:le.join(e,"last-status.json")}}b();ae();var $="<redacted>",jt=`[^\\s"'\\\\,}\\]]`,Tg=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${jt}+`,"gi"),$],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${jt}+`,"gi"),$],[/\bkynver_u_[A-Za-z0-9_-]+/g,$],[/\bkyn_[A-Za-z0-9]{12,}/g,$],[/\bsk-ant-[A-Za-z0-9_-]+/g,$],[/\bsk-[A-Za-z0-9_-]{8,}/g,$],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,$],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,$],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,$],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${$}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${jt}+`,"g"),`$1${$}`]];var Mg=256*1024*1024;var ze=900*1e3,nh=3600*1e3;function ts(e,r){let t=Re.resolve(e),n=Re.resolve(X(r)),o=Re.relative(n,t);return o!==".."&&!o.startsWith("..")&&!Re.isAbsolute(o)}function Qu(e){if(!Tr(e))return[];try{return rs(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function el(e){let r=Re.join(e,"workers");if(!Tr(r))return[];try{return rs(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function es(e,r,t){if(!Tr(e))return!1;try{let n=r-Zu(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function rl(e,r=Date.now(),t=ze){if(!Tr(e))return!1;let n=Qo(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&J(o.pid))return!0;let s=Oe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(es(n.stdoutPath,r,t)||es(n.heartbeatPath,r,t))}function tl(e,r=Date.now(),t=ze){for(let n of el(e))if(rl(Re.join(e,"workers",n),r,t))return!0;return!1}function ns(e,r=Date.now()){let t=new Set,n=X(e);for(let o of Qu(n)){let s=Re.join(n,o);tl(s,r)&&t.add(`${e}\0${o}`)}return t}b();function nl(e,r=Date.now(),t=ze){let n=Oe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Te(e,r=Date.now(),t=ze){return J(e.pid)?!0:nl(e,r,t)}function ol(e,r){return r?r.runTerminalCache.derive(e.run):ye(e.run)}function ee(e,r=Date.now()){return Te(e.worker,r)}function Gt(e,r){return ke.has(e.run.status)?!1:ol(e,r)!==null}function os(e,r,t=Date.now()){if(ee(e,t))return!0;if(ke.has(e.run.status)||Gt(e,r))return!1;let n=Ve(e);return fe(n)?!1:!!ee(e,t)}xr();me();function ss(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ee(e))return!0;let n=r??Ve(e);return!!(!fe(n)||Ye(n)||T(n.changedFiles).length>0||Ne({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:he(n.finalResult)}).blocked)}H();b();import{existsSync as as,mkdirSync as sl,writeFileSync as is}from"node:fs";import Mr from"node:path";function us(e,r,t){return Mr.join(e,"salvage",x(r),x(t))}function ls(e){return as(Mr.join(us(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function cs(e){let r=us(e.harnessRoot,e.indexed.runId,e.indexed.workerName);sl(r,{recursive:!0});let t=Mr.join(r,"salvage.patch"),n=!1;if(as(e.indexed.worktreePath)){let s=P(e.indexed.worktreePath,["diff","HEAD"]),i=P(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
74
+ `);a.trim()&&(is(t,a.endsWith(`
11
75
  `)?a:`${a}
12
- `),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return Fo(Ir.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
13
- `),o}var Su=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function xu(e){e.writeSalvageEvidence&&Su.has(e.skipReason)&&(X(e.indexed,e.now)||$o({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||jo({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function vu(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(ge.has(r.run.status)||e.liveness&&Wt(r,e.liveness)||e.liveness&&ce(Dt(r,e.liveness))&&!X(r))?n:t}function _u(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:vu(e)}function Cu(e,r){if(e.harnessRoot?.trim())return Or.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Or.sep}runs${Or.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Go(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let u=_u(e);if(n<=0&&!t&&u<=0)return"worktrees_disabled";if(u>0&&o<u)return"below_age_threshold";if(X(r,a))return"active_worker";let l=Dt(r,e.liveness),c=Cu(e,r),d=f=>{if(c)try{xu({indexed:r,harnessRoot:c,skipReason:f,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(Bo(r,l)){let f=d("completion_blocked");if(f)return f}if(Nt(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(Uo(r,e.liveness,a)||!ce(l))return"run_still_active";if(Le(l)){let f=d("pr_or_unmerged_commits");if(f)return f}if(N(l.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(we({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:me(l.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function Tt(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has(Or.resolve(o))||r&&X(r)?"active_worker":r&&Nt(r,e.gitStatusCache)?"dirty_worktree":null}function Yo(e){return Tt(e)}var Mt=216e5,Nr=6048e5;var Kt=36e5,Dr=120;var Vo=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function zo(e,r){let t=[],n=new Set,o=(s,i,a)=>{let u=`${s}\0${i}`;n.has(u)||t.length>=24||(n.add(u),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)Vo.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Vo.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Zo,readdirSync as Qo,statSync as Au}from"node:fs";import es from"node:path";ue();V();import Jo from"node:path";b();function wu(e,r){return Ie(e,r)}function Xo(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of dr(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=v(Jo.join(Te(o,s.id),"workers",x(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=Jo.resolve(u.worktreePath);wu(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of Ko(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function qo(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}b();function Pu(e,r){try{let t=Au(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Iu(e,r){let t=es.join(e,"runs",r,"run.json");return Zo(t)?v(t,null):null}function rs(e){try{return Qo(e).length===0}catch{return!1}}function ts(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(qo(n,r,t,i.liveRunKeys)||!rs(n))return"run_still_active";let a=Iu(r,t);return a&&!ge.has(a.status)&&!he(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function ns(e){if(!Zo(e.worktreesDir))return[];let r=[],t;try{t=Qo(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=es.join(e.worktreesDir,o);rs(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Pu(s,e.now)})}return r}U();import{existsSync as Bt,rmSync as ms}from"node:fs";import{execFileSync as Ou}from"node:child_process";import{existsSync as os,readdirSync as Nu,statSync as Du}from"node:fs";import Wu from"node:path";var Tu=2500;function Mu(e,r=Tu){if(!os(e))return 0;try{let n=Ou("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function q(e,r=5e4){if(!os(e))return 0;let t=Mu(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Nu(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Wu.join(i,u),c;try{c=Du(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as Fu,rmSync as Hu}from"node:fs";V();import{lstatSync as Ku,readdirSync as Uu}from"node:fs";function ss(e){try{let r=Ku(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function is(e,r=32){let t=ss(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Uu(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=ss(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Bu}from"node:child_process";import ls from"node:path";import D from"node:path";function as(e,r,t,n){let o=D.resolve(e),s=`${D.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=D.relative(t,i);if(a.startsWith("..")||D.isAbsolute(a))return"path_outside_harness";let u=a.split(D.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(D.resolve(r))?"path_outside_harness":null}function Wr(e,r,t){return as(e,r,t,"node_modules")}function Tr(e,r,t){return as(e,r,t,".next")}function Mr(e,r,t){let n=D.resolve(e),o=D.relative(t,n);return o.startsWith("..")||D.isAbsolute(o)||o.split(D.sep).length<3||!n.startsWith(D.resolve(r))?"path_outside_harness":null}function us(e,r,t){let n=D.resolve(e);return Wr(n,r,t)===null||Tr(n,r,t)===null||Mr(n,r,t)===null}function ds(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function cs(e){let r=Bu("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function ps(e,r,t){if(!us(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=cs(["chown","-R",`${n}:${o}`,ls.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=cs(["rm","-rf",ls.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var Ut="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function Lu(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function fs(e,r,t={}){if(!Fu(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?Pe(n):null,i=e.bytes??q(e.path)??void 0,a=t.removePath??Hu,u=t.hasForeignOwnedEntry??is;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!Lu(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=ds();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Ut}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let g=ps(e.path,n,o);if(g.ok&&g.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(g.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; privileged reclaim failed: ${g.error}; ${Ut}`}}}function Ft(e){let r=e.harnessRoot;return!r||!Mo(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Ht(e,r){let t=Ft(e);if(t)return t;let n=fs(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function gs(e,r){return Ht(e,r)}function hs(e,r){return Ht(e,r)}function ks(e,r){return Ht(e,r)}function ys(e,r){let t=Ft(e);if(t)return t;if(!Bt(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??q(e.path);return ms(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function Rs(e,r){let t=Ft(e);if(t)return t;if(!Bt(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??q(e.path);return n&&Se(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Bt(e.path)&&ms(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as Kr,readdirSync as Ur,statSync as $u}from"node:fs";import F from"node:path";function Lt(e,r){try{let t=$u(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ss(e,r){let t=F.relative(r,e);return t===""||!t.startsWith("..")&&!F.isAbsolute(t)}function bs(e,r,t,n){let o=[];for(let s of Ot){if(s===".next")continue;let i=F.join(e,s);if(!Kr(i))continue;let a=F.resolve(i);t.has(a)||Ss(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:Lt(a,r.now)}))}return o}function xs(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...bs(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Kr(e.worktreesDir))return r;for(let n of Ur(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=F.join(e.worktreesDir,n.name);for(let s of Ur(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=F.join(o,s.name);r.push(...bs(i,e,t,{runId:n.name,worker:s.name}))}}return r}function vs(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;Kr(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:Lt(a,e.now)})))}if(!t||!Kr(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(F.resolve(i.worktreePath));for(let i of Ur(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=F.join(e.worktreesDir,i.name),u;try{u=Ur(a,{withFileTypes:!0})}catch{continue}for(let l of u){if(!l.isDirectory())continue;let c=F.resolve(F.join(a,l.name));o.has(c)||s.has(c)||Ss(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:Lt(c,e.now)}))}}return n}import{existsSync as Es,readdirSync as _s,statSync as ju}from"node:fs";import Oe from"node:path";var Gu=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function Yu(e,r){try{let t=ju(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Vu(e,r){let t=Oe.relative(r,e);return t===""||!t.startsWith("..")&&!Oe.isAbsolute(t)}function zu(e,r,t,n,o,s){if(!Es(n))return;let i=Oe.resolve(n);r.has(i)||Vu(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:Yu(i,t.now)}))}function Cs(e,r,t,n,o){for(let s of Gu)zu(e,r,t,Oe.join(n,s.dirName),s.kind,o)}function ws(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Cs(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Es(e.worktreesDir))return r;for(let n of _s(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Oe.join(e.worktreesDir,n.name),s;try{s=_s(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Oe.join(o,i.name);Cs(r,t,e,a,{runId:n.name,worker:i.name})}}return r}U();import{existsSync as As,statSync as Ju}from"node:fs";import H from"node:path";function Xu(e,r){try{let t=Ju(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function qu(e){let r=[],t=null;for(let n of e.split(`
14
- `)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function Zu(e,r){let t=H.relative(H.resolve(r),H.resolve(e));return t!==""&&!t.startsWith("..")&&!H.isAbsolute(t)}var Qu=200;function Ps(e){if(!e.includeOrphans||!As(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(H.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(H.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Se(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let u=qu(a);for(let l of u){if(i>=Qu)break;let c=H.resolve(l.path);if(c===H.resolve(s)||!Zu(c,e.worktreesDir)||t.has(c)||o.has(c)||!As(c))continue;let p=H.relative(e.worktreesDir,c).split(H.sep),g=p[0],f=p[1]??"unknown";o.add(c),i+=1,n.push({kind:"remove_worktree",path:c,bytes:null,runId:g,worker:f,repo:s,ageMs:Xu(c,e.now)})}}return n}ue();b();import Ge from"node:path";function Is(e,r){let t=Ge.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ge.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Os(e){let r=new Map;for(let t of dr(e))for(let n of Object.keys(t.workers||{})){let o=Ge.join(Te(e,t.id),"workers",x(n),"worker.json"),s=v(o,void 0);s?.worktreePath&&r.set(Ge.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ge.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Ye(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ye(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Ns(e={}){let r=e.execute===!0||e.execute!==!1&&Ye("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Ye("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??ye("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??ye("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??ye("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??ye("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),u=e.maxActionsPerSweep??ye("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),l=e.includeOrphans===!0||Ye("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Ye("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),p=e.accountBytes!==!1&&!Ye("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),g=ye("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&g>0?g:null,y=ye("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),S=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(u)&&u>0?Math.floor(u):120,includeOrphans:l,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:S}}U();import{existsSync as $t,statSync as rl}from"node:fs";import Re from"node:path";b();var Ds=1800*1e3;function tl(e,r){let t=Re.relative(r,e);return t===""||!t.startsWith("..")&&!Re.isAbsolute(t)}function nl(e,r,t){if(!$t(e))return!1;try{let n=r-rl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function jt(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ds,n=Re.resolve(e.harnessRoot,"runs"),o=Re.resolve(n,e.runId,"workers",e.workerName);if(!tl(o,n))return!1;let s=v(Re.join(o,"worker.json"),void 0);return s&&Ie(s,r,t)?!0:s?!1:nl(Re.join(o,"heartbeat.jsonl"),r,t)}function Ws(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ds;if(!$t(e.worktreePath))return null;if(e.runId&&e.workerName&&jt(e))return"active_worker";let n=Re.join(e.worktreePath,".git");if(!$t(n))return null;let o=w(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
15
- `).map(l=>l.trim()).filter(l=>l.length>0);if(N(s).length>0)return"dirty_worktree";let i=w(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let l=Number(i.stdout.trim());if(Number.isFinite(l)&&l>0)return"pr_or_unmerged_commits"}let a=w(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let u=Number(a.stdout.trim());return Number.isFinite(u)&&u>0?"pr_or_unmerged_commits":null}V();import{existsSync as ol,readdirSync as Ts,statSync as sl}from"node:fs";import il from"node:path";function Ms(e={}){let r=O(e.harnessRoot??te()),t=Pe(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!ol(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,u=null,l;try{l=Ts(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let c of l){if(!c.isDirectory())continue;i+=1;let d=il.join(t,c.name);try{let p=sl(d);u=u===null?p.mtimeMs:Math.min(u,p.mtimeMs)}catch{}try{for(let p of Ts(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let g=q(d,p);g===null?s=null:s+=g}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:u===null?null:new Date(u).toISOString(),scannedAt:o}}V();import{existsSync as al}from"node:fs";import{homedir as ul}from"node:os";import Ks from"node:path";var ll=["/var/tmp/kynver-harness",Ks.join(ul(),".openclaw","harness")];function Gt(e,r,t){if(!t?.trim())return;let n=O(t.trim());e.has(n)||(e.add(n),r.push(n))}function cl(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function Us(e={}){let r=new Set,t=[];Gt(r,t,e.harnessRoot??te());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Gt(r,t,o);if(cl(e))for(let o of ll){let s=Ks.resolve(o);!r.has(s)&&al(s)&&Gt(r,t,s)}return t}lr();function dl(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function pl(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Bs(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=pl("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=ur({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function Fs(e,r){if(!r.pressured)return e;let t=e.execute||!dl("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:t,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:r.diskGate}}ar();import{unlinkSync as fl}from"node:fs";function Br(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Hs(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function ml(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function Ls(e={}){let r=e.execute===!0||Br("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Br("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Br("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Hs("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=_e({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=ml(o.dumps,n,t),i=[],a=[],u=0;for(let l of s){if(!r){a.push({path:l.path,reason:"dry_run"});continue}try{fl(l.path),i.push({path:l.path,bytes:l.bytes,name:l.name}),u+=l.bytes}catch(c){a.push({path:l.path,reason:c.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:u,skipped:a}}function $s(e){return e?Br("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Hs("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}ar();function W(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}U();var Fr=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=w(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as gl}from"node:child_process";import{existsSync as hl}from"node:fs";import kl from"node:path";var yl=5e3;function Rl(e,r){if(!hl(kl.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=gl("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:yl}),n=t.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:n?"git_timeout":t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function js(e){let r=Rl(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
16
- `).map(t=>t.trim()).filter(Boolean)}var Hr=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=js(t)??[];return this.cache.set(t,o),o}};var Lr=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=he(r);return this.cache.set(r.id,n),n}};function bl(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Gs(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:bl(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function Sl(e={}){let r=e.harnessRoot?O(e.harnessRoot):te(),t=Us({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function xl(e){return typeof e=="string"?{reason:e}:e}function Ne(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function $r(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:q(e.path,t)}}function Ys(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function vl(e,r){return e.kind==="remove_next_cache"?hs(e,r):gs(e,r)}function _l(e,r,t){return e.kind==="remove_next_cache"?Tr(e.path,r,t):Wr(e.path,r,t)}function Cl(e){let r=new Map;for(let t of e)for(let[n,o]of Os(t))r.set(n,o);return r}function Vs(e,r){return e.runId&&e.worker?T.join(r,e.runId,e.worker):T.resolve(e.path,"..")}function zs(e){return e.indexed?!1:jt({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function El(e={}){let r=Ns(e),t=Bs();r=Fs(r,t);let n=Sl(e);W("scan",`${n.scanRoots.length} harness root(s)`);let o=Xo(n.scanRoots,n.now),s=r.finalizeStaleRuns?No().map(h=>({runId:h.runId,from:h.from,to:h.to})):[];s.length>0&&W("finalize",`${s.length} stale run(s) marked terminal`),W("index","building worktree index");let i=Cl(n.scanRoots);W("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Lr,gitStatusCache:new Hr,gitRevCache:new Fr},u=[],l=[],c=new Set,d=r.maxActionsPerSweep,p=()=>l.length>=d;for(let h of n.scanRoots){if(p())break;W("root",h);let Z=T.join(h,"worktrees"),ze=Is(i,h),Je={harnessRoot:h,worktreesDir:Z,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:ze,now:n.now},jr=r.scanDependencyCaches?ws(Je):[];W("dependency",r.scanDependencyCaches?`${jr.length} cache candidate(s) at ${h}`:"skipped (worktree-only sweep)");let Gr=0;for(let M of jr){if(p())break;Gr+=1,Gr%50===0&&W("dependency",`${Gr}/${jr.length} evaluated`);let _=T.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},I=_l(k,h,Z);if(I){Ne(u,k.path,I),l.push({...k,executed:!1,skipped:!0,skipReason:I});continue}let K=Vs(k,Z),Q=ze.get(T.resolve(K))??null,be=zs({candidate:k,indexed:Q,harnessRoot:h,now:n.now}),j=Tt({indexed:Q,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:K,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:be,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){Ne(u,k.path,j),l.push({...k,executed:!1,skipped:!0,skipReason:j});continue}l.push(vl($r(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let M of xs(Je)){if(p())break;let _=T.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},I=Mr(k.path,h,Z);if(I){Ne(u,k.path,I),l.push({...k,executed:!1,skipped:!0,skipReason:I});continue}let K=Vs(k,Z),Q=ze.get(T.resolve(K))??null,be=zs({candidate:k,indexed:Q,harnessRoot:h,now:n.now}),j=Yo({indexed:Q,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:K,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:be,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){Ne(u,k.path,j),l.push({...k,executed:!1,skipped:!0,skipReason:j});continue}l.push(ks($r(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Yr=[...vs(Je),...Ps(Je)];W("worktrees",`${Yr.length} candidate(s) at ${h}`);let Yt=new Set,Vr=0;for(let M of Yr){if(p())break;Vr+=1,Vr%50===0&&W("worktrees",`${Vr}/${Yr.length} evaluated`);let _=T.resolve(M.path);if(Yt.has(_))continue;Yt.add(_);let k={...M,path:_},I=ze.get(T.resolve(k.path))??null,K=I?null:Ws({worktreePath:k.path,harnessRoot:h,runId:k.runId,workerName:k.worker,now:n.now}),Q=Go({indexed:I,worktreePath:T.resolve(k.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:k.ageMs,orphanSafety:K,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:h,writeSalvageEvidence:r.execute});if(Q){let{reason:be,detail:j}=xl(Q);Ne(u,k.path,be,j),l.push({...k,executed:!1,skipped:!0,skipReason:be});continue}l.push(Rs($r(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let M of ns({harnessRoot:h,worktreesDir:Z,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let _=T.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},I=k.runId??T.basename(_),K=ts({harnessRoot:h,runId:I,runPath:_,ageMs:k.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(K){Ne(u,k.path,K),l.push({...k,executed:!1,skipped:!0,skipReason:K});continue}l.push(ys($r(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let g=0,f=0,y=0,S=0,R=0,A=0;for(let h of l)h.bytes&&(g+=h.bytes),!h.skipped&&!h.executed&&h.bytes&&(y+=h.bytes),h.executed?(R+=1,S+=h.bytes??0,h.kind==="remove_run_directory"&&(f+=1)):h.skipped&&(A+=1,h.skipReason==="dry_run"&&h.bytes&&(y+=h.bytes));let L=r.accountBytes?Ms({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,B=_e(),Ve=r.execute&&$s(B),$=Ve?Ls({execute:!0}):null,oe=B?{observed:!0,execute:Ve,dumpCount:B.dumpCount,totalBytes:B.totalBytes,removedCount:$?.removed.length??0,removedBytes:$?.removedBytes??0,executables:B.executables,path:B.path,reason:B.reason}:void 0;$&&$.removed.length>0&&(S+=$.removedBytes,R+=$.removed.length,W("wsl-crashes",`removed ${$.removed.length} dump(s), ${$.removedBytes} bytes`)),W("complete",`${l.length} action(s), ${A} skipped, ${R} removed`);let se=zo(l,u),P=Gs({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:l,skips:u,totals:{candidateBytes:g,reclaimableBytes:y,removedBytes:S,removedPaths:R,skippedPaths:A,skipReasons:Ys(l,u)},...L?{storage:L}:{},...se.length>0?{preservedLivePaths:se}:{},...f>0?{removedRunDirectories:f}:{},...oe?{wslCrashDumps:oe}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:l,skips:u,totals:{candidateBytes:g,reclaimableBytes:y,removedBytes:S,removedPaths:R,skippedPaths:A,skipReasons:Ys(l,u)},...L?{storage:L}:{},...se.length>0?{preservedLivePaths:se}:{},...f>0?{removedRunDirectories:f}:{},...oe?{wslCrashDumps:oe}:{},compactSummary:P}}export{Dr as DEFAULT_MAX_ACTIONS_PER_SWEEP,Mt as DEFAULT_NODE_MODULES_AGE_MS,Kt as DEFAULT_RUN_DIRECTORIES_AGE_MS,Nr as DEFAULT_WORKTREES_AGE_MS,El as runHarnessCleanup};
76
+ `),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return is(Mr.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
77
+ `),o}var il=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function al(e){e.writeSalvageEvidence&&il.has(e.skipReason)&&(ee(e.indexed,e.now)||ls({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||cs({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function ul(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(ke.has(r.run.status)||e.liveness&&Gt(r,e.liveness)||e.liveness&&fe($t(r,e.liveness))&&!ee(r))?n:t}function ll(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:ul(e)}function cl(e,r){if(e.harnessRoot?.trim())return Kr.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Kr.sep}runs${Kr.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function ds(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let u=ll(e);if(n<=0&&!t&&u<=0)return"worktrees_disabled";if(u>0&&o<u)return"below_age_threshold";if(ee(r,a))return"active_worker";let l=$t(r,e.liveness),c=cl(e,r),d=f=>{if(c)try{al({indexed:r,harnessRoot:c,skipReason:f,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return f};if(ss(r,l)){let f=d("completion_blocked");if(f)return f}if(Ht(r,e.liveness?.gitStatusCache)){let f=d("dirty_worktree");if(f)return f}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let f=d("pr_or_unmerged_commits");if(f)return f}if(os(r,e.liveness,a)||!fe(l))return"run_still_active";if(Ye(l)){let f=d("pr_or_unmerged_commits");if(f)return f}if(T(l.changedFiles).length>0){let f=d("dirty_worktree");if(f)return f}if(Ne({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:he(l.finalResult)}).blocked){let f=d("landing_blocked");if(f)return f}if(i&&e.worktreePath){let f=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(f)return f.detail?{reason:f.reason,detail:f.detail}:f.reason}return null}function Yt(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,workerFilesystemLive:i,diskPressure:a}=e;return!a&&n<t?"below_age_threshold":i||s.has(Kr.resolve(o))||r&&ee(r)?"active_worker":r&&Ht(r,e.gitStatusCache)?"dirty_worktree":null}function ps(e){return Yt(e)}var Vt=216e5,Ur=6048e5;var zt=36e5,Br=120;var fs=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function ms(e,r){let t=[],n=new Set,o=(s,i,a)=>{let u=`${s}\0${i}`;n.has(u)||t.length>=24||(n.add(u),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)fs.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||fs.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as ys,readdirSync as Rs,statSync as fl}from"node:fs";import bs from"node:path";se();q();import gs from"node:path";b();function pl(e,r){return Te(e,r)}function hs(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of gr(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=_(gs.join(Be(o,s.id),"workers",x(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=gs.resolve(u.worktreePath);pl(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of ns(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function ks(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}b();function ml(e,r){try{let t=fl(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gl(e,r){let t=bs.join(e,"runs",r,"run.json");return ys(t)?_(t,null):null}function Ss(e){try{return Rs(e).length===0}catch{return!1}}function xs(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(ks(n,r,t,i.liveRunKeys)||!Ss(n))return"run_still_active";let a=gl(r,t);return a&&!ke.has(a.status)&&!ye(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function _s(e){if(!ys(e.worktreesDir))return[];let r=[],t;try{t=Rs(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=bs.join(e.worktreesDir,o);Ss(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:ml(s,e.now)})}return r}H();import{existsSync as Xt,rmSync as Ds}from"node:fs";import{execFileSync as hl}from"node:child_process";import{existsSync as vs,readdirSync as kl,statSync as yl}from"node:fs";import Rl from"node:path";var bl=2500;function Sl(e,r=bl){if(!vs(e))return 0;try{let n=hl("du",["-sb",e],{encoding:"utf8",timeout:r,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0],o=Number(n);return Number.isFinite(o)&&o>=0?o:null}catch{return null}}function re(e,r=5e4){if(!vs(e))return 0;let t=Sl(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=kl(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Rl.join(i,u),c;try{c=yl(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as El,rmSync as Cl}from"node:fs";q();import{lstatSync as xl,readdirSync as _l}from"node:fs";function Es(e){try{let r=xl(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function Cs(e,r=32){let t=Es(e);if(!t)return!1;if(t.foreign)return!0;try{let n=_l(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Es(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as vl}from"node:child_process";import Ps from"node:path";import M from"node:path";function ws(e,r,t,n){let o=M.resolve(e),s=`${M.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=M.relative(t,i);if(a.startsWith("..")||M.isAbsolute(a))return"path_outside_harness";let u=a.split(M.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(M.resolve(r))?"path_outside_harness":null}function Fr(e,r,t){return ws(e,r,t,"node_modules")}function Lr(e,r,t){return ws(e,r,t,".next")}function Hr(e,r,t){let n=M.resolve(e),o=M.relative(t,n);return o.startsWith("..")||M.isAbsolute(o)||o.split(M.sep).length<3||!n.startsWith(M.resolve(r))?"path_outside_harness":null}function As(e,r,t){let n=M.resolve(e);return Fr(n,r,t)===null||Lr(n,r,t)===null||Hr(n,r,t)===null}function Is(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function Os(e){let r=vl("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Ns(e,r,t){if(!As(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=Os(["chown","-R",`${n}:${o}`,Ps.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Os(["rm","-rf",Ps.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var Jt="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or remove them as the harness owner with sudo available. More help: https://www.kynver.com/help.";function wl(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Ws(e,r,t={}){if(!El(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?De(n):null,i=e.bytes??re(e.path)??void 0,a=t.removePath??Cl,u=t.hasForeignOwnedEntry??Cs;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!wl(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=Is();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Jt}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let g=Ns(e.path,n,o);if(g.ok&&g.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(g.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(f){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${f.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; privileged reclaim failed: ${g.error}; ${Jt}`}}}function qt(e){let r=e.harnessRoot;return!r||!ts(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Zt(e,r){let t=qt(e);if(t)return t;let n=Ws(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Ts(e,r){return Zt(e,r)}function Ms(e,r){return Zt(e,r)}function Ks(e,r){return Zt(e,r)}function Us(e,r){let t=qt(e);if(t)return t;if(!Xt(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??re(e.path);return Ds(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function Bs(e,r){let t=qt(e);if(t)return t;if(!Xt(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??re(e.path);return n&&Ee(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Xt(e.path)&&Ds(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as $r,readdirSync as jr,statSync as Al}from"node:fs";import j from"node:path";function Qt(e,r){try{let t=Al(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ls(e,r){let t=j.relative(r,e);return t===""||!t.startsWith("..")&&!j.isAbsolute(t)}function Fs(e,r,t,n){let o=[];for(let s of Lt){if(s===".next")continue;let i=j.join(e,s);if(!$r(i))continue;let a=j.resolve(i);t.has(a)||Ls(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:Qt(a,r.now)}))}return o}function Hs(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Fs(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!$r(e.worktreesDir))return r;for(let n of jr(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=j.join(e.worktreesDir,n.name);for(let s of jr(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=j.join(o,s.name);r.push(...Fs(i,e,t,{runId:n.name,worker:s.name}))}}return r}function $s(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;$r(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:Qt(a,e.now)})))}if(!t||!$r(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(j.resolve(i.worktreePath));for(let i of jr(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=j.join(e.worktreesDir,i.name),u;try{u=jr(a,{withFileTypes:!0})}catch{continue}for(let l of u){if(!l.isDirectory())continue;let c=j.resolve(j.join(a,l.name));o.has(c)||s.has(c)||Ls(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:Qt(c,e.now)}))}}return n}import{existsSync as Ys,readdirSync as js,statSync as Pl}from"node:fs";import Me from"node:path";var Ol=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function Il(e,r){try{let t=Pl(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Nl(e,r){let t=Me.relative(r,e);return t===""||!t.startsWith("..")&&!Me.isAbsolute(t)}function Wl(e,r,t,n,o,s){if(!Ys(n))return;let i=Me.resolve(n);r.has(i)||Nl(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:Il(i,t.now)}))}function Gs(e,r,t,n,o){for(let s of Ol)Wl(e,r,t,Me.join(n,s.dirName),s.kind,o)}function Vs(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Gs(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Ys(e.worktreesDir))return r;for(let n of js(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Me.join(e.worktreesDir,n.name),s;try{s=js(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Me.join(o,i.name);Gs(r,t,e,a,{runId:n.name,worker:i.name})}}return r}H();import{existsSync as zs,statSync as Dl}from"node:fs";import G from"node:path";function Tl(e,r){try{let t=Dl(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ml(e){let r=[],t=null;for(let n of e.split(`
78
+ `)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function Kl(e,r){let t=G.relative(G.resolve(r),G.resolve(e));return t!==""&&!t.startsWith("..")&&!G.isAbsolute(t)}var Ul=200;function Js(e){if(!e.includeOrphans||!zs(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(G.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(G.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Ee(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let u=Ml(a);for(let l of u){if(i>=Ul)break;let c=G.resolve(l.path);if(c===G.resolve(s)||!Kl(c,e.worktreesDir)||t.has(c)||o.has(c)||!zs(c))continue;let p=G.relative(e.worktreesDir,c).split(G.sep),g=p[0],f=p[1]??"unknown";o.add(c),i+=1,n.push({kind:"remove_worktree",path:c,bytes:null,runId:g,worker:f,repo:s,ageMs:Tl(c,e.now)})}}return n}se();b();import Je from"node:path";function Xs(e,r){let t=Je.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Je.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function qs(e){let r=new Map;for(let t of gr(e))for(let n of Object.keys(t.workers||{})){let o=Je.join(Be(e,t.id),"workers",x(n),"worker.json"),s=_(o,void 0);s?.worktreePath&&r.set(Je.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Je.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Xe(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function be(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Zs(e={}){let r=e.execute===!0||e.execute!==!1&&Xe("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Xe("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??be("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??be("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??be("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??be("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),u=e.maxActionsPerSweep??be("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),l=e.includeOrphans===!0||Xe("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Xe("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),p=e.accountBytes!==!1&&!Xe("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),g=be("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),f=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&g>0?g:null,y=be("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),S=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(u)&&u>0?Math.floor(u):120,includeOrphans:l,runIdFilter:d?String(d):void 0,accountBytes:p,storagePerRunEntryCap:f,byteAccountingEntryCap:S}}H();import{existsSync as en,statSync as Fl}from"node:fs";import Se from"node:path";b();var Qs=1800*1e3;function Ll(e,r){let t=Se.relative(r,e);return t===""||!t.startsWith("..")&&!Se.isAbsolute(t)}function Hl(e,r,t){if(!en(e))return!1;try{let n=r-Fl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function rn(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??Qs,n=Se.resolve(e.harnessRoot,"runs"),o=Se.resolve(n,e.runId,"workers",e.workerName);if(!Ll(o,n))return!1;let s=_(Se.join(o,"worker.json"),void 0);return s&&Te(s,r,t)?!0:s?!1:Hl(Se.join(o,"heartbeat.jsonl"),r,t)}function ei(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Qs;if(!en(e.worktreePath))return null;if(e.runId&&e.workerName&&rn(e))return"active_worker";let n=Se.join(e.worktreePath,".git");if(!en(n))return null;let o=P(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
79
+ `).map(l=>l.trim()).filter(l=>l.length>0);if(T(s).length>0)return"dirty_worktree";let i=P(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let l=Number(i.stdout.trim());if(Number.isFinite(l)&&l>0)return"pr_or_unmerged_commits"}let a=P(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let u=Number(a.stdout.trim());return Number.isFinite(u)&&u>0?"pr_or_unmerged_commits":null}q();import{existsSync as $l,readdirSync as ri,statSync as jl}from"node:fs";import Gl from"node:path";function ti(e={}){let r=D(e.harnessRoot??ue()),t=De(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!$l(t))return{harnessRoot:r,worktreesDir:t,worktreesBytes:0,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o};let s=0,i=0,a=0,u=null,l;try{l=ri(t,{withFileTypes:!0})}catch{return{harnessRoot:r,worktreesDir:t,worktreesBytes:null,runCount:0,workerCount:0,oldestRunAt:null,scannedAt:o}}for(let c of l){if(!c.isDirectory())continue;i+=1;let d=Gl.join(t,c.name);try{let p=jl(d);u=u===null?p.mtimeMs:Math.min(u,p.mtimeMs)}catch{}try{for(let p of ri(d,{withFileTypes:!0}))p.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let p=e.perRunEntryCap??5e4;if(p<=0)s=null;else{let g=re(d,p);g===null?s=null:s+=g}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:u===null?null:new Date(u).toISOString(),scannedAt:o}}q();import{existsSync as Yl}from"node:fs";import{homedir as Vl}from"node:os";import ni from"node:path";var zl=["/var/tmp/kynver-harness",ni.join(Vl(),".openclaw","harness")];function tn(e,r,t){if(!t?.trim())return;let n=D(t.trim());e.has(n)||(e.add(n),r.push(n))}function Jl(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function oi(e={}){let r=new Set,t=[];tn(r,t,e.harnessRoot??ue());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])tn(r,t,o);if(Jl(e))for(let o of zl){let s=ni.resolve(o);!r.has(s)&&Yl(s)&&tn(r,t,s)}return t}fr();function Xl(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ql(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function si(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=ql("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=pr({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function ii(e,r){if(!r.pressured)return e;let t=e.execute||!Xl("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:t,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:r.diskGate}}dr();import{unlinkSync as Zl}from"node:fs";function Gr(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ai(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Ql(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function ui(e={}){let r=e.execute===!0||Gr("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Gr("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Gr("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??ai("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Ae({forceWsl:e.forceWsl});if(!o?.path)return{observation:o,execute:r,keepNewest:n,removed:[],removedBytes:0,skipped:o?.probeError?[{path:o.path??"(unresolved)",reason:o.probeError}]:[]};let s=Ql(o.dumps,n,t),i=[],a=[],u=0;for(let l of s){if(!r){a.push({path:l.path,reason:"dry_run"});continue}try{Zl(l.path),i.push({path:l.path,bytes:l.bytes,name:l.name}),u+=l.bytes}catch(c){a.push({path:l.path,reason:c.message})}}return{observation:o,execute:r,keepNewest:n,removed:i,removedBytes:u,skipped:a}}function li(e){return e?Gr("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>ai("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}dr();function K(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}H();var Yr=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=P(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as ec}from"node:child_process";import{existsSync as rc}from"node:fs";import tc from"node:path";var nc=5e3;function oc(e,r){if(!rc(tc.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=ec("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:nc}),n=t.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:n?"git_timeout":t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function ci(e){let r=oc(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
80
+ `).map(t=>t.trim()).filter(Boolean)}var Vr=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=ci(t)??[];return this.cache.set(t,o),o}};var zr=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=ye(r);return this.cache.set(r.id,n),n}};function sc(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function di(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:sc(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function ic(e={}){let r=e.harnessRoot?D(e.harnessRoot):ue(),t=oi({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function ac(e){return typeof e=="string"?{reason:e}:e}function Ke(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Jr(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:re(e.path,t)}}function pi(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function uc(e,r){return e.kind==="remove_next_cache"?Ms(e,r):Ts(e,r)}function lc(e,r,t){return e.kind==="remove_next_cache"?Lr(e.path,r,t):Fr(e.path,r,t)}function cc(e){let r=new Map;for(let t of e)for(let[n,o]of qs(t))r.set(n,o);return r}function fi(e,r){return e.runId&&e.worker?U.join(r,e.runId,e.worker):U.resolve(e.path,"..")}function mi(e){return e.indexed?!1:rn({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function dc(e={}){let r=Zs(e),t=si();r=ii(r,t);let n=ic(e);K("scan",`${n.scanRoots.length} harness root(s)`);let o=hs(n.scanRoots,n.now),s=r.finalizeStaleRuns?Zo().map(h=>({runId:h.runId,from:h.from,to:h.to})):[];s.length>0&&K("finalize",`${s.length} stale run(s) marked terminal`),K("index","building worktree index");let i=cc(n.scanRoots);K("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new zr,gitStatusCache:new Vr,gitRevCache:new Yr},u=[],l=[],c=new Set,d=r.maxActionsPerSweep,p=()=>l.length>=d;for(let h of n.scanRoots){if(p())break;K("root",h);let te=U.join(h,"worktrees"),qe=Xs(i,h),Ze={harnessRoot:h,worktreesDir:te,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:qe,now:n.now},Xr=r.scanDependencyCaches?Vs(Ze):[];K("dependency",r.scanDependencyCaches?`${Xr.length} cache candidate(s) at ${h}`:"skipped (worktree-only sweep)");let qr=0;for(let F of Xr){if(p())break;qr+=1,qr%50===0&&K("dependency",`${qr}/${Xr.length} evaluated`);let v=U.resolve(F.path);if(c.has(v))continue;c.add(v);let k={...F,path:v},W=lc(k,h,te);if(W){Ke(u,k.path,W),l.push({...k,executed:!1,skipped:!0,skipReason:W});continue}let L=fi(k,te),ne=qe.get(U.resolve(L))??null,_e=mi({candidate:k,indexed:ne,harnessRoot:h,now:n.now}),V=Yt({indexed:ne,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:L,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:_e,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){Ke(u,k.path,V),l.push({...k,executed:!1,skipped:!0,skipReason:V});continue}l.push(uc(Jr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let F of Hs(Ze)){if(p())break;let v=U.resolve(F.path);if(c.has(v))continue;c.add(v);let k={...F,path:v},W=Hr(k.path,h,te);if(W){Ke(u,k.path,W),l.push({...k,executed:!1,skipped:!0,skipReason:W});continue}let L=fi(k,te),ne=qe.get(U.resolve(L))??null,_e=mi({candidate:k,indexed:ne,harnessRoot:h,now:n.now}),V=ps({indexed:ne,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:L,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:_e,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(V){Ke(u,k.path,V),l.push({...k,executed:!1,skipped:!0,skipReason:V});continue}l.push(Ks(Jr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Zr=[...$s(Ze),...Js(Ze)];K("worktrees",`${Zr.length} candidate(s) at ${h}`);let nn=new Set,Qr=0;for(let F of Zr){if(p())break;Qr+=1,Qr%50===0&&K("worktrees",`${Qr}/${Zr.length} evaluated`);let v=U.resolve(F.path);if(nn.has(v))continue;nn.add(v);let k={...F,path:v},W=qe.get(U.resolve(k.path))??null,L=W?null:ei({worktreePath:k.path,harnessRoot:h,runId:k.runId,workerName:k.worker,now:n.now}),ne=ds({indexed:W,worktreePath:U.resolve(k.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:k.ageMs,orphanSafety:L,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:h,writeSalvageEvidence:r.execute});if(ne){let{reason:_e,detail:V}=ac(ne);Ke(u,k.path,_e,V),l.push({...k,executed:!1,skipped:!0,skipReason:_e});continue}l.push(Bs(Jr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let F of _s({harnessRoot:h,worktreesDir:te,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(p())break;let v=U.resolve(F.path);if(c.has(v))continue;c.add(v);let k={...F,path:v},W=k.runId??U.basename(v),L=xs({harnessRoot:h,runId:W,runPath:v,ageMs:k.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(L){Ke(u,k.path,L),l.push({...k,executed:!1,skipped:!0,skipReason:L});continue}l.push(Us(Jr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let g=0,f=0,y=0,S=0,R=0,O=0;for(let h of l)h.bytes&&(g+=h.bytes),!h.skipped&&!h.executed&&h.bytes&&(y+=h.bytes),h.executed?(R+=1,S+=h.bytes??0,h.kind==="remove_run_directory"&&(f+=1)):h.skipped&&(O+=1,h.skipReason==="dry_run"&&h.bytes&&(y+=h.bytes));let B=r.accountBytes?ti({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,C=Ae(),xe=r.execute&&li(C),I=xe?ui({execute:!0}):null,Y=C?{observed:!0,execute:xe,dumpCount:C.dumpCount,totalBytes:C.totalBytes,removedCount:I?.removed.length??0,removedBytes:I?.removedBytes??0,executables:C.executables,path:C.path,reason:C.reason}:void 0;I&&I.removed.length>0&&(S+=I.removedBytes,R+=I.removed.length,K("wsl-crashes",`removed ${I.removed.length} dump(s), ${I.removedBytes} bytes`)),K("complete",`${l.length} action(s), ${O} skipped, ${R} removed`);let N=ms(l,u),A=di({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:l,skips:u,totals:{candidateBytes:g,reclaimableBytes:y,removedBytes:S,removedPaths:R,skippedPaths:O,skipReasons:pi(l,u)},...B?{storage:B}:{},...N.length>0?{preservedLivePaths:N}:{},...f>0?{removedRunDirectories:f}:{},...Y?{wslCrashDumps:Y}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:l,skips:u,totals:{candidateBytes:g,reclaimableBytes:y,removedBytes:S,removedPaths:R,skippedPaths:O,skipReasons:pi(l,u)},...B?{storage:B}:{},...N.length>0?{preservedLivePaths:N}:{},...f>0?{removedRunDirectories:f}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:A}}export{Br as DEFAULT_MAX_ACTIONS_PER_SWEEP,Vt as DEFAULT_NODE_MODULES_AGE_MS,zt as DEFAULT_RUN_DIRECTORIES_AGE_MS,Ur as DEFAULT_WORKTREES_AGE_MS,dc as runHarnessCleanup};