@kynver-app/runtime 0.2.117 → 0.2.122
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/cli.js +196 -172
- package/dist/daemon-tick-thread.js +111 -0
- package/dist/desktop-entry.js +153 -134
- package/dist/index.js +219 -195
- package/dist/local-run-store/index.js +9 -9
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +3 -3
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/model-routing.js +3 -3
- package/dist/server/monitor.js +7 -7
- package/dist/server/worker-policy.js +2 -2
- package/package.json +2 -2
package/dist/server/cleanup.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var
|
|
2
|
-
`),
|
|
1
|
+
var f=(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 qt}from"node:os";import Zt from"node:path";function oi(e){return e==="~"?qt():e.startsWith("~/")||e.startsWith("~\\")?Zt.join(qt(),e.slice(2)):e}function G(e){return Zt.resolve(oi(e))}var re=f(()=>{"use strict"});var Qt=f(()=>{"use strict"});import{existsSync as si,mkdirSync as ii,readFileSync as en,readdirSync as ec,renameSync as ai,rmSync as ui,statSync as rn,writeFileSync as li}from"node:fs";import{randomBytes as ci}from"node:crypto";import di from"node:path";function Ze(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(en(e,"utf8"))}catch(t){if(arguments.length>1)return r;Ze(`failed to read ${e}: ${t.message}`)}}function Qr(e,r){ii(di.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${ci(4).toString("hex")}.tmp`;try{li(t,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`),ai(t,e)}catch(n){try{ui(t,{force:!0})}catch{}throw n}}function x(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function er(e){try{return rn(e).size}catch{return 0}}function rr(e){try{return rn(e).mtime.toISOString()}catch{return null}}function tn(e,r){return si(e)?en(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
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=
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
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()&&(
|
|
4
|
+
`):""}function Y(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function nn(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 et(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var b=f(()=>{"use strict";Qt()});var pi,sc,mi,ic,on=f(()=>{"use strict";pi=["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"],sc=new Set(pi),mi=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],ic=new Set(mi)});import{spawnSync as an}from"node:child_process";function ve(e,r,t={}){let n=an("git",r,Zr({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=fi(e,r,n);if(t.throwError)throw new Error(o);Ze(o)}return n.stdout||""}function fi(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 Te(e){return ve(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=an("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 sn(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 tr(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 xe(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return xe(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 xe(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=sn(e,i,a),l=sn(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 xe(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var U=f(()=>{"use strict";re();b();on()});var rt=f(()=>{"use strict";U()});var nr=f(()=>{"use strict";U();re();rt()});var tt=f(()=>{"use strict";b()});function ae(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 or(e,r){return e[r]?.trim()||null}function un(e){let r=e?.split(":")[0]?.trim();return r?ae(r):null}function _e(e=process.env,r={}){let t=[],n=un(r.boxId),o=un(or(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ae(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ae(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=or(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ae(i)&&t.push(`KYNVER_BOX_ID=${or(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ae(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=or(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 ue=f(()=>{"use strict"});function nt(e,r){return e==="forge"?4:Math.max(1,r)}function sr(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var ir=f(()=>{"use strict"});var ln=f(()=>{"use strict"});import{existsSync as gi,readFileSync as hi,statfsSync as ki}from"node:fs";function ot(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!gi(e))continue;let r=hi(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function cn(e={}){if(!(e.forceWsl===void 0?ot():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ce,n=e.wslHostFreeWarnBytes??yi,o=e.wslHostFreeCriticalBytes??Ri,s=e.statfs??ki,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),m=null;return p||(m=`Windows host disk ${t} at ${d?"critical":"warning"}: ${g} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${bi()}`),{ok:p,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:m,probeError:null}}function bi(){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 yi,Ri,Ce,st=f(()=>{"use strict";yi=25*1024*1024*1024,Ri=12*1024*1024*1024,Ce="/mnt/c"});import{execFileSync as dn}from"node:child_process";import{existsSync as ur,readFileSync as pn,readdirSync as Si,statSync as xi}from"node:fs";import it from"node:path";function ar(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function mn(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=dn("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()||Ce;return r&&ur(it.join(t,"Users",r))?r:null}function wi(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()||Ce,n=e.windowsUser??mn();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Ai(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 Pi(){try{if(ur("/proc/sys/kernel/core_pattern"))return pn("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return dn("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Ii(e){return!!(e&&/wsl-capture-crash/i.test(e))}function Oi(e,r=Ce){let t=it.join(r,"Users",e,".wslconfig");if(!ur(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=pn(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 Ni(e){if(!ur(e))return[];let r=Si(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=it.join(e,n.name);try{let s=xi(o),i=Ai(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 Ee(e={}){if(!(e.forceWsl===void 0?ot():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Ce,n=e.windowsUser??mn(),o=e.warnBelowBytes??ar("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",vi),s=e.criticalBelowBytes??ar("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",_i),i=e.warnCount??ar("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Ci),a=e.criticalCount??ar("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Ei),u=(e.readCorePattern??Pi)(),l=Ii(u),c=null;n&&(c=(e.readWslConfig??Oi)(n,t));let d=c?.maxCrashDumpCount??null,p=d===-1,g=wi({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 m;try{m=(e.listDumps??Ni)(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=m.reduce((P,h)=>P+h.bytes,0),S=m.length,R=[...new Set(m.map(P=>P.executableHint).filter(P=>!!P))],A=y>=s,L=y>=o,B=S>=a,Je=S>=i,se=!(A||B||L||Je),ie=null;if(!se){let P=A||B?"critical":"warning",h=(y/1024**3).toFixed(1),Q=R.length>0?R.join(", "):"unknown";ie=`WSL crash dumps ${P}: ${S} file(s), ${h} GiB at ${g} (executables: ${Q}). `+Di({wslCaptureEnabled:l,dumpsDisabledInWslConfig:p})}return{ok:se,path:g,windowsUser:n,dumpCount:S,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:m,executables:R,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:p,reason:ie,probeError:null}}function Di(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 vi,_i,Ci,Ei,lr=f(()=>{"use strict";st();vi=5*1024*1024*1024,_i=10*1024*1024*1024,Ci=2,Ei=4});import{statfsSync as Wi}from"node:fs";function cr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Ti,n=e.diskFreeCriticalBytes??Mi,o=e.diskMaxUsedPercent??Ki,s=e.diskHardMaxUsedPercent??Ui,i=Wi(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,m=p&&l>s,y=!c&&!d&&!g&&!m,S=e.skipWslHostCheck?null:cn(e.wslHost),R=e.skipWslCrashDumpCheck?null:Ee(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,m?`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("; ")),Bi({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 Bi(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 Ti,Mi,Ki,Ui,dr=f(()=>{"use strict";lr();st();Ti=30*1024*1024*1024,Mi=15*1024*1024*1024,Ki=80,Ui=90});import{existsSync as Fi,readdirSync as Hi,statSync as Li}from"node:fs";import at from"node:path";function pr(){return gn()}function ut(){let{runsDir:e}=pr();return fn(e)}function mr(e){return fn(V(e))}function $i(e){try{return Li(e).isDirectory()}catch{return!1}}function fn(e){if(!Fi(e))return[];let r=[];for(let t of Hi(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=at.join(e,t.name);if(!$i(n))continue;let o=v(at.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function lt(e){let{runsDir:r}=pr();Qr(at.join(ct(r,e.id),"run.json"),e)}function Me(e){let{harnessRoot:r}=pr();return Ke(r,e)}function Ke(e,r){return ct(V(e),x(r))}var le=f(()=>{"use strict";z();b()});import{existsSync as ji,readdirSync as Gi}from"node:fs";import Yi from"node:path";function dt(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(x(n));let t=Yi.join(Me(e.id),"workers");if(!ji(t))return[...r];for(let n of Gi(t,{withFileTypes:!0}))n.isDirectory()&&r.add(x(n.name));return[...r]}var pt=f(()=>{"use strict";le();b()});function mt(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.trim();if(!r)return null;let t=mt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=mt(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=mt(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function kn(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?hn(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=hn(t);return n||t}var yn=f(()=>{"use strict"});import{existsSync as Vi,readFileSync as zi}from"node:fs";function Rn(e){return e==="complete"}function bn(e){return Rn(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function we(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Vi(e))return r;let t=Date.now()+Ji,n=new Date(t).toISOString(),o=zi(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)),Rn(r.lastHeartbeatPhase)&&(r.terminalFinalResult=kn(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 Ji,fr=f(()=>{"use strict";yn();b();Ji=6e4});function xn(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function gr(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 vn(e){let r=xn(e[0]);return!!(r&&Xi.has(r))}function Zi(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Qi(e){if(!e||e.includes("*"))return null;let r=Zi(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function _n(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function ft(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function ea(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function ra(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;Sn.has(n)&&(t+=1);continue}r.push(n)}}return r}function ta(e){let r=!1,t=e.map((o,s)=>{let i=ea(o),a=e[s-1];return a&&Sn.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=ra(t);if(n.length===2){let[o,s]=n;if(ft(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Qi(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 Cn(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 hr(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=gr(r);if(!t.length)return{command:r,wrapped:!1};let n=xn(t[0]);if(!n||!qi.has(n))return{command:r,wrapped:!1};let o=Cn(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 na(e,r){let t=e.trim(),n=gr(t),o=Cn(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function oa(e){let r=e.trim(),t=hr(r),n=gr(t.command);if(!n.length||!vn(n))return{segment:r,changed:!1};let o=ta(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:na(r,s),changed:!0}:{segment:s,changed:!0}}function gt(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=oa(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function En(e){let r=hr(e).command,t=gr(r.trim());return t.length&&vn(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 sa(e){let{pattern:r,target:t}=wn(e);return r?ft(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:_n(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function ia(e){let{pattern:r,target:t}=wn(e);if(!r)return null;if(ft(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&_n(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function aa(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 ua(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 ht(e){let r=e.meta?.trim()||(e.command?ua(e.command):null)||null;if(r){let t=sa(r),n=aa(t);if(n)return n;let o=ia(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=gt(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 Xi,qi,Sn,An=f(()=>{"use strict";Xi=new Set(["rg","ripgrep","grep"]),qi=new Set(["bash","sh","dash","zsh"]),Sn=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Ue(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function da(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 Be(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function pa(e){let r=e.metadata;if(!Be(r))return null;let t=r.vulnerabilities;if(!Be(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 ma(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 fa(e,r){let t=e.error;if(Be(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?Ue(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function ga(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=da(r);if(!t||!Be(t)){let o=Ue(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(Be(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${fa(t,e.stderr)}`};let n=pa(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:ma(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function ha(e){return la.test(e)}function ka(e){let r=hr(e).command;return Pn.test(e)||Pn.test(r)||En(e)}function ya(e){let r=ht({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&&ca.test(n)){let i=Ue(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=gt(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=Ue(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 In(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(ha(e.command)){let i=r.trim()||n.trim()||t.trim();return ga({exitCode:e.exitCode,stdout:i,stderr:t})}if(ka(e.command))return ya({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=ht({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=Ue(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var la,Pn,ca,On=f(()=>{"use strict";An();la=/\bnpm\s+audit\b/i,Pn=/\b(rg|ripgrep)\b/i,ca=/\b(error|invalid|unknown|panic|not found)\b/i});function Fe(e){return typeof e=="string"&&Ra.test(e.trim())}function kr(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 Ra,yr=f(()=>{"use strict";Ra=/^(?:provider authentication failed:\s*)?(?:(?:Failed to authenticate|authentication (?:failed|error))(?::\s*[^\n.!?]+)?|OAuth session expired and could not be refreshed)[.!]?$/i});function kt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ba(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 Nn(e){if(e.event==="step_update"&&kt(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"||!kt(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=kt(r.usage)?ba(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 Dn=f(()=>{"use strict"});function yt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Wn(){return{assistantText:""}}function Sa(e,r){if(!(r.role!=="assistant"||typeof r.content!="string")){if(r.delta===!0){e.assistantText+=r.content;return}e.assistantText=r.content}}function xa(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=(yt(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 va(e){return e.type!=="result"||e.status!=="success"&&e.status!=="error"?!1:typeof e.result!="string"}function Tn(e,r){if(e.type==="message"&&(e.role==="assistant"||e.role==="user"))return Sa(r,e),{};if(e.type==="tool_use"&&typeof e.tool_name=="string"&&e.tool_name.trim())return{currentTool:e.tool_name.trim()};if(!va(e))return null;let t=yt(e.stats)?xa(e.stats):void 0;if(e.status==="error"){let o=yt(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 Mn=f(()=>{"use strict"});import{existsSync as _a,readFileSync as Ca}from"node:fs";function Ea(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function wa(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 Aa(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",kr(r)&&(e.providerTerminalError=!0,e.error=String(r.result||r.api_error_status||"stream result error"))}function Ae(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function Pa(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Ia(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 Oa(e,r){let t=Pa(r);if(!t)return;let n=Ae(t.input_tokens)??Ae(t.inputTokens)??Ae(t.prompt_tokens),o=Ae(t.output_tokens)??Ae(t.outputTokens)??Ae(t.completion_tokens);if(n===void 0&&o===void 0)return;let s=Ia(r)??e.usage?.model;e.usage={...n!==void 0?{inputTokens:n}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Na(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 Da(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Kn(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!_a(e))return r;let t=Ca(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean),n=null,o=Wn();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=Ea(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(m=>m?.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=wa(p);g&&(r.currentTool=g)}let u=Na(i);u&&Da(r,In({command:u.command,exitCode:u.exitCode,stdout:u.stdout,stderr:u.stderr,interleavedOutput:u.interleaved}));let l=Nn(i),c=l?null:Tn(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"&&Aa(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"}Oa(r,i)}return r}var Un=f(()=>{"use strict";On();b();yr();Dn();Mn()});function Bn(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Rt(e){let r=(e??"").trim();if(!r)return null;if(Fe(r))return{blocked:!0,reason:`provider authentication failed: ${Bn(r)}`};for(let t of Wa)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Bn(r)}`};return null}var Wa,Fn=f(()=>{"use strict";yr();Wa=[{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 Hn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ta(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 Ma(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Hn(e.head)}function Ka(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 Ln(e){if(e.alive||Ta(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Hn(e.headCommit)??Ma(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:Ka(s,r,t)}}var $n=f(()=>{"use strict"});import{existsSync as Ua,readFileSync as Ba,statSync as Yn}from"node:fs";import Rr from"node:path";function $a(e,r=process.env){let t=e?Ha:Fa,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 ja(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function bt(e){try{return Yn(e).mtimeMs}catch{return-1}}function Ga(e){let r=Rr.join(e,".git");try{if(Yn(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(Ba(r,"utf8"));return t?Rr.resolve(e,t[1].trim()):null}catch{return null}}function jn(e){let r=Ga(e);return[bt(e),r?bt(Rr.join(r,"HEAD")):-2,r?bt(Rr.join(r,"index")):-2].join(":")}function Gn(e,r){return{changedFiles:Te(e),gitAncestry:tr(e,{base:r.base,baseCommit:r.baseCommit})}}function Ya(e,r){for(te.delete(e),te.set(e,r);te.size>La;){let t=te.keys().next().value;if(t===void 0)break;te.delete(t)}}function Vn(e,r,t){let n=ja(r);if(!e||!e.trim())return He.missingWorktree++,{changedFiles:[],gitAncestry:xe(n,"missing worktree path")};let o=`${e}\0${n}`;if(!Ua(e))return te.delete(o),He.missingWorktree++,{changedFiles:[],gitAncestry:xe(n,`worktree no longer exists: ${e}`)};if(t.alive)return te.delete(o),He.liveProbes++,Gn(e,r);let s=t.ttlMs??$a(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=jn(e),u=te.get(o);if(s>0&&u&&u.fingerprint===a&&i<u.expiresAt)return He.hits++,u.probe;He.misses++;let l=Gn(e,r);if(s>0){let c=.8+.4*(t.random??Math.random)();Ya(o,{fingerprint:jn(e),expiresAt:i+Math.round(s*c),probe:l})}return l}var Fa,Ha,La,te,He,zn=f(()=>{"use strict";U();Fa=10*6e4,Ha=60*6e4,La=2048,te=new Map,He={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function Le(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Va(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 za(e){if(Le(e.headCommit)||Le(e.prUrl)||Le(e.artifactBundlePath)||Le(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Le(r.head))}function Pe(e){return Va(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:za(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 Jn(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var br=f(()=>{"use strict"});function St(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.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Sr(e){let r=e.trim();if(!r)return null;let t=St(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=St(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=St(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=Xn(u);for(let c of n){let d=Xn(c);d>l&&(u=c,l=d)}return u}var xt=f(()=>{"use strict"});function qn(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 Zn(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Ja(e){return new Set(e.map(r=>Zn(qn(r)??r)).filter(Boolean))}function Qn(e,r,t){let n=qn(e)??e;if(!n)return"unrelated";let o=Zn(n);return Ja(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var eo=f(()=>{"use strict"});function Ie(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xa(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ce(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ie(e)}function xr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function ro(e){let r=null;if(typeof e=="string"){let o=Sr(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=ce(String(s.prUrl??s.pr_url??"")),a=Ie(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:Ie(s.mergeCommit??s.merge_commit),reason:Ie(s.reason)})}return n}function to(e,r){let t=[],n=ce(Ie(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=ce(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function no(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(!Xa(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?ce(Ie(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?ce(r.targetPrUrls[0]):null):null;if(s){let d=to(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 m=ro(n).find(y=>y.prUrl===s);if(!m||m.outcome!=="merged"&&!(m.reason?.trim()&&(m.outcome==="skipped"||m.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=ro(n),a=new Map(i.map(d=>[xr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>xr(ce(d)??d)).filter(Boolean)),l=to(t,n);if(r.landingOnly)for(let d of l){let p=a.get(xr(d)),g=Qn(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=xr(ce(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 oo(e){if(e.blocked)return e.detail??e.reason}var so=f(()=>{"use strict";xt();eo()});function Qa(e){let r=Date.now();if(e.providerTerminalError||kr(e.finalResult)||e.finalResult&&e.error?.trim()||Fe(e.error)||Fe(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:Rt(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!io(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&ru(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=Pe(o);if(s.blocked){let i=Jn(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=no({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=oo(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(eu(e))return{state:"done",reason:"empty abandoned worker record"};let o=Rt(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ln({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>qa)return{state:"needs_attention",reason:`no first stream event ${et(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Za?{state:"stale",reason:`no log/event/heartbeat activity for ${et(n)}s`}:{state:"ok",reason:"recent activity"}}function io(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function eu(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 ru(e){let r=null;if(typeof e=="string"?r=Sr(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 tu(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??bn(t))}function vr(e,r={}){let t=Kn(e.stdoutPath),n=we(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=tu(e,t.finalResult,n),i=o?!1:Y(e.pid),a=er(e.stdoutPath),u=er(e.stderrPath),l=er(e.heartbeatPath),{changedFiles:c,gitAncestry:d}=Vn(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=nn([t.lastEventAt,n.lastHeartbeatAt,rr(e.stdoutPath),rr(e.stderrPath),rr(e.heartbeatPath)]),g=t.error||!i&&!s&&tn(e.stderrPath,10).trim()||void 0,m=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=io(m)?null:m,S=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,R=Qa({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 de(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function ao(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var qa,Za,pe=f(()=>{"use strict";fr();Un();yr();Fn();$n();zn();br();so();xt();b();qa=18e4,Za=6e5});var uo=f(()=>{"use strict";pe();b()});function lo(e,r={}){let t=r.perWorkerMemBytes??vt,n=r.memReserveBytes??_t,o=r.memUtilization??Ct,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,_r)}var vt,_t,Ct,_r,co=f(()=>{"use strict";ln();fe();ue();ir();Cr();dr();le();pt();uo();b();vt=500*1024*1024,_t=4*1024*1024*1024,Ct=.85,_r=64});function $e(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Et(e){let r=e.config??{},t=e.env??process.env,n=$e(r.perWorkerMemBytes,vt),o=$e(r.memReserveBytes,_t),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Ct)),i=lo(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:$e(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=$e(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,_r),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&$e(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,_r),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var Cr=f(()=>{"use strict";co()});import{homedir as nu}from"node:os";import ou from"node:path";var po,wt=f(()=>{"use strict";po=ou.join(nu(),".kynver",".env")});var mo=f(()=>{"use strict"});var fo=f(()=>{"use strict";mo()});var go=f(()=>{"use strict"});var ho=f(()=>{"use strict";b()});var At=f(()=>{"use strict";fo();go();ho()});var ko=f(()=>{"use strict"});var yo=f(()=>{"use strict";ko()});var Er=f(()=>{"use strict";wt();re();fe();At();yo()});var So=f(()=>{"use strict";ue();ue()});var xo=f(()=>{"use strict";wt();At();Er()});var Pt=f(()=>{"use strict"});import{existsSync as J,mkdirSync as iu,readdirSync as wr,renameSync as vo,statSync as au}from"node:fs";import X from"node:path";function Co(e){try{return au(e).isDirectory()}catch{return!1}}function uu(e){if(!J(e))return!0;for(let r of _o){let t=X.join(e,r);if(J(t)&&(!Co(t)||wr(t).length>0))return!1}return!0}function lu(e){let r=X.join(e,"runs");if(!J(r)||!Co(r))return!1;for(let t of wr(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=X.join(r,t.name,"run.json");if(v(n,void 0)?.id)return!0}return!1}function cu(e){let r=X.join(e,"runs");if(!J(r))return!1;for(let t of wr(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(v(X.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function du(e){let r=X.join(e,"ghost");return J(r)?!J(X.join(r,"runs")):cu(e)}function Eo(e){return lu(e.sharedRoot)?uu(e.forgeRoot)?du(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 wo(e,r){iu(r,{recursive:!0});for(let t of _o){let n=X.join(e,t),o=X.join(r,t);if(J(n)){if(J(o)&&wr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(J(o)){vo(n,o);continue}vo(n,o)}}}var _o,Ao=f(()=>{"use strict";b();_o=["runs","worktrees"]});import{existsSync as E}from"node:fs";import{homedir as pu}from"node:os";import C from"node:path";function It(e=process.env){return e.HOME?.trim()||pu()}function Ot(e=process.env){return C.join(It(e),".kynver","harness")}function Ar(e){let r=C.resolve(G(e.trim()));for(;mu.has(C.basename(r));)r=C.dirname(r);return r}function fu(e,r=process.env){return C.join(Ot(r),e)}function gu(e=process.env){let r=Ot(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(It(e),Po);return E(t)}function Pr(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Ar(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Ar(n),source:"config"};let o=fu(e.boxKind,r);if(E(C.join(o,"runs"))||E(o)&&!hu(o))return{harnessRoot:o,source:"box_scoped"};let i=Ot(r);if(e.boxKind==="forge"){let a=Eo({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&&wo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&gu(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(It(r),Po);if(E(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function hu(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 Po,mu,Nt=f(()=>{"use strict";re();Ao();Po=C.join(".openclaw","harness");mu=new Set(["runs","worktrees"])});import Io from"node:os";function Ir(e){return e?.trim()?e.trim():null}function ku(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function yu(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 Or(e=me(),r=process.env,t={}){let n=_e(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Ir(r.KYNVER_BOX_KIND)),a=t.strict===!0||yu(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=Ir(e.runnerId),l=Ir(r.KYNVER_RUNTIME_ID)??Ir(r.OPENCLAW_RUNTIME_ID),c=u??l??ku(n.boxKind,Io.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=Et({config:e,env:r,totalMemBytes:Io.totalmem()}),g=sr(n.boxKind,p.configuredMaxWorkers??nt(n.boxKind,p.autoCap)),m=Pr({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return m.migrationBlocker&&s.push(m.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:m.harnessRoot,harnessRootSource:m.source},errors:s,warnings:o}}var Nr=f(()=>{"use strict";fe();ue();ir();Cr();Nt()});var No=f(()=>{"use strict";nr();ue();So();fe();Er();xo();tt();Pt();Nr()});var xu,Em,Do=f(()=>{"use strict";xu=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],Em=xu.join("|")});var Wo=f(()=>{"use strict";re()});var To=f(()=>{"use strict";Wo()});var Mo=f(()=>{"use strict"});var Ko=f(()=>{"use strict";Mo()});import{existsSync as _u,mkdirSync as Qm,readFileSync as Cu,writeFileSync as ef}from"node:fs";import{homedir as Eu,totalmem as tf}from"node:os";import Dt from"node:path";function wu(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:G(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:G(e.defaultRepo.trim())}:{}}}function me(){if(!_u(Uo))return{};try{return wu(JSON.parse(Cu(Uo,"utf8")))}catch{return{}}}var Bo,Uo,Rf,bf,Sf,fe=f(()=>{"use strict";nr();re();tt();ue();ir();Cr();dr();Er();No();Do();Nr();To();Pt();Ko();Bo=Dt.join(Eu(),".kynver"),Uo=Dt.join(Bo,"config.json"),Rf=Dt.join(Bo,"credentials");bf=500*1024*1024,Sf=4*1024*1024*1024});import Wt from"node:path";function O(e){return Ar(e)}function ne(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return O(e);let r=me(),t=r.harnessRoot?.trim();if(t)return O(t);let n=Or(r,process.env);return n.identity?n.identity.harnessRoot:Pr({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function V(e){return Wt.join(O(e),"runs")}function Oe(e){return Wt.join(O(e),"worktrees")}function gn(){let e=ne();return{harnessRoot:e,runsDir:V(e),worktreesDir:Oe(e)}}function ct(e,r){return Wt.join(e,x(r))}var z=f(()=>{"use strict";fe();Nt();Nr();b()});z();import T from"node:path";br();import Tr from"node:path";U();pe();var Tt=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Fo(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Tt)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!Fo(n)})}function ge(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 je(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?N(e.changedFiles).length>0:!!(ge(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Ge(e){return e.status||(e.status=vr(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Mt(e,r){if(e.status)return N(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Te(e.worktreePath);return N(t).length>0}function Au(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Kt(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=Au(e);if(o&&!Y(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Te(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"}:tr(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??ge(s)};return e.status=c,c}return Ge(e)}pe();le();pt();pe();b();import Pu from"node:path";var Iu=new Set(["running","dispatching","pending","queued","needs_attention"]),he=new Set(["completed","failed","cancelled","done"]);function ke(e){let r=dt(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=v(Pu.join(Me(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let u=vr(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),ao(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Ho(){let e=[];for(let r of ut()){if(!Iu.has(r.status))continue;let t=ke(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,lt(r),e.push({runId:r.id,from:n,to:t})}return e}pe();fr();import{existsSync as Dr,mkdirSync as ig,readdirSync as jo,renameSync as ag,statSync as Ou}from"node:fs";import ye from"node:path";fe();nr();re();rt();U();fr();z();le();z();b();import oe from"node:path";var rg=`${oe.sep}runs${oe.sep}runs${oe.sep}`;function Lo(e){return{workerJsonPath:oe.join(e,"worker.json"),stdoutPath:oe.join(e,"stdout.jsonl"),stderrPath:oe.join(e,"stderr.log"),heartbeatPath:oe.join(e,"heartbeat.jsonl"),lastStatusPath:oe.join(e,"last-status.json")}}b();var Ye=900*1e3,hg=3600*1e3;function Go(e,r){let t=ye.resolve(e),n=ye.resolve(V(r)),o=ye.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ye.isAbsolute(o)}function Nu(e){if(!Dr(e))return[];try{return jo(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Du(e){let r=ye.join(e,"workers");if(!Dr(r))return[];try{return jo(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function $o(e,r,t){if(!Dr(e))return!1;try{let n=r-Ou(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Wu(e,r=Date.now(),t=Ye){if(!Dr(e))return!1;let n=Lo(e),o=v(n.workerJsonPath,void 0);if(o?.status==="running"&&Y(o.pid))return!0;let s=we(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!($o(n.stdoutPath,r,t)||$o(n.heartbeatPath,r,t))}function Tu(e,r=Date.now(),t=Ye){for(let n of Du(e))if(Wu(ye.join(e,"workers",n),r,t))return!0;return!1}function Yo(e,r=Date.now()){let t=new Set,n=V(e);for(let o of Nu(n)){let s=ye.join(n,o);Tu(s,r)&&t.add(`${e}\0${o}`)}return t}b();function Mu(e,r=Date.now(),t=Ye){let n=we(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Ne(e,r=Date.now(),t=Ye){return Y(e.pid)?!0:Mu(e,r,t)}function Ku(e,r){return r?r.runTerminalCache.derive(e.run):ke(e.run)}function q(e,r=Date.now()){return Ne(e.worker,r)}function Ut(e,r){return he.has(e.run.status)?!1:Ku(e,r)!==null}function Vo(e,r,t=Date.now()){if(q(e,t))return!0;if(he.has(e.run.status)||Ut(e,r))return!1;let n=Ge(e);return de(n)?!1:!!q(e,t)}br();pe();function zo(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(q(e))return!0;let n=r??Ge(e);return!!(!de(n)||je(n)||N(n.changedFiles).length>0||Pe({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:ge(n.finalResult)}).blocked)}U();b();import{existsSync as Xo,mkdirSync as Uu,writeFileSync as Jo}from"node:fs";import Wr from"node:path";function qo(e,r,t){return Wr.join(e,"salvage",x(r),x(t))}function Zo(e){return Xo(Wr.join(qo(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Qo(e){let r=qo(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Uu(r,{recursive:!0});let t=Wr.join(r,"salvage.patch"),n=!1;if(Xo(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()&&(Jo(t,a.endsWith(`
|
|
11
11
|
`)?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
|
|
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
|
|
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}
|
|
16
|
-
`).map(t=>t.trim()).filter(Boolean)}var
|
|
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 Jo(Wr.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
13
|
+
`),o}var Bu=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Fu(e){e.writeSalvageEvidence&&Bu.has(e.skipReason)&&(q(e.indexed,e.now)||Zo({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})||Qo({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}))}function Hu(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(he.has(r.run.status)||e.liveness&&Ut(r,e.liveness)||e.liveness&&de(Kt(r,e.liveness))&&!q(r))?n:t}function Lu(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:Hu(e)}function $u(e,r){if(e.harnessRoot?.trim())return Tr.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Tr.sep}runs${Tr.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function es(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=Lu(e);if(n<=0&&!t&&u<=0)return"worktrees_disabled";if(u>0&&o<u)return"below_age_threshold";if(q(r,a))return"active_worker";let l=Kt(r,e.liveness),c=$u(e,r),d=m=>{if(c)try{Fu({indexed:r,harnessRoot:c,skipReason:m,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})}catch{}return m};if(zo(r,l)){let m=d("completion_blocked");if(m)return m}if(Mt(r,e.liveness?.gitStatusCache)){let m=d("dirty_worktree");if(m)return m}let p=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(p!=null&&p>0){let m=d("pr_or_unmerged_commits");if(m)return m}if(Vo(r,e.liveness,a)||!de(l))return"run_still_active";if(je(l)){let m=d("pr_or_unmerged_commits");if(m)return m}if(N(l.changedFiles).length>0){let m=d("dirty_worktree");if(m)return m}if(Pe({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:ge(l.finalResult)}).blocked){let m=d("landing_blocked");if(m)return m}if(i&&e.worktreePath){let m=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(m)return m.detail?{reason:m.reason,detail:m.detail}:m.reason}return null}function Bt(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(Tr.resolve(o))||r&&q(r)?"active_worker":r&&Mt(r,e.gitStatusCache)?"dirty_worktree":null}function rs(e){return Bt(e)}var Ft=216e5,Mr=6048e5;var Ht=36e5,Kr=120;var ts=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function ns(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)ts.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||ts.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as as,readdirSync as us,statSync as Yu}from"node:fs";import ls from"node:path";le();z();import os from"node:path";b();function Gu(e,r){return Ne(e,r)}function ss(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of mr(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=v(os.join(Ke(o,s.id),"workers",x(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=os.resolve(u.worktreePath);Gu(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of Yo(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function is(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}b();function Vu(e,r){try{let t=Yu(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function zu(e,r){let t=ls.join(e,"runs",r,"run.json");return as(t)?v(t,null):null}function cs(e){try{return us(e).length===0}catch{return!1}}function ds(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(is(n,r,t,i.liveRunKeys)||!cs(n))return"run_still_active";let a=zu(r,t);return a&&!he.has(a.status)&&!ke(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function ps(e){if(!as(e.worktreesDir))return[];let r=[],t;try{t=us(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=ls.join(e.worktreesDir,o);cs(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Vu(s,e.now)})}return r}U();import{existsSync as $t,rmSync as vs}from"node:fs";import{execFileSync as Ju}from"node:child_process";import{existsSync as ms,readdirSync as Xu,statSync as qu}from"node:fs";import Zu from"node:path";var Qu=2500;function el(e,r=Qu){if(!ms(e))return 0;try{let n=Ju("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 Z(e,r=5e4){if(!ms(e))return 0;let t=el(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Xu(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Zu.join(i,u),c;try{c=qu(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as ol,rmSync as sl}from"node:fs";z();import{lstatSync as rl,readdirSync as tl}from"node:fs";function fs(e){try{let r=rl(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 gs(e,r=32){let t=fs(e);if(!t)return!1;if(t.foreign)return!0;try{let n=tl(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=fs(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as nl}from"node:child_process";import ys from"node:path";import D from"node:path";function hs(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 Ur(e,r,t){return hs(e,r,t,"node_modules")}function Br(e,r,t){return hs(e,r,t,".next")}function Fr(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 ks(e,r,t){let n=D.resolve(e);return Ur(n,r,t)===null||Br(n,r,t)===null||Fr(n,r,t)===null}function bs(){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 Rs(e){let r=nl("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Ss(e,r,t){if(!ks(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=Rs(["chown","-R",`${n}:${o}`,ys.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Rs(["rm","-rf",ys.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 Lt="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 il(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function xs(e,r,t={}){if(!ol(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?Oe(n):null,i=e.bytes??Z(e.path)??void 0,a=t.removePath??sl,u=t.hasForeignOwnedEntry??gs;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!il(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=bs();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Lt}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let g=Ss(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(m){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${m.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; privileged reclaim failed: ${g.error}; ${Lt}`}}}function jt(e){let r=e.harnessRoot;return!r||!Go(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Gt(e,r){let t=jt(e);if(t)return t;let n=xs(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function _s(e,r){return Gt(e,r)}function Cs(e,r){return Gt(e,r)}function Es(e,r){return Gt(e,r)}function ws(e,r){let t=jt(e);if(t)return t;if(!$t(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??Z(e.path);return vs(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 As(e,r){let t=jt(e);if(t)return t;if(!$t(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??Z(e.path);return n&&ve(n,["worktree","remove","--force",e.path],{allowFailure:!0}),$t(e.path)&&vs(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 Hr,readdirSync as Lr,statSync as al}from"node:fs";import F from"node:path";function Yt(e,r){try{let t=al(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Is(e,r){let t=F.relative(r,e);return t===""||!t.startsWith("..")&&!F.isAbsolute(t)}function Ps(e,r,t,n){let o=[];for(let s of Tt){if(s===".next")continue;let i=F.join(e,s);if(!Hr(i))continue;let a=F.resolve(i);t.has(a)||Is(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:Yt(a,r.now)}))}return o}function Os(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Ps(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Hr(e.worktreesDir))return r;for(let n of Lr(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=F.join(e.worktreesDir,n.name);for(let s of Lr(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=F.join(o,s.name);r.push(...Ps(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Ns(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;Hr(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:Yt(a,e.now)})))}if(!t||!Hr(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 Lr(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=Lr(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)||Is(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:Yt(c,e.now)}))}}return n}import{existsSync as Ts,readdirSync as Ds,statSync as ul}from"node:fs";import De from"node:path";var ll=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function cl(e,r){try{let t=ul(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function dl(e,r){let t=De.relative(r,e);return t===""||!t.startsWith("..")&&!De.isAbsolute(t)}function pl(e,r,t,n,o,s){if(!Ts(n))return;let i=De.resolve(n);r.has(i)||dl(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:cl(i,t.now)}))}function Ws(e,r,t,n,o){for(let s of ll)pl(e,r,t,De.join(n,s.dirName),s.kind,o)}function Ms(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Ws(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Ts(e.worktreesDir))return r;for(let n of Ds(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=De.join(e.worktreesDir,n.name),s;try{s=Ds(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=De.join(o,i.name);Ws(r,t,e,a,{runId:n.name,worker:i.name})}}return r}U();import{existsSync as Ks,statSync as ml}from"node:fs";import H from"node:path";function fl(e,r){try{let t=ml(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gl(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 hl(e,r){let t=H.relative(H.resolve(r),H.resolve(e));return t!==""&&!t.startsWith("..")&&!H.isAbsolute(t)}var kl=200;function Us(e){if(!e.includeOrphans||!Ks(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=ve(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let u=gl(a);for(let l of u){if(i>=kl)break;let c=H.resolve(l.path);if(c===H.resolve(s)||!hl(c,e.worktreesDir)||t.has(c)||o.has(c)||!Ks(c))continue;let p=H.relative(e.worktreesDir,c).split(H.sep),g=p[0],m=p[1]??"unknown";o.add(c),i+=1,n.push({kind:"remove_worktree",path:c,bytes:null,runId:g,worker:m,repo:s,ageMs:fl(c,e.now)})}}return n}le();b();import Ve from"node:path";function Bs(e,r){let t=Ve.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ve.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Fs(e){let r=new Map;for(let t of mr(e))for(let n of Object.keys(t.workers||{})){let o=Ve.join(Ke(e,t.id),"workers",x(n),"worker.json"),s=v(o,void 0);s?.worktreePath&&r.set(Ve.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ve.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function ze(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Re(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Hs(e={}){let r=e.execute===!0||e.execute!==!1&&ze("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!ze("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Re("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??Re("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Re("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Re("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),u=e.maxActionsPerSweep??Re("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),l=e.includeOrphans===!0||ze("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=ze("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&&!ze("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),g=Re("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),m=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:p&&g>0?g:null,y=Re("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:m,byteAccountingEntryCap:S}}U();import{existsSync as Vt,statSync as Rl}from"node:fs";import be from"node:path";b();var Ls=1800*1e3;function bl(e,r){let t=be.relative(r,e);return t===""||!t.startsWith("..")&&!be.isAbsolute(t)}function Sl(e,r,t){if(!Vt(e))return!1;try{let n=r-Rl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function zt(e){if(!e.runId||!e.workerName)return!1;let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ls,n=be.resolve(e.harnessRoot,"runs"),o=be.resolve(n,e.runId,"workers",e.workerName);if(!bl(o,n))return!1;let s=v(be.join(o,"worker.json"),void 0);return s&&Ne(s,r,t)?!0:s?!1:Sl(be.join(o,"heartbeat.jsonl"),r,t)}function $s(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??Ls;if(!Vt(e.worktreePath))return null;if(e.runId&&e.workerName&&zt(e))return"active_worker";let n=be.join(e.worktreePath,".git");if(!Vt(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}z();import{existsSync as xl,readdirSync as js,statSync as vl}from"node:fs";import _l from"node:path";function Gs(e={}){let r=O(e.harnessRoot??ne()),t=Oe(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!xl(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=js(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=_l.join(t,c.name);try{let p=vl(d);u=u===null?p.mtimeMs:Math.min(u,p.mtimeMs)}catch{}try{for(let p of js(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=Z(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}}z();import{existsSync as Cl}from"node:fs";import{homedir as El}from"node:os";import Ys from"node:path";var wl=["/var/tmp/kynver-harness",Ys.join(El(),".openclaw","harness")];function Jt(e,r,t){if(!t?.trim())return;let n=O(t.trim());e.has(n)||(e.add(n),r.push(n))}function Al(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 Vs(e={}){let r=new Set,t=[];Jt(r,t,e.harnessRoot??ne());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Jt(r,t,o);if(Al(e))for(let o of wl){let s=Ys.resolve(o);!r.has(s)&&Cl(s)&&Jt(r,t,s)}return t}dr();function Pl(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Il(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function zs(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=Il("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=cr({...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 Js(e,r){if(!r.pressured)return e;let t=e.execute||!Pl("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}}lr();import{unlinkSync as Ol}from"node:fs";function $r(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Xs(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Nl(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function qs(e={}){let r=e.execute===!0||$r("KYNVER_WSL_CRASH_DUMP_EXECUTE")||$r("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||$r("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Xs("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=Ee({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=Nl(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{Ol(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 Zs(e){return e?$r("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Xs("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}lr();function W(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}U();var jr=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 Dl}from"node:child_process";import{existsSync as Wl}from"node:fs";import Tl from"node:path";var Ml=5e3;function Kl(e,r){if(!Wl(Tl.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=Dl("git",r,{windowsHide:!0,cwd:e,encoding:"utf8",timeout:Ml}),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 Qs(e){let r=Kl(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 Gr=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Qs(t)??[];return this.cache.set(t,o),o}};var Yr=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=ke(r);return this.cache.set(r.id,n),n}};function Ul(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function ei(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:Ul(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 Bl(e={}){let r=e.harnessRoot?O(e.harnessRoot):ne(),t=Vs({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function Fl(e){return typeof e=="string"?{reason:e}:e}function We(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Vr(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Z(e.path,t)}}function ri(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 Hl(e,r){return e.kind==="remove_next_cache"?Cs(e,r):_s(e,r)}function Ll(e,r,t){return e.kind==="remove_next_cache"?Br(e.path,r,t):Ur(e.path,r,t)}function $l(e){let r=new Map;for(let t of e)for(let[n,o]of Fs(t))r.set(n,o);return r}function ti(e,r){return e.runId&&e.worker?T.join(r,e.runId,e.worker):T.resolve(e.path,"..")}function ni(e){return e.indexed?!1:zt({harnessRoot:e.harnessRoot,runId:e.candidate.runId,workerName:e.candidate.worker,now:e.now})}function jl(e={}){let r=Hs(e),t=zs();r=Js(r,t);let n=Bl(e);W("scan",`${n.scanRoots.length} harness root(s)`);let o=ss(n.scanRoots,n.now),s=r.finalizeStaleRuns?Ho().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=$l(n.scanRoots);W("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Yr,gitStatusCache:new Gr,gitRevCache:new jr},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 Q=T.join(h,"worktrees"),Xe=Bs(i,h),qe={harnessRoot:h,worktreesDir:Q,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Xe,now:n.now},zr=r.scanDependencyCaches?Ms(qe):[];W("dependency",r.scanDependencyCaches?`${zr.length} cache candidate(s) at ${h}`:"skipped (worktree-only sweep)");let Jr=0;for(let M of zr){if(p())break;Jr+=1,Jr%50===0&&W("dependency",`${Jr}/${zr.length} evaluated`);let _=T.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},I=Ll(k,h,Q);if(I){We(u,k.path,I),l.push({...k,executed:!1,skipped:!0,skipReason:I});continue}let K=ti(k,Q),ee=Xe.get(T.resolve(K))??null,Se=ni({candidate:k,indexed:ee,harnessRoot:h,now:n.now}),j=Bt({indexed:ee,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:K,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Se,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){We(u,k.path,j),l.push({...k,executed:!1,skipped:!0,skipReason:j});continue}l.push(Hl(Vr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let M of Os(qe)){if(p())break;let _=T.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},I=Fr(k.path,h,Q);if(I){We(u,k.path,I),l.push({...k,executed:!1,skipped:!0,skipReason:I});continue}let K=ti(k,Q),ee=Xe.get(T.resolve(K))??null,Se=ni({candidate:k,indexed:ee,harnessRoot:h,now:n.now}),j=rs({indexed:ee,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:K,activeWorktreePaths:o.activeWorktreePaths,workerFilesystemLive:Se,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(j){We(u,k.path,j),l.push({...k,executed:!1,skipped:!0,skipReason:j});continue}l.push(Es(Vr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Xr=[...Ns(qe),...Us(qe)];W("worktrees",`${Xr.length} candidate(s) at ${h}`);let Xt=new Set,qr=0;for(let M of Xr){if(p())break;qr+=1,qr%50===0&&W("worktrees",`${qr}/${Xr.length} evaluated`);let _=T.resolve(M.path);if(Xt.has(_))continue;Xt.add(_);let k={...M,path:_},I=Xe.get(T.resolve(k.path))??null,K=I?null:$s({worktreePath:k.path,harnessRoot:h,runId:k.runId,workerName:k.worker,now:n.now}),ee=es({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(ee){let{reason:Se,detail:j}=Fl(ee);We(u,k.path,Se,j),l.push({...k,executed:!1,skipped:!0,skipReason:Se});continue}l.push(As(Vr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!p()&&r.runDirectoriesAgeMs>=0)for(let M of ps({harnessRoot:h,worktreesDir:Q,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=ds({harnessRoot:h,runId:I,runPath:_,ageMs:k.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(K){We(u,k.path,K),l.push({...k,executed:!1,skipped:!0,skipReason:K});continue}l.push(ws(Vr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let g=0,m=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"&&(m+=1)):h.skipped&&(A+=1,h.skipReason==="dry_run"&&h.bytes&&(y+=h.bytes));let L=r.accountBytes?Gs({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,B=Ee(),Je=r.execute&&Zs(B),$=Je?qs({execute:!0}):null,se=B?{observed:!0,execute:Je,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 ie=ns(l,u),P=ei({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:ri(l,u)},...L?{storage:L}:{},...ie.length>0?{preservedLivePaths:ie}:{},...m>0?{removedRunDirectories:m}:{},...se?{wslCrashDumps:se}:{}});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:ri(l,u)},...L?{storage:L}:{},...ie.length>0?{preservedLivePaths:ie}:{},...m>0?{removedRunDirectories:m}:{},...se?{wslCrashDumps:se}:{},compactSummary:P}}export{Kr as DEFAULT_MAX_ACTIONS_PER_SWEEP,Ft as DEFAULT_NODE_MODULES_AGE_MS,Ht as DEFAULT_RUN_DIRECTORIES_AGE_MS,Mr as DEFAULT_WORKTREES_AGE_MS,jl as runHarnessCleanup};
|