@kynver-app/runtime 0.1.135 → 0.1.139
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/callbacks.d.ts +21 -2
- package/dist/cleanup-types.d.ts +12 -0
- package/dist/cli.js +53 -50
- package/dist/default-repo-discovery.d.ts +10 -0
- package/dist/default-repo.d.ts +2 -0
- package/dist/disk-gate.d.ts +4 -0
- package/dist/dispatch-callback-timeout.d.ts +1 -0
- package/dist/dispatch-progress.d.ts +3 -0
- package/dist/factory-status/collect.d.ts +10 -0
- package/dist/factory-status/lightweight.d.ts +5 -0
- package/dist/factory-status/render.d.ts +5 -0
- package/dist/factory-status/types.d.ts +46 -0
- package/dist/factory-status-cli.d.ts +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +68 -65
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +2 -2
- package/dist/server/monitor.js +6 -6
- package/dist/server/worker-policy.js +1 -1
- package/dist/wsl-crash-dumps-cleanup.d.ts +31 -0
- package/dist/wsl-crash-dumps-cli.d.ts +1 -0
- package/dist/wsl-crash-dumps.d.ts +90 -0
- package/package.json +1 -1
package/dist/server/cleanup.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var
|
|
2
|
-
`)}function
|
|
1
|
+
var R=(e,r)=>()=>(e&&(r=e(e=0)),r);import{existsSync as So,mkdirSync as Co,readFileSync as st,readdirSync as Ca,statSync as it,writeFileSync as _o}from"node:fs";import vo from"node:path";function yr(e){console.error(e),process.exit(1)}function br(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function Ie(e){try{return JSON.parse(e)}catch{return null}}function v(e,r){try{return JSON.parse(st(e,"utf8"))}catch(t){if(arguments.length>1)return r;yr(`failed to read ${e}: ${t.message}`)}}function at(e,r){Co(vo.dirname(e),{recursive:!0}),_o(e,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`)}function C(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Te(e){try{return it(e).size}catch{return 0}}function Ue(e){try{return it(e).mtime.toISOString()}catch{return null}}function ut(e,r){return So(e)?st(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function v(e,r){try{let t=Qr("git",r,cr({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 Xr(e,r,t){let n=v(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 Oe(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 dr(n,"missing worktree path");let s=v(e,["rev-parse","HEAD"]);if(s.status!==0)return dr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=v(e,["rev-parse",n]);if(f.status!==0)return dr(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.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=Xr(e,i,a),c=Xr(e,a,i),l=u.error||c.error||void 0;if(u.isAncestor==null||c.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:"unknown",...l?{error:l}:{}};let p=u.isAncestor?"ahead":c.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:c.isAncestor,relation:p,...l?{error:l}:{}}}function dr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var H=k(()=>{"use strict";y();qr()});import{homedir as Zr}from"node:os";import et from"node:path";function ao(e){return e==="~"?Zr():e.startsWith("~/")||e.startsWith("~\\")?et.join(Zr(),e.slice(2)):e}function Ie(e){return et.resolve(ao(e))}var pe=k(()=>{"use strict"});var pr=k(()=>{"use strict";H();pe()});var fr=k(()=>{"use strict"});var rt=k(()=>{"use strict"});import{existsSync as uo,readFileSync as co,statfsSync as lo}from"node:fs";function go(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!uo(e))continue;let r=co(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function tt(e={}){if(!(e.forceWsl===void 0?go():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||mo,n=e.wslHostFreeWarnBytes??po,o=e.wslHostFreeCriticalBytes??fo,s=e.statfs??lo,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),c=u>0?(u-a)/u*100:100,l=a<n,p=a<o,f=!l&&!p,g=(a/(1024*1024*1024)).toFixed(1),d=null;return f||(d=`Windows host disk ${t} at ${p?"critical":"warning"}: ${g} GiB free (<${(p?o:n)/1024/1024/1024} GiB); WSL VHDX cannot grow safely. ${ho()}`),{ok:f,path:t,freeBytes:a,totalBytes:u,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:d,probeError:null}}function ho(){return"Recovery: 1) free Windows C: (empty Recycle Bin / Storage Sense / clear %TEMP%); 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. Full runbook: docs/runbooks/wsl-disk-pressure.md."}var po,fo,mo,nt=k(()=>{"use strict";po=25*1024*1024*1024,fo=12*1024*1024*1024,mo="/mnt/c"});import{statfsSync as ko}from"node:fs";function Ne(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Ro,n=e.diskFreeCriticalBytes??yo,o=e.diskMaxUsedPercent??bo,s=e.diskHardMaxUsedPercent??So,i=ko(r),a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),c=u>0?(u-a)/u*100:100,l=a<t,p=a<n,f=a<t*2,g=f&&c>o,d=f&&c>s,R=!l&&!p&&!g&&!d,x=e.skipWslHostCheck?null:tt(e.wslHost),W=R&&(x?x.ok:!0),U=null;return W||(U=[p?`free space below critical ${n} bytes`:null,l?`free space below warning ${t} bytes`:null,d?`used percent above hard cap ${s}%`:null,g?`used percent above cap ${o}%`:null,x&&!x.ok?x.reason:null].filter(Boolean).join("; ")),_o({ok:W,path:r,freeBytes:a,totalBytes:u,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:U,wslHost:x})}function _o(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 Ro,yo,bo,So,Me=k(()=>{"use strict";nt();Ro=30*1024*1024*1024,yo=15*1024*1024*1024,bo=80,So=90});import{existsSync as xo,readdirSync as vo,statSync as Co}from"node:fs";import mr from"node:path";function De(){return st()}function gr(){let{runsDir:e}=De();return ot(e)}function Te(e){return ot(B(e))}function Ao(e){try{return Co(e).isDirectory()}catch{return!1}}function ot(e){if(!xo(e))return[];let r=[];for(let t of vo(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=mr.join(e,t.name);if(!Ao(n))continue;let o=_(mr.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function hr(e){let{runsDir:r}=De();Vr(mr.join(kr(r,e.id),"run.json"),e)}function fe(e){let{harnessRoot:r}=De();return me(r,e)}function me(e,r){return kr(B(e),b(r))}var V=k(()=>{"use strict";F();y()});import{existsSync as wo,readdirSync as Eo}from"node:fs";import Po from"node:path";function Rr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(b(n));let t=Po.join(fe(e.id),"workers");if(!wo(t))return[...r];for(let n of Eo(t,{withFileTypes:!0}))n.isDirectory()&&r.add(b(n.name));return[...r]}var yr=k(()=>{"use strict";V();y()});function br(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 it(e){let r=e.trim();if(!r)return null;let t=br(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=br(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=br(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function at(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?it(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=it(t);return n||t}var ut=k(()=>{"use strict"});import{existsSync as Wo,readFileSync as Oo}from"node:fs";function ct(e){return e==="complete"}function lt(e){return ct(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function oe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Wo(e))return r;let t=Date.now()+Io,n=new Date(t).toISOString(),o=Oo(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
9
|
-
`).filter(Boolean);for(let n of t){let o=Ee(n);if(!o)continue;let s=ns(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(c=>c?.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=os(a);u&&(r.currentTool=u)}let i=is(o);i&&as(r,mt({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&ss(r,o)}return r}var kt=k(()=>{"use strict";gt();y()});function cs(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Rt(e){let r=(e??"").trim();if(!r)return null;for(let t of us)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${cs(r)}`};return null}var us,yt=k(()=>{"use strict";us=[{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"}]});function bt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ls(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 ds(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:bt(e.head)}function ps(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 St(e){if(e.alive||ls(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=bt(e.headCommit)??ds(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:ps(s,r,t)}}var _t=k(()=>{"use strict"});function ke(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function fs(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 ms(e){if(ke(e.headCommit)||ke(e.prUrl)||ke(e.artifactBundlePath)||ke(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&ke(r.head))}function se(e){return fs(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:ms(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 xt(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var He=k(()=>{"use strict"});function Cr(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 vt(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Be(e){let r=e.trim();if(!r)return null;let t=Cr(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Cr(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Cr(r.slice(i,a+1));l&&n.push(l)}if(n.length===0)return null;let u=n[n.length-1],c=vt(u);for(let l of n){let p=vt(l);p>c&&(u=l,c=p)}return u}var Ar=k(()=>{"use strict"});function ie(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gs(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function z(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ie(e)}function Fe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Ct(e){let r=null;if(typeof e=="string"){let o=Be(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=z(String(s.prUrl??s.pr_url??"")),a=ie(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:ie(s.mergeCommit??s.merge_commit),reason:ie(s.reason)})}return n}function At(e,r){let t=[],n=z(ie(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=z(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function wt(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(!gs(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?z(ie(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?z(r.targetPrUrls[0]):null):null;if(s){let p=At(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let R of p)if(R!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${R} instead of canonical target ${s}`}}let d=Ct(n).find(R=>R.prUrl===s);if(!d||d.outcome!=="merged"&&!(d.reason?.trim()&&(d.outcome==="skipped"||d.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Ct(n),a=new Map(i.map(p=>[Fe(p.prUrl),p])),u=new Set(r.targetPrUrls.map(p=>Fe(z(p)??p)).filter(Boolean)),c=At(t,n);if(r.landingOnly)for(let p of c){if(u.size>0&&!u.has(Fe(p)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${p}`};if(u.size===0)return{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 l=[];for(let p of r.targetPrUrls){let f=Fe(z(p)??p),g=a.get(f);if(!g){l.push(f);continue}g.outcome!=="merged"&&!g.reason?.trim()&&l.push(f)}return l.length>0?{blocked:!0,reason:l.every(p=>a.has(p))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${l.join(", ")}`}:{blocked:!1}}function Et(e){if(e.blocked)return e.detail??e.reason}var Pt=k(()=>{"use strict";Ar()});function Rs(e){let r=Date.now();if(e.completionBlocker&&!Wt(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&bs(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=se(o);if(s.blocked){let i=xt(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=wt({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Et(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(ys(e))return{state:"done",reason:"empty abandoned worker record"};let o=Rt(e.error);if(o)return{state:"blocked",reason:o.reason};let s=St({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>hs)return{state:"needs_attention",reason:`no first stream event ${lr(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>ks?{state:"stale",reason:`no log/event/heartbeat activity for ${lr(n)}s`}:{state:"ok",reason:"recent activity"}}function Wt(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function ys(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 bs(e){let r=null;if(typeof e=="string"?r=Be(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 Ss(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??lt(t))}function Re(e,r={}){let t=ht(e.stdoutPath),n=oe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Ss(e,t.finalResult,n),i=o?!1:L(e.pid),a=Pe(e.stdoutPath),u=Pe(e.stderrPath),c=Pe(e.heartbeatPath),l=de(e.worktreePath),p=Oe(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=Jr([t.lastEventAt,n.lastHeartbeatAt,We(e.stdoutPath),We(e.stderrPath),We(e.heartbeatPath)]),g=t.error||!i&&!s&&zr(e.stderrPath,10).trim()||void 0,d=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,R=Wt(d)?null:d,x=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,W=Rs({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:c,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:l,gitAncestry:p,completionBlocker:R,landingContract:x,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),U=R||W.state==="blocked"?"blocked":o||W.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:U,attention:W,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:c,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:g,changedFiles:l,gitAncestry:p,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,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 J(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Ot(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var hs,ks,q=k(()=>{"use strict";Ue();kt();yt();_t();H();He();Pt();Ar();y();hs=18e4,ks=6e5});var It=k(()=>{"use strict";q()});var _s,xs,Nt=k(()=>{"use strict";rt();je();fr();wr();Me();V();yr();It();y();_s=500*1024*1024,xs=4*1024*1024*1024});var wr=k(()=>{"use strict";Nt()});import{existsSync as ws,mkdirSync as wu,readFileSync as Es,writeFileSync as Eu}from"node:fs";import{homedir as Ps,totalmem as Wu}from"node:os";import Er from"node:path";function Ke(){if(!ws(Mt))return{};try{return JSON.parse(Es(Mt,"utf8"))}catch{return{}}}var Dt,Mt,Hu,Bu,Fu,je=k(()=>{"use strict";pr();pe();y();fr();wr();Me();Dt=Er.join(Ps(),".kynver"),Mt=Er.join(Dt,"config.json"),Hu=Er.join(Dt,"credentials");Bu=500*1024*1024,Fu=4*1024*1024*1024});import{existsSync as Tt}from"node:fs";import{homedir as Ht}from"node:os";import G from"node:path";function A(e){let r=G.resolve(Ie(e.trim()));for(;Ws.has(G.basename(r));)r=G.dirname(r);return r}function $(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return A(e);let r=Ke().harnessRoot?.trim();if(r)return A(r);let t=G.join(Ht(),".kynver","harness");return Tt(t)?t:Tt(Ut)?Ut:t}function B(e){return G.join(A(e),"runs")}function ae(e){return G.join(A(e),"worktrees")}function st(){let e=$();return{harnessRoot:e,runsDir:B(e),worktreesDir:ae(e)}}function kr(e,r){return G.join(e,b(r))}var Ut,Ws,F=k(()=>{"use strict";je();pe();y();Ut=G.join(Ht(),".openclaw","harness"),Ws=new Set(["runs","worktrees"])});F();import P from"node:path";He();import Ye from"node:path";H();q();var Pr=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Bt(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Pr)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!Bt(n)})}function X(e){if(typeof e=="string")return e.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/i)?.[0]??null;if(e&&typeof e=="object"){let r=e;for(let t of["prUrl","pr_url","pullRequestUrl"]){let n=r[t];if(typeof n=="string"&&n.trim())return n.trim()}}return null}function ye(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?w(e.changedFiles).length>0:!!(X(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}y();function be(e){return e.status||(e.status=Re(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function Wr(e,r){if(e.status)return w(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):de(e.worktreePath);return w(t).length>0}function Os(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Or(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=Os(e);if(o&&!L(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):de(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",c=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:Oe(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),l={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:c,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??X(s)};return e.status=l,l}return be(e)}q();V();yr();q();y();import Is from"node:path";var Ns=new Set(["running","dispatching","pending","queued","needs_attention"]),Q=new Set(["completed","failed","cancelled","done"]);function Z(e){let r=Rr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(Is.join(fe(e.id),"workers",b(i),"worker.json"),void 0);if(!a)continue;let u=Re(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),Ot(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Ft(){let e=[];for(let r of gr()){if(!Ns.has(r.status))continue;let t=Z(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,hr(r),e.push({runId:r.id,from:n,to:t})}return e}q();Ue();import{existsSync as Le,mkdirSync as Cc,readdirSync as Lt,renameSync as Ac,statSync as Ms}from"node:fs";import ee from"node:path";je();pr();pe();Ue();F();V();F();y();import Y from"node:path";var bc=`${Y.sep}runs${Y.sep}runs${Y.sep}`;function Kt(e){return{workerJsonPath:Y.join(e,"worker.json"),stdoutPath:Y.join(e,"stdout.jsonl"),stderrPath:Y.join(e,"stderr.log"),heartbeatPath:Y.join(e,"heartbeat.jsonl"),lastStatusPath:Y.join(e,"last-status.json")}}y();var Se=900*1e3,Mc=3600*1e3;function Gt(e,r){let t=ee.resolve(e),n=ee.resolve(B(r)),o=ee.relative(n,t);return o!==".."&&!o.startsWith("..")&&!ee.isAbsolute(o)}function Ds(e){if(!Le(e))return[];try{return Lt(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Ts(e){let r=ee.join(e,"workers");if(!Le(r))return[];try{return Lt(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function jt(e,r,t){if(!Le(e))return!1;try{let n=r-Ms(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Us(e,r=Date.now(),t=Se){if(!Le(e))return!1;let n=Kt(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&L(o.pid))return!0;let s=oe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(jt(n.stdoutPath,r,t)||jt(n.heartbeatPath,r,t))}function Hs(e,r=Date.now(),t=Se){for(let n of Ts(e))if(Us(ee.join(e,"workers",n),r,t))return!0;return!1}function $t(e,r=Date.now()){let t=new Set,n=B(e);for(let o of Ds(n)){let s=ee.join(n,o);Hs(s,r)&&t.add(`${e}\0${o}`)}return t}y();function Ir(e,r=Date.now(),t=Se){let n=oe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Ge(e,r=Date.now(),t=Se){return L(e.pid)?!0:Ir(e,r,t)}function Bs(e,r){return r?r.runTerminalCache.derive(e.run):Z(e.run)}function K(e,r=Date.now()){return Ge(e.worker,r)}function Nr(e,r){return Q.has(e.run.status)?!1:Bs(e,r)!==null}function Yt(e,r,t=Date.now()){if(K(e,t))return!0;if(Q.has(e.run.status)||Nr(e,r))return!1;let n=be(e);return J(n)?!1:!!K(e,t)}He();q();function Vt(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(K(e))return!0;let n=r??be(e);return!!(!J(n)||ye(n)||w(n.changedFiles).length>0||se({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:X(n.finalResult)}).blocked)}H();y();import{existsSync as Jt,mkdirSync as Fs,writeFileSync as zt}from"node:fs";import $e from"node:path";function qt(e,r,t){return $e.join(e,"salvage",b(r),b(t))}function Xt(e){return Jt($e.join(qt(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Qt(e){let r=qt(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Fs(r,{recursive:!0});let t=$e.join(r,"salvage.patch"),n=!1;if(Jt(e.indexed.worktreePath)){let s=v(e.indexed.worktreePath,["diff","HEAD"]),i=v(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
10
|
-
`);a.trim()&&(
|
|
4
|
+
`):""}function z(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function lt(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 Sr(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var S=R(()=>{"use strict"});var xo,xa,ct=R(()=>{"use strict";xo=["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"],xa=new Set(xo)});import{spawnSync as pt}from"node:child_process";function Re(e,r,t={}){let n=pt("git",r,br({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);yr(o)}return n.stdout||""}function ye(e){return Re(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function x(e,r){try{let t=pt("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 dt(e,r,t){let n=x(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 Be(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 Cr(n,"missing worktree path");let s=x(e,["rev-parse","HEAD"]);if(s.status!==0)return Cr(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let m=x(e,["rev-parse",n]);if(m.status!==0)return Cr(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=dt(e,i,a),l=dt(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 Cr(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var K=R(()=>{"use strict";S();ct()});import{homedir as mt}from"node:os";import ft from"node:path";function wo(e){return e==="~"?mt():e.startsWith("~/")||e.startsWith("~\\")?ft.join(mt(),e.slice(2)):e}function He(e){return ft.resolve(wo(e))}var be=R(()=>{"use strict"});var _r=R(()=>{"use strict";K();be()});var vr=R(()=>{"use strict"});var gt=R(()=>{"use strict"});import{existsSync as Ao,readFileSync as Eo,statfsSync as Po}from"node:fs";function xr(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Ao(e))continue;let r=Eo(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function ht(e={}){if(!(e.forceWsl===void 0?xr():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ce,n=e.wslHostFreeWarnBytes??Wo,o=e.wslHostFreeCriticalBytes??Do,s=e.statfs??Po,i;try{i=s(t)}catch(y){return{ok:!1,path:t,freeBytes:0,totalBytes:0,usedPercent:100,warnBelowBytes:n,criticalBelowBytes:o,reason:`Windows host disk probe failed at ${t}: ${y.message}`,probeError:y.message}}let a=Number(i.bavail)*Number(i.bsize),u=Number(i.blocks)*Number(i.bsize),l=u>0?(u-a)/u*100:100,c=a<n,d=a<o,m=!c&&!d,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. ${No()}`),{ok:m,path:t,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function No(){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 Wo,Do,ce,wr=R(()=>{"use strict";Wo=25*1024*1024*1024,Do=12*1024*1024*1024,ce="/mnt/c"});import{execFileSync as kt}from"node:child_process";import{existsSync as Le,readFileSync as Rt,readdirSync as Oo,statSync as Mo}from"node:fs";import Ar from"node:path";function Fe(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function yt(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let n=kt("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(n&&n!=="%USERNAME%"&&!n.includes("%"))return n}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ce;return r&&Le(Ar.join(t,"Users",r))?r:null}function Ho(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ce,n=e.windowsUser??yt();return n?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${n}/AppData/Local/Temp/wsl-crashes`:null}function Fo(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 Lo(){try{if(Le("/proc/sys/kernel/core_pattern"))return Rt("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return kt("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function Ko(e){return!!(e&&/wsl-capture-crash/i.test(e))}function jo(e,r=ce){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 $o(e){if(!Le(e))return[];let r=Oo(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=Mo(o),i=Fo(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 de(e={}){if(!(e.forceWsl===void 0?xr():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||ce,n=e.windowsUser??yt(),o=e.warnBelowBytes??Fe("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",Io),s=e.criticalBelowBytes??Fe("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",To),i=e.warnCount??Fe("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",Uo),a=e.criticalCount??Fe("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Bo),u=(e.readCorePattern??Lo)(),l=Ko(u),c=null;n&&(c=(e.readWslConfig??jo)(n,t));let d=c?.maxCrashDumpCount??null,m=d===-1,f=Ho({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??$o)(f)}catch(A){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}: ${A.message}`,probeError:A.message}}let y=p.reduce((A,g)=>A+g.bytes,0),b=p.length,k=[...new Set(p.map(A=>A.executableHint).filter(A=>!!A))],w=y>=s,F=y>=o,T=b>=a,Ne=b>=i,Q=!(w||T||F||Ne),Z=null;if(!Q){let A=w||T?"critical":"warning",g=(y/1024**3).toFixed(1),V=k.length>0?k.join(", "):"unknown";Z=`WSL crash dumps ${A}: ${b} file(s), ${g} GiB at ${f} (executables: ${V}). `+Go({wslCaptureEnabled:l,dumpsDisabledInWslConfig:m})}return{ok:Q,path:f,windowsUser:n,dumpCount:b,totalBytes:y,warnBelowBytes:o,criticalBelowBytes:s,warnCount:i,criticalCount:a,dumps:p,executables:k,corePattern:u,wslCaptureEnabled:l,maxCrashDumpCount:d,dumpsDisabledInWslConfig:m,reason:Z,probeError:null}}function Go(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 Io,To,Uo,Bo,Ke=R(()=>{"use strict";wr();Io=5*1024*1024*1024,To=10*1024*1024*1024,Uo=2,Bo=4});import{statfsSync as Yo}from"node:fs";function je(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Vo,n=e.diskFreeCriticalBytes??zo,o=e.diskMaxUsedPercent??Jo,s=e.diskHardMaxUsedPercent??qo,i=Yo(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,y=!c&&!d&&!f&&!p,b=e.skipWslHostCheck?null:ht(e.wslHost),k=e.skipWslCrashDumpCheck?null:de(e.wslCrashDumps),w=y&&(b?b.ok:!0)&&(k?k.ok:!0),F=null;return w||(F=[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,k&&!k.ok?k.reason:null].filter(Boolean).join("; ")),Xo({ok:w,path:r,freeBytes:a,totalBytes:u,usedPercent:l,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:F,wslHost:b,wslCrashDumps:k?{ok:k.ok,path:k.path,dumpCount:k.dumpCount,totalBytes:k.totalBytes,executables:k.executables,wslCaptureEnabled:k.wslCaptureEnabled,dumpsDisabledInWslConfig:k.dumpsDisabledInWslConfig,reason:k.reason,probeError:k.probeError}:null})}function Xo(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 Vo,zo,Jo,qo,$e=R(()=>{"use strict";Ke();wr();Vo=30*1024*1024*1024,zo=15*1024*1024*1024,Jo=80,qo=90});import{existsSync as Qo,readdirSync as Zo,statSync as es}from"node:fs";import Er from"node:path";function Ge(){return St()}function Pr(){let{runsDir:e}=Ge();return bt(e)}function Ye(e){return bt(j(e))}function rs(e){try{return es(e).isDirectory()}catch{return!1}}function bt(e){if(!Qo(e))return[];let r=[];for(let t of Zo(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=Er.join(e,t.name);if(!rs(n))continue;let o=v(Er.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function Wr(e){let{runsDir:r}=Ge();at(Er.join(Dr(r,e.id),"run.json"),e)}function Se(e){let{harnessRoot:r}=Ge();return Ce(r,e)}function Ce(e,r){return Dr(j(e),C(r))}var ee=R(()=>{"use strict";$();S()});import{existsSync as ts,readdirSync as ns}from"node:fs";import os from"node:path";function Nr(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(C(n));let t=os.join(Se(e.id),"workers");if(!ts(t))return[...r];for(let n of ns(t,{withFileTypes:!0}))n.isDirectory()&&r.add(C(n.name));return[...r]}var Or=R(()=>{"use strict";ee();S()});function Mr(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 Ct(e){let r=e.trim();if(!r)return null;let t=Mr(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Mr(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Mr(r.slice(i,a+1));u&&n.push(u)}return n.length>0?n[n.length-1]:null}function _t(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Ct(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Ct(t);return n||t}var vt=R(()=>{"use strict"});import{existsSync as ss,readFileSync as is}from"node:fs";function xt(e){return e==="complete"}function wt(e){return xt(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function pe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!ss(e))return r;let t=Date.now()+as,n=new Date(t).toISOString(),o=is(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=Ie(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)),xt(r.lastHeartbeatPhase)&&(r.terminalFinalResult=_t(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 as,Ve=R(()=>{"use strict";vt();S();as=6e4});function ls(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function cs(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 ds(e){let r=ls(e[0]);return!!(r&&us.has(r))}function Ir(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function Tr(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function ps(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function ms(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;At.has(n)&&(t+=1);continue}r.push(n)}}return r}function fs(e){let r=!1,t=e.map((o,s)=>{let i=ps(o),a=e[s-1];return a&&At.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=ms(t);if(n.length===2){let[o,s]=n;if(Tr(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(Ir(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 Ur(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=cs(i.trim());if(!a.length||!ds(a))return i;let u=fs(a);return u.changed?(o=!0,u.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Et(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 gs(e){let{pattern:r,target:t}=Et(e);return r?Tr(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Ir(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function hs(e){let{pattern:r,target:t}=Et(e);if(!r)return null;if(Tr(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Ir(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function ks(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 Rs(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 Br(e){let r=e.meta?.trim()||(e.command?Rs(e.command):null)||null;if(r){let t=gs(r),n=ks(t);if(n)return n;let o=hs(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=Ur(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 us,At,Pt=R(()=>{"use strict";us=new Set(["rg","ripgrep","grep"]),At=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 Cs(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 ve(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function _s(e){let r=e.metadata;if(!ve(r))return null;let t=r.vulnerabilities;if(!ve(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 vs(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 xs(e,r){let t=e.error;if(ve(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
|
+
`).find(Boolean)??o,160):"npm audit failed"}function ws(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=Cs(r);if(!t||!ve(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(ve(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${xs(t,e.stderr)}`};let n=_s(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:vs(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function As(e){return ys.test(e)}function Es(e){return bs.test(e)}function Ps(e){let r=Br({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&&Ss.test(n)){let i=_e(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Ur(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 Wt(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(As(e.command)){let i=r.trim()||n.trim()||t.trim();return ws({exitCode:e.exitCode,stdout:i,stderr:t})}if(Es(e.command))return Ps({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Br({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 ys,bs,Ss,Dt=R(()=>{"use strict";Pt();ys=/\bnpm\s+audit\b/i,bs=/\b(rg|ripgrep)\b/i,Ss=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Ws,readFileSync as Ds}from"node:fs";function Ns(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Os(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 Ms(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 Is(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 Ts(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Nt(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Ws(e))return r;let t=Ds(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean);for(let n of t){let o=Ie(n);if(!o)continue;let s=Ns(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=Os(a);u&&(r.currentTool=u)}let i=Is(o);i&&Ts(r,Wt({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Ms(r,o)}return r}var Ot=R(()=>{"use strict";Dt();S()});function Bs(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Mt(e){let r=(e??"").trim();if(!r)return null;for(let t of Us)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Bs(r)}`};return null}var Us,It=R(()=>{"use strict";Us=[{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"}]});function Tt(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Hs(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 Fs(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Tt(e.head)}function Ls(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 Ut(e){if(e.alive||Hs(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Tt(e.headCommit)??Fs(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:Ls(s,r,t)}}var Bt=R(()=>{"use strict"});function xe(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ks(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 js(e){if(xe(e.headCommit)||xe(e.prUrl)||xe(e.artifactBundlePath)||xe(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&xe(r.head))}function me(e){return Ks(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:js(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 ze=R(()=>{"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 Ft(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Je(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=Ft(u);for(let c of n){let d=Ft(c);d>l&&(u=c,l=d)}return u}var Fr=R(()=>{"use strict"});function fe(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function $s(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]}`:fe(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 Lt(e){let r=null;if(typeof e=="string"){let o=Je(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=fe(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:fe(s.mergeCommit??s.merge_commit),reason:fe(s.reason)})}return n}function Kt(e,r){let t=[],n=re(fe(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(!$s(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(fe(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?re(r.targetPrUrls[0]):null):null;if(s){let d=Kt(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let p=Lt(n).find(y=>y.prUrl===s);if(!p||p.outcome!=="merged"&&!(p.reason?.trim()&&(p.outcome==="skipped"||p.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Lt(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=Kt(t,n);if(r.landingOnly)for(let d of l){if(u.size>0&&!u.has(qe(d)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`};if(u.size===0)return{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 $t(e){if(e.blocked)return e.detail??e.reason}var Gt=R(()=>{"use strict";Fr()});function Vs(e){let r=Date.now();if(e.completionBlocker&&!Yt(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Js(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=me(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=jt({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=$t(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(zs(e))return{state:"done",reason:"empty abandoned worker record"};let o=Mt(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Ut({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>Gs)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>Ys?{state:"stale",reason:`no log/event/heartbeat activity for ${Sr(n)}s`}:{state:"ok",reason:"recent activity"}}function Yt(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function zs(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 Js(e){let r=null;if(typeof e=="string"?r=Je(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 qs(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??wt(t))}function we(e,r={}){let t=Nt(e.stdoutPath),n=pe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=qs(e,t.finalResult,n),i=o?!1:z(e.pid),a=Te(e.stdoutPath),u=Te(e.stderrPath),l=Te(e.heartbeatPath),c=ye(e.worktreePath),d=Be(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),m=lt([t.lastEventAt,n.lastHeartbeatAt,Ue(e.stdoutPath),Ue(e.stderrPath),Ue(e.heartbeatPath)]),f=t.error||!i&&!s&&ut(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=Yt(p)?null:p,b=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,k=Vs({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:y,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=y||k.state==="blocked"?"blocked":o||k.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:w,attention:k,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.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 Vt(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Gs,Ys,ne=R(()=>{"use strict";Ve();Ot();It();Bt();K();ze();Gt();Fr();S();Gs=18e4,Ys=6e5});var zt=R(()=>{"use strict";ne()});var Xs,Qs,Jt=R(()=>{"use strict";gt();Qe();vr();Lr();$e();ee();Or();zt();S();Xs=500*1024*1024,Qs=4*1024*1024*1024});var Lr=R(()=>{"use strict";Jt()});import{existsSync as ni,mkdirSync as dl,readFileSync as oi,writeFileSync as pl}from"node:fs";import{homedir as si,totalmem as fl}from"node:os";import Kr from"node:path";function Xe(){if(!ni(qt))return{};try{return JSON.parse(oi(qt,"utf8"))}catch{return{}}}var Xt,qt,Cl,_l,vl,Qe=R(()=>{"use strict";_r();be();S();vr();Lr();$e();Xt=Kr.join(si(),".kynver"),qt=Kr.join(Xt,"config.json"),Cl=Kr.join(Xt,"credentials");_l=500*1024*1024,vl=4*1024*1024*1024});import{existsSync as Qt}from"node:fs";import{homedir as en}from"node:os";import J from"node:path";function P(e){let r=J.resolve(He(e.trim()));for(;ii.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=Xe().harnessRoot?.trim();if(r)return P(r);let t=J.join(en(),".kynver","harness");return Qt(t)?t:Qt(Zt)?Zt:t}function j(e){return J.join(P(e),"runs")}function ge(e){return J.join(P(e),"worktrees")}function St(){let e=q();return{harnessRoot:e,runsDir:j(e),worktreesDir:ge(e)}}function Dr(e,r){return J.join(e,C(r))}var Zt,ii,$=R(()=>{"use strict";Qe();be();S();Zt=J.join(en(),".openclaw","harness"),ii=new Set(["runs","worktrees"])});$();import O from"node:path";ze();import tr from"node:path";K();ne();var jr=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function rn(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of jr)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!rn(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 Ee(e){return e.status||(e.status=we(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function $r(e,r){if(e.status)return W(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):ye(e.worktreePath);return W(t).length>0}function ai(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Gr(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=ai(e);if(o&&!z(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):ye(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"}:Be(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 Ee(e)}ne();ee();Or();ne();S();import ui from"node:path";var li=new Set(["running","dispatching","pending","queued","needs_attention"]),se=new Set(["completed","failed","cancelled","done"]);function ie(e){let r=Nr(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=v(ui.join(Se(e.id),"workers",C(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),Vt(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function tn(){let e=[];for(let r of Pr()){if(!li.has(r.status))continue;let t=ie(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Wr(r),e.push({runId:r.id,from:n,to:t})}return e}ne();Ve();import{existsSync as Ze,mkdirSync as lc,readdirSync as sn,renameSync as cc,statSync as ci}from"node:fs";import ae from"node:path";Qe();_r();be();Ve();$();ee();$();S();import X from"node:path";var oc=`${X.sep}runs${X.sep}runs${X.sep}`;function nn(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 Pe=900*1e3,Rc=3600*1e3;function an(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 di(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 pi(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 on(e,r,t){if(!Ze(e))return!1;try{let n=r-ci(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function mi(e,r=Date.now(),t=Pe){if(!Ze(e))return!1;let n=nn(e),o=v(n.workerJsonPath,void 0);if(o?.status==="running"&&z(o.pid))return!0;let s=pe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(on(n.stdoutPath,r,t)||on(n.heartbeatPath,r,t))}function fi(e,r=Date.now(),t=Pe){for(let n of pi(e))if(mi(ae.join(e,"workers",n),r,t))return!0;return!1}function un(e,r=Date.now()){let t=new Set,n=j(e);for(let o of di(n)){let s=ae.join(n,o);fi(s,r)&&t.add(`${e}\0${o}`)}return t}S();function Yr(e,r=Date.now(),t=Pe){let n=pe(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=Pe){return z(e.pid)?!0:Yr(e,r,t)}function gi(e,r){return r?r.runTerminalCache.derive(e.run):ie(e.run)}function G(e,r=Date.now()){return er(e.worker,r)}function Vr(e,r){return se.has(e.run.status)?!1:gi(e,r)!==null}function ln(e,r,t=Date.now()){if(G(e,t))return!0;if(se.has(e.run.status)||Vr(e,r))return!1;let n=Ee(e);return te(n)?!1:!!G(e,t)}ze();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??Ee(e);return!!(!te(n)||Ae(n)||W(n.changedFiles).length>0||me({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:oe(n.finalResult)}).blocked)}K();S();import{existsSync as pn,mkdirSync as hi,writeFileSync as dn}from"node:fs";import rr from"node:path";function mn(e,r,t){return rr.join(e,"salvage",C(r),C(t))}function fn(e){return pn(rr.join(mn(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function gn(e){let r=mn(e.harnessRoot,e.indexed.runId,e.indexed.workerName);hi(r,{recursive:!0});let t=rr.join(r,"salvage.patch"),n=!1;if(pn(e.indexed.worktreePath)){let s=x(e.indexed.worktreePath,["diff","HEAD"]),i=x(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
10
|
+
`);a.trim()&&(dn(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 Ks=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function js(e){return!Ks.has(e.skipReason)||K(e.indexed,e.now)?!1:Xt({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Qt({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function Ls(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?Q.has(r.run.status)||e.liveness&&Nr(r,e.liveness)||e.liveness&&J(Or(r,e.liveness))&&!K(r)?o:n:t?o:n}function Gs(e,r){if(e.harnessRoot?.trim())return Ye.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${Ye.sep}runs${Ye.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Zt(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=Ls(e);if(n<=0&&!t&&u<=0)return"worktrees_disabled";if(u>0&&o<u)return"below_age_threshold";if(K(r,a))return"active_worker";let c=Or(r,e.liveness),l=Gs(e,r),p=d=>l&&js({indexed:r,harnessRoot:l,skipReason:d,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:d;if(Vt(r,c)){let d=p("completion_blocked");if(d)return d}if(Wr(r,e.liveness?.gitStatusCache)){let d=p("dirty_worktree");if(d)return d}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let d=p("pr_or_unmerged_commits");if(d)return d}if(Yt(r,e.liveness,a)||!J(c))return"run_still_active";if(ye(c)){let d=p("pr_or_unmerged_commits");if(d)return d}if(w(c.changedFiles).length>0){let d=p("dirty_worktree");if(d)return d}if(se({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:X(c.finalResult)}).blocked){let d=p("landing_blocked");if(d)return d}if(i&&e.worktreePath){let d=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(d)return d.detail?{reason:d.reason,detail:d.detail}:d.reason}return null}function Mr(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(Ye.resolve(o))||r&&K(r)?"active_worker":r&&Wr(r,e.gitStatusCache)?"dirty_worktree":null}function en(e){return Mr(e)}var Dr=216e5,Ve=6048e5;var Tr=36e5,ze=120;var rn=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function tn(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)rn.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||rn.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as an,readdirSync as un,statSync as Vs}from"node:fs";import cn from"node:path";V();F();import nn from"node:path";y();function Ys(e,r){return Ge(e,r)}function on(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Te(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=_(nn.join(me(o,s.id),"workers",b(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let c=nn.resolve(u.worktreePath);Ys(u,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of $t(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function sn(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}y();function zs(e,r){try{let t=Vs(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Js(e,r){let t=cn.join(e,"runs",r,"run.json");return an(t)?_(t,null):null}function ln(e){try{return un(e).length===0}catch{return!1}}function dn(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(sn(n,r,t,i.liveRunKeys)||!ln(n))return"run_still_active";let a=Js(r,t);return a&&!Q.has(a.status)&&!Z(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function pn(e){if(!an(e.worktreesDir))return[];let r=[],t;try{t=un(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=cn.join(e.worktreesDir,o);ln(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:zs(s,e.now)})}return r}H();import{existsSync as Hr,rmSync as xn}from"node:fs";import{execFileSync as qs}from"node:child_process";import{existsSync as fn,readdirSync as Xs,statSync as Qs}from"node:fs";import Zs from"node:path";var ei=2500;function ri(e,r=ei){if(!fn(e))return 0;try{let n=qs("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 j(e,r=5e4){if(!fn(e))return 0;let t=ri(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Xs(i)}catch{continue}for(let u of a){if(o++>r)return null;let c=Zs.join(i,u),l;try{l=Qs(c)}catch{continue}l.isDirectory()?s.push(c):n+=l.size}}return n}import{existsSync as si,rmSync as ii}from"node:fs";F();import{lstatSync as ti,readdirSync as ni}from"node:fs";function mn(e){try{let r=ti(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=mn(e);if(!t)return!1;if(t.foreign)return!0;try{let n=ni(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=mn(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as oi}from"node:child_process";import Rn from"node:path";import E from"node:path";function hn(e,r,t,n){let o=E.resolve(e),s=`${E.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=E.relative(t,i);if(a.startsWith("..")||E.isAbsolute(a))return"path_outside_harness";let u=a.split(E.sep);return u.length<3||u[u.length-1]!==n||!o.startsWith(E.resolve(r))?"path_outside_harness":null}function Je(e,r,t){return hn(e,r,t,"node_modules")}function qe(e,r,t){return hn(e,r,t,".next")}function Xe(e,r,t){let n=E.resolve(e),o=E.relative(t,n);return o.startsWith("..")||E.isAbsolute(o)||o.split(E.sep).length<3||!n.startsWith(E.resolve(r))?"path_outside_harness":null}function kn(e,r,t){let n=E.resolve(e);return Je(n,r,t)===null||qe(n,r,t)===null||Xe(n,r,t)===null}function bn(){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 yn(e){let r=oi("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Sn(e,r,t){if(!kn(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=yn(["chown","-R",`${n}:${o}`,Rn.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=yn(["rm","-rf",Rn.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 Ur="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 ai(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function _n(e,r,t={}){if(!si(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?ae(n):null,i=e.bytes??j(e.path)??void 0,a=t.removePath??ii,u=t.hasForeignOwnedEntry??gn;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!ai(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let l=u(e.path),p=bn();if(!(p==="force"||p==="auto"&&l))return l?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Ur}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let g=Sn(e.path,n,o);if(g.ok&&g.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(g.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(d){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${d.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${g.error}; ${Ur}`}}}function Br(e){let r=e.harnessRoot;return!r||!Gt(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Fr(e,r){let t=Br(e);if(t)return t;let n=_n(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function vn(e,r){return Fr(e,r)}function Cn(e,r){return Fr(e,r)}function An(e,r){return Fr(e,r)}function wn(e,r){let t=Br(e);if(t)return t;if(!Hr(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??j(e.path);return xn(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 En(e,r){let t=Br(e);if(t)return t;if(!Hr(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??j(e.path);return n&&le(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Hr(e.path)&&xn(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 Qe,readdirSync as Ze,statSync as ui}from"node:fs";import D from"node:path";function Kr(e,r){try{let t=ui(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Wn(e,r){let t=D.relative(r,e);return t===""||!t.startsWith("..")&&!D.isAbsolute(t)}function Pn(e,r,t,n){let o=[];for(let s of Pr){if(s===".next")continue;let i=D.join(e,s);if(!Qe(i))continue;let a=D.resolve(i);t.has(a)||Wn(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:Kr(a,r.now)}))}return o}function On(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Pn(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!Qe(e.worktreesDir))return r;for(let n of Ze(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=D.join(e.worktreesDir,n.name);for(let s of Ze(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=D.join(o,s.name);r.push(...Pn(i,e,t,{runId:n.name,worker:s.name}))}}return r}function In(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;Qe(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:Kr(a,e.now)})))}if(!t||!Qe(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(D.resolve(i.worktreePath));for(let i of Ze(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=D.join(e.worktreesDir,i.name),u;try{u=Ze(a,{withFileTypes:!0})}catch{continue}for(let c of u){if(!c.isDirectory())continue;let l=D.resolve(D.join(a,c.name));o.has(l)||s.has(l)||Wn(l,e.harnessRoot)&&(o.add(l),n.push({kind:"remove_worktree",path:l,bytes:null,runId:i.name,worker:c.name,ageMs:Kr(l,e.now)}))}}return n}import{existsSync as Dn,readdirSync as Nn,statSync as ci}from"node:fs";import ue from"node:path";var li=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function di(e,r){try{let t=ci(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function pi(e,r){let t=ue.relative(r,e);return t===""||!t.startsWith("..")&&!ue.isAbsolute(t)}function fi(e,r,t,n,o,s){if(!Dn(n))return;let i=ue.resolve(n);r.has(i)||pi(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:di(i,t.now)}))}function Mn(e,r,t,n,o){for(let s of li)fi(e,r,t,ue.join(n,s.dirName),s.kind,o)}function Tn(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Mn(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Dn(e.worktreesDir))return r;for(let n of Nn(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=ue.join(e.worktreesDir,n.name),s;try{s=Nn(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=ue.join(o,i.name);Mn(r,t,e,a,{runId:n.name,worker:i.name})}}return r}H();import{existsSync as Un,statSync as mi}from"node:fs";import T from"node:path";function gi(e,r){try{let t=mi(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function hi(e){let r=[],t=null;for(let n of e.split(`
|
|
14
|
-
`)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function
|
|
15
|
-
`).map(
|
|
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 dn(rr.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
13
|
+
`),o}var ki=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function Ri(e){return!ki.has(e.skipReason)||G(e.indexed,e.now)?!1:fn({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(gn({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function yi(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?se.has(r.run.status)||e.liveness&&Vr(r,e.liveness)||e.liveness&&te(Gr(r,e.liveness))&&!G(r)?o:n:t?o:n}function bi(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 hn(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=yi(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=Gr(r,e.liveness),c=bi(e,r),d=p=>c&&Ri({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($r(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(ln(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(me({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 zr(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&&$r(r,e.gitStatusCache)?"dirty_worktree":null}function kn(e){return zr(e)}var Jr=216e5,nr=6048e5;var qr=36e5,or=120;var Rn=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function yn(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)Rn.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Rn.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as _n,readdirSync as vn,statSync as _i}from"node:fs";import xn from"node:path";ee();$();import bn from"node:path";S();function Ci(e,r){return er(e,r)}function Sn(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ye(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let u=v(bn.join(Ce(o,s.id),"workers",C(a),"worker.json"),void 0);if(!u?.worktreePath)continue;let l=bn.resolve(u.worktreePath);Ci(u,r)&&(i=!0,t.add(l))}i&&n.add(`${o}\0${s.id}`)}for(let s of un(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Cn(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}S();function vi(e,r){try{let t=_i(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function xi(e,r){let t=xn.join(e,"runs",r,"run.json");return _n(t)?v(t,null):null}function wn(e){try{return vn(e).length===0}catch{return!1}}function An(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Cn(n,r,t,i.liveRunKeys)||!wn(n))return"run_still_active";let a=xi(r,t);return a&&!se.has(a.status)&&!ie(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function En(e){if(!_n(e.worktreesDir))return[];let r=[],t;try{t=vn(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=xn.join(e.worktreesDir,o);wn(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:vi(s,e.now)})}return r}K();import{existsSync as Qr,rmSync as Hn}from"node:fs";import{execFileSync as wi}from"node:child_process";import{existsSync as Pn,readdirSync as Ai,statSync as Ei}from"node:fs";import Pi from"node:path";var Wi=2500;function Di(e,r=Wi){if(!Pn(e))return 0;try{let n=wi("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(!Pn(e))return 0;let t=Di(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=Ai(i)}catch{continue}for(let u of a){if(o++>r)return null;let l=Pi.join(i,u),c;try{c=Ei(l)}catch{continue}c.isDirectory()?s.push(l):n+=c.size}}return n}import{existsSync as Ii,rmSync as Ti}from"node:fs";$();import{lstatSync as Ni,readdirSync as Oi}from"node:fs";function Wn(e){try{let r=Ni(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 Dn(e,r=32){let t=Wn(e);if(!t)return!1;if(t.foreign)return!0;try{let n=Oi(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Wn(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as Mi}from"node:child_process";import Mn from"node:path";import D from"node:path";function Nn(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 Nn(e,r,t,"node_modules")}function ir(e,r,t){return Nn(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 On(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 Tn(){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 In(e){let r=Mi("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Un(e,r,t){if(!On(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=In(["chown","-R",`${n}:${o}`,Mn.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=In(["rm","-rf",Mn.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 Xr="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 Ui(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Bn(e,r,t={}){if(!Ii(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?ge(n):null,i=e.bytes??Y(e.path)??void 0,a=t.removePath??Ti,u=t.hasForeignOwnedEntry??Dn;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(l){if(!Ui(l)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let c=u(e.path),d=Tn();if(!(d==="force"||d==="auto"&&c))return c?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${l.message}; ${Xr}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:l.message};let f=Un(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}; ${Xr}`}}}function Zr(e){let r=e.harnessRoot;return!r||!an(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function et(e,r){let t=Zr(e);if(t)return t;let n=Bn(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Fn(e,r){return et(e,r)}function Ln(e,r){return et(e,r)}function Kn(e,r){return et(e,r)}function jn(e,r){let t=Zr(e);if(t)return t;if(!Qr(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 Hn(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 $n(e,r){let t=Zr(e);if(t)return t;if(!Qr(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}),Qr(e.path)&&Hn(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 Bi}from"node:fs";import B from"node:path";function rt(e,r){try{let t=Bi(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Yn(e,r){let t=B.relative(r,e);return t===""||!t.startsWith("..")&&!B.isAbsolute(t)}function Gn(e,r,t,n){let o=[];for(let s of jr){if(s===".next")continue;let i=B.join(e,s);if(!ur(i))continue;let a=B.resolve(i);t.has(a)||Yn(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:rt(a,r.now)}))}return o}function Vn(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Gn(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(...Gn(i,e,t,{runId:n.name,worker:s.name}))}}return r}function zn(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:rt(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)||Yn(c,e.harnessRoot)&&(o.add(c),n.push({kind:"remove_worktree",path:c,bytes:null,runId:i.name,worker:l.name,ageMs:rt(c,e.now)}))}}return n}import{existsSync as Xn,readdirSync as Jn,statSync as Hi}from"node:fs";import he from"node:path";var Fi=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function Li(e,r){try{let t=Hi(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Ki(e,r){let t=he.relative(r,e);return t===""||!t.startsWith("..")&&!he.isAbsolute(t)}function ji(e,r,t,n,o,s){if(!Xn(n))return;let i=he.resolve(n);r.has(i)||Ki(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:Li(i,t.now)}))}function qn(e,r,t,n,o){for(let s of Fi)ji(e,r,t,he.join(n,s.dirName),s.kind,o)}function Qn(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||qn(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Xn(e.worktreesDir))return r;for(let n of Jn(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=he.join(e.worktreesDir,n.name),s;try{s=Jn(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=he.join(o,i.name);qn(r,t,e,a,{runId:n.name,worker:i.name})}}return r}K();import{existsSync as Zn,statSync as $i}from"node:fs";import H from"node:path";function Gi(e,r){try{let t=$i(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Yi(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 Vi(e,r){let t=H.relative(H.resolve(r),H.resolve(e));return t!==""&&!t.startsWith("..")&&!H.isAbsolute(t)}var zi=200;function eo(e){if(!e.includeOrphans||!Zn(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(H.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(H.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=Re(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let u=Yi(a);for(let l of u){if(i>=zi)break;let c=H.resolve(l.path);if(c===H.resolve(s)||!Vi(c,e.worktreesDir)||t.has(c)||o.has(c)||!Zn(c))continue;let m=H.relative(e.worktreesDir,c).split(H.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:Gi(c,e.now)})}}return n}ee();S();import We from"node:path";function ro(e,r){let t=We.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?We.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function to(e){let r=new Map;for(let t of Ye(e))for(let n of Object.keys(t.workers||{})){let o=We.join(Ce(e,t.id),"workers",C(n),"worker.json"),s=v(o,void 0);s?.worktreePath&&r.set(We.resolve(s.worktreePath),{harnessRoot:e,worktreePath:We.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 no(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,y=ue("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),b=e.byteAccountingEntryCap??(Number.isFinite(y)&&y>0?Math.floor(y):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(u)&&u>0?Math.floor(u):120,includeOrphans:l,runIdFilter:d?String(d):void 0,accountBytes:m,storagePerRunEntryCap:p,byteAccountingEntryCap:b}}K();import{existsSync as oo}from"node:fs";import tt from"node:path";S();var qi=1800*1e3;function so(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??qi;if(!oo(e.worktreePath))return null;if(e.runId&&e.workerName){let l=tt.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),c=v(tt.join(l,"worker.json"),void 0);if(c&&Yr(c,r,t))return"active_worker"}let n=tt.join(e.worktreePath,".git");if(!oo(n))return null;let o=x(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=x(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=x(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 Xi,readdirSync as io,statSync as Qi}from"node:fs";import Zi from"node:path";function ao(e={}){let r=P(e.harnessRoot??q()),t=ge(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!Xi(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=io(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=Zi.join(t,c.name);try{let m=Qi(d);u=u===null?m.mtimeMs:Math.min(u,m.mtimeMs)}catch{}try{for(let m of io(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 ea}from"node:fs";import{homedir as ra}from"node:os";import uo from"node:path";var ta=["/var/tmp/kynver-harness",uo.join(ra(),".openclaw","harness")];function nt(e,r,t){if(!t?.trim())return;let n=P(t.trim());e.has(n)||(e.add(n),r.push(n))}function na(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 lo(e={}){let r=new Set,t=[];nt(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??[])nt(r,t,o);if(na(e))for(let o of ta){let s=uo.resolve(o);!r.has(s)&&ea(s)&&nt(r,t,s)}return t}$e();function oa(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function sa(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=sa("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=je({...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 po(e,r){if(!r.pressured)return e;let t=e.execute||!oa("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}}Ke();import{unlinkSync as ia}from"node:fs";function cr(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function mo(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 fo(e={}){let r=e.execute===!0||cr("KYNVER_WSL_CRASH_DUMP_EXECUTE")||cr("KYNVER_CLEANUP_EXECUTE"),t=e.purgeAll===!0||cr("KYNVER_WSL_CRASH_DUMP_PURGE_ALL"),n=Math.max(0,e.keepNewest??mo("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",t?0:1)),o=de({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{ia(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 go(e){return e?cr("KYNVER_WSL_CRASH_DUMP_CLEANUP")||!e.ok?!0:e.dumpCount>mo("KYNVER_WSL_CRASH_DUMP_KEEP_NEWEST",1):!1}Ke();function N(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}K();var dr=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=x(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 ua}from"node:child_process";import{existsSync as la}from"node:fs";import ca from"node:path";var da=5e3;function pa(e,r){if(!la(ca.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=ua("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 ho(e){let r=pa(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 pr=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=ho(t)??[];return this.cache.set(t,o),o}};var mr=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 ko(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 fa(e={}){let r=e.harnessRoot?P(e.harnessRoot):q(),t=lo({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function ga(e){return typeof e=="string"?{reason:e}:e}function ke(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function fr(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:Y(e.path,t)}}function Ro(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 ha(e,r){return e.kind==="remove_next_cache"?Ln(e,r):Fn(e,r)}function ka(e,r,t){return e.kind==="remove_next_cache"?ir(e.path,r,t):sr(e.path,r,t)}function Ra(e){let r=new Map;for(let t of e)for(let[n,o]of to(t))r.set(n,o);return r}function yo(e,r){return e.runId&&e.worker?O.join(r,e.runId,e.worker):O.resolve(e.path,"..")}function ya(e={}){let r=no(e),t=co();r=po(r,t);let n=fa(e);N("scan",`${n.scanRoots.length} harness root(s)`);let o=Sn(n.scanRoots,n.now),s=r.finalizeStaleRuns?tn().map(g=>({runId:g.runId,from:g.from,to:g.to})):[];s.length>0&&N("finalize",`${s.length} stale run(s) marked terminal`),N("index","building worktree index");let i=Ra(n.scanRoots);N("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new mr,gitStatusCache:new pr,gitRevCache:new dr},u=[],l=[],c=new Set,d=r.maxActionsPerSweep,m=()=>l.length>=d;for(let g of n.scanRoots){if(m())break;N("root",g);let V=O.join(g,"worktrees"),Oe=ro(i,g),Me={harnessRoot:g,worktreesDir:V,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Oe,now:n.now},gr=r.scanDependencyCaches?Qn(Me):[];N("dependency",r.scanDependencyCaches?`${gr.length} cache candidate(s) at ${g}`:"skipped (worktree-only sweep)");let hr=0;for(let M of gr){if(m())break;hr+=1,hr%50===0&&N("dependency",`${hr}/${gr.length} evaluated`);let _=O.resolve(M.path);if(c.has(_))continue;c.add(_);let h={...M,path:_},E=ka(h,g,V);if(E){ke(u,h.path,E),l.push({...h,executed:!1,skipped:!0,skipReason:E});continue}let I=yo(h,V),le=Oe.get(O.resolve(I))??null,U=zr({indexed:le,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:h.ageMs,worktreePath:I,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(U){ke(u,h.path,U),l.push({...h,executed:!1,skipped:!0,skipReason:U});continue}l.push(ha(fr(h,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let M of Vn(Me)){if(m())break;let _=O.resolve(M.path);if(c.has(_))continue;c.add(_);let h={...M,path:_},E=ar(h.path,g,V);if(E){ke(u,h.path,E),l.push({...h,executed:!1,skipped:!0,skipReason:E});continue}let I=yo(h,V),le=Oe.get(O.resolve(I))??null,U=kn({indexed:le,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:h.ageMs,worktreePath:I,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(U){ke(u,h.path,U),l.push({...h,executed:!1,skipped:!0,skipReason:U});continue}l.push(Kn(fr(h,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let kr=[...zn(Me),...eo(Me)];N("worktrees",`${kr.length} candidate(s) at ${g}`);let ot=new Set,Rr=0;for(let M of kr){if(m())break;Rr+=1,Rr%50===0&&N("worktrees",`${Rr}/${kr.length} evaluated`);let _=O.resolve(M.path);if(ot.has(_))continue;ot.add(_);let h={...M,path:_},E=Oe.get(O.resolve(h.path))??null,I=E?null:so({worktreePath:h.path,harnessRoot:g,runId:h.runId,workerName:h.worker,now:n.now}),le=hn({indexed:E,worktreePath:O.resolve(h.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:h.ageMs,orphanSafety:I,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:g,writeSalvageEvidence:r.execute});if(le){let{reason:U,detail:bo}=ga(le);ke(u,h.path,U,bo),l.push({...h,executed:!1,skipped:!0,skipReason:U});continue}l.push($n(fr(h,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!m()&&r.runDirectoriesAgeMs>=0)for(let M of En({harnessRoot:g,worktreesDir:V,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(m())break;let _=O.resolve(M.path);if(c.has(_))continue;c.add(_);let h={...M,path:_},E=h.runId??O.basename(_),I=An({harnessRoot:g,runId:E,runPath:_,ageMs:h.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(I){ke(u,h.path,I),l.push({...h,executed:!1,skipped:!0,skipReason:I});continue}l.push(jn(fr(h,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let f=0,p=0,y=0,b=0,k=0,w=0;for(let g of l)g.bytes&&(f+=g.bytes),!g.skipped&&!g.executed&&g.bytes&&(y+=g.bytes),g.executed?(k+=1,b+=g.bytes??0,g.kind==="remove_run_directory"&&(p+=1)):g.skipped&&(w+=1,g.skipReason==="dry_run"&&g.bytes&&(y+=g.bytes));let F=r.accountBytes?ao({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,T=de(),Ne=r.execute&&go(T),L=Ne?fo({execute:!0}):null,Q=T?{observed:!0,execute:Ne,dumpCount:T.dumpCount,totalBytes:T.totalBytes,removedCount:L?.removed.length??0,removedBytes:L?.removedBytes??0,executables:T.executables,path:T.path,reason:T.reason}:void 0;L&&L.removed.length>0&&(b+=L.removedBytes,k+=L.removed.length,N("wsl-crashes",`removed ${L.removed.length} dump(s), ${L.removedBytes} bytes`)),N("complete",`${l.length} action(s), ${w} skipped, ${k} removed`);let Z=yn(l,u),A=ko({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:y,removedBytes:b,removedPaths:k,skippedPaths:w,skipReasons:Ro(l,u)},...F?{storage:F}:{},...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:y,removedBytes:b,removedPaths:k,skippedPaths:w,skipReasons:Ro(l,u)},...F?{storage:F}:{},...Z.length>0?{preservedLivePaths:Z}:{},...p>0?{removedRunDirectories:p}:{},...Q?{wslCrashDumps:Q}:{},compactSummary:A}}export{or as DEFAULT_MAX_ACTIONS_PER_SWEEP,Jr as DEFAULT_NODE_MODULES_AGE_MS,qr as DEFAULT_RUN_DIRECTORIES_AGE_MS,nr as DEFAULT_WORKTREES_AGE_MS,ya as runHarnessCleanup};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var r=(e,n)=>()=>(e&&(n=e(e=0)),n);function A(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var i=r(()=>{"use strict"});var Z,Oe,w=r(()=>{"use strict";Z=["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"],Oe=new Set(Z)});import{spawnSync as ee}from"node:child_process";function P(e,n){try{let t=ee("git",n,A({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();w()});import{homedir as O}from"node:os";import W from"node:path";function re(e){return e==="~"?O():e.startsWith("~/")||e.startsWith("~\\")?W.join(O(),e.slice(2)):e}function u(e){return W.resolve(re(e))}var c=r(()=>{"use strict"});import{existsSync as g,readFileSync as U}from"node:fs";import{homedir as te}from"node:os";import a from"node:path";import{fileURLToPath as ne}from"node:url";function se(e){let n=a.join(e,"package.json");if(!g(n))return null;try{let t=JSON.parse(U(n,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function ie(e){return se(e)==="kynver"}function B(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 ae(e=import.meta.url){let n=a.dirname(ne(e));for(let t=0;t<8;t+=1){let o=a.join(n,"package.json");if(g(o))try{if(JSON.parse(U(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)||ie(s)&&(e.add(s),n.push({repo:s,source:o}))}function le(e){let n=e?.cwd??process.cwd(),t=new Set,o=[];p(t,o,B(n),"cwd_git");let s=ae(e?.runtimeModuleUrl??import.meta.url);s&&p(t,o,B(s),"runtime_checkout");let l=te();for(let Q of oe)p(t,o,u(a.join(l,Q)),"well_known_path");return o}function h(e){return le(e)[0]??null}var oe,b=r(()=>{"use strict";f();c();oe=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});var y=r(()=>{"use strict"});var T=r(()=>{"use strict"});var Xe,Qe,k=r(()=>{"use strict";Xe=25*1024*1024*1024,Qe=12*1024*1024*1024});var nr,or,D=r(()=>{"use strict";k();nr=5*1024*1024*1024,or=10*1024*1024*1024});var cr,dr,R=r(()=>{"use strict";D();k();cr=30*1024*1024*1024,dr=15*1024*1024*1024});import{homedir as ue}from"node:os";import ce from"node:path";var yr,N=r(()=>{"use strict";m();c();i();yr=ce.join(ue(),".openclaw","harness")});var _=r(()=>{"use strict";N();i()});var I=r(()=>{"use strict";_();i()});var K=r(()=>{"use strict"});var M=r(()=>{"use strict";K();i()});var F=r(()=>{"use strict"});var H=r(()=>{"use strict";F()});var $=r(()=>{"use strict";H();i()});var L=r(()=>{"use strict"});var j=r(()=>{"use strict"});var Y=r(()=>{"use strict"});var S=r(()=>{"use strict"});var G=r(()=>{"use strict";S()});var V=r(()=>{"use strict";M();$();L();j();f();Y();G();S();i()});var z=r(()=>{"use strict";V()});var he,be,J=r(()=>{"use strict";T();m();y();C();R();_();I();z();i();he=500*1024*1024,be=4*1024*1024*1024});var C=r(()=>{"use strict";J()});import{existsSync as xe,mkdirSync as rn,readFileSync as _e,writeFileSync as tn}from"node:fs";import{homedir as Se,totalmem as on}from"node:os";import E from"node:path";function d(){if(!xe(q))return{};try{return JSON.parse(_e(q,"utf8"))}catch{return{}}}var X,q,fn,pn,gn,m=r(()=>{"use strict";b();c();i();y();C();R();X=E.join(Se(),".kynver"),q=E.join(X,"config.json"),fn=E.join(X,"credentials");pn=500*1024*1024,gn=4*1024*1024*1024});m();b();c();import Ce from"node:path";function Ee(e){return Ce.resolve(u(e.trim()))}function v(e,n,t){let o=e?.trim();return o?{repo:Ee(o),source:n,persistedInConfig:t}:null}function ve(e){return e?{repo:e.repo,source:e.source,persistedInConfig:!1}:null}function Ae(e={}){let n=e.env??process.env,t=e.config??d(),o=v(t.defaultRepo,"config",!0);if(o)return o;let s=v(n.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(s)return s;let l=v(n.KYNVER_HARNESS_REPO,"env_harness_repo",!1);return l||ve(h({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl}))}export{Ae as resolveDefaultRepo};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{closeSync as $,existsSync as S,mkdirSync as K,openSync as Y,readdirSync as M,readFileSync as j,unlinkSync as V,writeFileSync as F}from"node:fs";import E from"node:path";function A(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}import{mkdirSync as
|
|
1
|
+
import{closeSync as $,existsSync as S,mkdirSync as K,openSync as Y,readdirSync as M,readFileSync as j,unlinkSync as V,writeFileSync as F}from"node:fs";import E from"node:path";function A(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}import{mkdirSync as D}from"node:fs";import{tmpdir as T}from"node:os";import f from"node:path";import{homedir as w}from"node:os";import _ from"node:path";function C(){let e=process.env.KYNVER_STATE_ROOT;return e?_.resolve(e):_.join(w(),".kynver","state")}function H(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function G(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?f.resolve(e):H()?f.join(T(),"kynver","state","heavy-verification"):f.join(C(),"heavy-verification")}function y(){return f.join(G(),"slots")}function c(){let e=y();return D(e,{recursive:!0}),e}var l=120*6e4,b=1;function U(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function h(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function u(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?U(e,b):b}function L(e){return`slot-${e}`}function W(e,r=y()){return E.join(r,`${e}.json`)}function k(e){if(!S(e))return null;try{let r=JSON.parse(j(e,"utf8"));if(typeof r.slotId=="string"&&typeof r.pid=="number"&&typeof r.acquiredAt=="string"&&typeof r.command=="string")return r}catch{return null}return null}function d(e,r=l){if(!e||!A(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function B(e,r){let t=k(e);if(d(t,r))try{V(e)}catch{}}function J(e){return K(e,{recursive:!0}),e}function R(e={}){let r=J(e.slotsDir??c()),t=e.staleMs??l,o=0;for(let n of M(r)){if(!n.endsWith(".json"))continue;let s=E.join(r,n),i=S(s);B(s,t),i&&!S(s)&&(o+=1)}return o}function X(e={}){let r=e.slotsDir??c(),t=e.staleMs??l;R({slotsDir:r,staleMs:t});let o=[];for(let n of M(r)){if(!n.endsWith(".json"))continue;let s=k(E.join(r,n));s&&!d(s,t)&&o.push(s)}return o}function m(e={}){return X(e).length}function x(e,r={}){if(h())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:u(),reason:null};let t=r.slotsDir??c(),o=r.staleMs??l,n=r.maxSlots??u();R({slotsDir:t,staleMs:o});for(let i=0;i<n;i+=1){let g=L(i),v=W(g,t),p=k(v);if(p&&d(p,o))try{V(v)}catch{}else if(p&&!d(p,o))continue;let N={slotId:g,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let a=Y(v,"wx");F(a,JSON.stringify(N,null,2),"utf8"),$(a);let O=m({slotsDir:t,staleMs:o});return{admitted:!0,slotId:g,activeSlots:O,maxSlots:n,reason:null}}catch(a){if(a.code==="EEXIST")continue;throw a}}let s=m({slotsDir:t,staleMs:o});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:n,reason:`heavy verification at capacity (${s}/${n} slots)`}}function P(e,r={}){if(h())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:u(),reason:null};let t=r.slotsDir??c(),o=r.staleMs??l,n=r.maxSlots??u();R({slotsDir:t,staleMs:o});let s=m({slotsDir:t,staleMs:o}),i=s<n;return{admitted:i,slotId:null,activeSlots:s,maxSlots:n,reason:i?null:`heavy verification at capacity (${s}/${n} slots); waiting for ${e}`}}import{spawnSync as q}from"node:child_process";function z(e){e<=0||q(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Q(e,r,t=2e3,o={}){let n=Date.now()+Math.max(0,r),s=x(e,o);for(;!s.admitted&&Date.now()<n;)z(Math.min(t,n-Date.now())),s=x(e,o);return s}var Z=["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"],Ee=new Set(Z);var ee={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},Te=Object.keys(ee);function I(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let o=t.map(n=>Number.parseInt(n,10));if(o.some(n=>!Number.isFinite(n)||n<0))return null;for(;o.length<3;)o.push(0);return[o[0],o[1],o[2]]}function re(e,r){let t=I(e),o=I(r);if(!t||!o)return 0;for(let n=0;n<3;n+=1){if(t[n]>o[n])return 1;if(t[n]<o[n])return-1}return 0}export{P as assessHeavyVerificationGate,re as compareSemver,m as countActiveHeavyVerificationSlots,h as isHeavyVerificationGateSkipped,u as resolveHeavyVerificationMaxConcurrent,Q as waitForHeavyVerificationSlot};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readFile as
|
|
2
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Y(e={}){let r=
|
|
1
|
+
import{readFile as me}from"node:fs/promises";import{homedir as de}from"node:os";import l from"node:path";import{existsSync as T,readFileSync as se}from"node:fs";import d from"node:path";import{existsSync as P,readFileSync as I}from"node:fs";import{homedir as Z}from"node:os";import a from"node:path";import{fileURLToPath as q}from"node:url";import{spawnSync as X}from"node:child_process";function M(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}var z=["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"],be=new Set(z);function b(e,r){try{let t=X("git",r,M({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}}}import{homedir as x}from"node:os";import w from"node:path";function Q(e){return e==="~"?x():e.startsWith("~/")||e.startsWith("~\\")?w.join(x(),e.slice(2)):e}function N(e){return w.resolve(Q(e))}var ee=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"];function re(e){let r=a.join(e,"package.json");if(!P(r))return null;try{let t=JSON.parse(I(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function te(e){return re(e)==="kynver"}function O(e){let r=a.resolve(e);if(!P(r))return null;let t=b(r,["rev-parse","--show-toplevel"]);if(t.status!==0)return null;let n=t.stdout.trim();return n.length?a.resolve(n):null}function ne(e=import.meta.url){let r=a.dirname(q(e));for(let t=0;t<8;t+=1){let n=a.join(r,"package.json");if(P(n))try{if(JSON.parse(I(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=a.dirname(r);if(o===r)break;r=o}return null}function v(e,r,t,n){if(!t)return;let o=a.resolve(t);e.has(o)||te(o)&&(e.add(o),r.push({repo:o,source:n}))}function oe(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];v(t,n,O(r),"cwd_git");let o=ne(e?.runtimeModuleUrl??import.meta.url);o&&v(t,n,O(o),"runtime_checkout");let i=Z();for(let s of ee)v(t,n,N(a.join(i,s)),"well_known_path");return n}function V(e){return oe(e)[0]??null}var D={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},K=Object.keys(D),E={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},ie={"@kynver-app/runtime":"packages/kynver-runtime/package.json","@kynver-app/openclaw-agent-os":"packages/kynver-openclaw-agent-os/package.json","@kynver-app/mcp-agent-os":"packages/kynver-mcp-agent-os/package.json"};function G(e){let r=e.trim().split("-")[0]?.split("+")[0];if(!r)return null;let t=r.split(".");if(t.length<1||t.length>3)return null;let n=t.map(o=>Number.parseInt(o,10));if(n.some(o=>!Number.isFinite(o)||o<0))return null;for(;n.length<3;)n.push(0);return[n[0],n[1],n[2]]}function f(e,r){let t=G(e),n=G(r);if(!t||!n)return 0;for(let o=0;o<3;o+=1){if(t[o]>n[o])return 1;if(t[o]<n[o])return-1}return 0}function $(e,r){return f(e,r)>=0}function ae(e){let r=null;for(let t of e)(!r||f(t,r)>0)&&(r=t);return r}function ue(e){try{let r=JSON.parse(se(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function ce(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let i=d.resolve(o);if(T(d.join(i,"packages/kynver-runtime/package.json"))&&T(d.join(i,"package.json")))return i}return V({cwd:e})?.repo??null}function j(e={}){let r=e.cwd??process.cwd(),t=ce(r,e.repoRoot);if(!t)return{};let n={};for(let o of K){let i=d.join(t,ie[o]),s=ue(i);s&&(n[o]={version:s,source:"repo",path:i})}return n}function le(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function pe(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:i}=e,s=[];return i&&$(i,t)?(s.push(`Use the monorepo checkout (${i}) instead of a stale npm install: ${le(r).join("; ")}.`),s.push("Do not publish npm packages or wait on an operator release."),s):(n?s.push(`Upgrade ${r} from ${n} to >= ${t} (npm install -g ${r}@latest or align OpenClaw npm prefix).`):s.push(`Install ${r} >= ${t} before running memory-heavy AgentOS paths.`),r==="@kynver-app/runtime"&&s.push("Repo-source alternative: npm run kynver:build && npm run kynver"),o==="installed"&&i&&s.push(`Repo checkout reports ${i}; rebuild/link repo source if you develop from the monorepo.`),s)}function ge(e){if(e.length===0)return{version:null,source:"unknown"};let r=ae(e.map(n=>n.version));if(!r)return{version:null,source:"unknown"};let t=e.find(n=>n.version===r)??e[0];return{version:t.version,source:t.source}}function C(e={}){let r=(s,u)=>s?typeof s=="string"?{version:s,source:u}:s:null,t=K.map(s=>{let u=D[s],g=[],_=r(e.installed?.[s],"installed"),y=r(e.repo?.[s],"repo"),A=r(e.self?.[s],"self");_&&g.push(_),y&&g.push(y),A&&g.push(A);let{version:c,source:m}=ge(g),B=y?.version??null,k=c?$(c,u):!1,J=k?[]:pe({packageName:s,minimumVersion:u,effectiveVersion:c,effectiveSource:m,repoVersion:B}),W=k?`${E[s]} ${c} meets memory-cost minimum ${u} (${m}).`:`${E[s]} is below memory-cost minimum ${u}`+(c?` (effective ${c} via ${m})`:" (no version detected)")+".";return{packageName:s,displayName:E[s],minimumVersion:u,effectiveVersion:c,effectiveSource:m,ok:k,summary:W,remediation:J}}),n=t.filter(s=>!s.ok),o=n.length===0,i=o?"All managed AgentOS packages meet memory-cost minimum versions.":`Memory-cost package guard blocked ${n.length} stale package(s): ${n.map(s=>`${s.packageName} < ${s.minimumVersion}`).join("; ")}.`;return{ok:o,summary:i,packages:t}}var R=class extends Error{result;constructor(r){let t=[r.summary,...r.packages.filter(n=>!n.ok).flatMap(n=>[`- ${n.summary}`,...n.remediation.map(o=>` \u2192 ${o}`)])];super(t.join(`
|
|
2
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function Y(e={}){let r=C(e);if(!r.ok)throw new R(r);return r}var fe=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function p(e){let r=e?.trim();return r||null}function ye(e){return[...new Set(e.filter(r=>!!r))]}function ke(){let e=de(),r=p(process.env.KYNVER_OPENCLAW_NPM_ROOT)??p(process.env.OPENCLAW_NPM_ROOT)??l.join(e,".openclaw","npm"),t=p(process.env.KYNVER_NPM_GLOBAL_ROOT)??p(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(p(process.env.NPM_CONFIG_PREFIX)?l.join(p(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):l.join(e,".npm-global","lib","node_modules"));return ye([l.join(r,"lib","node_modules"),l.join(r,"node_modules"),t.endsWith("node_modules")?t:l.join(t,"lib","node_modules")])}async function ve(e){try{let r=JSON.parse(await me(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function Pe(e){let r=ke(),t=new Set,n=[];for(let o of r){let i=l.join(o,e,"package.json");t.has(i)||(t.add(i),n.push(i))}return n}async function L(e=new Date().toISOString()){let r={};for(let t of fe){let n=null;for(let o of Pe(t)){let i=await ve(o);i&&(!n||f(i,n.version)>0)&&(n={version:i,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}import{existsSync as Ee,readFileSync as Re}from"node:fs";import{dirname as S,join as U}from"node:path";import{fileURLToPath as F}from"node:url";function Ce(e){let r=S(F(e));for(let t=0;t<6;t+=1){if(Ee(U(r,"package.json")))return r;let n=S(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${S(F(e))}`)}function Se(e=import.meta.url){let r=U(Ce(e),"package.json"),t=JSON.parse(Re(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var H=Se();function he(e){let r={};for(let[t,n]of Object.entries(e))n?.version&&(r[t]={version:n.version,source:"installed",path:n.path});return r}async function h(e={}){let[r,t]=await Promise.all([L(),Promise.resolve(j({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:H;return n["@kynver-app/runtime"]={version:o,source:"self"},e.selfPackageName&&e.selfVersion&&e.selfPackageName!=="@kynver-app/runtime"&&(n[e.selfPackageName]={version:e.selfVersion,source:"self"}),{installed:he(r),repo:t,self:n}}async function _e(e={}){let r=await h(e);return C(r)}async function Ae(e={}){let r=await h(e);return Y(r)}export{h as buildMemoryCostPackageGuardInput,Ae as enforceMemoryCostPackageGuardAtStartup,_e as evaluateMemoryCostPackageGuardAtStartup};
|