@kynver-app/runtime 0.1.157 → 0.1.166
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/bounded-build/exec.d.ts +3 -0
- package/dist/bounded-build/index.d.ts +1 -1
- package/dist/byoc/context-hydration.d.ts +54 -0
- package/dist/byoc/execution-proof.d.ts +46 -0
- package/dist/byoc/index.d.ts +5 -0
- package/dist/byoc/job-envelope.d.ts +39 -0
- package/dist/byoc/m6-golden-path.d.ts +80 -0
- package/dist/byoc/mcp-tool-proof.d.ts +42 -0
- package/dist/cli.js +57 -55
- package/dist/config.d.ts +8 -0
- package/dist/doctor/doctor.types.d.ts +23 -0
- package/dist/doctor/runner-install-cli.d.ts +1 -0
- package/dist/doctor/runner-install.d.ts +2 -0
- package/dist/harness-verify.d.ts +2 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +74 -71
- package/dist/model-routing.d.ts +8 -0
- package/dist/orchestration-providers/adapter-contract.d.ts +50 -0
- package/dist/orchestration-providers/index.d.ts +1 -0
- package/dist/providers/claude.d.ts +2 -0
- package/dist/server/cleanup.js +13 -13
- package/dist/server/default-repo.js +1 -1
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/monitor.js +7 -7
- package/dist/server/orchestration.js +1 -1
- package/dist/server/worker-policy.js +1 -1
- package/package.json +1 -1
package/dist/model-routing.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type KynverUserConfig } from "./config.js";
|
|
2
2
|
import type { OrchestrationRoutingAudit } from "./orchestration-providers/types.js";
|
|
3
|
+
import { CLAUDE_REVIEW_MODEL } from "./providers/claude.js";
|
|
4
|
+
export { CLAUDE_REVIEW_MODEL };
|
|
3
5
|
/** Conservative default — Sonnet for ordinary harness work (not Opus). */
|
|
4
6
|
export declare const GLOBAL_DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
5
7
|
export declare const CURSOR_DEFAULT_MODEL = "composer-2.5";
|
|
@@ -17,6 +19,12 @@ export interface ModelRoutingDecision {
|
|
|
17
19
|
}
|
|
18
20
|
/** Resolve global default: config → env → Sonnet. */
|
|
19
21
|
export declare function resolveGlobalDefaultModel(config?: KynverUserConfig): string;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve which Claude model to use when a task explicitly requests the claude provider.
|
|
24
|
+
* Review/gate/critique lanes → Opus 4.8; all other lanes (implementation, repair, plan, etc.) → Sonnet 4.6.
|
|
25
|
+
* Invariant: implementation must never silently receive Opus, review must never silently receive Sonnet.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveClaudeFactoryModel(roleLane: string, ref: string, title: string): string;
|
|
20
28
|
/**
|
|
21
29
|
* Infer model + provider from AgentOS task metadata when the dispatcher did not
|
|
22
30
|
* pass an explicit `--model`. Explicit CLI/model args always win.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter context-envelope contract schema.
|
|
3
|
+
*
|
|
4
|
+
* Declares what ContextEnvelope fields each orchestration adapter can
|
|
5
|
+
* consume when a harness worker is dispatched. Used by the server-side
|
|
6
|
+
* context-envelope policy router
|
|
7
|
+
* (src/modules/agent-os/context-envelope-policy/) to validate and record
|
|
8
|
+
* what fields were routed before worker spawn.
|
|
9
|
+
*
|
|
10
|
+
* The canonical parity invariant: kynver-harness and hermes share the
|
|
11
|
+
* same context_envelope_* capabilities so that Kynver-native workers
|
|
12
|
+
* receive the same goal/plan/task/memory context as Hermes-dispatched
|
|
13
|
+
* workers. Kynver-harness additionally supports instruction_policy,
|
|
14
|
+
* persona_context, and memory_quality_capture for richer local context.
|
|
15
|
+
*/
|
|
16
|
+
/** Fields from the AgentOS ContextEnvelope that an adapter can consume. */
|
|
17
|
+
export type AdapterContextCapability = "instruction_policy" | "persona_context" | "memory_quality_capture" | "context_envelope_goal" | "context_envelope_plan" | "context_envelope_task" | "context_envelope_memories" | "context_envelope_sessions" | "context_envelope_persona";
|
|
18
|
+
/** Canonical adapter identity for context-envelope policy routing. */
|
|
19
|
+
export type AdapterContextContractId = "kynver-harness" | "hermes" | "cursor" | "codex" | "claude";
|
|
20
|
+
/**
|
|
21
|
+
* Describes what ContextEnvelope capabilities an orchestration adapter
|
|
22
|
+
* can accept at dispatch time. The context-envelope policy router uses
|
|
23
|
+
* this to determine which fields to route and whether dispatch should be
|
|
24
|
+
* blocked due to missing required context.
|
|
25
|
+
*/
|
|
26
|
+
export interface AdapterContextContract {
|
|
27
|
+
adapterId: AdapterContextContractId;
|
|
28
|
+
displayName: string;
|
|
29
|
+
/** All capabilities this adapter can consume when present. */
|
|
30
|
+
capabilities: AdapterContextCapability[];
|
|
31
|
+
/**
|
|
32
|
+
* Subset of `capabilities` that must be satisfiable before dispatch
|
|
33
|
+
* proceeds. An adapter with a required capability for which the
|
|
34
|
+
* context envelope has no data will produce `shouldBlock: true` in
|
|
35
|
+
* the policy slice. Most adapters have no required capabilities.
|
|
36
|
+
*/
|
|
37
|
+
requiredCapabilities: AdapterContextCapability[];
|
|
38
|
+
/**
|
|
39
|
+
* How this adapter receives injected context. Operator and developer
|
|
40
|
+
* reference only — not machine-enforced.
|
|
41
|
+
*/
|
|
42
|
+
compatibilityNotes: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Look up the context-envelope contract for a given adapter. Returns a
|
|
46
|
+
* no-capability contract for unknown adapter IDs so policy routing never
|
|
47
|
+
* throws — it simply records zero satisfied capabilities.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getAdapterContextContract(adapterId: string): AdapterContextContract;
|
|
50
|
+
export declare function listAdapterContextContracts(): AdapterContextContract[];
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { WorkerProvider } from "./types.js";
|
|
2
2
|
/** Provider default when no explicit model is passed — Sonnet, not Opus. */
|
|
3
3
|
export declare const CLAUDE_DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
4
|
+
/** Model for review/gate/critique lanes when dispatched on the claude provider. */
|
|
5
|
+
export declare const CLAUDE_REVIEW_MODEL = "claude-opus-4-8";
|
|
4
6
|
export declare const claudeProvider: WorkerProvider;
|
package/dist/server/cleanup.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var g=(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 Te(e){try{return
|
|
1
|
+
var g=(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 No,mkdirSync as Uo,readFileSync as at,readdirSync as ja,statSync as ut,writeFileSync as To}from"node:fs";import Bo from"node:path";function br(e){console.error(e),process.exit(1)}function Sr(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function Ue(e){try{return JSON.parse(e)}catch{return null}}function x(e,r){try{return JSON.parse(at(e,"utf8"))}catch(t){if(arguments.length>1)return r;br(`failed to read ${e}: ${t.message}`)}}function lt(e,r){Uo(Bo.dirname(e),{recursive:!0}),To(e,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`)}function v(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Te(e){try{return ut(e).size}catch{return 0}}function Be(e){try{return ut(e).mtime.toISOString()}catch{return null}}function ct(e,r){return No(e)?at(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function z(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function C(e,r){try{let t=mt("git",r,br({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 pt(e,r,t){let n=C(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 Fe(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 vr(n,"missing worktree path");let s=C(e,["rev-parse","HEAD"]);if(s.status!==0)return vr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=C(e,["rev-parse",n]);if(m.status!==0)return vr(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=pt(e,i,a),l=pt(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 vr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var L=g(()=>{"use strict";S();dt()});import{homedir as ft}from"node:os";import gt from"node:path";function Ho(e){return e==="~"?ft():e.startsWith("~/")||e.startsWith("~\\")?gt.join(ft(),e.slice(2)):e}function He(e){return gt.resolve(Ho(e))}var ce=g(()=>{"use strict"});var _r=g(()=>{"use strict";L();ce()});var xr=g(()=>{"use strict"});var Cr=g(()=>{"use strict"});var ht=g(()=>{"use strict"});import{existsSync as Ko,readFileSync as Lo,statfsSync as jo}from"node:fs";function wr(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Ko(e))continue;let r=Lo(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function kt(e={}){if(!(e.forceWsl===void 0?wr():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||de,n=e.wslHostFreeWarnBytes??$o,o=e.wslHostFreeCriticalBytes??Go,s=e.statfs??jo,i;try{i=s(t)}catch(R){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${R.message}`,probeError:R.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,f=(a/(1024*1024*1024)).toFixed(1),p=null;return m||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Yo()}`),{ok:m,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Yo(){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 $o,Go,de,Er=g(()=>{"use strict";$o=25*1024*1024*1024,Go=12*1024*1024*1024,de="/mnt/c"});import{execFileSync as yt}from"node:child_process";import{existsSync as Le,readFileSync as Rt,readdirSync as Vo,statSync as zo}from"node:fs";import Ar from"node:path";function Ke(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function bt(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=yt("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()||de;return r&&Le(Ar.join(t,"Users",r))?r:null}function Zo(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()||de,n=e.windowsUser??bt();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function es(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 rs(){try{if(Le("/proc/sys/kernel/core_pattern"))return Rt("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return yt("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function ts(e){return!!(e&&/wsl-capture-crash/i.test(e))}function ns(e,r=de){let t=Ar.join(r,"Users",e,".wslconfig");if(!Le(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=Rt(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 os(e){if(!Le(e))return[];let r=Vo(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Ar.join(e,n.name);try{let s=zo(o),i=es(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 pe(e={}){if(!(e.forceWsl===void 0?wr():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||de,n=e.windowsUser??bt(),o=e.warnBelowBytes??Ke("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Jo),s=e.criticalBelowBytes??Ke("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",Xo),i=e.warnCount??Ke("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",qo),a=e.criticalCount??Ke("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Qo),u=(e.readCorePattern??rs)(),l=ts(u),c=null;n&&(c=(e.readWslConfig??ns)(n,t));let d=c?.maxCrashDumpCount??null,m=d===-1,f=Zo({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!f)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:null,probeError:"windows_user_unresolved"};let p;try{p=(e.listDumps??os)(f)}catch(E){return{ok:!1,path:f,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:`WSL crash dump probe failed at ${f}: ${E.message}`,probeError:E.message}}let R=p.reduce((E,h)=>E+h.bytes,0),b=p.length,y=[...new Set(p.map(E=>E.executableHint).filter(E=>!!E))],w=R>=s,H=R>=o,U=b>=a,Me=b>=i,Q=!(w||U||H||Me),Z=null;if(!Q){let E=w||U?"critical":"warning",h=(R/1024**3).toFixed(1),V=y.length>0?y.join(", "):"unknown";Z=`WSL crash dumps ${E}: ${b} file(s), ${h} GiB at ${f} (executables: ${V}). `+ss({wslCaptureEnabled:l,dumpsDisabledInWslConfig:m})}return{ok:Q,path:f,windowsUser:n,dumpCount:b,totalBytes:R,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:y,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:Z,probeError:null}}function ss(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 Jo,Xo,qo,Qo,je=g(()=>{"use strict";Er();Jo=5*1024*1024*1024,Xo=10*1024*1024*1024,qo=2,Qo=4});import{statfsSync as is}from"node:fs";function $e(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??as,n=e.diskFreeCriticalBytes??us,o=e.diskMaxUsedPercent??ls,s=e.diskHardMaxUsedPercent??cs,i=is(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,f=m&&l>o,p=m&&l>s,R=!c&&!d&&!f&&!p,b=e.skipWslHostCheck?null:kt(e.wslHost),y=e.skipWslCrashDumpCheck?null:pe(e.wslCrashDumps),w=R&&(b?b.ok:!0)&&(y?y.ok:!0),H=null;return w||(H=[d?`free space below critical ${n} bytes`:null,c?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,b&&!b.ok?b.reason:null,y&&!y.ok?y.reason:null].filter(Boolean).join("; ")),ds({ok:w,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:H,wslHost:b,wslCrashDumps:y?{ok:y.ok,path:y.path,dumpCount:y.dumpCount,totalBytes:y.totalBytes,executables:y.executables,wslCaptureEnabled:y.wslCaptureEnabled,dumpsDisabledInWslConfig:y.dumpsDisabledInWslConfig,reason:y.reason,probeError:y.probeError}:null})}function ds(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 as,us,ls,cs,Ge=g(()=>{"use strict";je();Er();as=30*1024*1024*1024,us=15*1024*1024*1024,ls=80,cs=90});import{existsSync as ps,readdirSync as ms,statSync as fs}from"node:fs";import Pr from"node:path";function Ye(){return vt()}function Wr(){let{runsDir:e}=Ye();return St(e)}function Ve(e){return St(j(e))}function gs(e){try{return fs(e).isDirectory()}catch{return!1}}function St(e){if(!ps(e))return[];let r=[];for(let t of ms(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Pr.join(e,t.name);if(!gs(n))continue;let o=x(Pr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Dr(e){let{runsDir:r}=Ye();ut(Pr.join(Or(r,e.id),"run.json"),e)}function Se(e){let{harnessRoot:r}=Ye();return ve(r,e)}function ve(e,r){return Or(j(e),v(r))}var ee=g(()=>{"use strict";$();S()});import{existsSync as hs,readdirSync as ks}from"node:fs";import ys from"node:path";function Mr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=ys.join(Se(e.id),"workers");if(!hs(t))return[...r];for(let n of ks(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Nr=g(()=>{"use strict";ee();S()});function Ir(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 _t(e){let r=e.trim();if(!r)return null;let t=Ir(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ir(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ir(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function xt(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?_t(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=_t(t);return n||t}var Ct=g(()=>{"use strict"});import{existsSync as Rs,readFileSync as bs}from"node:fs";function wt(e){return e==="complete"}function Et(e){return wt(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Rs(e))return r;let t=Date.now()+Ss,n=new Date(t).toISOString(),o=bs(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=Ue(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)),
|
|
4
|
+
`):""}function z(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function dt(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 vr(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var S=g(()=>{"use strict"});var Fo,Ya,pt=g(()=>{"use strict";Fo=["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"],Ya=new Set(Fo)});import{spawnSync as ft}from"node:child_process";function Re(e,r,t={}){let n=ft("git",r,Sr({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);br(o)}return n.stdout||""}function be(e){return Re(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function C(e,r){try{let t=ft("git",r,Sr({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 mt(e,r,t){let n=C(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 Fe(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 _r(n,"missing worktree path");let s=C(e,["rev-parse","HEAD"]);if(s.status!==0)return _r(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=C(e,["rev-parse",n]);if(m.status!==0)return _r(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=mt(e,i,a),l=mt(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 _r(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var L=g(()=>{"use strict";S();pt()});import{homedir as gt}from"node:os";import ht from"node:path";function Ho(e){return e==="~"?gt():e.startsWith("~/")||e.startsWith("~\\")?ht.join(gt(),e.slice(2)):e}function He(e){return ht.resolve(Ho(e))}var ce=g(()=>{"use strict"});var xr=g(()=>{"use strict";L();ce()});var Cr=g(()=>{"use strict"});var wr=g(()=>{"use strict"});var kt=g(()=>{"use strict"});import{existsSync as Ko,readFileSync as Lo,statfsSync as jo}from"node:fs";function Er(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Ko(e))continue;let r=Lo(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function yt(e={}){if(!(e.forceWsl===void 0?Er():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||de,n=e.wslHostFreeWarnBytes??$o,o=e.wslHostFreeCriticalBytes??Go,s=e.statfs??jo,i;try{i=s(t)}catch(R){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${R.message}`,probeError:R.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,f=(a/(1024*1024*1024)).toFixed(1),p=null;return m||(p=`Windows host disk ${t} at ${d?"critical":"warning"}: ${f} GiB free (<${(d?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${Yo()}`),{ok:m,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Yo(){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 $o,Go,de,Ar=g(()=>{"use strict";$o=25*1024*1024*1024,Go=12*1024*1024*1024,de="/mnt/c"});import{execFileSync as Rt}from"node:child_process";import{existsSync as Le,readFileSync as bt,readdirSync as Vo,statSync as zo}from"node:fs";import Pr from"node:path";function Ke(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function St(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=Rt("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()||de;return r&&Le(Pr.join(t,"Users",r))?r:null}function Zo(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()||de,n=e.windowsUser??St();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function es(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 rs(){try{if(Le("/proc/sys/kernel/core_pattern"))return bt("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return Rt("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function ts(e){return!!(e&&/wsl-capture-crash/i.test(e))}function ns(e,r=de){let t=Pr.join(r,"Users",e,".wslconfig");if(!Le(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let n;try{n=bt(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 os(e){if(!Le(e))return[];let r=Vo(e,{withFileTypes:!0}),t=[];for(let n of r){if(!n.isFile()||!n.name.toLowerCase().endsWith(".dmp"))continue;let o=Pr.join(e,n.name);try{let s=zo(o),i=es(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 pe(e={}){if(!(e.forceWsl===void 0?Er():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||de,n=e.windowsUser??St(),o=e.warnBelowBytes??Ke("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Jo),s=e.criticalBelowBytes??Ke("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",qo),i=e.warnCount??Ke("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Xo),a=e.criticalCount??Ke("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Qo),u=(e.readCorePattern??rs)(),l=ts(u),c=null;n&&(c=(e.readWslConfig??ns)(n,t));let d=c?.maxCrashDumpCount??null,m=d===-1,f=Zo({hostMount:t,windowsUser:n,crashDumpDir:e.crashDumpDir});if(!f)return{ok:!0,path:null,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:null,probeError:"windows_user_unresolved"};let p;try{p=(e.listDumps??os)(f)}catch(E){return{ok:!1,path:f,windowsUser:n,dumpCount:0,totalBytes:0,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:[],executables:[],corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:`WSL crash dump probe failed at ${f}: ${E.message}`,probeError:E.message}}let R=p.reduce((E,h)=>E+h.bytes,0),b=p.length,y=[...new Set(p.map(E=>E.executableHint).filter(E=>!!E))],w=R>=s,H=R>=o,U=b>=a,Ie=b>=i,Q=!(w||U||H||Ie),Z=null;if(!Q){let E=w||U?"critical":"warning",h=(R/1024**3).toFixed(1),V=y.length>0?y.join(", "):"unknown";Z=`WSL crash dumps ${E}: ${b} file(s), ${h} GiB at ${f} (executables: ${V}). `+ss({wslCaptureEnabled:l,dumpsDisabledInWslConfig:m})}return{ok:Q,path:f,windowsUser:n,dumpCount:b,totalBytes:R,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:y,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:Z,probeError:null}}function ss(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 Jo,qo,Xo,Qo,je=g(()=>{"use strict";Ar();Jo=5*1024*1024*1024,qo=10*1024*1024*1024,Xo=2,Qo=4});import{statfsSync as is}from"node:fs";function $e(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??as,n=e.diskFreeCriticalBytes??us,o=e.diskMaxUsedPercent??ls,s=e.diskHardMaxUsedPercent??cs,i=is(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,f=m&&l>o,p=m&&l>s,R=!c&&!d&&!f&&!p,b=e.skipWslHostCheck?null:yt(e.wslHost),y=e.skipWslCrashDumpCheck?null:pe(e.wslCrashDumps),w=R&&(b?b.ok:!0)&&(y?y.ok:!0),H=null;return w||(H=[d?`free space below critical ${n} bytes`:null,c?`free space below warning ${t} bytes`:null,p?`used percent above hard cap ${s}%`:null,f?`used percent above cap ${o}%`:null,b&&!b.ok?b.reason:null,y&&!y.ok?y.reason:null].filter(Boolean).join("; ")),ds({ok:w,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:H,wslHost:b,wslCrashDumps:y?{ok:y.ok,path:y.path,dumpCount:y.dumpCount,totalBytes:y.totalBytes,executables:y.executables,wslCaptureEnabled:y.wslCaptureEnabled,dumpsDisabledInWslConfig:y.dumpsDisabledInWslConfig,reason:y.reason,probeError:y.probeError}:null})}function ds(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 as,us,ls,cs,Ge=g(()=>{"use strict";je();Ar();as=30*1024*1024*1024,us=15*1024*1024*1024,ls=80,cs=90});import{existsSync as ps,readdirSync as ms,statSync as fs}from"node:fs";import Wr from"node:path";function Ye(){return _t()}function Or(){let{runsDir:e}=Ye();return vt(e)}function Ve(e){return vt(j(e))}function gs(e){try{return fs(e).isDirectory()}catch{return!1}}function vt(e){if(!ps(e))return[];let r=[];for(let t of ms(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Wr.join(e,t.name);if(!gs(n))continue;let o=x(Wr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Dr(e){let{runsDir:r}=Ye();lt(Wr.join(Ir(r,e.id),"run.json"),e)}function Se(e){let{harnessRoot:r}=Ye();return ve(r,e)}function ve(e,r){return Ir(j(e),v(r))}var ee=g(()=>{"use strict";$();S()});import{existsSync as hs,readdirSync as ks}from"node:fs";import ys from"node:path";function Mr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(v(n));let t=ys.join(Se(e.id),"workers");if(!hs(t))return[...r];for(let n of ks(t,{withFileTypes:!0}))n.isDirectory()&&r.add(v(n.name));return[...r]}var Nr=g(()=>{"use strict";ee();S()});function Ur(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 xt(e){let r=e.trim();if(!r)return null;let t=Ur(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Ur(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Ur(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function Ct(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?xt(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=xt(t);return n||t}var wt=g(()=>{"use strict"});import{existsSync as Rs,readFileSync as bs}from"node:fs";function Et(e){return e==="complete"}function At(e){return Et(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function me(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Rs(e))return r;let t=Date.now()+Ss,n=new Date(t).toISOString(),o=bs(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=Ue(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)),Et(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Ct(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 Ss,ze=g(()=>{"use strict";wt();S();Ss=6e4});function _s(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function xs(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 Cs(e){let r=_s(e[0]);return!!(r&&vs.has(r))}function Tr(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Br(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function ws(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Es(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;Pt.has(n)&&(t+=1);continue}r.push(n)}}return r}function As(e){let r=!1,t=e.map((o,s)=>{let i=ws(o),a=e[s-1];return a&&Pt.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=Es(t);if(n.length===2){let[o,s]=n;if(Br(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(Tr(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function Fr(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=xs(i.trim());if(!a.length||!Cs(a))return i;let u=As(a);return u.changed?(o=!0,u.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Wt(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 Ps(e){let{pattern:r,target:t}=Wt(e);return r?Br(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Tr(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Ws(e){let{pattern:r,target:t}=Wt(e);if(!r)return null;if(Br(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Tr(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Os(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 Ds(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 Hr(e){let r=e.meta?.trim()||(e.command?Ds(e.command):null)||null;if(r){let t=Ps(r),n=Os(t);if(n)return n;let o=Ws(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=Fr(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 vs,Pt,Ot=g(()=>{"use strict";vs=new Set(["rg","ripgrep","grep"]),Pt=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function _e(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Us(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 xe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ts(e){let r=e.metadata;if(!xe(r))return null;let t=r.vulnerabilities;if(!xe(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 Bs(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 Fs(e,r){let t=e.error;if(xe(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?_e(o.split(`
|
|
7
7
|
`).find(Boolean)??o,160):"npm audit failed"}function Hs(e){let r=`${e.stdout}
|
|
8
|
-
${e.stderr}`.trim(),t=Us(r);if(!t||!xe(t)){let o=_e(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(xe(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Fs(t,e.stderr)}`};let n=Ts(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:Bs(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Ks(e){return
|
|
9
|
-
`).filter(Boolean);for(let n of t){let o=Ue(n);if(!o)continue;let s=Ys(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=Vs(a);u&&(r.currentTool=u)}let i=Js(o);i&&Xs(r,Dt({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&zs(r,o)}return r}var Nt=g(()=>{"use strict";Ot();S()});function Qs(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function It(e){let r=(e??"").trim();if(!r)return null;for(let t of qs)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Qs(r)}`};return null}var qs,Ut=g(()=>{"use strict";qs=[{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 Tt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Zs(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 ei(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Tt(e.head)}function ri(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 Bt(e){if(e.alive||Zs(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Tt(e.headCommit)??ei(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:ri(s,r,t)}}var Ft=g(()=>{"use strict"});function Ce(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ti(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 ni(e){if(Ce(e.headCommit)||Ce(e.prUrl)||Ce(e.artifactBundlePath)||Ce(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Ce(r.head))}function fe(e){return ti(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:ni(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 Ht(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Je=g(()=>{"use strict"});function Hr(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 Kt(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Xe(e){let r=e.trim();if(!r)return null;let t=Hr(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=Hr(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=Hr(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=Kt(u);for(let c of n){let d=Kt(c);d>l&&(u=c,l=d)}return u}var Kr=g(()=>{"use strict"});function Lt(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 jt(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function oi(e){return new Set(e.map(r=>jt(Lt(r)??r)).filter(Boolean))}function $t(e,r,t){let n=Lt(e)??e;if(!n)return"unrelated";let o=jt(n);return oi(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Gt=g(()=>{"use strict"});function ge(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function si(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function re(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ge(e)}function qe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Yt(e){let r=null;if(typeof e=="string"){let o=Xe(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=re(String(s.prUrl??s.pr_url??"")),a=ge(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:ge(s.mergeCommit??s.merge_commit),reason:ge(s.reason)})}return n}function Vt(e,r){let t=[],n=re(ge(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=re(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function zt(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(!si(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?re(ge(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?re(r.targetPrUrls[0]):null):null;if(s){let d=Vt(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let R of d)if(R!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${R} instead of canonical target ${s}`}}let p=Yt(n).find(R=>R.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=Yt(n),a=new Map(i.map(d=>[qe(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>qe(re(d)??d)).filter(Boolean)),l=Vt(t,n);if(r.landingOnly)for(let d of l){let m=a.get(qe(d)),f=$t(d,r.targetPrUrls,m);if(!(f==="contract"||f==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let m=qe(re(d)??d),f=a.get(m);if(!f){c.push(m);continue}f.outcome!=="merged"&&!f.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 Jt(e){if(e.blocked)return e.detail??e.reason}var Xt=g(()=>{"use strict";Kr();Gt()});function ui(e){let r=Date.now();if(e.completionBlocker&&!qt(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&ci(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=fe(o);if(s.blocked){let i=Ht(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=zt({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Jt(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(li(e))return{state:"done",reason:"empty abandoned worker record"};let o=It(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Bt({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>ii)return{state:"needs_attention",reason:`no first stream event ${Sr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ai?{state:"stale",reason:`no log/event/heartbeat activity for ${Sr(n)}s`}:{state:"ok",reason:"recent activity"}}function qt(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function li(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 ci(e){let r=null;if(typeof e=="string"?r=Xe(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 di(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Et(t))}function we(e,r={}){let t=Mt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=di(e,t.finalResult,n),i=o?!1:z(e.pid),a=Te(e.stdoutPath),u=Te(e.stderrPath),l=Te(e.heartbeatPath),c=be(e.worktreePath),d=Fe(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=ct([t.lastEventAt,n.lastHeartbeatAt,Be(e.stdoutPath),Be(e.stderrPath),Be(e.heartbeatPath)]),f=t.error||!i&&!s&<(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,R=qt(p)?null:p,b=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,y=ui({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:f,changedFiles:c,gitAncestry:d,completionBlocker:R,landingContract:b,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),w=R||y.state==="blocked"?"blocked":o||y.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:w,attention:y,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:f,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 te(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Qt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ii,ai,ne=g(()=>{"use strict";ze();Nt();Ut();Ft();L();Je();Xt();Kr();S();ii=18e4,ai=6e5});var Zt=g(()=>{"use strict";ne()});var mi,fi,en=g(()=>{"use strict";ht();Ee();xr();Cr();Lr();Ge();ee();Nr();Zt();S();mi=500*1024*1024,fi=4*1024*1024*1024});var Lr=g(()=>{"use strict";en()});import{homedir as gi}from"node:os";import hi from"node:path";var ki,rn=g(()=>{"use strict";ki=hi.join(gi(),".kynver",".env")});var tn=g(()=>{"use strict"});var nn=g(()=>{"use strict";tn()});var on=g(()=>{"use strict"});var sn=g(()=>{"use strict";nn();on()});var an=g(()=>{"use strict"});var un=g(()=>{"use strict";an()});var cn=g(()=>{"use strict";rn();ce();Ee();sn();un()});import{existsSync as vi,mkdirSync as mc,readFileSync as _i,writeFileSync as fc}from"node:fs";import{homedir as xi,totalmem as hc}from"node:os";import jr from"node:path";function Qe(){if(!vi(dn))return{};try{return JSON.parse(_i(dn,"utf8"))}catch{return{}}}var pn,dn,wc,Ec,Ac,Ee=g(()=>{"use strict";_r();ce();S();xr();Cr();Lr();Ge();cn();pn=jr.join(xi(),".kynver"),dn=jr.join(pn,"config.json"),wc=jr.join(pn,"credentials");Ec=500*1024*1024,Ac=4*1024*1024*1024});import{existsSync as mn}from"node:fs";import{homedir as gn}from"node:os";import J from"node:path";function P(e){let r=J.resolve(He(e.trim()));for(;Ci.has(J.basename(r));)r=J.dirname(r);return r}function X(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return P(e);let r=Qe().harnessRoot?.trim();if(r)return P(r);let t=J.join(gn(),".kynver","harness");return mn(t)?t:mn(fn)?fn:t}function j(e){return J.join(P(e),"runs")}function he(e){return J.join(P(e),"worktrees")}function vt(){let e=X();return{harnessRoot:e,runsDir:j(e),worktreesDir:he(e)}}function Or(e,r){return J.join(e,v(r))}var fn,Ci,$=g(()=>{"use strict";Ee();ce();S();fn=J.join(gn(),".openclaw","harness"),Ci=new Set(["runs","worktrees"])});$();import M from"node:path";Je();import tr from"node:path";L();ne();var $r=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function hn(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of $r)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function W(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!hn(n)})}function oe(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 Ae(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?W(e.changedFiles).length>0:!!(oe(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}S();function Pe(e){return e.status||(e.status=we(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Gr(e,r){if(e.status)return W(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):be(e.worktreePath);return W(t).length>0}function wi(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Yr(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=wi(e);if(o&&!z(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):be(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"}:Fe(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??oe(s)};return e.status=c,c}return Pe(e)}ne();ee();Nr();ne();S();import Ei from"node:path";var Ai=new Set(["running","dispatching","pending","queued","needs_attention"]),se=new Set(["completed","failed","cancelled","done"]);function ie(e){let r=Mr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Ei.join(Se(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let u=we(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Qt(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function kn(){let e=[];for(let r of Wr()){if(!Ai.has(r.status))continue;let t=ie(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Dr(r),e.push({runId:r.id,from:n,to:t})}return e}ne();ze();import{existsSync as Ze,mkdirSync as pd,readdirSync as bn,renameSync as md,statSync as Pi}from"node:fs";import ae from"node:path";Ee();_r();ce();ze();$();ee();$();S();import q from"node:path";var ad=`${q.sep}runs${q.sep}runs${q.sep}`;function yn(e){return{workerJsonPath:q.join(e,"worker.json"),stdoutPath:q.join(e,"stdout.jsonl"),stderrPath:q.join(e,"stderr.log"),heartbeatPath:q.join(e,"heartbeat.jsonl"),lastStatusPath:q.join(e,"last-status.json")}}S();var We=900*1e3,Sd=3600*1e3;function Sn(e,r){let t=ae.resolve(e),n=ae.resolve(j(r)),o=ae.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ae.isAbsolute(o)}function Wi(e){if(!Ze(e))return[];try{return bn(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Di(e){let r=ae.join(e,"workers");if(!Ze(r))return[];try{return bn(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Rn(e,r,t){if(!Ze(e))return!1;try{let n=r-Pi(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Oi(e,r=Date.now(),t=We){if(!Ze(e))return!1;let n=yn(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&z(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Rn(n.stdoutPath,r,t)||Rn(n.heartbeatPath,r,t))}function Mi(e,r=Date.now(),t=We){for(let n of Di(e))if(Oi(ae.join(e,"workers",n),r,t))return!0;return!1}function vn(e,r=Date.now()){let t=new Set,n=j(e);for(let o of Wi(n)){let s=ae.join(n,o);Mi(s,r)&&t.add(`${e}\0${o}`)}return t}S();function Vr(e,r=Date.now(),t=We){let n=me(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function er(e,r=Date.now(),t=We){return z(e.pid)?!0:Vr(e,r,t)}function Ni(e,r){return r?r.runTerminalCache.derive(e.run):ie(e.run)}function G(e,r=Date.now()){return er(e.worker,r)}function zr(e,r){return se.has(e.run.status)?!1:Ni(e,r)!==null}function _n(e,r,t=Date.now()){if(G(e,t))return!0;if(se.has(e.run.status)||zr(e,r))return!1;let n=Pe(e);return te(n)?!1:!!G(e,t)}Je();ne();function xn(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(G(e))return!0;let n=r??Pe(e);return!!(!te(n)||Ae(n)||W(n.changedFiles).length>0||fe({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:oe(n.finalResult)}).blocked)}L();S();import{existsSync as wn,mkdirSync as Ii,writeFileSync as Cn}from"node:fs";import rr from"node:path";function En(e,r,t){return rr.join(e,"salvage",v(r),v(t))}function An(e){return wn(rr.join(En(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Pn(e){let r=En(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Ii(r,{recursive:!0});let t=rr.join(r,"salvage.patch"),n=!1;if(wn(e.indexed.worktreePath)){let s=C(e.indexed.worktreePath,["diff","HEAD"]),i=C(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
10
|
-
`);a.trim()&&(
|
|
8
|
+
${e.stderr}`.trim(),t=Us(r);if(!t||!xe(t)){let o=_e(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(xe(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Fs(t,e.stderr)}`};let n=Ts(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:Bs(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Ks(e){return Is.test(e)}function Ls(e){return Ms.test(e)}function js(e){let r=Hr({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&&Ns.test(n)){let i=_e(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Fr(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=_e(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 Dt(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Ks(e.command)){let i=r.trim()||n.trim()||t.trim();return Hs({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ls(e.command))return js({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Hr({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=_e(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Is,Ms,Ns,It=g(()=>{"use strict";Ot();Is=/\bnpm\s+audit\b/i,Ms=/\b(rg|ripgrep)\b/i,Ns=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as $s,readFileSync as Gs}from"node:fs";function Ys(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Vs(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 zs(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 Js(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 qs(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Mt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!$s(e))return r;let t=Gs(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean);for(let n of t){let o=Ue(n);if(!o)continue;let s=Ys(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=Vs(a);u&&(r.currentTool=u)}let i=Js(o);i&&qs(r,Dt({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&zs(r,o)}return r}var Nt=g(()=>{"use strict";It();S()});function Qs(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Ut(e){let r=(e??"").trim();if(!r)return null;for(let t of Xs)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Qs(r)}`};return null}var Xs,Tt=g(()=>{"use strict";Xs=[{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 Bt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Zs(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 ei(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Bt(e.head)}function ri(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 Ft(e){if(e.alive||Zs(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Bt(e.headCommit)??ei(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:ri(s,r,t)}}var Ht=g(()=>{"use strict"});function Ce(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ti(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 ni(e){if(Ce(e.headCommit)||Ce(e.prUrl)||Ce(e.artifactBundlePath)||Ce(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&Ce(r.head))}function fe(e){return ti(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:ni(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 Kt(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Je=g(()=>{"use strict"});function Kr(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 Lt(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function qe(e){let r=e.trim();if(!r)return null;let t=Kr(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=Kr(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=Kr(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=Lt(u);for(let c of n){let d=Lt(c);d>l&&(u=c,l=d)}return u}var Lr=g(()=>{"use strict"});function jt(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 $t(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function oi(e){return new Set(e.map(r=>$t(jt(r)??r)).filter(Boolean))}function Gt(e,r,t){let n=jt(e)??e;if(!n)return"unrelated";let o=$t(n);return oi(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Yt=g(()=>{"use strict"});function ge(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function si(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function re(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ge(e)}function Xe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Vt(e){let r=null;if(typeof e=="string"){let o=qe(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=re(String(s.prUrl??s.pr_url??"")),a=ge(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:ge(s.mergeCommit??s.merge_commit),reason:ge(s.reason)})}return n}function zt(e,r){let t=[],n=re(ge(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=re(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Jt(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(!si(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?re(ge(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?re(r.targetPrUrls[0]):null):null;if(s){let d=zt(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let R of d)if(R!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${R} instead of canonical target ${s}`}}let p=Vt(n).find(R=>R.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=Vt(n),a=new Map(i.map(d=>[Xe(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>Xe(re(d)??d)).filter(Boolean)),l=zt(t,n);if(r.landingOnly)for(let d of l){let m=a.get(Xe(d)),f=Gt(d,r.targetPrUrls,m);if(!(f==="contract"||f==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let m=Xe(re(d)??d),f=a.get(m);if(!f){c.push(m);continue}f.outcome!=="merged"&&!f.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 qt(e){if(e.blocked)return e.detail??e.reason}var Xt=g(()=>{"use strict";Lr();Yt()});function ui(e){let r=Date.now();if(e.completionBlocker&&!Qt(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&ci(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=fe(o);if(s.blocked){let i=Kt(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Jt({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=qt(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(li(e))return{state:"done",reason:"empty abandoned worker record"};let o=Ut(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ft({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>ii)return{state:"needs_attention",reason:`no first stream event ${vr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ai?{state:"stale",reason:`no log/event/heartbeat activity for ${vr(n)}s`}:{state:"ok",reason:"recent activity"}}function Qt(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function li(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 ci(e){let r=null;if(typeof e=="string"?r=qe(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 di(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??At(t))}function we(e,r={}){let t=Mt(e.stdoutPath),n=me(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=di(e,t.finalResult,n),i=o?!1:z(e.pid),a=Te(e.stdoutPath),u=Te(e.stderrPath),l=Te(e.heartbeatPath),c=be(e.worktreePath),d=Fe(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=dt([t.lastEventAt,n.lastHeartbeatAt,Be(e.stdoutPath),Be(e.stderrPath),Be(e.heartbeatPath)]),f=t.error||!i&&!s&&ct(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,R=Qt(p)?null:p,b=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,y=ui({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:m,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:f,changedFiles:c,gitAncestry:d,completionBlocker:R,landingContract:b,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),w=R||y.state==="blocked"?"blocked":o||y.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:w,attention:y,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:f,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 te(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Zt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ii,ai,ne=g(()=>{"use strict";ze();Nt();Tt();Ht();L();Je();Xt();Lr();S();ii=18e4,ai=6e5});var en=g(()=>{"use strict";ne()});var mi,fi,rn=g(()=>{"use strict";kt();Ee();Cr();wr();jr();Ge();ee();Nr();en();S();mi=500*1024*1024,fi=4*1024*1024*1024});var jr=g(()=>{"use strict";rn()});import{homedir as gi}from"node:os";import hi from"node:path";var ki,tn=g(()=>{"use strict";ki=hi.join(gi(),".kynver",".env")});var nn=g(()=>{"use strict"});var on=g(()=>{"use strict";nn()});var sn=g(()=>{"use strict"});var an=g(()=>{"use strict";on();sn()});var un=g(()=>{"use strict"});var ln=g(()=>{"use strict";un()});var dn=g(()=>{"use strict";tn();ce();Ee();an();ln()});import{existsSync as vi,mkdirSync as fc,readFileSync as _i,writeFileSync as gc}from"node:fs";import{homedir as xi,totalmem as kc}from"node:os";import $r from"node:path";function Qe(){if(!vi(pn))return{};try{return JSON.parse(_i(pn,"utf8"))}catch{return{}}}var mn,pn,Ec,Ac,Pc,Ee=g(()=>{"use strict";xr();ce();S();Cr();wr();jr();Ge();dn();mn=$r.join(xi(),".kynver"),pn=$r.join(mn,"config.json"),Ec=$r.join(mn,"credentials");Ac=500*1024*1024,Pc=4*1024*1024*1024});import{existsSync as fn}from"node:fs";import{homedir as hn}from"node:os";import J from"node:path";function P(e){let r=J.resolve(He(e.trim()));for(;Ci.has(J.basename(r));)r=J.dirname(r);return r}function q(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return P(e);let r=Qe().harnessRoot?.trim();if(r)return P(r);let t=J.join(hn(),".kynver","harness");return fn(t)?t:fn(gn)?gn:t}function j(e){return J.join(P(e),"runs")}function he(e){return J.join(P(e),"worktrees")}function _t(){let e=q();return{harnessRoot:e,runsDir:j(e),worktreesDir:he(e)}}function Ir(e,r){return J.join(e,v(r))}var gn,Ci,$=g(()=>{"use strict";Ee();ce();S();gn=J.join(hn(),".openclaw","harness"),Ci=new Set(["runs","worktrees"])});$();import I from"node:path";Je();import tr from"node:path";L();ne();var Gr=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function kn(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Gr)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function W(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!kn(n)})}function oe(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 Ae(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?W(e.changedFiles).length>0:!!(oe(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}S();function Pe(e){return e.status||(e.status=we(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Yr(e,r){if(e.status)return W(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):be(e.worktreePath);return W(t).length>0}function wi(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Vr(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=wi(e);if(o&&!z(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):be(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"}:Fe(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??oe(s)};return e.status=c,c}return Pe(e)}ne();ee();Nr();ne();S();import Ei from"node:path";var Ai=new Set(["running","dispatching","pending","queued","needs_attention"]),se=new Set(["completed","failed","cancelled","done"]);function ie(e){let r=Mr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=x(Ei.join(Se(e.id),"workers",v(i),"worker.json"),void 0);if(!a)continue;let u=we(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Zt(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function yn(){let e=[];for(let r of Or()){if(!Ai.has(r.status))continue;let t=ie(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Dr(r),e.push({runId:r.id,from:n,to:t})}return e}ne();ze();import{existsSync as Ze,mkdirSync as md,readdirSync as Sn,renameSync as fd,statSync as Pi}from"node:fs";import ae from"node:path";Ee();xr();ce();ze();$();ee();$();S();import X from"node:path";var ud=`${X.sep}runs${X.sep}runs${X.sep}`;function Rn(e){return{workerJsonPath:X.join(e,"worker.json"),stdoutPath:X.join(e,"stdout.jsonl"),stderrPath:X.join(e,"stderr.log"),heartbeatPath:X.join(e,"heartbeat.jsonl"),lastStatusPath:X.join(e,"last-status.json")}}S();var We=900*1e3,vd=3600*1e3;function vn(e,r){let t=ae.resolve(e),n=ae.resolve(j(r)),o=ae.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ae.isAbsolute(o)}function Wi(e){if(!Ze(e))return[];try{return Sn(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Oi(e){let r=ae.join(e,"workers");if(!Ze(r))return[];try{return Sn(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function bn(e,r,t){if(!Ze(e))return!1;try{let n=r-Pi(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Di(e,r=Date.now(),t=We){if(!Ze(e))return!1;let n=Rn(e),o=x(n.workerJsonPath,void 0);if(o?.status==="running"&&z(o.pid))return!0;let s=me(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(bn(n.stdoutPath,r,t)||bn(n.heartbeatPath,r,t))}function Ii(e,r=Date.now(),t=We){for(let n of Oi(e))if(Di(ae.join(e,"workers",n),r,t))return!0;return!1}function _n(e,r=Date.now()){let t=new Set,n=j(e);for(let o of Wi(n)){let s=ae.join(n,o);Ii(s,r)&&t.add(`${e}\0${o}`)}return t}S();function zr(e,r=Date.now(),t=We){let n=me(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function er(e,r=Date.now(),t=We){return z(e.pid)?!0:zr(e,r,t)}function Mi(e,r){return r?r.runTerminalCache.derive(e.run):ie(e.run)}function G(e,r=Date.now()){return er(e.worker,r)}function Jr(e,r){return se.has(e.run.status)?!1:Mi(e,r)!==null}function xn(e,r,t=Date.now()){if(G(e,t))return!0;if(se.has(e.run.status)||Jr(e,r))return!1;let n=Pe(e);return te(n)?!1:!!G(e,t)}Je();ne();function Cn(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(G(e))return!0;let n=r??Pe(e);return!!(!te(n)||Ae(n)||W(n.changedFiles).length>0||fe({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:oe(n.finalResult)}).blocked)}L();S();import{existsSync as En,mkdirSync as Ni,writeFileSync as wn}from"node:fs";import rr from"node:path";function An(e,r,t){return rr.join(e,"salvage",v(r),v(t))}function Pn(e){return En(rr.join(An(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Wn(e){let r=An(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Ni(r,{recursive:!0});let t=rr.join(r,"salvage.patch"),n=!1;if(En(e.indexed.worktreePath)){let s=C(e.indexed.worktreePath,["diff","HEAD"]),i=C(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
10
|
+
`);a.trim()&&(wn(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 Ui=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Ti(e){return!Ui.has(e.skipReason)||G(e.indexed,e.now)?!1:An({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Pn({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Bi(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(se.has(r.run.status)||e.liveness&&zr(r,e.liveness)||e.liveness&&te(Yr(r,e.liveness))&&!G(r))?n:t}function Fi(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:Bi(e)}function Hi(e,r){if(e.harnessRoot?.trim())return tr.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${tr.sep}runs${tr.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Wn(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=Fi(e);if(n<=0&&!t&&u<=0)return"worktrees_disabled";if(u>0&&o<u)return"below_age_threshold";if(G(r,a))return"active_worker";let l=Yr(r,e.liveness),c=Hi(e,r),d=p=>c&&Ti({indexed:r,harnessRoot:c,skipReason:p,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(xn(r,l)){let p=d("completion_blocked");if(p)return p}if(Gr(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(_n(r,e.liveness,a)||!te(l))return"run_still_active";if(Ae(l)){let p=d("pr_or_unmerged_commits");if(p)return p}if(W(l.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(fe({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:oe(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 Jr(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(tr.resolve(o))||r&&G(r)?"active_worker":r&&Gr(r,e.gitStatusCache)?"dirty_worktree":null}function Dn(e){return Jr(e)}var Xr=216e5,nr=6048e5;var qr=36e5,or=120;var On=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Mn(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)On.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||On.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Tn,readdirSync as Bn,statSync as ji}from"node:fs";import Fn from"node:path";ee();$();import Nn from"node:path";S();function Li(e,r){return er(e,r)}function In(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ve(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=x(Nn.join(ve(o,s.id),"workers",v(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=Nn.resolve(u.worktreePath);Li(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of vn(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Un(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}S();function $i(e,r){try{let t=ji(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Gi(e,r){let t=Fn.join(e,"runs",r,"run.json");return Tn(t)?x(t,null):null}function Hn(e){try{return Bn(e).length===0}catch{return!1}}function Kn(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Un(n,r,t,i.liveRunKeys)||!Hn(n))return"run_still_active";let a=Gi(r,t);return a&&!se.has(a.status)&&!ie(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Ln(e){if(!Tn(e.worktreesDir))return[];let r=[],t;try{t=Bn(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=Fn.join(e.worktreesDir,o);Hn(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:$i(s,e.now)})}return r}L();import{existsSync as Zr,rmSync as Zn}from"node:fs";import{execFileSync as Yi}from"node:child_process";import{existsSync as jn,readdirSync as Vi,statSync as zi}from"node:fs";import Ji from"node:path";var Xi=2500;function qi(e,r=Xi){if(!jn(e))return 0;try{let n=Yi("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 Y(e,r=5e4){if(!jn(e))return 0;let t=qi(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Vi(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Ji.join(i,u),c;try{c=zi(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as ra,rmSync as ta}from"node:fs";$();import{lstatSync as Qi,readdirSync as Zi}from"node:fs";function $n(e){try{let r=Qi(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 Gn(e,r=32){let t=$n(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Zi(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=$n(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as ea}from"node:child_process";import zn from"node:path";import D from"node:path";function Yn(e,r,t,n){let o=D.resolve(e),s=`${D.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=D.relative(t,i);if(a.startsWith("..")||D.isAbsolute(a))return"path_outside_harness";let u=a.split(D.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(D.resolve(r))?"path_outside_harness":null}function sr(e,r,t){return Yn(e,r,t,"node_modules")}function ir(e,r,t){return Yn(e,r,t,".next")}function ar(e,r,t){let n=D.resolve(e),o=D.relative(t,n);return o.startsWith("..")||D.isAbsolute(o)||o.split(D.sep).length<3||!n.startsWith(D.resolve(r))?"path_outside_harness":null}function Vn(e,r,t){let n=D.resolve(e);return sr(n,r,t)===null||ir(n,r,t)===null||ar(n,r,t)===null}function Xn(){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 Jn(e){let r=ea("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function qn(e,r,t){if(!Vn(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=Jn(["chown","-R",`${n}:${o}`,zn.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Jn(["rm","-rf",zn.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 Qr="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 na(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Qn(e,r,t={}){if(!ra(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?he(n):null,i=e.bytes??Y(e.path)??void 0,a=t.removePath??ta,u=t.hasForeignOwnedEntry??Gn;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!na(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=Xn();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Qr}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let f=qn(e.path,n,o);if(f.ok&&f.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(f.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(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: ${f.error}; ${Qr}`}}}function et(e){let r=e.harnessRoot;return!r||!Sn(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function rt(e,r){let t=et(e);if(t)return t;let n=Qn(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function eo(e,r){return rt(e,r)}function ro(e,r){return rt(e,r)}function to(e,r){return rt(e,r)}function no(e,r){let t=et(e);if(t)return t;if(!Zr(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??Y(e.path);return Zn(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 oo(e,r){let t=et(e);if(t)return t;if(!Zr(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??Y(e.path);return n&&Re(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Zr(e.path)&&Zn(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as ur,readdirSync as lr,statSync as oa}from"node:fs";import B from"node:path";function tt(e,r){try{let t=oa(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function io(e,r){let t=B.relative(r,e);return t===""||!t.startsWith("..")&&!B.isAbsolute(t)}function so(e,r,t,n){let o=[];for(let s of $r){if(s===".next")continue;let i=B.join(e,s);if(!ur(i))continue;let a=B.resolve(i);t.has(a)||io(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:tt(a,r.now)}))}return o}function ao(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...so(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ur(e.worktreesDir))return r;for(let n of lr(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=B.join(e.worktreesDir,n.name);for(let s of lr(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=B.join(o,s.name);r.push(...so(i,e,t,{runId:n.name,worker:s.name}))}}return r}function uo(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;ur(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:tt(a,e.now)})))}if(!t||!ur(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(B.resolve(i.worktreePath));for(let i of lr(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=B.join(e.worktreesDir,i.name),u;try{u=lr(a,{withFileTypes:!0})}catch{continue}for(let l of u){if(!l.isDirectory())continue;let c=B.resolve(B.join(a,l.name));o.has(c)||s.has(c)||io(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:tt(c,e.now)}))}}return n}import{existsSync as po,readdirSync as lo,statSync as sa}from"node:fs";import ke from"node:path";var ia=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function aa(e,r){try{let t=sa(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ua(e,r){let t=ke.relative(r,e);return t===""||!t.startsWith("..")&&!ke.isAbsolute(t)}function la(e,r,t,n,o,s){if(!po(n))return;let i=ke.resolve(n);r.has(i)||ua(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:aa(i,t.now)}))}function co(e,r,t,n,o){for(let s of ia)la(e,r,t,ke.join(n,s.dirName),s.kind,o)}function mo(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||co(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!po(e.worktreesDir))return r;for(let n of lo(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=ke.join(e.worktreesDir,n.name),s;try{s=lo(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=ke.join(o,i.name);co(r,t,e,a,{runId:n.name,worker:i.name})}}return r}L();import{existsSync as fo,statSync as ca}from"node:fs";import F from"node:path";function da(e,r){try{let t=ca(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pa(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 ma(e,r){let t=F.relative(F.resolve(r),F.resolve(e));return t!==""&&!t.startsWith("..")&&!F.isAbsolute(t)}var fa=200;function
|
|
15
|
-
`).map(l=>l.trim()).filter(l=>l.length>0);if(W(s).length>0)return"dirty_worktree";let i=C(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=C(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}$();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 wn(rr.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
13
|
+
`),o}var Ui=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Ti(e){return!Ui.has(e.skipReason)||G(e.indexed,e.now)?!1:Pn({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Wn({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Bi(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(se.has(r.run.status)||e.liveness&&Jr(r,e.liveness)||e.liveness&&te(Vr(r,e.liveness))&&!G(r))?n:t}function Fi(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:Bi(e)}function Hi(e,r){if(e.harnessRoot?.trim())return tr.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${tr.sep}runs${tr.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function On(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=Fi(e);if(n<=0&&!t&&u<=0)return"worktrees_disabled";if(u>0&&o<u)return"below_age_threshold";if(G(r,a))return"active_worker";let l=Vr(r,e.liveness),c=Hi(e,r),d=p=>c&&Ti({indexed:r,harnessRoot:c,skipReason:p,status:l,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(Cn(r,l)){let p=d("completion_blocked");if(p)return p}if(Yr(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(xn(r,e.liveness,a)||!te(l))return"run_still_active";if(Ae(l)){let p=d("pr_or_unmerged_commits");if(p)return p}if(W(l.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(fe({finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry,prUrl:oe(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 qr(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(tr.resolve(o))||r&&G(r)?"active_worker":r&&Yr(r,e.gitStatusCache)?"dirty_worktree":null}function Dn(e){return qr(e)}var Xr=216e5,nr=6048e5;var Qr=36e5,or=120;var In=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Mn(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)In.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||In.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Bn,readdirSync as Fn,statSync as ji}from"node:fs";import Hn from"node:path";ee();$();import Nn from"node:path";S();function Li(e,r){return er(e,r)}function Un(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ve(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=x(Nn.join(ve(o,s.id),"workers",v(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=Nn.resolve(u.worktreePath);Li(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of _n(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Tn(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}S();function $i(e,r){try{let t=ji(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Gi(e,r){let t=Hn.join(e,"runs",r,"run.json");return Bn(t)?x(t,null):null}function Kn(e){try{return Fn(e).length===0}catch{return!1}}function Ln(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Tn(n,r,t,i.liveRunKeys)||!Kn(n))return"run_still_active";let a=Gi(r,t);return a&&!se.has(a.status)&&!ie(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function jn(e){if(!Bn(e.worktreesDir))return[];let r=[],t;try{t=Fn(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=Hn.join(e.worktreesDir,o);Kn(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:$i(s,e.now)})}return r}L();import{existsSync as et,rmSync as eo}from"node:fs";import{execFileSync as Yi}from"node:child_process";import{existsSync as $n,readdirSync as Vi,statSync as zi}from"node:fs";import Ji from"node:path";var qi=2500;function Xi(e,r=qi){if(!$n(e))return 0;try{let n=Yi("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 Y(e,r=5e4){if(!$n(e))return 0;let t=Xi(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Vi(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Ji.join(i,u),c;try{c=zi(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as ra,rmSync as ta}from"node:fs";$();import{lstatSync as Qi,readdirSync as Zi}from"node:fs";function Gn(e){try{let r=Qi(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 Yn(e,r=32){let t=Gn(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Zi(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Gn(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as ea}from"node:child_process";import Jn from"node:path";import O from"node:path";function Vn(e,r,t,n){let o=O.resolve(e),s=`${O.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=O.relative(t,i);if(a.startsWith("..")||O.isAbsolute(a))return"path_outside_harness";let u=a.split(O.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(O.resolve(r))?"path_outside_harness":null}function sr(e,r,t){return Vn(e,r,t,"node_modules")}function ir(e,r,t){return Vn(e,r,t,".next")}function ar(e,r,t){let n=O.resolve(e),o=O.relative(t,n);return o.startsWith("..")||O.isAbsolute(o)||o.split(O.sep).length<3||!n.startsWith(O.resolve(r))?"path_outside_harness":null}function zn(e,r,t){let n=O.resolve(e);return sr(n,r,t)===null||ir(n,r,t)===null||ar(n,r,t)===null}function Xn(){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 qn(e){let r=ea("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Qn(e,r,t){if(!zn(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=qn(["chown","-R",`${n}:${o}`,Jn.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=qn(["rm","-rf",Jn.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 Zr="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 na(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Zn(e,r,t={}){if(!ra(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?he(n):null,i=e.bytes??Y(e.path)??void 0,a=t.removePath??ta,u=t.hasForeignOwnedEntry??Yn;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!na(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=Xn();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Zr}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let f=Qn(e.path,n,o);if(f.ok&&f.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(f.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(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: ${f.error}; ${Zr}`}}}function rt(e){let r=e.harnessRoot;return!r||!vn(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function tt(e,r){let t=rt(e);if(t)return t;let n=Zn(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function ro(e,r){return tt(e,r)}function to(e,r){return tt(e,r)}function no(e,r){return tt(e,r)}function oo(e,r){let t=rt(e);if(t)return t;if(!et(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??Y(e.path);return eo(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 so(e,r){let t=rt(e);if(t)return t;if(!et(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??Y(e.path);return n&&Re(n,["worktree","remove","--force",e.path],{allowFailure:!0}),et(e.path)&&eo(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as ur,readdirSync as lr,statSync as oa}from"node:fs";import B from"node:path";function nt(e,r){try{let t=oa(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ao(e,r){let t=B.relative(r,e);return t===""||!t.startsWith("..")&&!B.isAbsolute(t)}function io(e,r,t,n){let o=[];for(let s of Gr){if(s===".next")continue;let i=B.join(e,s);if(!ur(i))continue;let a=B.resolve(i);t.has(a)||ao(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:nt(a,r.now)}))}return o}function uo(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...io(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ur(e.worktreesDir))return r;for(let n of lr(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=B.join(e.worktreesDir,n.name);for(let s of lr(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=B.join(o,s.name);r.push(...io(i,e,t,{runId:n.name,worker:s.name}))}}return r}function lo(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;ur(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:nt(a,e.now)})))}if(!t||!ur(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(B.resolve(i.worktreePath));for(let i of lr(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=B.join(e.worktreesDir,i.name),u;try{u=lr(a,{withFileTypes:!0})}catch{continue}for(let l of u){if(!l.isDirectory())continue;let c=B.resolve(B.join(a,l.name));o.has(c)||s.has(c)||ao(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:nt(c,e.now)}))}}return n}import{existsSync as mo,readdirSync as co,statSync as sa}from"node:fs";import ke from"node:path";var ia=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function aa(e,r){try{let t=sa(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function ua(e,r){let t=ke.relative(r,e);return t===""||!t.startsWith("..")&&!ke.isAbsolute(t)}function la(e,r,t,n,o,s){if(!mo(n))return;let i=ke.resolve(n);r.has(i)||ua(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:aa(i,t.now)}))}function po(e,r,t,n,o){for(let s of ia)la(e,r,t,ke.join(n,s.dirName),s.kind,o)}function fo(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||po(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!mo(e.worktreesDir))return r;for(let n of co(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=ke.join(e.worktreesDir,n.name),s;try{s=co(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=ke.join(o,i.name);po(r,t,e,a,{runId:n.name,worker:i.name})}}return r}L();import{existsSync as go,statSync as ca}from"node:fs";import F from"node:path";function da(e,r){try{let t=ca(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pa(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 ma(e,r){let t=F.relative(F.resolve(r),F.resolve(e));return t!==""&&!t.startsWith("..")&&!F.isAbsolute(t)}var fa=200;function ho(e){if(!e.includeOrphans||!go(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(F.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(F.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Re(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let u=pa(a);for(let l of u){if(i>=fa)break;let c=F.resolve(l.path);if(c===F.resolve(s)||!ma(c,e.worktreesDir)||t.has(c)||o.has(c)||!go(c))continue;let m=F.relative(e.worktreesDir,c).split(F.sep),f=m[0],p=m[1]??"unknown";o.add(c),i+=1,n.push({kind:"remove_worktree",path:c,bytes:null,runId:f,worker:p,repo:s,ageMs:da(c,e.now)})}}return n}ee();S();import Oe from"node:path";function ko(e,r){let t=Oe.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Oe.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function yo(e){let r=new Map;for(let t of Ve(e))for(let n of Object.keys(t.workers||{})){let o=Oe.join(ve(e,t.id),"workers",v(n),"worker.json"),s=x(o,void 0);s?.worktreePath&&r.set(Oe.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Oe.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function De(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function ue(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Ro(e={}){let r=e.execute===!0||e.execute!==!1&&De("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!De("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??ue("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??ue("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??ue("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??ue("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),u=e.maxActionsPerSweep??ue("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),l=e.includeOrphans===!0||De("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=De("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&&!De("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),f=ue("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:m&&f>0?f:null,R=ue("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),b=e.byteAccountingEntryCap??(Number.isFinite(R)&&R>0?Math.floor(R):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:b}}L();import{existsSync as ot,statSync as ha}from"node:fs";import cr from"node:path";S();var ka=1800*1e3;function bo(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??ka;if(!ot(e.worktreePath))return null;if(e.runId&&e.workerName){let l=cr.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),c=x(cr.join(l,"worker.json"),void 0);if(c&&zr(c,r,t))return"active_worker";if(!c){let d=cr.join(l,"heartbeat.jsonl");if(ot(d))try{let m=r-ha(d).mtimeMs;if(Number.isFinite(m)&&m>=0&&m<t)return"active_worker"}catch{}}}let n=cr.join(e.worktreePath,".git");if(!ot(n))return null;let o=C(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(W(s).length>0)return"dirty_worktree";let i=C(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=C(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}$();import{existsSync as ya,readdirSync as So,statSync as Ra}from"node:fs";import ba from"node:path";function vo(e={}){let r=P(e.harnessRoot??q()),t=he(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!ya(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=So(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=ba.join(t,c.name);try{let m=Ra(d);u=u===null?m.mtimeMs:Math.min(u,m.mtimeMs)}catch{}try{for(let m of So(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 f=Y(d,m);f===null?s=null:s+=f}}}return{harnessRoot:r,worktreesDir:t,worktreesBytes:s,runCount:i,workerCount:a,oldestRunAt:u===null?null:new Date(u).toISOString(),scannedAt:o}}$();import{existsSync as Sa}from"node:fs";import{homedir as va}from"node:os";import _o from"node:path";var _a=["/var/tmp/kynver-harness",_o.join(va(),".openclaw","harness")];function st(e,r,t){if(!t?.trim())return;let n=P(t.trim());e.has(n)||(e.add(n),r.push(n))}function xa(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 xo(e={}){let r=new Set,t=[];st(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??[])st(r,t,o);if(xa(e))for(let o of _a){let s=_o.resolve(o);!r.has(s)&&Sa(s)&&st(r,t,s)}return t}Ge();function Ca(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function wa(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Co(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=wa("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=$e({...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 wo(e,r){if(!r.pressured)return e;let t=e.execute||!Ca("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}}je();import{unlinkSync as Ea}from"node:fs";function dr(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Eo(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Aa(e,r,t){return e.length===0?[]:t?[...e]:e.length<=r?[]:e.slice(r)}function Ao(e={}){let r=e.execute===!0||dr("KYNVER_WSL_CRASH_DUMP_EXECUTE")||dr("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||dr("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??Eo("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=pe({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=Aa(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{Ea(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 Po(e){return e?dr("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>Eo("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}je();function D(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}L();var pr=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=C(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 Pa}from"node:child_process";import{existsSync as Wa}from"node:fs";import Oa from"node:path";var Da=5e3;function Ia(e,r){if(!Wa(Oa.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=Pa("git",r,{cwd:e,encoding:"utf8",timeout:Da}),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 Wo(e){let r=Ia(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=Wo(t)??[];return this.cache.set(t,o),o}};var fr=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=ie(r);return this.cache.set(r.id,n),n}};function Ma(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Oo(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:Ma(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 Na(e={}){let r=e.harnessRoot?P(e.harnessRoot):q(),t=xo({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function Ua(e){return typeof e=="string"?{reason:e}:e}function ye(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function gr(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Y(e.path,t)}}function Do(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 Ta(e,r){return e.kind==="remove_next_cache"?to(e,r):ro(e,r)}function Ba(e,r,t){return e.kind==="remove_next_cache"?ir(e.path,r,t):sr(e.path,r,t)}function Fa(e){let r=new Map;for(let t of e)for(let[n,o]of yo(t))r.set(n,o);return r}function Io(e,r){return e.runId&&e.worker?I.join(r,e.runId,e.worker):I.resolve(e.path,"..")}function Ha(e={}){let r=Ro(e),t=Co();r=wo(r,t);let n=Na(e);D("scan",`${n.scanRoots.length} harness root(s)`);let o=Un(n.scanRoots,n.now),s=r.finalizeStaleRuns?yn().map(h=>({runId:h.runId,from:h.from,to:h.to})):[];s.length>0&&D("finalize",`${s.length} stale run(s) marked terminal`),D("index","building worktree index");let i=Fa(n.scanRoots);D("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new fr,gitStatusCache:new mr,gitRevCache:new pr},u=[],l=[],c=new Set,d=r.maxActionsPerSweep,m=()=>l.length>=d;for(let h of n.scanRoots){if(m())break;D("root",h);let V=I.join(h,"worktrees"),Me=ko(i,h),Ne={harnessRoot:h,worktreesDir:V,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Me,now:n.now},hr=r.scanDependencyCaches?fo(Ne):[];D("dependency",r.scanDependencyCaches?`${hr.length} cache candidate(s) at ${h}`:"skipped (worktree-only sweep)");let kr=0;for(let M of hr){if(m())break;kr+=1,kr%50===0&&D("dependency",`${kr}/${hr.length} evaluated`);let _=I.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},A=Ba(k,h,V);if(A){ye(u,k.path,A),l.push({...k,executed:!1,skipped:!0,skipReason:A});continue}let N=Io(k,V),le=Me.get(I.resolve(N))??null,T=qr({indexed:le,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:N,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(T){ye(u,k.path,T),l.push({...k,executed:!1,skipped:!0,skipReason:T});continue}l.push(Ta(gr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let M of uo(Ne)){if(m())break;let _=I.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},A=ar(k.path,h,V);if(A){ye(u,k.path,A),l.push({...k,executed:!1,skipped:!0,skipReason:A});continue}let N=Io(k,V),le=Me.get(I.resolve(N))??null,T=Dn({indexed:le,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:k.ageMs,worktreePath:N,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(T){ye(u,k.path,T),l.push({...k,executed:!1,skipped:!0,skipReason:T});continue}l.push(no(gr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let yr=[...lo(Ne),...ho(Ne)];D("worktrees",`${yr.length} candidate(s) at ${h}`);let it=new Set,Rr=0;for(let M of yr){if(m())break;Rr+=1,Rr%50===0&&D("worktrees",`${Rr}/${yr.length} evaluated`);let _=I.resolve(M.path);if(it.has(_))continue;it.add(_);let k={...M,path:_},A=Me.get(I.resolve(k.path))??null,N=A?null:bo({worktreePath:k.path,harnessRoot:h,runId:k.runId,workerName:k.worker,now:n.now}),le=On({indexed:A,worktreePath:I.resolve(k.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:k.ageMs,orphanSafety:N,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:h,writeSalvageEvidence:r.execute});if(le){let{reason:T,detail:Mo}=Ua(le);ye(u,k.path,T,Mo),l.push({...k,executed:!1,skipped:!0,skipReason:T});continue}l.push(so(gr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!m()&&r.runDirectoriesAgeMs>=0)for(let M of jn({harnessRoot:h,worktreesDir:V,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(m())break;let _=I.resolve(M.path);if(c.has(_))continue;c.add(_);let k={...M,path:_},A=k.runId??I.basename(_),N=Ln({harnessRoot:h,runId:A,runPath:_,ageMs:k.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(N){ye(u,k.path,N),l.push({...k,executed:!1,skipped:!0,skipReason:N});continue}l.push(oo(gr(k,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let f=0,p=0,R=0,b=0,y=0,w=0;for(let h of l)h.bytes&&(f+=h.bytes),!h.skipped&&!h.executed&&h.bytes&&(R+=h.bytes),h.executed?(y+=1,b+=h.bytes??0,h.kind==="remove_run_directory"&&(p+=1)):h.skipped&&(w+=1,h.skipReason==="dry_run"&&h.bytes&&(R+=h.bytes));let H=r.accountBytes?vo({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,U=pe(),Ie=r.execute&&Po(U),K=Ie?Ao({execute:!0}):null,Q=U?{observed:!0,execute:Ie,dumpCount:U.dumpCount,totalBytes:U.totalBytes,removedCount:K?.removed.length??0,removedBytes:K?.removedBytes??0,executables:U.executables,path:U.path,reason:U.reason}:void 0;K&&K.removed.length>0&&(b+=K.removedBytes,y+=K.removed.length,D("wsl-crashes",`removed ${K.removed.length} dump(s), ${K.removedBytes} bytes`)),D("complete",`${l.length} action(s), ${w} skipped, ${y} removed`);let Z=Mn(l,u),E=Oo({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:f,reclaimableBytes:R,removedBytes:b,removedPaths:y,skippedPaths:w,skipReasons:Do(l,u)},...H?{storage:H}:{},...Z.length>0?{preservedLivePaths:Z}:{},...p>0?{removedRunDirectories:p}:{},...Q?{wslCrashDumps:Q}:{}});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:f,reclaimableBytes:R,removedBytes:b,removedPaths:y,skippedPaths:w,skipReasons:Do(l,u)},...H?{storage:H}:{},...Z.length>0?{preservedLivePaths:Z}:{},...p>0?{removedRunDirectories:p}:{},...Q?{wslCrashDumps:Q}:{},compactSummary:E}}export{or as DEFAULT_MAX_ACTIONS_PER_SWEEP,Xr as DEFAULT_NODE_MODULES_AGE_MS,Qr as DEFAULT_RUN_DIRECTORIES_AGE_MS,nr as DEFAULT_WORKTREES_AGE_MS,Ha as runHarnessCleanup};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var r=(e,n,t)=>()=>{if(t)throw t[0];try{return e&&(n=e(e=0)),n}catch(o){throw t=[o],o}};function w(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var i=r(()=>{"use strict"});var ce,Ye,O=r(()=>{"use strict";ce=["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"],Ye=new Set(ce)});import{spawnSync as de}from"node:child_process";function P(e,n){try{let t=de("git",n,w({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}}}var f=r(()=>{"use strict";i();O()});import{homedir as W}from"node:os";import U from"node:path";function me(e){return e==="~"?W():e.startsWith("~/")||e.startsWith("~\\")?U.join(W(),e.slice(2)):e}function c(e){return U.resolve(me(e))}var l=r(()=>{"use strict"});import{existsSync as g,readFileSync as T}from"node:fs";import{homedir as fe}from"node:os";import a from"node:path";import{fileURLToPath as pe}from"node:url";function ye(e){let n=a.join(e,"package.json");if(!g(n))return null;try{let t=JSON.parse(T(n,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function he(e){return ye(e)==="kynver"}function D(e){let n=a.resolve(e);if(!g(n))return null;let t=P(n,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let o=t.stdout.trim();return o.length?a.resolve(o):null}function be(e=import.meta.url){let n=a.dirname(pe(e));for(let t=0;t<8;t+=1){let o=a.join(n,"package.json");if(g(o))try{if(JSON.parse(T(o,"utf8")).name==="@kynver-app/runtime")return n}catch{}let s=a.dirname(n);if(s===n)break;n=s}return null}function p(e,n,t,o){if(!t)return;let s=a.resolve(t);e.has(s)||he(s)&&(e.add(s),n.push({repo:s,source:o}))}function ke(e){let n=e?.cwd??process.cwd(),t=new Set,o=[];p(t,o,D(n),"cwd_git");let s=be(e?.runtimeModuleUrl??import.meta.url);s&&p(t,o,D(s),"runtime_checkout");let u=fe();for(let ue of ge)p(t,o,c(a.join(u,ue)),"well_known_path");return o}function y(e){return ke(e)[0]??null}var ge,h=r(()=>{"use strict";f();l();ge=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});var b=r(()=>{"use strict"});var k=r(()=>{"use strict"});var
|
|
1
|
+
var r=(e,n,t)=>()=>{if(t)throw t[0];try{return e&&(n=e(e=0)),n}catch(o){throw t=[o],o}};function w(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var i=r(()=>{"use strict"});var ce,Ye,O=r(()=>{"use strict";ce=["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"],Ye=new Set(ce)});import{spawnSync as de}from"node:child_process";function P(e,n){try{let t=de("git",n,w({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}}}var f=r(()=>{"use strict";i();O()});import{homedir as W}from"node:os";import U from"node:path";function me(e){return e==="~"?W():e.startsWith("~/")||e.startsWith("~\\")?U.join(W(),e.slice(2)):e}function c(e){return U.resolve(me(e))}var l=r(()=>{"use strict"});import{existsSync as g,readFileSync as T}from"node:fs";import{homedir as fe}from"node:os";import a from"node:path";import{fileURLToPath as pe}from"node:url";function ye(e){let n=a.join(e,"package.json");if(!g(n))return null;try{let t=JSON.parse(T(n,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function he(e){return ye(e)==="kynver"}function D(e){let n=a.resolve(e);if(!g(n))return null;let t=P(n,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let o=t.stdout.trim();return o.length?a.resolve(o):null}function be(e=import.meta.url){let n=a.dirname(pe(e));for(let t=0;t<8;t+=1){let o=a.join(n,"package.json");if(g(o))try{if(JSON.parse(T(o,"utf8")).name==="@kynver-app/runtime")return n}catch{}let s=a.dirname(n);if(s===n)break;n=s}return null}function p(e,n,t,o){if(!t)return;let s=a.resolve(t);e.has(s)||he(s)&&(e.add(s),n.push({repo:s,source:o}))}function ke(e){let n=e?.cwd??process.cwd(),t=new Set,o=[];p(t,o,D(n),"cwd_git");let s=be(e?.runtimeModuleUrl??import.meta.url);s&&p(t,o,D(s),"runtime_checkout");let u=fe();for(let ue of ge)p(t,o,c(a.join(u,ue)),"well_known_path");return o}function y(e){return ke(e)[0]??null}var ge,h=r(()=>{"use strict";f();l();ge=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});var b=r(()=>{"use strict"});var k=r(()=>{"use strict"});var N=r(()=>{"use strict"});var fr,pr,R=r(()=>{"use strict";fr=25*1024*1024*1024,pr=12*1024*1024*1024});var kr,Rr,I=r(()=>{"use strict";R();kr=5*1024*1024*1024,Rr=10*1024*1024*1024});var Cr,Ar,S=r(()=>{"use strict";I();R();Cr=30*1024*1024*1024,Ar=15*1024*1024*1024});import{homedir as Re}from"node:os";import Se from"node:path";var Tr,B=r(()=>{"use strict";d();l();i();Tr=Se.join(Re(),".openclaw","harness")});var v=r(()=>{"use strict";B();i()});var M=r(()=>{"use strict";v();i()});var K=r(()=>{"use strict"});var F=r(()=>{"use strict";K();i()});var $=r(()=>{"use strict"});var H=r(()=>{"use strict";$()});var L=r(()=>{"use strict";H();i()});var j=r(()=>{"use strict"});var Y=r(()=>{"use strict"});var G=r(()=>{"use strict"});var _=r(()=>{"use strict"});var V=r(()=>{"use strict"});var z=r(()=>{"use strict";_();V()});var J=r(()=>{"use strict";F();L();j();Y();f();G();z();_();i()});var q=r(()=>{"use strict";J()});var we,Oe,X=r(()=>{"use strict";N();d();b();k();E();S();v();M();q();i();we=500*1024*1024,Oe=4*1024*1024*1024});var E=r(()=>{"use strict";X()});import{homedir as Pe}from"node:os";import We from"node:path";var Ue,Q=r(()=>{"use strict";Ue=We.join(Pe(),".kynver",".env")});var Z=r(()=>{"use strict"});var ee=r(()=>{"use strict";Z()});var re=r(()=>{"use strict"});var te=r(()=>{"use strict";ee();re()});var ne=r(()=>{"use strict"});var oe=r(()=>{"use strict";ne()});var ie=r(()=>{"use strict";Q();l();d();te();oe()});import{existsSync as Ie,mkdirSync as eo,readFileSync as Be,writeFileSync as ro}from"node:fs";import{homedir as Me,totalmem as no}from"node:os";import C from"node:path";function m(){if(!Ie(ae))return{};try{return JSON.parse(Be(ae,"utf8"))}catch{return{}}}var le,ae,po,go,yo,d=r(()=>{"use strict";h();l();i();b();k();E();S();ie();le=C.join(Me(),".kynver"),ae=C.join(le,"config.json"),po=C.join(le,"credentials");go=500*1024*1024,yo=4*1024*1024*1024});d();h();l();import Ke from"node:path";function Fe(e){return Ke.resolve(c(e.trim()))}function A(e,n,t){let o=e?.trim();return o?{repo:Fe(o),source:n,persistedInConfig:t}:null}function $e(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function He(e={}){let n=e.env??process.env,t=e.config??m(),o=A(t.defaultRepo,"config",!0);if(o)return o;let s=A(n.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(s)return s;let u=A(n.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return u||$e(y({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}export{He as resolveDefaultRepo};
|