@kynver-app/runtime 0.2.1 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +107 -59
- package/dist/context-preview/chat-memory-preview.d.ts +33 -0
- package/dist/doctor/local-store-cli.d.ts +11 -0
- package/dist/doctor/local-store.d.ts +35 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +135 -82
- package/dist/instruction-bundle/contract.js +1 -1
- package/dist/local-run-store/dispatch-receipts.d.ts +70 -0
- package/dist/local-run-store/index.d.ts +10 -0
- package/dist/local-run-store/index.js +50 -0
- package/dist/local-run-store/local-run-store.d.ts +95 -0
- package/dist/local-run-store/remote-surface-flags.d.ts +15 -0
- package/dist/local-run-store/sqlite/sqlite-filesystem-policy.d.ts +16 -0
- package/dist/local-run-store/sqlite/sqlite-local-run-store.d.ts +62 -0
- package/dist/local-run-store/sqlite/sqlite-recovery.d.ts +14 -0
- package/dist/local-run-store/sqlite/sqlite-schema.d.ts +13 -0
- package/dist/local-run-store/store-lifecycle.d.ts +38 -0
- package/dist/local-run-store/surface-flags.d.ts +47 -0
- package/dist/local-run-store/tick-posture.d.ts +27 -0
- package/dist/plan-persist/index.d.ts +1 -1
- package/dist/plan-persist/outbox-durability.d.ts +31 -0
- package/dist/plan-persist/outbox-store.d.ts +18 -0
- package/dist/plan-persist/types.d.ts +4 -0
- package/dist/repo-search.d.ts +13 -0
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +1 -1
- package/dist/server/monitor.js +7 -7
- package/dist/server/repo-search.d.ts +1 -1
- package/dist/server/repo-search.js +1 -1
- package/dist/server/worker-policy.js +1 -1
- package/dist/util.d.ts +11 -0
- package/package.json +8 -3
|
@@ -10,6 +10,24 @@ export declare function writeOutboxItem(input: PersistPlanInput, opts: {
|
|
|
10
10
|
}): PlanOutboxItem;
|
|
11
11
|
export declare function saveOutboxItem(item: PlanOutboxItem): void;
|
|
12
12
|
export declare function archiveOutboxItem(item: PlanOutboxItem): void;
|
|
13
|
+
/**
|
|
14
|
+
* The bare renames (idempotent — each guarded by existsSync). ORDER MATTERS
|
|
15
|
+
* (D3 review N-1): the BODY moves first, the `.json` last, so the state a
|
|
16
|
+
* crash between the renames leaves behind is a LISTED item (json still in
|
|
17
|
+
* the outbox) with an archived body — which the next drain detects via the
|
|
18
|
+
* archive-intent receipt and completes. The reverse order left an invisible
|
|
19
|
+
* json-less orphan body no drain could ever see.
|
|
20
|
+
*/
|
|
21
|
+
export declare function archiveOutboxItemFiles(item: PlanOutboxItem): void;
|
|
22
|
+
/**
|
|
23
|
+
* Filesystem-evidence archive completion (re-review N-7, ALL modes): the
|
|
24
|
+
* body sitting at its id-derived ARCHIVE destination can only mean a
|
|
25
|
+
* post-verified-persist archive began and crashed (or hit a transient json
|
|
26
|
+
* rename error) between the renames — the plan is already persisted. Finish
|
|
27
|
+
* the json rename so the item cannot wedge the drain (off/shadow have no
|
|
28
|
+
* receipt to consult; the fs state alone is proof). Store-free by design.
|
|
29
|
+
*/
|
|
30
|
+
export declare function completeArchiveFromFilesystemEvidence(item: PlanOutboxItem): boolean;
|
|
13
31
|
export declare function outboxItemPaths(item: PlanOutboxItem): {
|
|
14
32
|
jsonPath: string;
|
|
15
33
|
bodyPath: string;
|
|
@@ -83,9 +83,13 @@ export interface DrainOutboxResult {
|
|
|
83
83
|
succeeded: number;
|
|
84
84
|
stillQueued: number;
|
|
85
85
|
failed: number;
|
|
86
|
+
/** D3 enforce: items skipped because another drainer holds the lease. */
|
|
87
|
+
deduplicated?: number;
|
|
86
88
|
results: Array<{
|
|
87
89
|
outboxId: string;
|
|
88
90
|
userStatus: PlanPersistUserStatus;
|
|
89
91
|
lastError?: string;
|
|
92
|
+
/** True when this row reports a skip, not a persist attempt. */
|
|
93
|
+
skipped?: boolean;
|
|
90
94
|
}>;
|
|
91
95
|
}
|
package/dist/repo-search.d.ts
CHANGED
|
@@ -17,10 +17,23 @@ export declare function normalizeRgArgv(argv: string[]): {
|
|
|
17
17
|
argv: string[];
|
|
18
18
|
changed: boolean;
|
|
19
19
|
};
|
|
20
|
+
/** Peel `bash -lc '…'` / `sh -c "…"` wrappers so rg normalization sees the inner script. */
|
|
21
|
+
export declare function unwrapShellWrapperCommand(command: string): {
|
|
22
|
+
command: string;
|
|
23
|
+
wrapped: boolean;
|
|
24
|
+
};
|
|
20
25
|
export declare function normalizeRepoSearchCommand(command: string): {
|
|
21
26
|
command: string;
|
|
22
27
|
changed: boolean;
|
|
23
28
|
};
|
|
29
|
+
export declare function isRgLikeCommand(command: string): boolean;
|
|
30
|
+
/** Ripgrep exit 1 with no error text is a successful read-only search (no matches), not a shell failure. */
|
|
31
|
+
export declare function shouldTreatRgNoMatchAsSuccess(input: {
|
|
32
|
+
command: string;
|
|
33
|
+
exitCode?: number;
|
|
34
|
+
stderr?: string;
|
|
35
|
+
interleaved?: string;
|
|
36
|
+
}): boolean;
|
|
24
37
|
export declare function extractSearchMeta(meta: string): {
|
|
25
38
|
pattern?: string;
|
|
26
39
|
target?: string;
|
package/dist/server/cleanup.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var f=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{existsSync as
|
|
2
|
-
`)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Ge(e){try{return
|
|
1
|
+
var f=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};import{existsSync as Cs,mkdirSync as Es,readFileSync as Mt,readdirSync as Yu,renameSync as ws,rmSync as As,statSync as Ut,writeFileSync as Ps}from"node:fs";import{randomBytes as Is}from"node:crypto";import Os from"node:path";function Lr(e){console.error(e),process.exit(1)}function jr(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function $e(e){try{return JSON.parse(e)}catch{return null}}function x(e,r){try{return JSON.parse(Mt(e,"utf8"))}catch(t){if(arguments.length>1)return r;Lr(`failed to read ${e}: ${t.message}`)}}function Tt(e,r){Es(Os.dirname(e),{recursive:!0});let t=`${e}.${process.pid}.${Is(4).toString("hex")}.tmp`;try{Ps(t,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`),ws(t,e)}catch(n){try{As(t,{force:!0})}catch{}throw n}}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Ge(e){try{return Ut(e).size}catch{return 0}}function Ye(e){try{return Ut(e).mtime.toISOString()}catch{return null}}function Bt(e,r){return Cs(e)?Mt(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=Ht("git",r,Hr({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 Ft(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 Ve(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 jr(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return jr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=w(e,["rev-parse",n]);if(m.status!==0)return jr(n,m.error||m.stderr||m.stdout||`failed to resolve ${n}`,s.stdout.trim());i=m.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=Ft(e,i,a),l=Ft(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 jr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var $=f(()=>{"use strict";b();Kt()});import{homedir as Lt}from"node:os";import jt from"node:path";function xs(e){return e==="~"?Lt():e.startsWith("~/")||e.startsWith("~\\")?jt.join(Lt(),e.slice(2)):e}function ze(e){return jt.resolve(xs(e))}var ke=f(()=>{"use strict"});var Je=f(()=>{"use strict";$();ke()});function ne(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"forge"}function Xe(e,r){return e[r]?.trim()||null}function $t(e){let r=e?.split(":")[0]?.trim();return r?ne(r):null}function ye(e=process.env,r={}){let t=[],n=$t(r.boxId),o=$t(Xe(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ne(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ne(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Xe(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ne(i)&&t.push(`KYNVER_BOX_ID=${Xe(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ne(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=Xe(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!a,warnings:t}}var oe=f(()=>{"use strict"});function $r(e,r){return e==="forge"?4:Math.max(1,r)}function qe(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var Qe=f(()=>{"use strict"});var Gt=f(()=>{"use strict"});import{existsSync as _s,readFileSync as Cs,statfsSync as Es}from"node:fs";function Gr(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!_s(e))continue;let r=Cs(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Yt(e={}){if(!(e.forceWsl===void 0?Gr():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Re,n=e.wslHostFreeWarnBytes??ws,o=e.wslHostFreeCriticalBytes??As,s=e.statfs??Es,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,m=!c&&!d,g=(a/(1024*1024*1024)).toFixed(1),p=null;return m||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${g} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Ps()}`),{ok:m,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Ps(){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`. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var ws,As,Re,Yr=f(()=>{"use strict";ws=25*1024*1024*1024,As=12*1024*1024*1024,Re="/mnt/c"});import{execFileSync as Vt}from"node:child_process";import{existsSync as er,readFileSync as zt,readdirSync as Is,statSync as Os}from"node:fs";import Vr from"node:path";function Ze(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Jt(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Vt("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()||Re;return r&&er(Vr.join(t,"Users",r))?r:null}function Us(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()||Re,n=e.windowsUser??Jt();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Ts(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 Bs(){try{if(er("/proc/sys/kernel/core_pattern"))return zt("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Vt("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Ks(e){return!!(e&&/wsl-capture-crash/i.test(e))}function Fs(e,r=Re){let t=Vr.join(r,"Users",e,".wslconfig");if(!er(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=zt(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 Hs(e){if(!er(e))return[];let r=Is(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Vr.join(e,n.name);try{let s=Os(o),i=Ts(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 be(e={}){if(!(e.forceWsl===void 0?Gr():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Re,n=e.windowsUser??Jt(),o=e.warnBelowBytes??Ze("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Ds),s=e.criticalBelowBytes??Ze("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",Ws),i=e.warnCount??Ze("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Ns),a=e.criticalCount??Ze("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Ms),u=(e.readCorePattern??Bs)(),l=Ks(u),c=null;n&&(c=(e.readWslConfig??Fs)(n,t));let d=c?.maxCrashDumpCount??null,m=d===-1,g=Us({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:m,reason:null,probeError:"windows_user_unresolved"};let p;try{p=(e.listDumps??Hs)(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:m,reason:`WSL crash dump probe failed at ${g}: ${P.message}`,probeError:P.message}}let y=p.reduce((P,h)=>P+h.bytes,0),S=p.length,R=[...new Set(p.map(P=>P.executableHint).filter(P=>!!P))],A=y>=s,L=y>=o,B=S>=a,He=S>=i,re=!(A||B||L||He),te=null;if(!re){let P=A||B?"critical":"warning",h=(y/1024**3).toFixed(1),q=R.length>0?R.join(", "):"unknown";te=`WSL crash dumps ${P}: ${S} file(s), ${h} GiB at ${g} (executables: ${q}). `+Ls({wslCaptureEnabled:l,dumpsDisabledInWslConfig:m})}return{ok:re,path:g,windowsUser:n,dumpCount:S,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:R,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:te,probeError:null}}function Ls(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 \u2014 see docs/runbooks/wsl-disk-pressure.md);"),r.push("full runbook: docs/runbooks/wsl-disk-pressure.md."),r.join(" ")}var Ds,Ws,Ns,Ms,rr=f(()=>{"use strict";Yr();Ds=5*1024*1024*1024,Ws=10*1024*1024*1024,Ns=2,Ms=4});import{statfsSync as js}from"node:fs";function tr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??$s,n=e.diskFreeCriticalBytes??Gs,o=e.diskMaxUsedPercent??Ys,s=e.diskHardMaxUsedPercent??Vs,i=js(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,m=a<t*2,g=m&&l>o,p=m&&l>s,y=!c&&!d&&!g&&!p,S=e.skipWslHostCheck?null:Yt(e.wslHost),R=e.skipWslCrashDumpCheck?null:be(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,p?`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("; ")),zs({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 zs(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 $s,Gs,Ys,Vs,nr=f(()=>{"use strict";rr();Yr();$s=30*1024*1024*1024,Gs=15*1024*1024*1024,Ys=80,Vs=90});import{existsSync as Js,readdirSync as Xs,statSync as qs}from"node:fs";import zr from"node:path";function or(){return qt()}function Jr(){let{runsDir:e}=or();return Xt(e)}function sr(e){return Xt(G(e))}function Qs(e){try{return qs(e).isDirectory()}catch{return!1}}function Xt(e){if(!Js(e))return[];let r=[];for(let t of Xs(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=zr.join(e,t.name);if(!Qs(n))continue;let o=x(zr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Xr(e){let{runsDir:r}=or();Ut(zr.join(qr(r,e.id),"run.json"),e)}function Pe(e){let{harnessRoot:r}=or();return Ie(r,e)}function Ie(e,r){return qr(G(e),v(r))}var se=f(()=>{"use strict";Y();b()});import{existsSync as Zs,readdirSync as ei}from"node:fs";import ri from"node:path";function Qr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=ri.join(Pe(e.id),"workers");if(!Zs(t))return[...r];for(let n of ei(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Zr=f(()=>{"use strict";se();b()});function et(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 Qt(e){let r=e.trim();if(!r)return null;let t=et(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=et(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=et(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function Zt(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Qt(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Qt(t);return n||t}var en=f(()=>{"use strict"});import{existsSync as ti,readFileSync as ni}from"node:fs";function rn(e){return e==="complete"}function tn(e){return rn(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!ti(e))return r;let t=Date.now()+oi,n=new Date(t).toISOString(),o=ni(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=$e(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)),
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
9
|
-
`).filter(Boolean);for(let n of t){let o=$e(n);if(!o)continue;let s=Pi(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let u=a.find(l=>l?.type==="tool_use");u&&(r.currentTool=String(u.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,u=Ii(a);u&&(r.currentTool=u)}let i=Di(o);i&&Wi(r,an({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Oi(r,o)}return r}var cn=f(()=>{"use strict";un();b()});function Mi(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function dn(e){let r=(e??"").trim();if(!r)return null;for(let t of Ni)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Mi(r)}`};return null}var Ni,pn=f(()=>{"use strict";Ni=[{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 mn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ui(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 Ti(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:mn(e.head)}function Bi(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 fn(e){if(e.alive||Ui(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=mn(e.headCommit)??Ti(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:Bi(s,r,t)}}var gn=f(()=>{"use strict"});function We(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ki(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 Fi(e){if(We(e.headCommit)||We(e.prUrl)||We(e.artifactBundlePath)||We(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&We(r.head))}function ve(e){return Ki(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Fi(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 hn(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var ar=f(()=>{"use strict"});function st(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function kn(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function ur(e){let r=e.trim();if(!r)return null;let t=st(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=st(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=st(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=kn(u);for(let c of n){let d=kn(c);d>l&&(u=c,l=d)}return u}var it=f(()=>{"use strict"});function yn(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 Rn(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Hi(e){return new Set(e.map(r=>Rn(yn(r)??r)).filter(Boolean))}function bn(e,r,t){let n=yn(e)??e;if(!n)return"unrelated";let o=Rn(n);return Hi(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Sn=f(()=>{"use strict"});function xe(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Li(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ie(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:xe(e)}function lr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function vn(e){let r=null;if(typeof e=="string"){let o=ur(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=ie(String(s.prUrl??s.pr_url??"")),a=xe(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:xe(s.mergeCommit??s.merge_commit),reason:xe(s.reason)})}return n}function xn(e,r){let t=[],n=ie(xe(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=ie(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function _n(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(!Li(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?ie(xe(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?ie(r.targetPrUrls[0]):null):null;if(s){let d=xn(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 p=vn(n).find(y=>y.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=vn(n),a=new Map(i.map(d=>[lr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>lr(ie(d)??d)).filter(Boolean)),l=xn(t,n);if(r.landingOnly)for(let d of l){let m=a.get(lr(d)),g=bn(d,r.targetPrUrls,m);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 m=lr(ie(d)??d),g=a.get(m);if(!g){c.push(m);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(m)}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 Cn(e){if(e.blocked)return e.detail??e.reason}var En=f(()=>{"use strict";it();Sn()});function Gi(e){let r=Date.now();if(e.completionBlocker&&!wn(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Vi(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=ve(o);if(s.blocked){let i=hn(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=_n({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Cn(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(Yi(e))return{state:"done",reason:"empty abandoned worker record"};let o=dn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=fn({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>ji)return{state:"needs_attention",reason:`no first stream event ${Lr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>$i?{state:"stale",reason:`no log/event/heartbeat activity for ${Lr(n)}s`}:{state:"ok",reason:"recent activity"}}function wn(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Yi(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 Vi(e){let r=null;if(typeof e=="string"?r=ur(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 zi(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??tn(t))}function Ne(e,r={}){let t=ln(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=zi(e,t.finalResult,n),i=o?!1:Q(e.pid),a=Ge(e.stdoutPath),u=Ge(e.stderrPath),l=Ge(e.heartbeatPath),c=Ae(e.worktreePath),d=Ve(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=Bt([t.lastEventAt,n.lastHeartbeatAt,Ye(e.stdoutPath),Ye(e.stderrPath),Ye(e.heartbeatPath)]),g=t.error||!i&&!s&&Tt(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=wn(p)?null:p,S=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,R=Gi({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,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:m,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,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,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 ae(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function An(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ji,$i,ue=f(()=>{"use strict";ir();cn();pn();gn();$();ar();En();it();b();ji=18e4,$i=6e5});var Pn=f(()=>{"use strict";ue()});function In(e,r={}){let t=r.perWorkerMemBytes??at,n=r.memReserveBytes??ut,o=r.memUtilization??lt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,cr)}var at,ut,lt,cr,On=f(()=>{"use strict";Gt();ce();oe();Qe();dr();nr();se();Zr();Pn();b();at=500*1024*1024,ut=4*1024*1024*1024,lt=.85,cr=64});function Me(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ct(e){let r=e.config??{},t=e.env??process.env,n=Me(r.perWorkerMemBytes,at),o=Me(r.memReserveBytes,ut),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):lt)),i=In(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Me(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=Me(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,cr),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Me(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,cr),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var dr=f(()=>{"use strict";On()});import{homedir as Ji}from"node:os";import Xi from"node:path";var Dn,dt=f(()=>{"use strict";Dn=Xi.join(Ji(),".kynver",".env")});var Wn=f(()=>{"use strict"});var Nn=f(()=>{"use strict";Wn()});var Mn=f(()=>{"use strict"});var pt=f(()=>{"use strict";Nn();Mn()});var Un=f(()=>{"use strict"});var Tn=f(()=>{"use strict";Un()});var pr=f(()=>{"use strict";dt();ke();ce();pt();Tn()});var Fn=f(()=>{"use strict";oe();oe()});var Hn=f(()=>{"use strict";dt();pt();pr()});import{existsSync as V,mkdirSync as Qi,readdirSync as mr,renameSync as Ln,statSync as Zi}from"node:fs";import z from"node:path";function $n(e){try{return Zi(e).isDirectory()}catch{return!1}}function ea(e){if(!V(e))return!0;for(let r of jn){let t=z.join(e,r);if(V(t)&&(!$n(t)||mr(t).length>0))return!1}return!0}function ra(e){let r=z.join(e,"runs");if(!V(r)||!$n(r))return!1;for(let t of mr(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 ta(e){let r=z.join(e,"runs");if(!V(r))return!1;for(let t of mr(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 na(e){let r=z.join(e,"ghost");return V(r)?!V(z.join(r,"runs")):ta(e)}function Gn(e){return ra(e.sharedRoot)?ea(e.forgeRoot)?na(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 Yn(e,r){Qi(r,{recursive:!0});for(let t of jn){let n=z.join(e,t),o=z.join(r,t);if(V(n)){if(V(o)&&mr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(V(o)){Ln(n,o);continue}Ln(n,o)}}}var jn,Vn=f(()=>{"use strict";b();jn=["runs","worktrees"]});import{existsSync as E}from"node:fs";import{homedir as oa}from"node:os";import C from"node:path";function mt(e=process.env){return e.HOME?.trim()||oa()}function ft(e=process.env){return C.join(mt(e),".kynver","harness")}function fr(e){let r=C.resolve(ze(e.trim()));for(;sa.has(C.basename(r));)r=C.dirname(r);return r}function ia(e,r=process.env){return C.join(ft(r),e)}function aa(e=process.env){let r=ft(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(mt(e),zn);return E(t)}function gr(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:fr(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:fr(n),source:"config"};let o=ia(e.boxKind,r);if(E(C.join(o,"runs"))||E(o)&&!ua(o))return{harnessRoot:o,source:"box_scoped"};let i=ft(r);if(e.boxKind==="forge"){let a=Gn({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&&Yn(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&aa(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(mt(r),zn);if(E(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function ua(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 zn,sa,gt=f(()=>{"use strict";ke();Vn();zn=C.join(".openclaw","harness");sa=new Set(["runs","worktrees"])});import Jn from"node:os";function hr(e){return e?.trim()?e.trim():null}function la(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function ca(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 kr(e=le(),r=process.env,t={}){let n=ye(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||hr(r.KYNVER_BOX_KIND)),a=t.strict===!0||ca(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 --box-kind forge|ghost` 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 forge`)}let u=hr(e.runnerId),l=hr(r.KYNVER_RUNTIME_ID)??hr(r.OPENCLAW_RUNTIME_ID),c=u??l??la(n.boxKind,Jn.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 m=ct({config:e,env:r,totalMemBytes:Jn.totalmem()}),g=qe(n.boxKind,m.configuredMaxWorkers??$r(n.boxKind,m.autoCap)),p=gr({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return p.migrationBlocker&&s.push(p.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:m.workerCapSource,harnessRoot:p.harnessRoot,harnessRootSource:p.source},errors:s,warnings:o}}var yr=f(()=>{"use strict";ce();oe();Qe();dr();gt()});var qn=f(()=>{"use strict";Je();oe();Fn();ce();pr();Hn();b();yr()});import{existsSync as ga,mkdirSync as Md,readFileSync as ha,writeFileSync as Ud}from"node:fs";import{homedir as ka,totalmem as Bd}from"node:os";import ht from"node:path";function le(){if(!ga(Qn))return{};try{return JSON.parse(ha(Qn,"utf8"))}catch{return{}}}var Zn,Qn,Xd,qd,Qd,ce=f(()=>{"use strict";Je();ke();b();oe();Qe();dr();nr();pr();qn();yr();Zn=ht.join(ka(),".kynver"),Qn=ht.join(Zn,"config.json"),Xd=ht.join(Zn,"credentials");qd=500*1024*1024,Qd=4*1024*1024*1024});import kt from"node:path";function O(e){return fr(e)}function Z(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return O(e);let r=le(),t=r.harnessRoot?.trim();if(t)return O(t);let n=kr(r,process.env);return n.identity?n.identity.harnessRoot:gr({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function G(e){return kt.join(O(e),"runs")}function _e(e){return kt.join(O(e),"worktrees")}function qt(){let e=Z();return{harnessRoot:e,runsDir:G(e),worktreesDir:_e(e)}}function qr(e,r){return kt.join(e,v(r))}var Y=f(()=>{"use strict";ce();gt();yr();b()});Y();import M from"node:path";ar();import vr from"node:path";$();ue();var yt=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function eo(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of yt)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!eo(n)})}function de(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 Ue(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?D(e.changedFiles).length>0:!!(de(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Te(e){return e.status||(e.status=Ne(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Rt(e,r){if(e.status)return D(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Ae(e.worktreePath);return D(t).length>0}function ya(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function bt(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=ya(e);if(o&&!Q(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Ae(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"}:Ve(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??de(s)};return e.status=c,c}return Te(e)}ue();se();Zr();ue();b();import Ra from"node:path";var ba=new Set(["running","dispatching","pending","queued","needs_attention"]),pe=new Set(["completed","failed","cancelled","done"]);function me(e){let r=Qr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Ra.join(Pe(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let u=Ne(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),An(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function ro(){let e=[];for(let r of Jr()){if(!ba.has(r.status))continue;let t=me(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Xr(r),e.push({runId:r.id,from:n,to:t})}return e}ue();ir();import{existsSync as Rr,mkdirSync as Mp,readdirSync as oo,renameSync as Up,statSync as Sa}from"node:fs";import fe from"node:path";ce();Je();ke();ir();Y();se();Y();b();import ee from"node:path";var Ip=`${ee.sep}runs${ee.sep}runs${ee.sep}`;function to(e){return{workerJsonPath:ee.join(e,"worker.json"),stdoutPath:ee.join(e,"stdout.jsonl"),stderrPath:ee.join(e,"stderr.log"),heartbeatPath:ee.join(e,"heartbeat.jsonl"),lastStatusPath:ee.join(e,"last-status.json")}}b();var Be=900*1e3,$p=3600*1e3;function so(e,r){let t=fe.resolve(e),n=fe.resolve(G(r)),o=fe.relative(n,t);return o!==".."&&!o.startsWith("..")&&!fe.isAbsolute(o)}function va(e){if(!Rr(e))return[];try{return oo(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function xa(e){let r=fe.join(e,"workers");if(!Rr(r))return[];try{return oo(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function no(e,r,t){if(!Rr(e))return!1;try{let n=r-Sa(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function _a(e,r=Date.now(),t=Be){if(!Rr(e))return!1;let n=to(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&Q(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(no(n.stdoutPath,r,t)||no(n.heartbeatPath,r,t))}function Ca(e,r=Date.now(),t=Be){for(let n of xa(e))if(_a(fe.join(e,"workers",n),r,t))return!0;return!1}function io(e,r=Date.now()){let t=new Set,n=G(e);for(let o of va(n)){let s=fe.join(n,o);Ca(s,r)&&t.add(`${e}\0${o}`)}return t}b();function St(e,r=Date.now(),t=Be){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function br(e,r=Date.now(),t=Be){return Q(e.pid)?!0:St(e,r,t)}function Ea(e,r){return r?r.runTerminalCache.derive(e.run):me(e.run)}function J(e,r=Date.now()){return br(e.worker,r)}function vt(e,r){return pe.has(e.run.status)?!1:Ea(e,r)!==null}function ao(e,r,t=Date.now()){if(J(e,t))return!0;if(pe.has(e.run.status)||vt(e,r))return!1;let n=Te(e);return ae(n)?!1:!!J(e,t)}ar();ue();function uo(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(J(e))return!0;let n=r??Te(e);return!!(!ae(n)||Ue(n)||D(n.changedFiles).length>0||ve({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:de(n.finalResult)}).blocked)}$();b();import{existsSync as co,mkdirSync as wa,writeFileSync as lo}from"node:fs";import Sr from"node:path";function po(e,r,t){return Sr.join(e,"salvage",v(r),v(t))}function mo(e){return co(Sr.join(po(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function fo(e){let r=po(e.harnessRoot,e.indexed.runId,e.indexed.workerName);wa(r,{recursive:!0});let t=Sr.join(r,"salvage.patch"),n=!1;if(co(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 Z(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Kt(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 $r(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var b=f(()=>{"use strict"});var Ds,Xu,Ft=f(()=>{"use strict";Ds=["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"],Xu=new Set(Ds)});import{spawnSync as Lt}from"node:child_process";function we(e,r,t={}){let n=Lt("git",r,jr({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=`git ${r.join(" ")} failed: ${n.stderr||n.stdout}`;if(t.throwError)throw new Error(o);Lr(o)}return n.stdout||""}function Ae(e){return we(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=Lt("git",r,jr({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 Ht(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 Ve(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 Gr(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return Gr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=w(e,["rev-parse",n]);if(m.status!==0)return Gr(n,m.error||m.stderr||m.stdout||`failed to resolve ${n}`,s.stdout.trim());i=m.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=Ht(e,i,a),l=Ht(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 Gr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var $=f(()=>{"use strict";b();Ft()});import{homedir as jt}from"node:os";import $t from"node:path";function Ws(e){return e==="~"?jt():e.startsWith("~/")||e.startsWith("~\\")?$t.join(jt(),e.slice(2)):e}function ze(e){return $t.resolve(Ws(e))}var ke=f(()=>{"use strict"});var Je=f(()=>{"use strict";$();ke()});function ne(e){let r=(e??"").trim().toLowerCase();return r==="ghost"||r==="forge"?r:r.includes("forge")?"forge":r.includes("ghost")||r.includes("openclaw")?"ghost":"forge"}function Xe(e,r){return e[r]?.trim()||null}function Gt(e){let r=e?.split(":")[0]?.trim();return r?ne(r):null}function ye(e=process.env,r={}){let t=[],n=Gt(r.boxId),o=Gt(Xe(e,"KYNVER_BOX_ID")),s=r.boxKind?.trim();if(s)return n&&n!==ne(s)&&t.push(`config.boxId=${r.boxId} conflicts with boxKind=${s}; using explicit boxKind=${s}`),{boxKind:ne(s),source:"config",slugInferenceBlocked:!1,warnings:t};let i=Xe(e,"KYNVER_BOX_KIND");if(i)return o&&o!==ne(i)&&t.push(`KYNVER_BOX_ID=${Xe(e,"KYNVER_BOX_ID")} conflicts with KYNVER_BOX_KIND=${i}; using explicit KYNVER_BOX_KIND=${i}`),{boxKind:ne(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=Xe(e,"KYNVER_AGENT_OS_SLUG");return a&&t.push(`KYNVER_AGENT_OS_SLUG=${a} is a workspace slug, not box identity \u2014 set boxKind via \`kynver setup --box-kind forge|ghost\` or KYNVER_BOX_KIND (defaulting box kind to forge)`),{boxKind:"forge",source:"default",slugInferenceBlocked:!!a,warnings:t}}var oe=f(()=>{"use strict"});function Yr(e,r){return e==="forge"?4:Math.max(1,r)}function qe(e,r){return e==="forge"?Math.min(Math.max(1,r),4):Math.max(1,r)}var Ze=f(()=>{"use strict"});var Yt=f(()=>{"use strict"});import{existsSync as Ns,readFileSync as Ms,statfsSync as Us}from"node:fs";function Vr(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Ns(e))continue;let r=Ms(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Vt(e={}){if(!(e.forceWsl===void 0?Vr():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Re,n=e.wslHostFreeWarnBytes??Ts,o=e.wslHostFreeCriticalBytes??Bs,s=e.statfs??Us,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,m=!c&&!d,g=(a/(1024*1024*1024)).toFixed(1),p=null;return m||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${g} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Ks()}`),{ok:m,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Ks(){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`. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var Ts,Bs,Re,zr=f(()=>{"use strict";Ts=25*1024*1024*1024,Bs=12*1024*1024*1024,Re="/mnt/c"});import{execFileSync as zt}from"node:child_process";import{existsSync as er,readFileSync as Jt,readdirSync as Fs,statSync as Hs}from"node:fs";import Jr from"node:path";function Qe(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Xt(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=zt("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()||Re;return r&&er(Jr.join(t,"Users",r))?r:null}function Ys(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()||Re,n=e.windowsUser??Xt();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Vs(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 zs(){try{if(er("/proc/sys/kernel/core_pattern"))return Jt("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return zt("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Js(e){return!!(e&&/wsl-capture-crash/i.test(e))}function Xs(e,r=Re){let t=Jr.join(r,"Users",e,".wslconfig");if(!er(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Jt(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 qs(e){if(!er(e))return[];let r=Fs(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Jr.join(e,n.name);try{let s=Hs(o),i=Vs(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 be(e={}){if(!(e.forceWsl===void 0?Vr():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Re,n=e.windowsUser??Xt(),o=e.warnBelowBytes??Qe("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Ls),s=e.criticalBelowBytes??Qe("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",js),i=e.warnCount??Qe("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",$s),a=e.criticalCount??Qe("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Gs),u=(e.readCorePattern??zs)(),l=Js(u),c=null;n&&(c=(e.readWslConfig??Xs)(n,t));let d=c?.maxCrashDumpCount??null,m=d===-1,g=Ys({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:m,reason:null,probeError:"windows_user_unresolved"};let p;try{p=(e.listDumps??qs)(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:m,reason:`WSL crash dump probe failed at ${g}: ${P.message}`,probeError:P.message}}let y=p.reduce((P,h)=>P+h.bytes,0),S=p.length,R=[...new Set(p.map(P=>P.executableHint).filter(P=>!!P))],A=y>=s,L=y>=o,B=S>=a,He=S>=i,re=!(A||B||L||He),te=null;if(!re){let P=A||B?"critical":"warning",h=(y/1024**3).toFixed(1),q=R.length>0?R.join(", "):"unknown";te=`WSL crash dumps ${P}: ${S} file(s), ${h} GiB at ${g} (executables: ${q}). `+Zs({wslCaptureEnabled:l,dumpsDisabledInWslConfig:m})}return{ok:re,path:g,windowsUser:n,dumpCount:S,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:R,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:te,probeError:null}}function Zs(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 \u2014 see docs/runbooks/wsl-disk-pressure.md);"),r.push("full runbook: docs/runbooks/wsl-disk-pressure.md."),r.join(" ")}var Ls,js,$s,Gs,rr=f(()=>{"use strict";zr();Ls=5*1024*1024*1024,js=10*1024*1024*1024,$s=2,Gs=4});import{statfsSync as Qs}from"node:fs";function tr(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??ei,n=e.diskFreeCriticalBytes??ri,o=e.diskMaxUsedPercent??ti,s=e.diskHardMaxUsedPercent??ni,i=Qs(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,m=a<t*2,g=m&&l>o,p=m&&l>s,y=!c&&!d&&!g&&!p,S=e.skipWslHostCheck?null:Vt(e.wslHost),R=e.skipWslCrashDumpCheck?null:be(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,p?`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("; ")),oi({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 oi(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,ri,ti,ni,nr=f(()=>{"use strict";rr();zr();ei=30*1024*1024*1024,ri=15*1024*1024*1024,ti=80,ni=90});import{existsSync as si,readdirSync as ii,statSync as ai}from"node:fs";import Xr from"node:path";function or(){return Zt()}function qr(){let{runsDir:e}=or();return qt(e)}function sr(e){return qt(G(e))}function ui(e){try{return ai(e).isDirectory()}catch{return!1}}function qt(e){if(!si(e))return[];let r=[];for(let t of ii(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Xr.join(e,t.name);if(!ui(n))continue;let o=x(Xr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Zr(e){let{runsDir:r}=or();Tt(Xr.join(Qr(r,e.id),"run.json"),e)}function Pe(e){let{harnessRoot:r}=or();return Ie(r,e)}function Ie(e,r){return Qr(G(e),v(r))}var se=f(()=>{"use strict";Y();b()});import{existsSync as li,readdirSync as ci}from"node:fs";import di from"node:path";function et(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=di.join(Pe(e.id),"workers");if(!li(t))return[...r];for(let n of ci(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var rt=f(()=>{"use strict";se();b()});function tt(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 Qt(e){let r=e.trim();if(!r)return null;let t=tt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=tt(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=tt(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function en(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Qt(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Qt(t);return n||t}var rn=f(()=>{"use strict"});import{existsSync as pi,readFileSync as mi}from"node:fs";function tn(e){return e==="complete"}function nn(e){return tn(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function Se(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!pi(e))return r;let t=Date.now()+fi,n=new Date(t).toISOString(),o=mi(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=$e(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)),tn(r.lastHeartbeatPhase)&&(r.terminalFinalResult=en(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,ir=f(()=>{"use strict";rn();b();fi=6e4});function sn(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function ar(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 an(e){let r=sn(e[0]);return!!(r&&gi.has(r))}function ki(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function yi(e){if(!e||e.includes("*"))return null;let r=ki(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function un(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function nt(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Ri(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function bi(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;on.has(n)&&(t+=1);continue}r.push(n)}}return r}function Si(e){let r=!1,t=e.map((o,s)=>{let i=Ri(o),a=e[s-1];return a&&on.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=bi(t);if(n.length===2){let[o,s]=n;if(nt(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=yi(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 ln(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 ur(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let t=ar(r);if(!t.length)return{command:r,wrapped:!1};let n=sn(t[0]);if(!n||!hi.has(n))return{command:r,wrapped:!1};let o=ln(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 vi(e,r){let t=e.trim(),n=ar(t),o=ln(n);if(o<0)return r;let s=n.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function xi(e){let r=e.trim(),t=ur(r),n=ar(t.command);if(!n.length||!an(n))return{segment:r,changed:!1};let o=Si(n);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return t.wrapped?{segment:vi(r,s),changed:!0}:{segment:s,changed:!0}}function ot(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=xi(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function cn(e){let r=ur(e).command,t=ar(r.trim());return t.length&&an(t)?!0:/\b(rg|ripgrep)\b/i.test(r)}function dn(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 _i(e){let{pattern:r,target:t}=dn(e);return r?nt(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:un(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Ci(e){let{pattern:r,target:t}=dn(e);if(!r)return null;if(nt(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&un(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Ei(e){if(e.kind==="bad_scope"&&e.pattern?.includes("agent-os-land-pr")&&e.target==="package.json")return"Search package.json with a glob from the repo root: `rg -g package.json agent-os-land-pr .` \u2014 or run `node scripts/agent-os-land-pr.mjs <pr-url>` directly.";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 wi(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 st(e){let r=e.meta?.trim()||(e.command?wi(e.command):null)||null;if(r){let t=_i(r),n=Ei(t);if(n)return n;let o=Ci(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=ot(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 gi,hi,on,pn=f(()=>{"use strict";gi=new Set(["rg","ripgrep","grep"]),hi=new Set(["bash","sh","dash","zsh"]),on=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Oe(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Ii(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 De(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Oi(e){let r=e.metadata;if(!De(r))return null;let t=r.vulnerabilities;if(!De(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 Di(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 Wi(e,r){let t=e.error;if(De(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?Oe(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function Ni(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=Ii(r);if(!t||!De(t)){let o=Oe(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(De(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Wi(t,e.stderr)}`};let n=Oi(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:Di(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Mi(e){return Ai.test(e)}function Ui(e){let r=ur(e).command;return mn.test(e)||mn.test(r)||cn(e)}function Ti(e){let r=st({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&&Pi.test(n)){let i=Oe(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=ot(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=Oe(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 fn(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Mi(e.command)){let i=r.trim()||n.trim()||t.trim();return Ni({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ui(e.command))return Ti({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=st({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=Oe(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Ai,mn,Pi,gn=f(()=>{"use strict";pn();Ai=/\bnpm\s+audit\b/i,mn=/\b(rg|ripgrep)\b/i,Pi=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Bi,readFileSync as Ki}from"node:fs";function Fi(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Hi(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 Li(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function ji(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 $i(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function hn(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Bi(e))return r;let t=Ki(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean);for(let n of t){let o=$e(n);if(!o)continue;let s=Fi(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let u=a.find(l=>l?.type==="tool_use");u&&(r.currentTool=String(u.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,u=Hi(a);u&&(r.currentTool=u)}let i=ji(o);i&&$i(r,fn({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Li(r,o)}return r}var kn=f(()=>{"use strict";gn();b()});function Yi(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function yn(e){let r=(e??"").trim();if(!r)return null;for(let t of Gi)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Yi(r)}`};return null}var Gi,Rn=f(()=>{"use strict";Gi=[{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 bn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Vi(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 zi(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:bn(e.head)}function Ji(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 Sn(e){if(e.alive||Vi(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=bn(e.headCommit)??zi(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:Ji(s,r,t)}}var vn=f(()=>{"use strict"});function We(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xi(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 qi(e){if(We(e.headCommit)||We(e.prUrl)||We(e.artifactBundlePath)||We(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&We(r.head))}function ve(e){return Xi(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:qi(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 xn(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var lr=f(()=>{"use strict"});function it(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 _n(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function cr(e){let r=e.trim();if(!r)return null;let t=it(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=it(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=it(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=_n(u);for(let c of n){let d=_n(c);d>l&&(u=c,l=d)}return u}var at=f(()=>{"use strict"});function Cn(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 En(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Zi(e){return new Set(e.map(r=>En(Cn(r)??r)).filter(Boolean))}function wn(e,r,t){let n=Cn(e)??e;if(!n)return"unrelated";let o=En(n);return Zi(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var An=f(()=>{"use strict"});function xe(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Qi(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function ie(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:xe(e)}function dr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pn(e){let r=null;if(typeof e=="string"){let o=cr(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=ie(String(s.prUrl??s.pr_url??"")),a=xe(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:xe(s.mergeCommit??s.merge_commit),reason:xe(s.reason)})}return n}function In(e,r){let t=[],n=ie(xe(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=ie(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function On(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(!Qi(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?ie(xe(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?ie(r.targetPrUrls[0]):null):null;if(s){let d=In(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 p=Pn(n).find(y=>y.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Pn(n),a=new Map(i.map(d=>[dr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>dr(ie(d)??d)).filter(Boolean)),l=In(t,n);if(r.landingOnly)for(let d of l){let m=a.get(dr(d)),g=wn(d,r.targetPrUrls,m);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 m=dr(ie(d)??d),g=a.get(m);if(!g){c.push(m);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(m)}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 Dn(e){if(e.blocked)return e.detail??e.reason}var Wn=f(()=>{"use strict";at();An()});function ta(e){let r=Date.now();if(e.completionBlocker&&!Nn(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&oa(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=ve(o);if(s.blocked){let i=xn(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=On({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Dn(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(na(e))return{state:"done",reason:"empty abandoned worker record"};let o=yn(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Sn({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>ea)return{state:"needs_attention",reason:`no first stream event ${$r(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ra?{state:"stale",reason:`no log/event/heartbeat activity for ${$r(n)}s`}:{state:"ok",reason:"recent activity"}}function Nn(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function na(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 oa(e){let r=null;if(typeof e=="string"?r=cr(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 sa(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??nn(t))}function Ne(e,r={}){let t=hn(e.stdoutPath),n=Se(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=sa(e,t.finalResult,n),i=o?!1:Z(e.pid),a=Ge(e.stdoutPath),u=Ge(e.stderrPath),l=Ge(e.heartbeatPath),c=Ae(e.worktreePath),d=Ve(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=Kt([t.lastEventAt,n.lastHeartbeatAt,Ye(e.stdoutPath),Ye(e.stderrPath),Ye(e.heartbeatPath)]),g=t.error||!i&&!s&&Bt(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=Nn(p)?null:p,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:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,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:m,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,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,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 ae(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Mn(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ea,ra,ue=f(()=>{"use strict";ir();kn();Rn();vn();$();lr();Wn();at();b();ea=18e4,ra=6e5});var Un=f(()=>{"use strict";ue()});function Tn(e,r={}){let t=r.perWorkerMemBytes??ut,n=r.memReserveBytes??lt,o=r.memUtilization??ct,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,pr)}var ut,lt,ct,pr,Bn=f(()=>{"use strict";Yt();ce();oe();Ze();mr();nr();se();rt();Un();b();ut=500*1024*1024,lt=4*1024*1024*1024,ct=.85,pr=64});function Me(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function dt(e){let r=e.config??{},t=e.env??process.env,n=Me(r.perWorkerMemBytes,ut),o=Me(r.memReserveBytes,lt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):ct)),i=Tn(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Me(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=Me(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,pr),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Me(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,pr),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var mr=f(()=>{"use strict";Bn()});import{homedir as ia}from"node:os";import aa from"node:path";var Kn,pt=f(()=>{"use strict";Kn=aa.join(ia(),".kynver",".env")});var Fn=f(()=>{"use strict"});var Hn=f(()=>{"use strict";Fn()});var Ln=f(()=>{"use strict"});var mt=f(()=>{"use strict";Hn();Ln()});var jn=f(()=>{"use strict"});var $n=f(()=>{"use strict";jn()});var fr=f(()=>{"use strict";pt();ke();ce();mt();$n()});var Vn=f(()=>{"use strict";oe();oe()});var zn=f(()=>{"use strict";pt();mt();fr()});import{existsSync as V,mkdirSync as la,readdirSync as gr,renameSync as Jn,statSync as ca}from"node:fs";import z from"node:path";function qn(e){try{return ca(e).isDirectory()}catch{return!1}}function da(e){if(!V(e))return!0;for(let r of Xn){let t=z.join(e,r);if(V(t)&&(!qn(t)||gr(t).length>0))return!1}return!0}function pa(e){let r=z.join(e,"runs");if(!V(r)||!qn(r))return!1;for(let t of gr(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 ma(e){let r=z.join(e,"runs");if(!V(r))return!1;for(let t of gr(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 fa(e){let r=z.join(e,"ghost");return V(r)?!V(z.join(r,"runs")):ma(e)}function Zn(e){return pa(e.sharedRoot)?da(e.forgeRoot)?fa(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 Qn(e,r){la(r,{recursive:!0});for(let t of Xn){let n=z.join(e,t),o=z.join(r,t);if(V(n)){if(V(o)&&gr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(V(o)){Jn(n,o);continue}Jn(n,o)}}}var Xn,eo=f(()=>{"use strict";b();Xn=["runs","worktrees"]});import{existsSync as E}from"node:fs";import{homedir as ga}from"node:os";import C from"node:path";function ft(e=process.env){return e.HOME?.trim()||ga()}function gt(e=process.env){return C.join(ft(e),".kynver","harness")}function hr(e){let r=C.resolve(ze(e.trim()));for(;ha.has(C.basename(r));)r=C.dirname(r);return r}function ka(e,r=process.env){return C.join(gt(r),e)}function ya(e=process.env){let r=gt(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(ft(e),ro);return E(t)}function kr(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:hr(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:hr(n),source:"config"};let o=ka(e.boxKind,r);if(E(C.join(o,"runs"))||E(o)&&!Ra(o))return{harnessRoot:o,source:"box_scoped"};let i=gt(r);if(e.boxKind==="forge"){let a=Zn({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&&Qn(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&ya(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(ft(r),ro);if(E(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Ra(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 ro,ha,ht=f(()=>{"use strict";ke();eo();ro=C.join(".openclaw","harness");ha=new Set(["runs","worktrees"])});import to from"node:os";function yr(e){return e?.trim()?e.trim():null}function ba(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Sa(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 Rr(e=le(),r=process.env,t={}){let n=ye(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||yr(r.KYNVER_BOX_KIND)),a=t.strict===!0||Sa(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 --box-kind forge|ghost` 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 forge`)}let u=yr(e.runnerId),l=yr(r.KYNVER_RUNTIME_ID)??yr(r.OPENCLAW_RUNTIME_ID),c=u??l??ba(n.boxKind,to.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 m=dt({config:e,env:r,totalMemBytes:to.totalmem()}),g=qe(n.boxKind,m.configuredMaxWorkers??Yr(n.boxKind,m.autoCap)),p=kr({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return p.migrationBlocker&&s.push(p.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:m.workerCapSource,harnessRoot:p.harnessRoot,harnessRootSource:p.source},errors:s,warnings:o}}var br=f(()=>{"use strict";ce();oe();Ze();mr();ht()});var oo=f(()=>{"use strict";Je();oe();Vn();ce();fr();zn();b();br()});import{existsSync as Ea,mkdirSync as Vd,readFileSync as wa,writeFileSync as zd}from"node:fs";import{homedir as Aa,totalmem as Xd}from"node:os";import kt from"node:path";function le(){if(!Ea(so))return{};try{return JSON.parse(wa(so,"utf8"))}catch{return{}}}var io,so,up,lp,cp,ce=f(()=>{"use strict";Je();ke();b();oe();Ze();mr();nr();fr();oo();br();io=kt.join(Aa(),".kynver"),so=kt.join(io,"config.json"),up=kt.join(io,"credentials");lp=500*1024*1024,cp=4*1024*1024*1024});import yt from"node:path";function O(e){return hr(e)}function Q(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return O(e);let r=le(),t=r.harnessRoot?.trim();if(t)return O(t);let n=Rr(r,process.env);return n.identity?n.identity.harnessRoot:kr({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function G(e){return yt.join(O(e),"runs")}function _e(e){return yt.join(O(e),"worktrees")}function Zt(){let e=Q();return{harnessRoot:e,runsDir:G(e),worktreesDir:_e(e)}}function Qr(e,r){return yt.join(e,v(r))}var Y=f(()=>{"use strict";ce();ht();br();b()});Y();import M from"node:path";lr();import _r from"node:path";$();ue();var Rt=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function ao(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Rt)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!ao(n)})}function de(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 Ue(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?D(e.changedFiles).length>0:!!(de(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Te(e){return e.status||(e.status=Ne(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function bt(e,r){if(e.status)return D(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Ae(e.worktreePath);return D(t).length>0}function Pa(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function St(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=Pa(e);if(o&&!Z(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Ae(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"}:Ve(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??de(s)};return e.status=c,c}return Te(e)}ue();se();rt();ue();b();import Ia from"node:path";var Oa=new Set(["running","dispatching","pending","queued","needs_attention"]),pe=new Set(["completed","failed","cancelled","done"]);function me(e){let r=et(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Ia.join(Pe(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let u=Ne(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Mn(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function uo(){let e=[];for(let r of qr()){if(!Oa.has(r.status))continue;let t=me(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Zr(r),e.push({runId:r.id,from:n,to:t})}return e}ue();ir();import{existsSync as Sr,mkdirSync as Vp,readdirSync as po,renameSync as zp,statSync as Da}from"node:fs";import fe from"node:path";ce();Je();ke();ir();Y();se();Y();b();import ee from"node:path";var Lp=`${ee.sep}runs${ee.sep}runs${ee.sep}`;function lo(e){return{workerJsonPath:ee.join(e,"worker.json"),stdoutPath:ee.join(e,"stdout.jsonl"),stderrPath:ee.join(e,"stderr.log"),heartbeatPath:ee.join(e,"heartbeat.jsonl"),lastStatusPath:ee.join(e,"last-status.json")}}b();var Be=900*1e3,tm=3600*1e3;function mo(e,r){let t=fe.resolve(e),n=fe.resolve(G(r)),o=fe.relative(n,t);return o!==".."&&!o.startsWith("..")&&!fe.isAbsolute(o)}function Wa(e){if(!Sr(e))return[];try{return po(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Na(e){let r=fe.join(e,"workers");if(!Sr(r))return[];try{return po(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function co(e,r,t){if(!Sr(e))return!1;try{let n=r-Da(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Ma(e,r=Date.now(),t=Be){if(!Sr(e))return!1;let n=lo(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&Z(o.pid))return!0;let s=Se(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(co(n.stdoutPath,r,t)||co(n.heartbeatPath,r,t))}function Ua(e,r=Date.now(),t=Be){for(let n of Na(e))if(Ma(fe.join(e,"workers",n),r,t))return!0;return!1}function fo(e,r=Date.now()){let t=new Set,n=G(e);for(let o of Wa(n)){let s=fe.join(n,o);Ua(s,r)&&t.add(`${e}\0${o}`)}return t}b();function vt(e,r=Date.now(),t=Be){let n=Se(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function vr(e,r=Date.now(),t=Be){return Z(e.pid)?!0:vt(e,r,t)}function Ta(e,r){return r?r.runTerminalCache.derive(e.run):me(e.run)}function J(e,r=Date.now()){return vr(e.worker,r)}function xt(e,r){return pe.has(e.run.status)?!1:Ta(e,r)!==null}function go(e,r,t=Date.now()){if(J(e,t))return!0;if(pe.has(e.run.status)||xt(e,r))return!1;let n=Te(e);return ae(n)?!1:!!J(e,t)}lr();ue();function ho(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(J(e))return!0;let n=r??Te(e);return!!(!ae(n)||Ue(n)||D(n.changedFiles).length>0||ve({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:de(n.finalResult)}).blocked)}$();b();import{existsSync as yo,mkdirSync as Ba,writeFileSync as ko}from"node:fs";import xr from"node:path";function Ro(e,r,t){return xr.join(e,"salvage",v(r),v(t))}function bo(e){return yo(xr.join(Ro(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function So(e){let r=Ro(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Ba(r,{recursive:!0});let t=xr.join(r,"salvage.patch"),n=!1;if(yo(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()&&(ko(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 Aa=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Pa(e){return!Aa.has(e.skipReason)||J(e.indexed,e.now)?!1:mo({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(fo({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Ia(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(pe.has(r.run.status)||e.liveness&&vt(r,e.liveness)||e.liveness&&ae(bt(r,e.liveness))&&!J(r))?n:t}function Oa(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:Ia(e)}function Da(e,r){if(e.harnessRoot?.trim())return vr.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${vr.sep}runs${vr.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=Oa(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=bt(r,e.liveness),c=Da(e,r),d=p=>c&&Pa({indexed:r,harnessRoot:c,skipReason:p,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(uo(r,l)){let p=d("completion_blocked");if(p)return p}if(Rt(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let m=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(m!=null&&m>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(ao(r,e.liveness,a)||!ae(l))return"run_still_active";if(Ue(l)){let p=d("pr_or_unmerged_commits");if(p)return p}if(D(l.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(ve({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:de(l.finalResult)}).blocked){let p=d("landing_blocked");if(p)return p}if(i&&e.worktreePath){let p=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(p)return p.detail?{reason:p.reason,detail:p.detail}:p.reason}return null}function xt(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(vr.resolve(o))||r&&J(r)?"active_worker":r&&Rt(r,e.gitStatusCache)?"dirty_worktree":null}function ho(e){return xt(e)}var _t=216e5,xr=6048e5;var Ct=36e5,_r=120;var ko=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function yo(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)ko.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||ko.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as vo,readdirSync as xo,statSync as Ma}from"node:fs";import _o from"node:path";se();Y();import Ro from"node:path";b();function Na(e,r){return br(e,r)}function bo(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of sr(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=x(Ro.join(Ie(o,s.id),"workers",v(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=Ro.resolve(u.worktreePath);Na(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of io(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function So(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}b();function Ua(e,r){try{let t=Ma(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ta(e,r){let t=_o.join(e,"runs",r,"run.json");return vo(t)?x(t,null):null}function Co(e){try{return xo(e).length===0}catch{return!1}}function Eo(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(So(n,r,t,i.liveRunKeys)||!Co(n))return"run_still_active";let a=Ta(r,t);return a&&!pe.has(a.status)&&!me(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function wo(e){if(!vo(e.worktreesDir))return[];let r=[],t;try{t=xo(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=_o.join(e.worktreesDir,o);Co(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Ua(s,e.now)})}return r}$();import{existsSync as wt,rmSync as Bo}from"node:fs";import{execFileSync as Ba}from"node:child_process";import{existsSync as Ao,readdirSync as Ka,statSync as Fa}from"node:fs";import Ha from"node:path";var La=2500;function ja(e,r=La){if(!Ao(e))return 0;try{let n=Ba("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 X(e,r=5e4){if(!Ao(e))return 0;let t=ja(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Ka(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Ha.join(i,u),c;try{c=Fa(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as Va,rmSync as za}from"node:fs";Y();import{lstatSync as $a,readdirSync as Ga}from"node:fs";function Po(e){try{let r=$a(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 Io(e,r=32){let t=Po(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Ga(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Po(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Ya}from"node:child_process";import Wo from"node:path";import W from"node:path";function Oo(e,r,t,n){let o=W.resolve(e),s=`${W.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=W.relative(t,i);if(a.startsWith("..")||W.isAbsolute(a))return"path_outside_harness";let u=a.split(W.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(W.resolve(r))?"path_outside_harness":null}function Cr(e,r,t){return Oo(e,r,t,"node_modules")}function Er(e,r,t){return Oo(e,r,t,".next")}function wr(e,r,t){let n=W.resolve(e),o=W.relative(t,n);return o.startsWith("..")||W.isAbsolute(o)||o.split(W.sep).length<3||!n.startsWith(W.resolve(r))?"path_outside_harness":null}function Do(e,r,t){let n=W.resolve(e);return Cr(n,r,t)===null||Er(n,r,t)===null||wr(n,r,t)===null}function Mo(){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 No(e){let r=Ya("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Uo(e,r,t){if(!Do(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=No(["chown","-R",`${n}:${o}`,Wo.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=No(["rm","-rf",Wo.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 Et="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or run `node scripts/reclaim-harness-root-owned-cache.mjs --execute` as the harness owner with sudo available. See docs/runbooks/harness-root-owned-cache-reclaim.md.";function Ja(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function To(e,r,t={}){if(!Va(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?_e(n):null,i=e.bytes??X(e.path)??void 0,a=t.removePath??za,u=t.hasForeignOwnedEntry??Io;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!Ja(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=Mo();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Et}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let g=Uo(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(p){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${p.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; privileged reclaim failed: ${g.error}; ${Et}`}}}function At(e){let r=e.harnessRoot;return!r||!so(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Pt(e,r){let t=At(e);if(t)return t;let n=To(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Ko(e,r){return Pt(e,r)}function Fo(e,r){return Pt(e,r)}function Ho(e,r){return Pt(e,r)}function Lo(e,r){let t=At(e);if(t)return t;if(!wt(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??X(e.path);return Bo(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 jo(e,r){let t=At(e);if(t)return t;if(!wt(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??X(e.path);return n&&we(n,["worktree","remove","--force",e.path],{allowFailure:!0}),wt(e.path)&&Bo(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 Ar,readdirSync as Pr,statSync as Xa}from"node:fs";import F from"node:path";function It(e,r){try{let t=Xa(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Go(e,r){let t=F.relative(r,e);return t===""||!t.startsWith("..")&&!F.isAbsolute(t)}function $o(e,r,t,n){let o=[];for(let s of yt){if(s===".next")continue;let i=F.join(e,s);if(!Ar(i))continue;let a=F.resolve(i);t.has(a)||Go(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:It(a,r.now)}))}return o}function Yo(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...$o(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ar(e.worktreesDir))return r;for(let n of Pr(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=F.join(e.worktreesDir,n.name);for(let s of Pr(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=F.join(o,s.name);r.push(...$o(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Vo(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;Ar(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:It(a,e.now)})))}if(!t||!Ar(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 Pr(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=Pr(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)||Go(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:It(c,e.now)}))}}return n}import{existsSync as Xo,readdirSync as zo,statSync as qa}from"node:fs";import Ce from"node:path";var Qa=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function Za(e,r){try{let t=qa(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function eu(e,r){let t=Ce.relative(r,e);return t===""||!t.startsWith("..")&&!Ce.isAbsolute(t)}function ru(e,r,t,n,o,s){if(!Xo(n))return;let i=Ce.resolve(n);r.has(i)||eu(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:Za(i,t.now)}))}function Jo(e,r,t,n,o){for(let s of Qa)ru(e,r,t,Ce.join(n,s.dirName),s.kind,o)}function qo(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Jo(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Xo(e.worktreesDir))return r;for(let n of zo(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Ce.join(e.worktreesDir,n.name),s;try{s=zo(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Ce.join(o,i.name);Jo(r,t,e,a,{runId:n.name,worker:i.name})}}return r}$();import{existsSync as Qo,statSync as tu}from"node:fs";import H from"node:path";function nu(e,r){try{let t=tu(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ou(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(D(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}Y();import{existsSync as
|
|
16
|
-
`).map(t=>t.trim()).filter(Boolean)}var
|
|
12
|
+
`),n=!0)}let o={capturedAt:new Date(e.now??Date.now()).toISOString(),skipReason:e.skipReason,runId:e.indexed.runId,workerName:e.indexed.workerName,worktreePath:e.indexed.worktreePath,taskId:e.indexed.worker.taskId,agentOsId:e.indexed.worker.agentOsId,branch:e.indexed.worker.branch,completionBlocker:e.indexed.worker.completionBlocker,finalResult:e.status.finalResult,changedFiles:e.status.changedFiles,gitAncestry:e.status.gitAncestry,prUrl:e.status.prUrl??null,...n?{patchPath:t}:{}};return ko(xr.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
13
|
+
`),o}var Ka=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Fa(e){return!Ka.has(e.skipReason)||J(e.indexed,e.now)?!1:bo({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(So({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Ha(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(pe.has(r.run.status)||e.liveness&&xt(r,e.liveness)||e.liveness&&ae(St(r,e.liveness))&&!J(r))?n:t}function La(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:Ha(e)}function ja(e,r){if(e.harnessRoot?.trim())return _r.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${_r.sep}runs${_r.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function vo(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=La(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=St(r,e.liveness),c=ja(e,r),d=p=>c&&Fa({indexed:r,harnessRoot:c,skipReason:p,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(ho(r,l)){let p=d("completion_blocked");if(p)return p}if(bt(r,e.liveness?.gitStatusCache)){let p=d("dirty_worktree");if(p)return p}let m=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(m!=null&&m>0){let p=d("pr_or_unmerged_commits");if(p)return p}if(go(r,e.liveness,a)||!ae(l))return"run_still_active";if(Ue(l)){let p=d("pr_or_unmerged_commits");if(p)return p}if(D(l.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(ve({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:de(l.finalResult)}).blocked){let p=d("landing_blocked");if(p)return p}if(i&&e.worktreePath){let p=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(p)return p.detail?{reason:p.reason,detail:p.detail}:p.reason}return null}function _t(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(_r.resolve(o))||r&&J(r)?"active_worker":r&&bt(r,e.gitStatusCache)?"dirty_worktree":null}function xo(e){return _t(e)}var Ct=216e5,Cr=6048e5;var Et=36e5,Er=120;var _o=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Co(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)_o.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||_o.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Po,readdirSync as Io,statSync as Ya}from"node:fs";import Oo from"node:path";se();Y();import Eo from"node:path";b();function Ga(e,r){return vr(e,r)}function wo(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of sr(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=x(Eo.join(Ie(o,s.id),"workers",v(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=Eo.resolve(u.worktreePath);Ga(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of fo(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Ao(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}b();function Va(e,r){try{let t=Ya(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function za(e,r){let t=Oo.join(e,"runs",r,"run.json");return Po(t)?x(t,null):null}function Do(e){try{return Io(e).length===0}catch{return!1}}function Wo(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Ao(n,r,t,i.liveRunKeys)||!Do(n))return"run_still_active";let a=za(r,t);return a&&!pe.has(a.status)&&!me(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function No(e){if(!Po(e.worktreesDir))return[];let r=[],t;try{t=Io(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=Oo.join(e.worktreesDir,o);Do(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:Va(s,e.now)})}return r}$();import{existsSync as At,rmSync as Go}from"node:fs";import{execFileSync as Ja}from"node:child_process";import{existsSync as Mo,readdirSync as Xa,statSync as qa}from"node:fs";import Za from"node:path";var Qa=2500;function eu(e,r=Qa){if(!Mo(e))return 0;try{let n=Ja("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 X(e,r=5e4){if(!Mo(e))return 0;let t=eu(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Xa(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Za.join(i,u),c;try{c=qa(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as ou,rmSync as su}from"node:fs";Y();import{lstatSync as ru,readdirSync as tu}from"node:fs";function Uo(e){try{let r=ru(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 To(e,r=32){let t=Uo(e);if(!t)return!1;if(t.foreign)return!0;try{let n=tu(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Uo(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as nu}from"node:child_process";import Fo from"node:path";import W from"node:path";function Bo(e,r,t,n){let o=W.resolve(e),s=`${W.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=W.relative(t,i);if(a.startsWith("..")||W.isAbsolute(a))return"path_outside_harness";let u=a.split(W.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(W.resolve(r))?"path_outside_harness":null}function wr(e,r,t){return Bo(e,r,t,"node_modules")}function Ar(e,r,t){return Bo(e,r,t,".next")}function Pr(e,r,t){let n=W.resolve(e),o=W.relative(t,n);return o.startsWith("..")||W.isAbsolute(o)||o.split(W.sep).length<3||!n.startsWith(W.resolve(r))?"path_outside_harness":null}function Ko(e,r,t){let n=W.resolve(e);return wr(n,r,t)===null||Ar(n,r,t)===null||Pr(n,r,t)===null}function Lo(){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 Ho(e){let r=nu("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function jo(e,r,t){if(!Ko(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=Ho(["chown","-R",`${n}:${o}`,Fo.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Ho(["rm","-rf",Fo.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 wt="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or run `node scripts/reclaim-harness-root-owned-cache.mjs --execute` as the harness owner with sudo available. See docs/runbooks/harness-root-owned-cache-reclaim.md.";function iu(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function $o(e,r,t={}){if(!ou(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?_e(n):null,i=e.bytes??X(e.path)??void 0,a=t.removePath??su,u=t.hasForeignOwnedEntry??To;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!iu(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=Lo();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${wt}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let g=jo(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(p){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${p.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; privileged reclaim failed: ${g.error}; ${wt}`}}}function Pt(e){let r=e.harnessRoot;return!r||!mo(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function It(e,r){let t=Pt(e);if(t)return t;let n=$o(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Yo(e,r){return It(e,r)}function Vo(e,r){return It(e,r)}function zo(e,r){return It(e,r)}function Jo(e,r){let t=Pt(e);if(t)return t;if(!At(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??X(e.path);return Go(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 Xo(e,r){let t=Pt(e);if(t)return t;if(!At(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??X(e.path);return n&&we(n,["worktree","remove","--force",e.path],{allowFailure:!0}),At(e.path)&&Go(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 Ir,readdirSync as Or,statSync as au}from"node:fs";import F from"node:path";function Ot(e,r){try{let t=au(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Zo(e,r){let t=F.relative(r,e);return t===""||!t.startsWith("..")&&!F.isAbsolute(t)}function qo(e,r,t,n){let o=[];for(let s of Rt){if(s===".next")continue;let i=F.join(e,s);if(!Ir(i))continue;let a=F.resolve(i);t.has(a)||Zo(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:Ot(a,r.now)}))}return o}function Qo(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...qo(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Ir(e.worktreesDir))return r;for(let n of Or(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=F.join(e.worktreesDir,n.name);for(let s of Or(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=F.join(o,s.name);r.push(...qo(i,e,t,{runId:n.name,worker:s.name}))}}return r}function es(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;Ir(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:Ot(a,e.now)})))}if(!t||!Ir(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 Or(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=Or(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)||Zo(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:Ot(c,e.now)}))}}return n}import{existsSync as ns,readdirSync as rs,statSync as uu}from"node:fs";import Ce from"node:path";var lu=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function cu(e,r){try{let t=uu(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function du(e,r){let t=Ce.relative(r,e);return t===""||!t.startsWith("..")&&!Ce.isAbsolute(t)}function pu(e,r,t,n,o,s){if(!ns(n))return;let i=Ce.resolve(n);r.has(i)||du(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:cu(i,t.now)}))}function ts(e,r,t,n,o){for(let s of lu)pu(e,r,t,Ce.join(n,s.dirName),s.kind,o)}function os(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||ts(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!ns(e.worktreesDir))return r;for(let n of rs(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=Ce.join(e.worktreesDir,n.name),s;try{s=rs(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=Ce.join(o,i.name);ts(r,t,e,a,{runId:n.name,worker:i.name})}}return r}$();import{existsSync as ss,statSync as mu}from"node:fs";import H from"node:path";function fu(e,r){try{let t=mu(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gu(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 hu(e,r){let t=H.relative(H.resolve(r),H.resolve(e));return t!==""&&!t.startsWith("..")&&!H.isAbsolute(t)}var ku=200;function is(e){if(!e.includeOrphans||!ss(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=we(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let u=gu(a);for(let l of u){if(i>=ku)break;let c=H.resolve(l.path);if(c===H.resolve(s)||!hu(c,e.worktreesDir)||t.has(c)||o.has(c)||!ss(c))continue;let m=H.relative(e.worktreesDir,c).split(H.sep),g=m[0],p=m[1]??"unknown";o.add(c),i+=1,n.push({kind:"remove_worktree",path:c,bytes:null,runId:g,worker:p,repo:s,ageMs:fu(c,e.now)})}}return n}se();b();import Ke from"node:path";function as(e,r){let t=Ke.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Ke.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function us(e){let r=new Map;for(let t of sr(e))for(let n of Object.keys(t.workers||{})){let o=Ke.join(Ie(e,t.id),"workers",v(n),"worker.json"),s=x(o,void 0);s?.worktreePath&&r.set(Ke.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Ke.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function Fe(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ge(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function ls(e={}){let r=e.execute===!0||e.execute!==!1&&Fe("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!Fe("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??ge("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??ge("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??ge("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??ge("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),u=e.maxActionsPerSweep??ge("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),l=e.includeOrphans===!0||Fe("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=Fe("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),m=e.accountBytes!==!1&&!Fe("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),g=ge("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:m&&g>0?g:null,y=ge("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:m,storagePerRunEntryCap:p,byteAccountingEntryCap:S}}$();import{existsSync as Dt,statSync as Ru}from"node:fs";import Dr from"node:path";b();var bu=1800*1e3;function cs(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??bu;if(!Dt(e.worktreePath))return null;if(e.runId&&e.workerName){let l=Dr.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),c=x(Dr.join(l,"worker.json"),void 0);if(c&&vt(c,r,t))return"active_worker";if(!c){let d=Dr.join(l,"heartbeat.jsonl");if(Dt(d))try{let m=r-Ru(d).mtimeMs;if(Number.isFinite(m)&&m>=0&&m<t)return"active_worker"}catch{}}}let n=Dr.join(e.worktreePath,".git");if(!Dt(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(D(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}Y();import{existsSync as Su,readdirSync as ds,statSync as vu}from"node:fs";import xu from"node:path";function ps(e={}){let r=O(e.harnessRoot??Q()),t=_e(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!Su(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=ds(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=xu.join(t,c.name);try{let m=vu(d);u=u===null?m.mtimeMs:Math.min(u,m.mtimeMs)}catch{}try{for(let m of ds(d,{withFileTypes:!0}))m.isDirectory()&&(a+=1)}catch{}if(s!==null&&e.perRunEntryCap!==null){let m=e.perRunEntryCap??5e4;if(m<=0)s=null;else{let g=X(d,m);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}}Y();import{existsSync as _u}from"node:fs";import{homedir as Cu}from"node:os";import ms from"node:path";var Eu=["/var/tmp/kynver-harness",ms.join(Cu(),".openclaw","harness")];function Wt(e,r,t){if(!t?.trim())return;let n=O(t.trim());e.has(n)||(e.add(n),r.push(n))}function wu(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 fs(e={}){let r=new Set,t=[];Wt(r,t,e.harnessRoot??Q());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Wt(r,t,o);if(wu(e))for(let o of Eu){let s=ms.resolve(o);!r.has(s)&&_u(s)&&Wt(r,t,s)}return t}nr();function Au(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Pu(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function gs(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=Pu("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=tr({...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 hs(e,r){if(!r.pressured)return e;let t=e.execute||!Au("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}}rr();import{unlinkSync as Iu}from"node:fs";function Wr(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ks(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Ou(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function ys(e={}){let r=e.execute===!0||Wr("KYNVER_WSL_CRASH_DUMP_EXECUTE")||Wr("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||Wr("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??ks("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=be({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=Ou(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{Iu(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 Rs(e){return e?Wr("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>ks("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}rr();function N(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}$();var Nr=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 Du}from"node:child_process";import{existsSync as Wu}from"node:fs";import Nu from"node:path";var Mu=5e3;function Uu(e,r){if(!Wu(Nu.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=Du("git",r,{cwd:e,encoding:"utf8",timeout:Mu}),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 bs(e){let r=Uu(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 Mr=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=bs(t)??[];return this.cache.set(t,o),o}};var Ur=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=me(r);return this.cache.set(r.id,n),n}};function Tu(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Ss(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:Tu(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 Bu(e={}){let r=e.harnessRoot?O(e.harnessRoot):Q(),t=fs({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function Ku(e){return typeof e=="string"?{reason:e}:e}function Ee(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function Tr(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:X(e.path,t)}}function vs(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 Fu(e,r){return e.kind==="remove_next_cache"?Vo(e,r):Yo(e,r)}function Hu(e,r,t){return e.kind==="remove_next_cache"?Ar(e.path,r,t):wr(e.path,r,t)}function Lu(e){let r=new Map;for(let t of e)for(let[n,o]of us(t))r.set(n,o);return r}function xs(e,r){return e.runId&&e.worker?M.join(r,e.runId,e.worker):M.resolve(e.path,"..")}function ju(e={}){let r=ls(e),t=gs();r=hs(r,t);let n=Bu(e);N("scan",`${n.scanRoots.length} harness root(s)`);let o=wo(n.scanRoots,n.now),s=r.finalizeStaleRuns?uo().map(h=>({runId:h.runId,from:h.from,to:h.to})):[];s.length>0&&N("finalize",`${s.length} stale run(s) marked terminal`),N("index","building worktree index");let i=Lu(n.scanRoots);N("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new Ur,gitStatusCache:new Mr,gitRevCache:new Nr},u=[],l=[],c=new Set,d=r.maxActionsPerSweep,m=()=>l.length>=d;for(let h of n.scanRoots){if(m())break;N("root",h);let q=M.join(h,"worktrees"),Le=as(i,h),je={harnessRoot:h,worktreesDir:q,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Le,now:n.now},Br=r.scanDependencyCaches?os(je):[];N("dependency",r.scanDependencyCaches?`${Br.length} cache candidate(s) at ${h}`:"skipped (worktree-only sweep)");let Kr=0;for(let U of Br){if(m())break;Kr+=1,Kr%50===0&&N("dependency",`${Kr}/${Br.length} evaluated`);let _=M.resolve(U.path);if(c.has(_))continue;c.add(_);let k={...U,path:_},I=Hu(k,h,q);if(I){Ee(u,k.path,I),l.push({...k,executed:!1,skipped:!0,skipReason:I});continue}let T=xs(k,q),he=Le.get(M.resolve(T))??null,K=_t({indexed:he,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:T,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(K){Ee(u,k.path,K),l.push({...k,executed:!1,skipped:!0,skipReason:K});continue}l.push(Fu(Tr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let U of Qo(je)){if(m())break;let _=M.resolve(U.path);if(c.has(_))continue;c.add(_);let k={...U,path:_},I=Pr(k.path,h,q);if(I){Ee(u,k.path,I),l.push({...k,executed:!1,skipped:!0,skipReason:I});continue}let T=xs(k,q),he=Le.get(M.resolve(T))??null,K=xo({indexed:he,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:T,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(K){Ee(u,k.path,K),l.push({...k,executed:!1,skipped:!0,skipReason:K});continue}l.push(zo(Tr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Fr=[...es(je),...is(je)];N("worktrees",`${Fr.length} candidate(s) at ${h}`);let Nt=new Set,Hr=0;for(let U of Fr){if(m())break;Hr+=1,Hr%50===0&&N("worktrees",`${Hr}/${Fr.length} evaluated`);let _=M.resolve(U.path);if(Nt.has(_))continue;Nt.add(_);let k={...U,path:_},I=Le.get(M.resolve(k.path))??null,T=I?null:cs({worktreePath:k.path,harnessRoot:h,runId:k.runId,workerName:k.worker,now:n.now}),he=vo({indexed:I,worktreePath:M.resolve(k.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:k.ageMs,orphanSafety:T,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:h,writeSalvageEvidence:r.execute});if(he){let{reason:K,detail:_s}=Ku(he);Ee(u,k.path,K,_s),l.push({...k,executed:!1,skipped:!0,skipReason:K});continue}l.push(Xo(Tr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!m()&&r.runDirectoriesAgeMs>=0)for(let U of No({harnessRoot:h,worktreesDir:q,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(m())break;let _=M.resolve(U.path);if(c.has(_))continue;c.add(_);let k={...U,path:_},I=k.runId??M.basename(_),T=Wo({harnessRoot:h,runId:I,runPath:_,ageMs:k.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(T){Ee(u,k.path,T),l.push({...k,executed:!1,skipped:!0,skipReason:T});continue}l.push(Jo(Tr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let g=0,p=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"&&(p+=1)):h.skipped&&(A+=1,h.skipReason==="dry_run"&&h.bytes&&(y+=h.bytes));let L=r.accountBytes?ps({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,B=be(),He=r.execute&&Rs(B),j=He?ys({execute:!0}):null,re=B?{observed:!0,execute:He,dumpCount:B.dumpCount,totalBytes:B.totalBytes,removedCount:j?.removed.length??0,removedBytes:j?.removedBytes??0,executables:B.executables,path:B.path,reason:B.reason}:void 0;j&&j.removed.length>0&&(S+=j.removedBytes,R+=j.removed.length,N("wsl-crashes",`removed ${j.removed.length} dump(s), ${j.removedBytes} bytes`)),N("complete",`${l.length} action(s), ${A} skipped, ${R} removed`);let te=Co(l,u),P=Ss({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:vs(l,u)},...L?{storage:L}:{},...te.length>0?{preservedLivePaths:te}:{},...p>0?{removedRunDirectories:p}:{},...re?{wslCrashDumps:re}:{}});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:vs(l,u)},...L?{storage:L}:{},...te.length>0?{preservedLivePaths:te}:{},...p>0?{removedRunDirectories:p}:{},...re?{wslCrashDumps:re}:{},compactSummary:P}}export{Er as DEFAULT_MAX_ACTIONS_PER_SWEEP,Ct as DEFAULT_NODE_MODULES_AGE_MS,Et as DEFAULT_RUN_DIRECTORIES_AGE_MS,Cr as DEFAULT_WORKTREES_AGE_MS,ju as runHarnessCleanup};
|