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